- • Admin authentication: BCrypt password + TOTP 2FA + JWT session + revocable tokens
- • RBAC: roles (SUPER_ADMIN / OPS / RISK / FINANCE), permission codes, @RequirePermission
- • Step-up confirm tokens for sensitive operations (@RequireConfirm + one-shot token)
- • Append-only audit trail via @AdminAudit aspect on all state-changing operations
- • Prize shipment (produces prize.physical.shipped) + refund (produces prize.physical.refunded)
- • Withdrawal review queue (approve → calls wallet Feign, reject → same)
- • Escalation queue: BTC exposure alert, VRF timeout, withdraw failure
- • Writes ONLY
one_admin tables; reads other schemas via Feign only
- Produces:
prize.physical.shipped — after ops records carrier + tracking number
- Produces:
prize.physical.refunded — after ops manually refunds any-state prize
- Consumes:
chain.btc.exposure.alert — audit + escalation
- Consumes:
game.draw.timeout — ops intervention queue (keep / BACKEND fallback / cancel)
- Consumes:
wallet.withdraw.failed — ops review escalation
- • MySQL
one_admin — 7 tables (auth + RBAC + audit + confirm token), V1 migration
- • Kafka — 2 topics produced, 3 consumed
- • Feign: IGameService (create/pause/force-draw), IWalletService (withdraw list / approve)
- • Feign: IUserService (user lookup), IAgentService (tree / flag), IChainService (treasury)
- • Exposes IAdminService to all other services (audit-log, submit-for-audit, escalate endpoints)