export const BillingAction = Object.freeze({ DAILY_CLAIM: 'daily_claim', TURN_PLAY: 'turn_play', FULL_RUN_VIDEO: 'full_run_video', SIGNUP_REWARD: 'signup_reward', }) export function createActionPolicies(repo) { async function find(action) { assertActionName(action) return repo.findActionPolicy(action) } async function get(action) { const policy = await find(action) if (policy === null) throw new Error(`Missing billing_action_policy, action=${action}`) return policy } async function list() { return repo.listActionPolicies() } async function update(policy) { assertActionName(policy.action) return repo.updateActionPolicy(policy) } return { find, get, list, update } } function assertActionName(action) { if (typeof action !== 'string' || action === '') throw new Error(`Invalid billing action: ${String(action)}`) }