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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/admin-console/__tests__/backoffice.router.test.js +13 -1
  3. package/dist/admin-console/__tests__/backoffice.router.test.js.map +1 -1
  4. package/dist/admin-console/__tests__/backoffice.service.test.js +110 -10
  5. package/dist/admin-console/__tests__/backoffice.service.test.js.map +1 -1
  6. package/dist/admin-console/contract/index.d.ts +164 -0
  7. package/dist/admin-console/contract/index.d.ts.map +1 -1
  8. package/dist/admin-console/contract/index.js +66 -1
  9. package/dist/admin-console/contract/index.js.map +1 -1
  10. package/dist/admin-console/plugin.d.ts.map +1 -1
  11. package/dist/admin-console/plugin.js +3 -3
  12. package/dist/admin-console/plugin.js.map +1 -1
  13. package/dist/admin-console/router/index.d.ts +64 -0
  14. package/dist/admin-console/router/index.d.ts.map +1 -1
  15. package/dist/admin-console/router/index.js +8 -0
  16. package/dist/admin-console/router/index.js.map +1 -1
  17. package/dist/admin-console/service/backoffice.service.d.ts +14 -3
  18. package/dist/admin-console/service/backoffice.service.d.ts.map +1 -1
  19. package/dist/admin-console/service/backoffice.service.js +29 -1
  20. package/dist/admin-console/service/backoffice.service.js.map +1 -1
  21. package/dist/casino/gaming/__tests__/admin-reporting.test.d.ts +2 -0
  22. package/dist/casino/gaming/__tests__/admin-reporting.test.d.ts.map +1 -0
  23. package/dist/casino/gaming/__tests__/admin-reporting.test.js +87 -0
  24. package/dist/casino/gaming/__tests__/admin-reporting.test.js.map +1 -0
  25. package/dist/casino/gaming/admin-reporting.d.ts +8 -0
  26. package/dist/casino/gaming/admin-reporting.d.ts.map +1 -0
  27. package/dist/casino/gaming/admin-reporting.js +62 -0
  28. package/dist/casino/gaming/admin-reporting.js.map +1 -0
  29. package/dist/casino/gaming/contract/index.d.ts +16 -0
  30. package/dist/casino/gaming/contract/index.d.ts.map +1 -1
  31. package/dist/casino/gaming/contract/index.js +3 -1
  32. package/dist/casino/gaming/contract/index.js.map +1 -1
  33. package/dist/casino/gaming/drizzle/migrations/0002_yummy_lifeguard.sql +4 -0
  34. package/dist/casino/gaming/drizzle/migrations/meta/0002_snapshot.json +237 -0
  35. package/dist/casino/gaming/drizzle/migrations/meta/_journal.json +7 -0
  36. package/dist/casino/gaming/plugin.d.ts.map +1 -1
  37. package/dist/casino/gaming/plugin.js +3 -1
  38. package/dist/casino/gaming/plugin.js.map +1 -1
  39. package/dist/casino/gaming/router/index.d.ts +10 -0
  40. package/dist/casino/gaming/router/index.d.ts.map +1 -1
  41. package/dist/casino/gaming/schema/index.d.ts +18 -0
  42. package/dist/casino/gaming/schema/index.d.ts.map +1 -1
  43. package/dist/casino/gaming/schema/index.js +11 -1
  44. package/dist/casino/gaming/schema/index.js.map +1 -1
  45. package/dist/casino/gaming/service/gaming.service.d.ts +2 -0
  46. package/dist/casino/gaming/service/gaming.service.d.ts.map +1 -1
  47. package/dist/casino/gaming/service/gaming.service.js +1 -0
  48. package/dist/casino/gaming/service/gaming.service.js.map +1 -1
  49. package/dist/contracts/adapters/admin-game-reporting.d.ts +25 -0
  50. package/dist/contracts/adapters/admin-game-reporting.d.ts.map +1 -0
  51. package/dist/contracts/adapters/admin-game-reporting.js +15 -0
  52. package/dist/contracts/adapters/admin-game-reporting.js.map +1 -0
  53. package/dist/contracts/adapters/admin-player-activity.d.ts +29 -0
  54. package/dist/contracts/adapters/admin-player-activity.d.ts.map +1 -0
  55. package/dist/contracts/adapters/admin-player-activity.js +3 -0
  56. package/dist/contracts/adapters/admin-player-activity.js.map +1 -0
  57. package/dist/contracts/adapters/index.d.ts +4 -0
  58. package/dist/contracts/adapters/index.d.ts.map +1 -1
  59. package/dist/contracts/adapters/index.js +2 -0
  60. package/dist/contracts/adapters/index.js.map +1 -1
  61. package/dist/contracts/schemas/common.d.ts +2 -0
  62. package/dist/contracts/schemas/common.d.ts.map +1 -1
  63. package/dist/contracts/schemas/common.js +6 -0
  64. package/dist/contracts/schemas/common.js.map +1 -1
  65. package/dist/contracts/schemas/game.d.ts +9 -0
  66. package/dist/contracts/schemas/game.d.ts.map +1 -0
  67. package/dist/contracts/schemas/game.js +10 -0
  68. package/dist/contracts/schemas/game.js.map +1 -0
  69. package/dist/contracts/schemas/index.d.ts +1 -0
  70. package/dist/contracts/schemas/index.d.ts.map +1 -1
  71. package/dist/contracts/schemas/index.js +1 -0
  72. package/dist/contracts/schemas/index.js.map +1 -1
  73. package/dist/iam/__tests__/admin-player-activity.test.d.ts +2 -0
  74. package/dist/iam/__tests__/admin-player-activity.test.d.ts.map +1 -0
  75. package/dist/iam/__tests__/admin-player-activity.test.js +58 -0
  76. package/dist/iam/__tests__/admin-player-activity.test.js.map +1 -0
  77. package/dist/iam/adapters/admin-player-activity.d.ts +10 -0
  78. package/dist/iam/adapters/admin-player-activity.d.ts.map +1 -0
  79. package/dist/iam/adapters/admin-player-activity.js +99 -0
  80. package/dist/iam/adapters/admin-player-activity.js.map +1 -0
  81. package/dist/iam/plugin.d.ts.map +1 -1
  82. package/dist/iam/plugin.js +3 -1
  83. package/dist/iam/plugin.js.map +1 -1
  84. package/dist/iam/service/iam.service.d.ts +1 -1
  85. package/package.json +1 -1
@@ -205,5 +205,69 @@ export declare function createBackofficeRouter(backofficeService: BackofficeServ
205
205
  reviewedAt: import("zod").ZodNullable<import("zod").ZodISODateTime>;
206
206
  reviewReason: import("zod").ZodNullable<import("zod").ZodString>;
207
207
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
208
+ getGamePerformance: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
209
+ gameType: import("zod").ZodOptional<import("zod").ZodEnum<{
210
+ original: "original";
211
+ casino: "casino";
212
+ sportsbook: "sportsbook";
213
+ }>>;
214
+ dateFrom: import("zod").ZodOptional<import("zod").ZodISODateTime>;
215
+ dateTo: import("zod").ZodOptional<import("zod").ZodISODateTime>;
216
+ sortBy: import("zod").ZodOptional<import("zod").ZodEnum<{
217
+ name: "name";
218
+ gameType: "gameType";
219
+ volume: "volume";
220
+ revenue: "revenue";
221
+ uniquePlayers: "uniquePlayers";
222
+ roundsPlayed: "roundsPlayed";
223
+ }>>;
224
+ sortDir: import("zod").ZodOptional<import("zod").ZodEnum<{
225
+ asc: "asc";
226
+ desc: "desc";
227
+ }>>;
228
+ }, import("zod/v4/core").$strip>, import("zod").ZodArray<import("zod").ZodObject<{
229
+ gameId: import("zod").ZodUUID;
230
+ name: import("zod").ZodString;
231
+ gameType: import("zod").ZodEnum<{
232
+ original: "original";
233
+ casino: "casino";
234
+ sportsbook: "sportsbook";
235
+ }>;
236
+ volume: import("zod").ZodString;
237
+ revenue: import("zod").ZodString;
238
+ uniquePlayers: import("zod").ZodNumber;
239
+ roundsPlayed: import("zod").ZodNumber;
240
+ }, import("zod/v4/core").$strip>>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
241
+ getPlayerActivity: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
242
+ dateFrom: import("zod").ZodOptional<import("zod").ZodISODateTime>;
243
+ dateTo: import("zod").ZodOptional<import("zod").ZodISODateTime>;
244
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
245
+ registrationsOverTime: import("zod").ZodArray<import("zod").ZodObject<{
246
+ date: import("zod").ZodISODate;
247
+ registrations: import("zod").ZodNumber;
248
+ }, import("zod/v4/core").$strip>>;
249
+ activeUsersTrend: import("zod").ZodArray<import("zod").ZodObject<{
250
+ date: import("zod").ZodISODate;
251
+ dau: import("zod").ZodNumber;
252
+ wau: import("zod").ZodNumber;
253
+ mau: import("zod").ZodNumber;
254
+ }, import("zod/v4/core").$strip>>;
255
+ retention: import("zod").ZodObject<{
256
+ sevenDay: import("zod").ZodArray<import("zod").ZodObject<{
257
+ cohortDate: import("zod").ZodISODate;
258
+ cohortSize: import("zod").ZodNumber;
259
+ returned: import("zod").ZodNumber;
260
+ returnRate: import("zod").ZodNumber;
261
+ isComplete: import("zod").ZodBoolean;
262
+ }, import("zod/v4/core").$strip>>;
263
+ thirtyDay: import("zod").ZodArray<import("zod").ZodObject<{
264
+ cohortDate: import("zod").ZodISODate;
265
+ cohortSize: import("zod").ZodNumber;
266
+ returned: import("zod").ZodNumber;
267
+ returnRate: import("zod").ZodNumber;
268
+ isComplete: import("zod").ZodBoolean;
269
+ }, import("zod/v4/core").$strip>>;
270
+ }, import("zod/v4/core").$strip>;
271
+ }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
208
272
  };
209
273
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin-console/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAa,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EACL,iBAAiB,EAGlB,MAAM,kCAAkC,CAAC;AAE1C,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyEtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin-console/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAa,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EACL,iBAAiB,EAGlB,MAAM,kCAAkC,CAAC;AAE1C,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmFtB"}
@@ -54,6 +54,14 @@ export function createBackofficeRouter(backofficeService, adminGuard, audit) {
54
54
  await adminGuard.assert(context, 'transaction', 'view');
55
55
  return mapErrors({ NOT_FOUND: TransactionNotFoundError }, () => backofficeService.getTransaction(input.id));
56
56
  }),
57
+ getGamePerformance: os.getGamePerformance.handler(async ({ input, context }) => {
58
+ await adminGuard.assert(context, 'report', 'view');
59
+ return backofficeService.getGamePerformance(input);
60
+ }),
61
+ getPlayerActivity: os.getPlayerActivity.handler(async ({ input, context }) => {
62
+ await adminGuard.assert(context, 'report', 'view');
63
+ return backofficeService.getPlayerActivity(input);
64
+ }),
57
65
  });
58
66
  }
59
67
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin-console/router/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin-console/router/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
- import type { AdminUserDirectory, AdminUserListOptions, AdminUserRow, AdminWalletReporting, User, UserRole, ClientMeta } from '@openora/core/contracts';
2
- import type { TransactionFilter } from '../contract/index.js';
1
+ import type { AdminGameReporting, AdminPlayerActivity, AdminUserDirectory, AdminUserListOptions, AdminUserRow, AdminWalletReporting, User, UserRole, ClientMeta } from '@openora/core/contracts';
2
+ import type { GamePerformanceFilter, PlayerActivityFilter, TransactionFilter } from '../contract/index.js';
3
3
  export declare const UserNotFoundError: new (id: string) => Error;
4
4
  export declare const TransactionNotFoundError: new (id: string) => Error;
5
5
  export declare class BackofficeService {
6
6
  private readonly users;
7
7
  private readonly reporting;
8
- constructor(users: AdminUserDirectory, reporting: AdminWalletReporting);
8
+ private readonly gameReporting;
9
+ private readonly playerActivity;
10
+ constructor(users: AdminUserDirectory, reporting: AdminWalletReporting, gameReporting: AdminGameReporting, playerActivity: AdminPlayerActivity);
9
11
  getStats(): Promise<{
10
12
  totalUsers: number;
11
13
  activeUsers: number;
@@ -59,5 +61,14 @@ export declare class BackofficeService {
59
61
  reviewedAt: string;
60
62
  }>;
61
63
  private lookupPlayerMap;
64
+ getGamePerformance(filter: GamePerformanceFilter): Promise<import("@openora/core/contracts").GamePerformanceRow[]>;
65
+ getPlayerActivity(filter: PlayerActivityFilter): Promise<{
66
+ registrationsOverTime: import("@openora/core/contracts").RegistrationsOverTimePoint[];
67
+ activeUsersTrend: import("@openora/core/contracts").ActiveUsersTrendPoint[];
68
+ retention: {
69
+ sevenDay: import("@openora/core/contracts").RetentionCohortRow[];
70
+ thirtyDay: import("@openora/core/contracts").RetentionCohortRow[];
71
+ };
72
+ }>;
62
73
  }
63
74
  //# sourceMappingURL=backoffice.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backoffice.service.d.ts","sourceRoot":"","sources":["../../../src/admin-console/service/backoffice.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,IAAI,EACJ,QAAQ,EACR,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,2BAA4B,CAAC;AAC3D,eAAO,MAAM,wBAAwB,2BAAmC,CAAC;AAsBzE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,oBAAoB;IAG5C,QAAQ;;;;;;;IAWR,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,oBAAoB;;;;;;IAK1E,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;IAQ1B,UAAU,CACd,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAClB,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE,EAC7C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EACnB,IAAI,CAAC,EAAE,UAAU;IASb,gBAAgB,CAAC,OAAO,EAAE,iBAAiB;;;;;;;;;;;;;;;;IAwD3C,cAAc,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;YASjB,eAAe;CAQ9B"}
1
+ {"version":3,"file":"backoffice.service.d.ts","sourceRoot":"","sources":["../../../src/admin-console/service/backoffice.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAInB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,IAAI,EACJ,QAAQ,EACR,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,iBAAiB,2BAA4B,CAAC;AAC3D,eAAO,MAAM,wBAAwB,2BAAmC,CAAC;AAsBzE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAHd,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,oBAAoB,EAC/B,aAAa,EAAE,kBAAkB,EACjC,cAAc,EAAE,mBAAmB;IAGhD,QAAQ;;;;;;;IAWR,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,oBAAoB;;;;;;IAK1E,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;IAQ1B,UAAU,CACd,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAClB,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE,EAC7C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EACnB,IAAI,CAAC,EAAE,UAAU;IASb,gBAAgB,CAAC,OAAO,EAAE,iBAAiB;;;;;;;;;;;;;;;;IAwD3C,cAAc,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;YASjB,eAAe;IAWvB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB;IAUhD,iBAAiB,CAAC,MAAM,EAAE,oBAAoB;;;;;;;;CAarD"}
@@ -21,9 +21,13 @@ function toAdminTransactionDetail(r, player) {
21
21
  export class BackofficeService {
22
22
  users;
23
23
  reporting;
24
- constructor(users, reporting) {
24
+ gameReporting;
25
+ playerActivity;
26
+ constructor(users, reporting, gameReporting, playerActivity) {
25
27
  this.users = users;
26
28
  this.reporting = reporting;
29
+ this.gameReporting = gameReporting;
30
+ this.playerActivity = playerActivity;
27
31
  }
28
32
  async getStats() {
29
33
  const [totalUsers, totals] = await Promise.all([this.users.count(), this.reporting.totals()]);
@@ -107,5 +111,29 @@ export class BackofficeService {
107
111
  const summaries = await this.users.lookupPlayers(unique);
108
112
  return new Map(summaries.map((s) => [s.userId, s]));
109
113
  }
114
+ // The port's row shape already matches GamePerformanceSchema field-for-field (no
115
+ // Date/Decimal to serialize - volume/revenue are already decimal strings) - no mapping.
116
+ async getGamePerformance(filter) {
117
+ return this.gameReporting.listGamePerformance({
118
+ dateFrom: filter.dateFrom ? new Date(filter.dateFrom) : undefined,
119
+ dateTo: filter.dateTo ? new Date(filter.dateTo) : undefined,
120
+ gameType: filter.gameType,
121
+ sortBy: filter.sortBy,
122
+ sortDir: filter.sortDir,
123
+ });
124
+ }
125
+ async getPlayerActivity(filter) {
126
+ const portFilter = {
127
+ dateFrom: filter.dateFrom ? new Date(filter.dateFrom) : undefined,
128
+ dateTo: filter.dateTo ? new Date(filter.dateTo) : undefined,
129
+ };
130
+ const [registrationsOverTime, activeUsersTrend, sevenDay, thirtyDay] = await Promise.all([
131
+ this.playerActivity.getRegistrationsOverTime(portFilter),
132
+ this.playerActivity.getActiveUsersTrend(portFilter),
133
+ this.playerActivity.getRetentionCohorts(portFilter, 7),
134
+ this.playerActivity.getRetentionCohorts(portFilter, 30),
135
+ ]);
136
+ return { registrationsOverTime, activeUsersTrend, retention: { sevenDay, thirtyDay } };
137
+ }
110
138
  }
111
139
  //# sourceMappingURL=backoffice.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backoffice.service.js","sourceRoot":"","sources":["../../../src/admin-console/service/backoffice.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backoffice.service.js","sourceRoot":"","sources":["../../../src/admin-console/service/backoffice.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=admin-reporting.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-reporting.test.d.ts","sourceRoot":"","sources":["../../../../src/casino/gaming/__tests__/admin-reporting.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { mock } from '../../../testing/mock.js';
3
+ import { DrizzleAdminGameReporting } from '../admin-reporting.js';
4
+ function makeDrizzle(rows) {
5
+ const whereArgs = [];
6
+ const orderByArgs = [];
7
+ const builder = {};
8
+ const chain = () => builder;
9
+ builder['select'] = vi.fn(chain);
10
+ builder['from'] = vi.fn(chain);
11
+ builder['leftJoin'] = vi.fn(chain);
12
+ builder['groupBy'] = vi.fn(chain);
13
+ builder['orderBy'] = vi.fn((arg) => {
14
+ orderByArgs.push(arg);
15
+ return builder;
16
+ });
17
+ builder['where'] = vi.fn((arg) => {
18
+ whereArgs.push(arg);
19
+ return builder;
20
+ });
21
+ // oxlint-disable-next-line unicorn/no-thenable -- builder must be awaitable to mimic Drizzle.
22
+ builder['then'] = (resolve) => resolve(rows);
23
+ const db = { ...builder };
24
+ return { drizzle: mock({ db }), whereArgs, orderByArgs };
25
+ }
26
+ function row(over = {}) {
27
+ return {
28
+ gameId: 'g-1',
29
+ name: 'Aces',
30
+ gameType: 'casino',
31
+ volume: '1000',
32
+ revenue: '200',
33
+ uniquePlayers: '3',
34
+ roundsPlayed: '10',
35
+ ...over,
36
+ };
37
+ }
38
+ describe('DrizzleAdminGameReporting.listGamePerformance', () => {
39
+ it('maps rows and coerces count columns to numbers', async () => {
40
+ const { drizzle } = makeDrizzle([row()]);
41
+ const reporting = new DrizzleAdminGameReporting(drizzle);
42
+ const rows = await reporting.listGamePerformance({});
43
+ expect(rows).toEqual([
44
+ {
45
+ gameId: 'g-1',
46
+ name: 'Aces',
47
+ gameType: 'casino',
48
+ volume: '1000',
49
+ revenue: '200',
50
+ uniquePlayers: 3,
51
+ roundsPlayed: 10,
52
+ },
53
+ ]);
54
+ });
55
+ it('keeps a negative revenue string intact (GGR can go negative)', async () => {
56
+ const { drizzle } = makeDrizzle([row({ revenue: '-50' })]);
57
+ const reporting = new DrizzleAdminGameReporting(drizzle);
58
+ const rows = await reporting.listGamePerformance({});
59
+ expect(rows[0]?.revenue).toBe('-50');
60
+ });
61
+ it('adds a WHERE clause when gameType is filtered', async () => {
62
+ const { drizzle, whereArgs } = makeDrizzle([]);
63
+ const reporting = new DrizzleAdminGameReporting(drizzle);
64
+ await reporting.listGamePerformance({ gameType: 'sportsbook' });
65
+ expect(whereArgs).toEqual([expect.anything()]);
66
+ });
67
+ it('passes an undefined WHERE when no gameType filter is given', async () => {
68
+ const { drizzle, whereArgs } = makeDrizzle([]);
69
+ const reporting = new DrizzleAdminGameReporting(drizzle);
70
+ await reporting.listGamePerformance({});
71
+ expect(whereArgs).toEqual([undefined]);
72
+ });
73
+ it('sorts by the requested column and direction', async () => {
74
+ const { drizzle, orderByArgs } = makeDrizzle([]);
75
+ const reporting = new DrizzleAdminGameReporting(drizzle);
76
+ await reporting.listGamePerformance({ sortBy: 'name', sortDir: 'asc' });
77
+ expect(orderByArgs).toHaveLength(1);
78
+ });
79
+ it('defaults to a defined sort when sortBy is omitted', async () => {
80
+ const { drizzle, orderByArgs } = makeDrizzle([]);
81
+ const reporting = new DrizzleAdminGameReporting(drizzle);
82
+ await reporting.listGamePerformance({});
83
+ expect(orderByArgs).toHaveLength(1);
84
+ expect(orderByArgs[0]).toBeDefined();
85
+ });
86
+ });
87
+ //# sourceMappingURL=admin-reporting.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-reporting.test.js","sourceRoot":"","sources":["../../../../src/casino/gaming/__tests__/admin-reporting.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AdminGameReporting, GamePerformanceFilter, GamePerformanceRow } from '@openora/core/contracts';
2
+ import { DrizzleService } from '@openora/core/server';
3
+ export declare class DrizzleAdminGameReporting implements AdminGameReporting {
4
+ private readonly drizzle;
5
+ constructor(drizzle: DrizzleService);
6
+ listGamePerformance(filter: GamePerformanceFilter): Promise<GamePerformanceRow[]>;
7
+ }
8
+ //# sourceMappingURL=admin-reporting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-reporting.d.ts","sourceRoot":"","sources":["../../../src/casino/gaming/admin-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAKtD,qBAAa,yBAA0B,YAAW,kBAAkB;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAyDxF"}
@@ -0,0 +1,62 @@
1
+ import { and, asc, desc, eq, gte, lte, sql } from 'drizzle-orm';
2
+ import { game, gameRound } from './schema/index.js';
3
+ // See ADR-0017/0025.
4
+ export class DrizzleAdminGameReporting {
5
+ drizzle;
6
+ constructor(drizzle) {
7
+ this.drizzle = drizzle;
8
+ }
9
+ async listGamePerformance(filter) {
10
+ const db = this.drizzle.db;
11
+ // status/date filters scope which ROUNDS count towards a game's metrics, so they
12
+ // live in the join condition, not WHERE - a game with zero completed rounds in
13
+ // range still appears with all-zero metrics rather than being dropped from the
14
+ // report. `gameType` narrows which GAMES appear at all, so it stays in WHERE.
15
+ const joinConditions = [
16
+ eq(gameRound.gameId, game.id),
17
+ eq(gameRound.status, 'completed'),
18
+ filter.dateFrom ? gte(gameRound.startedAt, filter.dateFrom) : undefined,
19
+ filter.dateTo ? lte(gameRound.startedAt, filter.dateTo) : undefined,
20
+ ].filter(Boolean);
21
+ const where = filter.gameType ? eq(game.gameType, filter.gameType) : undefined;
22
+ const volume = sql `coalesce(sum(${gameRound.betAmount}), 0)`;
23
+ // GGR - can be negative when a game pays out more than it takes in over the range.
24
+ const revenue = sql `coalesce(sum(${gameRound.betAmount}) - sum(${gameRound.winAmount}), 0)`;
25
+ const uniquePlayers = sql `count(distinct ${gameRound.userId})`;
26
+ const roundsPlayed = sql `count(${gameRound.id})`;
27
+ const sortColumns = {
28
+ name: game.name,
29
+ gameType: game.gameType,
30
+ volume,
31
+ revenue,
32
+ uniquePlayers,
33
+ roundsPlayed,
34
+ };
35
+ const order = filter.sortDir === 'asc' ? asc : desc;
36
+ const rows = await db
37
+ .select({
38
+ gameId: game.id,
39
+ name: game.name,
40
+ gameType: game.gameType,
41
+ volume,
42
+ revenue,
43
+ uniquePlayers,
44
+ roundsPlayed,
45
+ })
46
+ .from(game)
47
+ .leftJoin(gameRound, and(...joinConditions))
48
+ .where(where)
49
+ .groupBy(game.id, game.name, game.gameType)
50
+ .orderBy(order(sortColumns[filter.sortBy ?? 'volume']));
51
+ return rows.map((r) => ({
52
+ gameId: r.gameId,
53
+ name: r.name,
54
+ gameType: r.gameType,
55
+ volume: r.volume,
56
+ revenue: r.revenue,
57
+ uniquePlayers: Number(r.uniquePlayers),
58
+ roundsPlayed: Number(r.roundsPlayed),
59
+ }));
60
+ }
61
+ }
62
+ //# sourceMappingURL=admin-reporting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-reporting.js","sourceRoot":"","sources":["../../../src/casino/gaming/admin-reporting.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import * as z from 'zod';
2
+ export { GameTypeSchema } from '@openora/core/contracts';
2
3
  export declare const GAME_ROUND_STATUSES: readonly ["active", "completed", "cancelled"];
3
4
  export declare const GameRoundStatusSchema: z.ZodEnum<{
4
5
  active: "active";
@@ -11,6 +12,11 @@ export declare const GameSchema: z.ZodObject<{
11
12
  name: z.ZodString;
12
13
  provider: z.ZodString;
13
14
  category: z.ZodString;
15
+ gameType: z.ZodEnum<{
16
+ original: "original";
17
+ casino: "casino";
18
+ sportsbook: "sportsbook";
19
+ }>;
14
20
  thumbnailUrl: z.ZodNullable<z.ZodString>;
15
21
  isActive: z.ZodBoolean;
16
22
  metadata: z.ZodNullable<z.ZodUnknown>;
@@ -55,6 +61,11 @@ export declare const gamingContract: {
55
61
  name: z.ZodString;
56
62
  provider: z.ZodString;
57
63
  category: z.ZodString;
64
+ gameType: z.ZodEnum<{
65
+ original: "original";
66
+ casino: "casino";
67
+ sportsbook: "sportsbook";
68
+ }>;
58
69
  thumbnailUrl: z.ZodNullable<z.ZodString>;
59
70
  isActive: z.ZodBoolean;
60
71
  metadata: z.ZodNullable<z.ZodUnknown>;
@@ -66,6 +77,11 @@ export declare const gamingContract: {
66
77
  name: z.ZodString;
67
78
  provider: z.ZodString;
68
79
  category: z.ZodString;
80
+ gameType: z.ZodEnum<{
81
+ original: "original";
82
+ casino: "casino";
83
+ sportsbook: "sportsbook";
84
+ }>;
69
85
  thumbnailUrl: z.ZodNullable<z.ZodString>;
70
86
  isActive: z.ZodBoolean;
71
87
  metadata: z.ZodNullable<z.ZodUnknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAQzB,eAAO,MAAM,mBAAmB,+CAAgD,CAAC;AACjF,eAAO,MAAM,qBAAqB;;;;EAA8B,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,UAAU;;;;;;;;iBAQrB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;iBAU1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,yBAAyB,aAEpC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmB1B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AASzB,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,eAAO,MAAM,mBAAmB,+CAAgD,CAAC;AACjF,eAAO,MAAM,qBAAqB;;;;EAA8B,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,UAAU;;;;;;;;;;;;;iBASrB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;iBAU1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,yBAAyB,aAEpC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmB1B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { oc } from '@orpc/contract';
2
2
  import * as z from 'zod';
3
- import { CurrencyCodeSchema, IdInputSchema, MoneyAmountSchema, UuidSchema, } from '@openora/core/contracts';
3
+ import { CurrencyCodeSchema, GameTypeSchema, IdInputSchema, MoneyAmountSchema, UuidSchema, } from '@openora/core/contracts';
4
+ export { GameTypeSchema } from '@openora/core/contracts';
4
5
  export const GAME_ROUND_STATUSES = ['active', 'completed', 'cancelled'];
5
6
  export const GameRoundStatusSchema = z.enum(GAME_ROUND_STATUSES);
6
7
  export const GameSchema = z.object({
@@ -8,6 +9,7 @@ export const GameSchema = z.object({
8
9
  name: z.string(),
9
10
  provider: z.string(),
10
11
  category: z.string(),
12
+ gameType: GameTypeSchema,
11
13
  thumbnailUrl: z.string().nullable(),
12
14
  isActive: z.boolean(),
13
15
  metadata: z.unknown().nullable(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/casino/gaming/contract/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ CREATE TYPE "public"."game_type" AS ENUM('original', 'casino', 'sportsbook');--> statement-breakpoint
2
+ ALTER TABLE "game" ADD COLUMN "game_type" "game_type" DEFAULT 'casino' NOT NULL;--> statement-breakpoint
3
+ CREATE INDEX "game_round_game_id_started_at_idx" ON "game_round" USING btree ("game_id","started_at");--> statement-breakpoint
4
+ CREATE INDEX "game_round_started_at_idx" ON "game_round" USING btree ("started_at");