@openora/core 0.4.0 → 0.4.1-canary.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-COMMERCIAL.md +2 -2
- package/README.md +8 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/admin-console/__tests__/backoffice.service.test.js +1 -1
- package/dist/admin-console/__tests__/backoffice.service.test.js.map +1 -1
- package/dist/admin-console/contract/index.d.ts +14 -14
- package/dist/admin-console/contract/index.d.ts.map +1 -1
- package/dist/admin-console/contract/index.js +8 -8
- package/dist/admin-console/contract/index.js.map +1 -1
- package/dist/admin-console/router/index.d.ts +7 -7
- package/dist/admin-console/service/backoffice.service.d.ts +22 -49
- package/dist/admin-console/service/backoffice.service.d.ts.map +1 -1
- package/dist/admin-console/service/backoffice.service.js +16 -31
- package/dist/admin-console/service/backoffice.service.js.map +1 -1
- package/dist/audit/__tests__/audit.service.test.js +29 -2
- package/dist/audit/__tests__/audit.service.test.js.map +1 -1
- package/dist/audit/contract/index.d.ts.map +1 -1
- package/dist/audit/contract/index.js +2 -0
- package/dist/audit/contract/index.js.map +1 -1
- package/dist/audit/plugin.d.ts.map +1 -1
- package/dist/audit/plugin.js +54 -4
- package/dist/audit/plugin.js.map +1 -1
- package/dist/audit/service/audit.service.d.ts +1 -0
- package/dist/audit/service/audit.service.d.ts.map +1 -1
- package/dist/audit/service/audit.service.js +53 -25
- package/dist/audit/service/audit.service.js.map +1 -1
- package/dist/casino/gaming/contract/index.d.ts.map +1 -1
- package/dist/casino/gaming/contract/index.js +3 -3
- package/dist/casino/gaming/contract/index.js.map +1 -1
- package/dist/casino/gaming/drizzle/migrations/0001_easy_ben_grimm.sql +4 -0
- package/dist/casino/gaming/drizzle/migrations/meta/0001_snapshot.json +188 -0
- package/dist/casino/gaming/drizzle/migrations/meta/_journal.json +7 -0
- package/dist/casino/gaming/schema/index.js +2 -2
- package/dist/casino/gaming/schema/index.js.map +1 -1
- package/dist/casino/gaming/service/gaming.service.d.ts +11 -11
- package/dist/casino/gaming/service/gaming.service.d.ts.map +1 -1
- package/dist/casino/gaming/service/gaming.service.js +4 -14
- package/dist/casino/gaming/service/gaming.service.js.map +1 -1
- package/dist/cms/__tests__/cms.cache.test.js +1 -1
- package/dist/cms/__tests__/cms.cache.test.js.map +1 -1
- package/dist/cms/__tests__/cms.router.test.d.ts +2 -0
- package/dist/cms/__tests__/cms.router.test.d.ts.map +1 -0
- package/dist/cms/__tests__/cms.router.test.js +51 -0
- package/dist/cms/__tests__/cms.router.test.js.map +1 -0
- package/dist/cms/router/index.d.ts.map +1 -1
- package/dist/cms/router/index.js +12 -12
- package/dist/cms/router/index.js.map +1 -1
- package/dist/cms/service/cms.service.d.ts +7 -7
- package/dist/cms/service/cms.service.d.ts.map +1 -1
- package/dist/cms/service/cms.service.js +39 -23
- package/dist/cms/service/cms.service.js.map +1 -1
- package/dist/compliance/__tests__/compliance.service.test.js +2 -1
- package/dist/compliance/__tests__/compliance.service.test.js.map +1 -1
- package/dist/compliance/__tests__/kyc.service.test.js +12 -10
- package/dist/compliance/__tests__/kyc.service.test.js.map +1 -1
- package/dist/compliance/__tests__/rg-monitoring.service.test.js +17 -6
- package/dist/compliance/__tests__/rg-monitoring.service.test.js.map +1 -1
- package/dist/compliance/__tests__/rg.contract.test.js +18 -10
- package/dist/compliance/__tests__/rg.contract.test.js.map +1 -1
- package/dist/compliance/__tests__/rg.router.test.js +5 -4
- package/dist/compliance/__tests__/rg.router.test.js.map +1 -1
- package/dist/compliance/__tests__/rg.service.test.js +18 -12
- package/dist/compliance/__tests__/rg.service.test.js.map +1 -1
- package/dist/compliance/contract/index.d.ts +20 -14
- package/dist/compliance/contract/index.d.ts.map +1 -1
- package/dist/compliance/contract/limits.d.ts +9 -2
- package/dist/compliance/contract/limits.d.ts.map +1 -1
- package/dist/compliance/contract/limits.js +21 -3
- package/dist/compliance/contract/limits.js.map +1 -1
- package/dist/compliance/contract/rg.d.ts +28 -23
- package/dist/compliance/contract/rg.d.ts.map +1 -1
- package/dist/compliance/contract/rg.js +14 -9
- package/dist/compliance/contract/rg.js.map +1 -1
- package/dist/compliance/drizzle/migrations/0001_funny_vance_astro.sql +5 -0
- package/dist/compliance/drizzle/migrations/meta/0001_snapshot.json +660 -0
- package/dist/compliance/drizzle/migrations/meta/_journal.json +7 -0
- package/dist/compliance/plugin.d.ts.map +1 -1
- package/dist/compliance/plugin.js +26 -12
- package/dist/compliance/plugin.js.map +1 -1
- package/dist/compliance/router/index.d.ts +20 -14
- package/dist/compliance/router/index.d.ts.map +1 -1
- package/dist/compliance/router/index.js +2 -1
- package/dist/compliance/router/index.js.map +1 -1
- package/dist/compliance/schema/index.d.ts +31 -14
- package/dist/compliance/schema/index.d.ts.map +1 -1
- package/dist/compliance/schema/index.js +10 -7
- package/dist/compliance/schema/index.js.map +1 -1
- package/dist/compliance/service/compliance.service.d.ts +27 -22
- package/dist/compliance/service/compliance.service.d.ts.map +1 -1
- package/dist/compliance/service/compliance.service.js +9 -22
- package/dist/compliance/service/compliance.service.js.map +1 -1
- package/dist/compliance/service/kyc.service.d.ts +22 -19
- package/dist/compliance/service/kyc.service.d.ts.map +1 -1
- package/dist/compliance/service/kyc.service.js +19 -24
- package/dist/compliance/service/kyc.service.js.map +1 -1
- package/dist/compliance/service/re-kyc-trigger.d.ts +4 -4
- package/dist/compliance/service/re-kyc-trigger.d.ts.map +1 -1
- package/dist/compliance/service/re-kyc-trigger.js +10 -6
- package/dist/compliance/service/re-kyc-trigger.js.map +1 -1
- package/dist/compliance/service/rg-eval.d.ts.map +1 -1
- package/dist/compliance/service/rg-eval.js +4 -2
- package/dist/compliance/service/rg-eval.js.map +1 -1
- package/dist/compliance/service/rg-monitoring.service.d.ts +6 -5
- package/dist/compliance/service/rg-monitoring.service.d.ts.map +1 -1
- package/dist/compliance/service/rg-monitoring.service.js +62 -31
- package/dist/compliance/service/rg-monitoring.service.js.map +1 -1
- package/dist/compliance/service/rg.service.d.ts +28 -6
- package/dist/compliance/service/rg.service.d.ts.map +1 -1
- package/dist/compliance/service/rg.service.js +60 -34
- package/dist/compliance/service/rg.service.js.map +1 -1
- package/dist/contracts/adapters/admin-wallet-reporting.d.ts +5 -5
- package/dist/contracts/adapters/payment.d.ts +2 -2
- package/dist/contracts/adapters/wallet-commands.d.ts +5 -5
- package/dist/contracts/adapters/wallet-reader.d.ts +2 -2
- package/dist/contracts/adapters/wallet-reader.d.ts.map +1 -1
- package/dist/contracts/schemas/common.d.ts +2 -5
- package/dist/contracts/schemas/common.d.ts.map +1 -1
- package/dist/contracts/schemas/common.js +3 -4
- package/dist/contracts/schemas/common.js.map +1 -1
- package/dist/contracts/schemas/events.d.ts +35 -9
- package/dist/contracts/schemas/events.d.ts.map +1 -1
- package/dist/contracts/schemas/events.js +32 -7
- package/dist/contracts/schemas/events.js.map +1 -1
- package/dist/contracts/schemas/platform-config.d.ts +9 -9
- package/dist/contracts/schemas/platform-config.d.ts.map +1 -1
- package/dist/contracts/schemas/platform-config.js +6 -5
- package/dist/contracts/schemas/platform-config.js.map +1 -1
- package/dist/contracts/schemas/player.d.ts +2 -2
- package/dist/contracts/schemas/player.js +3 -3
- package/dist/contracts/schemas/player.js.map +1 -1
- package/dist/contracts/schemas/tag.d.ts +2 -2
- package/dist/contracts/schemas/tag.js +3 -3
- package/dist/contracts/schemas/tag.js.map +1 -1
- package/dist/engagement/chat/moderation/moderate.d.ts.map +1 -1
- package/dist/engagement/chat/moderation/moderate.js +2 -1
- package/dist/engagement/chat/moderation/moderate.js.map +1 -1
- package/dist/engagement/chat/react/use-chat-stream.d.ts +2 -3
- package/dist/engagement/chat/react/use-chat-stream.d.ts.map +1 -1
- package/dist/engagement/chat/react/use-chat-stream.js +4 -2
- package/dist/engagement/chat/react/use-chat-stream.js.map +1 -1
- package/dist/engagement/chat/router/index.d.ts.map +1 -1
- package/dist/engagement/chat/router/index.js +2 -1
- package/dist/engagement/chat/router/index.js.map +1 -1
- package/dist/engagement/chat/service/chat.service.d.ts.map +1 -1
- package/dist/engagement/chat/service/chat.service.js +22 -11
- package/dist/engagement/chat/service/chat.service.js.map +1 -1
- package/dist/engagement/notifications/__tests__/notifications.service.test.js +4 -3
- package/dist/engagement/notifications/__tests__/notifications.service.test.js.map +1 -1
- package/dist/engagement/notifications/contract/index.d.ts +24 -2
- package/dist/engagement/notifications/contract/index.d.ts.map +1 -1
- package/dist/engagement/notifications/contract/index.js +10 -1
- package/dist/engagement/notifications/contract/index.js.map +1 -1
- package/dist/engagement/notifications/index.d.ts +1 -1
- package/dist/engagement/notifications/index.d.ts.map +1 -1
- package/dist/engagement/notifications/plugin.d.ts.map +1 -1
- package/dist/engagement/notifications/plugin.js +6 -3
- package/dist/engagement/notifications/plugin.js.map +1 -1
- package/dist/engagement/notifications/router/index.d.ts +4 -1
- package/dist/engagement/notifications/router/index.d.ts.map +1 -1
- package/dist/engagement/notifications/router/index.js +15 -6
- package/dist/engagement/notifications/router/index.js.map +1 -1
- package/dist/engagement/notifications/service/notifications.service.d.ts +6 -13
- package/dist/engagement/notifications/service/notifications.service.d.ts.map +1 -1
- package/dist/engagement/notifications/service/notifications.service.js +6 -14
- package/dist/engagement/notifications/service/notifications.service.js.map +1 -1
- package/dist/iam/__tests__/iam.service.test.js +14 -9
- package/dist/iam/__tests__/iam.service.test.js.map +1 -1
- package/dist/iam/plugin.d.ts.map +1 -1
- package/dist/iam/plugin.js +4 -2
- package/dist/iam/plugin.js.map +1 -1
- package/dist/iam/seed/seed-default-roles.d.ts.map +1 -1
- package/dist/iam/seed/seed-default-roles.js +2 -1
- package/dist/iam/seed/seed-default-roles.js.map +1 -1
- package/dist/iam/service/iam.service.d.ts +19 -17
- package/dist/iam/service/iam.service.d.ts.map +1 -1
- package/dist/iam/service/iam.service.js +68 -34
- package/dist/iam/service/iam.service.js.map +1 -1
- package/dist/pam/identity/admin-user-directory.d.ts.map +1 -1
- package/dist/pam/identity/admin-user-directory.js +18 -9
- package/dist/pam/identity/admin-user-directory.js.map +1 -1
- package/dist/pam/identity/router/index.d.ts.map +1 -1
- package/dist/pam/identity/router/index.js +4 -2
- package/dist/pam/identity/router/index.js.map +1 -1
- package/dist/pam/identity/service/identity.service.d.ts +24 -2
- package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
- package/dist/pam/identity/service/identity.service.js +51 -19
- package/dist/pam/identity/service/identity.service.js.map +1 -1
- package/dist/pam/identity/service/login-enforcement.service.d.ts +3 -3
- package/dist/pam/identity/service/login-enforcement.service.d.ts.map +1 -1
- package/dist/pam/identity/service/login-enforcement.service.js.map +1 -1
- package/dist/pam/identity/service/session.service.d.ts +5 -3
- package/dist/pam/identity/service/session.service.d.ts.map +1 -1
- package/dist/pam/identity/service/session.service.js +3 -3
- package/dist/pam/identity/service/session.service.js.map +1 -1
- package/dist/pam/player-management/__tests__/kyc-status-writer.test.js +2 -1
- package/dist/pam/player-management/__tests__/kyc-status-writer.test.js.map +1 -1
- package/dist/pam/player-management/__tests__/player.router.test.js +2 -2
- package/dist/pam/player-management/__tests__/player.router.test.js.map +1 -1
- package/dist/pam/player-management/__tests__/player.service.test.js +2 -1
- package/dist/pam/player-management/__tests__/player.service.test.js.map +1 -1
- package/dist/pam/player-management/contract/index.d.ts +10 -10
- package/dist/pam/player-management/router/index.d.ts +8 -8
- package/dist/pam/player-management/service/kyc-status-writer.d.ts.map +1 -1
- package/dist/pam/player-management/service/kyc-status-writer.js +2 -1
- package/dist/pam/player-management/service/kyc-status-writer.js.map +1 -1
- package/dist/pam/player-management/service/player.service.d.ts +15 -15
- package/dist/pam/player-management/service/player.service.d.ts.map +1 -1
- package/dist/pam/player-management/service/player.service.js +15 -12
- package/dist/pam/player-management/service/player.service.js.map +1 -1
- package/dist/pam/player-note/schema/index.d.ts +4 -4
- package/dist/pam/player-note/schema/index.js +6 -6
- package/dist/pam/player-note/schema/index.js.map +1 -1
- package/dist/pam/player-note/service/player-note.service.d.ts +11 -3
- package/dist/pam/player-note/service/player-note.service.d.ts.map +1 -1
- package/dist/pam/player-note/service/player-note.service.js +1 -1
- package/dist/pam/player-note/service/player-note.service.js.map +1 -1
- package/dist/pam/profile/__tests__/profile.service.test.js +2 -1
- package/dist/pam/profile/__tests__/profile.service.test.js.map +1 -1
- package/dist/pam/profile/contract/index.d.ts +4 -4
- package/dist/pam/profile/react/profile.d.ts +6 -7
- package/dist/pam/profile/react/profile.d.ts.map +1 -1
- package/dist/pam/profile/react/profile.js.map +1 -1
- package/dist/pam/profile/router/index.d.ts +4 -4
- package/dist/pam/profile/service/profile.service.d.ts +4 -4
- package/dist/pam/profile/service/profile.service.d.ts.map +1 -1
- package/dist/pam/profile/service/profile.service.js +2 -1
- package/dist/pam/profile/service/profile.service.js.map +1 -1
- package/dist/pam/shared/headers-mapper.d.ts.map +1 -1
- package/dist/pam/shared/headers-mapper.js +2 -1
- package/dist/pam/shared/headers-mapper.js.map +1 -1
- package/dist/pam/shared/player-mapper.d.ts +17 -2
- package/dist/pam/shared/player-mapper.d.ts.map +1 -1
- package/dist/pam/shared/player-mapper.js +2 -2
- package/dist/pam/shared/player-mapper.js.map +1 -1
- package/dist/pam/tag/__tests__/get-active-tag-keys.test.js +2 -1
- package/dist/pam/tag/__tests__/get-active-tag-keys.test.js.map +1 -1
- package/dist/pam/tag/__tests__/tag-evaluation.service.test.js +19 -18
- package/dist/pam/tag/__tests__/tag-evaluation.service.test.js.map +1 -1
- package/dist/pam/tag/__tests__/tag-mappers.test.js +6 -6
- package/dist/pam/tag/__tests__/tag-mappers.test.js.map +1 -1
- package/dist/pam/tag/__tests__/tag-rule.service.test.js +14 -14
- package/dist/pam/tag/__tests__/tag-rule.service.test.js.map +1 -1
- package/dist/pam/tag/__tests__/tag.router.test.d.ts +2 -0
- package/dist/pam/tag/__tests__/tag.router.test.d.ts.map +1 -0
- package/dist/pam/tag/__tests__/tag.router.test.js +38 -0
- package/dist/pam/tag/__tests__/tag.router.test.js.map +1 -0
- package/dist/pam/tag/contract/index.d.ts +3 -3
- package/dist/pam/tag/drizzle/migrations/0001_neat_iron_monger.sql +2 -0
- package/dist/pam/tag/drizzle/migrations/meta/0001_snapshot.json +295 -0
- package/dist/pam/tag/drizzle/migrations/meta/_journal.json +7 -0
- package/dist/pam/tag/router/index.d.ts +3 -3
- package/dist/pam/tag/schema/index.d.ts +16 -16
- package/dist/pam/tag/schema/index.d.ts.map +1 -1
- package/dist/pam/tag/schema/index.js +19 -19
- package/dist/pam/tag/schema/index.js.map +1 -1
- package/dist/pam/tag/seed/data/default-tag-rules.js +6 -6
- package/dist/pam/tag/seed/data/default-tag-rules.js.map +1 -1
- package/dist/pam/tag/seed/seed-default-tag-rules.d.ts.map +1 -1
- package/dist/pam/tag/seed/seed-default-tag-rules.js +5 -3
- package/dist/pam/tag/seed/seed-default-tag-rules.js.map +1 -1
- package/dist/pam/tag/service/tag-evaluation.service.d.ts.map +1 -1
- package/dist/pam/tag/service/tag-evaluation.service.js +32 -18
- package/dist/pam/tag/service/tag-evaluation.service.js.map +1 -1
- package/dist/pam/tag/service/tag-mappers.d.ts +8 -2
- package/dist/pam/tag/service/tag-mappers.d.ts.map +1 -1
- package/dist/pam/tag/service/tag-mappers.js +3 -8
- package/dist/pam/tag/service/tag-mappers.js.map +1 -1
- package/dist/pam/tag/service/tag-rule.service.d.ts +34 -4
- package/dist/pam/tag/service/tag-rule.service.d.ts.map +1 -1
- package/dist/pam/tag/service/tag-rule.service.js +9 -15
- package/dist/pam/tag/service/tag-rule.service.js.map +1 -1
- package/dist/pam/tag/service/tag.service.d.ts +51 -8
- package/dist/pam/tag/service/tag.service.d.ts.map +1 -1
- package/dist/pam/tag/service/tag.service.js +6 -11
- package/dist/pam/tag/service/tag.service.js.map +1 -1
- package/dist/react/context/api-client.d.ts.map +1 -1
- package/dist/react/context/api-client.js +14 -7
- package/dist/react/context/api-client.js.map +1 -1
- package/dist/react/hooks/use-event-stream.d.ts.map +1 -1
- package/dist/react/hooks/use-event-stream.js +6 -3
- package/dist/react/hooks/use-event-stream.js.map +1 -1
- package/dist/react/hooks/use-paginated-list.js +3 -3
- package/dist/react/hooks/use-paginated-list.js.map +1 -1
- package/dist/server/auth/admin-guard.d.ts +12 -0
- package/dist/server/auth/admin-guard.d.ts.map +1 -1
- package/dist/server/auth/admin-guard.js +14 -1
- package/dist/server/auth/admin-guard.js.map +1 -1
- package/dist/server/auth/auth.d.ts +9 -0
- package/dist/server/auth/auth.d.ts.map +1 -1
- package/dist/server/auth/auth.js +9 -1
- package/dist/server/auth/auth.js.map +1 -1
- package/dist/server/auth/permission-levels.d.ts.map +1 -1
- package/dist/server/auth/permission-levels.js +12 -6
- package/dist/server/auth/permission-levels.js.map +1 -1
- package/dist/server/db/drizzle.d.ts.map +1 -1
- package/dist/server/db/drizzle.js +2 -1
- package/dist/server/db/drizzle.js.map +1 -1
- package/dist/server/db/drizzle.service.d.ts.map +1 -1
- package/dist/server/db/drizzle.service.js +2 -1
- package/dist/server/db/drizzle.service.js.map +1 -1
- package/dist/server/db/index.d.ts +1 -1
- package/dist/server/db/index.d.ts.map +1 -1
- package/dist/server/db/index.js +1 -1
- package/dist/server/db/index.js.map +1 -1
- package/dist/server/db/migrate.d.ts.map +1 -1
- package/dist/server/db/migrate.js +2 -1
- package/dist/server/db/migrate.js.map +1 -1
- package/dist/server/db/outbox/__tests__/relay.test.js +4 -2
- package/dist/server/db/outbox/__tests__/relay.test.js.map +1 -1
- package/dist/server/db/outbox/relay.d.ts +15 -0
- package/dist/server/db/outbox/relay.d.ts.map +1 -1
- package/dist/server/db/outbox/relay.js +21 -14
- package/dist/server/db/outbox/relay.js.map +1 -1
- package/dist/server/db/query-helpers.d.ts +2 -0
- package/dist/server/db/query-helpers.d.ts.map +1 -1
- package/dist/server/db/query-helpers.js +28 -1
- package/dist/server/db/query-helpers.js.map +1 -1
- package/dist/server/kernel/__tests__/event-bus.test.js +10 -7
- package/dist/server/kernel/__tests__/event-bus.test.js.map +1 -1
- package/dist/server/kernel/__tests__/job-queue.test.js +5 -2
- package/dist/server/kernel/__tests__/job-queue.test.js.map +1 -1
- package/dist/server/kernel/__tests__/rate-limiter.test.js +10 -5
- package/dist/server/kernel/__tests__/rate-limiter.test.js.map +1 -1
- package/dist/server/kernel/__tests__/redis-cache.test.js +2 -1
- package/dist/server/kernel/__tests__/redis-cache.test.js.map +1 -1
- package/dist/server/kernel/bullmq-job-queue.d.ts +12 -0
- package/dist/server/kernel/bullmq-job-queue.d.ts.map +1 -1
- package/dist/server/kernel/bullmq-job-queue.js +21 -4
- package/dist/server/kernel/bullmq-job-queue.js.map +1 -1
- package/dist/server/kernel/cache.d.ts.map +1 -1
- package/dist/server/kernel/cache.js +14 -7
- package/dist/server/kernel/cache.js.map +1 -1
- package/dist/server/kernel/container.d.ts +10 -0
- package/dist/server/kernel/container.d.ts.map +1 -1
- package/dist/server/kernel/container.js +12 -1
- package/dist/server/kernel/container.js.map +1 -1
- package/dist/server/kernel/event-bus.d.ts +9 -0
- package/dist/server/kernel/event-bus.d.ts.map +1 -1
- package/dist/server/kernel/event-bus.js +9 -1
- package/dist/server/kernel/event-bus.js.map +1 -1
- package/dist/server/kernel/event-stream.d.ts.map +1 -1
- package/dist/server/kernel/event-stream.js +2 -1
- package/dist/server/kernel/event-stream.js.map +1 -1
- package/dist/server/kernel/job-queue.d.ts +12 -0
- package/dist/server/kernel/job-queue.d.ts.map +1 -1
- package/dist/server/kernel/job-queue.js +38 -15
- package/dist/server/kernel/job-queue.js.map +1 -1
- package/dist/server/kernel/ownership.d.ts.map +1 -1
- package/dist/server/kernel/ownership.js +2 -1
- package/dist/server/kernel/ownership.js.map +1 -1
- package/dist/server/kernel/platform-config-loader.d.ts.map +1 -1
- package/dist/server/kernel/platform-config-loader.js +34 -16
- package/dist/server/kernel/platform-config-loader.js.map +1 -1
- package/dist/server/kernel/rate-limiter.d.ts.map +1 -1
- package/dist/server/kernel/rate-limiter.js +6 -3
- package/dist/server/kernel/rate-limiter.js.map +1 -1
- package/dist/server/kernel/realtime-transport.d.ts.map +1 -1
- package/dist/server/kernel/realtime-transport.js +10 -5
- package/dist/server/kernel/realtime-transport.js.map +1 -1
- package/dist/server/kernel/redis-cache.d.ts.map +1 -1
- package/dist/server/kernel/redis-cache.js +10 -5
- package/dist/server/kernel/redis-cache.js.map +1 -1
- package/dist/server/kernel/redis-rate-limiter.d.ts +11 -0
- package/dist/server/kernel/redis-rate-limiter.d.ts.map +1 -1
- package/dist/server/kernel/redis-rate-limiter.js +13 -1
- package/dist/server/kernel/redis-rate-limiter.js.map +1 -1
- package/dist/server/kernel/serialize-row.d.ts.map +1 -1
- package/dist/server/kernel/serialize-row.js +4 -2
- package/dist/server/kernel/serialize-row.js.map +1 -1
- package/dist/server/plugin-host/load-extensions.js +2 -1
- package/dist/server/plugin-host/load-extensions.js.map +1 -1
- package/dist/server/plugin-host/load-plugins.d.ts.map +1 -1
- package/dist/server/plugin-host/load-plugins.js +4 -2
- package/dist/server/plugin-host/load-plugins.js.map +1 -1
- package/dist/server/plugin-host/service-manifest.d.ts.map +1 -1
- package/dist/server/plugin-host/service-manifest.js +4 -2
- package/dist/server/plugin-host/service-manifest.js.map +1 -1
- package/dist/server/runtime/create-app.d.ts +12 -0
- package/dist/server/runtime/create-app.d.ts.map +1 -1
- package/dist/server/runtime/create-app.js +27 -6
- package/dist/server/runtime/create-app.js.map +1 -1
- package/dist/wallet/__tests__/admin-reporting.test.js +2 -2
- package/dist/wallet/__tests__/admin-reporting.test.js.map +1 -1
- package/dist/wallet/__tests__/wallet-auto-rule.router.test.js +5 -5
- package/dist/wallet/__tests__/wallet-auto-rule.router.test.js.map +1 -1
- package/dist/wallet/__tests__/wallet-auto-withdrawal.test.js +45 -34
- package/dist/wallet/__tests__/wallet-auto-withdrawal.test.js.map +1 -1
- package/dist/wallet/__tests__/wallet-commands.service.test.js +54 -37
- package/dist/wallet/__tests__/wallet-commands.service.test.js.map +1 -1
- package/dist/wallet/__tests__/wallet-kyc-gate.test.js +5 -5
- package/dist/wallet/__tests__/wallet-kyc-gate.test.js.map +1 -1
- package/dist/wallet/__tests__/wallet.rate-limit.test.js +2 -2
- package/dist/wallet/__tests__/wallet.rate-limit.test.js.map +1 -1
- package/dist/wallet/__tests__/wallet.service.test.js +62 -34
- package/dist/wallet/__tests__/wallet.service.test.js.map +1 -1
- package/dist/wallet/adapters/mock/mock-payment-adapter.d.ts +2 -2
- package/dist/wallet/adapters/wallet-reader.service.d.ts +1 -1
- package/dist/wallet/adapters/wallet-reader.service.js +1 -1
- package/dist/wallet/adapters/wallet-reader.service.js.map +1 -1
- package/dist/wallet/admin-reporting.d.ts +4 -4
- package/dist/wallet/admin-reporting.d.ts.map +1 -1
- package/dist/wallet/admin-reporting.js +8 -8
- package/dist/wallet/admin-reporting.js.map +1 -1
- package/dist/wallet/contract/index.d.ts +20 -20
- package/dist/wallet/contract/index.d.ts.map +1 -1
- package/dist/wallet/contract/index.js +14 -10
- package/dist/wallet/contract/index.js.map +1 -1
- package/dist/wallet/drizzle/migrations/0001_redundant_micromacro.sql +4 -0
- package/dist/wallet/drizzle/migrations/meta/0001_snapshot.json +397 -0
- package/dist/wallet/drizzle/migrations/meta/_journal.json +7 -0
- package/dist/wallet/plugin.d.ts.map +1 -1
- package/dist/wallet/plugin.js +5 -1
- package/dist/wallet/plugin.js.map +1 -1
- package/dist/wallet/router/index.d.ts +11 -11
- package/dist/wallet/schema/index.js +3 -3
- package/dist/wallet/schema/index.js.map +1 -1
- package/dist/wallet/service/wallet-commands.service.d.ts +1 -0
- package/dist/wallet/service/wallet-commands.service.d.ts.map +1 -1
- package/dist/wallet/service/wallet-commands.service.js +32 -24
- package/dist/wallet/service/wallet-commands.service.js.map +1 -1
- package/dist/wallet/service/wallet.service.d.ts +46 -18
- package/dist/wallet/service/wallet.service.d.ts.map +1 -1
- package/dist/wallet/service/wallet.service.js +152 -74
- package/dist/wallet/service/wallet.service.js.map +1 -1
- package/oxlint/oxlintrc.json +19 -3
- package/package.json +1 -1
- package/turbo-generators/src/config.ts +18 -6
|
@@ -1,11 +1,20 @@
|
|
|
1
|
-
import { pageToOffset } from '@openora/core/server';
|
|
2
|
-
import { and, eq, or, gt, gte, lte, isNull, desc, sql } from 'drizzle-orm';
|
|
1
|
+
import { pageToOffset, moneyToNumber, mapConcurrent } from '@openora/core/server';
|
|
2
|
+
import { and, eq, or, gt, gte, lte, isNull, inArray, desc, sql } from 'drizzle-orm';
|
|
3
3
|
import { userLimit, rgFlag, rgExclusion } from '../schema/index.js';
|
|
4
4
|
import { wallet, walletTransaction } from '@openora/core/wallet/schema';
|
|
5
5
|
import { gameRound } from '@openora/core/casino/schema/gaming';
|
|
6
6
|
import { session } from '@openora/core/pam/schema/identity';
|
|
7
7
|
import { periodWindow, isAtThreshold, thresholdPct } from './rg-eval.js';
|
|
8
|
+
// The recompute trigger carried on the enqueued job - which upstream event fired.
|
|
9
|
+
export const RG_EVAL_TRIGGERS = [
|
|
10
|
+
'wallet.deposit.completed',
|
|
11
|
+
'gaming.round.ended',
|
|
12
|
+
'rg.exclusion.login_blocked',
|
|
13
|
+
];
|
|
8
14
|
const SESSION_LIMIT = { type: 'session', period: 'session' };
|
|
15
|
+
// Cap in-flight flag writes per sweep so a large session-limit population can't exhaust the
|
|
16
|
+
// shared pg pool. ponytail: fixed cap; raise only if a single sweep can't keep up.
|
|
17
|
+
const SWEEP_CONCURRENCY = 10;
|
|
9
18
|
export class RgMonitoringService {
|
|
10
19
|
drizzle;
|
|
11
20
|
directory;
|
|
@@ -33,16 +42,21 @@ export class RgMonitoringService {
|
|
|
33
42
|
.from(userLimit)
|
|
34
43
|
.where(eq(userLimit.userId, userId));
|
|
35
44
|
for (const limit of limits) {
|
|
36
|
-
|
|
45
|
+
// Money-type limits only (deposit/wager/loss); the session-type limit is handled by sweep().
|
|
46
|
+
if (limit.period === 'session' || limit.type === 'session' || limit.amount === null) {
|
|
37
47
|
continue;
|
|
48
|
+
}
|
|
49
|
+
const limitAmount = limit.amount;
|
|
38
50
|
const { from } = periodWindow(limit.period, now);
|
|
39
|
-
const
|
|
40
|
-
|
|
51
|
+
const actualAmount = await this.spendFor(userId, limit.type, from, now);
|
|
52
|
+
// Threshold comparison is a review-flag decision, not a ledger write - moneyToNumber
|
|
53
|
+
// is the documented single conversion point (see the helper's own doc comment).
|
|
54
|
+
if (isAtThreshold(moneyToNumber(actualAmount), moneyToNumber(limitAmount))) {
|
|
41
55
|
await this.raiseFlag(userId, 'limit_threshold', limit.type, {
|
|
42
|
-
actual,
|
|
43
|
-
limit:
|
|
56
|
+
actual: actualAmount,
|
|
57
|
+
limit: limitAmount,
|
|
44
58
|
period: limit.period,
|
|
45
|
-
pct: thresholdPct(
|
|
59
|
+
pct: thresholdPct(moneyToNumber(actualAmount), moneyToNumber(limitAmount)),
|
|
46
60
|
});
|
|
47
61
|
}
|
|
48
62
|
else {
|
|
@@ -59,41 +73,55 @@ export class RgMonitoringService {
|
|
|
59
73
|
.select()
|
|
60
74
|
.from(userLimit)
|
|
61
75
|
.where(and(eq(userLimit.type, SESSION_LIMIT.type), eq(userLimit.period, SESSION_LIMIT.period)));
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
const userIds = sessionLimits.map((l) => l.userId);
|
|
77
|
+
const activeSessions = userIds.length
|
|
78
|
+
? await this.drizzle.db
|
|
79
|
+
.select({ userId: session.userId, createdAt: session.createdAt })
|
|
65
80
|
.from(session)
|
|
66
|
-
.where(and(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
81
|
+
.where(and(inArray(session.userId, userIds), gt(session.expiresAt, now)))
|
|
82
|
+
: [];
|
|
83
|
+
const earliestByUser = new Map();
|
|
84
|
+
for (const s of activeSessions) {
|
|
85
|
+
const current = earliestByUser.get(s.userId);
|
|
86
|
+
if (!current || s.createdAt < current) {
|
|
87
|
+
earliestByUser.set(s.userId, s.createdAt);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const pending = sessionLimits.filter((limit) => limit.minutes !== null);
|
|
91
|
+
await mapConcurrent(pending, SWEEP_CONCURRENCY, (limit) => {
|
|
92
|
+
const limitMinutes = limit.minutes;
|
|
93
|
+
const longest = earliestByUser.get(limit.userId) ?? null;
|
|
94
|
+
const elapsedMinutes = longest ? (now.getTime() - longest.getTime()) / 60000 : 0;
|
|
95
|
+
if (longest && isAtThreshold(elapsedMinutes, limitMinutes)) {
|
|
96
|
+
return this.raiseFlag(limit.userId, 'session_time', null, {
|
|
72
97
|
sessionMinutes: elapsedMinutes,
|
|
73
|
-
limitMinutes
|
|
74
|
-
pct: thresholdPct(elapsedMinutes,
|
|
98
|
+
limitMinutes,
|
|
99
|
+
pct: thresholdPct(elapsedMinutes, limitMinutes),
|
|
75
100
|
});
|
|
76
101
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
}
|
|
102
|
+
return this.clearFlag(limit.userId, 'session_time', null);
|
|
103
|
+
});
|
|
81
104
|
}
|
|
82
105
|
async listFlags(filters) {
|
|
83
106
|
const db = this.drizzle.db;
|
|
84
107
|
const { page, limit, flagType, limitType, status, fromDate, toDate } = filters;
|
|
85
108
|
const offset = pageToOffset(page, limit);
|
|
86
109
|
const conditions = [];
|
|
87
|
-
if (flagType)
|
|
110
|
+
if (flagType) {
|
|
88
111
|
conditions.push(eq(rgFlag.flagType, flagType));
|
|
89
|
-
|
|
112
|
+
}
|
|
113
|
+
if (limitType) {
|
|
90
114
|
conditions.push(eq(rgFlag.limitType, limitType));
|
|
91
|
-
|
|
115
|
+
}
|
|
116
|
+
if (status) {
|
|
92
117
|
conditions.push(eq(rgFlag.status, status));
|
|
93
|
-
|
|
118
|
+
}
|
|
119
|
+
if (fromDate) {
|
|
94
120
|
conditions.push(gte(rgFlag.flaggedAt, new Date(fromDate)));
|
|
95
|
-
|
|
121
|
+
}
|
|
122
|
+
if (toDate) {
|
|
96
123
|
conditions.push(lte(rgFlag.flaggedAt, new Date(toDate)));
|
|
124
|
+
}
|
|
97
125
|
const where = conditions.length > 0 ? and(...conditions) : undefined;
|
|
98
126
|
const [rows, countResult] = await Promise.all([
|
|
99
127
|
db
|
|
@@ -127,24 +155,27 @@ export class RgMonitoringService {
|
|
|
127
155
|
return { items, total: countResult[0]?.count ?? 0, page, limit };
|
|
128
156
|
}
|
|
129
157
|
async spendFor(userId, type, from, to) {
|
|
130
|
-
if (type === 'deposit')
|
|
158
|
+
if (type === 'deposit') {
|
|
131
159
|
return this.depositsSum(userId, from, to);
|
|
160
|
+
}
|
|
132
161
|
return this.betsSum(userId, from, to);
|
|
133
162
|
}
|
|
163
|
+
// Decimal string, matching userLimit.amount (same unit as walletTransaction.amount).
|
|
134
164
|
async depositsSum(userId, from, to) {
|
|
135
165
|
const [row] = await this.drizzle.db
|
|
136
166
|
.select({ total: sql `coalesce(sum(${walletTransaction.amount}), 0)` })
|
|
137
167
|
.from(walletTransaction)
|
|
138
168
|
.innerJoin(wallet, eq(wallet.id, walletTransaction.walletId))
|
|
139
169
|
.where(and(eq(wallet.userId, userId), eq(walletTransaction.type, 'deposit'), eq(walletTransaction.status, 'completed'), gte(walletTransaction.createdAt, from), lte(walletTransaction.createdAt, to)));
|
|
140
|
-
return
|
|
170
|
+
return row?.total ?? '0';
|
|
141
171
|
}
|
|
172
|
+
// Decimal string, matching userLimit.amount (same unit as gameRound.betAmount).
|
|
142
173
|
async betsSum(userId, from, to) {
|
|
143
174
|
const [rounds] = await this.drizzle.db
|
|
144
175
|
.select({ total: sql `coalesce(sum(${gameRound.betAmount}), 0)` })
|
|
145
176
|
.from(gameRound)
|
|
146
177
|
.where(and(eq(gameRound.userId, userId), gte(gameRound.startedAt, from), lte(gameRound.startedAt, to)));
|
|
147
|
-
return
|
|
178
|
+
return rounds?.total ?? '0';
|
|
148
179
|
}
|
|
149
180
|
async raiseFlag(userId, flagType, limitType, detail) {
|
|
150
181
|
const [existing] = await this.drizzle.db
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rg-monitoring.service.js","sourceRoot":"","sources":["../../../src/compliance/service/rg-monitoring.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"rg-monitoring.service.js","sourceRoot":"","sources":["../../../src/compliance/service/rg-monitoring.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DrizzleService, type EventBus } from '@openora/core/server';
|
|
2
|
-
import type { LoginEnforcementPort, SendEmailPort, AdminUserDirectory } from '@openora/core/contracts';
|
|
2
|
+
import type { LoginEnforcementPort, SendEmailPort, AdminUserDirectory, User } from '@openora/core/contracts';
|
|
3
3
|
import type { Limit, RgExclusion, SetPlayerLimitInput, ActivateCoolingOffInput, ActivateSelfExclusionInput, LiftSelfExclusionInput, RgSection } from '../contract/index.js';
|
|
4
4
|
export declare const ExclusionNotFoundError: new (id: string) => Error;
|
|
5
5
|
export declare const ActiveExclusionError: new () => Error;
|
|
@@ -12,6 +12,15 @@ export type RgServiceDeps = {
|
|
|
12
12
|
email?: SendEmailPort | null;
|
|
13
13
|
directory?: AdminUserDirectory | null;
|
|
14
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Owns player-facing and admin responsible-gambling controls: deposit/session
|
|
17
|
+
* limits, cooling-off, and self-exclusion. Every mutation that changes the set
|
|
18
|
+
* of active exclusions ends by recomputing login enforcement from scratch
|
|
19
|
+
* (`syncEnforcement`) rather than patching it incrementally, so a lift/expiry
|
|
20
|
+
* of one exclusion can never leave a stale block from another. Precedence:
|
|
21
|
+
* an active self-exclusion always wins with an indefinite block; otherwise
|
|
22
|
+
* the longest-expiring active cooling-off; otherwise unblocked.
|
|
23
|
+
*/
|
|
15
24
|
export declare class RgService {
|
|
16
25
|
private readonly drizzle;
|
|
17
26
|
private readonly events;
|
|
@@ -19,11 +28,24 @@ export declare class RgService {
|
|
|
19
28
|
private readonly email;
|
|
20
29
|
private readonly directory;
|
|
21
30
|
constructor(deps: RgServiceDeps);
|
|
22
|
-
setPlayerLimit(userId:
|
|
23
|
-
activateCoolingOff(userId:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
setPlayerLimit(userId: User['id'], input: SetPlayerLimitInput, actorId: User['id']): Promise<Limit>;
|
|
32
|
+
activateCoolingOff(userId: User['id'], input: ActivateCoolingOffInput, actorId: User['id']): Promise<RgExclusion>;
|
|
33
|
+
/**
|
|
34
|
+
* `isPermanent: true` stores `expiresAt: null` - a permanent exclusion has
|
|
35
|
+
* no time-based lapse and can only ever be cleared by an explicit
|
|
36
|
+
* `liftSelfExclusion` (which itself rejects lifting a permanent one). Only
|
|
37
|
+
* one active self-exclusion may exist per player at a time.
|
|
38
|
+
*/
|
|
39
|
+
activateSelfExclusion(userId: User['id'], input: ActivateSelfExclusionInput, actorId: User['id']): Promise<RgExclusion>;
|
|
40
|
+
/**
|
|
41
|
+
* A permanent self-exclusion (`isPermanent`/`expiresAt: null`) can never be
|
|
42
|
+
* lifted through this path (`PermanentExclusionLiftError`) - by design,
|
|
43
|
+
* there is no self-service or admin override. A fixed-term exclusion can
|
|
44
|
+
* only be lifted once its minimum period has actually elapsed
|
|
45
|
+
* (`ExclusionPeriodNotElapsedError` otherwise), even for an admin actor.
|
|
46
|
+
*/
|
|
47
|
+
liftSelfExclusion(userId: User['id'], input: LiftSelfExclusionInput, actorId: User['id']): Promise<RgExclusion>;
|
|
48
|
+
getRgSection(userId: User['id']): Promise<RgSection>;
|
|
27
49
|
expireLapsedCoolingOffs(): Promise<void>;
|
|
28
50
|
private expireLapsedCoolingOff;
|
|
29
51
|
private syncEnforcement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rg.service.d.ts","sourceRoot":"","sources":["../../../src/compliance/service/rg.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,
|
|
1
|
+
{"version":3,"file":"rg.service.d.ts","sourceRoot":"","sources":["../../../src/compliance/service/rg.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAMd,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,IAAI,EACL,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAO9B,eAAO,MAAM,sBAAsB,2BAAiC,CAAC;AACrE,eAAO,MAAM,oBAAoB,iBAGhC,CAAC;AACF,eAAO,MAAM,2BAA2B,iBAGvC,CAAC;AACF,eAAO,MAAM,8BAA8B,iBAG1C,CAAC;AAoBF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;IACxD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;gBAE1C,IAAI,EAAE,aAAa;IAQzB,cAAc,CAClB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAClB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAClB,OAAO,CAAC,KAAK,CAAC;IA2CX,kBAAkB,CACtB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAClB,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAClB,OAAO,CAAC,WAAW,CAAC;IAwCvB;;;;;OAKG;IACG,qBAAqB,CACzB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAClB,KAAK,EAAE,0BAA0B,EACjC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAClB,OAAO,CAAC,WAAW,CAAC;IA6CvB;;;;;;OAMG;IACG,iBAAiB,CACrB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAClB,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAClB,OAAO,CAAC,WAAW,CAAC;IAoDjB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAwBpD,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9C,OAAO,CAAC,sBAAsB;YAiBhB,eAAe;YAwBf,uBAAuB;YAyBvB,MAAM;CAcrB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createLogger, makeNotFoundError, makeConflictError, serializeRow, } from '@openora/core/server';
|
|
1
|
+
import { createLogger, findOneOrThrow, makeNotFoundError, makeConflictError, serializeRow, } from '@openora/core/server';
|
|
2
2
|
import { and, eq, or, gt, lte, desc } from 'drizzle-orm';
|
|
3
3
|
import { userLimit, rgExclusion } from '../schema/index.js';
|
|
4
|
+
import { LimitNotFoundError } from './compliance.service.js';
|
|
4
5
|
const logger = createLogger('compliance-rg');
|
|
5
6
|
export const ExclusionNotFoundError = makeNotFoundError('Exclusion');
|
|
6
7
|
export const ActiveExclusionError = makeConflictError('ActiveExclusionError', 'An active exclusion of this kind already exists for this player');
|
|
@@ -13,20 +14,22 @@ function addMonths(from, months) {
|
|
|
13
14
|
return d;
|
|
14
15
|
}
|
|
15
16
|
function toLimitDto(row) {
|
|
16
|
-
return {
|
|
17
|
-
id: row.id,
|
|
18
|
-
userId: row.userId,
|
|
19
|
-
type: row.type,
|
|
20
|
-
amount: row.amount,
|
|
21
|
-
period: row.period,
|
|
22
|
-
createdAt: row.createdAt.toISOString(),
|
|
23
|
-
};
|
|
17
|
+
return serializeRow(row, { dateFields: ['createdAt'] });
|
|
24
18
|
}
|
|
25
19
|
function toExclusionDto(row) {
|
|
26
20
|
return serializeRow(row, {
|
|
27
21
|
dateFields: ['startsAt', 'expiresAt', 'liftedAt', 'createdAt', 'updatedAt'],
|
|
28
22
|
});
|
|
29
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Owns player-facing and admin responsible-gambling controls: deposit/session
|
|
26
|
+
* limits, cooling-off, and self-exclusion. Every mutation that changes the set
|
|
27
|
+
* of active exclusions ends by recomputing login enforcement from scratch
|
|
28
|
+
* (`syncEnforcement`) rather than patching it incrementally, so a lift/expiry
|
|
29
|
+
* of one exclusion can never leave a stale block from another. Precedence:
|
|
30
|
+
* an active self-exclusion always wins with an indefinite block; otherwise
|
|
31
|
+
* the longest-expiring active cooling-off; otherwise unblocked.
|
|
32
|
+
*/
|
|
30
33
|
export class RgService {
|
|
31
34
|
drizzle;
|
|
32
35
|
events;
|
|
@@ -42,18 +45,18 @@ export class RgService {
|
|
|
42
45
|
}
|
|
43
46
|
async setPlayerLimit(userId, input, actorId) {
|
|
44
47
|
const [prior] = await this.drizzle.db
|
|
45
|
-
.select({ amount: userLimit.amount })
|
|
48
|
+
.select({ amount: userLimit.amount, minutes: userLimit.minutes })
|
|
46
49
|
.from(userLimit)
|
|
47
50
|
.where(and(eq(userLimit.userId, userId), eq(userLimit.type, input.type), eq(userLimit.period, input.period)))
|
|
48
51
|
.limit(1);
|
|
49
|
-
const
|
|
52
|
+
const row = findOneOrThrow(await this.drizzle.db
|
|
50
53
|
.insert(userLimit)
|
|
51
54
|
.values({ ...input, userId })
|
|
52
55
|
.onConflictDoUpdate({
|
|
53
56
|
target: [userLimit.userId, userLimit.type, userLimit.period],
|
|
54
|
-
set: { amount: input.amount },
|
|
57
|
+
set: { amount: input.amount, minutes: input.minutes },
|
|
55
58
|
})
|
|
56
|
-
.returning();
|
|
59
|
+
.returning(), new LimitNotFoundError(userId));
|
|
57
60
|
this.events.emit('rg.limit.set', {
|
|
58
61
|
userId,
|
|
59
62
|
actorId,
|
|
@@ -61,9 +64,12 @@ export class RgService {
|
|
|
61
64
|
type: input.type,
|
|
62
65
|
period: input.period,
|
|
63
66
|
amount: input.amount,
|
|
67
|
+
minutes: input.minutes,
|
|
64
68
|
previousAmount: prior?.amount ?? null,
|
|
69
|
+
previousMinutes: prior?.minutes ?? null,
|
|
65
70
|
});
|
|
66
|
-
|
|
71
|
+
const limitDescription = input.type === 'session' ? `${input.minutes} minutes` : input.amount;
|
|
72
|
+
await this.notify(userId, 'Your gambling limit was updated', `A ${input.period} ${input.type} limit of ${limitDescription} is now active on your account.`);
|
|
67
73
|
return toLimitDto(row);
|
|
68
74
|
}
|
|
69
75
|
async activateCoolingOff(userId, input, actorId) {
|
|
@@ -72,19 +78,19 @@ export class RgService {
|
|
|
72
78
|
const expiresAt = new Date(now.getTime() + input.durationHours * HOUR_MS);
|
|
73
79
|
const row = await this.drizzle.db.transaction(async (tx) => {
|
|
74
80
|
await this.expireLapsedCoolingOff(userId, tx, now);
|
|
75
|
-
const
|
|
81
|
+
const r = findOneOrThrow(await tx
|
|
76
82
|
.insert(rgExclusion)
|
|
77
83
|
.values({
|
|
78
84
|
userId,
|
|
79
85
|
kind: 'cooling_off',
|
|
80
86
|
status: 'active',
|
|
81
87
|
reason: input.reason,
|
|
82
|
-
|
|
88
|
+
isPermanent: false,
|
|
83
89
|
startsAt: now,
|
|
84
90
|
expiresAt,
|
|
85
91
|
createdBy: actorId,
|
|
86
92
|
})
|
|
87
|
-
.returning();
|
|
93
|
+
.returning(), new ExclusionNotFoundError(userId));
|
|
88
94
|
await this.syncEnforcement(userId, tx);
|
|
89
95
|
return r;
|
|
90
96
|
});
|
|
@@ -98,26 +104,32 @@ export class RgService {
|
|
|
98
104
|
await this.notify(userId, 'Cooling-off period activated', `A cooling-off period is active on your account until ${expiresAt.toISOString()}.`);
|
|
99
105
|
return toExclusionDto(row);
|
|
100
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* `isPermanent: true` stores `expiresAt: null` - a permanent exclusion has
|
|
109
|
+
* no time-based lapse and can only ever be cleared by an explicit
|
|
110
|
+
* `liftSelfExclusion` (which itself rejects lifting a permanent one). Only
|
|
111
|
+
* one active self-exclusion may exist per player at a time.
|
|
112
|
+
*/
|
|
101
113
|
async activateSelfExclusion(userId, input, actorId) {
|
|
102
114
|
await this.assertNoActiveExclusion(userId, 'self_exclusion');
|
|
103
115
|
const now = new Date();
|
|
104
|
-
const expiresAt = input.
|
|
116
|
+
const expiresAt = input.isPermanent || input.durationMonths === undefined
|
|
105
117
|
? null
|
|
106
118
|
: addMonths(now, input.durationMonths);
|
|
107
119
|
const row = await this.drizzle.db.transaction(async (tx) => {
|
|
108
|
-
const
|
|
120
|
+
const r = findOneOrThrow(await tx
|
|
109
121
|
.insert(rgExclusion)
|
|
110
122
|
.values({
|
|
111
123
|
userId,
|
|
112
124
|
kind: 'self_exclusion',
|
|
113
125
|
status: 'active',
|
|
114
126
|
reason: input.reason,
|
|
115
|
-
|
|
127
|
+
isPermanent: input.isPermanent,
|
|
116
128
|
startsAt: now,
|
|
117
129
|
expiresAt,
|
|
118
130
|
createdBy: actorId,
|
|
119
131
|
})
|
|
120
|
-
.returning();
|
|
132
|
+
.returning(), new ExclusionNotFoundError(userId));
|
|
121
133
|
await this.syncEnforcement(userId, tx);
|
|
122
134
|
return r;
|
|
123
135
|
});
|
|
@@ -125,34 +137,44 @@ export class RgService {
|
|
|
125
137
|
userId,
|
|
126
138
|
actorId,
|
|
127
139
|
exclusionId: row.id,
|
|
128
|
-
|
|
140
|
+
isPermanent: input.isPermanent,
|
|
129
141
|
expiresAt: expiresAt ? expiresAt.toISOString() : null,
|
|
130
142
|
reason: input.reason,
|
|
131
143
|
});
|
|
132
|
-
await this.notify(userId, 'Self-exclusion activated',
|
|
133
|
-
?
|
|
134
|
-
:
|
|
144
|
+
await this.notify(userId, 'Self-exclusion activated', expiresAt
|
|
145
|
+
? `A self-exclusion is active on your account until at least ${expiresAt.toISOString()}.`
|
|
146
|
+
: 'A permanent self-exclusion is now active on your account.');
|
|
135
147
|
return toExclusionDto(row);
|
|
136
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* A permanent self-exclusion (`isPermanent`/`expiresAt: null`) can never be
|
|
151
|
+
* lifted through this path (`PermanentExclusionLiftError`) - by design,
|
|
152
|
+
* there is no self-service or admin override. A fixed-term exclusion can
|
|
153
|
+
* only be lifted once its minimum period has actually elapsed
|
|
154
|
+
* (`ExclusionPeriodNotElapsedError` otherwise), even for an admin actor.
|
|
155
|
+
*/
|
|
137
156
|
async liftSelfExclusion(userId, input, actorId) {
|
|
138
157
|
const [existing] = await this.drizzle.db
|
|
139
158
|
.select()
|
|
140
159
|
.from(rgExclusion)
|
|
141
160
|
.where(and(eq(rgExclusion.userId, userId), eq(rgExclusion.kind, 'self_exclusion'), eq(rgExclusion.status, 'active')))
|
|
142
161
|
.limit(1);
|
|
143
|
-
if (!existing)
|
|
162
|
+
if (!existing) {
|
|
144
163
|
throw new ExclusionNotFoundError(userId);
|
|
145
|
-
|
|
164
|
+
}
|
|
165
|
+
if (existing.isPermanent || existing.expiresAt === null) {
|
|
146
166
|
throw new PermanentExclusionLiftError();
|
|
147
|
-
|
|
167
|
+
}
|
|
168
|
+
if (new Date() < existing.expiresAt) {
|
|
148
169
|
throw new ExclusionPeriodNotElapsedError();
|
|
170
|
+
}
|
|
149
171
|
const now = new Date();
|
|
150
172
|
const row = await this.drizzle.db.transaction(async (tx) => {
|
|
151
|
-
const
|
|
173
|
+
const r = findOneOrThrow(await tx
|
|
152
174
|
.update(rgExclusion)
|
|
153
175
|
.set({ status: 'lifted', liftedAt: now, liftedReason: input.reason, liftedBy: actorId })
|
|
154
176
|
.where(eq(rgExclusion.id, existing.id))
|
|
155
|
-
.returning();
|
|
177
|
+
.returning(), new ExclusionNotFoundError(existing.id));
|
|
156
178
|
// Recompute from what remains - a still-active cooling-off keeps its own block
|
|
157
179
|
// rather than being cleared by this lift.
|
|
158
180
|
await this.syncEnforcement(userId, tx);
|
|
@@ -236,26 +258,30 @@ export class RgService {
|
|
|
236
258
|
];
|
|
237
259
|
// A lapsed-but-not-yet-swept cooling-off must not block a fresh one; a self-exclusion
|
|
238
260
|
// has no time-based lapse (only an explicit lift clears it).
|
|
239
|
-
if (kind === 'cooling_off')
|
|
261
|
+
if (kind === 'cooling_off') {
|
|
240
262
|
conditions.push(gt(rgExclusion.expiresAt, now));
|
|
263
|
+
}
|
|
241
264
|
const [existing] = await this.drizzle.db
|
|
242
265
|
.select({ id: rgExclusion.id })
|
|
243
266
|
.from(rgExclusion)
|
|
244
267
|
.where(and(...conditions))
|
|
245
268
|
.limit(1);
|
|
246
|
-
if (existing)
|
|
269
|
+
if (existing) {
|
|
247
270
|
throw new ActiveExclusionError();
|
|
271
|
+
}
|
|
248
272
|
}
|
|
249
273
|
// Best-effort player notification. Both the email port and the directory are optional
|
|
250
274
|
// (guarded by c.has at wiring). A lookup/send failure must not fail an RG action that
|
|
251
275
|
// already committed - log without PII (no email, no reason text) and move on.
|
|
252
276
|
async notify(userId, subject, body) {
|
|
253
|
-
if (!this.email || !this.directory)
|
|
277
|
+
if (!this.email || !this.directory) {
|
|
254
278
|
return;
|
|
279
|
+
}
|
|
255
280
|
try {
|
|
256
281
|
const [summary] = await this.directory.lookupPlayers([userId]);
|
|
257
|
-
if (!summary?.email)
|
|
282
|
+
if (!summary?.email) {
|
|
258
283
|
return;
|
|
284
|
+
}
|
|
259
285
|
await this.email.send({ to: summary.email, subject, body });
|
|
260
286
|
}
|
|
261
287
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rg.service.js","sourceRoot":"","sources":["../../../src/compliance/service/rg.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rg.service.js","sourceRoot":"","sources":["../../../src/compliance/service/rg.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GAEb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAOzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAW7D,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAK7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CACnD,sBAAsB,EACtB,iEAAiE,CAClE,CAAC;AACF,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAC1D,6BAA6B,EAC7B,6CAA6C,CAC9C,CAAC;AACF,MAAM,CAAC,MAAM,8BAA8B,GAAG,iBAAiB,CAC7D,gCAAgC,EAChC,uDAAuD,CACxD,CAAC;AAEF,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/B,SAAS,SAAS,CAAC,IAAU,EAAE,MAAc;IAC3C,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,GAAkC;IACpD,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,cAAc,CAAC,GAAoC;IAC1D,OAAO,YAAY,CAAC,GAAG,EAAE;QACvB,UAAU,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC;KAC5E,CAAC,CAAC;AACL,CAAC;AAUD;;;;;;;;GAQG;AACH,MAAM,OAAO,SAAS;IACH,OAAO,CAAiB;IACxB,MAAM,CAAW;IACjB,gBAAgB,CAAuB;IACvC,KAAK,CAAuB;IAC5B,SAAS,CAA4B;IAEtD,YAAY,IAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,MAAkB,EAClB,KAA0B,EAC1B,OAAmB;QAEnB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAClC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;aAChE,IAAI,CAAC,SAAS,CAAC;aACf,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAC9B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CACnC,CACF;aACA,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,MAAM,GAAG,GAAG,cAAc,CACxB,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAClB,MAAM,CAAC,SAAS,CAAC;aACjB,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;aAC5B,kBAAkB,CAAC;YAClB,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;YAC5D,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;SACtD,CAAC;aACD,SAAS,EAAE,EACd,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAC/B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;YAC/B,MAAM;YACN,OAAO;YACP,OAAO,EAAE,GAAG,CAAC,EAAE;YACf,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,cAAc,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI;YACrC,eAAe,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI;SACxC,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9F,MAAM,IAAI,CAAC,MAAM,CACf,MAAM,EACN,iCAAiC,EACjC,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,aAAa,gBAAgB,iCAAiC,CAC9F,CAAC;QACF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAkB,EAClB,KAA8B,EAC9B,OAAmB;QAEnB,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACzD,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,cAAc,CACtB,MAAM,EAAE;iBACL,MAAM,CAAC,WAAW,CAAC;iBACnB,MAAM,CAAC;gBACN,MAAM;gBACN,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,WAAW,EAAE,KAAK;gBAClB,QAAQ,EAAE,GAAG;gBACb,SAAS;gBACT,SAAS,EAAE,OAAO;aACnB,CAAC;iBACD,SAAS,EAAE,EACd,IAAI,sBAAsB,CAAC,MAAM,CAAC,CACnC,CAAC;YACF,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAC3C,MAAM;YACN,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,EAAE;YACnB,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;YAClC,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CACf,MAAM,EACN,8BAA8B,EAC9B,wDAAwD,SAAS,CAAC,WAAW,EAAE,GAAG,CACnF,CAAC;QACF,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CACzB,MAAkB,EAClB,KAAiC,EACjC,OAAmB;QAEnB,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GACb,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;YACrD,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACzD,MAAM,CAAC,GAAG,cAAc,CACtB,MAAM,EAAE;iBACL,MAAM,CAAC,WAAW,CAAC;iBACnB,MAAM,CAAC;gBACN,MAAM;gBACN,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,QAAQ,EAAE,GAAG;gBACb,SAAS;gBACT,SAAS,EAAE,OAAO;aACnB,CAAC;iBACD,SAAS,EAAE,EACd,IAAI,sBAAsB,CAAC,MAAM,CAAC,CACnC,CAAC;YACF,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAC9C,MAAM;YACN,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,EAAE;YACnB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;YACrD,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CACf,MAAM,EACN,0BAA0B,EAC1B,SAAS;YACP,CAAC,CAAC,6DAA6D,SAAS,CAAC,WAAW,EAAE,GAAG;YACzF,CAAC,CAAC,2DAA2D,CAChE,CAAC;QACF,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,iBAAiB,CACrB,MAAkB,EAClB,KAA6B,EAC7B,OAAmB;QAEnB,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACrC,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,EACtC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CACjC,CACF;aACA,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACxD,MAAM,IAAI,2BAA2B,EAAE,CAAC;QAC1C,CAAC;QACD,IAAI,IAAI,IAAI,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,8BAA8B,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACzD,MAAM,CAAC,GAAG,cAAc,CACtB,MAAM,EAAE;iBACL,MAAM,CAAC,WAAW,CAAC;iBACnB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;iBACvF,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;iBACtC,SAAS,EAAE,EACd,IAAI,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CACxC,CAAC;YACF,+EAA+E;YAC/E,0CAA0C;YAC1C,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAC3C,MAAM;YACN,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,EAAE;YACnB,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CACf,MAAM,EACN,uBAAuB,EACvB,+DAA+D,CAChE,CAAC;QACF,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAkB;QACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5E,IAAI,CAAC,OAAO,CAAC,EAAE;iBACZ,MAAM,EAAE;iBACR,IAAI,CAAC,WAAW,CAAC;iBACjB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAC5E,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SACxC,CAAC,CAAC;QACH,mFAAmF;QACnF,8DAA8D;QAC9D,MAAM,UAAU,GACd,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC;QAC/F,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC;QAClF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9B,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1D,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;SACpE,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,kFAAkF;IAClF,KAAK,CAAC,uBAAuB;QAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACjC,MAAM,CAAC,WAAW,CAAC;aACnB,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;aAC1B,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,EACnC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAChC,CACF;aACA,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,KAAK,MAAM,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,MAAkB,EAAE,EAAM,EAAE,GAAS;QAClE,OAAO,EAAE;aACN,MAAM,CAAC,WAAW,CAAC;aACnB,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;aAC1B,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,EACnC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAChC,CACF,CAAC;IACN,CAAC;IAED,+EAA+E;IAC/E,iFAAiF;IACjF,uFAAuF;IAC/E,KAAK,CAAC,eAAe,CAAC,MAAkB,EAAE,KAAc,IAAI,CAAC,OAAO,CAAC,EAAE;QAC7E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,EAAE;aACpB,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC;aACpE,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAC3E,CACF,CAAC;QACJ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,SAAkB,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,MAAkB,EAAE,IAAyB;QACjF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG;YACjB,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;YAC9B,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;YAC1B,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;SACjC,CAAC;QACF,sFAAsF;QACtF,6DAA6D;QAC7D,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACrC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;aAC9B,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;aACzB,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,oBAAoB,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,sFAAsF;IACtF,8EAA8E;IACtE,KAAK,CAAC,MAAM,CAAC,MAAkB,EAAE,OAAe,EAAE,IAAY;QACpE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,+BAA+B,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -4,7 +4,7 @@ export type AdminTxRow = {
|
|
|
4
4
|
id: string;
|
|
5
5
|
userId: string;
|
|
6
6
|
type: WalletTransactionType;
|
|
7
|
-
amount:
|
|
7
|
+
amount: string;
|
|
8
8
|
currency: string;
|
|
9
9
|
status: WalletTransactionStatus;
|
|
10
10
|
rail: WalletRail | null;
|
|
@@ -27,13 +27,13 @@ export type AdminTxListOptions = {
|
|
|
27
27
|
status?: WalletTransactionStatus;
|
|
28
28
|
dateFrom?: Date;
|
|
29
29
|
dateTo?: Date;
|
|
30
|
-
amountMin?:
|
|
31
|
-
amountMax?:
|
|
30
|
+
amountMin?: string;
|
|
31
|
+
amountMax?: string;
|
|
32
32
|
};
|
|
33
33
|
export type AdminWalletReporting = {
|
|
34
34
|
totals(): Promise<{
|
|
35
|
-
deposits:
|
|
36
|
-
withdrawals:
|
|
35
|
+
deposits: string;
|
|
36
|
+
withdrawals: string;
|
|
37
37
|
}>;
|
|
38
38
|
listTransactions(opts: AdminTxListOptions): Promise<{
|
|
39
39
|
rows: AdminTxRow[];
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type Token } from './token.js';
|
|
2
2
|
export type PaymentAdapter = {
|
|
3
|
-
processDeposit(amount:
|
|
3
|
+
processDeposit(amount: string, currency: string, metadata: Record<string, unknown>): Promise<{
|
|
4
4
|
externalId: string;
|
|
5
5
|
status: string;
|
|
6
6
|
}>;
|
|
7
|
-
processWithdrawal(amount:
|
|
7
|
+
processWithdrawal(amount: string, currency: string, metadata: Record<string, unknown>): Promise<{
|
|
8
8
|
externalId: string;
|
|
9
9
|
status: string;
|
|
10
10
|
}>;
|
|
@@ -2,24 +2,24 @@ import type { WalletTransactionType } from '../schemas/wallet-tx.js';
|
|
|
2
2
|
import { type Token } from './token.js';
|
|
3
3
|
export type WalletDebitArgs = {
|
|
4
4
|
userId: string;
|
|
5
|
-
amount:
|
|
5
|
+
amount: string;
|
|
6
6
|
type: WalletTransactionType;
|
|
7
7
|
};
|
|
8
8
|
export type WalletDebitOutcome = {
|
|
9
9
|
ok: true;
|
|
10
|
-
newBalance:
|
|
10
|
+
newBalance: string;
|
|
11
11
|
} | {
|
|
12
12
|
ok: false;
|
|
13
|
-
available:
|
|
13
|
+
available: string;
|
|
14
14
|
};
|
|
15
15
|
export type WalletCreditArgs = {
|
|
16
16
|
userId: string;
|
|
17
|
-
amount:
|
|
17
|
+
amount: string;
|
|
18
18
|
type: WalletTransactionType;
|
|
19
19
|
};
|
|
20
20
|
export type WalletCreditOutcome = {
|
|
21
21
|
ok: true;
|
|
22
|
-
newBalance:
|
|
22
|
+
newBalance: string;
|
|
23
23
|
} | {
|
|
24
24
|
ok: false;
|
|
25
25
|
reason: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type WalletReader = {
|
|
2
|
-
/** Sum of all completed deposits for a player
|
|
3
|
-
getLifetimeDeposit(userId: string): Promise<
|
|
2
|
+
/** Sum of all completed deposits for a player, as a decimal string (same as wallet_transaction.amount). Used for high_roller evaluation. */
|
|
3
|
+
getLifetimeDeposit(userId: string): Promise<string>;
|
|
4
4
|
/** Count of completed withdrawals for a player within the last windowDays days. Used for high_risk evaluation. */
|
|
5
5
|
getWithdrawalCountInWindow(userId: string, windowDays: number): Promise<number>;
|
|
6
6
|
};
|