@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,4 +1,6 @@
1
- import { createHmac, timingSafeEqual } from 'node:crypto';
1
+ import { createHash, createHmac, timingSafeEqual } from 'node:crypto';
2
+ import { createLogger } from '@openora/core/server';
3
+ const logger = createLogger('hmac-kyc-webhook-verifier');
2
4
  function findHeader(headers, name) {
3
5
  const key = Object.keys(headers).find((k) => k.toLowerCase() === name.toLowerCase());
4
6
  if (!key) {
@@ -7,18 +9,43 @@ function findHeader(headers, name) {
7
9
  const raw = headers[key];
8
10
  return Array.isArray(raw) ? (raw[0] ?? null) : (raw ?? null);
9
11
  }
12
+ // A captured, genuinely-valid (body, signature) pair never expires on its own - HMAC
13
+ // has no built-in freshness. Reject a signature we've already accepted within this
14
+ // window; only a matching duplicate landing INSIDE the window is ever rejected, which
15
+ // comfortably covers a vendor's own legitimate retry burst (eg Didit's ~5s/2 retries)
16
+ // while still closing most of the "resend a captured payload later" attack. Bounded,
17
+ // not infinite: a store that never forgets grows without limit, and every accepted
18
+ // decision beyond this window still passes through the compliance service's own
19
+ // idempotent DB-guard (KycVerificationService.reconcile) plus its decision-monotonicity
20
+ // check, which refuses to apply a decision older than the one already on file - genuine
21
+ // defense in depth for a replay that outlives this cache entry.
22
+ const REPLAY_WINDOW_MS = 10 * 60 * 1000;
23
+ const REPLAY_CACHE_PREFIX = 'kyc-webhook-seen:';
10
24
  /**
11
25
  * Default KYC-webhook verifier: recomputes an HMAC-SHA256 of the raw request body
12
26
  * keyed by the configured secret and constant-time compares the hex digest against
13
27
  * the `x-kyc-signature` header (a leading `sha256=` is tolerated). Fails closed when
14
28
  * the secret is unset, the signature is absent, or the body was not captured.
29
+ *
30
+ * Also rejects a signature already seen within `REPLAY_WINDOW_MS`, via the `CACHE`
31
+ * seam - the same port already bound cross-instance when `REDIS_URL` is set (ADR-0028),
32
+ * so replay detection coordinates across replicas with zero extra wiring; the
33
+ * in-process default degrades sensibly to per-instance-only protection. A vendor
34
+ * (eg Didit) may sign only the body, never a timestamp, so a signed-timestamp
35
+ * freshness check is not an option here - the signature itself is the only
36
+ * authenticated, replay-detectable value. A `CACHE` failure degrades OPEN (logs and
37
+ * treats the delivery as unseen) rather than blocking every webhook on an unrelated
38
+ * infra blip - the signature check above remains the fail-closed primary control;
39
+ * this is a secondary, best-effort layer.
15
40
  */
16
41
  export class HmacKycWebhookVerifier {
17
42
  secret;
18
- constructor(secret) {
43
+ cache;
44
+ constructor(secret, cache) {
19
45
  this.secret = secret;
46
+ this.cache = cache;
20
47
  }
21
- verify(rawBody, headers) {
48
+ async verify(rawBody, headers) {
22
49
  const signature = findHeader(headers, 'x-kyc-signature');
23
50
  if (!this.secret || !signature) {
24
51
  return false;
@@ -29,10 +56,25 @@ export class HmacKycWebhookVerifier {
29
56
  const expected = createHmac('sha256', this.secret).update(rawBody, 'utf8').digest('hex');
30
57
  const expectedBuf = Buffer.from(expected, 'utf8');
31
58
  const providedBuf = Buffer.from(provided, 'utf8');
32
- if (expectedBuf.length !== providedBuf.length) {
59
+ if (expectedBuf.length !== providedBuf.length || !timingSafeEqual(expectedBuf, providedBuf)) {
33
60
  return false;
34
61
  }
35
- return timingSafeEqual(expectedBuf, providedBuf);
62
+ return this.acceptOnce(provided);
63
+ }
64
+ async acceptOnce(signature) {
65
+ const key = `${REPLAY_CACHE_PREFIX}${createHash('sha256').update(signature).digest('hex')}`;
66
+ try {
67
+ const seen = await this.cache.get(key);
68
+ if (seen) {
69
+ return false;
70
+ }
71
+ await this.cache.set(key, true, { ttlMs: REPLAY_WINDOW_MS });
72
+ return true;
73
+ }
74
+ catch (err) {
75
+ logger.warn({ err }, 'kyc webhook replay-check cache unavailable - degrading open');
76
+ return true;
77
+ }
36
78
  }
37
79
  }
38
80
  //# sourceMappingURL=hmac-kyc-webhook-verifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hmac-kyc-webhook-verifier.js","sourceRoot":"","sources":["../../../src/compliance/adapters/hmac-kyc-webhook-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG1D,SAAS,UAAU,CACjB,OAAsD,EACtD,IAAY;IAEZ,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,sBAAsB;IACJ;IAA7B,YAA6B,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;IAAG,CAAC;IAE3D,MAAM,CAAC,OAAe,EAAE,OAAsD;QAC5E,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;YACnC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;CACF"}
1
+ {"version":3,"file":"hmac-kyc-webhook-verifier.js","sourceRoot":"","sources":["../../../src/compliance/adapters/hmac-kyc-webhook-verifier.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@ export declare const KycDocumentSchema: z.ZodObject<{
18
18
  frontUrl: z.ZodString;
19
19
  backUrl: z.ZodOptional<z.ZodString>;
20
20
  }, z.core.$strip>;
21
+ export declare const KycRiskSignalsSchema: z.ZodObject<{
22
+ vpnOrTorDetected: z.ZodBoolean;
23
+ dataCenterIpDetected: z.ZodBoolean;
24
+ duplicateDeviceDetected: z.ZodBoolean;
25
+ highRiskCountryDetected: z.ZodBoolean;
26
+ deviceFingerprints: z.ZodArray<z.ZodString>;
27
+ }, z.core.$strip>;
21
28
  export declare const KycVerificationSchema: z.ZodObject<{
22
29
  id: z.ZodUUID;
23
30
  userId: z.ZodUUID;
@@ -26,6 +33,7 @@ export declare const KycVerificationSchema: z.ZodObject<{
26
33
  status: z.ZodEnum<{
27
34
  pending: "pending";
28
35
  not_started: "not_started";
36
+ approved: "approved";
29
37
  verified: "verified";
30
38
  rejected: "rejected";
31
39
  resubmission_requested: "resubmission_requested";
@@ -42,6 +50,25 @@ export declare const KycVerificationSchema: z.ZodObject<{
42
50
  submission: "submission";
43
51
  reverify_threshold: "reverify_threshold";
44
52
  }>;
53
+ riskSignals: z.ZodNullable<z.ZodObject<{
54
+ vpnOrTorDetected: z.ZodBoolean;
55
+ dataCenterIpDetected: z.ZodBoolean;
56
+ duplicateDeviceDetected: z.ZodBoolean;
57
+ highRiskCountryDetected: z.ZodBoolean;
58
+ deviceFingerprints: z.ZodArray<z.ZodString>;
59
+ }, z.core.$strip>>;
60
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
61
+ step: z.ZodString;
62
+ status: z.ZodEnum<{
63
+ expired: "expired";
64
+ unknown: "unknown";
65
+ not_started: "not_started";
66
+ approved: "approved";
67
+ in_progress: "in_progress";
68
+ in_review: "in_review";
69
+ declined: "declined";
70
+ }>;
71
+ }, z.core.$strip>>>;
45
72
  submittedAt: z.ZodISODateTime;
46
73
  decidedAt: z.ZodNullable<z.ZodISODateTime>;
47
74
  createdAt: z.ZodISODateTime;
@@ -67,6 +94,7 @@ export declare const SubmitKycOutputSchema: z.ZodObject<{
67
94
  status: z.ZodEnum<{
68
95
  pending: "pending";
69
96
  not_started: "not_started";
97
+ approved: "approved";
70
98
  verified: "verified";
71
99
  rejected: "rejected";
72
100
  resubmission_requested: "resubmission_requested";
@@ -83,6 +111,25 @@ export declare const SubmitKycOutputSchema: z.ZodObject<{
83
111
  submission: "submission";
84
112
  reverify_threshold: "reverify_threshold";
85
113
  }>;
114
+ riskSignals: z.ZodNullable<z.ZodObject<{
115
+ vpnOrTorDetected: z.ZodBoolean;
116
+ dataCenterIpDetected: z.ZodBoolean;
117
+ duplicateDeviceDetected: z.ZodBoolean;
118
+ highRiskCountryDetected: z.ZodBoolean;
119
+ deviceFingerprints: z.ZodArray<z.ZodString>;
120
+ }, z.core.$strip>>;
121
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
122
+ step: z.ZodString;
123
+ status: z.ZodEnum<{
124
+ expired: "expired";
125
+ unknown: "unknown";
126
+ not_started: "not_started";
127
+ approved: "approved";
128
+ in_progress: "in_progress";
129
+ in_review: "in_review";
130
+ declined: "declined";
131
+ }>;
132
+ }, z.core.$strip>>>;
86
133
  submittedAt: z.ZodISODateTime;
87
134
  decidedAt: z.ZodNullable<z.ZodISODateTime>;
88
135
  createdAt: z.ZodISODateTime;
@@ -99,6 +146,7 @@ export declare const PlayerKycViewSchema: z.ZodObject<{
99
146
  status: z.ZodEnum<{
100
147
  pending: "pending";
101
148
  not_started: "not_started";
149
+ approved: "approved";
102
150
  verified: "verified";
103
151
  rejected: "rejected";
104
152
  resubmission_requested: "resubmission_requested";
@@ -115,6 +163,25 @@ export declare const PlayerKycViewSchema: z.ZodObject<{
115
163
  submission: "submission";
116
164
  reverify_threshold: "reverify_threshold";
117
165
  }>;
166
+ riskSignals: z.ZodNullable<z.ZodObject<{
167
+ vpnOrTorDetected: z.ZodBoolean;
168
+ dataCenterIpDetected: z.ZodBoolean;
169
+ duplicateDeviceDetected: z.ZodBoolean;
170
+ highRiskCountryDetected: z.ZodBoolean;
171
+ deviceFingerprints: z.ZodArray<z.ZodString>;
172
+ }, z.core.$strip>>;
173
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
174
+ step: z.ZodString;
175
+ status: z.ZodEnum<{
176
+ expired: "expired";
177
+ unknown: "unknown";
178
+ not_started: "not_started";
179
+ approved: "approved";
180
+ in_progress: "in_progress";
181
+ in_review: "in_review";
182
+ declined: "declined";
183
+ }>;
184
+ }, z.core.$strip>>>;
118
185
  submittedAt: z.ZodISODateTime;
119
186
  decidedAt: z.ZodNullable<z.ZodISODateTime>;
120
187
  createdAt: z.ZodISODateTime;
@@ -128,6 +195,7 @@ export declare const PlayerKycViewSchema: z.ZodObject<{
128
195
  status: z.ZodEnum<{
129
196
  pending: "pending";
130
197
  not_started: "not_started";
198
+ approved: "approved";
131
199
  verified: "verified";
132
200
  rejected: "rejected";
133
201
  resubmission_requested: "resubmission_requested";
@@ -144,6 +212,25 @@ export declare const PlayerKycViewSchema: z.ZodObject<{
144
212
  submission: "submission";
145
213
  reverify_threshold: "reverify_threshold";
146
214
  }>;
215
+ riskSignals: z.ZodNullable<z.ZodObject<{
216
+ vpnOrTorDetected: z.ZodBoolean;
217
+ dataCenterIpDetected: z.ZodBoolean;
218
+ duplicateDeviceDetected: z.ZodBoolean;
219
+ highRiskCountryDetected: z.ZodBoolean;
220
+ deviceFingerprints: z.ZodArray<z.ZodString>;
221
+ }, z.core.$strip>>;
222
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
223
+ step: z.ZodString;
224
+ status: z.ZodEnum<{
225
+ expired: "expired";
226
+ unknown: "unknown";
227
+ not_started: "not_started";
228
+ approved: "approved";
229
+ in_progress: "in_progress";
230
+ in_review: "in_review";
231
+ declined: "declined";
232
+ }>;
233
+ }, z.core.$strip>>>;
147
234
  submittedAt: z.ZodISODateTime;
148
235
  decidedAt: z.ZodNullable<z.ZodISODateTime>;
149
236
  createdAt: z.ZodISODateTime;
@@ -152,6 +239,50 @@ export declare const PlayerKycViewSchema: z.ZodObject<{
152
239
  }, z.core.$strip>;
153
240
  export type PlayerKycView = z.infer<typeof PlayerKycViewSchema>;
154
241
  export type KycVerification = z.infer<typeof KycVerificationSchema>;
242
+ export declare const RequestKycResubmissionInputSchema: z.ZodObject<{
243
+ userId: z.ZodUUID;
244
+ reason: z.ZodString;
245
+ }, z.core.$strip>;
246
+ export type RequestKycResubmissionInput = z.infer<typeof RequestKycResubmissionInputSchema>;
247
+ export declare const KycOverrideStatusSchema: z.ZodEnum<{
248
+ pending: "pending";
249
+ not_started: "not_started";
250
+ approved: "approved";
251
+ rejected: "rejected";
252
+ resubmission_requested: "resubmission_requested";
253
+ }>;
254
+ export type KycOverrideStatus = z.infer<typeof KycOverrideStatusSchema>;
255
+ export declare const OverrideKycStatusInputSchema: z.ZodObject<{
256
+ userId: z.ZodUUID;
257
+ status: z.ZodEnum<{
258
+ pending: "pending";
259
+ not_started: "not_started";
260
+ approved: "approved";
261
+ rejected: "rejected";
262
+ resubmission_requested: "resubmission_requested";
263
+ }>;
264
+ reason: z.ZodString;
265
+ }, z.core.$strip>;
266
+ export type OverrideKycStatusInput = z.infer<typeof OverrideKycStatusInputSchema>;
267
+ export declare const BulkApproveKycInputSchema: z.ZodObject<{
268
+ userIds: z.ZodArray<z.ZodUUID>;
269
+ reason: z.ZodString;
270
+ }, z.core.$strip>;
271
+ export type BulkApproveKycInput = z.infer<typeof BulkApproveKycInputSchema>;
272
+ export declare const BulkApproveKycResultSchema: z.ZodObject<{
273
+ userId: z.ZodUUID;
274
+ success: z.ZodBoolean;
275
+ error: z.ZodNullable<z.ZodString>;
276
+ }, z.core.$strip>;
277
+ export type BulkApproveKycResult = z.infer<typeof BulkApproveKycResultSchema>;
278
+ export declare const BulkApproveKycOutputSchema: z.ZodObject<{
279
+ results: z.ZodArray<z.ZodObject<{
280
+ userId: z.ZodUUID;
281
+ success: z.ZodBoolean;
282
+ error: z.ZodNullable<z.ZodString>;
283
+ }, z.core.$strip>>;
284
+ }, z.core.$strip>;
285
+ export type BulkApproveKycOutput = z.infer<typeof BulkApproveKycOutputSchema>;
155
286
  export declare const GeoRuleSchema: z.ZodObject<{
156
287
  id: z.ZodUUID;
157
288
  countryCode: z.ZodString;
@@ -558,6 +689,7 @@ export declare const complianceContract: {
558
689
  status: z.ZodEnum<{
559
690
  pending: "pending";
560
691
  not_started: "not_started";
692
+ approved: "approved";
561
693
  verified: "verified";
562
694
  rejected: "rejected";
563
695
  resubmission_requested: "resubmission_requested";
@@ -574,6 +706,25 @@ export declare const complianceContract: {
574
706
  submission: "submission";
575
707
  reverify_threshold: "reverify_threshold";
576
708
  }>;
709
+ riskSignals: z.ZodNullable<z.ZodObject<{
710
+ vpnOrTorDetected: z.ZodBoolean;
711
+ dataCenterIpDetected: z.ZodBoolean;
712
+ duplicateDeviceDetected: z.ZodBoolean;
713
+ highRiskCountryDetected: z.ZodBoolean;
714
+ deviceFingerprints: z.ZodArray<z.ZodString>;
715
+ }, z.core.$strip>>;
716
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
717
+ step: z.ZodString;
718
+ status: z.ZodEnum<{
719
+ expired: "expired";
720
+ unknown: "unknown";
721
+ not_started: "not_started";
722
+ approved: "approved";
723
+ in_progress: "in_progress";
724
+ in_review: "in_review";
725
+ declined: "declined";
726
+ }>;
727
+ }, z.core.$strip>>>;
577
728
  submittedAt: z.ZodISODateTime;
578
729
  decidedAt: z.ZodNullable<z.ZodISODateTime>;
579
730
  createdAt: z.ZodISODateTime;
@@ -587,6 +738,7 @@ export declare const complianceContract: {
587
738
  status: z.ZodEnum<{
588
739
  pending: "pending";
589
740
  not_started: "not_started";
741
+ approved: "approved";
590
742
  verified: "verified";
591
743
  rejected: "rejected";
592
744
  resubmission_requested: "resubmission_requested";
@@ -603,6 +755,25 @@ export declare const complianceContract: {
603
755
  submission: "submission";
604
756
  reverify_threshold: "reverify_threshold";
605
757
  }>;
758
+ riskSignals: z.ZodNullable<z.ZodObject<{
759
+ vpnOrTorDetected: z.ZodBoolean;
760
+ dataCenterIpDetected: z.ZodBoolean;
761
+ duplicateDeviceDetected: z.ZodBoolean;
762
+ highRiskCountryDetected: z.ZodBoolean;
763
+ deviceFingerprints: z.ZodArray<z.ZodString>;
764
+ }, z.core.$strip>>;
765
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
766
+ step: z.ZodString;
767
+ status: z.ZodEnum<{
768
+ expired: "expired";
769
+ unknown: "unknown";
770
+ not_started: "not_started";
771
+ approved: "approved";
772
+ in_progress: "in_progress";
773
+ in_review: "in_review";
774
+ declined: "declined";
775
+ }>;
776
+ }, z.core.$strip>>>;
606
777
  submittedAt: z.ZodISODateTime;
607
778
  decidedAt: z.ZodNullable<z.ZodISODateTime>;
608
779
  createdAt: z.ZodISODateTime;
@@ -627,6 +798,7 @@ export declare const complianceContract: {
627
798
  status: z.ZodEnum<{
628
799
  pending: "pending";
629
800
  not_started: "not_started";
801
+ approved: "approved";
630
802
  verified: "verified";
631
803
  rejected: "rejected";
632
804
  resubmission_requested: "resubmission_requested";
@@ -643,6 +815,25 @@ export declare const complianceContract: {
643
815
  submission: "submission";
644
816
  reverify_threshold: "reverify_threshold";
645
817
  }>;
818
+ riskSignals: z.ZodNullable<z.ZodObject<{
819
+ vpnOrTorDetected: z.ZodBoolean;
820
+ dataCenterIpDetected: z.ZodBoolean;
821
+ duplicateDeviceDetected: z.ZodBoolean;
822
+ highRiskCountryDetected: z.ZodBoolean;
823
+ deviceFingerprints: z.ZodArray<z.ZodString>;
824
+ }, z.core.$strip>>;
825
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
826
+ step: z.ZodString;
827
+ status: z.ZodEnum<{
828
+ expired: "expired";
829
+ unknown: "unknown";
830
+ not_started: "not_started";
831
+ approved: "approved";
832
+ in_progress: "in_progress";
833
+ in_review: "in_review";
834
+ declined: "declined";
835
+ }>;
836
+ }, z.core.$strip>>>;
646
837
  submittedAt: z.ZodISODateTime;
647
838
  decidedAt: z.ZodNullable<z.ZodISODateTime>;
648
839
  createdAt: z.ZodISODateTime;
@@ -652,6 +843,127 @@ export declare const complianceContract: {
652
843
  kycWebhook: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodObject<{
653
844
  ok: z.ZodLiteral<true>;
654
845
  }, z.core.$strip>, Record<never, never>, Record<never, never>>;
846
+ requestKycResubmission: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
847
+ userId: z.ZodUUID;
848
+ reason: z.ZodString;
849
+ }, z.core.$strip>, z.ZodObject<{
850
+ id: z.ZodUUID;
851
+ userId: z.ZodUUID;
852
+ provider: z.ZodString;
853
+ referenceId: z.ZodString;
854
+ status: z.ZodEnum<{
855
+ pending: "pending";
856
+ not_started: "not_started";
857
+ approved: "approved";
858
+ verified: "verified";
859
+ rejected: "rejected";
860
+ resubmission_requested: "resubmission_requested";
861
+ manually_overridden: "manually_overridden";
862
+ }>;
863
+ documentTypes: z.ZodArray<z.ZodEnum<{
864
+ passport: "passport";
865
+ drivers_license: "drivers_license";
866
+ national_id: "national_id";
867
+ }>>;
868
+ decisionReason: z.ZodNullable<z.ZodString>;
869
+ triggeredBy: z.ZodEnum<{
870
+ manual: "manual";
871
+ submission: "submission";
872
+ reverify_threshold: "reverify_threshold";
873
+ }>;
874
+ riskSignals: z.ZodNullable<z.ZodObject<{
875
+ vpnOrTorDetected: z.ZodBoolean;
876
+ dataCenterIpDetected: z.ZodBoolean;
877
+ duplicateDeviceDetected: z.ZodBoolean;
878
+ highRiskCountryDetected: z.ZodBoolean;
879
+ deviceFingerprints: z.ZodArray<z.ZodString>;
880
+ }, z.core.$strip>>;
881
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
882
+ step: z.ZodString;
883
+ status: z.ZodEnum<{
884
+ expired: "expired";
885
+ unknown: "unknown";
886
+ not_started: "not_started";
887
+ approved: "approved";
888
+ in_progress: "in_progress";
889
+ in_review: "in_review";
890
+ declined: "declined";
891
+ }>;
892
+ }, z.core.$strip>>>;
893
+ submittedAt: z.ZodISODateTime;
894
+ decidedAt: z.ZodNullable<z.ZodISODateTime>;
895
+ createdAt: z.ZodISODateTime;
896
+ updatedAt: z.ZodISODateTime;
897
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
898
+ overrideKycStatus: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
899
+ userId: z.ZodUUID;
900
+ status: z.ZodEnum<{
901
+ pending: "pending";
902
+ not_started: "not_started";
903
+ approved: "approved";
904
+ rejected: "rejected";
905
+ resubmission_requested: "resubmission_requested";
906
+ }>;
907
+ reason: z.ZodString;
908
+ }, z.core.$strip>, z.ZodObject<{
909
+ id: z.ZodUUID;
910
+ userId: z.ZodUUID;
911
+ provider: z.ZodString;
912
+ referenceId: z.ZodString;
913
+ status: z.ZodEnum<{
914
+ pending: "pending";
915
+ not_started: "not_started";
916
+ approved: "approved";
917
+ verified: "verified";
918
+ rejected: "rejected";
919
+ resubmission_requested: "resubmission_requested";
920
+ manually_overridden: "manually_overridden";
921
+ }>;
922
+ documentTypes: z.ZodArray<z.ZodEnum<{
923
+ passport: "passport";
924
+ drivers_license: "drivers_license";
925
+ national_id: "national_id";
926
+ }>>;
927
+ decisionReason: z.ZodNullable<z.ZodString>;
928
+ triggeredBy: z.ZodEnum<{
929
+ manual: "manual";
930
+ submission: "submission";
931
+ reverify_threshold: "reverify_threshold";
932
+ }>;
933
+ riskSignals: z.ZodNullable<z.ZodObject<{
934
+ vpnOrTorDetected: z.ZodBoolean;
935
+ dataCenterIpDetected: z.ZodBoolean;
936
+ duplicateDeviceDetected: z.ZodBoolean;
937
+ highRiskCountryDetected: z.ZodBoolean;
938
+ deviceFingerprints: z.ZodArray<z.ZodString>;
939
+ }, z.core.$strip>>;
940
+ checks: z.ZodNullable<z.ZodArray<z.ZodObject<{
941
+ step: z.ZodString;
942
+ status: z.ZodEnum<{
943
+ expired: "expired";
944
+ unknown: "unknown";
945
+ not_started: "not_started";
946
+ approved: "approved";
947
+ in_progress: "in_progress";
948
+ in_review: "in_review";
949
+ declined: "declined";
950
+ }>;
951
+ }, z.core.$strip>>>;
952
+ submittedAt: z.ZodISODateTime;
953
+ decidedAt: z.ZodNullable<z.ZodISODateTime>;
954
+ createdAt: z.ZodISODateTime;
955
+ updatedAt: z.ZodISODateTime;
956
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
957
+ bulkApproveKyc: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
958
+ userIds: z.ZodArray<z.ZodUUID>;
959
+ reason: z.ZodString;
960
+ }, z.core.$strip>, z.ZodObject<{
961
+ results: z.ZodArray<z.ZodObject<{
962
+ userId: z.ZodUUID;
963
+ success: z.ZodBoolean;
964
+ error: z.ZodNullable<z.ZodString>;
965
+ }, z.core.$strip>>;
966
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
655
967
  };
656
968
  export * from './limits.js';
657
969
  export * from './rg.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compliance/contract/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAYzB,eAAO,MAAM,qBAAqB;;;;EAA6B,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;EAA2B,CAAC;AAE7D,eAAO,MAAM,iBAAiB;;;;;;;;iBAI5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAahC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAE/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,aAAa;;;;;;;;iBAKxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIpD,eAAO,MAAM,qBAAqB;;;;;;iBAA0D,CAAC;AAC7F,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAQpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC9B,CAAC;AAEF,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compliance/contract/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { oc } from '@orpc/contract';
2
2
  import * as z from 'zod';
3
- import { UuidSchema, KycStatusSchema, TimestampSchema, CountryCodeSchema, GeoRuleActionSchema, } from '@openora/core/contracts';
3
+ import { UuidSchema, KycStatusSchema, KycCheckResultSchema, TimestampSchema, CountryCodeSchema, GeoRuleActionSchema, } from '@openora/core/contracts';
4
4
  import { KYC_DOCUMENT_TYPES, KYC_TRIGGERED_BY } from './enums.js';
5
5
  import { LimitSchema, UpsertLimitInputSchema } from './limits.js';
6
6
  import { rgContract } from './rg.js';
@@ -11,6 +11,13 @@ export const KycDocumentSchema = z.object({
11
11
  frontUrl: z.string().min(1),
12
12
  backUrl: z.string().min(1).optional(),
13
13
  });
14
+ export const KycRiskSignalsSchema = z.object({
15
+ vpnOrTorDetected: z.boolean(),
16
+ dataCenterIpDetected: z.boolean(),
17
+ duplicateDeviceDetected: z.boolean(),
18
+ highRiskCountryDetected: z.boolean(),
19
+ deviceFingerprints: z.array(z.string()),
20
+ });
14
21
  export const KycVerificationSchema = z.object({
15
22
  id: UuidSchema,
16
23
  userId: UuidSchema,
@@ -20,6 +27,8 @@ export const KycVerificationSchema = z.object({
20
27
  documentTypes: z.array(KycDocumentTypeSchema),
21
28
  decisionReason: z.string().nullable(),
22
29
  triggeredBy: KycTriggeredBySchema,
30
+ riskSignals: KycRiskSignalsSchema.nullable(),
31
+ checks: z.array(KycCheckResultSchema).nullable(),
23
32
  submittedAt: TimestampSchema,
24
33
  decidedAt: TimestampSchema.nullable(),
25
34
  createdAt: TimestampSchema,
@@ -35,6 +44,34 @@ export const PlayerKycViewSchema = z.object({
35
44
  current: KycVerificationSchema.nullable(),
36
45
  history: z.array(KycVerificationSchema),
37
46
  });
47
+ const NonEmptyReasonSchema = z.string().trim().min(1);
48
+ export const RequestKycResubmissionInputSchema = z.object({
49
+ userId: UuidSchema,
50
+ reason: NonEmptyReasonSchema,
51
+ });
52
+ export const KycOverrideStatusSchema = KycStatusSchema.exclude(['verified', 'manually_overridden']);
53
+ export const OverrideKycStatusInputSchema = z.object({
54
+ userId: UuidSchema,
55
+ status: KycOverrideStatusSchema,
56
+ reason: NonEmptyReasonSchema,
57
+ });
58
+ const MAX_BULK_KYC_APPROVE_USERS = 100;
59
+ export const BulkApproveKycInputSchema = z.object({
60
+ userIds: z
61
+ .array(UuidSchema)
62
+ .min(1)
63
+ .max(MAX_BULK_KYC_APPROVE_USERS)
64
+ .refine((ids) => new Set(ids).size === ids.length, { message: 'userIds must be unique' }),
65
+ reason: NonEmptyReasonSchema,
66
+ });
67
+ export const BulkApproveKycResultSchema = z.object({
68
+ userId: UuidSchema,
69
+ success: z.boolean(),
70
+ error: z.string().nullable(),
71
+ });
72
+ export const BulkApproveKycOutputSchema = z.object({
73
+ results: z.array(BulkApproveKycResultSchema),
74
+ });
38
75
  export const GeoRuleSchema = z.object({
39
76
  id: UuidSchema,
40
77
  countryCode: CountryCodeSchema,
@@ -78,6 +115,18 @@ export const complianceContract = {
78
115
  .route({ method: 'POST', path: '/compliance/kyc/webhook' })
79
116
  .input(z.record(z.string(), z.unknown()))
80
117
  .output(z.object({ ok: z.literal(true) })),
118
+ requestKycResubmission: oc
119
+ .route({ method: 'POST', path: '/compliance/players/{userId}/kyc/resubmit' })
120
+ .input(RequestKycResubmissionInputSchema)
121
+ .output(KycVerificationSchema),
122
+ overrideKycStatus: oc
123
+ .route({ method: 'POST', path: '/compliance/players/{userId}/kyc/override' })
124
+ .input(OverrideKycStatusInputSchema)
125
+ .output(KycVerificationSchema),
126
+ bulkApproveKyc: oc
127
+ .route({ method: 'POST', path: '/compliance/kyc/bulk-approve' })
128
+ .input(BulkApproveKycInputSchema)
129
+ .output(BulkApproveKycOutputSchema),
81
130
  ...rgContract,
82
131
  };
83
132
  export * from './limits.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/compliance/contract/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/compliance/contract/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ ALTER TYPE "public"."kyc_verification_status" ADD VALUE 'approved' BEFORE 'verified';--> statement-breakpoint
2
+ ALTER TABLE "kyc_verification" ADD COLUMN "risk_signals" jsonb;--> statement-breakpoint
3
+ ALTER TABLE "kyc_verification" ADD COLUMN "decision_received_at" timestamp with time zone;
@@ -0,0 +1 @@
1
+ ALTER TABLE "kyc_verification" ADD COLUMN "checks" jsonb;