@openora/core 0.4.1-canary.40 → 0.4.1-canary.42

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.
Files changed (250) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/admin-console/__tests__/backoffice.router.test.js +13 -1
  3. package/dist/admin-console/__tests__/backoffice.router.test.js.map +1 -1
  4. package/dist/admin-console/__tests__/backoffice.service.test.js +110 -10
  5. package/dist/admin-console/__tests__/backoffice.service.test.js.map +1 -1
  6. package/dist/admin-console/contract/index.d.ts +166 -0
  7. package/dist/admin-console/contract/index.d.ts.map +1 -1
  8. package/dist/admin-console/contract/index.js +66 -1
  9. package/dist/admin-console/contract/index.js.map +1 -1
  10. package/dist/admin-console/plugin.d.ts.map +1 -1
  11. package/dist/admin-console/plugin.js +3 -3
  12. package/dist/admin-console/plugin.js.map +1 -1
  13. package/dist/admin-console/router/index.d.ts +65 -0
  14. package/dist/admin-console/router/index.d.ts.map +1 -1
  15. package/dist/admin-console/router/index.js +8 -0
  16. package/dist/admin-console/router/index.js.map +1 -1
  17. package/dist/admin-console/service/backoffice.service.d.ts +15 -4
  18. package/dist/admin-console/service/backoffice.service.d.ts.map +1 -1
  19. package/dist/admin-console/service/backoffice.service.js +29 -1
  20. package/dist/admin-console/service/backoffice.service.js.map +1 -1
  21. package/dist/audit/plugin.d.ts.map +1 -1
  22. package/dist/audit/plugin.js +21 -1
  23. package/dist/audit/plugin.js.map +1 -1
  24. package/dist/casino/gaming/__tests__/admin-reporting.test.d.ts +2 -0
  25. package/dist/casino/gaming/__tests__/admin-reporting.test.d.ts.map +1 -0
  26. package/dist/casino/gaming/__tests__/admin-reporting.test.js +87 -0
  27. package/dist/casino/gaming/__tests__/admin-reporting.test.js.map +1 -0
  28. package/dist/casino/gaming/admin-reporting.d.ts +8 -0
  29. package/dist/casino/gaming/admin-reporting.d.ts.map +1 -0
  30. package/dist/casino/gaming/admin-reporting.js +62 -0
  31. package/dist/casino/gaming/admin-reporting.js.map +1 -0
  32. package/dist/casino/gaming/contract/index.d.ts +16 -0
  33. package/dist/casino/gaming/contract/index.d.ts.map +1 -1
  34. package/dist/casino/gaming/contract/index.js +3 -1
  35. package/dist/casino/gaming/contract/index.js.map +1 -1
  36. package/dist/casino/gaming/drizzle/migrations/0002_yummy_lifeguard.sql +4 -0
  37. package/dist/casino/gaming/drizzle/migrations/meta/0002_snapshot.json +237 -0
  38. package/dist/casino/gaming/drizzle/migrations/meta/_journal.json +7 -0
  39. package/dist/casino/gaming/plugin.d.ts.map +1 -1
  40. package/dist/casino/gaming/plugin.js +3 -1
  41. package/dist/casino/gaming/plugin.js.map +1 -1
  42. package/dist/casino/gaming/router/index.d.ts +10 -0
  43. package/dist/casino/gaming/router/index.d.ts.map +1 -1
  44. package/dist/casino/gaming/schema/index.d.ts +18 -0
  45. package/dist/casino/gaming/schema/index.d.ts.map +1 -1
  46. package/dist/casino/gaming/schema/index.js +11 -1
  47. package/dist/casino/gaming/schema/index.js.map +1 -1
  48. package/dist/casino/gaming/service/gaming.service.d.ts +2 -0
  49. package/dist/casino/gaming/service/gaming.service.d.ts.map +1 -1
  50. package/dist/casino/gaming/service/gaming.service.js +1 -0
  51. package/dist/casino/gaming/service/gaming.service.js.map +1 -1
  52. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.test.js +66 -12
  53. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.test.js.map +1 -1
  54. package/dist/compliance/__tests__/kyc-admin.router.test.d.ts +2 -0
  55. package/dist/compliance/__tests__/kyc-admin.router.test.d.ts.map +1 -0
  56. package/dist/compliance/__tests__/kyc-admin.router.test.js +191 -0
  57. package/dist/compliance/__tests__/kyc-admin.router.test.js.map +1 -0
  58. package/dist/compliance/__tests__/kyc-webhook.router.test.d.ts +2 -0
  59. package/dist/compliance/__tests__/kyc-webhook.router.test.d.ts.map +1 -0
  60. package/dist/compliance/__tests__/kyc-webhook.router.test.js +148 -0
  61. package/dist/compliance/__tests__/kyc-webhook.router.test.js.map +1 -0
  62. package/dist/compliance/__tests__/kyc.service.test.js +11 -10
  63. package/dist/compliance/__tests__/kyc.service.test.js.map +1 -1
  64. package/dist/compliance/__tests__/rg.router.test.js +5 -1
  65. package/dist/compliance/__tests__/rg.router.test.js.map +1 -1
  66. package/dist/compliance/adapters/hmac-kyc-webhook-verifier.d.ts +16 -3
  67. package/dist/compliance/adapters/hmac-kyc-webhook-verifier.d.ts.map +1 -1
  68. package/dist/compliance/adapters/hmac-kyc-webhook-verifier.js +47 -5
  69. package/dist/compliance/adapters/hmac-kyc-webhook-verifier.js.map +1 -1
  70. package/dist/compliance/contract/index.d.ts +312 -0
  71. package/dist/compliance/contract/index.d.ts.map +1 -1
  72. package/dist/compliance/contract/index.js +50 -1
  73. package/dist/compliance/contract/index.js.map +1 -1
  74. package/dist/compliance/drizzle/migrations/0002_condemned_monster_badoon.sql +3 -0
  75. package/dist/compliance/drizzle/migrations/0003_public_spirit.sql +1 -0
  76. package/dist/compliance/drizzle/migrations/meta/0002_snapshot.json +673 -0
  77. package/dist/compliance/drizzle/migrations/meta/0003_snapshot.json +679 -0
  78. package/dist/compliance/drizzle/migrations/meta/_journal.json +14 -0
  79. package/dist/compliance/plugin.d.ts.map +1 -1
  80. package/dist/compliance/plugin.js +23 -3
  81. package/dist/compliance/plugin.js.map +1 -1
  82. package/dist/compliance/router/index.d.ts +186 -2
  83. package/dist/compliance/router/index.d.ts.map +1 -1
  84. package/dist/compliance/router/index.js +52 -3
  85. package/dist/compliance/router/index.js.map +1 -1
  86. package/dist/compliance/schema/index.d.ts +65 -3
  87. package/dist/compliance/schema/index.d.ts.map +1 -1
  88. package/dist/compliance/schema/index.js +8 -0
  89. package/dist/compliance/schema/index.js.map +1 -1
  90. package/dist/compliance/service/kyc.service.d.ts +153 -8
  91. package/dist/compliance/service/kyc.service.d.ts.map +1 -1
  92. package/dist/compliance/service/kyc.service.js +264 -32
  93. package/dist/compliance/service/kyc.service.js.map +1 -1
  94. package/dist/contracts/adapters/admin-game-reporting.d.ts +25 -0
  95. package/dist/contracts/adapters/admin-game-reporting.d.ts.map +1 -0
  96. package/dist/contracts/adapters/admin-game-reporting.js +15 -0
  97. package/dist/contracts/adapters/admin-game-reporting.js.map +1 -0
  98. package/dist/contracts/adapters/admin-player-activity.d.ts +29 -0
  99. package/dist/contracts/adapters/admin-player-activity.d.ts.map +1 -0
  100. package/dist/contracts/adapters/admin-player-activity.js +3 -0
  101. package/dist/contracts/adapters/admin-player-activity.js.map +1 -0
  102. package/dist/contracts/adapters/audit.d.ts +1 -1
  103. package/dist/contracts/adapters/audit.d.ts.map +1 -1
  104. package/dist/contracts/adapters/audit.js.map +1 -1
  105. package/dist/contracts/adapters/index.d.ts +6 -2
  106. package/dist/contracts/adapters/index.d.ts.map +1 -1
  107. package/dist/contracts/adapters/index.js +3 -1
  108. package/dist/contracts/adapters/index.js.map +1 -1
  109. package/dist/contracts/adapters/kyc.d.ts +90 -5
  110. package/dist/contracts/adapters/kyc.d.ts.map +1 -1
  111. package/dist/contracts/adapters/kyc.js +23 -0
  112. package/dist/contracts/adapters/kyc.js.map +1 -1
  113. package/dist/contracts/schemas/__tests__/events.test.js +1 -1
  114. package/dist/contracts/schemas/__tests__/player-schemas.test.d.ts +2 -0
  115. package/dist/contracts/schemas/__tests__/player-schemas.test.d.ts.map +1 -0
  116. package/dist/contracts/schemas/__tests__/player-schemas.test.js +30 -0
  117. package/dist/contracts/schemas/__tests__/player-schemas.test.js.map +1 -0
  118. package/dist/contracts/schemas/common.d.ts +2 -0
  119. package/dist/contracts/schemas/common.d.ts.map +1 -1
  120. package/dist/contracts/schemas/common.js +6 -0
  121. package/dist/contracts/schemas/common.js.map +1 -1
  122. package/dist/contracts/schemas/events.d.ts +27 -0
  123. package/dist/contracts/schemas/events.d.ts.map +1 -1
  124. package/dist/contracts/schemas/events.js +12 -2
  125. package/dist/contracts/schemas/events.js.map +1 -1
  126. package/dist/contracts/schemas/game.d.ts +9 -0
  127. package/dist/contracts/schemas/game.d.ts.map +1 -0
  128. package/dist/contracts/schemas/game.js +10 -0
  129. package/dist/contracts/schemas/game.js.map +1 -0
  130. package/dist/contracts/schemas/index.d.ts +1 -0
  131. package/dist/contracts/schemas/index.d.ts.map +1 -1
  132. package/dist/contracts/schemas/index.js +1 -0
  133. package/dist/contracts/schemas/index.js.map +1 -1
  134. package/dist/contracts/schemas/platform-config.d.ts +5 -1
  135. package/dist/contracts/schemas/platform-config.d.ts.map +1 -1
  136. package/dist/contracts/schemas/player.d.ts +26 -1
  137. package/dist/contracts/schemas/player.d.ts.map +1 -1
  138. package/dist/contracts/schemas/player.js +14 -0
  139. package/dist/contracts/schemas/player.js.map +1 -1
  140. package/dist/contracts/schemas/tag.d.ts +21 -1
  141. package/dist/contracts/schemas/tag.d.ts.map +1 -1
  142. package/dist/contracts/schemas/tag.js +2 -0
  143. package/dist/contracts/schemas/tag.js.map +1 -1
  144. package/dist/engagement/notifications/contract/index.d.ts +5 -1
  145. package/dist/engagement/notifications/contract/index.d.ts.map +1 -1
  146. package/dist/engagement/notifications/contract/index.js +5 -1
  147. package/dist/engagement/notifications/contract/index.js.map +1 -1
  148. package/dist/engagement/notifications/plugin.d.ts.map +1 -1
  149. package/dist/engagement/notifications/plugin.js +43 -3
  150. package/dist/engagement/notifications/plugin.js.map +1 -1
  151. package/dist/engagement/notifications/router/index.d.ts +1 -0
  152. package/dist/engagement/notifications/router/index.d.ts.map +1 -1
  153. package/dist/iam/__tests__/admin-player-activity.test.d.ts +2 -0
  154. package/dist/iam/__tests__/admin-player-activity.test.d.ts.map +1 -0
  155. package/dist/iam/__tests__/admin-player-activity.test.js +58 -0
  156. package/dist/iam/__tests__/admin-player-activity.test.js.map +1 -0
  157. package/dist/iam/adapters/admin-player-activity.d.ts +10 -0
  158. package/dist/iam/adapters/admin-player-activity.d.ts.map +1 -0
  159. package/dist/iam/adapters/admin-player-activity.js +99 -0
  160. package/dist/iam/adapters/admin-player-activity.js.map +1 -0
  161. package/dist/iam/plugin.d.ts.map +1 -1
  162. package/dist/iam/plugin.js +3 -1
  163. package/dist/iam/plugin.js.map +1 -1
  164. package/dist/iam/service/iam.service.d.ts +1 -1
  165. package/dist/pam/identity/__tests__/admin-user-directory.test.js +1 -1
  166. package/dist/pam/identity/admin-user-directory.d.ts +1 -1
  167. package/dist/pam/identity/admin-user-directory.d.ts.map +1 -1
  168. package/dist/pam/identity/admin-user-directory.js +6 -3
  169. package/dist/pam/identity/admin-user-directory.js.map +1 -1
  170. package/dist/pam/player-management/__tests__/kyc-status-writer.test.js +5 -2
  171. package/dist/pam/player-management/__tests__/kyc-status-writer.test.js.map +1 -1
  172. package/dist/pam/player-management/__tests__/player.router.test.js +27 -20
  173. package/dist/pam/player-management/__tests__/player.router.test.js.map +1 -1
  174. package/dist/pam/player-management/__tests__/player.service.test.js +4 -31
  175. package/dist/pam/player-management/__tests__/player.service.test.js.map +1 -1
  176. package/dist/pam/player-management/contract/index.d.ts +16 -8
  177. package/dist/pam/player-management/contract/index.d.ts.map +1 -1
  178. package/dist/pam/player-management/contract/index.js +0 -1
  179. package/dist/pam/player-management/contract/index.js.map +1 -1
  180. package/dist/pam/player-management/plugin.d.ts.map +1 -1
  181. package/dist/pam/player-management/plugin.js +3 -2
  182. package/dist/pam/player-management/plugin.js.map +1 -1
  183. package/dist/pam/player-management/router/index.d.ts +15 -9
  184. package/dist/pam/player-management/router/index.d.ts.map +1 -1
  185. package/dist/pam/player-management/router/index.js +48 -16
  186. package/dist/pam/player-management/router/index.js.map +1 -1
  187. package/dist/pam/player-management/service/kyc-status-writer.d.ts +3 -2
  188. package/dist/pam/player-management/service/kyc-status-writer.d.ts.map +1 -1
  189. package/dist/pam/player-management/service/kyc-status-writer.js +24 -10
  190. package/dist/pam/player-management/service/kyc-status-writer.js.map +1 -1
  191. package/dist/pam/player-management/service/player.service.d.ts +8 -9
  192. package/dist/pam/player-management/service/player.service.d.ts.map +1 -1
  193. package/dist/pam/player-management/service/player.service.js +11 -12
  194. package/dist/pam/player-management/service/player.service.js.map +1 -1
  195. package/dist/pam/profile/contract/index.d.ts +2 -0
  196. package/dist/pam/profile/contract/index.d.ts.map +1 -1
  197. package/dist/pam/profile/drizzle/migrations/0001_powerful_tiger_shark.sql +1 -0
  198. package/dist/pam/profile/drizzle/migrations/meta/0001_snapshot.json +191 -0
  199. package/dist/pam/profile/drizzle/migrations/meta/_journal.json +7 -0
  200. package/dist/pam/profile/react/profile.d.ts +2 -2
  201. package/dist/pam/profile/router/index.d.ts +2 -0
  202. package/dist/pam/profile/router/index.d.ts.map +1 -1
  203. package/dist/pam/profile/schema/index.d.ts +3 -3
  204. package/dist/pam/profile/schema/index.d.ts.map +1 -1
  205. package/dist/pam/profile/service/profile.service.d.ts +2 -2
  206. package/dist/pam/shared/player-mapper.d.ts +1 -1
  207. package/dist/pam/tag/__tests__/tag-evaluation.service.test.js +20 -3
  208. package/dist/pam/tag/__tests__/tag-evaluation.service.test.js.map +1 -1
  209. package/dist/pam/tag/contract/index.d.ts +26 -0
  210. package/dist/pam/tag/contract/index.d.ts.map +1 -1
  211. package/dist/pam/tag/drizzle/migrations/0004_curvy_wither.sql +2 -0
  212. package/dist/pam/tag/drizzle/migrations/meta/0004_snapshot.json +345 -0
  213. package/dist/pam/tag/drizzle/migrations/meta/_journal.json +7 -0
  214. package/dist/pam/tag/plugin.d.ts.map +1 -1
  215. package/dist/pam/tag/plugin.js +10 -2
  216. package/dist/pam/tag/plugin.js.map +1 -1
  217. package/dist/pam/tag/router/index.d.ts +24 -0
  218. package/dist/pam/tag/router/index.d.ts.map +1 -1
  219. package/dist/pam/tag/schema/index.d.ts +3 -3
  220. package/dist/pam/tag/schema/index.d.ts.map +1 -1
  221. package/dist/pam/tag/seed/data/default-tag-rules.d.ts.map +1 -1
  222. package/dist/pam/tag/seed/data/default-tag-rules.js +14 -0
  223. package/dist/pam/tag/seed/data/default-tag-rules.js.map +1 -1
  224. package/dist/pam/tag/seed/data/default-tags.d.ts.map +1 -1
  225. package/dist/pam/tag/seed/data/default-tags.js +2 -0
  226. package/dist/pam/tag/seed/data/default-tags.js.map +1 -1
  227. package/dist/pam/tag/service/tag-evaluation.service.d.ts +33 -9
  228. package/dist/pam/tag/service/tag-evaluation.service.d.ts.map +1 -1
  229. package/dist/pam/tag/service/tag-evaluation.service.js +125 -19
  230. package/dist/pam/tag/service/tag-evaluation.service.js.map +1 -1
  231. package/dist/pam/tag/service/tag-mappers.d.ts +1 -1
  232. package/dist/pam/tag/service/tag-rule.service.d.ts +3 -3
  233. package/dist/pam/tag/service/tag.service.d.ts +8 -8
  234. package/dist/server/kernel/bullmq-job-queue.d.ts.map +1 -1
  235. package/dist/server/kernel/bullmq-job-queue.js +17 -0
  236. package/dist/server/kernel/bullmq-job-queue.js.map +1 -1
  237. package/dist/server/plugin-host/define-plugin.d.ts +2 -2
  238. package/dist/server/plugin-host/define-plugin.d.ts.map +1 -1
  239. package/dist/server/plugin-host/define-plugin.js.map +1 -1
  240. package/dist/wallet/__tests__/wallet.service.test.js +18 -0
  241. package/dist/wallet/__tests__/wallet.service.test.js.map +1 -1
  242. package/dist/wallet/contract/index.d.ts +4 -0
  243. package/dist/wallet/contract/index.d.ts.map +1 -1
  244. package/dist/wallet/router/index.d.ts +2 -0
  245. package/dist/wallet/router/index.d.ts.map +1 -1
  246. package/dist/wallet/service/wallet.service.d.ts +1 -2
  247. package/dist/wallet/service/wallet.service.d.ts.map +1 -1
  248. package/dist/wallet/service/wallet.service.js +17 -7
  249. package/dist/wallet/service/wallet.service.js.map +1 -1
  250. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/engagement/notifications/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/engagement/notifications/plugin.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export declare function createNotificationsRouter(notifications: NotificationsSe
7
7
  type: import("zod").ZodEnum<{
8
8
  "withdrawal.approved": "withdrawal.approved";
9
9
  "withdrawal.rejected": "withdrawal.rejected";
10
+ "kyc.resubmission_requested": "kyc.resubmission_requested";
10
11
  }>;
11
12
  title: import("zod").ZodString;
12
13
  body: import("zod").ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/engagement/notifications/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EACL,oBAAoB,EAGrB,MAAM,qCAAqC,CAAC;AAE7C,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAmC5E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/engagement/notifications/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EACL,oBAAoB,EAGrB,MAAM,qCAAqC,CAAC;AAE7C,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;EAmC5E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=admin-player-activity.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-player-activity.test.d.ts","sourceRoot":"","sources":["../../../src/iam/__tests__/admin-player-activity.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { mock } from '../../testing/mock.js';
3
+ import { DrizzleAdminPlayerActivity } from '../adapters/admin-player-activity.js';
4
+ function makeDrizzle(rows) {
5
+ const execute = vi.fn().mockResolvedValue({ rows });
6
+ return { drizzle: mock({ db: { execute } }), execute };
7
+ }
8
+ describe('DrizzleAdminPlayerActivity.getRegistrationsOverTime', () => {
9
+ it('maps rows to { date, registrations } with a numeric count', async () => {
10
+ const { drizzle } = makeDrizzle([{ date: '2026-01-01', registrations: '3' }]);
11
+ const svc = new DrizzleAdminPlayerActivity(drizzle);
12
+ const rows = await svc.getRegistrationsOverTime({});
13
+ expect(rows).toEqual([{ date: '2026-01-01', registrations: 3 }]);
14
+ });
15
+ it('runs a single query even without an explicit date range (defaults applied)', async () => {
16
+ const { drizzle, execute } = makeDrizzle([]);
17
+ const svc = new DrizzleAdminPlayerActivity(drizzle);
18
+ await svc.getRegistrationsOverTime({});
19
+ expect(execute).toHaveBeenCalledOnce();
20
+ });
21
+ });
22
+ describe('DrizzleAdminPlayerActivity.getActiveUsersTrend', () => {
23
+ it('maps rows to { date, dau, wau, mau } as numbers', async () => {
24
+ const { drizzle } = makeDrizzle([{ date: '2026-01-01', dau: '1', wau: '4', mau: '10' }]);
25
+ const svc = new DrizzleAdminPlayerActivity(drizzle);
26
+ const rows = await svc.getActiveUsersTrend({});
27
+ expect(rows).toEqual([{ date: '2026-01-01', dau: 1, wau: 4, mau: 10 }]);
28
+ });
29
+ });
30
+ describe('DrizzleAdminPlayerActivity.getRetentionCohorts', () => {
31
+ it('computes returnRate from cohortSize/returned and passes through isComplete', async () => {
32
+ const { drizzle } = makeDrizzle([
33
+ { cohort_date: '2026-01-01', cohort_size: '10', returned: '4', is_complete: true },
34
+ ]);
35
+ const svc = new DrizzleAdminPlayerActivity(drizzle);
36
+ const rows = await svc.getRetentionCohorts({}, 7);
37
+ expect(rows).toEqual([
38
+ { cohortDate: '2026-01-01', cohortSize: 10, returned: 4, returnRate: 0.4, isComplete: true },
39
+ ]);
40
+ });
41
+ it('flags an incomplete cohort whose window has not elapsed yet', async () => {
42
+ const { drizzle } = makeDrizzle([
43
+ { cohort_date: '2026-07-20', cohort_size: '5', returned: '1', is_complete: false },
44
+ ]);
45
+ const svc = new DrizzleAdminPlayerActivity(drizzle);
46
+ const rows = await svc.getRetentionCohorts({}, 30);
47
+ expect(rows[0]?.isComplete).toBe(false);
48
+ });
49
+ it('returns a 0 rate for an empty cohort instead of dividing by zero', async () => {
50
+ const { drizzle } = makeDrizzle([
51
+ { cohort_date: '2026-01-01', cohort_size: '0', returned: '0', is_complete: false },
52
+ ]);
53
+ const svc = new DrizzleAdminPlayerActivity(drizzle);
54
+ const rows = await svc.getRetentionCohorts({}, 30);
55
+ expect(rows[0]?.returnRate).toBe(0);
56
+ });
57
+ });
58
+ //# sourceMappingURL=admin-player-activity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-player-activity.test.js","sourceRoot":"","sources":["../../../src/iam/__tests__/admin-player-activity.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ActiveUsersTrendPoint, AdminPlayerActivity, PlayerActivityFilter, RegistrationsOverTimePoint, RetentionCohortRow } from '@openora/core/contracts';
2
+ import { DrizzleService } from '@openora/core/server';
3
+ export declare class DrizzleAdminPlayerActivity implements AdminPlayerActivity {
4
+ private readonly drizzle;
5
+ constructor(drizzle: DrizzleService);
6
+ getRegistrationsOverTime(filter: PlayerActivityFilter): Promise<RegistrationsOverTimePoint[]>;
7
+ getActiveUsersTrend(filter: PlayerActivityFilter): Promise<ActiveUsersTrendPoint[]>;
8
+ getRetentionCohorts(filter: PlayerActivityFilter, windowDays: 7 | 30): Promise<RetentionCohortRow[]>;
9
+ }
10
+ //# sourceMappingURL=admin-player-activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-player-activity.d.ts","sourceRoot":"","sources":["../../../src/iam/adapters/admin-player-activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkBtD,qBAAa,0BAA2B,YAAW,mBAAmB;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,wBAAwB,CAC5B,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAiBlC,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA6BnF,mBAAmB,CACvB,MAAM,EAAE,oBAAoB,EAC5B,UAAU,EAAE,CAAC,GAAG,EAAE,GACjB,OAAO,CAAC,kBAAkB,EAAE,CAAC;CA4CjC"}
@@ -0,0 +1,99 @@
1
+ import { sql } from 'drizzle-orm';
2
+ // Read-only cross-domain read of the user/session tables via the public /schema
3
+ // subpath (allowed per ADR-0020/0025) - iam already depends on identity (plugin.ts),
4
+ // which owns these tables. Mirrors how identity's DrizzleAdminUserDirectory reads
5
+ // the profile module's `player` table.
6
+ import { session, user } from '@openora/core/pam/schema/identity';
7
+ const DEFAULT_RANGE_DAYS = 30;
8
+ function resolveRange(filter) {
9
+ const to = filter.dateTo ?? new Date();
10
+ const from = filter.dateFrom ?? new Date(to.getTime() - DEFAULT_RANGE_DAYS * 24 * 60 * 60 * 1000);
11
+ return { from, to };
12
+ }
13
+ // See ADR-0017/0025. iam/AGENTS.md documents why this port lives here even though
14
+ // identity owns the underlying tables.
15
+ export class DrizzleAdminPlayerActivity {
16
+ drizzle;
17
+ constructor(drizzle) {
18
+ this.drizzle = drizzle;
19
+ }
20
+ async getRegistrationsOverTime(filter) {
21
+ const { from, to } = resolveRange(filter);
22
+ const result = await this.drizzle.db.execute(sql `
23
+ select gs::date::text as date, count(${user.id})::int as registrations
24
+ from generate_series(${from}::date, ${to}::date, interval '1 day') as gs
25
+ left join ${user} on date_trunc('day', ${user.createdAt}) = gs
26
+ group by gs
27
+ order by gs
28
+ `);
29
+ return result.rows.map((r) => ({ date: r.date, registrations: Number(r.registrations) }));
30
+ }
31
+ // "Active" = a session row whose `updatedAt` falls in the trailing window. Chosen over
32
+ // `createdAt` because better-auth refreshes a session's `updatedAt` on continued use
33
+ // (schema/index.ts `$onUpdateFn`), so it approximates ongoing activity across the
34
+ // session's lifetime; `createdAt` would only capture the single login moment. This is
35
+ // the same "active" definition reused below for retention's "has a session row" check.
36
+ async getActiveUsersTrend(filter) {
37
+ const { from, to } = resolveRange(filter);
38
+ const result = await this.drizzle.db.execute(sql `
39
+ select
40
+ gs::date::text as date,
41
+ (select count(distinct ${session.userId}) from ${session}
42
+ where ${session.updatedAt} >= gs and ${session.updatedAt} < gs + interval '1 day') as dau,
43
+ (select count(distinct ${session.userId}) from ${session}
44
+ where ${session.updatedAt} >= gs - interval '6 days'
45
+ and ${session.updatedAt} < gs + interval '1 day') as wau,
46
+ (select count(distinct ${session.userId}) from ${session}
47
+ where ${session.updatedAt} >= gs - interval '29 days'
48
+ and ${session.updatedAt} < gs + interval '1 day') as mau
49
+ from generate_series(${from}::date, ${to}::date, interval '1 day') as gs
50
+ order by gs
51
+ `);
52
+ return result.rows.map((r) => ({
53
+ date: r.date,
54
+ dau: Number(r.dau),
55
+ wau: Number(r.wau),
56
+ mau: Number(r.mau),
57
+ }));
58
+ }
59
+ async getRetentionCohorts(filter, windowDays) {
60
+ const { from, to } = resolveRange(filter);
61
+ const result = await this.drizzle.db.execute(sql `
62
+ with cohort_users as (
63
+ select ${user.id} as user_id, date_trunc('day', ${user.createdAt}) as cohort_date,
64
+ ${user.createdAt} as registered_at
65
+ from ${user}
66
+ where ${user.createdAt} >= ${from} and ${user.createdAt} <= ${to}
67
+ ),
68
+ returned_users as (
69
+ select distinct cu.user_id
70
+ from cohort_users cu
71
+ inner join ${session} s
72
+ on s.user_id = cu.user_id
73
+ and s.updated_at >= cu.registered_at
74
+ and s.updated_at <= cu.registered_at + interval '1 day' * ${windowDays}
75
+ )
76
+ select
77
+ cu.cohort_date::date::text as cohort_date,
78
+ count(cu.user_id) as cohort_size,
79
+ count(ru.user_id) as returned,
80
+ (cu.cohort_date + interval '1 day' * ${windowDays} <= now()) as is_complete
81
+ from cohort_users cu
82
+ left join returned_users ru on ru.user_id = cu.user_id
83
+ group by cu.cohort_date
84
+ order by cu.cohort_date
85
+ `);
86
+ return result.rows.map((r) => {
87
+ const cohortSize = Number(r.cohort_size);
88
+ const returned = Number(r.returned);
89
+ return {
90
+ cohortDate: r.cohort_date,
91
+ cohortSize,
92
+ returned,
93
+ returnRate: cohortSize > 0 ? returned / cohortSize : 0,
94
+ isComplete: r.is_complete,
95
+ };
96
+ });
97
+ }
98
+ }
99
+ //# sourceMappingURL=admin-player-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-player-activity.js","sourceRoot":"","sources":["../../../src/iam/adapters/admin-player-activity.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/iam/plugin.ts"],"names":[],"mappings":";AAaA,wBAuDG"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/iam/plugin.ts"],"names":[],"mappings":";AAeA,wBAyDG"}
@@ -1,7 +1,8 @@
1
1
  import { definePlugin, EVENT_BUS, DRIZZLE, ADMIN_GUARD, createLogger } from '@openora/core/server';
2
- import { ADMIN_PERMISSION_RESOLVER, SEND_EMAIL, SESSION_COMMANDS, CACHE, domainEventSchemas, } from '@openora/core/contracts';
2
+ import { ADMIN_PERMISSION_RESOLVER, ADMIN_PLAYER_ACTIVITY, SEND_EMAIL, SESSION_COMMANDS, CACHE, domainEventSchemas, } from '@openora/core/contracts';
3
3
  import { IamService, DbAdminPermissionResolver } from './service/iam.service.js';
4
4
  import { createIamRouter } from './router/index.js';
5
+ import { DrizzleAdminPlayerActivity } from './adapters/admin-player-activity.js';
5
6
  const logger = createLogger('iam');
6
7
  export default definePlugin({
7
8
  id: 'iam',
@@ -41,6 +42,7 @@ export default definePlugin({
41
42
  .invalidateRole(parsed.data.roleId)
42
43
  .catch((err) => logger.error({ err }, 'grant cache purge failed'));
43
44
  });
45
+ ctx.provide(ADMIN_PLAYER_ACTIVITY, (c) => new DrizzleAdminPlayerActivity(c.get(DRIZZLE)));
44
46
  ctx.routers.add('iam', (c) => createIamRouter(new IamService(c.get(DRIZZLE), c.get(EVENT_BUS), c.get(SEND_EMAIL), c.get(SESSION_COMMANDS)), c.get(ADMIN_GUARD)));
45
47
  },
46
48
  });
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/iam/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/iam/plugin.ts"],"names":[],"mappings":"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"}
@@ -39,7 +39,7 @@ export declare class IamService {
39
39
  private assertSuperAdmin;
40
40
  listCatalog(): {
41
41
  modules: {
42
- resource: "admin" | "player" | "withdrawal" | "bonus" | "report" | "audit" | "compliance" | "tag" | "analytics" | "player-note" | "transaction" | "game" | "content" | "game-config" | "sportsbook" | "affiliate" | "sessions" | "tag-rule" | "chat-room";
42
+ resource: "admin" | "player" | "withdrawal" | "bonus" | "sportsbook" | "report" | "audit" | "compliance" | "tag" | "analytics" | "player-note" | "transaction" | "game" | "content" | "game-config" | "affiliate" | "sessions" | "tag-rule" | "chat-room";
43
43
  actions: string[];
44
44
  readActions: string[];
45
45
  }[];
@@ -143,7 +143,7 @@ describe('DrizzleAdminUserDirectory.lookupPlayers (real PG)', () => {
143
143
  userId: account.id,
144
144
  username: 'alice',
145
145
  email: 'alice@example.com',
146
- kycStatus: 'verified',
146
+ kycStatus: 'approved',
147
147
  language: 'en',
148
148
  });
149
149
  });
@@ -43,7 +43,7 @@ export declare class DrizzleAdminUserDirectory implements AdminUserDirectory {
43
43
  lockoutUntil: Date | null;
44
44
  } | null>;
45
45
  lookupPlayers(userIds: readonly string[]): Promise<{
46
- kycStatus: "pending" | "not_started" | "verified" | "rejected" | "resubmission_requested" | "manually_overridden" | null;
46
+ kycStatus: "pending" | "not_started" | "approved" | "verified" | "rejected" | "resubmission_requested" | "manually_overridden" | null;
47
47
  userId: string;
48
48
  username: string;
49
49
  email: string;
@@ -1 +1 @@
1
- {"version":3,"file":"admin-user-directory.d.ts","sourceRoot":"","sources":["../../../src/pam/identity/admin-user-directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEpG,OAAO,EAAE,cAAc,EAAgB,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAuBrD,qBAAa,yBAA0B,YAAW,kBAAkB;IAEhE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,QAAQ;IAG7B,KAAK;IAKL,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,oBAAoB;;;;;;;;;;;;;IAmCrE,GAAG,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;IAKd,MAAM,CACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAC5C,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,UAAU;;;;;;;;;;IAgCb,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;;;;;;;IA6BxC,aAAa,CAAC,KAAK,EAAE,MAAM;CAoBlC"}
1
+ {"version":3,"file":"admin-user-directory.d.ts","sourceRoot":"","sources":["../../../src/pam/identity/admin-user-directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEpG,OAAO,EAAE,cAAc,EAAgB,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAuBrD,qBAAa,yBAA0B,YAAW,kBAAkB;IAEhE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,QAAQ;IAG7B,KAAK;IAKL,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,oBAAoB;;;;;;;;;;;;;IAmCrE,GAAG,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;IAKd,MAAM,CACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAC5C,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,UAAU;;;;;;;;;;IAgCb,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;;;;;;;IAgCxC,aAAa,CAAC,KAAK,EAAE,MAAM;CAoBlC"}
@@ -1,4 +1,4 @@
1
- import { KycStatusSchema, UserRoleSchema } from '@openora/core/contracts';
1
+ import { KycStatusSchema, UserRoleSchema, normalizeKycStatus } from '@openora/core/contracts';
2
2
  import { pageToOffset } from '@openora/core/server';
3
3
  import { asc, count, desc, eq, ilike, inArray } from 'drizzle-orm';
4
4
  import { user } from './schema/index.js';
@@ -113,11 +113,14 @@ export class DrizzleAdminUserDirectory {
113
113
  .where(inArray(player.userId, [...userIds]));
114
114
  return rows.map((r) => {
115
115
  // The player table stores kycStatus as free text; coerce unknown values to null
116
- // so the port's KycStatus contract holds without a cast.
116
+ // so the port's KycStatus contract holds without a cast. Normalize the deprecated
117
+ // `verified` value to `approved` here - the single read boundary every admin
118
+ // consumer (wallet queue filter, tag evaluation, admin-console) goes through -
119
+ // so a legacy row is indistinguishable from a fresh one downstream.
117
120
  const kyc = KycStatusSchema.safeParse(r.kycStatus);
118
121
  return {
119
122
  ...r,
120
- kycStatus: kyc.success ? kyc.data : null,
123
+ kycStatus: kyc.success ? normalizeKycStatus(kyc.data) : null,
121
124
  };
122
125
  });
123
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"admin-user-directory.js","sourceRoot":"","sources":["../../../src/pam/identity/admin-user-directory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-user-directory.js","sourceRoot":"","sources":["../../../src/pam/identity/admin-user-directory.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { player } from '@openora/core/pam/schema/profile';
6
6
  import { migrate as migrateProfile } from '@openora/core/pam/migrate/profile';
7
7
  import { makeEventBus } from '../../../testing/mock.js';
8
8
  import { PlayerKycStatusWriter } from '../service/kyc-status-writer.js';
9
+ import { PlayerNotFoundError } from '../service/player.service.js';
9
10
  let db;
10
11
  function makeWriter() {
11
12
  const events = makeEventBus();
@@ -43,6 +44,8 @@ describe('PlayerKycStatusWriter.setStatus (real PG)', () => {
43
44
  actorId,
44
45
  status: 'verified',
45
46
  previousStatus: 'pending',
47
+ reason: null,
48
+ source: 'manual',
46
49
  });
47
50
  });
48
51
  it('is a silent no-op when the status is unchanged', async () => {
@@ -51,9 +54,9 @@ describe('PlayerKycStatusWriter.setStatus (real PG)', () => {
51
54
  await writer.setStatus(userId, 'verified', { actorId: null, source: 'vendor' });
52
55
  expect(events.emit).not.toHaveBeenCalled();
53
56
  });
54
- it('is a no-op for a user with no player profile', async () => {
57
+ it('throws PlayerNotFoundError for a user with no player profile and emits nothing', async () => {
55
58
  const { writer, events } = makeWriter();
56
- await writer.setStatus(randomUUID(), 'verified', { actorId: null, source: 'vendor' });
59
+ await expect(writer.setStatus(randomUUID(), 'verified', { actorId: null, source: 'vendor' })).rejects.toBeInstanceOf(PlayerNotFoundError);
57
60
  expect(events.emit).not.toHaveBeenCalled();
58
61
  });
59
62
  it('leaves other players untouched', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"kyc-status-writer.test.js","sourceRoot":"","sources":["../../../../src/pam/player-management/__tests__/kyc-status-writer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kyc-status-writer.test.js","sourceRoot":"","sources":["../../../../src/pam/player-management/__tests__/kyc-status-writer.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { describe, it, expect, vi, beforeAll, afterAll, beforeEach } from 'vitest';
1
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { eq, sql } from 'drizzle-orm';
4
- import { call, ORPCError } from '@orpc/server';
4
+ import { call } from '@orpc/server';
5
5
  import { createTestDb } from '@openora/core/testing';
6
6
  import { user } from '@openora/core/pam/schema/identity';
7
7
  import { migrate as migrateIdentity } from '@openora/core/pam/migrate/identity';
@@ -9,7 +9,7 @@ import { player } from '@openora/core/pam/schema/profile';
9
9
  import { migrate as migrateProfile } from '@openora/core/pam/migrate/profile';
10
10
  import { tag, playerTag } from '@openora/core/pam/schema/tag';
11
11
  import { migrate as migrateTag } from '@openora/core/pam/migrate/tag';
12
- import { mock, makeAdminGuard, makeEventBus, testContext } from '../../../testing/mock.js';
12
+ import { makeAdminGuard, makeAuditWriter, makeEventBus, testContext, } from '../../../testing/mock.js';
13
13
  import { createPlayerRouter } from '../router/index.js';
14
14
  import { PlayerService } from '../service/player.service.js';
15
15
  const CTX = testContext();
@@ -26,9 +26,9 @@ beforeEach(async () => {
26
26
  });
27
27
  const guardAllowing = (allow) => makeAdminGuard({ allow, caller: { userId: CALLER } });
28
28
  function build(adminGuard) {
29
- const kycStatusWriter = mock({ setStatus: vi.fn() });
30
- const service = new PlayerService(db.drizzle, kycStatusWriter, makeEventBus());
31
- return { router: createPlayerRouter(service, adminGuard), kycStatusWriter };
29
+ const service = new PlayerService(db.drizzle, makeEventBus());
30
+ const audit = makeAuditWriter();
31
+ return { router: createPlayerRouter(service, adminGuard, audit), audit };
32
32
  }
33
33
  async function seedPlayer() {
34
34
  const [account] = await db.drizzle.db
@@ -45,20 +45,7 @@ async function storedPlayer(id) {
45
45
  const [row] = await db.drizzle.db.select().from(player).where(eq(player.id, id));
46
46
  return row;
47
47
  }
48
- describe('player router update KYC authz', () => {
49
- it('rejects a kycStatus change without compliance:override-limit and writes nothing', async () => {
50
- const seeded = await seedPlayer();
51
- const { router, kycStatusWriter } = build(guardAllowing(['player:update']));
52
- await expect(call(router.update, { playerId: seeded.id, kycStatus: 'verified' }, { context: CTX })).rejects.toBeInstanceOf(ORPCError);
53
- expect(kycStatusWriter.setStatus).not.toHaveBeenCalled();
54
- expect((await storedPlayer(seeded.id))?.kycStatus).toBe(seeded.kycStatus);
55
- });
56
- it('routes a gated kycStatus change through KYC_STATUS_WRITER', async () => {
57
- const seeded = await seedPlayer();
58
- const { router, kycStatusWriter } = build(guardAllowing(['player:update', 'compliance:override-limit']));
59
- await call(router.update, { playerId: seeded.id, kycStatus: 'verified' }, { context: CTX });
60
- expect(kycStatusWriter.setStatus).toHaveBeenCalledWith(seeded.userId, 'verified', { actorId: CALLER, source: 'manual' }, expect.anything());
61
- });
48
+ describe('player router update', () => {
62
49
  it('persists a non-KYC update with only player:update', async () => {
63
50
  const seeded = await seedPlayer();
64
51
  const { router } = build(guardAllowing(['player:update']));
@@ -66,6 +53,26 @@ describe('player router update KYC authz', () => {
66
53
  expect(result.displayName).toBe('New');
67
54
  expect((await storedPlayer(seeded.id))?.displayName).toBe('New');
68
55
  });
56
+ it('records an admin.player.updated audit entry with before/after snapshots', async () => {
57
+ const seeded = await seedPlayer();
58
+ const { router, audit } = build(guardAllowing(['player:update']));
59
+ await call(router.update, { playerId: seeded.id, displayName: 'New' }, { context: CTX });
60
+ expect(audit.record).toHaveBeenCalledWith(expect.objectContaining({
61
+ actorId: CALLER,
62
+ actorType: 'admin',
63
+ action: 'admin.player.updated',
64
+ resourceType: 'player',
65
+ resourceId: seeded.id,
66
+ before: expect.objectContaining({ displayName: 'Player' }),
67
+ after: expect.objectContaining({ displayName: 'New' }),
68
+ }));
69
+ });
70
+ it('writes no audit entry when the guard rejects the caller', async () => {
71
+ const seeded = await seedPlayer();
72
+ const { router, audit } = build(guardAllowing([]));
73
+ await expect(call(router.update, { playerId: seeded.id, displayName: 'New' }, { context: CTX })).rejects.toBeDefined();
74
+ expect(audit.record).not.toHaveBeenCalled();
75
+ });
69
76
  it('maps an unknown player to NOT_FOUND', async () => {
70
77
  const { router } = build(guardAllowing(['player:update']));
71
78
  await expect(call(router.update, { playerId: randomUUID(), displayName: 'New' }, { context: CTX })).rejects.toMatchObject({ code: 'NOT_FOUND' });
@@ -1 +1 @@
1
- {"version":3,"file":"player.router.test.js","sourceRoot":"","sources":["../../../../src/pam/player-management/__tests__/player.router.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"player.router.test.js","sourceRoot":"","sources":["../../../../src/pam/player-management/__tests__/player.router.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, vi, beforeAll, afterAll, beforeEach } from 'vitest';
1
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { eq, sql } from 'drizzle-orm';
4
4
  import { createTestDb } from '@openora/core/testing';
@@ -8,13 +8,12 @@ import { player } from '@openora/core/pam/schema/profile';
8
8
  import { migrate as migrateProfile } from '@openora/core/pam/migrate/profile';
9
9
  import { tag, playerTag } from '@openora/core/pam/schema/tag';
10
10
  import { migrate as migrateTag } from '@openora/core/pam/migrate/tag';
11
- import { mock, makeEventBus } from '../../../testing/mock.js';
11
+ import { makeEventBus } from '../../../testing/mock.js';
12
12
  import { PlayerService, PlayerNotFoundError, DuplicateEmailError, } from '../service/player.service.js';
13
13
  let db;
14
- function makeService(writer = { setStatus: vi.fn() }) {
15
- const kycStatusWriter = mock(writer);
14
+ function makeService() {
16
15
  const events = makeEventBus();
17
- return { svc: new PlayerService(db.drizzle, kycStatusWriter, events), kycStatusWriter, events };
16
+ return { svc: new PlayerService(db.drizzle, events), events };
18
17
  }
19
18
  async function seedUser(overrides = {}) {
20
19
  const [row] = await db.drizzle.db
@@ -207,32 +206,6 @@ describe('PlayerService.update (real PG)', () => {
207
206
  const { player: seeded, account } = await seedPlayerWithUser();
208
207
  await expect(svc.update(seeded.id, { email: taken.email }, account.id)).rejects.toBeInstanceOf(DuplicateEmailError);
209
208
  });
210
- it('delegates a kycStatus change to the KYC_STATUS_WRITER on the same transaction', async () => {
211
- const setStatus = vi.fn(async () => undefined);
212
- const { svc } = makeService({ setStatus });
213
- const { player: seeded, account } = await seedPlayerWithUser({}, { kycStatus: 'pending' });
214
- await svc.update(seeded.id, { kycStatus: 'verified' }, account.id);
215
- expect(setStatus).toHaveBeenCalledWith(account.id, 'verified', { actorId: account.id, source: 'manual' }, expect.anything());
216
- });
217
- it('does not call the KYC_STATUS_WRITER when kycStatus is unchanged', async () => {
218
- const setStatus = vi.fn(async () => undefined);
219
- const { svc } = makeService({ setStatus });
220
- const { player: seeded, account } = await seedPlayerWithUser({}, { kycStatus: 'verified' });
221
- await svc.update(seeded.id, { kycStatus: 'verified' }, account.id);
222
- expect(setStatus).not.toHaveBeenCalled();
223
- });
224
- it('rolls the whole update back when the KYC_STATUS_WRITER throws', async () => {
225
- const setStatus = vi.fn(async () => {
226
- throw new Error('writer down');
227
- });
228
- const { svc } = makeService({ setStatus });
229
- const { player: seeded, account } = await seedPlayerWithUser({}, { displayName: 'Original', kycStatus: 'pending' });
230
- await expect(svc.update(seeded.id, { displayName: 'Renamed', kycStatus: 'verified' }, account.id)).rejects.toThrow('writer down');
231
- expect(await rowById(seeded.id)).toMatchObject({
232
- displayName: 'Original',
233
- kycStatus: 'pending',
234
- });
235
- });
236
209
  it('throws PlayerNotFoundError for an unknown id', async () => {
237
210
  const { svc } = makeService();
238
211
  await expect(svc.update(randomUUID(), { displayName: 'X' }, randomUUID())).rejects.toBeInstanceOf(PlayerNotFoundError);