@openora/core 0.4.1-canary.47 → 0.4.1-canary.49

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 (44) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/admin-console/__tests__/backoffice.service.test.js +62 -41
  3. package/dist/admin-console/__tests__/backoffice.service.test.js.map +1 -1
  4. package/dist/admin-console/contract/index.d.ts +2 -1
  5. package/dist/admin-console/contract/index.d.ts.map +1 -1
  6. package/dist/admin-console/contract/index.js +2 -9
  7. package/dist/admin-console/contract/index.js.map +1 -1
  8. package/dist/admin-console/router/index.d.ts +1 -0
  9. package/dist/admin-console/router/index.d.ts.map +1 -1
  10. package/dist/admin-console/service/backoffice.service.d.ts.map +1 -1
  11. package/dist/admin-console/service/backoffice.service.js +1 -0
  12. package/dist/admin-console/service/backoffice.service.js.map +1 -1
  13. package/dist/analytics/__tests__/funnel-analytics.service.test.js +3 -3
  14. package/dist/analytics/__tests__/funnel-analytics.service.test.js.map +1 -1
  15. package/dist/analytics/contract/funnel.d.ts +3 -3
  16. package/dist/analytics/contract/funnel.js +1 -1
  17. package/dist/analytics/contract/funnel.js.map +1 -1
  18. package/dist/analytics/contract/index.d.ts +1 -1
  19. package/dist/analytics/router/index.d.ts +1 -1
  20. package/dist/analytics/service/funnel-analytics.service.js +1 -1
  21. package/dist/analytics/service/funnel-analytics.service.js.map +1 -1
  22. package/dist/audit/contract/index.d.ts +2 -2
  23. package/dist/audit/router/index.d.ts +1 -1
  24. package/dist/casino/gaming/__tests__/admin-reporting.test.js +114 -75
  25. package/dist/casino/gaming/__tests__/admin-reporting.test.js.map +1 -1
  26. package/dist/casino/gaming/admin-reporting.d.ts.map +1 -1
  27. package/dist/casino/gaming/admin-reporting.js +6 -3
  28. package/dist/casino/gaming/admin-reporting.js.map +1 -1
  29. package/dist/casino/server.d.ts +1 -0
  30. package/dist/casino/server.d.ts.map +1 -1
  31. package/dist/casino/server.js +1 -0
  32. package/dist/casino/server.js.map +1 -1
  33. package/dist/contracts/adapters/admin-game-reporting.d.ts +1 -0
  34. package/dist/contracts/adapters/admin-game-reporting.d.ts.map +1 -1
  35. package/dist/contracts/adapters/admin-game-reporting.js.map +1 -1
  36. package/dist/contracts/schemas/game.d.ts.map +1 -1
  37. package/dist/contracts/schemas/game.js +0 -6
  38. package/dist/contracts/schemas/game.js.map +1 -1
  39. package/dist/iam/__tests__/admin-player-activity.test.js +111 -43
  40. package/dist/iam/__tests__/admin-player-activity.test.js.map +1 -1
  41. package/dist/iam/adapters/admin-player-activity.d.ts.map +1 -1
  42. package/dist/iam/adapters/admin-player-activity.js +21 -14
  43. package/dist/iam/adapters/admin-player-activity.js.map +1 -1
  44. package/package.json +1 -1
@@ -10,8 +10,6 @@ function resolveRange(filter) {
10
10
  const from = filter.dateFrom ?? new Date(to.getTime() - DEFAULT_RANGE_DAYS * 24 * 60 * 60 * 1000);
11
11
  return { from, to };
12
12
  }
13
- // See ADR-0017/0025. iam/AGENTS.md documents why this port lives here even though
14
- // identity owns the underlying tables.
15
13
  export class DrizzleAdminPlayerActivity {
16
14
  drizzle;
17
15
  constructor(drizzle) {
@@ -35,18 +33,28 @@ export class DrizzleAdminPlayerActivity {
35
33
  // the same "active" definition reused below for retention's "has a session row" check.
36
34
  async getActiveUsersTrend(filter) {
37
35
  const { from, to } = resolveRange(filter);
36
+ // A single join bounded by the widest (MAU) window, then FILTER narrows the
37
+ // distinct-user count per day - one pass over `session` instead of three
38
+ // correlated subqueries re-scanning it for every generated day.
38
39
  const result = await this.drizzle.db.execute(sql `
39
40
  select
40
41
  gs::date::text as date,
41
- (select count(distinct ${session.userId}) from ${session}
42
- where ${session.updatedAt} >= gs and ${session.updatedAt} < gs + interval '1 day') as dau,
43
- (select count(distinct ${session.userId}) from ${session}
42
+ count(distinct ${session.userId}) filter (
43
+ where ${session.updatedAt} >= gs and ${session.updatedAt} < gs + interval '1 day'
44
+ ) as dau,
45
+ count(distinct ${session.userId}) filter (
44
46
  where ${session.updatedAt} >= gs - interval '6 days'
45
- and ${session.updatedAt} < gs + interval '1 day') as wau,
46
- (select count(distinct ${session.userId}) from ${session}
47
+ and ${session.updatedAt} < gs + interval '1 day'
48
+ ) as wau,
49
+ count(distinct ${session.userId}) filter (
47
50
  where ${session.updatedAt} >= gs - interval '29 days'
48
- and ${session.updatedAt} < gs + interval '1 day') as mau
51
+ and ${session.updatedAt} < gs + interval '1 day'
52
+ ) as mau
49
53
  from generate_series(${from}::date, ${to}::date, interval '1 day') as gs
54
+ left join ${session}
55
+ on ${session.updatedAt} >= gs - interval '29 days'
56
+ and ${session.updatedAt} < gs + interval '1 day'
57
+ group by gs
50
58
  order by gs
51
59
  `);
52
60
  return result.rows.map((r) => ({
@@ -60,18 +68,17 @@ export class DrizzleAdminPlayerActivity {
60
68
  const { from, to } = resolveRange(filter);
61
69
  const result = await this.drizzle.db.execute(sql `
62
70
  with cohort_users as (
63
- select ${user.id} as user_id, date_trunc('day', ${user.createdAt}) as cohort_date,
64
- ${user.createdAt} as registered_at
71
+ select ${user.id} as user_id, date_trunc('day', ${user.createdAt}) as cohort_date
65
72
  from ${user}
66
73
  where ${user.createdAt} >= ${from} and ${user.createdAt} <= ${to}
67
74
  ),
68
75
  returned_users as (
69
76
  select distinct cu.user_id
70
77
  from cohort_users cu
71
- inner join ${session} s
72
- on s.user_id = cu.user_id
73
- and s.updated_at >= cu.registered_at
74
- and s.updated_at <= cu.registered_at + interval '1 day' * ${windowDays}
78
+ inner join ${session}
79
+ on ${session.userId} = cu.user_id
80
+ and ${session.updatedAt} >= cu.cohort_date + interval '1 day'
81
+ and ${session.updatedAt} <= cu.cohort_date + interval '1 day' * ${windowDays}
75
82
  )
76
83
  select
77
84
  cu.cohort_date::date::text as cohort_date,
@@ -1 +1 @@
1
- {"version":3,"file":"admin-player-activity.js","sourceRoot":"","sources":["../../../src/iam/adapters/admin-player-activity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-player-activity.js","sourceRoot":"","sources":["../../../src/iam/adapters/admin-player-activity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openora/core",
3
- "version": "0.4.1-canary.47",
3
+ "version": "0.4.1-canary.49",
4
4
  "description": "Open-source, headless, plugin-based, AI-native iGaming framework - domain modules, plugin engine, Zod-first contracts, typed React SDK",
5
5
  "keywords": [
6
6
  "ai-native",