@openora/core 0.4.1-canary.53 → 0.4.1-canary.55

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 (67) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/adapters/audit.d.ts +1 -1
  3. package/dist/contracts/adapters/audit.d.ts.map +1 -1
  4. package/dist/contracts/adapters/audit.js.map +1 -1
  5. package/dist/contracts/schemas/__tests__/tag-schemas.test.d.ts +2 -0
  6. package/dist/contracts/schemas/__tests__/tag-schemas.test.d.ts.map +1 -0
  7. package/dist/contracts/schemas/__tests__/tag-schemas.test.js +42 -0
  8. package/dist/contracts/schemas/__tests__/tag-schemas.test.js.map +1 -0
  9. package/dist/contracts/schemas/platform-config.d.ts +0 -43
  10. package/dist/contracts/schemas/platform-config.d.ts.map +1 -1
  11. package/dist/contracts/schemas/platform-config.js +0 -6
  12. package/dist/contracts/schemas/platform-config.js.map +1 -1
  13. package/dist/contracts/schemas/tag.d.ts +1 -1
  14. package/dist/contracts/schemas/tag.js +2 -2
  15. package/dist/contracts/schemas/tag.js.map +1 -1
  16. package/dist/iam/service/iam.service.d.ts +1 -1
  17. package/dist/pam/tag/__tests__/tag.router.int.test.js +63 -0
  18. package/dist/pam/tag/__tests__/tag.router.int.test.js.map +1 -1
  19. package/dist/pam/tag/contract/index.d.ts +1 -1
  20. package/dist/pam/tag/router/index.d.ts +1 -1
  21. package/dist/pam/tag/router/index.d.ts.map +1 -1
  22. package/dist/pam/tag/router/index.js +5 -2
  23. package/dist/pam/tag/router/index.js.map +1 -1
  24. package/dist/pam/tag/service/tag.service.d.ts +1 -0
  25. package/dist/pam/tag/service/tag.service.d.ts.map +1 -1
  26. package/dist/pam/tag/service/tag.service.js +14 -3
  27. package/dist/pam/tag/service/tag.service.js.map +1 -1
  28. package/dist/server/auth/permissions.d.ts +12 -0
  29. package/dist/server/auth/permissions.d.ts.map +1 -1
  30. package/dist/server/auth/permissions.js +2 -0
  31. package/dist/server/auth/permissions.js.map +1 -1
  32. package/dist/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.d.ts +2 -0
  33. package/dist/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.d.ts.map +1 -0
  34. package/dist/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.js +183 -0
  35. package/dist/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.js.map +1 -0
  36. package/dist/wallet/__tests__/wallet-auto-withdrawal.int.test.js +196 -46
  37. package/dist/wallet/__tests__/wallet-auto-withdrawal.int.test.js.map +1 -1
  38. package/dist/wallet/contract/index.d.ts +124 -0
  39. package/dist/wallet/contract/index.d.ts.map +1 -1
  40. package/dist/wallet/contract/index.js +29 -1
  41. package/dist/wallet/contract/index.js.map +1 -1
  42. package/dist/wallet/drizzle/migrations/0005_gigantic_dust.sql +10 -0
  43. package/dist/wallet/drizzle/migrations/0006_lush_morg.sql +1 -0
  44. package/dist/wallet/drizzle/migrations/meta/0004_snapshot.json +64 -0
  45. package/dist/wallet/drizzle/migrations/meta/0006_snapshot.json +638 -0
  46. package/dist/wallet/drizzle/migrations/meta/_journal.json +14 -0
  47. package/dist/wallet/router/index.d.ts +75 -0
  48. package/dist/wallet/router/index.d.ts.map +1 -1
  49. package/dist/wallet/router/index.js +13 -1
  50. package/dist/wallet/router/index.js.map +1 -1
  51. package/dist/wallet/schema/index.d.ts +171 -0
  52. package/dist/wallet/schema/index.d.ts.map +1 -1
  53. package/dist/wallet/schema/index.js +18 -0
  54. package/dist/wallet/schema/index.js.map +1 -1
  55. package/dist/wallet/seed/index.d.ts +2 -0
  56. package/dist/wallet/seed/index.d.ts.map +1 -0
  57. package/dist/wallet/seed/index.js +2 -0
  58. package/dist/wallet/seed/index.js.map +1 -0
  59. package/dist/wallet/seed/seed-auto-withdrawal-config.d.ts +11 -0
  60. package/dist/wallet/seed/seed-auto-withdrawal-config.d.ts.map +1 -0
  61. package/dist/wallet/seed/seed-auto-withdrawal-config.js +16 -0
  62. package/dist/wallet/seed/seed-auto-withdrawal-config.js.map +1 -0
  63. package/dist/wallet/service/wallet.service.d.ts +10 -2
  64. package/dist/wallet/service/wallet.service.d.ts.map +1 -1
  65. package/dist/wallet/service/wallet.service.js +96 -15
  66. package/dist/wallet/service/wallet.service.js.map +1 -1
  67. package/package.json +6 -1
@@ -18,6 +18,7 @@ export declare const statement: {
18
18
  readonly 'tag-rule': readonly ["view", "update"];
19
19
  readonly tag: readonly ["view", "create", "delete"];
20
20
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
21
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
21
22
  };
22
23
  export declare const ac: {
23
24
  newRole<const TRoleStatements extends import("better-auth/plugins/access").Statements>(statements: import("better-auth/plugins/access").RoleInput<{
@@ -40,6 +41,7 @@ export declare const ac: {
40
41
  readonly 'tag-rule': readonly ["view", "update"];
41
42
  readonly tag: readonly ["view", "create", "delete"];
42
43
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
44
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
43
45
  }, TRoleStatements>): import("better-auth/plugins/access").Role<import("better-auth/plugins/access").ExactRoleStatements<TRoleStatements>, {
44
46
  readonly player: readonly ["view", "update", "ban", "adjust-balance"];
45
47
  readonly transaction: readonly ["view", "refund"];
@@ -60,6 +62,7 @@ export declare const ac: {
60
62
  readonly 'tag-rule': readonly ["view", "update"];
61
63
  readonly tag: readonly ["view", "create", "delete"];
62
64
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
65
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
63
66
  }>;
64
67
  statements: {
65
68
  readonly player: readonly ["view", "update", "ban", "adjust-balance"];
@@ -81,6 +84,7 @@ export declare const ac: {
81
84
  readonly 'tag-rule': readonly ["view", "update"];
82
85
  readonly tag: readonly ["view", "create", "delete"];
83
86
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
87
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
84
88
  };
85
89
  };
86
90
  export declare const adminRole: import("better-auth/plugins/access").Role<import("better-auth/plugins/access").ExactRoleStatements<{
@@ -103,6 +107,7 @@ export declare const adminRole: import("better-auth/plugins/access").Role<import
103
107
  readonly 'tag-rule': ["view", "update"];
104
108
  readonly tag: ["view", "create", "delete"];
105
109
  readonly 'chat-room': ["view", "create", "update", "delete"];
110
+ readonly 'auto-withdrawal-config': ["view", "update"];
106
111
  }>, {
107
112
  readonly player: readonly ["view", "update", "ban", "adjust-balance"];
108
113
  readonly transaction: readonly ["view", "refund"];
@@ -123,6 +128,7 @@ export declare const adminRole: import("better-auth/plugins/access").Role<import
123
128
  readonly 'tag-rule': readonly ["view", "update"];
124
129
  readonly tag: readonly ["view", "create", "delete"];
125
130
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
131
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
126
132
  }>;
127
133
  export declare const supportRole: import("better-auth/plugins/access").Role<import("better-auth/plugins/access").ExactRoleStatements<{
128
134
  readonly player: ["view", "update"];
@@ -150,6 +156,7 @@ export declare const supportRole: import("better-auth/plugins/access").Role<impo
150
156
  readonly 'tag-rule': readonly ["view", "update"];
151
157
  readonly tag: readonly ["view", "create", "delete"];
152
158
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
159
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
153
160
  }>;
154
161
  export declare const contentManagerRole: import("better-auth/plugins/access").Role<import("better-auth/plugins/access").ExactRoleStatements<{
155
162
  readonly content: ["create", "update", "delete", "publish"];
@@ -174,6 +181,7 @@ export declare const contentManagerRole: import("better-auth/plugins/access").Ro
174
181
  readonly 'tag-rule': readonly ["view", "update"];
175
182
  readonly tag: readonly ["view", "create", "delete"];
176
183
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
184
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
177
185
  }>;
178
186
  export declare const roles: {
179
187
  readonly admin: import("better-auth/plugins/access").Role<import("better-auth/plugins/access").ExactRoleStatements<{
@@ -196,6 +204,7 @@ export declare const roles: {
196
204
  readonly 'tag-rule': ["view", "update"];
197
205
  readonly tag: ["view", "create", "delete"];
198
206
  readonly 'chat-room': ["view", "create", "update", "delete"];
207
+ readonly 'auto-withdrawal-config': ["view", "update"];
199
208
  }>, {
200
209
  readonly player: readonly ["view", "update", "ban", "adjust-balance"];
201
210
  readonly transaction: readonly ["view", "refund"];
@@ -216,6 +225,7 @@ export declare const roles: {
216
225
  readonly 'tag-rule': readonly ["view", "update"];
217
226
  readonly tag: readonly ["view", "create", "delete"];
218
227
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
228
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
219
229
  }>;
220
230
  readonly support: import("better-auth/plugins/access").Role<import("better-auth/plugins/access").ExactRoleStatements<{
221
231
  readonly player: ["view", "update"];
@@ -243,6 +253,7 @@ export declare const roles: {
243
253
  readonly 'tag-rule': readonly ["view", "update"];
244
254
  readonly tag: readonly ["view", "create", "delete"];
245
255
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
256
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
246
257
  }>;
247
258
  readonly 'content-manager': import("better-auth/plugins/access").Role<import("better-auth/plugins/access").ExactRoleStatements<{
248
259
  readonly content: ["create", "update", "delete", "publish"];
@@ -267,6 +278,7 @@ export declare const roles: {
267
278
  readonly 'tag-rule': readonly ["view", "update"];
268
279
  readonly tag: readonly ["view", "create", "delete"];
269
280
  readonly 'chat-room': readonly ["view", "create", "update", "delete"];
281
+ readonly 'auto-withdrawal-config': readonly ["view", "update"];
270
282
  }>;
271
283
  };
272
284
  export type RoleName = keyof typeof roles;
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/server/auth/permissions.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;CAoBZ,CAAC;AAEX,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiC,CAAC;AAEjD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBpB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;EAMtB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIR,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,KAAK,CAAC;AAC1C,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,SAAS,CAAC;AAClD,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,YAAY,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/server/auth/permissions.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;CAqBZ,CAAC;AAEX,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiC,CAAC;AAEjD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBpB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMtB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIR,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,KAAK,CAAC;AAC1C,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,SAAS,CAAC;AAClD,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,YAAY,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -19,6 +19,7 @@ export const statement = {
19
19
  'tag-rule': ['view', 'update'],
20
20
  tag: ['view', 'create', 'delete'],
21
21
  'chat-room': ['view', 'create', 'update', 'delete'],
22
+ 'auto-withdrawal-config': ['view', 'update'],
22
23
  };
23
24
  export const ac = createAccessControl(statement);
24
25
  export const adminRole = ac.newRole({
@@ -41,6 +42,7 @@ export const adminRole = ac.newRole({
41
42
  'tag-rule': ['view', 'update'],
42
43
  tag: ['view', 'create', 'delete'],
43
44
  'chat-room': ['view', 'create', 'update', 'delete'],
45
+ 'auto-withdrawal-config': ['view', 'update'],
44
46
  });
45
47
  export const supportRole = ac.newRole({
46
48
  player: ['view', 'update'],
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/server/auth/permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/server/auth/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,CAAU;IAC5D,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAU;IACxC,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAU;IAC5C,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU;IAC3D,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,CAAU;IAC5D,MAAM,EAAE,CAAC,MAAM,CAAU;IACzB,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAU;IACvE,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU;IAC/D,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAU;IAClC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAU;IACjE,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAU;IACtD,SAAS,EAAE,CAAC,MAAM,CAAU;IAC5B,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAU;IACrD,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAU;IACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAU;IACrC,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAU;IAC1C,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAU;IACvC,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAU;IAC1C,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU;IAC5D,wBAAwB,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAU;CAC7C,CAAC;AAEX,MAAM,CAAC,MAAM,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;IAClC,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,CAAC;IACnD,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC/B,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;IACnC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;IAClD,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,CAAC;IACnD,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;IAC9D,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;IACtD,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IACzB,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;IACxD,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;IAC7C,SAAS,EAAE,CAAC,MAAM,CAAC;IACnB,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC;IAC5C,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC5B,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IACjC,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC9B,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACjC,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACnD,wBAAwB,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;IACpC,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,WAAW,EAAE,CAAC,MAAM,CAAC;IACrB,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC;IAC3C,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;IAClD,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,WAAW;IACpB,iBAAiB,EAAE,kBAAkB;CAC7B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wallet-auto-withdrawal-config.router.int.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-auto-withdrawal-config.router.int.test.d.ts","sourceRoot":"","sources":["../../../src/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,183 @@
1
+ import { describe, it, expect, vi, beforeAll, afterAll, beforeEach } from 'vitest';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { call, ORPCError } from '@orpc/server';
4
+ import { createTestDb } from '@openora/core/testing';
5
+ import { mock, makeEventBus, testContext, makeAuditWriter, makeAdminGuard, NO_CLIENT_META, } from '../../testing/mock.js';
6
+ import { migrate } from '../migrate.js';
7
+ import { wallet, walletTransaction, walletAutoWithdrawalConfig } from '../schema/index.js';
8
+ import { createWalletRouter } from '../router/index.js';
9
+ import { WalletService } from '../service/wallet.service.js';
10
+ const CTX = testContext();
11
+ const CALLER_ID = '9a2f7c11-0000-4000-8000-0000000000bb';
12
+ let db;
13
+ beforeAll(async () => {
14
+ db = await createTestDb([migrate]);
15
+ });
16
+ afterAll(async () => {
17
+ await db.drop();
18
+ });
19
+ beforeEach(async () => {
20
+ await db.drizzle.db.delete(walletTransaction);
21
+ await db.drizzle.db.delete(wallet);
22
+ await db.drizzle.db.delete(walletAutoWithdrawalConfig);
23
+ await db.drizzle.db
24
+ .insert(walletAutoWithdrawalConfig)
25
+ .values({ singletonKey: 'global', fiatThreshold: '0', cryptoThreshold: '0' });
26
+ });
27
+ const superAdminGuard = () => makeAdminGuard({ caller: { userId: CALLER_ID, role: 'super-admin' } });
28
+ // The 'auto-withdrawal-config' resource is granted only to super-admin (see
29
+ // permissions.ts statement + default-admin-roles.ts) - both `admin` and
30
+ // `payments-manager` (which only has `withdrawal` RW, a different resource)
31
+ // must be denied here.
32
+ const adminDenyingGuard = () => makeAdminGuard({
33
+ deny: ['auto-withdrawal-config:view', 'auto-withdrawal-config:update'],
34
+ caller: { userId: CALLER_ID, role: 'admin' },
35
+ });
36
+ const paymentsManagerDenyingGuard = () => makeAdminGuard({
37
+ deny: ['auto-withdrawal-config:view', 'auto-withdrawal-config:update'],
38
+ caller: { userId: CALLER_ID, role: 'payments-manager' },
39
+ });
40
+ function routerWith(adminGuard, platformConfig) {
41
+ const audit = makeAuditWriter();
42
+ const directory = mock({
43
+ lookupPlayers: vi.fn(async (ids) => ids.map((userId) => mock({ userId, username: 'player', kycStatus: 'verified' }))),
44
+ });
45
+ // excludeRiskFlags defaults to the migration's 5-tag DEFAULT (non-empty), so
46
+ // evaluateAutoApproval needs PLAYER_TAGS bound to check it - bind an empty-tags double by
47
+ // default so tests that aren't specifically exercising risk-tag exclusion still reach
48
+ // auto-approval.
49
+ const riskTags = mock({
50
+ getActiveTagKeys: vi.fn(async (ids) => new Map(ids.map((id) => [id, []]))),
51
+ });
52
+ const service = new WalletService({
53
+ drizzle: db.drizzle,
54
+ events: makeEventBus(),
55
+ payment: mock({
56
+ processWithdrawal: vi.fn(async () => ({
57
+ externalId: randomUUID(),
58
+ status: 'completed',
59
+ })),
60
+ }),
61
+ audit,
62
+ directory,
63
+ platformConfig: platformConfig ? mock(platformConfig) : undefined,
64
+ riskTags,
65
+ });
66
+ const router = createWalletRouter(service, adminGuard, audit, mock({}), mock({ verify: vi.fn().mockReturnValue(false) }));
67
+ return { router, audit, service };
68
+ }
69
+ async function seedPlayerWallet(overrides = {}) {
70
+ const [row] = await db.drizzle.db
71
+ .insert(wallet)
72
+ .values({ userId: randomUUID(), balance: '100000', currency: 'USD', ...overrides })
73
+ .returning();
74
+ return row;
75
+ }
76
+ describe('wallet auto-withdrawal-config routes', () => {
77
+ it('get: returns the seeded singleton row for an authorized (super-admin) caller', async () => {
78
+ const { router } = routerWith(superAdminGuard());
79
+ const result = await call(router.autoWithdrawalConfig.get, {}, { context: CTX });
80
+ expect(result).toMatchObject({ fiatThreshold: '0.00000000', cryptoThreshold: '0.00000000' });
81
+ expect(result.excludeRiskFlags).toEqual(expect.arrayContaining(['high_risk', 'bonus_abuser', 'kyc_rejected']));
82
+ });
83
+ it('get: rejects payments-manager', async () => {
84
+ const { router } = routerWith(paymentsManagerDenyingGuard());
85
+ await expect(call(router.autoWithdrawalConfig.get, {}, { context: CTX })).rejects.toBeInstanceOf(ORPCError);
86
+ });
87
+ it('get: rejects plain admin', async () => {
88
+ const { router } = routerWith(adminDenyingGuard());
89
+ await expect(call(router.autoWithdrawalConfig.get, {}, { context: CTX })).rejects.toBeInstanceOf(ORPCError);
90
+ });
91
+ it('set: rejects payments-manager and writes nothing', async () => {
92
+ const { router, audit } = routerWith(paymentsManagerDenyingGuard());
93
+ await expect(call(router.autoWithdrawalConfig.set, { fiatThreshold: '500', cryptoThreshold: '1', excludeRiskFlags: [] }, { context: CTX })).rejects.toBeInstanceOf(ORPCError);
94
+ expect(audit.record).not.toHaveBeenCalled();
95
+ expect(audit.recordInTransaction).not.toHaveBeenCalled();
96
+ });
97
+ it('set: rejects plain admin and writes nothing', async () => {
98
+ const { router, audit } = routerWith(adminDenyingGuard());
99
+ await expect(call(router.autoWithdrawalConfig.set, { fiatThreshold: '500', cryptoThreshold: '1', excludeRiskFlags: [] }, { context: CTX })).rejects.toBeInstanceOf(ORPCError);
100
+ expect(audit.record).not.toHaveBeenCalled();
101
+ expect(audit.recordInTransaction).not.toHaveBeenCalled();
102
+ });
103
+ it('set: rejects a negative fiat threshold', async () => {
104
+ const { router } = routerWith(superAdminGuard());
105
+ await expect(call(router.autoWithdrawalConfig.set, { fiatThreshold: '-1', cryptoThreshold: '1', excludeRiskFlags: [] }, { context: CTX })).rejects.toThrow();
106
+ });
107
+ it('set: rejects a negative crypto threshold', async () => {
108
+ const { router } = routerWith(superAdminGuard());
109
+ await expect(call(router.autoWithdrawalConfig.set, { fiatThreshold: '1', cryptoThreshold: '-1', excludeRiskFlags: [] }, { context: CTX })).rejects.toThrow();
110
+ });
111
+ it('set: rejects a fiat threshold exceeding the decimal(18,8) integer-digit budget', async () => {
112
+ const { router } = routerWith(superAdminGuard());
113
+ await expect(call(router.autoWithdrawalConfig.set, { fiatThreshold: '10000000000', cryptoThreshold: '1', excludeRiskFlags: [] }, { context: CTX })).rejects.toThrow();
114
+ });
115
+ it('set: super-admin updates both thresholds and excludeRiskFlags, GET reflects immediately, and writes an admin audit entry with before/after', async () => {
116
+ const { router, audit } = routerWith(superAdminGuard());
117
+ const result = await call(router.autoWithdrawalConfig.set, { fiatThreshold: '500', cryptoThreshold: '1', excludeRiskFlags: ['bonus_abuser'] }, { context: CTX });
118
+ expect(result).toMatchObject({
119
+ fiatThreshold: '500.00000000',
120
+ cryptoThreshold: '1.00000000',
121
+ excludeRiskFlags: ['bonus_abuser'],
122
+ updatedBy: CALLER_ID,
123
+ });
124
+ const fetched = await call(router.autoWithdrawalConfig.get, {}, { context: CTX });
125
+ expect(fetched).toMatchObject({
126
+ fiatThreshold: '500.00000000',
127
+ cryptoThreshold: '1.00000000',
128
+ excludeRiskFlags: ['bonus_abuser'],
129
+ });
130
+ expect(audit.recordInTransaction).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
131
+ actorId: CALLER_ID,
132
+ actorType: 'admin',
133
+ action: 'wallet.auto_withdrawal_config.set',
134
+ resourceType: 'auto_withdrawal_config',
135
+ before: {
136
+ fiatThreshold: '0.00000000',
137
+ cryptoThreshold: '0.00000000',
138
+ // The beforeEach seed omits excludeRiskFlags, so the column's migration
139
+ // DEFAULT (a starting value, not an enforced floor) is what "before" captures here.
140
+ excludeRiskFlags: [
141
+ 'high_risk',
142
+ 'bonus_abuser',
143
+ 'kyc_rejected',
144
+ 'withdrawal_review',
145
+ 'multi_account',
146
+ ],
147
+ },
148
+ after: {
149
+ fiatThreshold: '500.00000000',
150
+ cryptoThreshold: '1.00000000',
151
+ excludeRiskFlags: ['bonus_abuser'],
152
+ },
153
+ }));
154
+ });
155
+ it('end-to-end: after a super-admin sets the fiat threshold, a withdrawal below it auto-approves and one above it stays pending, both leaving an audit trail', async () => {
156
+ const { router, audit, service } = routerWith(superAdminGuard(), {
157
+ autoWithdrawal: { enabled: true },
158
+ });
159
+ await call(router.autoWithdrawalConfig.set, { fiatThreshold: '100', cryptoThreshold: '0', excludeRiskFlags: [] }, { context: CTX });
160
+ const below = await seedPlayerWallet();
161
+ const belowResult = await service.withdraw({
162
+ userId: below.userId,
163
+ amount: '40',
164
+ currency: 'USD',
165
+ ...NO_CLIENT_META,
166
+ });
167
+ expect(belowResult.status).toBe('completed');
168
+ const above = await seedPlayerWallet();
169
+ const aboveResult = await service.withdraw({
170
+ userId: above.userId,
171
+ amount: '400',
172
+ currency: 'USD',
173
+ ...NO_CLIENT_META,
174
+ });
175
+ expect(aboveResult.status).toBe('pending');
176
+ expect(audit.recordInTransaction).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ action: 'wallet.auto_withdrawal_config.set' }));
177
+ expect(audit.record).toHaveBeenCalledWith(expect.objectContaining({
178
+ action: 'wallet.withdrawal.auto_approved',
179
+ resourceId: belowResult.transactionId,
180
+ }));
181
+ });
182
+ });
183
+ //# sourceMappingURL=wallet-auto-withdrawal-config.router.int.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-auto-withdrawal-config.router.int.test.js","sourceRoot":"","sources":["../../../src/wallet/__tests__/wallet-auto-withdrawal-config.router.int.test.ts"],"names":[],"mappings":"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"}