action-policies.js 887 Bytes
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)}`)
}