@the-situation/indexer 0.17.0 → 0.18.0

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 (133) hide show
  1. package/README.md +43 -4
  2. package/dist/aggregator/cohort.d.ts +30 -0
  3. package/dist/aggregator/cohort.d.ts.map +1 -0
  4. package/dist/aggregator/cohort.js +153 -0
  5. package/dist/aggregator/cohort.js.map +1 -0
  6. package/dist/aggregator/daily.d.ts +71 -0
  7. package/dist/aggregator/daily.d.ts.map +1 -0
  8. package/dist/aggregator/daily.js +249 -0
  9. package/dist/aggregator/daily.js.map +1 -0
  10. package/dist/aggregator/domains.d.ts +20 -0
  11. package/dist/aggregator/domains.d.ts.map +1 -0
  12. package/dist/aggregator/domains.js +38 -0
  13. package/dist/aggregator/domains.js.map +1 -0
  14. package/dist/aggregator/index.d.ts +31 -0
  15. package/dist/aggregator/index.d.ts.map +1 -0
  16. package/dist/aggregator/index.js +100 -0
  17. package/dist/aggregator/index.js.map +1 -0
  18. package/dist/aggregator/lifetime.d.ts +52 -0
  19. package/dist/aggregator/lifetime.d.ts.map +1 -0
  20. package/dist/aggregator/lifetime.js +222 -0
  21. package/dist/aggregator/lifetime.js.map +1 -0
  22. package/dist/aggregator/roi.d.ts +42 -0
  23. package/dist/aggregator/roi.d.ts.map +1 -0
  24. package/dist/aggregator/roi.js +153 -0
  25. package/dist/aggregator/roi.js.map +1 -0
  26. package/dist/aggregator/sources.d.ts +59 -0
  27. package/dist/aggregator/sources.d.ts.map +1 -0
  28. package/dist/aggregator/sources.js +53 -0
  29. package/dist/aggregator/sources.js.map +1 -0
  30. package/dist/aggregator/writers.d.ts +22 -0
  31. package/dist/aggregator/writers.d.ts.map +1 -0
  32. package/dist/aggregator/writers.js +147 -0
  33. package/dist/aggregator/writers.js.map +1 -0
  34. package/dist/api/app.d.ts +177 -13
  35. package/dist/api/app.d.ts.map +1 -1
  36. package/dist/api/app.js +4 -3
  37. package/dist/api/app.js.map +1 -1
  38. package/dist/api/routes/admin-subscriptions.d.ts +11 -11
  39. package/dist/api/routes/analytics.d.ts +205 -0
  40. package/dist/api/routes/analytics.d.ts.map +1 -0
  41. package/dist/api/routes/analytics.js +122 -0
  42. package/dist/api/routes/analytics.js.map +1 -0
  43. package/dist/api/routes/health.d.ts.map +1 -1
  44. package/dist/api/routes/health.js +2 -0
  45. package/dist/api/routes/health.js.map +1 -1
  46. package/dist/api/routes/index.d.ts +1 -0
  47. package/dist/api/routes/index.d.ts.map +1 -1
  48. package/dist/api/routes/index.js +1 -0
  49. package/dist/api/routes/index.js.map +1 -1
  50. package/dist/api/routes/rankings.d.ts +17 -3
  51. package/dist/api/routes/rankings.d.ts.map +1 -1
  52. package/dist/api/routes/rankings.js +44 -5
  53. package/dist/api/routes/rankings.js.map +1 -1
  54. package/dist/api/routes/trader-stats.d.ts +11 -2
  55. package/dist/api/routes/trader-stats.d.ts.map +1 -1
  56. package/dist/api/routes/trader-stats.js +72 -2
  57. package/dist/api/routes/trader-stats.js.map +1 -1
  58. package/dist/client/IndexerClient.d.ts +30 -1
  59. package/dist/client/IndexerClient.d.ts.map +1 -1
  60. package/dist/client/IndexerClient.js.map +1 -1
  61. package/dist/client/IndexerClientLive.d.ts.map +1 -1
  62. package/dist/client/IndexerClientLive.js +50 -1
  63. package/dist/client/IndexerClientLive.js.map +1 -1
  64. package/dist/client/convenience.d.ts +9 -2
  65. package/dist/client/convenience.d.ts.map +1 -1
  66. package/dist/client/convenience.js +9 -1
  67. package/dist/client/convenience.js.map +1 -1
  68. package/dist/client/index.d.ts +3 -2
  69. package/dist/client/index.d.ts.map +1 -1
  70. package/dist/client/index.js +1 -1
  71. package/dist/client/index.js.map +1 -1
  72. package/dist/config.d.ts +17 -1
  73. package/dist/config.d.ts.map +1 -1
  74. package/dist/config.js +39 -3
  75. package/dist/config.js.map +1 -1
  76. package/dist/etl/event-indexer.d.ts +1 -1
  77. package/dist/etl/lp-position-refresher.d.ts +2 -1
  78. package/dist/etl/lp-position-refresher.d.ts.map +1 -1
  79. package/dist/etl/lp-position-refresher.js +24 -11
  80. package/dist/etl/lp-position-refresher.js.map +1 -1
  81. package/dist/index.js +64 -8
  82. package/dist/index.js.map +1 -1
  83. package/dist/layers/ChainReaderLive.d.ts.map +1 -1
  84. package/dist/layers/ChainReaderLive.js +15 -0
  85. package/dist/layers/ChainReaderLive.js.map +1 -1
  86. package/dist/layers/VoyagerClientLive.d.ts +2 -1
  87. package/dist/layers/VoyagerClientLive.d.ts.map +1 -1
  88. package/dist/layers/VoyagerClientLive.js +89 -55
  89. package/dist/layers/VoyagerClientLive.js.map +1 -1
  90. package/dist/services/ChainReader.d.ts +10 -0
  91. package/dist/services/ChainReader.d.ts.map +1 -1
  92. package/dist/services/ChainReader.js.map +1 -1
  93. package/dist/services/VoyagerRateLimit.d.ts +11 -8
  94. package/dist/services/VoyagerRateLimit.d.ts.map +1 -1
  95. package/dist/services/VoyagerRateLimit.js +51 -26
  96. package/dist/services/VoyagerRateLimit.js.map +1 -1
  97. package/dist/types/analytics.d.ts +194 -0
  98. package/dist/types/analytics.d.ts.map +1 -0
  99. package/dist/types/analytics.js +10 -0
  100. package/dist/types/analytics.js.map +1 -0
  101. package/dist/types/api.d.ts +2 -0
  102. package/dist/types/api.d.ts.map +1 -1
  103. package/dist/types/index.d.ts +1 -0
  104. package/dist/types/index.d.ts.map +1 -1
  105. package/dist/warehouse/analytics-helpers.d.ts +36 -0
  106. package/dist/warehouse/analytics-helpers.d.ts.map +1 -0
  107. package/dist/warehouse/analytics-helpers.js +142 -0
  108. package/dist/warehouse/analytics-helpers.js.map +1 -0
  109. package/dist/warehouse/backfill.d.ts +26 -0
  110. package/dist/warehouse/backfill.d.ts.map +1 -0
  111. package/dist/warehouse/backfill.js +77 -0
  112. package/dist/warehouse/backfill.js.map +1 -0
  113. package/dist/warehouse/connection.d.ts +18 -0
  114. package/dist/warehouse/connection.d.ts.map +1 -0
  115. package/dist/warehouse/connection.js +24 -0
  116. package/dist/warehouse/connection.js.map +1 -0
  117. package/dist/warehouse/index.d.ts +14 -0
  118. package/dist/warehouse/index.d.ts.map +1 -0
  119. package/dist/warehouse/index.js +14 -0
  120. package/dist/warehouse/index.js.map +1 -0
  121. package/dist/warehouse/repositories/analytics.d.ts +61 -0
  122. package/dist/warehouse/repositories/analytics.d.ts.map +1 -0
  123. package/dist/warehouse/repositories/analytics.js +418 -0
  124. package/dist/warehouse/repositories/analytics.js.map +1 -0
  125. package/dist/warehouse/schema.d.ts +9 -0
  126. package/dist/warehouse/schema.d.ts.map +1 -0
  127. package/dist/warehouse/schema.js +219 -0
  128. package/dist/warehouse/schema.js.map +1 -0
  129. package/dist/warehouse/seed-domains.d.ts +29 -0
  130. package/dist/warehouse/seed-domains.d.ts.map +1 -0
  131. package/dist/warehouse/seed-domains.js +223 -0
  132. package/dist/warehouse/seed-domains.js.map +1 -0
  133. package/package.json +1 -1
@@ -0,0 +1,122 @@
1
+ /**
2
+ * GET /api/analytics/* — analytics endpoints backed by the Postgres warehouse.
3
+ *
4
+ * Routes:
5
+ * GET /api/analytics/overview — platform-wide headline stats
6
+ * GET /api/analytics/domains — per-domain summary list
7
+ * GET /api/analytics/domains/:slug — domain detail (time-series + top-N)
8
+ * GET /api/analytics/cohorts — cohort retention curves
9
+ * GET /api/analytics/roi — ROI distribution + summary stats
10
+ * GET /api/analytics/leaderboard — leaderboard with ?domain= and time window
11
+ * GET /api/analytics/traders/:address — per-trader analytics (per-domain + cohort)
12
+ *
13
+ * These routes are only registered when WAREHOUSE_DATABASE_URL is set.
14
+ *
15
+ * Validation errors throw via parseAnalyticsFilters / parseEntityType — the
16
+ * shared error-handler maps Error → 400 (we tag it explicitly via `set.status`).
17
+ */
18
+ import { Elysia } from 'elysia';
19
+ import { parseAnalyticsFilters, parseEntityType, } from '../../warehouse/analytics-helpers';
20
+ const ADDRESS_RE = /^0x[0-9a-fA-F]+$/;
21
+ const SLUG_RE = /^[a-z][a-z0-9_-]*$/;
22
+ const NOT_CONFIGURED_BODY = {
23
+ error: 'Analytics warehouse is not configured (set WAREHOUSE_DATABASE_URL).',
24
+ };
25
+ /**
26
+ * Registers analytics routes. When `repo` is null (warehouse not configured),
27
+ * every analytics route returns 503 with a clear message so consumers can
28
+ * fall back gracefully.
29
+ */
30
+ export const analyticsRoutes = (repo) => new Elysia()
31
+ .get('/api/analytics/overview', async ({ set }) => {
32
+ if (!repo) {
33
+ set.status = 503;
34
+ return NOT_CONFIGURED_BODY;
35
+ }
36
+ return repo.getOverview();
37
+ })
38
+ .get('/api/analytics/domains', async ({ set }) => {
39
+ if (!repo) {
40
+ set.status = 503;
41
+ return NOT_CONFIGURED_BODY;
42
+ }
43
+ return repo.getDomains();
44
+ })
45
+ .get('/api/analytics/domains/:slug', async ({ params, set }) => {
46
+ if (!repo) {
47
+ set.status = 503;
48
+ return NOT_CONFIGURED_BODY;
49
+ }
50
+ const slug = String(params.slug ?? '').toLowerCase();
51
+ if (!SLUG_RE.test(slug)) {
52
+ set.status = 400;
53
+ return { error: `Invalid domain slug: ${slug}` };
54
+ }
55
+ const detail = await repo.getDomainDetail(slug);
56
+ if (!detail) {
57
+ set.status = 404;
58
+ return { error: `Domain not found: ${slug}` };
59
+ }
60
+ return detail;
61
+ })
62
+ .get('/api/analytics/cohorts', async ({ query, set }) => {
63
+ if (!repo) {
64
+ set.status = 503;
65
+ return NOT_CONFIGURED_BODY;
66
+ }
67
+ const q = query;
68
+ try {
69
+ const filters = parseAnalyticsFilters({ domain: q.domain });
70
+ const entityType = parseEntityType(q.entityType ?? q.entity_type);
71
+ return await repo.getCohorts({ entityType, domain: filters.domain });
72
+ }
73
+ catch (err) {
74
+ set.status = 400;
75
+ return { error: err instanceof Error ? err.message : String(err) };
76
+ }
77
+ })
78
+ .get('/api/analytics/roi', async ({ query, set }) => {
79
+ if (!repo) {
80
+ set.status = 503;
81
+ return NOT_CONFIGURED_BODY;
82
+ }
83
+ const q = query;
84
+ try {
85
+ const filters = parseAnalyticsFilters({ domain: q.domain });
86
+ const entityType = parseEntityType(q.entityType ?? q.entity_type);
87
+ return await repo.getRoi({ entityType, domain: filters.domain });
88
+ }
89
+ catch (err) {
90
+ set.status = 400;
91
+ return { error: err instanceof Error ? err.message : String(err) };
92
+ }
93
+ })
94
+ .get('/api/analytics/leaderboard', async ({ query, set }) => {
95
+ if (!repo) {
96
+ set.status = 503;
97
+ return NOT_CONFIGURED_BODY;
98
+ }
99
+ const q = query;
100
+ try {
101
+ const filters = parseAnalyticsFilters(q);
102
+ const limit = Math.min(Math.max(1, Number.parseInt(q.limit ?? '50', 10) || 50), 500);
103
+ return await repo.getLeaderboard({ ...filters, limit });
104
+ }
105
+ catch (err) {
106
+ set.status = 400;
107
+ return { error: err instanceof Error ? err.message : String(err) };
108
+ }
109
+ })
110
+ .get('/api/analytics/traders/:address', async ({ params, set }) => {
111
+ if (!repo) {
112
+ set.status = 503;
113
+ return NOT_CONFIGURED_BODY;
114
+ }
115
+ const address = String(params.address ?? '');
116
+ if (!ADDRESS_RE.test(address)) {
117
+ set.status = 400;
118
+ return { error: `Invalid address: ${address}` };
119
+ }
120
+ return await repo.getTraderAnalytics(address);
121
+ });
122
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/api/routes/analytics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/api/routes/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,eAAO,MAAM,YAAY,GAAI,IAAI,eAAe,EAAE,WAAW,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B9E,CAAC"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/api/routes/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,eAAO,MAAM,YAAY,GAAI,IAAI,eAAe,EAAE,WAAW,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgC9E,CAAC"}
@@ -25,6 +25,8 @@ export const healthRoutes = (db, rateLimit) => new Elysia().get('/health', () =>
25
25
  lastPollAt: null,
26
26
  voyager: {
27
27
  isLimited: voyagerStatus.isLimited,
28
+ activeKeyCount: voyagerStatus.activeKeyCount,
29
+ limitedKeyCount: voyagerStatus.limitedKeyCount,
28
30
  retryInSeconds: voyagerStatus.retryInSeconds,
29
31
  escalationLevel: voyagerStatus.escalationLevel,
30
32
  message: voyagerStatus.message,
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/api/routes/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAmB,EAAE,SAAgC,EAAE,EAAE,CACpF,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,GAAmB,EAAE;IAC/C,IAAI,QAAQ,GAAiC,cAAc,CAAC;IAC5D,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,IAAI,CAAC;QACH,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAClC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,QAAQ,GAAG,WAAW,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;IAE5C,OAAO;QACL,MAAM,EAAE,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QACxF,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACnD,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE;YACP,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,OAAO,EAAE,aAAa,CAAC,OAAO;SAC/B;KACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/api/routes/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAmB,EAAE,SAAgC,EAAE,EAAE,CACpF,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,GAAmB,EAAE;IAC/C,IAAI,QAAQ,GAAiC,cAAc,CAAC;IAC5D,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,IAAI,CAAC;QACH,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAClC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,QAAQ,GAAG,WAAW,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;IAE5C,OAAO;QACL,MAAM,EAAE,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QACxF,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACnD,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE;YACP,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,OAAO,EAAE,aAAa,CAAC,OAAO;SAC/B;KACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { activityFeedRoutes } from './activity-feed';
2
+ export { analyticsRoutes } from './analytics';
2
3
  export { adminRoutes } from './admin';
3
4
  export { adminSubscriptionRoutes } from './admin-subscriptions';
4
5
  export { healthRoutes } from './health';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { activityFeedRoutes } from './activity-feed';
2
+ export { analyticsRoutes } from './analytics';
2
3
  export { adminRoutes } from './admin';
3
4
  export { adminSubscriptionRoutes } from './admin-subscriptions';
4
5
  export { healthRoutes } from './health';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC"}
@@ -1,9 +1,21 @@
1
1
  /**
2
- * GET /api/rankings — global leaderboard.
2
+ * GET /api/rankings — leaderboard with optional ?domain=&from=&to= filters.
3
+ *
4
+ * Filter behaviour:
5
+ * - No filters → SQLite-backed lifetime leaderboard (current behaviour).
6
+ * - domain=<slug>, from=, to= → routed to the warehouse-backed analytics
7
+ * leaderboard, which knows how to slice by domain & time-window. Response
8
+ * shape stays compatible (RankingEntry[]) so existing webapp consumers
9
+ * don't break.
10
+ *
11
+ * If filters are passed but the warehouse is not configured, we 503 — the
12
+ * filtered view requires the warehouse to be running.
3
13
  */
4
14
  import { Elysia } from 'elysia';
5
15
  import type { DatabaseService } from '../../services/Database';
6
- export declare const rankingRoutes: (db: DatabaseService) => Elysia<"", {
16
+ import type { RankingEntry } from '../../types/api';
17
+ import type { AnalyticsRepository } from '../../warehouse/repositories/analytics';
18
+ export declare const rankingRoutes: (db: DatabaseService, analytics: AnalyticsRepository | null) => Elysia<"", {
7
19
  decorator: {};
8
20
  store: {};
9
21
  derive: {};
@@ -27,7 +39,9 @@ export declare const rankingRoutes: (db: DatabaseService) => Elysia<"", {
27
39
  query: unknown;
28
40
  headers: unknown;
29
41
  response: {
30
- 200: import("../../types").RankingEntry[];
42
+ 200: RankingEntry[] | {
43
+ error: string;
44
+ };
31
45
  };
32
46
  };
33
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"rankings.d.ts","sourceRoot":"","sources":["../../../src/api/routes/rankings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,eAAO,MAAM,aAAa,GAAI,IAAI,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK7C,CAAC"}
1
+ {"version":3,"file":"rankings.d.ts","sourceRoot":"","sources":["../../../src/api/routes/rankings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,eAAO,MAAM,aAAa,GACxB,IAAI,eAAe,EACnB,WAAW,mBAAmB,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CnC,CAAC"}
@@ -1,10 +1,49 @@
1
1
  /**
2
- * GET /api/rankings — global leaderboard.
2
+ * GET /api/rankings — leaderboard with optional ?domain=&from=&to= filters.
3
+ *
4
+ * Filter behaviour:
5
+ * - No filters → SQLite-backed lifetime leaderboard (current behaviour).
6
+ * - domain=<slug>, from=, to= → routed to the warehouse-backed analytics
7
+ * leaderboard, which knows how to slice by domain & time-window. Response
8
+ * shape stays compatible (RankingEntry[]) so existing webapp consumers
9
+ * don't break.
10
+ *
11
+ * If filters are passed but the warehouse is not configured, we 503 — the
12
+ * filtered view requires the warehouse to be running.
3
13
  */
4
14
  import { Elysia } from 'elysia';
5
- export const rankingRoutes = (db) => new Elysia().get('/api/rankings', ({ query }) => {
6
- const typedQuery = query;
7
- const limit = Math.min(Math.max(1, parseInt(typedQuery.limit ?? '50', 10) || 50), 200);
8
- return db.rankings.getLeaderboard(limit);
15
+ import { parseAnalyticsFilters } from '../../warehouse/analytics-helpers';
16
+ export const rankingRoutes = (db, analytics) => new Elysia().get('/api/rankings', async ({ query, set }) => {
17
+ const q = query;
18
+ const limit = Math.min(Math.max(1, parseInt(q.limit ?? '50', 10) || 50), 200);
19
+ const wantsFiltered = (q.domain != null && q.domain !== '' && q.domain !== 'all') ||
20
+ q.from != null ||
21
+ q.to != null;
22
+ if (!wantsFiltered) {
23
+ return db.rankings.getLeaderboard(limit);
24
+ }
25
+ if (!analytics) {
26
+ set.status = 503;
27
+ return {
28
+ error: 'Filtered rankings require the analytics warehouse, which is not configured.',
29
+ };
30
+ }
31
+ let filters;
32
+ try {
33
+ filters = parseAnalyticsFilters(q);
34
+ }
35
+ catch (err) {
36
+ set.status = 400;
37
+ return { error: err instanceof Error ? err.message : String(err) };
38
+ }
39
+ const result = await analytics.getLeaderboard({ ...filters, limit });
40
+ // Backwards-compatible shape — webapp's existing useLeaderboard consumes RankingEntry[].
41
+ const compat = result.entries.map((e) => ({
42
+ trader: e.trader,
43
+ totalPnl: e.totalPnl,
44
+ marketsTraded: e.marketsTraded,
45
+ totalTrades: e.totalTrades,
46
+ }));
47
+ return compat;
9
48
  });
10
49
  //# sourceMappingURL=rankings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rankings.js","sourceRoot":"","sources":["../../../src/api/routes/rankings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAmB,EAAE,EAAE,CACnD,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9C,MAAM,UAAU,GAAG,KAAoC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACvF,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"rankings.js","sourceRoot":"","sources":["../../../src/api/routes/rankings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,EAAmB,EACnB,SAAqC,EACrC,EAAE,CACF,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;IACzD,MAAM,CAAC,GAAG,KAKT,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAE9E,MAAM,aAAa,GACjB,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC;QAC3D,CAAC,CAAC,IAAI,IAAI,IAAI;QACd,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC;IAEf,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;QACjB,OAAO;YACL,KAAK,EAAE,6EAA6E;SACrF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,yFAAyF;IACzF,MAAM,MAAM,GAAmB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,WAAW,EAAE,CAAC,CAAC,WAAW;KAC3B,CAAC,CAAC,CAAC;IACJ,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC"}
@@ -1,9 +1,16 @@
1
1
  /**
2
2
  * GET /api/positions/:trader/stats — aggregated trader statistics.
3
+ *
4
+ * Optional ?domain=<slug> routes the request to the warehouse-backed analytics
5
+ * trader endpoint and returns a domain-filtered subset of the same fields.
6
+ * Time-window filters (?from=, ?to=) are accepted but currently apply only to
7
+ * the warehouse path — they sum daily fact rows in the window.
3
8
  */
4
9
  import { Elysia } from 'elysia';
5
10
  import type { DatabaseService } from '../../services/Database';
6
- export declare const traderStatsRoutes: (db: DatabaseService) => Elysia<"", {
11
+ import type { TraderStatsResponse } from '../../types/api';
12
+ import type { AnalyticsRepository } from '../../warehouse/repositories/analytics';
13
+ export declare const traderStatsRoutes: (db: DatabaseService, analytics: AnalyticsRepository | null) => Elysia<"", {
7
14
  decorator: {};
8
15
  store: {};
9
16
  derive: {};
@@ -31,7 +38,9 @@ export declare const traderStatsRoutes: (db: DatabaseService) => Elysia<"", {
31
38
  query: unknown;
32
39
  headers: unknown;
33
40
  response: {
34
- 200: import("../../types").TraderStatsResponse;
41
+ 200: TraderStatsResponse | {
42
+ error: string;
43
+ };
35
44
  422: {
36
45
  type: "validation";
37
46
  on: string;
@@ -1 +1 @@
1
- {"version":3,"file":"trader-stats.d.ts","sourceRoot":"","sources":["../../../src/api/routes/trader-stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,eAAO,MAAM,iBAAiB,GAAI,IAAI,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGjD,CAAC"}
1
+ {"version":3,"file":"trader-stats.d.ts","sourceRoot":"","sources":["../../../src/api/routes/trader-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,eAAO,MAAM,iBAAiB,GAC5B,IAAI,eAAe,EACnB,WAAW,mBAAmB,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0EnC,CAAC"}
@@ -1,8 +1,78 @@
1
1
  /**
2
2
  * GET /api/positions/:trader/stats — aggregated trader statistics.
3
+ *
4
+ * Optional ?domain=<slug> routes the request to the warehouse-backed analytics
5
+ * trader endpoint and returns a domain-filtered subset of the same fields.
6
+ * Time-window filters (?from=, ?to=) are accepted but currently apply only to
7
+ * the warehouse path — they sum daily fact rows in the window.
3
8
  */
4
9
  import { Elysia } from 'elysia';
5
- export const traderStatsRoutes = (db) => new Elysia().get('/api/positions/:trader/stats', ({ params }) => {
6
- return db.rankings.getTraderStats(params.trader);
10
+ import { parseAnalyticsFilters } from '../../warehouse/analytics-helpers';
11
+ export const traderStatsRoutes = (db, analytics) => new Elysia().get('/api/positions/:trader/stats', async ({ params, query, set }) => {
12
+ const q = query;
13
+ const wantsFiltered = (q.domain != null && q.domain !== '' && q.domain !== 'all') ||
14
+ q.from != null ||
15
+ q.to != null;
16
+ if (!wantsFiltered) {
17
+ return db.rankings.getTraderStats(params.trader);
18
+ }
19
+ if (!analytics) {
20
+ set.status = 503;
21
+ return {
22
+ error: 'Filtered trader stats require the analytics warehouse, which is not configured.',
23
+ };
24
+ }
25
+ let filters;
26
+ try {
27
+ filters = parseAnalyticsFilters(q);
28
+ }
29
+ catch (err) {
30
+ set.status = 400;
31
+ return { error: err instanceof Error ? err.message : String(err) };
32
+ }
33
+ const traderAnalytics = await analytics.getTraderAnalytics(params.trader);
34
+ if (!traderAnalytics.lifetime) {
35
+ // Trader has never traded — return zero stats consistent with TraderStatsResponse shape.
36
+ const empty = {
37
+ trader: params.trader,
38
+ totalPnl: 0,
39
+ unrealizedPnl: 0,
40
+ biggestWin: 0,
41
+ totalTrades: 0,
42
+ marketsTraded: 0,
43
+ firstTradeAt: null,
44
+ lastTradeAt: null,
45
+ };
46
+ return empty;
47
+ }
48
+ if (filters.domain !== 'all') {
49
+ // Domain-filtered slice — read from perDomain.
50
+ const domainSlice = traderAnalytics.perDomain.find((d) => d.slug === filters.domain);
51
+ const stats = {
52
+ trader: params.trader,
53
+ // P&L is not currently tracked per-domain; expose lifetime totals so the
54
+ // client can show "domain stats + portfolio P&L". This is honest about
55
+ // current capability — no fake per-domain P&L.
56
+ totalPnl: traderAnalytics.lifetime.totalPnl,
57
+ unrealizedPnl: traderAnalytics.lifetime.unrealizedPnl,
58
+ biggestWin: 0,
59
+ totalTrades: domainSlice?.tradeCount ?? 0,
60
+ marketsTraded: domainSlice?.marketsTraded ?? 0,
61
+ firstTradeAt: traderAnalytics.lifetime.firstTradeAt,
62
+ lastTradeAt: traderAnalytics.lifetime.lastTradeAt,
63
+ };
64
+ return stats;
65
+ }
66
+ const stats = {
67
+ trader: params.trader,
68
+ totalPnl: traderAnalytics.lifetime.totalPnl,
69
+ unrealizedPnl: traderAnalytics.lifetime.unrealizedPnl,
70
+ biggestWin: 0,
71
+ totalTrades: traderAnalytics.lifetime.totalTrades,
72
+ marketsTraded: traderAnalytics.lifetime.marketsTraded,
73
+ firstTradeAt: traderAnalytics.lifetime.firstTradeAt,
74
+ lastTradeAt: traderAnalytics.lifetime.lastTradeAt,
75
+ };
76
+ return stats;
7
77
  });
8
78
  //# sourceMappingURL=trader-stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trader-stats.js","sourceRoot":"","sources":["../../../src/api/routes/trader-stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAmB,EAAE,EAAE,CACvD,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAC9D,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"trader-stats.js","sourceRoot":"","sources":["../../../src/api/routes/trader-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,EAAmB,EACnB,SAAqC,EACrC,EAAE,CACF,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;IAChF,MAAM,CAAC,GAAG,KAAmF,CAAC;IAC9F,MAAM,aAAa,GACjB,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC;QAC3D,CAAC,CAAC,IAAI,IAAI,IAAI;QACd,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC;IAEf,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;QACjB,OAAO;YACL,KAAK,EAAE,iFAAiF;SACzF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC9B,yFAAyF;QACzF,MAAM,KAAK,GAAwB;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;SAClB,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7B,+CAA+C;QAC/C,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACrF,MAAM,KAAK,GAAwB;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,yEAAyE;YACzE,uEAAuE;YACvE,+CAA+C;YAC/C,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ;YAC3C,aAAa,EAAE,eAAe,CAAC,QAAQ,CAAC,aAAa;YACrD,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,WAAW,EAAE,UAAU,IAAI,CAAC;YACzC,aAAa,EAAE,WAAW,EAAE,aAAa,IAAI,CAAC;YAC9C,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,YAAY;YACnD,WAAW,EAAE,eAAe,CAAC,QAAQ,CAAC,WAAW;SAClD,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAwB;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ;QAC3C,aAAa,EAAE,eAAe,CAAC,QAAQ,CAAC,aAAa;QACrD,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,eAAe,CAAC,QAAQ,CAAC,WAAW;QACjD,aAAa,EAAE,eAAe,CAAC,QAAQ,CAAC,aAAa;QACrD,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,YAAY;QACnD,WAAW,EAAE,eAAe,CAAC,QAAQ,CAAC,WAAW;KAClD,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,CAAC"}
@@ -4,6 +4,7 @@
4
4
  import { Context, type Effect } from 'effect';
5
5
  import type { ActivityFeedItem, ActivityFeedQueryParams, CreateSubscriptionInput, SubscriptionResponse, UpdateSubscriptionInput } from '../types/activity';
6
6
  import type { AdminCreateMarketBody, AdminUpdateMarketBody, EventResponse, HealthResponse, LPPositionResponse, MarketResponse, MultinoulliSnapshotsResponse, PaginatedResponse, RankingEntry, TraderEventResponse, TraderPositionResponse, TraderStatsResponse } from '../types/api';
7
+ import type { AnalyticsLeaderboardResponse, AnalyticsOverviewResponse, CohortsResponse, DomainDetailResponse, DomainsResponse, EntityType, RoiResponse, TraderAnalyticsResponse } from '../types/analytics';
7
8
  declare const IndexerApiError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
8
9
  readonly _tag: "IndexerApiError";
9
10
  } & Readonly<A>;
@@ -21,6 +22,27 @@ export interface EventQueryParams {
21
22
  }
22
23
  export interface RankingQueryParams {
23
24
  readonly limit?: number | undefined;
25
+ /** Optional canonical domain slug (e.g. 'politics'). Defaults to all-domain. */
26
+ readonly domain?: string | undefined;
27
+ /** ISO YYYY-MM-DD inclusive lower bound. */
28
+ readonly from?: string | undefined;
29
+ /** ISO YYYY-MM-DD exclusive upper bound. */
30
+ readonly to?: string | undefined;
31
+ }
32
+ export interface TraderStatsQueryParams {
33
+ readonly domain?: string | undefined;
34
+ readonly from?: string | undefined;
35
+ readonly to?: string | undefined;
36
+ }
37
+ export interface AnalyticsLeaderboardQueryParams extends RankingQueryParams {
38
+ }
39
+ export interface CohortsQueryParams {
40
+ readonly domain?: string | undefined;
41
+ readonly entityType?: EntityType | undefined;
42
+ }
43
+ export interface RoiQueryParams {
44
+ readonly domain?: string | undefined;
45
+ readonly entityType?: EntityType | undefined;
24
46
  }
25
47
  export interface IndexerClientService {
26
48
  readonly health: () => Effect.Effect<HealthResponse, IndexerApiError>;
@@ -31,8 +53,15 @@ export interface IndexerClientService {
31
53
  readonly getMarketLPs: (address: string) => Effect.Effect<readonly LPPositionResponse[], IndexerApiError>;
32
54
  readonly getTraderPositions: (trader: string) => Effect.Effect<readonly TraderPositionResponse[], IndexerApiError>;
33
55
  readonly getTraderEvents: (trader: string, params?: EventQueryParams) => Effect.Effect<PaginatedResponse<TraderEventResponse>, IndexerApiError>;
34
- readonly getTraderStats: (trader: string) => Effect.Effect<TraderStatsResponse, IndexerApiError>;
56
+ readonly getTraderStats: (trader: string, params?: TraderStatsQueryParams) => Effect.Effect<TraderStatsResponse, IndexerApiError>;
35
57
  readonly getRankings: (params?: RankingQueryParams) => Effect.Effect<readonly RankingEntry[], IndexerApiError>;
58
+ readonly getAnalyticsOverview: () => Effect.Effect<AnalyticsOverviewResponse, IndexerApiError>;
59
+ readonly getAnalyticsDomains: () => Effect.Effect<DomainsResponse, IndexerApiError>;
60
+ readonly getAnalyticsDomain: (slug: string) => Effect.Effect<DomainDetailResponse, IndexerApiError>;
61
+ readonly getAnalyticsCohorts: (params?: CohortsQueryParams) => Effect.Effect<CohortsResponse, IndexerApiError>;
62
+ readonly getAnalyticsRoi: (params?: RoiQueryParams) => Effect.Effect<RoiResponse, IndexerApiError>;
63
+ readonly getAnalyticsLeaderboard: (params?: AnalyticsLeaderboardQueryParams) => Effect.Effect<AnalyticsLeaderboardResponse, IndexerApiError>;
64
+ readonly getTraderAnalytics: (address: string) => Effect.Effect<TraderAnalyticsResponse, IndexerApiError>;
36
65
  readonly getMultinoulliSnapshots: (address: string, limit?: number) => Effect.Effect<MultinoulliSnapshotsResponse, IndexerApiError>;
37
66
  readonly createMarket: (body: AdminCreateMarketBody) => Effect.Effect<{
38
67
  success: true;
@@ -1 +1 @@
1
- {"version":3,"file":"IndexerClient.d.ts","sourceRoot":"","sources":["../../src/client/IndexerClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,cAAc,CAAC;;;;AAItB,qBAAa,eAAgB,SAAQ,qBAAoC;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;CAAG;AAIL,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAEtE,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,cAAc,EAAE,EAAE,eAAe,CAAC,CAAC;IAErF,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAExF,QAAQ,CAAC,eAAe,EAAE,CACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,gBAAgB,KACtB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC,CAAC;IAEtE,QAAQ,CAAC,gBAAgB,EAAE,CACzB,OAAO,EAAE,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,SAAS,sBAAsB,EAAE,EAAE,eAAe,CAAC,CAAC;IAEvE,QAAQ,CAAC,YAAY,EAAE,CACrB,OAAO,EAAE,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,SAAS,kBAAkB,EAAE,EAAE,eAAe,CAAC,CAAC;IAEnE,QAAQ,CAAC,kBAAkB,EAAE,CAC3B,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,SAAS,sBAAsB,EAAE,EAAE,eAAe,CAAC,CAAC;IAEvE,QAAQ,CAAC,eAAe,EAAE,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,gBAAgB,KACtB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,EAAE,eAAe,CAAC,CAAC;IAE5E,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAEjG,QAAQ,CAAC,WAAW,EAAE,CACpB,MAAM,CAAC,EAAE,kBAAkB,KACxB,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE,EAAE,eAAe,CAAC,CAAC;IAE7D,QAAQ,CAAC,uBAAuB,EAAE,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,eAAe,CAAC,CAAC;IAIlE,QAAQ,CAAC,YAAY,EAAE,CACrB,IAAI,EAAE,qBAAqB,KACxB,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,EAAE,eAAe,CAAC,CAAC;IAEvD,QAAQ,CAAC,YAAY,EAAE,CACrB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,qBAAqB,KACxB,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,EAAE,eAAe,CAAC,CAAC;IAEvD,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,EAAE,eAAe,CAAC,CAAC;IAI9F,QAAQ,CAAC,eAAe,EAAE,CACxB,MAAM,CAAC,EAAE,uBAAuB,KAC7B,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC,CAAC;IAIzE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,oBAAoB,EAAE,EAAE,eAAe,CAAC,CAAC;IAEjG,QAAQ,CAAC,kBAAkB,EAAE,CAC3B,IAAI,EAAE,uBAAuB,KAC1B,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IAE1D,QAAQ,CAAC,kBAAkB,EAAE,CAC3B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,uBAAuB,KAC1B,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IAE1D,QAAQ,CAAC,kBAAkB,EAAE,CAC3B,EAAE,EAAE,MAAM,KACP,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,EAAE,eAAe,CAAC,CAAC;CACxD;;AAID,qBAAa,aAAc,SAAQ,kBAGhC;CAAG"}
1
+ {"version":3,"file":"IndexerClient.d.ts","sourceRoot":"","sources":["../../src/client/IndexerClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"IndexerClient.js","sourceRoot":"","sources":["../../src/client/IndexerClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAe,MAAM,QAAQ,CAAC;AAuBpD,wEAAwE;AAExE,MAAM,OAAO,eAAgB,SAAQ,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAIrE;CAAG;AA8FL,wEAAwE;AAExE,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAG5D;CAAG"}
1
+ {"version":3,"file":"IndexerClient.js","sourceRoot":"","sources":["../../src/client/IndexerClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAe,MAAM,QAAQ,CAAC;AAiCpD,wEAAwE;AAExE,MAAM,OAAO,eAAgB,SAAQ,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAIrE;CAAG;AAmJL,wEAAwE;AAExE,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAG5D;CAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"IndexerClientLive.d.ts","sourceRoot":"","sources":["../../src/client/IndexerClientLive.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAmB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIjE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AA8FD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,mBAAmB,KAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CA0FxF,CAAC"}
1
+ {"version":3,"file":"IndexerClientLive.d.ts","sourceRoot":"","sources":["../../src/client/IndexerClientLive.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAmB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIjE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AA8FD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,mBAAmB,KAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAuIxF,CAAC"}
@@ -100,14 +100,63 @@ export const IndexerClientLive = (config) => {
100
100
  appendEventParams(url, params);
101
101
  return fetchJson(url.toString());
102
102
  },
103
- getTraderStats: (trader) => fetchJson(`${base}/api/positions/${trader}/stats`),
103
+ getTraderStats: (trader, params) => {
104
+ const url = new URL(`${base}/api/positions/${trader}/stats`);
105
+ if (params?.domain)
106
+ url.searchParams.set('domain', params.domain);
107
+ if (params?.from)
108
+ url.searchParams.set('from', params.from);
109
+ if (params?.to)
110
+ url.searchParams.set('to', params.to);
111
+ return fetchJson(url.toString());
112
+ },
104
113
  getRankings: (params) => {
105
114
  const url = new URL(`${base}/api/rankings`);
106
115
  if (params?.limit !== undefined) {
107
116
  url.searchParams.set('limit', params.limit.toString());
108
117
  }
118
+ if (params?.domain)
119
+ url.searchParams.set('domain', params.domain);
120
+ if (params?.from)
121
+ url.searchParams.set('from', params.from);
122
+ if (params?.to)
123
+ url.searchParams.set('to', params.to);
124
+ return fetchJson(url.toString());
125
+ },
126
+ // ── Analytics warehouse ────────────────────────────────────────
127
+ getAnalyticsOverview: () => fetchJson(`${base}/api/analytics/overview`),
128
+ getAnalyticsDomains: () => fetchJson(`${base}/api/analytics/domains`),
129
+ getAnalyticsDomain: (slug) => fetchJson(`${base}/api/analytics/domains/${slug}`),
130
+ getAnalyticsCohorts: (params) => {
131
+ const url = new URL(`${base}/api/analytics/cohorts`);
132
+ if (params?.domain)
133
+ url.searchParams.set('domain', params.domain);
134
+ if (params?.entityType)
135
+ url.searchParams.set('entityType', params.entityType);
136
+ return fetchJson(url.toString());
137
+ },
138
+ getAnalyticsRoi: (params) => {
139
+ const url = new URL(`${base}/api/analytics/roi`);
140
+ if (params?.domain)
141
+ url.searchParams.set('domain', params.domain);
142
+ if (params?.entityType)
143
+ url.searchParams.set('entityType', params.entityType);
144
+ return fetchJson(url.toString());
145
+ },
146
+ getAnalyticsLeaderboard: (params) => {
147
+ const url = new URL(`${base}/api/analytics/leaderboard`);
148
+ if (params?.domain)
149
+ url.searchParams.set('domain', params.domain);
150
+ if (params?.from)
151
+ url.searchParams.set('from', params.from);
152
+ if (params?.to)
153
+ url.searchParams.set('to', params.to);
154
+ if (params?.limit !== undefined) {
155
+ url.searchParams.set('limit', params.limit.toString());
156
+ }
109
157
  return fetchJson(url.toString());
110
158
  },
159
+ getTraderAnalytics: (address) => fetchJson(`${base}/api/analytics/traders/${address}`),
111
160
  getMultinoulliSnapshots: (address, limit) => {
112
161
  const url = new URL(`${base}/api/markets/${address}/multinoulli-snapshots`);
113
162
  if (limit !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"IndexerClientLive.js","sourceRoot":"","sources":["../../src/client/IndexerClientLive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IndexerClientLive.js","sourceRoot":"","sources":["../../src/client/IndexerClientLive.ts"],"names":[],"mappings":"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"}