signup-reward.js
767 Bytes
import { BillingAction } from './action-policies.js'
/** @param {{ actionPolicies:{ find:Function }, grant:Function }} billing */
export function createSignupReward(billing) {
async function apply({ user_id }) {
const policy = await billing.actionPolicies.find(BillingAction.SIGNUP_REWARD)
if (policy === null || !policy.enabled) return { applied: false }
const result = await billing.grant({
user_id,
amount: policy.points,
source: 'visual_game_signup',
credit_kind: 'admin',
reason: 'signup_gift',
idempotency_key: `signup_reward:${user_id}`,
})
return {
applied: true,
replayed: result.replayed,
points: policy.points,
ledger_id: result.ledger_id,
}
}
return { apply }
}