@openora/core 0.4.1-canary.11 → 0.4.1-canary.111

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 (1830) hide show
  1. package/README.md +10 -10
  2. package/bin/migrate.mjs +55 -0
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/admin-console/__tests__/backoffice.router.test.js +82 -51
  5. package/dist/admin-console/__tests__/backoffice.router.test.js.map +1 -1
  6. package/dist/admin-console/__tests__/backoffice.service.int.test.d.ts +2 -0
  7. package/dist/admin-console/__tests__/backoffice.service.int.test.d.ts.map +1 -0
  8. package/dist/admin-console/__tests__/backoffice.service.int.test.js +333 -0
  9. package/dist/admin-console/__tests__/backoffice.service.int.test.js.map +1 -0
  10. package/dist/admin-console/contract/index.d.ts +284 -28
  11. package/dist/admin-console/contract/index.d.ts.map +1 -1
  12. package/dist/admin-console/contract/index.js +74 -6
  13. package/dist/admin-console/contract/index.js.map +1 -1
  14. package/dist/admin-console/plugin.d.ts +137 -1
  15. package/dist/admin-console/plugin.d.ts.map +1 -1
  16. package/dist/admin-console/plugin.js +6 -6
  17. package/dist/admin-console/plugin.js.map +1 -1
  18. package/dist/admin-console/router/index.d.ts +126 -18
  19. package/dist/admin-console/router/index.d.ts.map +1 -1
  20. package/dist/admin-console/router/index.js +18 -2
  21. package/dist/admin-console/router/index.js.map +1 -1
  22. package/dist/admin-console/service/backoffice.service.d.ts +61 -8
  23. package/dist/admin-console/service/backoffice.service.d.ts.map +1 -1
  24. package/dist/admin-console/service/backoffice.service.js +67 -11
  25. package/dist/admin-console/service/backoffice.service.js.map +1 -1
  26. package/dist/analytics/__tests__/analytics.contract.test.d.ts +2 -0
  27. package/dist/analytics/__tests__/analytics.contract.test.d.ts.map +1 -0
  28. package/dist/analytics/__tests__/analytics.contract.test.js +36 -0
  29. package/dist/analytics/__tests__/analytics.contract.test.js.map +1 -0
  30. package/dist/analytics/__tests__/analytics.router.test.d.ts +2 -0
  31. package/dist/analytics/__tests__/analytics.router.test.d.ts.map +1 -0
  32. package/dist/analytics/__tests__/analytics.router.test.js +56 -0
  33. package/dist/analytics/__tests__/analytics.router.test.js.map +1 -0
  34. package/dist/analytics/__tests__/financial-analytics.service.test.d.ts +2 -0
  35. package/dist/analytics/__tests__/financial-analytics.service.test.d.ts.map +1 -0
  36. package/dist/analytics/__tests__/financial-analytics.service.test.js +87 -0
  37. package/dist/analytics/__tests__/financial-analytics.service.test.js.map +1 -0
  38. package/dist/analytics/__tests__/funnel-analytics.service.test.d.ts +2 -0
  39. package/dist/analytics/__tests__/funnel-analytics.service.test.d.ts.map +1 -0
  40. package/dist/analytics/__tests__/funnel-analytics.service.test.js +42 -0
  41. package/dist/analytics/__tests__/funnel-analytics.service.test.js.map +1 -0
  42. package/dist/analytics/contract/financial.d.ts +121 -0
  43. package/dist/analytics/contract/financial.d.ts.map +1 -0
  44. package/dist/analytics/contract/financial.js +45 -0
  45. package/dist/analytics/contract/financial.js.map +1 -0
  46. package/dist/analytics/contract/funnel.d.ts +52 -0
  47. package/dist/analytics/contract/funnel.d.ts.map +1 -0
  48. package/dist/analytics/contract/funnel.js +24 -0
  49. package/dist/analytics/contract/funnel.js.map +1 -0
  50. package/dist/analytics/contract/index.d.ts +68 -0
  51. package/dist/analytics/contract/index.d.ts.map +1 -0
  52. package/dist/analytics/contract/index.js +9 -0
  53. package/dist/analytics/contract/index.js.map +1 -0
  54. package/dist/analytics/index.d.ts +2 -0
  55. package/dist/analytics/index.d.ts.map +1 -0
  56. package/dist/analytics/index.js +2 -0
  57. package/dist/analytics/index.js.map +1 -0
  58. package/dist/analytics/plugin.d.ts +139 -0
  59. package/dist/analytics/plugin.d.ts.map +1 -0
  60. package/dist/analytics/plugin.js +13 -0
  61. package/dist/analytics/plugin.js.map +1 -0
  62. package/dist/analytics/router/index.d.ts +69 -0
  63. package/dist/analytics/router/index.d.ts.map +1 -0
  64. package/dist/analytics/router/index.js +24 -0
  65. package/dist/analytics/router/index.js.map +1 -0
  66. package/dist/analytics/server.d.ts +5 -0
  67. package/dist/analytics/server.d.ts.map +1 -0
  68. package/dist/analytics/server.js +5 -0
  69. package/dist/analytics/server.js.map +1 -0
  70. package/dist/analytics/service/financial-analytics.service.d.ts +14 -0
  71. package/dist/analytics/service/financial-analytics.service.d.ts.map +1 -0
  72. package/dist/analytics/service/financial-analytics.service.js +145 -0
  73. package/dist/analytics/service/financial-analytics.service.js.map +1 -0
  74. package/dist/analytics/service/funnel-analytics.service.d.ts +11 -0
  75. package/dist/analytics/service/funnel-analytics.service.d.ts.map +1 -0
  76. package/dist/analytics/service/funnel-analytics.service.js +83 -0
  77. package/dist/analytics/service/funnel-analytics.service.js.map +1 -0
  78. package/dist/audit/__tests__/audit.service.int.test.d.ts +2 -0
  79. package/dist/audit/__tests__/audit.service.int.test.d.ts.map +1 -0
  80. package/dist/audit/__tests__/audit.service.int.test.js +642 -0
  81. package/dist/audit/__tests__/audit.service.int.test.js.map +1 -0
  82. package/dist/audit/__tests__/map-event.test.d.ts +2 -0
  83. package/dist/audit/__tests__/map-event.test.d.ts.map +1 -0
  84. package/dist/audit/__tests__/map-event.test.js +54 -0
  85. package/dist/audit/__tests__/map-event.test.js.map +1 -0
  86. package/dist/audit/contract/index.d.ts +68 -10
  87. package/dist/audit/contract/index.d.ts.map +1 -1
  88. package/dist/audit/contract/index.js +22 -4
  89. package/dist/audit/contract/index.js.map +1 -1
  90. package/dist/audit/migrate.d.ts.map +1 -1
  91. package/dist/audit/migrate.js +12 -0
  92. package/dist/audit/migrate.js.map +1 -1
  93. package/dist/audit/plugin.d.ts +138 -1
  94. package/dist/audit/plugin.d.ts.map +1 -1
  95. package/dist/audit/plugin.js +353 -31
  96. package/dist/audit/plugin.js.map +1 -1
  97. package/dist/audit/router/index.d.ts +29 -5
  98. package/dist/audit/router/index.d.ts.map +1 -1
  99. package/dist/audit/router/index.js +1 -5
  100. package/dist/audit/router/index.js.map +1 -1
  101. package/dist/audit/service/audit.service.d.ts +9 -6
  102. package/dist/audit/service/audit.service.d.ts.map +1 -1
  103. package/dist/audit/service/audit.service.js +35 -10
  104. package/dist/audit/service/audit.service.js.map +1 -1
  105. package/dist/casino/gaming/__tests__/admin-reporting.int.test.d.ts +2 -0
  106. package/dist/casino/gaming/__tests__/admin-reporting.int.test.d.ts.map +1 -0
  107. package/dist/casino/gaming/__tests__/admin-reporting.int.test.js +126 -0
  108. package/dist/casino/gaming/__tests__/admin-reporting.int.test.js.map +1 -0
  109. package/dist/casino/gaming/__tests__/gaming.service.int.test.d.ts +2 -0
  110. package/dist/casino/gaming/__tests__/gaming.service.int.test.d.ts.map +1 -0
  111. package/dist/casino/gaming/__tests__/gaming.service.int.test.js +181 -0
  112. package/dist/casino/gaming/__tests__/gaming.service.int.test.js.map +1 -0
  113. package/dist/casino/gaming/admin-reporting.d.ts +9 -0
  114. package/dist/casino/gaming/admin-reporting.d.ts.map +1 -0
  115. package/dist/casino/gaming/admin-reporting.js +79 -0
  116. package/dist/casino/gaming/admin-reporting.js.map +1 -0
  117. package/dist/casino/gaming/contract/index.d.ts +19 -0
  118. package/dist/casino/gaming/contract/index.d.ts.map +1 -1
  119. package/dist/casino/gaming/contract/index.js +7 -1
  120. package/dist/casino/gaming/contract/index.js.map +1 -1
  121. package/dist/casino/gaming/drizzle/migrations/0002_yummy_lifeguard.sql +4 -0
  122. package/dist/casino/gaming/drizzle/migrations/meta/0002_snapshot.json +237 -0
  123. package/dist/casino/gaming/drizzle/migrations/meta/_journal.json +7 -0
  124. package/dist/casino/gaming/plugin.d.ts +138 -1
  125. package/dist/casino/gaming/plugin.d.ts.map +1 -1
  126. package/dist/casino/gaming/plugin.js +9 -5
  127. package/dist/casino/gaming/plugin.js.map +1 -1
  128. package/dist/casino/gaming/router/index.d.ts +11 -0
  129. package/dist/casino/gaming/router/index.d.ts.map +1 -1
  130. package/dist/casino/gaming/router/index.js +6 -2
  131. package/dist/casino/gaming/router/index.js.map +1 -1
  132. package/dist/casino/gaming/schema/index.d.ts +18 -0
  133. package/dist/casino/gaming/schema/index.d.ts.map +1 -1
  134. package/dist/casino/gaming/schema/index.js +11 -1
  135. package/dist/casino/gaming/schema/index.js.map +1 -1
  136. package/dist/casino/gaming/service/gaming.service.d.ts +10 -3
  137. package/dist/casino/gaming/service/gaming.service.d.ts.map +1 -1
  138. package/dist/casino/gaming/service/gaming.service.js +50 -13
  139. package/dist/casino/gaming/service/gaming.service.js.map +1 -1
  140. package/dist/casino/lobby/__tests__/lobby.cache.int.test.d.ts +2 -0
  141. package/dist/casino/lobby/__tests__/lobby.cache.int.test.d.ts.map +1 -0
  142. package/dist/casino/lobby/__tests__/lobby.cache.int.test.js +56 -0
  143. package/dist/casino/lobby/__tests__/lobby.cache.int.test.js.map +1 -0
  144. package/dist/casino/lobby/plugin.d.ts +136 -1
  145. package/dist/casino/lobby/plugin.d.ts.map +1 -1
  146. package/dist/casino/lobby/plugin.js +3 -3
  147. package/dist/casino/lobby/plugin.js.map +1 -1
  148. package/dist/casino/server.d.ts +1 -0
  149. package/dist/casino/server.d.ts.map +1 -1
  150. package/dist/casino/server.js +1 -0
  151. package/dist/casino/server.js.map +1 -1
  152. package/dist/cms/__tests__/cms.reads.int.test.d.ts +2 -0
  153. package/dist/cms/__tests__/cms.reads.int.test.d.ts.map +1 -0
  154. package/dist/cms/__tests__/cms.reads.int.test.js +66 -0
  155. package/dist/cms/__tests__/cms.reads.int.test.js.map +1 -0
  156. package/dist/cms/__tests__/cms.router.int.test.d.ts +2 -0
  157. package/dist/cms/__tests__/cms.router.int.test.d.ts.map +1 -0
  158. package/dist/cms/__tests__/cms.router.int.test.js +96 -0
  159. package/dist/cms/__tests__/cms.router.int.test.js.map +1 -0
  160. package/dist/cms/__tests__/cms.service.int.test.d.ts +2 -0
  161. package/dist/cms/__tests__/cms.service.int.test.d.ts.map +1 -0
  162. package/dist/cms/__tests__/cms.service.int.test.js +119 -0
  163. package/dist/cms/__tests__/cms.service.int.test.js.map +1 -0
  164. package/dist/cms/plugin.d.ts +136 -1
  165. package/dist/cms/plugin.d.ts.map +1 -1
  166. package/dist/cms/plugin.js +3 -3
  167. package/dist/cms/plugin.js.map +1 -1
  168. package/dist/cms/router/index.js +12 -12
  169. package/dist/cms/router/index.js.map +1 -1
  170. package/dist/cms/service/cms.service.d.ts +7 -7
  171. package/dist/cms/service/cms.service.d.ts.map +1 -1
  172. package/dist/cms/service/cms.service.js +54 -14
  173. package/dist/cms/service/cms.service.js.map +1 -1
  174. package/dist/common/errors/__tests__/errors.mapper.test.d.ts +2 -0
  175. package/dist/common/errors/__tests__/errors.mapper.test.d.ts.map +1 -0
  176. package/dist/common/errors/__tests__/errors.mapper.test.js +59 -0
  177. package/dist/common/errors/__tests__/errors.mapper.test.js.map +1 -0
  178. package/dist/common/errors/errors.classes.js +3 -3
  179. package/dist/common/errors/errors.classes.js.map +1 -1
  180. package/dist/common/errors/errors.mapper.js +1 -1
  181. package/dist/common/errors/errors.mapper.js.map +1 -1
  182. package/dist/compliance/__tests__/assert.test.d.ts +2 -0
  183. package/dist/compliance/__tests__/assert.test.d.ts.map +1 -0
  184. package/dist/compliance/__tests__/assert.test.js +34 -0
  185. package/dist/compliance/__tests__/assert.test.js.map +1 -0
  186. package/dist/compliance/__tests__/compliance.service.int.test.d.ts +2 -0
  187. package/dist/compliance/__tests__/compliance.service.int.test.d.ts.map +1 -0
  188. package/dist/compliance/__tests__/compliance.service.int.test.js +162 -0
  189. package/dist/compliance/__tests__/compliance.service.int.test.js.map +1 -0
  190. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.int.test.d.ts +2 -0
  191. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.int.test.d.ts.map +1 -0
  192. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.int.test.js +82 -0
  193. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.int.test.js.map +1 -0
  194. package/dist/compliance/__tests__/kyc-admin.router.int.test.d.ts +2 -0
  195. package/dist/compliance/__tests__/kyc-admin.router.int.test.d.ts.map +1 -0
  196. package/dist/compliance/__tests__/kyc-admin.router.int.test.js +192 -0
  197. package/dist/compliance/__tests__/kyc-admin.router.int.test.js.map +1 -0
  198. package/dist/compliance/__tests__/kyc-webhook.router.int.test.d.ts +2 -0
  199. package/dist/compliance/__tests__/kyc-webhook.router.int.test.d.ts.map +1 -0
  200. package/dist/compliance/__tests__/kyc-webhook.router.int.test.js +173 -0
  201. package/dist/compliance/__tests__/kyc-webhook.router.int.test.js.map +1 -0
  202. package/dist/compliance/__tests__/kyc.service.int.test.d.ts +2 -0
  203. package/dist/compliance/__tests__/kyc.service.int.test.d.ts.map +1 -0
  204. package/dist/compliance/__tests__/kyc.service.int.test.js +275 -0
  205. package/dist/compliance/__tests__/kyc.service.int.test.js.map +1 -0
  206. package/dist/compliance/__tests__/limits.contract.test.d.ts +2 -0
  207. package/dist/compliance/__tests__/limits.contract.test.d.ts.map +1 -0
  208. package/dist/compliance/__tests__/limits.contract.test.js +43 -0
  209. package/dist/compliance/__tests__/limits.contract.test.js.map +1 -0
  210. package/dist/compliance/__tests__/rg-monitoring.service.int.test.d.ts +2 -0
  211. package/dist/compliance/__tests__/rg-monitoring.service.int.test.d.ts.map +1 -0
  212. package/dist/compliance/__tests__/rg-monitoring.service.int.test.js +271 -0
  213. package/dist/compliance/__tests__/rg-monitoring.service.int.test.js.map +1 -0
  214. package/dist/compliance/__tests__/rg.contract.test.js +27 -17
  215. package/dist/compliance/__tests__/rg.contract.test.js.map +1 -1
  216. package/dist/compliance/__tests__/rg.router.int.test.d.ts +2 -0
  217. package/dist/compliance/__tests__/rg.router.int.test.d.ts.map +1 -0
  218. package/dist/compliance/__tests__/rg.router.int.test.js +158 -0
  219. package/dist/compliance/__tests__/rg.router.int.test.js.map +1 -0
  220. package/dist/compliance/__tests__/rg.service.int.test.d.ts +2 -0
  221. package/dist/compliance/__tests__/rg.service.int.test.d.ts.map +1 -0
  222. package/dist/compliance/__tests__/rg.service.int.test.js +356 -0
  223. package/dist/compliance/__tests__/rg.service.int.test.js.map +1 -0
  224. package/dist/compliance/adapters/hmac-kyc-webhook-verifier.d.ts +18 -5
  225. package/dist/compliance/adapters/hmac-kyc-webhook-verifier.d.ts.map +1 -1
  226. package/dist/compliance/adapters/hmac-kyc-webhook-verifier.js +58 -7
  227. package/dist/compliance/adapters/hmac-kyc-webhook-verifier.js.map +1 -1
  228. package/dist/compliance/contract/index.d.ts +408 -6
  229. package/dist/compliance/contract/index.d.ts.map +1 -1
  230. package/dist/compliance/contract/index.js +63 -4
  231. package/dist/compliance/contract/index.js.map +1 -1
  232. package/dist/compliance/contract/rg.d.ts +76 -11
  233. package/dist/compliance/contract/rg.d.ts.map +1 -1
  234. package/dist/compliance/contract/rg.js +23 -2
  235. package/dist/compliance/contract/rg.js.map +1 -1
  236. package/dist/compliance/drizzle/migrations/0002_condemned_monster_badoon.sql +3 -0
  237. package/dist/compliance/drizzle/migrations/0003_public_spirit.sql +1 -0
  238. package/dist/compliance/drizzle/migrations/0004_military_silk_fever.sql +2 -0
  239. package/dist/compliance/drizzle/migrations/meta/0002_snapshot.json +673 -0
  240. package/dist/compliance/drizzle/migrations/meta/0003_snapshot.json +679 -0
  241. package/dist/compliance/drizzle/migrations/meta/0004_snapshot.json +679 -0
  242. package/dist/compliance/drizzle/migrations/meta/_journal.json +21 -0
  243. package/dist/compliance/plugin.d.ts +139 -1
  244. package/dist/compliance/plugin.d.ts.map +1 -1
  245. package/dist/compliance/plugin.js +47 -9
  246. package/dist/compliance/plugin.js.map +1 -1
  247. package/dist/compliance/router/index.d.ts +242 -8
  248. package/dist/compliance/router/index.d.ts.map +1 -1
  249. package/dist/compliance/router/index.js +85 -26
  250. package/dist/compliance/router/index.js.map +1 -1
  251. package/dist/compliance/schema/index.d.ts +66 -4
  252. package/dist/compliance/schema/index.d.ts.map +1 -1
  253. package/dist/compliance/schema/index.js +9 -1
  254. package/dist/compliance/schema/index.js.map +1 -1
  255. package/dist/compliance/service/compliance.service.d.ts +16 -8
  256. package/dist/compliance/service/compliance.service.d.ts.map +1 -1
  257. package/dist/compliance/service/compliance.service.js +36 -16
  258. package/dist/compliance/service/compliance.service.js.map +1 -1
  259. package/dist/compliance/service/kyc.service.d.ts +156 -11
  260. package/dist/compliance/service/kyc.service.d.ts.map +1 -1
  261. package/dist/compliance/service/kyc.service.js +287 -37
  262. package/dist/compliance/service/kyc.service.js.map +1 -1
  263. package/dist/compliance/service/rg-monitoring.service.d.ts +1 -1
  264. package/dist/compliance/service/rg-monitoring.service.d.ts.map +1 -1
  265. package/dist/compliance/service/rg-monitoring.service.js +23 -11
  266. package/dist/compliance/service/rg-monitoring.service.js.map +1 -1
  267. package/dist/compliance/service/rg.service.d.ts +17 -6
  268. package/dist/compliance/service/rg.service.d.ts.map +1 -1
  269. package/dist/compliance/service/rg.service.js +110 -24
  270. package/dist/compliance/service/rg.service.js.map +1 -1
  271. package/dist/contracts/__tests__/compose-contract.test.d.ts +2 -0
  272. package/dist/contracts/__tests__/compose-contract.test.d.ts.map +1 -0
  273. package/dist/contracts/__tests__/compose-contract.test.js +27 -0
  274. package/dist/contracts/__tests__/compose-contract.test.js.map +1 -0
  275. package/dist/contracts/__tests__/identity.test.d.ts +2 -0
  276. package/dist/contracts/__tests__/identity.test.d.ts.map +1 -0
  277. package/dist/contracts/__tests__/identity.test.js +49 -0
  278. package/dist/contracts/__tests__/identity.test.js.map +1 -0
  279. package/dist/contracts/__tests__/player.test.d.ts +2 -0
  280. package/dist/contracts/__tests__/player.test.d.ts.map +1 -0
  281. package/dist/contracts/__tests__/player.test.js +51 -0
  282. package/dist/contracts/__tests__/player.test.js.map +1 -0
  283. package/dist/contracts/adapters/__tests__/rate-limit.test.d.ts +2 -0
  284. package/dist/contracts/adapters/__tests__/rate-limit.test.d.ts.map +1 -0
  285. package/dist/contracts/adapters/__tests__/rate-limit.test.js +13 -0
  286. package/dist/contracts/adapters/__tests__/rate-limit.test.js.map +1 -0
  287. package/dist/contracts/adapters/__tests__/token.test.d.ts +2 -0
  288. package/dist/contracts/adapters/__tests__/token.test.d.ts.map +1 -0
  289. package/dist/contracts/adapters/__tests__/token.test.js +14 -0
  290. package/dist/contracts/adapters/__tests__/token.test.js.map +1 -0
  291. package/dist/contracts/adapters/admin-game-reporting.d.ts +43 -0
  292. package/dist/contracts/adapters/admin-game-reporting.d.ts.map +1 -0
  293. package/dist/contracts/adapters/admin-game-reporting.js +17 -0
  294. package/dist/contracts/adapters/admin-game-reporting.js.map +1 -0
  295. package/dist/contracts/adapters/admin-permission.d.ts +11 -0
  296. package/dist/contracts/adapters/admin-permission.d.ts.map +1 -1
  297. package/dist/contracts/adapters/admin-permission.js +6 -4
  298. package/dist/contracts/adapters/admin-permission.js.map +1 -1
  299. package/dist/contracts/adapters/admin-player-activity.d.ts +51 -0
  300. package/dist/contracts/adapters/admin-player-activity.d.ts.map +1 -0
  301. package/dist/contracts/adapters/admin-player-activity.js +3 -0
  302. package/dist/contracts/adapters/admin-player-activity.js.map +1 -0
  303. package/dist/contracts/adapters/admin-role-assignment-directory.d.ts +12 -0
  304. package/dist/contracts/adapters/admin-role-assignment-directory.d.ts.map +1 -0
  305. package/dist/contracts/adapters/admin-role-assignment-directory.js +3 -0
  306. package/dist/contracts/adapters/admin-role-assignment-directory.js.map +1 -0
  307. package/dist/contracts/adapters/admin-user-directory.d.ts +45 -4
  308. package/dist/contracts/adapters/admin-user-directory.d.ts.map +1 -1
  309. package/dist/contracts/adapters/admin-user-directory.js +8 -0
  310. package/dist/contracts/adapters/admin-user-directory.js.map +1 -1
  311. package/dist/contracts/adapters/admin-wallet-reporting.d.ts +11 -0
  312. package/dist/contracts/adapters/admin-wallet-reporting.d.ts.map +1 -1
  313. package/dist/contracts/adapters/admin-wallet-reporting.js +9 -0
  314. package/dist/contracts/adapters/admin-wallet-reporting.js.map +1 -1
  315. package/dist/contracts/adapters/aggregator.d.ts +12 -0
  316. package/dist/contracts/adapters/aggregator.d.ts.map +1 -1
  317. package/dist/contracts/adapters/aggregator.js +5 -3
  318. package/dist/contracts/adapters/aggregator.js.map +1 -1
  319. package/dist/contracts/adapters/audit.d.ts +30 -4
  320. package/dist/contracts/adapters/audit.d.ts.map +1 -1
  321. package/dist/contracts/adapters/audit.js.map +1 -1
  322. package/dist/contracts/adapters/broker.d.ts +23 -0
  323. package/dist/contracts/adapters/broker.d.ts.map +1 -1
  324. package/dist/contracts/adapters/broker.js +8 -6
  325. package/dist/contracts/adapters/broker.js.map +1 -1
  326. package/dist/contracts/adapters/cache.d.ts +11 -0
  327. package/dist/contracts/adapters/cache.d.ts.map +1 -1
  328. package/dist/contracts/adapters/cache.js +8 -6
  329. package/dist/contracts/adapters/cache.js.map +1 -1
  330. package/dist/contracts/adapters/chat-block-writer.d.ts +18 -0
  331. package/dist/contracts/adapters/chat-block-writer.d.ts.map +1 -0
  332. package/dist/contracts/adapters/chat-block-writer.js +7 -0
  333. package/dist/contracts/adapters/chat-block-writer.js.map +1 -0
  334. package/dist/contracts/adapters/chat-moderation.d.ts +75 -0
  335. package/dist/contracts/adapters/chat-moderation.d.ts.map +1 -0
  336. package/dist/contracts/adapters/chat-moderation.js +3 -0
  337. package/dist/contracts/adapters/chat-moderation.js.map +1 -0
  338. package/dist/contracts/adapters/chat-room-access.d.ts +6 -0
  339. package/dist/contracts/adapters/chat-room-access.d.ts.map +1 -0
  340. package/dist/contracts/adapters/chat-room-access.js +3 -0
  341. package/dist/contracts/adapters/chat-room-access.js.map +1 -0
  342. package/dist/contracts/adapters/chat-system-writer.d.ts +19 -0
  343. package/dist/contracts/adapters/chat-system-writer.d.ts.map +1 -0
  344. package/dist/contracts/adapters/chat-system-writer.js +3 -0
  345. package/dist/contracts/adapters/chat-system-writer.js.map +1 -0
  346. package/dist/contracts/adapters/email-template.d.ts +54 -0
  347. package/dist/contracts/adapters/email-template.d.ts.map +1 -0
  348. package/dist/contracts/adapters/email-template.js +61 -0
  349. package/dist/contracts/adapters/email-template.js.map +1 -0
  350. package/dist/contracts/adapters/email.d.ts +7 -0
  351. package/dist/contracts/adapters/email.d.ts.map +1 -1
  352. package/dist/contracts/adapters/email.js +7 -5
  353. package/dist/contracts/adapters/email.js.map +1 -1
  354. package/dist/contracts/adapters/error-tracking.d.ts +12 -0
  355. package/dist/contracts/adapters/error-tracking.d.ts.map +1 -0
  356. package/dist/contracts/adapters/error-tracking.js +3 -0
  357. package/dist/contracts/adapters/error-tracking.js.map +1 -0
  358. package/dist/contracts/adapters/game.d.ts +4 -0
  359. package/dist/contracts/adapters/game.d.ts.map +1 -1
  360. package/dist/contracts/adapters/game.js +4 -2
  361. package/dist/contracts/adapters/game.js.map +1 -1
  362. package/dist/contracts/adapters/geo-check-commands.d.ts +8 -0
  363. package/dist/contracts/adapters/geo-check-commands.d.ts.map +1 -0
  364. package/dist/contracts/adapters/geo-check-commands.js +3 -0
  365. package/dist/contracts/adapters/geo-check-commands.js.map +1 -0
  366. package/dist/contracts/adapters/geo-ip.d.ts +4 -0
  367. package/dist/contracts/adapters/geo-ip.d.ts.map +1 -1
  368. package/dist/contracts/adapters/geo-ip.js +4 -2
  369. package/dist/contracts/adapters/geo-ip.js.map +1 -1
  370. package/dist/contracts/adapters/identity-reader.d.ts +14 -4
  371. package/dist/contracts/adapters/identity-reader.d.ts.map +1 -1
  372. package/dist/contracts/adapters/identity-reader.js.map +1 -1
  373. package/dist/contracts/adapters/identity.d.ts +15 -0
  374. package/dist/contracts/adapters/identity.d.ts.map +1 -1
  375. package/dist/contracts/adapters/identity.js +5 -2
  376. package/dist/contracts/adapters/identity.js.map +1 -1
  377. package/dist/contracts/adapters/index.d.ts +54 -13
  378. package/dist/contracts/adapters/index.d.ts.map +1 -1
  379. package/dist/contracts/adapters/index.js +30 -11
  380. package/dist/contracts/adapters/index.js.map +1 -1
  381. package/dist/contracts/adapters/job-queue.d.ts +55 -0
  382. package/dist/contracts/adapters/job-queue.d.ts.map +1 -1
  383. package/dist/contracts/adapters/job-queue.js +11 -9
  384. package/dist/contracts/adapters/job-queue.js.map +1 -1
  385. package/dist/contracts/adapters/kyc.d.ts +121 -4
  386. package/dist/contracts/adapters/kyc.d.ts.map +1 -1
  387. package/dist/contracts/adapters/kyc.js +30 -5
  388. package/dist/contracts/adapters/kyc.js.map +1 -1
  389. package/dist/contracts/adapters/login-enforcement.d.ts +8 -0
  390. package/dist/contracts/adapters/login-enforcement.d.ts.map +1 -1
  391. package/dist/contracts/adapters/login-enforcement.js +8 -6
  392. package/dist/contracts/adapters/login-enforcement.js.map +1 -1
  393. package/dist/contracts/adapters/notification.d.ts +7 -0
  394. package/dist/contracts/adapters/notification.d.ts.map +1 -1
  395. package/dist/contracts/adapters/notification.js +7 -5
  396. package/dist/contracts/adapters/notification.js.map +1 -1
  397. package/dist/contracts/adapters/outbox.d.ts +14 -0
  398. package/dist/contracts/adapters/outbox.d.ts.map +1 -1
  399. package/dist/contracts/adapters/outbox.js +14 -12
  400. package/dist/contracts/adapters/outbox.js.map +1 -1
  401. package/dist/contracts/adapters/payment.d.ts +195 -0
  402. package/dist/contracts/adapters/payment.d.ts.map +1 -1
  403. package/dist/contracts/adapters/payment.js +12 -2
  404. package/dist/contracts/adapters/payment.js.map +1 -1
  405. package/dist/contracts/adapters/play-eligibility.d.ts +15 -0
  406. package/dist/contracts/adapters/play-eligibility.d.ts.map +1 -0
  407. package/dist/contracts/adapters/play-eligibility.js +3 -0
  408. package/dist/contracts/adapters/play-eligibility.js.map +1 -0
  409. package/dist/contracts/adapters/player-activity.d.ts +6 -0
  410. package/dist/contracts/adapters/player-activity.d.ts.map +1 -0
  411. package/dist/contracts/adapters/player-activity.js +3 -0
  412. package/dist/contracts/adapters/player-activity.js.map +1 -0
  413. package/dist/contracts/adapters/player-provisioning.d.ts +21 -0
  414. package/dist/contracts/adapters/player-provisioning.d.ts.map +1 -0
  415. package/dist/contracts/adapters/player-provisioning.js +3 -0
  416. package/dist/contracts/adapters/player-provisioning.js.map +1 -0
  417. package/dist/contracts/adapters/player-tags.d.ts +4 -0
  418. package/dist/contracts/adapters/player-tags.d.ts.map +1 -1
  419. package/dist/contracts/adapters/player-tags.js.map +1 -1
  420. package/dist/contracts/adapters/rate-limit.d.ts +41 -3
  421. package/dist/contracts/adapters/rate-limit.d.ts.map +1 -1
  422. package/dist/contracts/adapters/rate-limit.js +29 -6
  423. package/dist/contracts/adapters/rate-limit.js.map +1 -1
  424. package/dist/contracts/adapters/realtime.d.ts +106 -7
  425. package/dist/contracts/adapters/realtime.d.ts.map +1 -1
  426. package/dist/contracts/adapters/realtime.js +26 -10
  427. package/dist/contracts/adapters/realtime.js.map +1 -1
  428. package/dist/contracts/adapters/rng.d.ts +11 -0
  429. package/dist/contracts/adapters/rng.d.ts.map +1 -1
  430. package/dist/contracts/adapters/rng.js +11 -9
  431. package/dist/contracts/adapters/rng.js.map +1 -1
  432. package/dist/contracts/adapters/sms.d.ts +15 -0
  433. package/dist/contracts/adapters/sms.d.ts.map +1 -0
  434. package/dist/contracts/adapters/sms.js +9 -0
  435. package/dist/contracts/adapters/sms.js.map +1 -0
  436. package/dist/contracts/adapters/social-commands.d.ts +12 -0
  437. package/dist/contracts/adapters/social-commands.d.ts.map +1 -0
  438. package/dist/contracts/adapters/social-commands.js +7 -0
  439. package/dist/contracts/adapters/social-commands.js.map +1 -0
  440. package/dist/contracts/adapters/tag-evaluation-commands.d.ts +20 -0
  441. package/dist/contracts/adapters/tag-evaluation-commands.d.ts.map +1 -0
  442. package/dist/contracts/adapters/tag-evaluation-commands.js +13 -0
  443. package/dist/contracts/adapters/tag-evaluation-commands.js.map +1 -0
  444. package/dist/contracts/adapters/token.d.ts +28 -5
  445. package/dist/contracts/adapters/token.d.ts.map +1 -1
  446. package/dist/contracts/adapters/token.js +10 -8
  447. package/dist/contracts/adapters/token.js.map +1 -1
  448. package/dist/contracts/adapters/wallet-asset-catalog.d.ts +34 -0
  449. package/dist/contracts/adapters/wallet-asset-catalog.d.ts.map +1 -0
  450. package/dist/contracts/adapters/wallet-asset-catalog.js +3 -0
  451. package/dist/contracts/adapters/wallet-asset-catalog.js.map +1 -0
  452. package/dist/contracts/adapters/wallet-commands.d.ts +11 -0
  453. package/dist/contracts/adapters/wallet-commands.d.ts.map +1 -1
  454. package/dist/contracts/adapters/wallet-commands.js.map +1 -1
  455. package/dist/contracts/adapters/wallet-reader.d.ts +9 -1
  456. package/dist/contracts/adapters/wallet-reader.d.ts.map +1 -1
  457. package/dist/contracts/adapters/wallet-reader.js.map +1 -1
  458. package/dist/contracts/kit.d.ts +15 -0
  459. package/dist/contracts/kit.d.ts.map +1 -1
  460. package/dist/contracts/kit.js +1 -0
  461. package/dist/contracts/kit.js.map +1 -1
  462. package/dist/contracts/schemas/__tests__/common-schemas.test.d.ts +2 -0
  463. package/dist/contracts/schemas/__tests__/common-schemas.test.d.ts.map +1 -0
  464. package/dist/contracts/schemas/__tests__/common-schemas.test.js +21 -0
  465. package/dist/contracts/schemas/__tests__/common-schemas.test.js.map +1 -0
  466. package/dist/contracts/schemas/__tests__/events.test.d.ts +2 -0
  467. package/dist/contracts/schemas/__tests__/events.test.d.ts.map +1 -0
  468. package/dist/contracts/schemas/__tests__/events.test.js +51 -0
  469. package/dist/contracts/schemas/__tests__/events.test.js.map +1 -0
  470. package/dist/contracts/schemas/__tests__/igaming-config.test.d.ts +2 -0
  471. package/dist/contracts/schemas/__tests__/igaming-config.test.d.ts.map +1 -0
  472. package/dist/contracts/schemas/__tests__/igaming-config.test.js +38 -0
  473. package/dist/contracts/schemas/__tests__/igaming-config.test.js.map +1 -0
  474. package/dist/contracts/schemas/__tests__/player-schemas.test.d.ts +2 -0
  475. package/dist/contracts/schemas/__tests__/player-schemas.test.d.ts.map +1 -0
  476. package/dist/contracts/schemas/__tests__/player-schemas.test.js +30 -0
  477. package/dist/contracts/schemas/__tests__/player-schemas.test.js.map +1 -0
  478. package/dist/contracts/schemas/__tests__/tag-schemas.test.d.ts +2 -0
  479. package/dist/contracts/schemas/__tests__/tag-schemas.test.d.ts.map +1 -0
  480. package/dist/contracts/schemas/__tests__/tag-schemas.test.js +42 -0
  481. package/dist/contracts/schemas/__tests__/tag-schemas.test.js.map +1 -0
  482. package/dist/contracts/schemas/chat-command-metadata.d.ts +73 -0
  483. package/dist/contracts/schemas/chat-command-metadata.d.ts.map +1 -0
  484. package/dist/contracts/schemas/chat-command-metadata.js +67 -0
  485. package/dist/contracts/schemas/chat-command-metadata.js.map +1 -0
  486. package/dist/contracts/schemas/chat-command.d.ts +213 -0
  487. package/dist/contracts/schemas/chat-command.d.ts.map +1 -0
  488. package/dist/contracts/schemas/chat-command.js +44 -0
  489. package/dist/contracts/schemas/chat-command.js.map +1 -0
  490. package/dist/contracts/schemas/common.d.ts +17 -0
  491. package/dist/contracts/schemas/common.d.ts.map +1 -1
  492. package/dist/contracts/schemas/common.js +28 -2
  493. package/dist/contracts/schemas/common.js.map +1 -1
  494. package/dist/contracts/schemas/compliance.d.ts +1 -1
  495. package/dist/contracts/schemas/events.d.ts +496 -1
  496. package/dist/contracts/schemas/events.d.ts.map +1 -1
  497. package/dist/contracts/schemas/events.js +343 -61
  498. package/dist/contracts/schemas/events.js.map +1 -1
  499. package/dist/contracts/schemas/game.d.ts +9 -0
  500. package/dist/contracts/schemas/game.d.ts.map +1 -0
  501. package/dist/contracts/schemas/game.js +4 -0
  502. package/dist/contracts/schemas/game.js.map +1 -0
  503. package/dist/contracts/schemas/iam.d.ts +30 -0
  504. package/dist/contracts/schemas/iam.d.ts.map +1 -1
  505. package/dist/contracts/schemas/iam.js +33 -0
  506. package/dist/contracts/schemas/iam.js.map +1 -1
  507. package/dist/contracts/schemas/identity.d.ts +97 -3
  508. package/dist/contracts/schemas/identity.d.ts.map +1 -1
  509. package/dist/contracts/schemas/identity.js +81 -6
  510. package/dist/contracts/schemas/identity.js.map +1 -1
  511. package/dist/contracts/schemas/igaming-config.d.ts +25 -1
  512. package/dist/contracts/schemas/igaming-config.d.ts.map +1 -1
  513. package/dist/contracts/schemas/igaming-config.js +2 -1
  514. package/dist/contracts/schemas/igaming-config.js.map +1 -1
  515. package/dist/contracts/schemas/index.d.ts +4 -0
  516. package/dist/contracts/schemas/index.d.ts.map +1 -1
  517. package/dist/contracts/schemas/index.js +4 -0
  518. package/dist/contracts/schemas/index.js.map +1 -1
  519. package/dist/contracts/schemas/platform-config.d.ts +74 -29
  520. package/dist/contracts/schemas/platform-config.d.ts.map +1 -1
  521. package/dist/contracts/schemas/platform-config.js +82 -5
  522. package/dist/contracts/schemas/platform-config.js.map +1 -1
  523. package/dist/contracts/schemas/player.d.ts +84 -4
  524. package/dist/contracts/schemas/player.d.ts.map +1 -1
  525. package/dist/contracts/schemas/player.js +72 -8
  526. package/dist/contracts/schemas/player.js.map +1 -1
  527. package/dist/contracts/schemas/reporting.d.ts +20 -0
  528. package/dist/contracts/schemas/reporting.d.ts.map +1 -0
  529. package/dist/contracts/schemas/reporting.js +13 -0
  530. package/dist/contracts/schemas/reporting.js.map +1 -0
  531. package/dist/contracts/schemas/tag.d.ts +86 -2
  532. package/dist/contracts/schemas/tag.d.ts.map +1 -1
  533. package/dist/contracts/schemas/tag.js +13 -1
  534. package/dist/contracts/schemas/tag.js.map +1 -1
  535. package/dist/contracts/schemas/wallet-tx.d.ts +43 -3
  536. package/dist/contracts/schemas/wallet-tx.d.ts.map +1 -1
  537. package/dist/contracts/schemas/wallet-tx.js +40 -3
  538. package/dist/contracts/schemas/wallet-tx.js.map +1 -1
  539. package/dist/engagement/chat/__tests__/chat.service.int.test.d.ts +2 -0
  540. package/dist/engagement/chat/__tests__/chat.service.int.test.d.ts.map +1 -0
  541. package/dist/engagement/chat/__tests__/chat.service.int.test.js +1430 -0
  542. package/dist/engagement/chat/__tests__/chat.service.int.test.js.map +1 -0
  543. package/dist/engagement/chat/__tests__/global-chat-room.int.test.d.ts +2 -0
  544. package/dist/engagement/chat/__tests__/global-chat-room.int.test.d.ts.map +1 -0
  545. package/dist/engagement/chat/__tests__/global-chat-room.int.test.js +91 -0
  546. package/dist/engagement/chat/__tests__/global-chat-room.int.test.js.map +1 -0
  547. package/dist/engagement/chat/__tests__/moderation.test.js +2 -0
  548. package/dist/engagement/chat/__tests__/moderation.test.js.map +1 -1
  549. package/dist/engagement/chat/contract/constants.d.ts +11 -0
  550. package/dist/engagement/chat/contract/constants.d.ts.map +1 -0
  551. package/dist/engagement/chat/contract/constants.js +11 -0
  552. package/dist/engagement/chat/contract/constants.js.map +1 -0
  553. package/dist/engagement/chat/contract/index.d.ts +1948 -17
  554. package/dist/engagement/chat/contract/index.d.ts.map +1 -1
  555. package/dist/engagement/chat/contract/index.js +407 -11
  556. package/dist/engagement/chat/contract/index.js.map +1 -1
  557. package/dist/engagement/chat/drizzle/migrations/0001_cloudy_groot.sql +32 -0
  558. package/dist/engagement/chat/drizzle/migrations/0002_steep_zodiak.sql +3 -0
  559. package/dist/engagement/chat/drizzle/migrations/0003_stormy_king_bedlam.sql +9 -0
  560. package/dist/engagement/chat/drizzle/migrations/0004_panoramic_robin_chapel.sql +6 -0
  561. package/dist/engagement/chat/drizzle/migrations/0005_tranquil_gwen_stacy.sql +100 -0
  562. package/dist/engagement/chat/drizzle/migrations/0006_tiny_ultron.sql +3 -0
  563. package/dist/engagement/chat/drizzle/migrations/0007_seed_global_chat_room.sql +8 -0
  564. package/dist/engagement/chat/drizzle/migrations/meta/0001_snapshot.json +557 -0
  565. package/dist/engagement/chat/drizzle/migrations/meta/0002_snapshot.json +576 -0
  566. package/dist/engagement/chat/drizzle/migrations/meta/0003_snapshot.json +652 -0
  567. package/dist/engagement/chat/drizzle/migrations/meta/0004_snapshot.json +666 -0
  568. package/dist/engagement/chat/drizzle/migrations/meta/0005_snapshot.json +1422 -0
  569. package/dist/engagement/chat/drizzle/migrations/meta/0006_snapshot.json +1456 -0
  570. package/dist/engagement/chat/drizzle/migrations/meta/0007_snapshot.json +1456 -0
  571. package/dist/engagement/chat/drizzle/migrations/meta/_journal.json +49 -0
  572. package/dist/engagement/chat/index.d.ts +1 -2
  573. package/dist/engagement/chat/index.d.ts.map +1 -1
  574. package/dist/engagement/chat/index.js +1 -2
  575. package/dist/engagement/chat/index.js.map +1 -1
  576. package/dist/engagement/chat/moderation/profanity.d.ts.map +1 -1
  577. package/dist/engagement/chat/moderation/profanity.js +2 -0
  578. package/dist/engagement/chat/moderation/profanity.js.map +1 -1
  579. package/dist/engagement/chat/plugin.d.ts +137 -1
  580. package/dist/engagement/chat/plugin.d.ts.map +1 -1
  581. package/dist/engagement/chat/plugin.js +34 -5
  582. package/dist/engagement/chat/plugin.js.map +1 -1
  583. package/dist/engagement/chat/router/index.d.ts +1515 -17
  584. package/dist/engagement/chat/router/index.d.ts.map +1 -1
  585. package/dist/engagement/chat/router/index.js +267 -27
  586. package/dist/engagement/chat/router/index.js.map +1 -1
  587. package/dist/engagement/chat/schema/index.d.ts +1508 -0
  588. package/dist/engagement/chat/schema/index.d.ts.map +1 -1
  589. package/dist/engagement/chat/schema/index.js +175 -3
  590. package/dist/engagement/chat/schema/index.js.map +1 -1
  591. package/dist/engagement/chat/service/chat-ban.service.d.ts +26 -0
  592. package/dist/engagement/chat/service/chat-ban.service.d.ts.map +1 -0
  593. package/dist/engagement/chat/service/chat-ban.service.js +139 -0
  594. package/dist/engagement/chat/service/chat-ban.service.js.map +1 -0
  595. package/dist/engagement/chat/service/chat-message-moderation.service.d.ts +14 -0
  596. package/dist/engagement/chat/service/chat-message-moderation.service.d.ts.map +1 -0
  597. package/dist/engagement/chat/service/chat-message-moderation.service.js +48 -0
  598. package/dist/engagement/chat/service/chat-message-moderation.service.js.map +1 -0
  599. package/dist/engagement/chat/service/chat-moderation.service.d.ts +30 -0
  600. package/dist/engagement/chat/service/chat-moderation.service.d.ts.map +1 -0
  601. package/dist/engagement/chat/service/chat-moderation.service.js +40 -0
  602. package/dist/engagement/chat/service/chat-moderation.service.js.map +1 -0
  603. package/dist/engagement/chat/service/chat-mute.service.d.ts +26 -0
  604. package/dist/engagement/chat/service/chat-mute.service.d.ts.map +1 -0
  605. package/dist/engagement/chat/service/chat-mute.service.js +151 -0
  606. package/dist/engagement/chat/service/chat-mute.service.js.map +1 -0
  607. package/dist/engagement/chat/service/chat-room-ban.service.d.ts +29 -0
  608. package/dist/engagement/chat/service/chat-room-ban.service.d.ts.map +1 -0
  609. package/dist/engagement/chat/service/chat-room-ban.service.js +105 -0
  610. package/dist/engagement/chat/service/chat-room-ban.service.js.map +1 -0
  611. package/dist/engagement/chat/service/chat-room-membership.service.d.ts +72 -0
  612. package/dist/engagement/chat/service/chat-room-membership.service.d.ts.map +1 -0
  613. package/dist/engagement/chat/service/chat-room-membership.service.js +176 -0
  614. package/dist/engagement/chat/service/chat-room-membership.service.js.map +1 -0
  615. package/dist/engagement/chat/service/chat-room-mute.service.d.ts +25 -0
  616. package/dist/engagement/chat/service/chat-room-mute.service.d.ts.map +1 -0
  617. package/dist/engagement/chat/service/chat-room-mute.service.js +89 -0
  618. package/dist/engagement/chat/service/chat-room-mute.service.js.map +1 -0
  619. package/dist/engagement/chat/service/chat.service.d.ts +1030 -32
  620. package/dist/engagement/chat/service/chat.service.d.ts.map +1 -1
  621. package/dist/engagement/chat/service/chat.service.js +1058 -66
  622. package/dist/engagement/chat/service/chat.service.js.map +1 -1
  623. package/dist/engagement/chat/service/errors/chat-moderation.errors.d.ts +21 -0
  624. package/dist/engagement/chat/service/errors/chat-moderation.errors.d.ts.map +1 -0
  625. package/dist/engagement/chat/service/errors/chat-moderation.errors.js +31 -0
  626. package/dist/engagement/chat/service/errors/chat-moderation.errors.js.map +1 -0
  627. package/dist/engagement/chat-commands/__tests__/migration-upgrade.int.test.d.ts +2 -0
  628. package/dist/engagement/chat-commands/__tests__/migration-upgrade.int.test.d.ts.map +1 -0
  629. package/dist/engagement/chat-commands/__tests__/migration-upgrade.int.test.js +52 -0
  630. package/dist/engagement/chat-commands/__tests__/migration-upgrade.int.test.js.map +1 -0
  631. package/dist/engagement/chat-commands/contract/index.d.ts +165 -0
  632. package/dist/engagement/chat-commands/contract/index.d.ts.map +1 -0
  633. package/dist/engagement/chat-commands/contract/index.js +66 -0
  634. package/dist/engagement/chat-commands/contract/index.js.map +1 -0
  635. package/dist/engagement/chat-commands/drizzle/migrations/0000_daffy_lady_bullseye.sql +24 -0
  636. package/dist/engagement/chat-commands/drizzle/migrations/0001_sturdy_barracuda.sql +1 -0
  637. package/dist/engagement/chat-commands/drizzle/migrations/meta/0000_snapshot.json +164 -0
  638. package/dist/engagement/chat-commands/drizzle/migrations/meta/0001_snapshot.json +83 -0
  639. package/dist/engagement/chat-commands/drizzle/migrations/meta/_journal.json +20 -0
  640. package/dist/engagement/chat-commands/drizzle.config.d.ts +4 -0
  641. package/dist/engagement/chat-commands/drizzle.config.d.ts.map +1 -0
  642. package/dist/engagement/chat-commands/drizzle.config.js +21 -0
  643. package/dist/engagement/chat-commands/drizzle.config.js.map +1 -0
  644. package/dist/engagement/chat-commands/migrate.d.ts +3 -0
  645. package/dist/engagement/chat-commands/migrate.d.ts.map +1 -0
  646. package/dist/engagement/chat-commands/migrate.js +22 -0
  647. package/dist/engagement/chat-commands/migrate.js.map +1 -0
  648. package/dist/engagement/chat-commands/plugin.d.ts +139 -0
  649. package/dist/engagement/chat-commands/plugin.d.ts.map +1 -0
  650. package/dist/engagement/chat-commands/plugin.js +15 -0
  651. package/dist/engagement/chat-commands/plugin.js.map +1 -0
  652. package/dist/engagement/chat-commands/router/index.d.ts +113 -0
  653. package/dist/engagement/chat-commands/router/index.d.ts.map +1 -0
  654. package/dist/engagement/chat-commands/router/index.js +24 -0
  655. package/dist/engagement/chat-commands/router/index.js.map +1 -0
  656. package/dist/engagement/chat-commands/schema/index.d.ts +138 -0
  657. package/dist/engagement/chat-commands/schema/index.d.ts.map +1 -0
  658. package/dist/engagement/chat-commands/schema/index.js +11 -0
  659. package/dist/engagement/chat-commands/schema/index.js.map +1 -0
  660. package/dist/engagement/chat-commands/seed/index.d.ts +3 -0
  661. package/dist/engagement/chat-commands/seed/index.d.ts.map +1 -0
  662. package/dist/engagement/chat-commands/seed/index.js +66 -0
  663. package/dist/engagement/chat-commands/seed/index.js.map +1 -0
  664. package/dist/engagement/chat-commands/service/__tests__/chat-commands.service.test.d.ts +2 -0
  665. package/dist/engagement/chat-commands/service/__tests__/chat-commands.service.test.d.ts.map +1 -0
  666. package/dist/engagement/chat-commands/service/__tests__/chat-commands.service.test.js +36 -0
  667. package/dist/engagement/chat-commands/service/__tests__/chat-commands.service.test.js.map +1 -0
  668. package/dist/engagement/chat-commands/service/chat-commands.service.d.ts +52 -0
  669. package/dist/engagement/chat-commands/service/chat-commands.service.d.ts.map +1 -0
  670. package/dist/engagement/chat-commands/service/chat-commands.service.js +141 -0
  671. package/dist/engagement/chat-commands/service/chat-commands.service.js.map +1 -0
  672. package/dist/engagement/contracts.d.ts +2 -0
  673. package/dist/engagement/contracts.d.ts.map +1 -1
  674. package/dist/engagement/contracts.js +2 -0
  675. package/dist/engagement/contracts.js.map +1 -1
  676. package/dist/engagement/index.d.ts +2 -0
  677. package/dist/engagement/index.d.ts.map +1 -1
  678. package/dist/engagement/index.js +2 -0
  679. package/dist/engagement/index.js.map +1 -1
  680. package/dist/engagement/notifications/__tests__/notifications.service.int.test.d.ts +2 -0
  681. package/dist/engagement/notifications/__tests__/notifications.service.int.test.d.ts.map +1 -0
  682. package/dist/engagement/notifications/__tests__/notifications.service.int.test.js +192 -0
  683. package/dist/engagement/notifications/__tests__/notifications.service.int.test.js.map +1 -0
  684. package/dist/engagement/notifications/contract/index.d.ts +17 -1
  685. package/dist/engagement/notifications/contract/index.d.ts.map +1 -1
  686. package/dist/engagement/notifications/contract/index.js +8 -1
  687. package/dist/engagement/notifications/contract/index.js.map +1 -1
  688. package/dist/engagement/notifications/plugin.d.ts +138 -1
  689. package/dist/engagement/notifications/plugin.d.ts.map +1 -1
  690. package/dist/engagement/notifications/plugin.js +82 -6
  691. package/dist/engagement/notifications/plugin.js.map +1 -1
  692. package/dist/engagement/notifications/router/index.d.ts +4 -0
  693. package/dist/engagement/notifications/router/index.d.ts.map +1 -1
  694. package/dist/engagement/server.d.ts +2 -0
  695. package/dist/engagement/server.d.ts.map +1 -1
  696. package/dist/engagement/server.js +2 -0
  697. package/dist/engagement/server.js.map +1 -1
  698. package/dist/engagement/social/__tests__/social.plugin.int.test.d.ts +2 -0
  699. package/dist/engagement/social/__tests__/social.plugin.int.test.d.ts.map +1 -0
  700. package/dist/engagement/social/__tests__/social.plugin.int.test.js +100 -0
  701. package/dist/engagement/social/__tests__/social.plugin.int.test.js.map +1 -0
  702. package/dist/engagement/social/__tests__/social.router.int.test.d.ts +2 -0
  703. package/dist/engagement/social/__tests__/social.router.int.test.d.ts.map +1 -0
  704. package/dist/engagement/social/__tests__/social.router.int.test.js +215 -0
  705. package/dist/engagement/social/__tests__/social.router.int.test.js.map +1 -0
  706. package/dist/engagement/social/__tests__/social.service.int.test.d.ts +2 -0
  707. package/dist/engagement/social/__tests__/social.service.int.test.d.ts.map +1 -0
  708. package/dist/engagement/social/__tests__/social.service.int.test.js +810 -0
  709. package/dist/engagement/social/__tests__/social.service.int.test.js.map +1 -0
  710. package/dist/engagement/social/contract/index.d.ts +187 -0
  711. package/dist/engagement/social/contract/index.d.ts.map +1 -0
  712. package/dist/engagement/social/contract/index.js +107 -0
  713. package/dist/engagement/social/contract/index.js.map +1 -0
  714. package/dist/engagement/social/drizzle/migrations/0000_fine_jamie_braddock.sql +24 -0
  715. package/dist/engagement/social/drizzle/migrations/0001_lame_eddie_brock.sql +10 -0
  716. package/dist/engagement/social/drizzle/migrations/0002_foamy_saracen.sql +1 -0
  717. package/dist/engagement/social/drizzle/migrations/0003_fuzzy_shadow_king.sql +4 -0
  718. package/dist/engagement/social/drizzle/migrations/0004_friendship-cancel-constraint.sql +2 -0
  719. package/dist/engagement/social/drizzle/migrations/meta/0000_snapshot.json +232 -0
  720. package/dist/engagement/social/drizzle/migrations/meta/0001_snapshot.json +129 -0
  721. package/dist/engagement/social/drizzle/migrations/meta/0002_snapshot.json +134 -0
  722. package/dist/engagement/social/drizzle/migrations/meta/0003_snapshot.json +145 -0
  723. package/dist/engagement/social/drizzle/migrations/meta/0004_snapshot.json +145 -0
  724. package/dist/engagement/social/drizzle/migrations/meta/_journal.json +41 -0
  725. package/dist/engagement/social/drizzle.config.d.ts +4 -0
  726. package/dist/engagement/social/drizzle.config.d.ts.map +1 -0
  727. package/dist/engagement/social/drizzle.config.js +21 -0
  728. package/dist/engagement/social/drizzle.config.js.map +1 -0
  729. package/dist/engagement/social/index.d.ts +3 -0
  730. package/dist/engagement/social/index.d.ts.map +1 -0
  731. package/dist/engagement/social/index.js +6 -0
  732. package/dist/engagement/social/index.js.map +1 -0
  733. package/dist/engagement/social/migrate.d.ts +5 -0
  734. package/dist/engagement/social/migrate.d.ts.map +1 -0
  735. package/dist/engagement/social/migrate.js +17 -0
  736. package/dist/engagement/social/migrate.js.map +1 -0
  737. package/dist/engagement/social/plugin.d.ts +139 -0
  738. package/dist/engagement/social/plugin.d.ts.map +1 -0
  739. package/dist/engagement/social/plugin.js +17 -0
  740. package/dist/engagement/social/plugin.js.map +1 -0
  741. package/dist/engagement/social/router/index.d.ts +98 -0
  742. package/dist/engagement/social/router/index.d.ts.map +1 -0
  743. package/dist/engagement/social/router/index.js +68 -0
  744. package/dist/engagement/social/router/index.js.map +1 -0
  745. package/dist/engagement/social/schema/index.d.ts +145 -0
  746. package/dist/engagement/social/schema/index.d.ts.map +1 -0
  747. package/dist/engagement/social/schema/index.js +24 -0
  748. package/dist/engagement/social/schema/index.js.map +1 -0
  749. package/dist/engagement/social/service/social.service.d.ts +55 -0
  750. package/dist/engagement/social/service/social.service.d.ts.map +1 -0
  751. package/dist/engagement/social/service/social.service.js +479 -0
  752. package/dist/engagement/social/service/social.service.js.map +1 -0
  753. package/dist/iam/__tests__/admin-player-activity.int.test.d.ts +2 -0
  754. package/dist/iam/__tests__/admin-player-activity.int.test.d.ts.map +1 -0
  755. package/dist/iam/__tests__/admin-player-activity.int.test.js +119 -0
  756. package/dist/iam/__tests__/admin-player-activity.int.test.js.map +1 -0
  757. package/dist/iam/__tests__/iam.service.int.test.d.ts +2 -0
  758. package/dist/iam/__tests__/iam.service.int.test.d.ts.map +1 -0
  759. package/dist/iam/__tests__/iam.service.int.test.js +573 -0
  760. package/dist/iam/__tests__/iam.service.int.test.js.map +1 -0
  761. package/dist/iam/adapters/admin-player-activity.d.ts +10 -0
  762. package/dist/iam/adapters/admin-player-activity.d.ts.map +1 -0
  763. package/dist/iam/adapters/admin-player-activity.js +106 -0
  764. package/dist/iam/adapters/admin-player-activity.js.map +1 -0
  765. package/dist/iam/adapters/admin-role-assignment-directory.d.ts +8 -0
  766. package/dist/iam/adapters/admin-role-assignment-directory.d.ts.map +1 -0
  767. package/dist/iam/adapters/admin-role-assignment-directory.js +23 -0
  768. package/dist/iam/adapters/admin-role-assignment-directory.js.map +1 -0
  769. package/dist/iam/contract/index.d.ts +58 -0
  770. package/dist/iam/contract/index.d.ts.map +1 -1
  771. package/dist/iam/contract/index.js +30 -4
  772. package/dist/iam/contract/index.js.map +1 -1
  773. package/dist/iam/plugin.d.ts +137 -1
  774. package/dist/iam/plugin.d.ts.map +1 -1
  775. package/dist/iam/plugin.js +9 -5
  776. package/dist/iam/plugin.js.map +1 -1
  777. package/dist/iam/router/index.d.ts +37 -0
  778. package/dist/iam/router/index.d.ts.map +1 -1
  779. package/dist/iam/router/index.js +7 -1
  780. package/dist/iam/router/index.js.map +1 -1
  781. package/dist/iam/seed/data/default-admin-roles.d.ts.map +1 -1
  782. package/dist/iam/seed/data/default-admin-roles.js +3 -0
  783. package/dist/iam/seed/data/default-admin-roles.js.map +1 -1
  784. package/dist/iam/service/iam.service.d.ts +24 -15
  785. package/dist/iam/service/iam.service.d.ts.map +1 -1
  786. package/dist/iam/service/iam.service.js +112 -11
  787. package/dist/iam/service/iam.service.js.map +1 -1
  788. package/dist/pam/identity/__tests__/admin-user-directory.int.test.d.ts +2 -0
  789. package/dist/pam/identity/__tests__/admin-user-directory.int.test.d.ts.map +1 -0
  790. package/dist/pam/identity/__tests__/admin-user-directory.int.test.js +217 -0
  791. package/dist/pam/identity/__tests__/admin-user-directory.int.test.js.map +1 -0
  792. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.d.ts +2 -0
  793. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.d.ts.map +1 -0
  794. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js +195 -0
  795. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js.map +1 -0
  796. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.d.ts +2 -0
  797. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.d.ts.map +1 -0
  798. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.js +118 -0
  799. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.js.map +1 -0
  800. package/dist/pam/identity/__tests__/identity.service.int.test.d.ts +2 -0
  801. package/dist/pam/identity/__tests__/identity.service.int.test.d.ts.map +1 -0
  802. package/dist/pam/identity/__tests__/identity.service.int.test.js +586 -0
  803. package/dist/pam/identity/__tests__/identity.service.int.test.js.map +1 -0
  804. package/dist/pam/identity/__tests__/login-enforcement.service.int.test.d.ts +2 -0
  805. package/dist/pam/identity/__tests__/login-enforcement.service.int.test.d.ts.map +1 -0
  806. package/dist/pam/identity/__tests__/login-enforcement.service.int.test.js +99 -0
  807. package/dist/pam/identity/__tests__/login-enforcement.service.int.test.js.map +1 -0
  808. package/dist/pam/identity/__tests__/phone-login.service.int.test.d.ts +2 -0
  809. package/dist/pam/identity/__tests__/phone-login.service.int.test.d.ts.map +1 -0
  810. package/dist/pam/identity/__tests__/phone-login.service.int.test.js +371 -0
  811. package/dist/pam/identity/__tests__/phone-login.service.int.test.js.map +1 -0
  812. package/dist/pam/identity/__tests__/play-eligibility.test.d.ts +2 -0
  813. package/dist/pam/identity/__tests__/play-eligibility.test.d.ts.map +1 -0
  814. package/dist/pam/identity/__tests__/play-eligibility.test.js +30 -0
  815. package/dist/pam/identity/__tests__/play-eligibility.test.js.map +1 -0
  816. package/dist/pam/identity/__tests__/rg-guard.test.d.ts +2 -0
  817. package/dist/pam/identity/__tests__/rg-guard.test.d.ts.map +1 -0
  818. package/dist/pam/identity/__tests__/rg-guard.test.js +21 -0
  819. package/dist/pam/identity/__tests__/rg-guard.test.js.map +1 -0
  820. package/dist/pam/identity/__tests__/session.service.int.test.d.ts +2 -0
  821. package/dist/pam/identity/__tests__/session.service.int.test.d.ts.map +1 -0
  822. package/dist/pam/identity/__tests__/session.service.int.test.js +85 -0
  823. package/dist/pam/identity/__tests__/session.service.int.test.js.map +1 -0
  824. package/dist/pam/identity/__tests__/user-commands.int.test.d.ts +2 -0
  825. package/dist/pam/identity/__tests__/user-commands.int.test.d.ts.map +1 -0
  826. package/dist/pam/identity/__tests__/user-commands.int.test.js +39 -0
  827. package/dist/pam/identity/__tests__/user-commands.int.test.js.map +1 -0
  828. package/dist/pam/identity/__tests__/username-backfill.int.test.d.ts +2 -0
  829. package/dist/pam/identity/__tests__/username-backfill.int.test.d.ts.map +1 -0
  830. package/dist/pam/identity/__tests__/username-backfill.int.test.js +103 -0
  831. package/dist/pam/identity/__tests__/username-backfill.int.test.js.map +1 -0
  832. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.d.ts +2 -0
  833. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.d.ts.map +1 -0
  834. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.js +33 -0
  835. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.js.map +1 -0
  836. package/dist/pam/identity/adapters/default-email-template-renderer.d.ts +8 -0
  837. package/dist/pam/identity/adapters/default-email-template-renderer.d.ts.map +1 -0
  838. package/dist/pam/identity/adapters/default-email-template-renderer.js +7 -0
  839. package/dist/pam/identity/adapters/default-email-template-renderer.js.map +1 -0
  840. package/dist/pam/identity/adapters/identity-reader.service.d.ts +8 -4
  841. package/dist/pam/identity/adapters/identity-reader.service.d.ts.map +1 -1
  842. package/dist/pam/identity/adapters/identity-reader.service.js +53 -2
  843. package/dist/pam/identity/adapters/identity-reader.service.js.map +1 -1
  844. package/dist/pam/identity/adapters/mock/mock-sms-adapter.d.ts +8 -0
  845. package/dist/pam/identity/adapters/mock/mock-sms-adapter.d.ts.map +1 -0
  846. package/dist/pam/identity/adapters/mock/mock-sms-adapter.js +7 -0
  847. package/dist/pam/identity/adapters/mock/mock-sms-adapter.js.map +1 -0
  848. package/dist/pam/identity/admin-user-directory.d.ts +36 -8
  849. package/dist/pam/identity/admin-user-directory.d.ts.map +1 -1
  850. package/dist/pam/identity/admin-user-directory.js +88 -35
  851. package/dist/pam/identity/admin-user-directory.js.map +1 -1
  852. package/dist/pam/identity/contract/index.d.ts +156 -15
  853. package/dist/pam/identity/contract/index.d.ts.map +1 -1
  854. package/dist/pam/identity/contract/index.js +65 -7
  855. package/dist/pam/identity/contract/index.js.map +1 -1
  856. package/dist/pam/identity/drizzle/migrations/0001_rainy_peter_quill.sql +18 -0
  857. package/dist/pam/identity/drizzle/migrations/0002_outstanding_patriot.sql +1 -0
  858. package/dist/pam/identity/drizzle/migrations/0003_open_shotgun.sql +1 -0
  859. package/dist/pam/identity/drizzle/migrations/0004_round_giant_girl.sql +1 -0
  860. package/dist/pam/identity/drizzle/migrations/0005_daily_black_tom.sql +1 -0
  861. package/dist/pam/identity/drizzle/migrations/0006_brave_sabra.sql +1 -0
  862. package/dist/pam/identity/drizzle/migrations/0007_fuzzy_barracuda.sql +44 -0
  863. package/dist/pam/identity/drizzle/migrations/meta/0001_snapshot.json +684 -0
  864. package/dist/pam/identity/drizzle/migrations/meta/0002_snapshot.json +690 -0
  865. package/dist/pam/identity/drizzle/migrations/meta/0003_snapshot.json +695 -0
  866. package/dist/pam/identity/drizzle/migrations/meta/0004_snapshot.json +680 -0
  867. package/dist/pam/identity/drizzle/migrations/meta/0005_snapshot.json +695 -0
  868. package/dist/pam/identity/drizzle/migrations/meta/0006_snapshot.json +701 -0
  869. package/dist/pam/identity/drizzle/migrations/meta/0007_snapshot.json +737 -0
  870. package/dist/pam/identity/drizzle/migrations/meta/_journal.json +49 -0
  871. package/dist/pam/identity/plugin.d.ts +136 -1
  872. package/dist/pam/identity/plugin.d.ts.map +1 -1
  873. package/dist/pam/identity/plugin.js +43 -7
  874. package/dist/pam/identity/plugin.js.map +1 -1
  875. package/dist/pam/identity/react/account.d.ts +44 -11
  876. package/dist/pam/identity/react/account.d.ts.map +1 -1
  877. package/dist/pam/identity/react/account.js +13 -1
  878. package/dist/pam/identity/react/account.js.map +1 -1
  879. package/dist/pam/identity/react/auth.d.ts +17 -13
  880. package/dist/pam/identity/react/auth.d.ts.map +1 -1
  881. package/dist/pam/identity/router/index.d.ts +145 -16
  882. package/dist/pam/identity/router/index.d.ts.map +1 -1
  883. package/dist/pam/identity/router/index.js +66 -12
  884. package/dist/pam/identity/router/index.js.map +1 -1
  885. package/dist/pam/identity/schema/index.d.ts +246 -0
  886. package/dist/pam/identity/schema/index.d.ts.map +1 -1
  887. package/dist/pam/identity/schema/index.js +32 -2
  888. package/dist/pam/identity/schema/index.js.map +1 -1
  889. package/dist/pam/identity/service/identity.service.d.ts +107 -33
  890. package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
  891. package/dist/pam/identity/service/identity.service.js +717 -124
  892. package/dist/pam/identity/service/identity.service.js.map +1 -1
  893. package/dist/pam/identity/service/lockout-policy.service.d.ts +30 -0
  894. package/dist/pam/identity/service/lockout-policy.service.d.ts.map +1 -0
  895. package/dist/pam/identity/service/lockout-policy.service.js +40 -0
  896. package/dist/pam/identity/service/lockout-policy.service.js.map +1 -0
  897. package/dist/pam/identity/service/phone-login.service.d.ts +62 -0
  898. package/dist/pam/identity/service/phone-login.service.d.ts.map +1 -0
  899. package/dist/pam/identity/service/phone-login.service.js +371 -0
  900. package/dist/pam/identity/service/phone-login.service.js.map +1 -0
  901. package/dist/pam/identity/service/play-eligibility.service.d.ts +8 -0
  902. package/dist/pam/identity/service/play-eligibility.service.d.ts.map +1 -0
  903. package/dist/pam/identity/service/play-eligibility.service.js +21 -0
  904. package/dist/pam/identity/service/play-eligibility.service.js.map +1 -0
  905. package/dist/pam/identity/service/rg-guard.service.d.ts +37 -0
  906. package/dist/pam/identity/service/rg-guard.service.d.ts.map +1 -0
  907. package/dist/pam/identity/service/rg-guard.service.js +60 -0
  908. package/dist/pam/identity/service/rg-guard.service.js.map +1 -0
  909. package/dist/pam/identity/service/session.service.d.ts +14 -5
  910. package/dist/pam/identity/service/session.service.d.ts.map +1 -1
  911. package/dist/pam/identity/service/session.service.js +35 -12
  912. package/dist/pam/identity/service/session.service.js.map +1 -1
  913. package/dist/pam/identity/service/user-commands.service.d.ts +11 -0
  914. package/dist/pam/identity/service/user-commands.service.d.ts.map +1 -0
  915. package/dist/pam/identity/service/user-commands.service.js +32 -0
  916. package/dist/pam/identity/service/user-commands.service.js.map +1 -0
  917. package/dist/pam/player-management/__tests__/kyc-status-writer.int.test.d.ts +2 -0
  918. package/dist/pam/player-management/__tests__/kyc-status-writer.int.test.d.ts.map +1 -0
  919. package/dist/pam/player-management/__tests__/kyc-status-writer.int.test.js +89 -0
  920. package/dist/pam/player-management/__tests__/kyc-status-writer.int.test.js.map +1 -0
  921. package/dist/pam/player-management/__tests__/player.router.int.test.d.ts +2 -0
  922. package/dist/pam/player-management/__tests__/player.router.int.test.d.ts.map +1 -0
  923. package/dist/pam/player-management/__tests__/player.router.int.test.js +107 -0
  924. package/dist/pam/player-management/__tests__/player.router.int.test.js.map +1 -0
  925. package/dist/pam/player-management/__tests__/player.service.int.test.d.ts +2 -0
  926. package/dist/pam/player-management/__tests__/player.service.int.test.d.ts.map +1 -0
  927. package/dist/pam/player-management/__tests__/player.service.int.test.js +429 -0
  928. package/dist/pam/player-management/__tests__/player.service.int.test.js.map +1 -0
  929. package/dist/pam/player-management/contract/index.d.ts +115 -15
  930. package/dist/pam/player-management/contract/index.d.ts.map +1 -1
  931. package/dist/pam/player-management/contract/index.js +35 -5
  932. package/dist/pam/player-management/contract/index.js.map +1 -1
  933. package/dist/pam/player-management/plugin.d.ts +137 -1
  934. package/dist/pam/player-management/plugin.d.ts.map +1 -1
  935. package/dist/pam/player-management/plugin.js +10 -7
  936. package/dist/pam/player-management/plugin.js.map +1 -1
  937. package/dist/pam/player-management/router/index.d.ts +87 -15
  938. package/dist/pam/player-management/router/index.d.ts.map +1 -1
  939. package/dist/pam/player-management/router/index.js +54 -17
  940. package/dist/pam/player-management/router/index.js.map +1 -1
  941. package/dist/pam/player-management/service/kyc-status-writer.d.ts +3 -2
  942. package/dist/pam/player-management/service/kyc-status-writer.d.ts.map +1 -1
  943. package/dist/pam/player-management/service/kyc-status-writer.js +25 -10
  944. package/dist/pam/player-management/service/kyc-status-writer.js.map +1 -1
  945. package/dist/pam/player-management/service/player.service.d.ts +52 -21
  946. package/dist/pam/player-management/service/player.service.d.ts.map +1 -1
  947. package/dist/pam/player-management/service/player.service.js +129 -43
  948. package/dist/pam/player-management/service/player.service.js.map +1 -1
  949. package/dist/pam/player-note/__tests__/player-note.router.int.test.d.ts +2 -0
  950. package/dist/pam/player-note/__tests__/player-note.router.int.test.d.ts.map +1 -0
  951. package/dist/pam/player-note/__tests__/player-note.router.int.test.js +52 -0
  952. package/dist/pam/player-note/__tests__/player-note.router.int.test.js.map +1 -0
  953. package/dist/pam/player-note/contract/index.d.ts +14 -0
  954. package/dist/pam/player-note/contract/index.d.ts.map +1 -1
  955. package/dist/pam/player-note/contract/index.js +8 -2
  956. package/dist/pam/player-note/contract/index.js.map +1 -1
  957. package/dist/pam/player-note/plugin.d.ts +137 -1
  958. package/dist/pam/player-note/plugin.d.ts.map +1 -1
  959. package/dist/pam/player-note/plugin.js +6 -4
  960. package/dist/pam/player-note/plugin.js.map +1 -1
  961. package/dist/pam/player-note/router/index.d.ts +10 -1
  962. package/dist/pam/player-note/router/index.d.ts.map +1 -1
  963. package/dist/pam/player-note/router/index.js +20 -3
  964. package/dist/pam/player-note/router/index.js.map +1 -1
  965. package/dist/pam/player-note/service/player-note.service.d.ts +5 -3
  966. package/dist/pam/player-note/service/player-note.service.d.ts.map +1 -1
  967. package/dist/pam/player-note/service/player-note.service.js +5 -3
  968. package/dist/pam/player-note/service/player-note.service.js.map +1 -1
  969. package/dist/pam/profile/__tests__/profile.service.int.test.d.ts +2 -0
  970. package/dist/pam/profile/__tests__/profile.service.int.test.d.ts.map +1 -0
  971. package/dist/pam/profile/__tests__/profile.service.int.test.js +133 -0
  972. package/dist/pam/profile/__tests__/profile.service.int.test.js.map +1 -0
  973. package/dist/pam/profile/contract/index.d.ts +17 -4
  974. package/dist/pam/profile/contract/index.d.ts.map +1 -1
  975. package/dist/pam/profile/drizzle/migrations/0001_powerful_tiger_shark.sql +1 -0
  976. package/dist/pam/profile/drizzle/migrations/0002_sour_alex_wilder.sql +7 -0
  977. package/dist/pam/profile/drizzle/migrations/0003_absurd_morbius.sql +4 -0
  978. package/dist/pam/profile/drizzle/migrations/meta/0001_snapshot.json +191 -0
  979. package/dist/pam/profile/drizzle/migrations/meta/0002_snapshot.json +200 -0
  980. package/dist/pam/profile/drizzle/migrations/meta/0003_snapshot.json +224 -0
  981. package/dist/pam/profile/drizzle/migrations/meta/_journal.json +21 -0
  982. package/dist/pam/profile/migrate.d.ts.map +1 -1
  983. package/dist/pam/profile/migrate.js +3 -1
  984. package/dist/pam/profile/migrate.js.map +1 -1
  985. package/dist/pam/profile/plugin.d.ts +136 -1
  986. package/dist/pam/profile/plugin.d.ts.map +1 -1
  987. package/dist/pam/profile/plugin.js +7 -4
  988. package/dist/pam/profile/plugin.js.map +1 -1
  989. package/dist/pam/profile/react/profile.d.ts +17 -6
  990. package/dist/pam/profile/react/profile.d.ts.map +1 -1
  991. package/dist/pam/profile/router/index.d.ts +17 -4
  992. package/dist/pam/profile/router/index.d.ts.map +1 -1
  993. package/dist/pam/profile/schema/index.d.ts +142 -6
  994. package/dist/pam/profile/schema/index.d.ts.map +1 -1
  995. package/dist/pam/profile/schema/index.js +16 -10
  996. package/dist/pam/profile/schema/index.js.map +1 -1
  997. package/dist/pam/profile/service/profile.service.d.ts +28 -6
  998. package/dist/pam/profile/service/profile.service.d.ts.map +1 -1
  999. package/dist/pam/profile/service/profile.service.js +26 -16
  1000. package/dist/pam/profile/service/profile.service.js.map +1 -1
  1001. package/dist/pam/react.d.ts +1 -1
  1002. package/dist/pam/react.d.ts.map +1 -1
  1003. package/dist/pam/react.js +1 -1
  1004. package/dist/pam/react.js.map +1 -1
  1005. package/dist/pam/shared/__tests__/shared-mappers.test.d.ts +2 -0
  1006. package/dist/pam/shared/__tests__/shared-mappers.test.d.ts.map +1 -0
  1007. package/dist/pam/shared/__tests__/shared-mappers.test.js +55 -0
  1008. package/dist/pam/shared/__tests__/shared-mappers.test.js.map +1 -0
  1009. package/dist/pam/shared/player-mapper.d.ts +12 -4
  1010. package/dist/pam/shared/player-mapper.d.ts.map +1 -1
  1011. package/dist/pam/shared/player-mapper.js +12 -5
  1012. package/dist/pam/shared/player-mapper.js.map +1 -1
  1013. package/dist/pam/tag/__tests__/get-active-tag-keys.int.test.d.ts +2 -0
  1014. package/dist/pam/tag/__tests__/get-active-tag-keys.int.test.d.ts.map +1 -0
  1015. package/dist/pam/tag/__tests__/get-active-tag-keys.int.test.js +77 -0
  1016. package/dist/pam/tag/__tests__/get-active-tag-keys.int.test.js.map +1 -0
  1017. package/dist/pam/tag/__tests__/tag-evaluation.service.int.test.d.ts +2 -0
  1018. package/dist/pam/tag/__tests__/tag-evaluation.service.int.test.d.ts.map +1 -0
  1019. package/dist/pam/tag/__tests__/tag-evaluation.service.int.test.js +980 -0
  1020. package/dist/pam/tag/__tests__/tag-evaluation.service.int.test.js.map +1 -0
  1021. package/dist/pam/tag/__tests__/tag-mappers.test.js +25 -0
  1022. package/dist/pam/tag/__tests__/tag-mappers.test.js.map +1 -1
  1023. package/dist/pam/tag/__tests__/tag-rule.service.int.test.d.ts +2 -0
  1024. package/dist/pam/tag/__tests__/tag-rule.service.int.test.d.ts.map +1 -0
  1025. package/dist/pam/tag/__tests__/tag-rule.service.int.test.js +145 -0
  1026. package/dist/pam/tag/__tests__/tag-rule.service.int.test.js.map +1 -0
  1027. package/dist/pam/tag/__tests__/tag.router.int.test.d.ts +2 -0
  1028. package/dist/pam/tag/__tests__/tag.router.int.test.d.ts.map +1 -0
  1029. package/dist/pam/tag/__tests__/tag.router.int.test.js +222 -0
  1030. package/dist/pam/tag/__tests__/tag.router.int.test.js.map +1 -0
  1031. package/dist/pam/tag/__tests__/tag.service.int.test.d.ts +2 -0
  1032. package/dist/pam/tag/__tests__/tag.service.int.test.d.ts.map +1 -0
  1033. package/dist/pam/tag/__tests__/tag.service.int.test.js +571 -0
  1034. package/dist/pam/tag/__tests__/tag.service.int.test.js.map +1 -0
  1035. package/dist/pam/tag/contract/index.d.ts +139 -1
  1036. package/dist/pam/tag/contract/index.d.ts.map +1 -1
  1037. package/dist/pam/tag/contract/index.js +12 -2
  1038. package/dist/pam/tag/contract/index.js.map +1 -1
  1039. package/dist/pam/tag/contract/player-tag-assign-metadata.d.ts +37 -0
  1040. package/dist/pam/tag/contract/player-tag-assign-metadata.d.ts.map +1 -0
  1041. package/dist/pam/tag/contract/player-tag-assign-metadata.js +20 -0
  1042. package/dist/pam/tag/contract/player-tag-assign-metadata.js.map +1 -0
  1043. package/dist/pam/tag/drizzle/migrations/0002_silent_skaar.sql +4 -0
  1044. package/dist/pam/tag/drizzle/migrations/0003_overconfident_guardian.sql +3 -0
  1045. package/dist/pam/tag/drizzle/migrations/0004_curvy_wither.sql +2 -0
  1046. package/dist/pam/tag/drizzle/migrations/meta/0002_snapshot.json +335 -0
  1047. package/dist/pam/tag/drizzle/migrations/meta/0003_snapshot.json +343 -0
  1048. package/dist/pam/tag/drizzle/migrations/meta/0004_snapshot.json +345 -0
  1049. package/dist/pam/tag/drizzle/migrations/meta/_journal.json +21 -0
  1050. package/dist/pam/tag/migrate.d.ts.map +1 -1
  1051. package/dist/pam/tag/migrate.js +34 -0
  1052. package/dist/pam/tag/migrate.js.map +1 -1
  1053. package/dist/pam/tag/plugin.d.ts +137 -1
  1054. package/dist/pam/tag/plugin.d.ts.map +1 -1
  1055. package/dist/pam/tag/plugin.js +46 -19
  1056. package/dist/pam/tag/plugin.js.map +1 -1
  1057. package/dist/pam/tag/router/index.d.ts +114 -1
  1058. package/dist/pam/tag/router/index.d.ts.map +1 -1
  1059. package/dist/pam/tag/router/index.js +38 -9
  1060. package/dist/pam/tag/router/index.js.map +1 -1
  1061. package/dist/pam/tag/schema/index.d.ts +42 -3
  1062. package/dist/pam/tag/schema/index.d.ts.map +1 -1
  1063. package/dist/pam/tag/schema/index.js +13 -2
  1064. package/dist/pam/tag/schema/index.js.map +1 -1
  1065. package/dist/pam/tag/seed/data/default-tag-rules.d.ts.map +1 -1
  1066. package/dist/pam/tag/seed/data/default-tag-rules.js +42 -0
  1067. package/dist/pam/tag/seed/data/default-tag-rules.js.map +1 -1
  1068. package/dist/pam/tag/seed/data/default-tags.d.ts.map +1 -1
  1069. package/dist/pam/tag/seed/data/default-tags.js +6 -0
  1070. package/dist/pam/tag/seed/data/default-tags.js.map +1 -1
  1071. package/dist/pam/tag/service/tag-evaluation.service.d.ts +141 -17
  1072. package/dist/pam/tag/service/tag-evaluation.service.d.ts.map +1 -1
  1073. package/dist/pam/tag/service/tag-evaluation.service.js +473 -48
  1074. package/dist/pam/tag/service/tag-evaluation.service.js.map +1 -1
  1075. package/dist/pam/tag/service/tag-mappers.d.ts +1 -1
  1076. package/dist/pam/tag/service/tag-mappers.d.ts.map +1 -1
  1077. package/dist/pam/tag/service/tag-mappers.js +1 -0
  1078. package/dist/pam/tag/service/tag-mappers.js.map +1 -1
  1079. package/dist/pam/tag/service/tag-rule.service.d.ts +5 -5
  1080. package/dist/pam/tag/service/tag-rule.service.d.ts.map +1 -1
  1081. package/dist/pam/tag/service/tag-rule.service.js +8 -2
  1082. package/dist/pam/tag/service/tag-rule.service.js.map +1 -1
  1083. package/dist/pam/tag/service/tag.service.d.ts +147 -13
  1084. package/dist/pam/tag/service/tag.service.d.ts.map +1 -1
  1085. package/dist/pam/tag/service/tag.service.js +297 -30
  1086. package/dist/pam/tag/service/tag.service.js.map +1 -1
  1087. package/dist/react/context/realtime-client.d.ts +1 -0
  1088. package/dist/react/context/realtime-client.d.ts.map +1 -1
  1089. package/dist/react/context/realtime-client.js.map +1 -1
  1090. package/dist/react/hooks/__tests__/use-event-stream.test.d.ts +2 -0
  1091. package/dist/react/hooks/__tests__/use-event-stream.test.d.ts.map +1 -0
  1092. package/dist/react/hooks/__tests__/use-event-stream.test.js +153 -0
  1093. package/dist/react/hooks/__tests__/use-event-stream.test.js.map +1 -0
  1094. package/dist/react/hooks/use-event-stream.d.ts +3 -3
  1095. package/dist/react/hooks/use-event-stream.d.ts.map +1 -1
  1096. package/dist/react/hooks/use-event-stream.js +60 -28
  1097. package/dist/react/hooks/use-event-stream.js.map +1 -1
  1098. package/dist/server/auth/__tests__/admin-guard.int.test.d.ts +2 -0
  1099. package/dist/server/auth/__tests__/admin-guard.int.test.d.ts.map +1 -0
  1100. package/dist/server/auth/__tests__/admin-guard.int.test.js +153 -0
  1101. package/dist/server/auth/__tests__/admin-guard.int.test.js.map +1 -0
  1102. package/dist/server/auth/__tests__/auth.test.d.ts +2 -0
  1103. package/dist/server/auth/__tests__/auth.test.d.ts.map +1 -0
  1104. package/dist/server/auth/__tests__/auth.test.js +155 -0
  1105. package/dist/server/auth/__tests__/auth.test.js.map +1 -0
  1106. package/dist/server/auth/__tests__/permission-levels.test.d.ts +2 -0
  1107. package/dist/server/auth/__tests__/permission-levels.test.d.ts.map +1 -0
  1108. package/dist/server/auth/__tests__/permission-levels.test.js +89 -0
  1109. package/dist/server/auth/__tests__/permission-levels.test.js.map +1 -0
  1110. package/dist/server/auth/__tests__/permissions.test.d.ts +2 -0
  1111. package/dist/server/auth/__tests__/permissions.test.d.ts.map +1 -0
  1112. package/dist/server/auth/__tests__/permissions.test.js +15 -0
  1113. package/dist/server/auth/__tests__/permissions.test.js.map +1 -0
  1114. package/dist/server/auth/__tests__/session-resolver.int.test.d.ts +2 -0
  1115. package/dist/server/auth/__tests__/session-resolver.int.test.d.ts.map +1 -0
  1116. package/dist/server/auth/__tests__/session-resolver.int.test.js +59 -0
  1117. package/dist/server/auth/__tests__/session-resolver.int.test.js.map +1 -0
  1118. package/dist/server/auth/__tests__/sign-session-cookie.test.d.ts +2 -0
  1119. package/dist/server/auth/__tests__/sign-session-cookie.test.d.ts.map +1 -0
  1120. package/dist/server/auth/__tests__/sign-session-cookie.test.js +59 -0
  1121. package/dist/server/auth/__tests__/sign-session-cookie.test.js.map +1 -0
  1122. package/dist/server/auth/admin-guard.d.ts +12 -10
  1123. package/dist/server/auth/admin-guard.d.ts.map +1 -1
  1124. package/dist/server/auth/admin-guard.js +89 -43
  1125. package/dist/server/auth/admin-guard.js.map +1 -1
  1126. package/dist/server/auth/auth.d.ts +30 -0
  1127. package/dist/server/auth/auth.d.ts.map +1 -1
  1128. package/dist/server/auth/auth.js +66 -17
  1129. package/dist/server/auth/auth.js.map +1 -1
  1130. package/dist/server/auth/index.d.ts +2 -0
  1131. package/dist/server/auth/index.d.ts.map +1 -1
  1132. package/dist/server/auth/index.js +1 -0
  1133. package/dist/server/auth/index.js.map +1 -1
  1134. package/dist/server/auth/permissions.d.ts +121 -14
  1135. package/dist/server/auth/permissions.d.ts.map +1 -1
  1136. package/dist/server/auth/permissions.js +14 -20
  1137. package/dist/server/auth/permissions.js.map +1 -1
  1138. package/dist/server/auth/session-resolver.d.ts +4 -0
  1139. package/dist/server/auth/session-resolver.d.ts.map +1 -1
  1140. package/dist/server/auth/session-resolver.js +9 -2
  1141. package/dist/server/auth/session-resolver.js.map +1 -1
  1142. package/dist/server/auth/sign-session-cookie.d.ts +18 -0
  1143. package/dist/server/auth/sign-session-cookie.d.ts.map +1 -0
  1144. package/dist/server/auth/sign-session-cookie.js +15 -0
  1145. package/dist/server/auth/sign-session-cookie.js.map +1 -0
  1146. package/dist/server/db/__tests__/migrate.test.d.ts +2 -0
  1147. package/dist/server/db/__tests__/migrate.test.d.ts.map +1 -0
  1148. package/dist/server/db/__tests__/migrate.test.js +148 -0
  1149. package/dist/server/db/__tests__/migrate.test.js.map +1 -0
  1150. package/dist/server/db/__tests__/query-helpers.test.js +120 -1
  1151. package/dist/server/db/__tests__/query-helpers.test.js.map +1 -1
  1152. package/dist/server/db/drizzle.service.d.ts.map +1 -1
  1153. package/dist/server/db/drizzle.service.js +8 -0
  1154. package/dist/server/db/drizzle.service.js.map +1 -1
  1155. package/dist/server/db/index.d.ts +1 -1
  1156. package/dist/server/db/index.d.ts.map +1 -1
  1157. package/dist/server/db/index.js +1 -1
  1158. package/dist/server/db/index.js.map +1 -1
  1159. package/dist/server/db/migrate.d.ts +38 -0
  1160. package/dist/server/db/migrate.d.ts.map +1 -1
  1161. package/dist/server/db/migrate.js +81 -12
  1162. package/dist/server/db/migrate.js.map +1 -1
  1163. package/dist/server/db/outbox/__tests__/relay.int.test.d.ts +2 -0
  1164. package/dist/server/db/outbox/__tests__/relay.int.test.d.ts.map +1 -0
  1165. package/dist/server/db/outbox/__tests__/relay.int.test.js +117 -0
  1166. package/dist/server/db/outbox/__tests__/relay.int.test.js.map +1 -0
  1167. package/dist/server/db/query-helpers.d.ts +5 -0
  1168. package/dist/server/db/query-helpers.d.ts.map +1 -1
  1169. package/dist/server/db/query-helpers.js +44 -0
  1170. package/dist/server/db/query-helpers.js.map +1 -1
  1171. package/dist/server/kernel/__tests__/bullmq-job-queue.int.test.d.ts +2 -0
  1172. package/dist/server/kernel/__tests__/bullmq-job-queue.int.test.d.ts.map +1 -0
  1173. package/dist/server/kernel/__tests__/bullmq-job-queue.int.test.js +240 -0
  1174. package/dist/server/kernel/__tests__/bullmq-job-queue.int.test.js.map +1 -0
  1175. package/dist/server/kernel/__tests__/cache.int.test.d.ts +2 -0
  1176. package/dist/server/kernel/__tests__/cache.int.test.d.ts.map +1 -0
  1177. package/dist/server/kernel/__tests__/cache.int.test.js +52 -0
  1178. package/dist/server/kernel/__tests__/cache.int.test.js.map +1 -0
  1179. package/dist/server/kernel/__tests__/domain-error.test.d.ts +2 -0
  1180. package/dist/server/kernel/__tests__/domain-error.test.d.ts.map +1 -0
  1181. package/dist/server/kernel/__tests__/domain-error.test.js +35 -0
  1182. package/dist/server/kernel/__tests__/domain-error.test.js.map +1 -0
  1183. package/dist/server/kernel/__tests__/error-reporter.test.d.ts +2 -0
  1184. package/dist/server/kernel/__tests__/error-reporter.test.d.ts.map +1 -0
  1185. package/dist/server/kernel/__tests__/error-reporter.test.js +52 -0
  1186. package/dist/server/kernel/__tests__/error-reporter.test.js.map +1 -0
  1187. package/dist/server/kernel/__tests__/event-bus.int.test.d.ts +2 -0
  1188. package/dist/server/kernel/__tests__/event-bus.int.test.d.ts.map +1 -0
  1189. package/dist/server/kernel/__tests__/event-bus.int.test.js +173 -0
  1190. package/dist/server/kernel/__tests__/event-bus.int.test.js.map +1 -0
  1191. package/dist/server/kernel/__tests__/helpers.test.js +26 -0
  1192. package/dist/server/kernel/__tests__/helpers.test.js.map +1 -1
  1193. package/dist/server/kernel/__tests__/logger.test.d.ts +2 -0
  1194. package/dist/server/kernel/__tests__/logger.test.d.ts.map +1 -0
  1195. package/dist/server/kernel/__tests__/logger.test.js +44 -0
  1196. package/dist/server/kernel/__tests__/logger.test.js.map +1 -0
  1197. package/dist/server/kernel/__tests__/orpc-error-map.test.d.ts +2 -0
  1198. package/dist/server/kernel/__tests__/orpc-error-map.test.d.ts.map +1 -0
  1199. package/dist/server/kernel/__tests__/orpc-error-map.test.js +54 -0
  1200. package/dist/server/kernel/__tests__/orpc-error-map.test.js.map +1 -0
  1201. package/dist/server/kernel/__tests__/platform-config-loader.test.d.ts +2 -0
  1202. package/dist/server/kernel/__tests__/platform-config-loader.test.d.ts.map +1 -0
  1203. package/dist/server/kernel/__tests__/platform-config-loader.test.js +112 -0
  1204. package/dist/server/kernel/__tests__/platform-config-loader.test.js.map +1 -0
  1205. package/dist/server/kernel/__tests__/rate-limiter.int.test.d.ts +2 -0
  1206. package/dist/server/kernel/__tests__/rate-limiter.int.test.d.ts.map +1 -0
  1207. package/dist/server/kernel/__tests__/rate-limiter.int.test.js +41 -0
  1208. package/dist/server/kernel/__tests__/rate-limiter.int.test.js.map +1 -0
  1209. package/dist/server/kernel/__tests__/realtime-transport.test.js +24 -4
  1210. package/dist/server/kernel/__tests__/realtime-transport.test.js.map +1 -1
  1211. package/dist/server/kernel/__tests__/redis-cache.int.test.d.ts +2 -0
  1212. package/dist/server/kernel/__tests__/redis-cache.int.test.d.ts.map +1 -0
  1213. package/dist/server/kernel/__tests__/redis-cache.int.test.js +49 -0
  1214. package/dist/server/kernel/__tests__/redis-cache.int.test.js.map +1 -0
  1215. package/dist/server/kernel/__tests__/redis-rate-limiter.int.test.d.ts +2 -0
  1216. package/dist/server/kernel/__tests__/redis-rate-limiter.int.test.d.ts.map +1 -0
  1217. package/dist/server/kernel/__tests__/redis-rate-limiter.int.test.js +61 -0
  1218. package/dist/server/kernel/__tests__/redis-rate-limiter.int.test.js.map +1 -0
  1219. package/dist/server/kernel/__tests__/redis-streams-broker.int.test.d.ts +2 -0
  1220. package/dist/server/kernel/__tests__/redis-streams-broker.int.test.d.ts.map +1 -0
  1221. package/dist/server/kernel/__tests__/redis-streams-broker.int.test.js +172 -0
  1222. package/dist/server/kernel/__tests__/redis-streams-broker.int.test.js.map +1 -0
  1223. package/dist/server/kernel/__tests__/request-context.test.d.ts +2 -0
  1224. package/dist/server/kernel/__tests__/request-context.test.d.ts.map +1 -0
  1225. package/dist/server/kernel/__tests__/request-context.test.js +64 -0
  1226. package/dist/server/kernel/__tests__/request-context.test.js.map +1 -0
  1227. package/dist/server/kernel/__tests__/router-utils.test.d.ts +2 -0
  1228. package/dist/server/kernel/__tests__/router-utils.test.d.ts.map +1 -0
  1229. package/dist/server/kernel/__tests__/router-utils.test.js +87 -0
  1230. package/dist/server/kernel/__tests__/router-utils.test.js.map +1 -0
  1231. package/dist/server/kernel/bullmq-job-queue.d.ts.map +1 -1
  1232. package/dist/server/kernel/bullmq-job-queue.js +27 -4
  1233. package/dist/server/kernel/bullmq-job-queue.js.map +1 -1
  1234. package/dist/server/kernel/cache.d.ts +0 -12
  1235. package/dist/server/kernel/cache.d.ts.map +1 -1
  1236. package/dist/server/kernel/cache.js +0 -55
  1237. package/dist/server/kernel/cache.js.map +1 -1
  1238. package/dist/server/kernel/container.d.ts +7 -6
  1239. package/dist/server/kernel/container.d.ts.map +1 -1
  1240. package/dist/server/kernel/container.js +3 -0
  1241. package/dist/server/kernel/container.js.map +1 -1
  1242. package/dist/server/kernel/error-reporter.d.ts +5 -0
  1243. package/dist/server/kernel/error-reporter.d.ts.map +1 -0
  1244. package/dist/server/kernel/error-reporter.js +20 -0
  1245. package/dist/server/kernel/error-reporter.js.map +1 -0
  1246. package/dist/server/kernel/event-bus.d.ts +2 -18
  1247. package/dist/server/kernel/event-bus.d.ts.map +1 -1
  1248. package/dist/server/kernel/event-bus.js +11 -34
  1249. package/dist/server/kernel/event-bus.js.map +1 -1
  1250. package/dist/server/kernel/event-stream.d.ts.map +1 -1
  1251. package/dist/server/kernel/event-stream.js +19 -4
  1252. package/dist/server/kernel/event-stream.js.map +1 -1
  1253. package/dist/server/kernel/index.d.ts +9 -7
  1254. package/dist/server/kernel/index.d.ts.map +1 -1
  1255. package/dist/server/kernel/index.js +7 -6
  1256. package/dist/server/kernel/index.js.map +1 -1
  1257. package/dist/server/kernel/logger.d.ts +7 -0
  1258. package/dist/server/kernel/logger.d.ts.map +1 -1
  1259. package/dist/server/kernel/logger.js +36 -2
  1260. package/dist/server/kernel/logger.js.map +1 -1
  1261. package/dist/server/kernel/orpc-error-map.d.ts.map +1 -1
  1262. package/dist/server/kernel/orpc-error-map.js +4 -1
  1263. package/dist/server/kernel/orpc-error-map.js.map +1 -1
  1264. package/dist/server/kernel/rate-limiter.d.ts +2 -10
  1265. package/dist/server/kernel/rate-limiter.d.ts.map +1 -1
  1266. package/dist/server/kernel/rate-limiter.js +0 -34
  1267. package/dist/server/kernel/rate-limiter.js.map +1 -1
  1268. package/dist/server/kernel/realtime-authorizer.d.ts +2 -4
  1269. package/dist/server/kernel/realtime-authorizer.d.ts.map +1 -1
  1270. package/dist/server/kernel/realtime-authorizer.js +3 -2
  1271. package/dist/server/kernel/realtime-authorizer.js.map +1 -1
  1272. package/dist/server/kernel/realtime-transport.d.ts +7 -2
  1273. package/dist/server/kernel/realtime-transport.d.ts.map +1 -1
  1274. package/dist/server/kernel/realtime-transport.js +55 -19
  1275. package/dist/server/kernel/realtime-transport.js.map +1 -1
  1276. package/dist/server/kernel/redis-cache.d.ts +3 -0
  1277. package/dist/server/kernel/redis-cache.d.ts.map +1 -1
  1278. package/dist/server/kernel/redis-cache.js +10 -0
  1279. package/dist/server/kernel/redis-cache.js.map +1 -1
  1280. package/dist/server/kernel/redis-client.d.ts.map +1 -1
  1281. package/dist/server/kernel/redis-client.js +5 -1
  1282. package/dist/server/kernel/redis-client.js.map +1 -1
  1283. package/dist/server/kernel/redis-rate-limiter.d.ts +1 -0
  1284. package/dist/server/kernel/redis-rate-limiter.d.ts.map +1 -1
  1285. package/dist/server/kernel/redis-rate-limiter.js +11 -0
  1286. package/dist/server/kernel/redis-rate-limiter.js.map +1 -1
  1287. package/dist/server/kernel/redis-streams-broker.d.ts +65 -0
  1288. package/dist/server/kernel/redis-streams-broker.d.ts.map +1 -0
  1289. package/dist/server/kernel/redis-streams-broker.js +208 -0
  1290. package/dist/server/kernel/redis-streams-broker.js.map +1 -0
  1291. package/dist/server/kernel/request-context.d.ts +4 -0
  1292. package/dist/server/kernel/request-context.d.ts.map +1 -1
  1293. package/dist/server/kernel/request-context.js +4 -0
  1294. package/dist/server/kernel/request-context.js.map +1 -1
  1295. package/dist/server/kernel/router-utils.d.ts +7 -0
  1296. package/dist/server/kernel/router-utils.d.ts.map +1 -1
  1297. package/dist/server/kernel/router-utils.js +31 -2
  1298. package/dist/server/kernel/router-utils.js.map +1 -1
  1299. package/dist/server/plugin-host/__tests__/core-plugins.test.d.ts +2 -0
  1300. package/dist/server/plugin-host/__tests__/core-plugins.test.d.ts.map +1 -0
  1301. package/dist/server/plugin-host/__tests__/core-plugins.test.js +27 -0
  1302. package/dist/server/plugin-host/__tests__/core-plugins.test.js.map +1 -0
  1303. package/dist/server/plugin-host/__tests__/load-plugins.test.d.ts +2 -0
  1304. package/dist/server/plugin-host/__tests__/load-plugins.test.d.ts.map +1 -0
  1305. package/dist/server/plugin-host/__tests__/load-plugins.test.js +31 -0
  1306. package/dist/server/plugin-host/__tests__/load-plugins.test.js.map +1 -0
  1307. package/dist/server/plugin-host/__tests__/module-registry.test.js.map +1 -1
  1308. package/dist/server/plugin-host/__tests__/required-ports.test.js +1 -0
  1309. package/dist/server/plugin-host/__tests__/required-ports.test.js.map +1 -1
  1310. package/dist/server/plugin-host/__tests__/typed-plugin.test.d.ts +2 -0
  1311. package/dist/server/plugin-host/__tests__/typed-plugin.test.d.ts.map +1 -0
  1312. package/dist/server/plugin-host/__tests__/typed-plugin.test.js +82 -0
  1313. package/dist/server/plugin-host/__tests__/typed-plugin.test.js.map +1 -0
  1314. package/dist/server/plugin-host/core-plugins.d.ts +16 -0
  1315. package/dist/server/plugin-host/core-plugins.d.ts.map +1 -0
  1316. package/dist/server/plugin-host/core-plugins.js +40 -0
  1317. package/dist/server/plugin-host/core-plugins.js.map +1 -0
  1318. package/dist/server/plugin-host/define-plugin.d.ts +24 -24
  1319. package/dist/server/plugin-host/define-plugin.d.ts.map +1 -1
  1320. package/dist/server/plugin-host/define-plugin.js +1 -3
  1321. package/dist/server/plugin-host/define-plugin.js.map +1 -1
  1322. package/dist/server/plugin-host/index.d.ts +3 -3
  1323. package/dist/server/plugin-host/index.d.ts.map +1 -1
  1324. package/dist/server/plugin-host/index.js +2 -2
  1325. package/dist/server/plugin-host/index.js.map +1 -1
  1326. package/dist/server/plugin-host/load-extensions.d.ts +2 -2
  1327. package/dist/server/plugin-host/load-extensions.js +2 -2
  1328. package/dist/server/plugin-host/load-plugins.d.ts +7 -3
  1329. package/dist/server/plugin-host/load-plugins.d.ts.map +1 -1
  1330. package/dist/server/plugin-host/load-plugins.js +10 -2
  1331. package/dist/server/plugin-host/load-plugins.js.map +1 -1
  1332. package/dist/server/plugin-host/module-registry.d.ts +9 -14
  1333. package/dist/server/plugin-host/module-registry.d.ts.map +1 -1
  1334. package/dist/server/plugin-host/module-registry.js +2 -9
  1335. package/dist/server/plugin-host/module-registry.js.map +1 -1
  1336. package/dist/server/runtime/__tests__/create-app.test.d.ts +2 -0
  1337. package/dist/server/runtime/__tests__/create-app.test.d.ts.map +1 -0
  1338. package/dist/server/runtime/__tests__/create-app.test.js +98 -0
  1339. package/dist/server/runtime/__tests__/create-app.test.js.map +1 -0
  1340. package/dist/server/runtime/assert-durable-seams.d.ts +19 -0
  1341. package/dist/server/runtime/assert-durable-seams.d.ts.map +1 -0
  1342. package/dist/server/runtime/assert-durable-seams.js +32 -0
  1343. package/dist/server/runtime/assert-durable-seams.js.map +1 -0
  1344. package/dist/server/runtime/core-token-catalog.d.ts +136 -0
  1345. package/dist/server/runtime/core-token-catalog.d.ts.map +1 -0
  1346. package/dist/server/runtime/core-token-catalog.js +62 -0
  1347. package/dist/server/runtime/core-token-catalog.js.map +1 -0
  1348. package/dist/server/runtime/create-app.d.ts +17 -23
  1349. package/dist/server/runtime/create-app.d.ts.map +1 -1
  1350. package/dist/server/runtime/create-app.js +129 -74
  1351. package/dist/server/runtime/create-app.js.map +1 -1
  1352. package/dist/server/runtime/index.d.ts +2 -3
  1353. package/dist/server/runtime/index.d.ts.map +1 -1
  1354. package/dist/server/runtime/index.js +0 -2
  1355. package/dist/server/runtime/index.js.map +1 -1
  1356. package/dist/testing/index.d.ts +5 -0
  1357. package/dist/testing/index.d.ts.map +1 -0
  1358. package/dist/testing/index.js +5 -0
  1359. package/dist/testing/index.js.map +1 -0
  1360. package/dist/testing/mock.d.ts +50 -15
  1361. package/dist/testing/mock.d.ts.map +1 -1
  1362. package/dist/testing/mock.js +119 -39
  1363. package/dist/testing/mock.js.map +1 -1
  1364. package/dist/testing/real-infra.d.ts +47 -0
  1365. package/dist/testing/real-infra.d.ts.map +1 -0
  1366. package/dist/testing/real-infra.js +125 -0
  1367. package/dist/testing/real-infra.js.map +1 -0
  1368. package/dist/testing/realtime-transport-conformance.d.ts +35 -0
  1369. package/dist/testing/realtime-transport-conformance.d.ts.map +1 -0
  1370. package/dist/testing/realtime-transport-conformance.js +81 -0
  1371. package/dist/testing/realtime-transport-conformance.js.map +1 -0
  1372. package/dist/testing/seed-player.d.ts +92 -0
  1373. package/dist/testing/seed-player.d.ts.map +1 -0
  1374. package/dist/testing/seed-player.js +43 -0
  1375. package/dist/testing/seed-player.js.map +1 -0
  1376. package/dist/wallet/__tests__/admin-reporting.int.test.d.ts +2 -0
  1377. package/dist/wallet/__tests__/admin-reporting.int.test.d.ts.map +1 -0
  1378. package/dist/wallet/__tests__/admin-reporting.int.test.js +236 -0
  1379. package/dist/wallet/__tests__/admin-reporting.int.test.js.map +1 -0
  1380. package/dist/wallet/__tests__/bonus-rollover-concurrency.int.test.d.ts +2 -0
  1381. package/dist/wallet/__tests__/bonus-rollover-concurrency.int.test.d.ts.map +1 -0
  1382. package/dist/wallet/__tests__/bonus-rollover-concurrency.int.test.js +163 -0
  1383. package/dist/wallet/__tests__/bonus-rollover-concurrency.int.test.js.map +1 -0
  1384. package/dist/wallet/__tests__/bonus-rollover.int.test.d.ts +2 -0
  1385. package/dist/wallet/__tests__/bonus-rollover.int.test.d.ts.map +1 -0
  1386. package/dist/wallet/__tests__/bonus-rollover.int.test.js +444 -0
  1387. package/dist/wallet/__tests__/bonus-rollover.int.test.js.map +1 -0
  1388. package/dist/wallet/__tests__/custody-sweep-gate.test.d.ts +2 -0
  1389. package/dist/wallet/__tests__/custody-sweep-gate.test.d.ts.map +1 -0
  1390. package/dist/wallet/__tests__/custody-sweep-gate.test.js +70 -0
  1391. package/dist/wallet/__tests__/custody-sweep-gate.test.js.map +1 -0
  1392. package/dist/wallet/__tests__/custody-sweep.service.int.test.d.ts +2 -0
  1393. package/dist/wallet/__tests__/custody-sweep.service.int.test.d.ts.map +1 -0
  1394. package/dist/wallet/__tests__/custody-sweep.service.int.test.js +274 -0
  1395. package/dist/wallet/__tests__/custody-sweep.service.int.test.js.map +1 -0
  1396. package/dist/wallet/__tests__/deposit-gate.test.d.ts +2 -0
  1397. package/dist/wallet/__tests__/deposit-gate.test.d.ts.map +1 -0
  1398. package/dist/wallet/__tests__/deposit-gate.test.js +46 -0
  1399. package/dist/wallet/__tests__/deposit-gate.test.js.map +1 -0
  1400. package/dist/wallet/__tests__/hmac-payment-webhook-verifier.test.d.ts +2 -0
  1401. package/dist/wallet/__tests__/hmac-payment-webhook-verifier.test.d.ts.map +1 -0
  1402. package/dist/wallet/__tests__/hmac-payment-webhook-verifier.test.js +25 -0
  1403. package/dist/wallet/__tests__/hmac-payment-webhook-verifier.test.js.map +1 -0
  1404. package/dist/wallet/__tests__/rail-for.test.d.ts +2 -0
  1405. package/dist/wallet/__tests__/rail-for.test.d.ts.map +1 -0
  1406. package/dist/wallet/__tests__/rail-for.test.js +29 -0
  1407. package/dist/wallet/__tests__/rail-for.test.js.map +1 -0
  1408. package/dist/wallet/__tests__/reconciliation-diff.test.d.ts +2 -0
  1409. package/dist/wallet/__tests__/reconciliation-diff.test.d.ts.map +1 -0
  1410. package/dist/wallet/__tests__/reconciliation-diff.test.js +49 -0
  1411. package/dist/wallet/__tests__/reconciliation-diff.test.js.map +1 -0
  1412. package/dist/wallet/__tests__/reconciliation.service.int.test.d.ts +2 -0
  1413. package/dist/wallet/__tests__/reconciliation.service.int.test.d.ts.map +1 -0
  1414. package/dist/wallet/__tests__/reconciliation.service.int.test.js +415 -0
  1415. package/dist/wallet/__tests__/reconciliation.service.int.test.js.map +1 -0
  1416. package/dist/wallet/__tests__/settlement-network.test.d.ts +2 -0
  1417. package/dist/wallet/__tests__/settlement-network.test.d.ts.map +1 -0
  1418. package/dist/wallet/__tests__/settlement-network.test.js +54 -0
  1419. package/dist/wallet/__tests__/settlement-network.test.js.map +1 -0
  1420. package/dist/wallet/__tests__/wallet-asset.router.int.test.d.ts +2 -0
  1421. package/dist/wallet/__tests__/wallet-asset.router.int.test.d.ts.map +1 -0
  1422. package/dist/wallet/__tests__/wallet-asset.router.int.test.js +245 -0
  1423. package/dist/wallet/__tests__/wallet-asset.router.int.test.js.map +1 -0
  1424. package/dist/wallet/__tests__/wallet-auto-rule.router.int.test.d.ts +2 -0
  1425. package/dist/wallet/__tests__/wallet-auto-rule.router.int.test.d.ts.map +1 -0
  1426. package/dist/wallet/__tests__/wallet-auto-rule.router.int.test.js +137 -0
  1427. package/dist/wallet/__tests__/wallet-auto-rule.router.int.test.js.map +1 -0
  1428. package/dist/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.d.ts +2 -0
  1429. package/dist/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.d.ts.map +1 -0
  1430. package/dist/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.js +205 -0
  1431. package/dist/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.js.map +1 -0
  1432. package/dist/wallet/__tests__/wallet-auto-withdrawal.int.test.d.ts +2 -0
  1433. package/dist/wallet/__tests__/wallet-auto-withdrawal.int.test.d.ts.map +1 -0
  1434. package/dist/wallet/__tests__/wallet-auto-withdrawal.int.test.js +775 -0
  1435. package/dist/wallet/__tests__/wallet-auto-withdrawal.int.test.js.map +1 -0
  1436. package/dist/wallet/__tests__/wallet-balance-stream.router.test.d.ts +2 -0
  1437. package/dist/wallet/__tests__/wallet-balance-stream.router.test.d.ts.map +1 -0
  1438. package/dist/wallet/__tests__/wallet-balance-stream.router.test.js +31 -0
  1439. package/dist/wallet/__tests__/wallet-balance-stream.router.test.js.map +1 -0
  1440. package/dist/wallet/__tests__/wallet-bonus-rollover-config.router.int.test.d.ts +2 -0
  1441. package/dist/wallet/__tests__/wallet-bonus-rollover-config.router.int.test.d.ts.map +1 -0
  1442. package/dist/wallet/__tests__/wallet-bonus-rollover-config.router.int.test.js +114 -0
  1443. package/dist/wallet/__tests__/wallet-bonus-rollover-config.router.int.test.js.map +1 -0
  1444. package/dist/wallet/__tests__/wallet-commands.service.int.test.d.ts +2 -0
  1445. package/dist/wallet/__tests__/wallet-commands.service.int.test.d.ts.map +1 -0
  1446. package/dist/wallet/__tests__/wallet-commands.service.int.test.js +213 -0
  1447. package/dist/wallet/__tests__/wallet-commands.service.int.test.js.map +1 -0
  1448. package/dist/wallet/__tests__/wallet-currency-code.test.d.ts +2 -0
  1449. package/dist/wallet/__tests__/wallet-currency-code.test.d.ts.map +1 -0
  1450. package/dist/wallet/__tests__/wallet-currency-code.test.js +48 -0
  1451. package/dist/wallet/__tests__/wallet-currency-code.test.js.map +1 -0
  1452. package/dist/wallet/__tests__/wallet-custody-routes.router.test.d.ts +2 -0
  1453. package/dist/wallet/__tests__/wallet-custody-routes.router.test.d.ts.map +1 -0
  1454. package/dist/wallet/__tests__/wallet-custody-routes.router.test.js +129 -0
  1455. package/dist/wallet/__tests__/wallet-custody-routes.router.test.js.map +1 -0
  1456. package/dist/wallet/__tests__/wallet-kyc-gate.int.test.d.ts +2 -0
  1457. package/dist/wallet/__tests__/wallet-kyc-gate.int.test.d.ts.map +1 -0
  1458. package/dist/wallet/__tests__/wallet-kyc-gate.int.test.js +104 -0
  1459. package/dist/wallet/__tests__/wallet-kyc-gate.int.test.js.map +1 -0
  1460. package/dist/wallet/__tests__/wallet-transaction-direction-backfill.test.d.ts +2 -0
  1461. package/dist/wallet/__tests__/wallet-transaction-direction-backfill.test.d.ts.map +1 -0
  1462. package/dist/wallet/__tests__/wallet-transaction-direction-backfill.test.js +24 -0
  1463. package/dist/wallet/__tests__/wallet-transaction-direction-backfill.test.js.map +1 -0
  1464. package/dist/wallet/__tests__/wallet-webhook.router.int.test.d.ts +2 -0
  1465. package/dist/wallet/__tests__/wallet-webhook.router.int.test.d.ts.map +1 -0
  1466. package/dist/wallet/__tests__/wallet-webhook.router.int.test.js +310 -0
  1467. package/dist/wallet/__tests__/wallet-webhook.router.int.test.js.map +1 -0
  1468. package/dist/wallet/__tests__/wallet-withdrawal-address.router.int.test.d.ts +2 -0
  1469. package/dist/wallet/__tests__/wallet-withdrawal-address.router.int.test.d.ts.map +1 -0
  1470. package/dist/wallet/__tests__/wallet-withdrawal-address.router.int.test.js +171 -0
  1471. package/dist/wallet/__tests__/wallet-withdrawal-address.router.int.test.js.map +1 -0
  1472. package/dist/wallet/__tests__/wallet.rate-limit.int.test.d.ts +2 -0
  1473. package/dist/wallet/__tests__/wallet.rate-limit.int.test.d.ts.map +1 -0
  1474. package/dist/wallet/__tests__/wallet.rate-limit.int.test.js +117 -0
  1475. package/dist/wallet/__tests__/wallet.rate-limit.int.test.js.map +1 -0
  1476. package/dist/wallet/__tests__/wallet.router.int.test.d.ts +2 -0
  1477. package/dist/wallet/__tests__/wallet.router.int.test.d.ts.map +1 -0
  1478. package/dist/wallet/__tests__/wallet.router.int.test.js +104 -0
  1479. package/dist/wallet/__tests__/wallet.router.int.test.js.map +1 -0
  1480. package/dist/wallet/__tests__/wallet.service.int.test.d.ts +2 -0
  1481. package/dist/wallet/__tests__/wallet.service.int.test.d.ts.map +1 -0
  1482. package/dist/wallet/__tests__/wallet.service.int.test.js +1483 -0
  1483. package/dist/wallet/__tests__/wallet.service.int.test.js.map +1 -0
  1484. package/dist/wallet/adapters/hmac-payment-webhook-verifier.d.ts +7 -0
  1485. package/dist/wallet/adapters/hmac-payment-webhook-verifier.d.ts.map +1 -0
  1486. package/dist/wallet/adapters/hmac-payment-webhook-verifier.js +30 -0
  1487. package/dist/wallet/adapters/hmac-payment-webhook-verifier.js.map +1 -0
  1488. package/dist/wallet/adapters/wallet-asset-catalog.service.d.ts +14 -0
  1489. package/dist/wallet/adapters/wallet-asset-catalog.service.d.ts.map +1 -0
  1490. package/dist/wallet/adapters/wallet-asset-catalog.service.js +37 -0
  1491. package/dist/wallet/adapters/wallet-asset-catalog.service.js.map +1 -0
  1492. package/dist/wallet/adapters/wallet-reader.service.d.ts +1 -0
  1493. package/dist/wallet/adapters/wallet-reader.service.d.ts.map +1 -1
  1494. package/dist/wallet/adapters/wallet-reader.service.js +18 -1
  1495. package/dist/wallet/adapters/wallet-reader.service.js.map +1 -1
  1496. package/dist/wallet/admin-reporting.d.ts +3 -3
  1497. package/dist/wallet/admin-reporting.d.ts.map +1 -1
  1498. package/dist/wallet/admin-reporting.js +11 -3
  1499. package/dist/wallet/admin-reporting.js.map +1 -1
  1500. package/dist/wallet/contract/index.d.ts +937 -17
  1501. package/dist/wallet/contract/index.d.ts.map +1 -1
  1502. package/dist/wallet/contract/index.js +452 -14
  1503. package/dist/wallet/contract/index.js.map +1 -1
  1504. package/dist/wallet/drizzle/migrations/0002_aromatic_archangel.sql +20 -0
  1505. package/dist/wallet/drizzle/migrations/0003_certain_ogun.sql +2 -0
  1506. package/dist/wallet/drizzle/migrations/0004_reflective_shriek.sql +2 -0
  1507. package/dist/wallet/drizzle/migrations/0005_gigantic_dust.sql +10 -0
  1508. package/dist/wallet/drizzle/migrations/0006_lush_morg.sql +1 -0
  1509. package/dist/wallet/drizzle/migrations/0007_bouncy_swordsman.sql +17 -0
  1510. package/dist/wallet/drizzle/migrations/0008_gorgeous_colonel_america.sql +1 -0
  1511. package/dist/wallet/drizzle/migrations/0009_smooth_sue_storm.sql +17 -0
  1512. package/dist/wallet/drizzle/migrations/0010_worthless_quasimodo.sql +84 -0
  1513. package/dist/wallet/drizzle/migrations/0011_premium_natasha_romanoff.sql +30 -0
  1514. package/dist/wallet/drizzle/migrations/0012_long_wong.sql +15 -0
  1515. package/dist/wallet/drizzle/migrations/0013_polite_peter_parker.sql +1 -0
  1516. package/dist/wallet/drizzle/migrations/0014_abandoned_madripoor.sql +20 -0
  1517. package/dist/wallet/drizzle/migrations/0015_right_oracle.sql +3 -0
  1518. package/dist/wallet/drizzle/migrations/0016_curly_ben_urich.sql +2 -0
  1519. package/dist/wallet/drizzle/migrations/meta/0002_snapshot.json +513 -0
  1520. package/dist/wallet/drizzle/migrations/meta/0003_snapshot.json +567 -0
  1521. package/dist/wallet/drizzle/migrations/meta/0004_snapshot.json +631 -0
  1522. package/dist/wallet/drizzle/migrations/meta/0006_snapshot.json +638 -0
  1523. package/dist/wallet/drizzle/migrations/meta/0007_snapshot.json +723 -0
  1524. package/dist/wallet/drizzle/migrations/meta/0008_snapshot.json +716 -0
  1525. package/dist/wallet/drizzle/migrations/meta/0009_snapshot.json +895 -0
  1526. package/dist/wallet/drizzle/migrations/meta/0010_snapshot.json +1565 -0
  1527. package/dist/wallet/drizzle/migrations/meta/0011_snapshot.json +1777 -0
  1528. package/dist/wallet/drizzle/migrations/meta/0012_snapshot.json +1907 -0
  1529. package/dist/wallet/drizzle/migrations/meta/0013_snapshot.json +1913 -0
  1530. package/dist/wallet/drizzle/migrations/meta/0014_snapshot.json +1925 -0
  1531. package/dist/wallet/drizzle/migrations/meta/0015_snapshot.json +1937 -0
  1532. package/dist/wallet/drizzle/migrations/meta/0016_snapshot.json +1943 -0
  1533. package/dist/wallet/drizzle/migrations/meta/_journal.json +105 -0
  1534. package/dist/wallet/index.d.ts.map +1 -1
  1535. package/dist/wallet/index.js +0 -2
  1536. package/dist/wallet/index.js.map +1 -1
  1537. package/dist/wallet/migrate.d.ts +0 -1
  1538. package/dist/wallet/migrate.d.ts.map +1 -1
  1539. package/dist/wallet/migrate.js +0 -4
  1540. package/dist/wallet/migrate.js.map +1 -1
  1541. package/dist/wallet/plugin.d.ts +138 -1
  1542. package/dist/wallet/plugin.d.ts.map +1 -1
  1543. package/dist/wallet/plugin.js +188 -19
  1544. package/dist/wallet/plugin.js.map +1 -1
  1545. package/dist/wallet/router/index.d.ts +508 -11
  1546. package/dist/wallet/router/index.d.ts.map +1 -1
  1547. package/dist/wallet/router/index.js +228 -22
  1548. package/dist/wallet/router/index.js.map +1 -1
  1549. package/dist/wallet/schema/index.d.ts +2100 -9
  1550. package/dist/wallet/schema/index.d.ts.map +1 -1
  1551. package/dist/wallet/schema/index.js +296 -6
  1552. package/dist/wallet/schema/index.js.map +1 -1
  1553. package/dist/wallet/seed/index.d.ts +3 -0
  1554. package/dist/wallet/seed/index.d.ts.map +1 -0
  1555. package/dist/wallet/seed/index.js +3 -0
  1556. package/dist/wallet/seed/index.js.map +1 -0
  1557. package/dist/wallet/seed/seed-auto-withdrawal-config.d.ts +11 -0
  1558. package/dist/wallet/seed/seed-auto-withdrawal-config.d.ts.map +1 -0
  1559. package/dist/wallet/seed/seed-auto-withdrawal-config.js +16 -0
  1560. package/dist/wallet/seed/seed-auto-withdrawal-config.js.map +1 -0
  1561. package/dist/wallet/seed/seed-bonus-rollover-config.d.ts +3 -0
  1562. package/dist/wallet/seed/seed-bonus-rollover-config.d.ts.map +1 -0
  1563. package/dist/wallet/seed/seed-bonus-rollover-config.js +8 -0
  1564. package/dist/wallet/seed/seed-bonus-rollover-config.js.map +1 -0
  1565. package/dist/wallet/service/custody-sweep.service.d.ts +77 -0
  1566. package/dist/wallet/service/custody-sweep.service.d.ts.map +1 -0
  1567. package/dist/wallet/service/custody-sweep.service.js +388 -0
  1568. package/dist/wallet/service/custody-sweep.service.js.map +1 -0
  1569. package/dist/wallet/service/reconciliation-finding.service.d.ts +39 -0
  1570. package/dist/wallet/service/reconciliation-finding.service.d.ts.map +1 -0
  1571. package/dist/wallet/service/reconciliation-finding.service.js +47 -0
  1572. package/dist/wallet/service/reconciliation-finding.service.js.map +1 -0
  1573. package/dist/wallet/service/reconciliation.service.d.ts +112 -0
  1574. package/dist/wallet/service/reconciliation.service.d.ts.map +1 -0
  1575. package/dist/wallet/service/reconciliation.service.js +533 -0
  1576. package/dist/wallet/service/reconciliation.service.js.map +1 -0
  1577. package/dist/wallet/service/wallet-commands.service.d.ts +10 -2
  1578. package/dist/wallet/service/wallet-commands.service.d.ts.map +1 -1
  1579. package/dist/wallet/service/wallet-commands.service.js +164 -26
  1580. package/dist/wallet/service/wallet-commands.service.js.map +1 -1
  1581. package/dist/wallet/service/wallet.service.d.ts +596 -16
  1582. package/dist/wallet/service/wallet.service.d.ts.map +1 -1
  1583. package/dist/wallet/service/wallet.service.js +1300 -96
  1584. package/dist/wallet/service/wallet.service.js.map +1 -1
  1585. package/generators/src/config.ts +548 -0
  1586. package/generators/src/templates/adapter.hbs +19 -0
  1587. package/generators/src/templates/contract.hbs +19 -0
  1588. package/generators/src/templates/job-worker.hbs +34 -0
  1589. package/generators/src/templates/module/drizzle.config.hbs +22 -0
  1590. package/generators/src/templates/module/index.hbs +5 -0
  1591. package/generators/src/templates/module/migrate.hbs +17 -0
  1592. package/generators/src/templates/module/plugin.hbs +19 -0
  1593. package/generators/src/templates/module/router.hbs +19 -0
  1594. package/generators/src/templates/module/schema.hbs +14 -0
  1595. package/generators/src/templates/module/service.hbs +26 -0
  1596. package/generators/src/templates/plugin.hbs +20 -0
  1597. package/package.json +108 -16
  1598. package/dist/admin-console/__tests__/backoffice.service.test.d.ts +0 -2
  1599. package/dist/admin-console/__tests__/backoffice.service.test.d.ts.map +0 -1
  1600. package/dist/admin-console/__tests__/backoffice.service.test.js +0 -156
  1601. package/dist/admin-console/__tests__/backoffice.service.test.js.map +0 -1
  1602. package/dist/audit/__tests__/audit.service.test.d.ts +0 -2
  1603. package/dist/audit/__tests__/audit.service.test.d.ts.map +0 -1
  1604. package/dist/audit/__tests__/audit.service.test.js +0 -442
  1605. package/dist/audit/__tests__/audit.service.test.js.map +0 -1
  1606. package/dist/casino/gaming/__tests__/gaming.service.test.d.ts +0 -2
  1607. package/dist/casino/gaming/__tests__/gaming.service.test.d.ts.map +0 -1
  1608. package/dist/casino/gaming/__tests__/gaming.service.test.js +0 -55
  1609. package/dist/casino/gaming/__tests__/gaming.service.test.js.map +0 -1
  1610. package/dist/casino/lobby/__tests__/lobby.cache.test.d.ts +0 -2
  1611. package/dist/casino/lobby/__tests__/lobby.cache.test.d.ts.map +0 -1
  1612. package/dist/casino/lobby/__tests__/lobby.cache.test.js +0 -47
  1613. package/dist/casino/lobby/__tests__/lobby.cache.test.js.map +0 -1
  1614. package/dist/casino/lobby/__tests__/lobby.service.test.d.ts +0 -2
  1615. package/dist/casino/lobby/__tests__/lobby.service.test.d.ts.map +0 -1
  1616. package/dist/casino/lobby/__tests__/lobby.service.test.js +0 -11
  1617. package/dist/casino/lobby/__tests__/lobby.service.test.js.map +0 -1
  1618. package/dist/cms/__tests__/cms.cache.test.d.ts +0 -2
  1619. package/dist/cms/__tests__/cms.cache.test.d.ts.map +0 -1
  1620. package/dist/cms/__tests__/cms.cache.test.js +0 -87
  1621. package/dist/cms/__tests__/cms.cache.test.js.map +0 -1
  1622. package/dist/cms/__tests__/cms.router.test.d.ts +0 -2
  1623. package/dist/cms/__tests__/cms.router.test.d.ts.map +0 -1
  1624. package/dist/cms/__tests__/cms.router.test.js +0 -51
  1625. package/dist/cms/__tests__/cms.router.test.js.map +0 -1
  1626. package/dist/cms/__tests__/cms.service.test.d.ts +0 -2
  1627. package/dist/cms/__tests__/cms.service.test.d.ts.map +0 -1
  1628. package/dist/cms/__tests__/cms.service.test.js +0 -17
  1629. package/dist/cms/__tests__/cms.service.test.js.map +0 -1
  1630. package/dist/compliance/__tests__/compliance.service.test.d.ts +0 -2
  1631. package/dist/compliance/__tests__/compliance.service.test.d.ts.map +0 -1
  1632. package/dist/compliance/__tests__/compliance.service.test.js +0 -96
  1633. package/dist/compliance/__tests__/compliance.service.test.js.map +0 -1
  1634. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.test.d.ts +0 -2
  1635. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.test.d.ts.map +0 -1
  1636. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.test.js +0 -21
  1637. package/dist/compliance/__tests__/hmac-kyc-webhook-verifier.test.js.map +0 -1
  1638. package/dist/compliance/__tests__/kyc.service.test.d.ts +0 -2
  1639. package/dist/compliance/__tests__/kyc.service.test.d.ts.map +0 -1
  1640. package/dist/compliance/__tests__/kyc.service.test.js +0 -154
  1641. package/dist/compliance/__tests__/kyc.service.test.js.map +0 -1
  1642. package/dist/compliance/__tests__/rg-monitoring.service.test.d.ts +0 -2
  1643. package/dist/compliance/__tests__/rg-monitoring.service.test.d.ts.map +0 -1
  1644. package/dist/compliance/__tests__/rg-monitoring.service.test.js +0 -110
  1645. package/dist/compliance/__tests__/rg-monitoring.service.test.js.map +0 -1
  1646. package/dist/compliance/__tests__/rg.router.test.d.ts +0 -2
  1647. package/dist/compliance/__tests__/rg.router.test.d.ts.map +0 -1
  1648. package/dist/compliance/__tests__/rg.router.test.js +0 -66
  1649. package/dist/compliance/__tests__/rg.router.test.js.map +0 -1
  1650. package/dist/compliance/__tests__/rg.service.test.d.ts +0 -2
  1651. package/dist/compliance/__tests__/rg.service.test.d.ts.map +0 -1
  1652. package/dist/compliance/__tests__/rg.service.test.js +0 -212
  1653. package/dist/compliance/__tests__/rg.service.test.js.map +0 -1
  1654. package/dist/contracts/schemas/__tests__/identity-schemas.test.d.ts +0 -2
  1655. package/dist/contracts/schemas/__tests__/identity-schemas.test.d.ts.map +0 -1
  1656. package/dist/contracts/schemas/__tests__/identity-schemas.test.js +0 -38
  1657. package/dist/contracts/schemas/__tests__/identity-schemas.test.js.map +0 -1
  1658. package/dist/engagement/chat/__tests__/chat.service.test.d.ts +0 -2
  1659. package/dist/engagement/chat/__tests__/chat.service.test.d.ts.map +0 -1
  1660. package/dist/engagement/chat/__tests__/chat.service.test.js +0 -170
  1661. package/dist/engagement/chat/__tests__/chat.service.test.js.map +0 -1
  1662. package/dist/engagement/chat/react/use-chat-stream.d.ts +0 -26
  1663. package/dist/engagement/chat/react/use-chat-stream.d.ts.map +0 -1
  1664. package/dist/engagement/chat/react/use-chat-stream.js +0 -54
  1665. package/dist/engagement/chat/react/use-chat-stream.js.map +0 -1
  1666. package/dist/engagement/notifications/__tests__/notifications.service.test.d.ts +0 -2
  1667. package/dist/engagement/notifications/__tests__/notifications.service.test.d.ts.map +0 -1
  1668. package/dist/engagement/notifications/__tests__/notifications.service.test.js +0 -84
  1669. package/dist/engagement/notifications/__tests__/notifications.service.test.js.map +0 -1
  1670. package/dist/engagement/react.d.ts +0 -2
  1671. package/dist/engagement/react.d.ts.map +0 -1
  1672. package/dist/engagement/react.js +0 -3
  1673. package/dist/engagement/react.js.map +0 -1
  1674. package/dist/iam/__tests__/iam.service.test.d.ts +0 -2
  1675. package/dist/iam/__tests__/iam.service.test.d.ts.map +0 -1
  1676. package/dist/iam/__tests__/iam.service.test.js +0 -744
  1677. package/dist/iam/__tests__/iam.service.test.js.map +0 -1
  1678. package/dist/pam/identity/__tests__/admin-user-directory.test.d.ts +0 -2
  1679. package/dist/pam/identity/__tests__/admin-user-directory.test.d.ts.map +0 -1
  1680. package/dist/pam/identity/__tests__/admin-user-directory.test.js +0 -93
  1681. package/dist/pam/identity/__tests__/admin-user-directory.test.js.map +0 -1
  1682. package/dist/pam/identity/__tests__/identity.rate-limit.test.d.ts +0 -2
  1683. package/dist/pam/identity/__tests__/identity.rate-limit.test.d.ts.map +0 -1
  1684. package/dist/pam/identity/__tests__/identity.rate-limit.test.js +0 -127
  1685. package/dist/pam/identity/__tests__/identity.rate-limit.test.js.map +0 -1
  1686. package/dist/pam/identity/__tests__/identity.service.test.d.ts +0 -2
  1687. package/dist/pam/identity/__tests__/identity.service.test.d.ts.map +0 -1
  1688. package/dist/pam/identity/__tests__/identity.service.test.js +0 -292
  1689. package/dist/pam/identity/__tests__/identity.service.test.js.map +0 -1
  1690. package/dist/pam/identity/__tests__/login-enforcement.service.test.d.ts +0 -2
  1691. package/dist/pam/identity/__tests__/login-enforcement.service.test.d.ts.map +0 -1
  1692. package/dist/pam/identity/__tests__/login-enforcement.service.test.js +0 -41
  1693. package/dist/pam/identity/__tests__/login-enforcement.service.test.js.map +0 -1
  1694. package/dist/pam/player-management/__tests__/kyc-status-writer.test.d.ts +0 -2
  1695. package/dist/pam/player-management/__tests__/kyc-status-writer.test.d.ts.map +0 -1
  1696. package/dist/pam/player-management/__tests__/kyc-status-writer.test.js +0 -38
  1697. package/dist/pam/player-management/__tests__/kyc-status-writer.test.js.map +0 -1
  1698. package/dist/pam/player-management/__tests__/player.router.test.d.ts +0 -2
  1699. package/dist/pam/player-management/__tests__/player.router.test.d.ts.map +0 -1
  1700. package/dist/pam/player-management/__tests__/player.router.test.js +0 -57
  1701. package/dist/pam/player-management/__tests__/player.router.test.js.map +0 -1
  1702. package/dist/pam/player-management/__tests__/player.service.test.d.ts +0 -2
  1703. package/dist/pam/player-management/__tests__/player.service.test.d.ts.map +0 -1
  1704. package/dist/pam/player-management/__tests__/player.service.test.js +0 -144
  1705. package/dist/pam/player-management/__tests__/player.service.test.js.map +0 -1
  1706. package/dist/pam/profile/__tests__/profile.service.test.d.ts +0 -2
  1707. package/dist/pam/profile/__tests__/profile.service.test.d.ts.map +0 -1
  1708. package/dist/pam/profile/__tests__/profile.service.test.js +0 -48
  1709. package/dist/pam/profile/__tests__/profile.service.test.js.map +0 -1
  1710. package/dist/pam/tag/__tests__/get-active-tag-keys.test.d.ts +0 -2
  1711. package/dist/pam/tag/__tests__/get-active-tag-keys.test.d.ts.map +0 -1
  1712. package/dist/pam/tag/__tests__/get-active-tag-keys.test.js +0 -38
  1713. package/dist/pam/tag/__tests__/get-active-tag-keys.test.js.map +0 -1
  1714. package/dist/pam/tag/__tests__/tag-evaluation.service.test.d.ts +0 -2
  1715. package/dist/pam/tag/__tests__/tag-evaluation.service.test.d.ts.map +0 -1
  1716. package/dist/pam/tag/__tests__/tag-evaluation.service.test.js +0 -269
  1717. package/dist/pam/tag/__tests__/tag-evaluation.service.test.js.map +0 -1
  1718. package/dist/pam/tag/__tests__/tag-rule.service.test.d.ts +0 -2
  1719. package/dist/pam/tag/__tests__/tag-rule.service.test.d.ts.map +0 -1
  1720. package/dist/pam/tag/__tests__/tag-rule.service.test.js +0 -149
  1721. package/dist/pam/tag/__tests__/tag-rule.service.test.js.map +0 -1
  1722. package/dist/pam/tag/__tests__/tag.router.test.d.ts +0 -2
  1723. package/dist/pam/tag/__tests__/tag.router.test.d.ts.map +0 -1
  1724. package/dist/pam/tag/__tests__/tag.router.test.js +0 -38
  1725. package/dist/pam/tag/__tests__/tag.router.test.js.map +0 -1
  1726. package/dist/pam/tag/__tests__/tag.service.test.d.ts +0 -2
  1727. package/dist/pam/tag/__tests__/tag.service.test.d.ts.map +0 -1
  1728. package/dist/pam/tag/__tests__/tag.service.test.js +0 -262
  1729. package/dist/pam/tag/__tests__/tag.service.test.js.map +0 -1
  1730. package/dist/server/auth/__tests__/admin-guard.test.d.ts +0 -2
  1731. package/dist/server/auth/__tests__/admin-guard.test.d.ts.map +0 -1
  1732. package/dist/server/auth/__tests__/admin-guard.test.js +0 -133
  1733. package/dist/server/auth/__tests__/admin-guard.test.js.map +0 -1
  1734. package/dist/server/auth/__tests__/session-resolver.test.d.ts +0 -2
  1735. package/dist/server/auth/__tests__/session-resolver.test.d.ts.map +0 -1
  1736. package/dist/server/auth/__tests__/session-resolver.test.js +0 -27
  1737. package/dist/server/auth/__tests__/session-resolver.test.js.map +0 -1
  1738. package/dist/server/db/outbox/__tests__/relay.test.d.ts +0 -2
  1739. package/dist/server/db/outbox/__tests__/relay.test.d.ts.map +0 -1
  1740. package/dist/server/db/outbox/__tests__/relay.test.js +0 -124
  1741. package/dist/server/db/outbox/__tests__/relay.test.js.map +0 -1
  1742. package/dist/server/kernel/__tests__/bullmq-job-queue.test.d.ts +0 -2
  1743. package/dist/server/kernel/__tests__/bullmq-job-queue.test.d.ts.map +0 -1
  1744. package/dist/server/kernel/__tests__/bullmq-job-queue.test.js +0 -190
  1745. package/dist/server/kernel/__tests__/bullmq-job-queue.test.js.map +0 -1
  1746. package/dist/server/kernel/__tests__/cache.test.d.ts +0 -2
  1747. package/dist/server/kernel/__tests__/cache.test.d.ts.map +0 -1
  1748. package/dist/server/kernel/__tests__/cache.test.js +0 -84
  1749. package/dist/server/kernel/__tests__/cache.test.js.map +0 -1
  1750. package/dist/server/kernel/__tests__/event-bus.test.d.ts +0 -2
  1751. package/dist/server/kernel/__tests__/event-bus.test.d.ts.map +0 -1
  1752. package/dist/server/kernel/__tests__/event-bus.test.js +0 -116
  1753. package/dist/server/kernel/__tests__/event-bus.test.js.map +0 -1
  1754. package/dist/server/kernel/__tests__/job-queue.test.d.ts +0 -2
  1755. package/dist/server/kernel/__tests__/job-queue.test.d.ts.map +0 -1
  1756. package/dist/server/kernel/__tests__/job-queue.test.js +0 -135
  1757. package/dist/server/kernel/__tests__/job-queue.test.js.map +0 -1
  1758. package/dist/server/kernel/__tests__/rate-limiter.test.d.ts +0 -2
  1759. package/dist/server/kernel/__tests__/rate-limiter.test.d.ts.map +0 -1
  1760. package/dist/server/kernel/__tests__/rate-limiter.test.js +0 -74
  1761. package/dist/server/kernel/__tests__/rate-limiter.test.js.map +0 -1
  1762. package/dist/server/kernel/__tests__/realtime-authorizer.test.d.ts +0 -2
  1763. package/dist/server/kernel/__tests__/realtime-authorizer.test.d.ts.map +0 -1
  1764. package/dist/server/kernel/__tests__/realtime-authorizer.test.js +0 -19
  1765. package/dist/server/kernel/__tests__/realtime-authorizer.test.js.map +0 -1
  1766. package/dist/server/kernel/__tests__/redis-cache.test.d.ts +0 -2
  1767. package/dist/server/kernel/__tests__/redis-cache.test.d.ts.map +0 -1
  1768. package/dist/server/kernel/__tests__/redis-cache.test.js +0 -49
  1769. package/dist/server/kernel/__tests__/redis-cache.test.js.map +0 -1
  1770. package/dist/server/kernel/__tests__/redis-rate-limiter.test.d.ts +0 -2
  1771. package/dist/server/kernel/__tests__/redis-rate-limiter.test.d.ts.map +0 -1
  1772. package/dist/server/kernel/__tests__/redis-rate-limiter.test.js +0 -56
  1773. package/dist/server/kernel/__tests__/redis-rate-limiter.test.js.map +0 -1
  1774. package/dist/server/kernel/job-queue.d.ts +0 -40
  1775. package/dist/server/kernel/job-queue.d.ts.map +0 -1
  1776. package/dist/server/kernel/job-queue.js +0 -200
  1777. package/dist/server/kernel/job-queue.js.map +0 -1
  1778. package/dist/server/runtime/openapi.d.ts +0 -15
  1779. package/dist/server/runtime/openapi.d.ts.map +0 -1
  1780. package/dist/server/runtime/openapi.js +0 -26
  1781. package/dist/server/runtime/openapi.js.map +0 -1
  1782. package/dist/wallet/__tests__/admin-reporting.test.d.ts +0 -2
  1783. package/dist/wallet/__tests__/admin-reporting.test.d.ts.map +0 -1
  1784. package/dist/wallet/__tests__/admin-reporting.test.js +0 -124
  1785. package/dist/wallet/__tests__/admin-reporting.test.js.map +0 -1
  1786. package/dist/wallet/__tests__/wallet-auto-rule.router.test.d.ts +0 -2
  1787. package/dist/wallet/__tests__/wallet-auto-rule.router.test.d.ts.map +0 -1
  1788. package/dist/wallet/__tests__/wallet-auto-rule.router.test.js +0 -98
  1789. package/dist/wallet/__tests__/wallet-auto-rule.router.test.js.map +0 -1
  1790. package/dist/wallet/__tests__/wallet-auto-withdrawal.test.d.ts +0 -2
  1791. package/dist/wallet/__tests__/wallet-auto-withdrawal.test.d.ts.map +0 -1
  1792. package/dist/wallet/__tests__/wallet-auto-withdrawal.test.js +0 -419
  1793. package/dist/wallet/__tests__/wallet-auto-withdrawal.test.js.map +0 -1
  1794. package/dist/wallet/__tests__/wallet-commands.service.test.d.ts +0 -2
  1795. package/dist/wallet/__tests__/wallet-commands.service.test.d.ts.map +0 -1
  1796. package/dist/wallet/__tests__/wallet-commands.service.test.js +0 -176
  1797. package/dist/wallet/__tests__/wallet-commands.service.test.js.map +0 -1
  1798. package/dist/wallet/__tests__/wallet-kyc-gate.test.d.ts +0 -2
  1799. package/dist/wallet/__tests__/wallet-kyc-gate.test.d.ts.map +0 -1
  1800. package/dist/wallet/__tests__/wallet-kyc-gate.test.js +0 -61
  1801. package/dist/wallet/__tests__/wallet-kyc-gate.test.js.map +0 -1
  1802. package/dist/wallet/__tests__/wallet.rate-limit.test.d.ts +0 -2
  1803. package/dist/wallet/__tests__/wallet.rate-limit.test.d.ts.map +0 -1
  1804. package/dist/wallet/__tests__/wallet.rate-limit.test.js +0 -34
  1805. package/dist/wallet/__tests__/wallet.rate-limit.test.js.map +0 -1
  1806. package/dist/wallet/__tests__/wallet.router.test.d.ts +0 -2
  1807. package/dist/wallet/__tests__/wallet.router.test.d.ts.map +0 -1
  1808. package/dist/wallet/__tests__/wallet.router.test.js +0 -43
  1809. package/dist/wallet/__tests__/wallet.router.test.js.map +0 -1
  1810. package/dist/wallet/__tests__/wallet.service.test.d.ts +0 -2
  1811. package/dist/wallet/__tests__/wallet.service.test.d.ts.map +0 -1
  1812. package/dist/wallet/__tests__/wallet.service.test.js +0 -726
  1813. package/dist/wallet/__tests__/wallet.service.test.js.map +0 -1
  1814. package/turbo-generators/src/config.ts +0 -478
  1815. package/turbo-generators/src/templates/adapter.hbs +0 -19
  1816. package/turbo-generators/src/templates/contract.hbs +0 -18
  1817. package/turbo-generators/src/templates/job-worker.hbs +0 -34
  1818. package/turbo-generators/src/templates/module/agents.hbs +0 -67
  1819. package/turbo-generators/src/templates/module/drizzle.config.hbs +0 -22
  1820. package/turbo-generators/src/templates/module/index.hbs +0 -5
  1821. package/turbo-generators/src/templates/module/migrate.hbs +0 -15
  1822. package/turbo-generators/src/templates/module/package.json.hbs +0 -62
  1823. package/turbo-generators/src/templates/module/plugin.hbs +0 -20
  1824. package/turbo-generators/src/templates/module/router.hbs +0 -19
  1825. package/turbo-generators/src/templates/module/schema.hbs +0 -21
  1826. package/turbo-generators/src/templates/module/service.hbs +0 -26
  1827. package/turbo-generators/src/templates/module/tsconfig.json.hbs +0 -8
  1828. package/turbo-generators/src/templates/plugin.hbs +0 -20
  1829. /package/{turbo-generators → generators}/src/templates/adr.hbs +0 -0
  1830. /package/{turbo-generators → generators}/src/templates/config.hbs +0 -0
@@ -1,9 +1,13 @@
1
1
  import { ORPCError } from '@orpc/server';
2
- import { createAuth, assertRateLimit, findOneOrThrow, makeNotFoundError, } from '@openora/core/server';
2
+ import { createAuth, assertRateLimit, extractClientMeta, getCurrentClientMeta, findOneOrThrow, makeConflictError, makeNotFoundError, createLogger, } from '@openora/core/server';
3
3
  import { parseCookies } from 'better-auth/cookies';
4
- import { eq, sql } from 'drizzle-orm';
4
+ import { and, eq, isNull, sql } from 'drizzle-orm';
5
+ import * as z from 'zod';
5
6
  import { user, session, account, verification, twoFactor } from '../schema/index.js';
7
+ import { RATE_LIMIT_KEYS, makeRateLimitKey } from '@openora/core/contracts';
6
8
  import { assertSupportedLanguage } from '../../shared/language.js';
9
+ import { assertAccountNotBlocked } from './rg-guard.service.js';
10
+ import { DEFAULT_LOCKOUT_DURATION_MS, DEFAULT_MAX_LOGIN_ATTEMPTS, computeLockoutTier, createAccountLockedError, hasFailedLoginWindowExpired, makeLoginSecurityState, } from './lockout-policy.service.js';
7
11
  function nodeHeadersToHeaders(nodeHeaders) {
8
12
  const headers = new Headers();
9
13
  for (const [key, value] of Object.entries(nodeHeaders)) {
@@ -14,15 +18,6 @@ function nodeHeadersToHeaders(nodeHeaders) {
14
18
  }
15
19
  return headers;
16
20
  }
17
- export function createAccountLockedError(lockoutUntil) {
18
- return new ORPCError('UNAUTHORIZED', {
19
- message: 'Account is temporarily locked. Please try again later.',
20
- data: {
21
- code: 'ACCOUNT_LOCKED',
22
- lockoutUntil: lockoutUntil.toISOString(),
23
- },
24
- });
25
- }
26
21
  function toIso(value) {
27
22
  return value instanceof Date ? value.toISOString() : value;
28
23
  }
@@ -31,6 +26,7 @@ function toUser(u) {
31
26
  id: u.id,
32
27
  email: u.email,
33
28
  name: u.name,
29
+ username: u.username,
34
30
  emailVerified: u.emailVerified,
35
31
  theme: u.theme ?? 'system',
36
32
  language: u.language ?? 'en',
@@ -39,14 +35,8 @@ function toUser(u) {
39
35
  };
40
36
  return u.image !== undefined ? { ...base, image: u.image } : base;
41
37
  }
42
- function forwardCookies(authResponse, resHeaders) {
43
- const cookies = authResponse.headers.getSetCookie?.() ?? [];
44
- for (const cookie of cookies) {
45
- resHeaders.append('set-cookie', cookie);
46
- }
47
- }
48
- function clientIp(headers) {
49
- return headers.get('x-forwarded-for')?.split(',')[0]?.trim() || headers.get('x-real-ip') || null;
38
+ function makeLoginRateLimitKey(email) {
39
+ return `login:${email.toLowerCase()}`;
50
40
  }
51
41
  // Key on the `.two_factor` cookie VALUE, never the raw Cookie header: an attacker can
52
42
  // otherwise churn the rate-limit key each retry by appending unrelated cookie pairs.
@@ -64,29 +54,50 @@ function twoFactorPendingCookieValue(headers) {
64
54
  }
65
55
  const SUCCESS = { success: true };
66
56
  export const UserNotFoundError = makeNotFoundError('User');
57
+ export const UsernameConflictError = makeConflictError('Username', 'Username is already in use');
58
+ const BetterAuthErrorBodySchema = z.object({
59
+ message: z.string().optional(),
60
+ code: z.string().optional(),
61
+ });
67
62
  // better-auth calls use `asResponse: true`, which returns an error *Response*
68
63
  // (4xx/5xx) rather than throwing. Surface those as ORPCErrors so oRPC maps them
69
64
  // to the right HTTP status instead of the handler silently returning success.
70
65
  // Only reads the body on failure, so a subsequent res.json() on success is safe.
71
- async function ensureOk(res) {
66
+ // 401 -> UNAUTHORIZED (bad credentials), 403 -> FORBIDDEN (better-auth's
67
+ // TOO_MANY_ATTEMPTS on checkVerificationOTP/resetPasswordEmailOTP), else BAD_REQUEST.
68
+ // `opts.genericMessage` lets a BAD_REQUEST *or* FORBIDDEN caller opt into a fixed
69
+ // message instead of better-auth's raw one - some better-auth 400s (eg
70
+ // checkVerificationOTP's USER_NOT_FOUND-before-INVALID_OTP ordering) leak account
71
+ // existence otherwise. When genericMessage is set, a 403 is masked down to
72
+ // BAD_REQUEST too, so a caller can't tell "too many attempts" apart from "wrong code".
73
+ async function ensureOk(res, opts) {
72
74
  if (res.ok) {
73
75
  return;
74
76
  }
77
+ const code = res.status === 401 ? 'UNAUTHORIZED' : res.status === 403 ? 'FORBIDDEN' : 'BAD_REQUEST';
78
+ if ((code === 'BAD_REQUEST' || code === 'FORBIDDEN') && opts?.genericMessage) {
79
+ throw new ORPCError(code === 'FORBIDDEN' ? 'BAD_REQUEST' : code, {
80
+ message: opts.genericMessage,
81
+ });
82
+ }
75
83
  let message = `Request failed (${res.status})`;
76
- try {
77
- const parsed = JSON.parse(await res.text());
78
- if (parsed.message) {
79
- message = parsed.message;
84
+ let betterAuthCode;
85
+ const body = BetterAuthErrorBodySchema.safeParse(await res.json().catch(() => null));
86
+ if (body.success) {
87
+ if (body.data.message) {
88
+ message = body.data.message;
89
+ }
90
+ if (body.data.code) {
91
+ betterAuthCode = body.data.code;
80
92
  }
81
93
  }
82
- catch {
83
- // non-JSON body - keep the default message
84
- }
85
- throw new ORPCError(res.status === 401 ? 'UNAUTHORIZED' : 'BAD_REQUEST', { message });
94
+ throw new ORPCError(code, {
95
+ message,
96
+ ...(betterAuthCode ? { data: { code: betterAuthCode } } : {}),
97
+ });
86
98
  }
87
- const DEFAULT_MAX_LOGIN_ATTEMPTS = 5;
88
- const DEFAULT_LOCKOUT_DURATION_MS = 15 * 60 * 1000;
89
99
  const MINUTE_MS = 60 * 1000;
100
+ export const SESSION_DURATION_IN_SECONDS = 30 * 24 * 60 * 60; // 30 days
90
101
  // Coarse abuse throttles keyed by the caller identifier the context provides (email/
91
102
  // token/session), NOT IP. The lockout above is a per-account credential-failure
92
103
  // counter; these bound raw request volume on each brute-force surface. An overlay
@@ -96,29 +107,54 @@ const MINUTE_MS = 60 * 1000;
96
107
  // throttles (register/resend/etc.) keep the default fail-open.
97
108
  const LOGIN_RATE_LIMIT = { limit: 10, windowMs: 5 * MINUTE_MS, onUnavailable: 'deny' };
98
109
  const REGISTER_RATE_LIMIT = { limit: 5, windowMs: 15 * MINUTE_MS };
110
+ // Keyed on the caller, not the handle: the abuse shape here is enumerating many
111
+ // usernames from one client, not probing one username repeatedly.
112
+ const USERNAME_AVAILABILITY_RATE_LIMIT = { limit: 30, windowMs: MINUTE_MS };
99
113
  const PASSWORD_RESET_REQUEST_RATE_LIMIT = { limit: 3, windowMs: 15 * MINUTE_MS };
100
114
  const PASSWORD_RESET_RATE_LIMIT = {
101
115
  limit: 5,
102
116
  windowMs: 15 * MINUTE_MS,
103
117
  onUnavailable: 'deny',
104
118
  };
119
+ const PASSWORD_RESET_VERIFY_RATE_LIMIT = {
120
+ limit: 5,
121
+ windowMs: 5 * MINUTE_MS,
122
+ onUnavailable: 'deny',
123
+ };
105
124
  const VERIFY_2FA_RATE_LIMIT = { limit: 5, windowMs: 5 * MINUTE_MS, onUnavailable: 'deny' };
106
- const EMAIL_VERIFICATION_RATE_LIMIT = { limit: 3, windowMs: 15 * MINUTE_MS };
107
- const VERIFY_EMAIL_RATE_LIMIT = { limit: 5, windowMs: 15 * MINUTE_MS };
125
+ // Fails closed with the verify budget below: better-auth issues a fresh code (and a fresh
126
+ // 3-attempt counter) per resend, so an unbounded resend loop is an unbounded guess budget.
127
+ const EMAIL_VERIFICATION_RATE_LIMIT = {
128
+ limit: 3,
129
+ windowMs: 15 * MINUTE_MS,
130
+ onUnavailable: 'deny',
131
+ };
132
+ // Fails closed like the other secret-guessing budgets: the emailed code is six digits,
133
+ // so an unthrottled window is a brute-force window, not a degraded-UX window.
134
+ const VERIFY_EMAIL_RATE_LIMIT = {
135
+ limit: 5,
136
+ windowMs: 15 * MINUTE_MS,
137
+ onUnavailable: 'deny',
138
+ };
108
139
  const CHANGE_PASSWORD_RATE_LIMIT = { limit: 5, windowMs: 15 * MINUTE_MS };
109
140
  const TWO_FACTOR_PASSWORD_RATE_LIMIT = { limit: 5, windowMs: 5 * MINUTE_MS };
110
- // Mirrors better-auth session.expiresIn (server/auth/auth.ts); used only as a fallback
111
- // when the sign-in response omits an explicit session expiry.
112
- const SESSION_TTL_MS = 30 * 24 * 60 * 60 * 1000;
141
+ const FAKE_LOGIN_SHADOW_TTL_MS = 7 * 24 * 60 * 60 * 1000;
142
+ function loginShadowKey(email) {
143
+ return `login-shadow:${email}`;
144
+ }
145
+ const loginShadowLogger = createLogger('login-shadow');
146
+ const identityLogger = createLogger('identity');
147
+ function hasErrorCode(error, code) {
148
+ if (typeof error !== 'object' || error === null || !('data' in error)) {
149
+ return false;
150
+ }
151
+ const data = error.data;
152
+ return typeof data === 'object' && data !== null && 'code' in data && data.code === code;
153
+ }
113
154
  function computeLockoutState({ attempts, maxAttempts, durationMs, nowMs, }) {
114
155
  const isLocking = attempts >= maxAttempts;
115
156
  return { isLocking, lockoutUntil: isLocking ? new Date(nowMs + durationMs) : null };
116
157
  }
117
- // A finite rgBlockedUntil in the past = a lapsed cooling-off; a null one = indefinite
118
- // (self-exclusion / permanent). Blocked only while set and not elapsed.
119
- function isRgBlocked(u) {
120
- return u.rgBlocked && (u.rgBlockedUntil === null || u.rgBlockedUntil > new Date());
121
- }
122
158
  /**
123
159
  * Thin wrapper over the shared better-auth instance (register/login/2FA/
124
160
  * password/email flows) that layers on platform-specific policy better-auth
@@ -132,44 +168,261 @@ export class IdentityService {
132
168
  auth;
133
169
  drizzle;
134
170
  events;
171
+ identityReader;
135
172
  email;
173
+ templateRenderer;
136
174
  options;
137
175
  limiter;
138
176
  platformConfig;
139
- constructor({ drizzle, events, email, options, limiter, platformConfig }) {
177
+ playerProvisioning;
178
+ geoCheck;
179
+ cache;
180
+ // Addresses whose reset code is being sent because a sign-up hit an existing account.
181
+ // Held only for the duration of that send: `requestPasswordResetEmailOTP` drives
182
+ // `sendVerificationOTP` -> `render` inside the same await, so the flag is read before
183
+ // the `finally` clears it. Not cache-backed - it never has to outlive the call or
184
+ // cross a process.
185
+ existingAccountSignUps = new Set();
186
+ constructor({ drizzle, events, identityReader, email, templateRenderer, options, limiter, platformConfig, geoCheck, playerProvisioning, cache, }) {
140
187
  this.drizzle = drizzle;
141
188
  this.events = events;
189
+ this.identityReader = identityReader;
142
190
  this.email = email;
191
+ this.templateRenderer = templateRenderer;
143
192
  this.options = options;
144
193
  this.limiter = limiter;
145
194
  this.platformConfig = platformConfig;
195
+ this.geoCheck = geoCheck;
196
+ this.playerProvisioning = playerProvisioning;
197
+ this.cache = cache;
146
198
  this.auth = createAuth({
147
199
  db: drizzle.db,
148
200
  schema: { user, session, account, verification, twoFactor },
149
201
  ...(email ? { sendEmail: (args) => email.send(args) } : {}),
202
+ templateRenderer: this.templateRenderer,
203
+ getUserLanguage: (lookupEmail) => this.resolveUserLanguage(lookupEmail),
204
+ requireEmailVerification: this.platformConfig?.registration?.requireEmailVerification ?? false,
205
+ isExistingAccountSignUp: (lookupEmail) => this.existingAccountSignUps.has(lookupEmail.toLowerCase()),
206
+ onExistingUserSignUp: async (existing) => {
207
+ const key = existing.email.toLowerCase();
208
+ this.existingAccountSignUps.add(key);
209
+ try {
210
+ const response = await this.api.requestPasswordResetEmailOTP({
211
+ body: { email: existing.email },
212
+ headers: new Headers(),
213
+ asResponse: true,
214
+ });
215
+ await ensureOk(response);
216
+ }
217
+ finally {
218
+ this.existingAccountSignUps.delete(key);
219
+ }
220
+ },
221
+ onPasswordReset: async (resetUser) => {
222
+ this.events.emit('identity.password.reset', {
223
+ userId: resetUser.id,
224
+ playerId: await this.identityReader.getPlayerIdByUserIdSafe(resetUser.id),
225
+ ...getCurrentClientMeta(),
226
+ });
227
+ await this.clearLockout(resetUser.id);
228
+ },
150
229
  });
151
230
  }
231
+ async findUserByEmail(email) {
232
+ const [row] = await this.drizzle.db
233
+ .select({ id: user.id, language: user.language })
234
+ .from(user)
235
+ .where(eq(user.email, email.toLowerCase()))
236
+ .limit(1);
237
+ return row;
238
+ }
239
+ // Used by the emailOTP plugin's sendVerificationOTP hook to pick a locale for the
240
+ // reset-password email - better-auth only gives us the target email, not a session.
241
+ async resolveUserLanguage(email) {
242
+ const row = await this.findUserByEmail(email);
243
+ return row?.language ?? null;
244
+ }
152
245
  get api() {
153
246
  // Library boundary: the admin/organization plugin endpoints aren't on better-auth's
154
247
  // base `api` type. Sanctioned cast, see conventions.
155
248
  return this.auth.api;
156
249
  }
250
+ forwardCookies(authResponse, resHeaders) {
251
+ const cookies = authResponse.headers.getSetCookie?.() ?? [];
252
+ for (const cookie of cookies) {
253
+ resHeaders.append('set-cookie', cookie);
254
+ }
255
+ }
157
256
  async currentUserId(headers) {
158
257
  const session = await this.auth.api.getSession({ headers });
159
258
  return session?.user?.id ?? null;
160
259
  }
161
- async register(input, reqHeaders, resHeaders) {
162
- await assertRateLimit(this.limiter, `register:${input.email.toLowerCase()}`, REGISTER_RATE_LIMIT);
260
+ // Same gate as password login and phone login, from the one shared implementation.
261
+ assertAccountNotBlocked(account, meta) {
262
+ return assertAccountNotBlocked({ drizzle: this.drizzle, events: this.events }, account, meta, {
263
+ revokeSessions: true,
264
+ errorData: { rgBlocked: { code: 'RG_BLOCKED' }, suspended: { code: 'ACCOUNT_SUSPENDED' } },
265
+ });
266
+ }
267
+ /**
268
+ * Emitted on every registration attempt that produced no account. The audit trail is
269
+ * the one place that records what actually happened - the HTTP response deliberately
270
+ * does not, because a truthful answer on a known address is an enumeration oracle.
271
+ */
272
+ emitRegistrationFailed(reason, input, { ip, userAgent }) {
273
+ this.events.emit('identity.user.registration.failed', {
274
+ email: input.email,
275
+ username: input.username,
276
+ reason,
277
+ ip,
278
+ userAgent,
279
+ });
280
+ }
281
+ async register(input, reqHeaders) {
282
+ // Read before the config guard: a rejected attempt is audited too, and an audit row
283
+ // with no origin is barely a record.
284
+ const { ip, userAgent } = extractClientMeta(reqHeaders);
285
+ const meta = { ip, userAgent };
286
+ const registration = this.platformConfig?.registration;
287
+ const provisioning = this.playerProvisioning;
288
+ if (!registration || !provisioning) {
289
+ this.emitRegistrationFailed('registration_disabled', input, meta);
290
+ throw new ORPCError('FORBIDDEN', { message: 'Registration is unavailable' });
291
+ }
292
+ // `assertRateLimit` throws and is shared by a dozen call sites, so the emit wraps it
293
+ // here rather than moving into it.
294
+ try {
295
+ await assertRateLimit(this.limiter, `register:${input.email.toLowerCase()}`, REGISTER_RATE_LIMIT);
296
+ await assertRateLimit(this.limiter, `register-ip:${ip ?? 'unknown'}`, REGISTER_RATE_LIMIT);
297
+ }
298
+ catch (err) {
299
+ this.emitRegistrationFailed('rate_limited', input, meta);
300
+ throw err;
301
+ }
302
+ if (this.geoCheck && !(await this.geoCheck.checkRegistration(ip)).allowed) {
303
+ this.emitRegistrationFailed('geo_blocked', input, meta);
304
+ throw new ORPCError('FORBIDDEN', { message: 'Registration is unavailable' });
305
+ }
163
306
  const headers = nodeHeadersToHeaders(reqHeaders);
164
- const authResponse = await this.auth.api.signUpEmail({
165
- body: { email: input.email, password: input.password, name: input.name },
307
+ const authResponse = await this.api.signUpEmail({
308
+ body: {
309
+ email: input.email,
310
+ password: input.password,
311
+ name: input.username,
312
+ username: input.username,
313
+ },
166
314
  headers,
167
315
  asResponse: true,
168
316
  });
169
- forwardCookies(authResponse, resHeaders);
317
+ if (!authResponse.ok) {
318
+ // The `lower(username)` unique index is the only arbiter - a pre-flight check
319
+ // could not close the race anyway, so the taken handle is read off the failure.
320
+ if (await this.findUserIdByUsername(input.username)) {
321
+ this.emitRegistrationFailed('username_taken', input, meta);
322
+ throw new UsernameConflictError();
323
+ }
324
+ // `ensureOk` always throws on a non-ok response, so emitting first needs no catch.
325
+ this.emitRegistrationFailed('error', input, meta);
326
+ await ensureOk(authResponse, { genericMessage: 'Registration is unavailable' });
327
+ }
170
328
  const body = (await authResponse.json());
171
- this.events.emit('identity.user.registered', { userId: body.user.id });
172
- return { user: toUser(body.user) };
329
+ // A known address gets an indistinguishable success response (and a reset mail)
330
+ // rather than a new account, so only a genuinely new user is provisioned.
331
+ if ((await this.findUserIdByEmail(input.email)) !== body.user.id) {
332
+ // The known-address branch: no account was created, so the attempt failed even
333
+ // though the caller is told it succeeded. Only the audit trail says so.
334
+ this.emitRegistrationFailed('email_already_registered', input, meta);
335
+ return { status: 'check-email' };
336
+ }
337
+ let consent;
338
+ try {
339
+ consent = await this.recordRegistrationConsent(provisioning, body.user.id, registration.termsVersion, { ip, userAgent });
340
+ }
341
+ catch (err) {
342
+ this.emitRegistrationFailed('error', input, meta);
343
+ throw err;
344
+ }
345
+ const { playerId, consentStored } = consent;
346
+ this.events.emit('identity.user.registered', {
347
+ userId: body.user.id,
348
+ playerId: playerId ?? (await this.identityReader.getPlayerIdByUserIdSafe(body.user.id)),
349
+ // Only claimed when the consent row was actually written - a discarded capture
350
+ // must not leave an audit trail implying evidence that does not exist.
351
+ ...(consentStored
352
+ ? {
353
+ termsVersion: registration.termsVersion,
354
+ acceptedTerms: input.acceptedTerms,
355
+ acceptedAge: input.acceptedAge,
356
+ }
357
+ : {}),
358
+ ip,
359
+ userAgent,
360
+ });
361
+ // Sent here rather than by better-auth's sendOnSignUp hook: that hook also fires on
362
+ // the synthetic duplicate-email response, mailing a live code to an address whose
363
+ // owner never asked for it - and `verifyEmail` signs that code's bearer in.
364
+ // A mail failure is logged, never surfaced: the account exists either way and the
365
+ // player can ask for a new code, so failing the call here would only mislead them.
366
+ const otpResponse = await this.api.sendVerificationOTP({
367
+ body: { email: input.email, type: 'email-verification' },
368
+ headers,
369
+ asResponse: true,
370
+ });
371
+ if (!otpResponse.ok) {
372
+ identityLogger.error({ userId: body.user.id, status: otpResponse.status }, 'verification code could not be sent - player must request a new one');
373
+ }
374
+ return { status: 'check-email' };
375
+ }
376
+ async findUserIdByUsername(username) {
377
+ const [row] = await this.drizzle.db
378
+ .select({ id: user.id })
379
+ .from(user)
380
+ .where(eq(sql `lower(${user.username})`, username.toLowerCase()))
381
+ .limit(1);
382
+ return row?.id ?? null;
383
+ }
384
+ async findUserIdByEmail(email) {
385
+ const [row] = await this.drizzle.db
386
+ .select({ id: user.id })
387
+ .from(user)
388
+ .where(eq(user.email, email.toLowerCase()))
389
+ .limit(1);
390
+ return row?.id ?? null;
391
+ }
392
+ /**
393
+ * Better Auth commits the user inside its own transaction before returning, so a
394
+ * failure here would otherwise leave an account with no consent record. The user is
395
+ * deleted instead (sessions and accounts cascade), making registration all-or-nothing.
396
+ */
397
+ async recordRegistrationConsent(provisioning, userId, termsVersion, { ip, userAgent }) {
398
+ const now = new Date();
399
+ let outcome;
400
+ try {
401
+ outcome = await provisioning.createForRegistration({
402
+ userId,
403
+ termsVersion,
404
+ termsAcceptedAt: now,
405
+ ageAcceptedAt: now,
406
+ registrationIp: ip,
407
+ registrationUserAgent: userAgent,
408
+ });
409
+ }
410
+ catch (err) {
411
+ identityLogger.error({ err, userId }, 'registration consent write failed - rolling back user');
412
+ await this.drizzle.db.delete(user).where(eq(user.id, userId));
413
+ throw new ORPCError('INTERNAL_SERVER_ERROR', { message: 'Registration is unavailable' });
414
+ }
415
+ if (!outcome.created) {
416
+ // A player row already existed, so this consent capture was discarded. Never
417
+ // silent: the acceptance evidence is a compliance record.
418
+ identityLogger.error({ userId, termsVersion }, 'registration consent not stored - player row already existed');
419
+ }
420
+ return { playerId: outcome.playerId ?? null, consentStored: outcome.created };
421
+ }
422
+ async usernameAvailable(username, reqHeaders) {
423
+ const { ip } = extractClientMeta(reqHeaders);
424
+ await assertRateLimit(this.limiter, `check-username:${ip ?? 'unknown'}`, USERNAME_AVAILABILITY_RATE_LIMIT);
425
+ return { available: !(await this.findUserIdByUsername(username)) };
173
426
  }
174
427
  /**
175
428
  * Credentials are verified FIRST; the RG login block is checked only AFTER
@@ -184,12 +437,11 @@ export class IdentityService {
184
437
  * read a stale count and slip past the lockout threshold.
185
438
  */
186
439
  async login(input, reqHeaders, resHeaders) {
440
+ const { ip, userAgent } = extractClientMeta(reqHeaders);
187
441
  const headers = nodeHeadersToHeaders(reqHeaders);
188
- const ip = clientIp(headers);
189
- const userAgent = headers.get('user-agent') || null;
190
442
  // better-auth lowercases emails on write, so the lockout lookup must match on the same form.
191
443
  const email = input.email.toLowerCase();
192
- await assertRateLimit(this.limiter, `login:${email}`, LOGIN_RATE_LIMIT);
444
+ await assertRateLimit(this.limiter, makeLoginRateLimitKey(email), LOGIN_RATE_LIMIT);
193
445
  const configLockoutEnabled = this.options?.lockout?.enabled ?? true;
194
446
  // Read once for the lockout budget, the admin-bypass check, and the RG login gate
195
447
  // (indexed email lookup). Read unconditionally - the RG gate runs even when lockout
@@ -199,6 +451,9 @@ export class IdentityService {
199
451
  id: user.id,
200
452
  failedLoginAttempts: user.failedLoginAttempts,
201
453
  lockoutUntil: user.lockoutUntil,
454
+ lockoutCount: user.lockoutCount,
455
+ lastLockoutAt: user.lastLockoutAt,
456
+ lastFailedLoginAt: user.lastFailedLoginAt,
202
457
  role: user.role,
203
458
  rgBlocked: user.rgBlocked,
204
459
  rgBlockedUntil: user.rgBlockedUntil,
@@ -210,8 +465,9 @@ export class IdentityService {
210
465
  const isAdmin = existingUser?.role === 'admin';
211
466
  const bypassForAdmins = this.options?.lockout?.bypassForAdmins ?? false;
212
467
  const lockoutEnabled = configLockoutEnabled && !(isAdmin && bypassForAdmins);
468
+ const nowMs = Date.now();
213
469
  if (lockoutEnabled && existingUser?.lockoutUntil) {
214
- if (new Date(existingUser.lockoutUntil) > new Date()) {
470
+ if (new Date(existingUser.lockoutUntil) > new Date(nowMs)) {
215
471
  throw createAccountLockedError(new Date(existingUser.lockoutUntil));
216
472
  }
217
473
  // Lock window elapsed: clear it so the next failure starts from a fresh budget
@@ -219,6 +475,41 @@ export class IdentityService {
219
475
  await this.clearLockout(existingUser.id);
220
476
  existingUser = { ...existingUser, failedLoginAttempts: 0, lockoutUntil: null };
221
477
  }
478
+ if (lockoutEnabled &&
479
+ existingUser &&
480
+ hasFailedLoginWindowExpired(existingUser.lastFailedLoginAt, existingUser.lastLockoutAt, nowMs)) {
481
+ await this.resetLockoutTier(existingUser.id);
482
+ existingUser = {
483
+ ...existingUser,
484
+ failedLoginAttempts: 0,
485
+ lockoutUntil: null,
486
+ lockoutCount: 0,
487
+ lastLockoutAt: null,
488
+ lastFailedLoginAt: null,
489
+ };
490
+ }
491
+ let fakeLoginShadow;
492
+ if (lockoutEnabled && !existingUser) {
493
+ fakeLoginShadow = await this.loginShadowGet(loginShadowKey(email));
494
+ if (fakeLoginShadow?.lastFailedLoginAt) {
495
+ const lastFailedLoginAt = new Date(fakeLoginShadow.lastFailedLoginAt);
496
+ if (hasFailedLoginWindowExpired(lastFailedLoginAt, null, nowMs)) {
497
+ fakeLoginShadow = {
498
+ failedAttempts: 0,
499
+ lockoutUntil: null,
500
+ lockoutCount: 0,
501
+ lastLockoutAt: null,
502
+ lastFailedLoginAt: null,
503
+ };
504
+ }
505
+ }
506
+ if (fakeLoginShadow?.lockoutUntil) {
507
+ if (new Date(fakeLoginShadow.lockoutUntil) > new Date()) {
508
+ throw createAccountLockedError(new Date(fakeLoginShadow.lockoutUntil));
509
+ }
510
+ fakeLoginShadow = { ...fakeLoginShadow, failedAttempts: 0, lockoutUntil: null };
511
+ }
512
+ }
222
513
  try {
223
514
  const authResponse = await this.auth.api.signInEmail({
224
515
  body: { email, password: input.password, rememberMe: input.rememberMe },
@@ -226,21 +517,13 @@ export class IdentityService {
226
517
  asResponse: true,
227
518
  });
228
519
  await ensureOk(authResponse);
229
- // RG login block, applied only AFTER credentials verify so a pre-auth probe can't
230
- // distinguish a restricted account from a wrong password. Kill the session
231
- // better-auth just issued and never forward its cookie. Cooling-off auto-expires
232
- // here once rgBlockedUntil elapses (no unblock job).
233
- if (existingUser && isRgBlocked(existingUser)) {
234
- await this.drizzle.db
235
- .update(session)
236
- .set({ expiresAt: new Date() })
237
- .where(eq(session.userId, existingUser.id));
238
- this.events.emit('rg.exclusion.login_blocked', { userId: existingUser.id, ip, userAgent });
239
- throw new ORPCError('FORBIDDEN', {
240
- message: 'Account access is currently restricted (responsible gambling).',
241
- });
242
- }
243
- forwardCookies(authResponse, resHeaders);
520
+ // RG and backoffice blocks, applied only AFTER credentials verify so a pre-auth
521
+ // probe can't distinguish a restricted account from a wrong password. Resolves
522
+ // playerId once, so the eventual login success event can carry it too.
523
+ const playerId = existingUser
524
+ ? await this.assertAccountNotBlocked(existingUser, { ip, userAgent })
525
+ : null;
526
+ this.forwardCookies(authResponse, resHeaders);
244
527
  const body = (await authResponse.json());
245
528
  if (body.twoFactorRedirect || !body.user || !body.token) {
246
529
  return { twoFactorRedirect: true };
@@ -248,49 +531,106 @@ export class IdentityService {
248
531
  if (lockoutEnabled && existingUser) {
249
532
  await this.clearLockout(existingUser.id);
250
533
  }
251
- this.events.emit('identity.user.login', { userId: body.user.id, ip, userAgent });
534
+ await this.drizzle.db
535
+ .update(session)
536
+ .set({ ipAddress: ip, userAgent })
537
+ .where(eq(session.token, body.token));
538
+ this.events.emit('identity.user.login', {
539
+ userId: body.user.id,
540
+ playerId,
541
+ ip,
542
+ userAgent,
543
+ });
544
+ const sessionDurationSeconds = this.auth.options.session?.expiresIn ?? SESSION_DURATION_IN_SECONDS;
252
545
  const expiresAt = body.session?.expiresAt
253
546
  ? toIso(body.session.expiresAt)
254
- : new Date(Date.now() + SESSION_TTL_MS).toISOString();
547
+ : new Date(Date.now() + sessionDurationSeconds * 1000).toISOString();
255
548
  return {
256
549
  user: toUser(body.user),
257
550
  session: { token: body.token, expiresAt },
551
+ security: makeLoginSecurityState({
552
+ failedLoginAttempts: 0,
553
+ maxAttempts: this.options?.lockout?.maxAttempts ?? DEFAULT_MAX_LOGIN_ATTEMPTS,
554
+ lockoutUntil: null,
555
+ }),
258
556
  };
259
557
  }
260
558
  catch (error) {
261
559
  // An RG block is not a credential failure - surface it as-is, without touching the
262
- // lockout budget or emitting login.failed (the RG event was already emitted).
263
- if (error instanceof ORPCError && error.code === 'FORBIDDEN') {
560
+ // lockout budget or emitting login.failed (the RG event was already emitted). Match on
561
+ // the RG_BLOCKED marker, not the bare FORBIDDEN code - ensureOk also maps a banned-user
562
+ // 403 (better-auth's admin plugin) to FORBIDDEN, and that path must still fall through
563
+ // to the generic branch below to emit login.failed.
564
+ if (error instanceof ORPCError &&
565
+ error.code === 'FORBIDDEN' &&
566
+ (hasErrorCode(error, 'RG_BLOCKED') || hasErrorCode(error, 'ACCOUNT_SUSPENDED'))) {
264
567
  throw error;
265
568
  }
266
569
  // Only a genuine credential rejection counts toward lockout - a transient DB/network
267
570
  // error must never lock the account out.
268
- const isCredentialFailure = error instanceof ORPCError && error.code === 'UNAUTHORIZED';
571
+ const isAccountLocked = error instanceof ORPCError &&
572
+ error.code === 'UNAUTHORIZED' &&
573
+ hasErrorCode(error, 'ACCOUNT_LOCKED');
574
+ const isCredentialFailure = error instanceof ORPCError && error.code === 'UNAUTHORIZED' && !isAccountLocked;
575
+ let attemptsRemaining;
269
576
  if (lockoutEnabled && existingUser && isCredentialFailure) {
270
577
  const maxAttempts = this.options?.lockout?.maxAttempts ?? DEFAULT_MAX_LOGIN_ATTEMPTS;
271
- const durationMs = this.options?.lockout?.durationMs ?? DEFAULT_LOCKOUT_DURATION_MS;
578
+ const fallbackDurationMs = this.options?.lockout?.durationMs ?? DEFAULT_LOCKOUT_DURATION_MS;
272
579
  // Atomic increment: concurrent failures can't each read a stale count and slip past
273
580
  // the threshold (the read-modify-write this replaces was bypassable under load).
274
581
  const [row] = await this.drizzle.db
275
582
  .update(user)
276
- .set({ failedLoginAttempts: sql `${user.failedLoginAttempts} + 1` })
583
+ .set({
584
+ failedLoginAttempts: sql `${user.failedLoginAttempts} + 1`,
585
+ lastFailedLoginAt: new Date(),
586
+ })
277
587
  .where(eq(user.id, existingUser.id))
278
588
  .returning({ failedLoginAttempts: user.failedLoginAttempts });
279
589
  const newAttempts = row?.failedLoginAttempts ?? existingUser.failedLoginAttempts + 1;
280
- const { isLocking, lockoutUntil } = computeLockoutState({
590
+ attemptsRemaining = Math.max(maxAttempts - newAttempts, 0);
591
+ const { isLocking } = computeLockoutState({
281
592
  attempts: newAttempts,
282
593
  maxAttempts,
283
- durationMs,
594
+ durationMs: fallbackDurationMs,
284
595
  nowMs: Date.now(),
285
596
  });
286
- if (isLocking && lockoutUntil) {
287
- await this.drizzle.db
597
+ if (isLocking) {
598
+ const nowMs = Date.now();
599
+ // Escalate the lockout duration for repeat offenders inside the 24h window.
600
+ const { tier, durationMs } = computeLockoutTier({
601
+ lockoutCount: existingUser.lockoutCount ?? 0,
602
+ lastFailedLoginAt: existingUser.lastFailedLoginAt ?? null,
603
+ fallbackLastLockoutAt: existingUser.lastLockoutAt ?? null,
604
+ nowMs,
605
+ fallbackDurationMs,
606
+ });
607
+ const lockoutUntil = new Date(nowMs + durationMs);
608
+ const [lockoutRow] = await this.drizzle.db
288
609
  .update(user)
289
- .set({ lockoutUntil })
290
- .where(eq(user.id, existingUser.id));
610
+ .set({ lockoutUntil, lockoutCount: tier, lastLockoutAt: new Date(nowMs) })
611
+ // Only the first request that reaches the threshold creates the lockout.
612
+ // Other concurrent failures must observe and return the winner's lockout
613
+ // instead of overwriting its tier or emitting a duplicate event.
614
+ .where(and(eq(user.id, existingUser.id), isNull(user.lockoutUntil)))
615
+ .returning({ lockoutUntil: user.lockoutUntil });
616
+ if (!lockoutRow) {
617
+ const [current] = await this.drizzle.db
618
+ .select({ lockoutUntil: user.lockoutUntil })
619
+ .from(user)
620
+ .where(eq(user.id, existingUser.id))
621
+ .limit(1);
622
+ if (current?.lockoutUntil) {
623
+ throw createAccountLockedError(current.lockoutUntil);
624
+ }
625
+ throw new ORPCError('INTERNAL_SERVER_ERROR', {
626
+ message: 'Unable to establish account lockout.',
627
+ });
628
+ }
629
+ await this.limiter?.reset(makeLoginRateLimitKey(email));
291
630
  this.events.emit('identity.user.lockout.triggered', {
292
631
  userId: existingUser.id,
293
632
  email,
633
+ tier,
294
634
  lockoutUntil: lockoutUntil.toISOString(),
295
635
  ip,
296
636
  userAgent,
@@ -298,8 +638,69 @@ export class IdentityService {
298
638
  throw createAccountLockedError(lockoutUntil);
299
639
  }
300
640
  }
641
+ else if (lockoutEnabled && !existingUser && isCredentialFailure) {
642
+ const maxAttempts = this.options?.lockout?.maxAttempts ?? DEFAULT_MAX_LOGIN_ATTEMPTS;
643
+ const fallbackDurationMs = this.options?.lockout?.durationMs ?? DEFAULT_LOCKOUT_DURATION_MS;
644
+ const newAttempts = (fakeLoginShadow?.failedAttempts ?? 0) + 1;
645
+ attemptsRemaining = Math.max(maxAttempts - newAttempts, 0);
646
+ const { isLocking } = computeLockoutState({
647
+ attempts: newAttempts,
648
+ maxAttempts,
649
+ durationMs: fallbackDurationMs,
650
+ nowMs: Date.now(),
651
+ });
652
+ if (isLocking) {
653
+ const nowMs = Date.now();
654
+ const { tier, durationMs } = computeLockoutTier({
655
+ lockoutCount: fakeLoginShadow?.lockoutCount ?? 0,
656
+ lastFailedLoginAt: fakeLoginShadow?.lastFailedLoginAt
657
+ ? new Date(fakeLoginShadow.lastFailedLoginAt)
658
+ : null,
659
+ fallbackLastLockoutAt: fakeLoginShadow?.lastLockoutAt
660
+ ? new Date(fakeLoginShadow.lastLockoutAt)
661
+ : null,
662
+ nowMs,
663
+ fallbackDurationMs,
664
+ });
665
+ const lockoutUntil = new Date(nowMs + durationMs);
666
+ await this.loginShadowSet(loginShadowKey(email), {
667
+ failedAttempts: newAttempts,
668
+ lockoutUntil: lockoutUntil.toISOString(),
669
+ lockoutCount: tier,
670
+ lastLockoutAt: new Date(nowMs).toISOString(),
671
+ lastFailedLoginAt: new Date(nowMs).toISOString(),
672
+ });
673
+ await this.limiter?.reset(makeLoginRateLimitKey(email));
674
+ throw createAccountLockedError(lockoutUntil);
675
+ }
676
+ await this.loginShadowSet(loginShadowKey(email), {
677
+ failedAttempts: newAttempts,
678
+ lockoutUntil: null,
679
+ lockoutCount: fakeLoginShadow?.lockoutCount ?? 0,
680
+ lastLockoutAt: fakeLoginShadow?.lastLockoutAt ?? null,
681
+ lastFailedLoginAt: new Date().toISOString(),
682
+ });
683
+ }
301
684
  const reason = isCredentialFailure ? 'invalid_credentials' : 'error';
302
- this.events.emit('identity.user.login.failed', { email, reason, ip, userAgent });
685
+ this.events.emit('identity.user.login.failed', {
686
+ email,
687
+ reason,
688
+ ip,
689
+ userAgent,
690
+ ...(attemptsRemaining !== undefined ? { attemptsRemaining } : {}),
691
+ });
692
+ if (isCredentialFailure && error instanceof ORPCError && attemptsRemaining !== undefined) {
693
+ const maxAttempts = this.options?.lockout?.maxAttempts ?? DEFAULT_MAX_LOGIN_ATTEMPTS;
694
+ const security = makeLoginSecurityState({
695
+ failedLoginAttempts: attemptsRemaining === undefined ? 0 : maxAttempts - attemptsRemaining,
696
+ maxAttempts,
697
+ lockoutUntil: null,
698
+ });
699
+ throw new ORPCError('UNAUTHORIZED', {
700
+ message: error.message,
701
+ data: { ...error.data, ...security },
702
+ });
703
+ }
303
704
  throw error;
304
705
  }
305
706
  }
@@ -309,7 +710,82 @@ export class IdentityService {
309
710
  .set({ failedLoginAttempts: 0, lockoutUntil: null })
310
711
  .where(eq(user.id, userId));
311
712
  }
312
- async unlockUser(userId, actorId) {
713
+ resetLockoutTier(userId) {
714
+ return this.drizzle.db
715
+ .update(user)
716
+ .set({
717
+ failedLoginAttempts: 0,
718
+ lockoutUntil: null,
719
+ lockoutCount: 0,
720
+ lastLockoutAt: null,
721
+ lastFailedLoginAt: null,
722
+ })
723
+ .where(eq(user.id, userId));
724
+ }
725
+ async loginShadowGet(key) {
726
+ if (!this.cache) {
727
+ return undefined;
728
+ }
729
+ try {
730
+ return await this.cache.get(key);
731
+ }
732
+ catch (err) {
733
+ loginShadowLogger.warn({ key, err }, 'login shadow cache read failed');
734
+ return undefined;
735
+ }
736
+ }
737
+ async loginShadowSet(key, value) {
738
+ if (!this.cache) {
739
+ return;
740
+ }
741
+ try {
742
+ await this.cache.set(key, value, { ttlMs: FAKE_LOGIN_SHADOW_TTL_MS });
743
+ }
744
+ catch (err) {
745
+ loginShadowLogger.warn({ key, err }, 'login shadow cache write failed');
746
+ }
747
+ }
748
+ // Read by a downstream custom EmailTemplateRenderer (same CACHE binding) to tell an
749
+ // admin-triggered reset apart from a self-service one within the synchronous
750
+ // sendVerificationOTP -> templateRenderer.render call chain below.
751
+ adminPasswordResetMarkerKey(email) {
752
+ return `admin-password-reset:${email.toLowerCase()}`;
753
+ }
754
+ async adminRequestPasswordReset(userId, actorId, meta) {
755
+ const existingUser = findOneOrThrow(await this.drizzle.db
756
+ .select({ id: user.id, email: user.email })
757
+ .from(user)
758
+ .where(eq(user.id, userId))
759
+ .limit(1), new UserNotFoundError(userId));
760
+ const email = existingUser.email.toLowerCase();
761
+ try {
762
+ await this.cache?.set(this.adminPasswordResetMarkerKey(email), true, { ttlMs: 120_000 });
763
+ }
764
+ catch (err) {
765
+ identityLogger.warn({ email, err }, 'admin password reset marker cache write failed');
766
+ }
767
+ // Mirrors requestPasswordReset: the OTP email (if any) is delivered through the
768
+ // sendEmail hook -> notifications; any underlying error is swallowed the same way.
769
+ try {
770
+ await this.api.requestPasswordResetEmailOTP({
771
+ body: { email },
772
+ headers: new Headers(),
773
+ asResponse: true,
774
+ });
775
+ }
776
+ catch {
777
+ // intentionally ignored
778
+ }
779
+ this.events.emit('identity.password.admin_reset_requested', {
780
+ userId,
781
+ email,
782
+ actorId,
783
+ ip: meta?.ip ?? null,
784
+ userAgent: meta?.userAgent ?? null,
785
+ });
786
+ return SUCCESS;
787
+ }
788
+ async unlockUser(userId, actorId, meta) {
313
789
  const existingUser = findOneOrThrow(await this.drizzle.db
314
790
  .select({
315
791
  id: user.id,
@@ -321,6 +797,7 @@ export class IdentityService {
321
797
  .where(eq(user.id, userId))
322
798
  .limit(1), new UserNotFoundError(userId));
323
799
  await this.clearLockout(userId);
800
+ await this.limiter?.reset(makeLoginRateLimitKey(existingUser.email));
324
801
  this.events.emit('identity.user.unlocked', {
325
802
  userId,
326
803
  email: existingUser.email,
@@ -329,18 +806,26 @@ export class IdentityService {
329
806
  previousLockoutUntil: existingUser.lockoutUntil
330
807
  ? existingUser.lockoutUntil.toISOString()
331
808
  : null,
809
+ ip: meta?.ip ?? null,
810
+ userAgent: meta?.userAgent ?? null,
332
811
  });
333
812
  return SUCCESS;
334
813
  }
335
814
  async logout(reqHeaders, resHeaders) {
815
+ const { ip, userAgent } = extractClientMeta(reqHeaders);
336
816
  const headers = nodeHeadersToHeaders(reqHeaders);
337
817
  // Resolve the user BEFORE signOut so the audit log can attribute the logout.
338
818
  const session = await this.auth.api.getSession({ headers });
339
819
  const userId = session?.user?.id;
340
820
  const authResponse = await this.auth.api.signOut({ headers, asResponse: true });
341
- forwardCookies(authResponse, resHeaders);
821
+ this.forwardCookies(authResponse, resHeaders);
342
822
  if (userId) {
343
- this.events.emit('identity.user.logout', { userId });
823
+ this.events.emit('identity.user.logout', {
824
+ userId,
825
+ playerId: await this.identityReader.getPlayerIdByUserIdSafe(userId),
826
+ ip,
827
+ userAgent,
828
+ });
344
829
  }
345
830
  return SUCCESS;
346
831
  }
@@ -362,11 +847,12 @@ export class IdentityService {
362
847
  asResponse: true,
363
848
  });
364
849
  await ensureOk(res);
365
- forwardCookies(res, resHeaders);
850
+ this.forwardCookies(res, resHeaders);
366
851
  const body = (await res.json());
367
852
  return { totpUri: body.totpURI, backupCodes: body.backupCodes };
368
853
  }
369
854
  async verifyTwoFactor(input, reqHeaders, resHeaders) {
855
+ const { ip, userAgent } = extractClientMeta(reqHeaders);
370
856
  const headers = nodeHeadersToHeaders(reqHeaders);
371
857
  const twoFactorKey = (await this.currentUserId(headers)) ?? twoFactorPendingCookieValue(headers) ?? 'anonymous';
372
858
  await assertRateLimit(this.limiter, `verify2fa:${twoFactorKey}`, VERIFY_2FA_RATE_LIMIT);
@@ -376,14 +862,20 @@ export class IdentityService {
376
862
  asResponse: true,
377
863
  });
378
864
  await ensureOk(res);
379
- forwardCookies(res, resHeaders);
865
+ this.forwardCookies(res, resHeaders);
380
866
  const userId = await this.currentUserId(headers);
381
867
  if (userId) {
382
- this.events.emit('identity.2fa.enabled', { userId });
868
+ this.events.emit('identity.2fa.enabled', {
869
+ userId,
870
+ playerId: await this.identityReader.getPlayerIdByUserIdSafe(userId),
871
+ ip,
872
+ userAgent,
873
+ });
383
874
  }
384
875
  return SUCCESS;
385
876
  }
386
877
  async disableTwoFactor(input, reqHeaders, resHeaders) {
878
+ const { ip, userAgent } = extractClientMeta(reqHeaders);
387
879
  const headers = nodeHeadersToHeaders(reqHeaders);
388
880
  const userId = await this.currentUserId(headers);
389
881
  await assertRateLimit(this.limiter, `disable2fa:${userId ?? 'anonymous'}`, TWO_FACTOR_PASSWORD_RATE_LIMIT);
@@ -393,20 +885,26 @@ export class IdentityService {
393
885
  asResponse: true,
394
886
  });
395
887
  await ensureOk(res);
396
- forwardCookies(res, resHeaders);
888
+ this.forwardCookies(res, resHeaders);
397
889
  if (userId) {
398
- this.events.emit('identity.2fa.disabled', { userId });
890
+ this.events.emit('identity.2fa.disabled', {
891
+ userId,
892
+ playerId: await this.identityReader.getPlayerIdByUserIdSafe(userId),
893
+ ip,
894
+ userAgent,
895
+ });
399
896
  }
400
897
  return SUCCESS;
401
898
  }
402
899
  async requestPasswordReset(input) {
403
- await assertRateLimit(this.limiter, `pwreset-req:${input.email.toLowerCase()}`, PASSWORD_RESET_REQUEST_RATE_LIMIT);
900
+ const email = input.email.toLowerCase();
901
+ await assertRateLimit(this.limiter, makeRateLimitKey(RATE_LIMIT_KEYS.PASSWORD_RESET_REQUEST, email), PASSWORD_RESET_REQUEST_RATE_LIMIT);
404
902
  // Always returns success - never reveal whether the email exists. The reset
405
903
  // email (if any) is delivered through the sendEmail hook -> notifications.
406
904
  // Any underlying error is swallowed for the same anti-enumeration reason.
407
905
  try {
408
- await this.api.requestPasswordReset({
409
- body: { email: input.email, redirectTo: '/reset-password' },
906
+ await this.api.requestPasswordResetEmailOTP({
907
+ body: { email },
410
908
  headers: new Headers(),
411
909
  asResponse: true,
412
910
  });
@@ -416,22 +914,30 @@ export class IdentityService {
416
914
  }
417
915
  return SUCCESS;
418
916
  }
917
+ async verifyPasswordResetOtp(input) {
918
+ const email = input.email.toLowerCase();
919
+ await assertRateLimit(this.limiter, makeRateLimitKey(RATE_LIMIT_KEYS.PASSWORD_RESET_VERIFY, email), PASSWORD_RESET_VERIFY_RATE_LIMIT);
920
+ const res = await this.api.checkVerificationOTP({
921
+ body: { email, type: 'forget-password', otp: input.otp },
922
+ headers: new Headers(),
923
+ asResponse: true,
924
+ });
925
+ await ensureOk(res, { genericMessage: 'Invalid or expired verification code' });
926
+ return SUCCESS;
927
+ }
419
928
  async resetPassword(input) {
420
- // Key on the token - the only identifier the input carries - to bound retries
421
- // against a single reset token.
422
- await assertRateLimit(this.limiter, `pwreset:${input.token}`, PASSWORD_RESET_RATE_LIMIT);
423
- const res = await this.api.resetPassword({
424
- body: { newPassword: input.newPassword, token: input.token },
929
+ const email = input.email.toLowerCase();
930
+ await assertRateLimit(this.limiter, makeRateLimitKey(RATE_LIMIT_KEYS.PASSWORD_RESET, email), PASSWORD_RESET_RATE_LIMIT);
931
+ const res = await this.api.resetPasswordEmailOTP({
932
+ body: { email, otp: input.otp, password: input.newPassword },
425
933
  headers: new Headers(),
426
934
  asResponse: true,
427
935
  });
428
- await ensureOk(res);
429
- const body = (await res.json().catch(() => ({})));
430
- if (body.user?.id) {
431
- this.events.emit('identity.password.reset', { userId: body.user.id });
432
- // Password reset clears any lockout - the user has proven identity via email/phone.
433
- await this.clearLockout(body.user.id);
434
- }
936
+ await ensureOk(res, { genericMessage: 'Invalid or expired verification code' });
937
+ // better-auth's resetPasswordEmailOTP internally invokes the onPasswordReset hook
938
+ // (wired in the constructor above), which emits `identity.password.reset` and
939
+ // clears the lockout - do not duplicate that here (was double-emitting/double-
940
+ // clearing on every real reset).
435
941
  return SUCCESS;
436
942
  }
437
943
  async changePassword(input, reqHeaders, resHeaders) {
@@ -444,33 +950,114 @@ export class IdentityService {
444
950
  asResponse: true,
445
951
  });
446
952
  await ensureOk(res);
447
- forwardCookies(res, resHeaders);
953
+ this.forwardCookies(res, resHeaders);
448
954
  return SUCCESS;
449
955
  }
450
- async sendEmailVerification(reqHeaders) {
451
- const headers = nodeHeadersToHeaders(reqHeaders);
452
- const session = await this.auth.api.getSession({ headers });
453
- const email = session?.user?.email;
454
- if (email) {
455
- await assertRateLimit(this.limiter, `email-verify:${email.toLowerCase()}`, EMAIL_VERIFICATION_RATE_LIMIT);
456
- await this.api.sendVerificationEmail({ body: { email }, headers, asResponse: true });
956
+ /**
957
+ * Resends the registration code. Unauthenticated by design - the player has no session
958
+ * until the code is verified - so it answers SUCCESS for every address and only mails a
959
+ * code to an account that exists and is still unverified. Verified accounts are skipped
960
+ * deliberately: `verifyEmail` signs the code's bearer in, so resending to a verified
961
+ * address would turn this into passwordless sign-in for anyone who can read that inbox.
962
+ */
963
+ async sendEmailVerification(input, reqHeaders) {
964
+ const { ip } = extractClientMeta(reqHeaders);
965
+ const email = input.email.toLowerCase();
966
+ await assertRateLimit(this.limiter, `email-verify:${email}`, EMAIL_VERIFICATION_RATE_LIMIT);
967
+ if (ip) {
968
+ await assertRateLimit(this.limiter, `email-verify-ip:${ip}`, EMAIL_VERIFICATION_RATE_LIMIT);
969
+ }
970
+ const [row] = await this.drizzle.db
971
+ .select({ emailVerified: user.emailVerified })
972
+ .from(user)
973
+ .where(eq(user.email, email))
974
+ .limit(1);
975
+ if (row && !row.emailVerified) {
976
+ await this.api.sendVerificationOTP({
977
+ body: { email, type: 'email-verification' },
978
+ headers: nodeHeadersToHeaders(reqHeaders),
979
+ asResponse: true,
980
+ });
457
981
  }
458
982
  return SUCCESS;
459
983
  }
460
- async verifyEmail(input, reqHeaders) {
984
+ /**
985
+ * Consumes the 6-digit code mailed by `register()` and signs the player in -
986
+ * better-auth's `autoSignInAfterVerification` mints the session here rather than at
987
+ * sign-up, which is what lets sign-up stay sessionless and therefore keep its
988
+ * duplicate-email response indistinguishable. Same post-credential gates as `login`:
989
+ * a code is proof of address ownership, not a bypass for an RG or backoffice block.
990
+ */
991
+ async verifyEmail(input, reqHeaders, resHeaders) {
992
+ const { ip, userAgent } = extractClientMeta(reqHeaders);
461
993
  const headers = nodeHeadersToHeaders(reqHeaders);
462
- const userId = await this.currentUserId(headers);
463
- await assertRateLimit(this.limiter, `verify-email:${userId ?? 'anonymous'}`, VERIFY_EMAIL_RATE_LIMIT);
464
- const res = await this.api.verifyEmail({
465
- query: { token: input.token },
994
+ const email = input.email.toLowerCase();
995
+ // Keyed on the address under attack (six digits are guessable) and on the caller, so
996
+ // one client can neither grind a single account nor sweep many.
997
+ await assertRateLimit(this.limiter, `verify-email:${email}`, VERIFY_EMAIL_RATE_LIMIT);
998
+ // Only when the caller's IP is actually known: an `unknown` bucket would be shared by
999
+ // every anonymous caller, letting one client stall everyone else's sign-up.
1000
+ if (ip) {
1001
+ await assertRateLimit(this.limiter, `verify-email-ip:${ip}`, VERIFY_EMAIL_RATE_LIMIT);
1002
+ }
1003
+ const res = await this.api.verifyEmailOTP({
1004
+ body: { email, otp: input.otp },
466
1005
  headers,
467
1006
  asResponse: true,
468
1007
  });
469
- await ensureOk(res);
470
- if (userId) {
471
- this.events.emit('identity.email.verified', { userId });
1008
+ await ensureOk(res, { genericMessage: 'Invalid or expired verification code' });
1009
+ const body = (await res.json());
1010
+ // better-auth has already committed `emailVerified` by now, so the audit record is
1011
+ // emitted before any gate below can throw - a state change that leaves no trail is a
1012
+ // compliance gap, see docs/standards/audit.md.
1013
+ const playerId = await this.identityReader.getPlayerIdByUserIdSafe(body.user.id);
1014
+ this.events.emit('identity.email.verified', { userId: body.user.id, playerId, ip, userAgent });
1015
+ const [account] = await this.drizzle.db
1016
+ .select({
1017
+ id: user.id,
1018
+ rgBlocked: user.rgBlocked,
1019
+ rgBlockedUntil: user.rgBlockedUntil,
1020
+ twoFactorEnabled: user.twoFactorEnabled,
1021
+ })
1022
+ .from(user)
1023
+ .where(eq(user.id, body.user.id))
1024
+ .limit(1);
1025
+ if (account) {
1026
+ await this.assertAccountNotBlocked(account, { ip, userAgent });
472
1027
  }
473
- return SUCCESS;
1028
+ // better-auth mints this session with `createSession`, which its twoFactor plugin only
1029
+ // hooks on the sign-in routes - so an enrolled account would get a full session from
1030
+ // the emailed code alone, bypassing its second factor. Verification still stands; the
1031
+ // session does not, and the player signs in through `login` to face the challenge.
1032
+ if (account?.twoFactorEnabled) {
1033
+ // Scoped to the token this call just minted: the player's other devices did nothing
1034
+ // wrong, and an unrelated sign-out here would be indistinguishable from a session
1035
+ // hijack. The RG/backoffice branch above is the one that revokes everything.
1036
+ if (body.token) {
1037
+ await this.drizzle.db
1038
+ .update(session)
1039
+ .set({ expiresAt: new Date() })
1040
+ .where(eq(session.token, body.token));
1041
+ }
1042
+ return { twoFactorRedirect: true };
1043
+ }
1044
+ if (!body.token) {
1045
+ throw new ORPCError('INTERNAL_SERVER_ERROR', { message: 'Verification did not sign you in' });
1046
+ }
1047
+ this.forwardCookies(res, resHeaders);
1048
+ await this.drizzle.db
1049
+ .update(session)
1050
+ .set({ ipAddress: ip, userAgent })
1051
+ .where(eq(session.token, body.token));
1052
+ this.events.emit('identity.user.login', { userId: body.user.id, playerId, ip, userAgent });
1053
+ const sessionDurationSeconds = this.auth.options.session?.expiresIn ?? SESSION_DURATION_IN_SECONDS;
1054
+ return {
1055
+ user: toUser(body.user),
1056
+ session: {
1057
+ token: body.token,
1058
+ expiresAt: new Date(Date.now() + sessionDurationSeconds * 1000).toISOString(),
1059
+ },
1060
+ };
474
1061
  }
475
1062
  async changeEmail(input, reqHeaders, resHeaders) {
476
1063
  const headers = nodeHeadersToHeaders(reqHeaders);
@@ -480,13 +1067,14 @@ export class IdentityService {
480
1067
  asResponse: true,
481
1068
  });
482
1069
  await ensureOk(res);
483
- forwardCookies(res, resHeaders);
1070
+ this.forwardCookies(res, resHeaders);
484
1071
  return SUCCESS;
485
1072
  }
486
1073
  async updateProfile(input, reqHeaders, resHeaders) {
487
1074
  if (input.language !== undefined) {
488
1075
  assertSupportedLanguage(input.language, this.platformConfig);
489
1076
  }
1077
+ const { ip, userAgent } = extractClientMeta(reqHeaders);
490
1078
  const headers = nodeHeadersToHeaders(reqHeaders);
491
1079
  // better-auth's field parser and drizzle's mapUpdateSet both drop `undefined`
492
1080
  // values before the SQL SET clause, so omitted fields are safely no-ops here.
@@ -497,12 +1085,17 @@ export class IdentityService {
497
1085
  asResponse: true,
498
1086
  });
499
1087
  await ensureOk(res);
500
- forwardCookies(res, resHeaders);
1088
+ this.forwardCookies(res, resHeaders);
501
1089
  // updateUser returns { status } only - re-read from session to get the full user.
502
1090
  const session = await this.auth.api.getSession({ headers });
503
1091
  const current = session?.user;
504
1092
  if (current) {
505
- this.events.emit('identity.profile.updated', { userId: current.id });
1093
+ this.events.emit('identity.profile.updated', {
1094
+ userId: current.id,
1095
+ playerId: await this.identityReader.getPlayerIdByUserIdSafe(current.id),
1096
+ ip,
1097
+ userAgent,
1098
+ });
506
1099
  }
507
1100
  if (!current) {
508
1101
  throw new Error('Profile update succeeded but session could not be re-read');