@the-situation/indexer 0.11.2 → 0.11.4

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 (95) hide show
  1. package/dist/api/app.d.ts +150 -0
  2. package/dist/api/app.d.ts.map +1 -1
  3. package/dist/api/app.js +3 -1
  4. package/dist/api/app.js.map +1 -1
  5. package/dist/api/routes/activity-feed.d.ts +54 -0
  6. package/dist/api/routes/activity-feed.d.ts.map +1 -0
  7. package/dist/api/routes/activity-feed.js +66 -0
  8. package/dist/api/routes/activity-feed.js.map +1 -0
  9. package/dist/api/routes/admin-subscriptions.d.ts +176 -0
  10. package/dist/api/routes/admin-subscriptions.d.ts.map +1 -0
  11. package/dist/api/routes/admin-subscriptions.js +69 -0
  12. package/dist/api/routes/admin-subscriptions.js.map +1 -0
  13. package/dist/api/routes/index.d.ts +2 -0
  14. package/dist/api/routes/index.d.ts.map +1 -1
  15. package/dist/api/routes/index.js +2 -0
  16. package/dist/api/routes/index.js.map +1 -1
  17. package/dist/client/IndexerClient.d.ts +8 -0
  18. package/dist/client/IndexerClient.d.ts.map +1 -1
  19. package/dist/client/IndexerClient.js.map +1 -1
  20. package/dist/client/IndexerClientLive.d.ts.map +1 -1
  21. package/dist/client/IndexerClientLive.js +28 -0
  22. package/dist/client/IndexerClientLive.js.map +1 -1
  23. package/dist/client/convenience.d.ts +2 -0
  24. package/dist/client/convenience.d.ts.map +1 -1
  25. package/dist/client/convenience.js +1 -0
  26. package/dist/client/convenience.js.map +1 -1
  27. package/dist/client/index.d.ts +2 -1
  28. package/dist/client/index.d.ts.map +1 -1
  29. package/dist/client/index.js +1 -1
  30. package/dist/client/index.js.map +1 -1
  31. package/dist/db/repositories/activity-feed.d.ts +24 -0
  32. package/dist/db/repositories/activity-feed.d.ts.map +1 -0
  33. package/dist/db/repositories/activity-feed.js +76 -0
  34. package/dist/db/repositories/activity-feed.js.map +1 -0
  35. package/dist/db/repositories/index.d.ts +2 -0
  36. package/dist/db/repositories/index.d.ts.map +1 -1
  37. package/dist/db/repositories/index.js +2 -0
  38. package/dist/db/repositories/index.js.map +1 -1
  39. package/dist/db/repositories/position.d.ts +1 -0
  40. package/dist/db/repositories/position.d.ts.map +1 -1
  41. package/dist/db/repositories/position.js +10 -4
  42. package/dist/db/repositories/position.js.map +1 -1
  43. package/dist/db/repositories/ranking.d.ts.map +1 -1
  44. package/dist/db/repositories/ranking.js +18 -10
  45. package/dist/db/repositories/ranking.js.map +1 -1
  46. package/dist/db/repositories/subscription.d.ts +18 -0
  47. package/dist/db/repositories/subscription.d.ts.map +1 -0
  48. package/dist/db/repositories/subscription.js +73 -0
  49. package/dist/db/repositories/subscription.js.map +1 -0
  50. package/dist/db/schema.d.ts.map +1 -1
  51. package/dist/db/schema.js +17 -0
  52. package/dist/db/schema.js.map +1 -1
  53. package/dist/etl/event-indexer.d.ts +1 -1
  54. package/dist/etl/position-refresher.d.ts +1 -1
  55. package/dist/etl/position-refresher.d.ts.map +1 -1
  56. package/dist/etl/position-refresher.js +62 -20
  57. package/dist/etl/position-refresher.js.map +1 -1
  58. package/dist/etl/scheduler.d.ts.map +1 -1
  59. package/dist/etl/scheduler.js +79 -14
  60. package/dist/etl/scheduler.js.map +1 -1
  61. package/dist/etl/state-refresher.d.ts +1 -1
  62. package/dist/index.js +13 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/layers/ChainReaderLive.d.ts.map +1 -1
  65. package/dist/layers/ChainReaderLive.js +45 -33
  66. package/dist/layers/ChainReaderLive.js.map +1 -1
  67. package/dist/layers/DatabaseLive.d.ts.map +1 -1
  68. package/dist/layers/DatabaseLive.js +3 -1
  69. package/dist/layers/DatabaseLive.js.map +1 -1
  70. package/dist/logger.d.ts +13 -0
  71. package/dist/logger.d.ts.map +1 -0
  72. package/dist/logger.js +29 -0
  73. package/dist/logger.js.map +1 -0
  74. package/dist/services/ActivityEnricher.d.ts +29 -0
  75. package/dist/services/ActivityEnricher.d.ts.map +1 -0
  76. package/dist/services/ActivityEnricher.js +90 -0
  77. package/dist/services/ActivityEnricher.js.map +1 -0
  78. package/dist/services/Database.d.ts +3 -1
  79. package/dist/services/Database.d.ts.map +1 -1
  80. package/dist/services/Database.js.map +1 -1
  81. package/dist/services/WebhookDispatcher.d.ts +14 -0
  82. package/dist/services/WebhookDispatcher.d.ts.map +1 -0
  83. package/dist/services/WebhookDispatcher.js +122 -0
  84. package/dist/services/WebhookDispatcher.js.map +1 -0
  85. package/dist/types/activity.d.ts +89 -0
  86. package/dist/types/activity.d.ts.map +1 -0
  87. package/dist/types/activity.js +28 -0
  88. package/dist/types/activity.js.map +1 -0
  89. package/dist/types/index.d.ts +2 -0
  90. package/dist/types/index.d.ts.map +1 -1
  91. package/dist/types/index.js +1 -1
  92. package/dist/types/index.js.map +1 -1
  93. package/dist/types/position.d.ts +2 -0
  94. package/dist/types/position.d.ts.map +1 -1
  95. package/package.json +1 -1
package/dist/api/app.d.ts CHANGED
@@ -288,6 +288,25 @@ export declare function createApp(config: AppConfig): Elysia<"", {
288
288
  };
289
289
  };
290
290
  };
291
+ } & {
292
+ api: {
293
+ activity: {
294
+ get: {
295
+ body: unknown;
296
+ params: {};
297
+ query: unknown;
298
+ headers: unknown;
299
+ response: {
300
+ 200: {
301
+ data: import("../types").ActivityFeedItem[];
302
+ total: number;
303
+ page: number;
304
+ pageSize: number;
305
+ };
306
+ };
307
+ };
308
+ };
309
+ };
291
310
  } & {
292
311
  admin: {
293
312
  markets: {
@@ -386,6 +405,137 @@ export declare function createApp(config: AppConfig): Elysia<"", {
386
405
  };
387
406
  };
388
407
  };
408
+ } & {
409
+ admin: {
410
+ subscriptions: {
411
+ post: {
412
+ body: unknown;
413
+ params: {};
414
+ query: unknown;
415
+ headers: unknown;
416
+ response: {
417
+ 200: {
418
+ error: string;
419
+ } | import("../types").SubscriptionResponse | {
420
+ error: string;
421
+ };
422
+ };
423
+ };
424
+ };
425
+ };
426
+ } & {
427
+ admin: {
428
+ subscriptions: {
429
+ get: {
430
+ body: unknown;
431
+ params: {};
432
+ query: unknown;
433
+ headers: unknown;
434
+ response: {
435
+ 200: {
436
+ error: string;
437
+ } | import("../types").SubscriptionResponse[];
438
+ };
439
+ };
440
+ };
441
+ };
442
+ } & {
443
+ admin: {
444
+ subscriptions: {
445
+ ":id": {
446
+ get: {
447
+ body: unknown;
448
+ params: {
449
+ id: string;
450
+ } & {};
451
+ query: unknown;
452
+ headers: unknown;
453
+ response: {
454
+ 200: {
455
+ error: string;
456
+ } | import("../types").SubscriptionResponse | {
457
+ error: string;
458
+ };
459
+ 422: {
460
+ type: "validation";
461
+ on: string;
462
+ summary?: string;
463
+ message?: string;
464
+ found?: unknown;
465
+ property?: string;
466
+ expected?: string;
467
+ };
468
+ };
469
+ };
470
+ };
471
+ };
472
+ };
473
+ } & {
474
+ admin: {
475
+ subscriptions: {
476
+ ":id": {
477
+ put: {
478
+ body: unknown;
479
+ params: {
480
+ id: string;
481
+ } & {};
482
+ query: unknown;
483
+ headers: unknown;
484
+ response: {
485
+ 200: {
486
+ error: string;
487
+ } | import("../types").SubscriptionResponse | {
488
+ error: string;
489
+ };
490
+ 422: {
491
+ type: "validation";
492
+ on: string;
493
+ summary?: string;
494
+ message?: string;
495
+ found?: unknown;
496
+ property?: string;
497
+ expected?: string;
498
+ };
499
+ };
500
+ };
501
+ };
502
+ };
503
+ };
504
+ } & {
505
+ admin: {
506
+ subscriptions: {
507
+ ":id": {
508
+ delete: {
509
+ body: unknown;
510
+ params: {
511
+ id: string;
512
+ } & {};
513
+ query: unknown;
514
+ headers: unknown;
515
+ response: {
516
+ 200: {
517
+ error: string;
518
+ } | {
519
+ error: string;
520
+ success?: never;
521
+ } | {
522
+ success: boolean;
523
+ error?: never;
524
+ };
525
+ 422: {
526
+ type: "validation";
527
+ on: string;
528
+ summary?: string;
529
+ message?: string;
530
+ found?: unknown;
531
+ property?: string;
532
+ expected?: string;
533
+ };
534
+ };
535
+ };
536
+ };
537
+ };
538
+ };
389
539
  } & {
390
540
  ws: {
391
541
  subscribe: {
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/api/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAgB1E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;CAC3C;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAe1C"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/api/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAkB1E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;CAC3C;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiB1C"}
package/dist/api/app.js CHANGED
@@ -4,7 +4,7 @@
4
4
  import { cors } from '@elysiajs/cors';
5
5
  import { Elysia } from 'elysia';
6
6
  import { errorHandler } from './middleware/error-handler';
7
- import { adminRoutes, healthRoutes, marketEventsRoutes, marketRoutes, marketTradersRoutes, multinoulliSnapshotsRoute, positionRoutes, rankingRoutes, traderEventsRoutes, traderStatsRoutes, wsRoutes, } from './routes';
7
+ import { activityFeedRoutes, adminRoutes, adminSubscriptionRoutes, healthRoutes, marketEventsRoutes, marketRoutes, marketTradersRoutes, multinoulliSnapshotsRoute, positionRoutes, rankingRoutes, traderEventsRoutes, traderStatsRoutes, wsRoutes, } from './routes';
8
8
  export function createApp(config) {
9
9
  return new Elysia()
10
10
  .use(cors())
@@ -18,7 +18,9 @@ export function createApp(config) {
18
18
  .use(traderEventsRoutes(config.db))
19
19
  .use(traderStatsRoutes(config.db))
20
20
  .use(rankingRoutes(config.db))
21
+ .use(activityFeedRoutes(config.db))
21
22
  .use(adminRoutes(config.db, config.adminApiKey))
23
+ .use(adminSubscriptionRoutes(config.db, config.adminApiKey))
22
24
  .use(wsRoutes(config.eventBus));
23
25
  }
24
26
  //# sourceMappingURL=app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/api/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,GACT,MAAM,UAAU,CAAC;AASlB,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,OAAO,IAAI,MAAM,EAAE;SAChB,GAAG,CAAC,IAAI,EAAE,CAAC;SACX,GAAG,CAAC,YAAY,CAAC;SACjB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;SAC9C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC5B,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACzC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACnC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC9B,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACjC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC7B,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;SAC/C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/api/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,uBAAuB,EACvB,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,GACT,MAAM,UAAU,CAAC;AASlB,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,OAAO,IAAI,MAAM,EAAE;SAChB,GAAG,CAAC,IAAI,EAAE,CAAC;SACX,GAAG,CAAC,YAAY,CAAC;SACjB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;SAC9C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC5B,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACzC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACnC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC9B,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACjC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC7B,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;SAC/C,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;SAC3D,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * GET /api/activity — global enriched activity feed.
3
+ */
4
+ import { Elysia } from 'elysia';
5
+ import type { DatabaseService } from '../../services/Database';
6
+ import type { ActivityFeedItem } from '../../types';
7
+ export declare const activityFeedRoutes: (db: DatabaseService) => Elysia<"", {
8
+ decorator: {};
9
+ store: {};
10
+ derive: {};
11
+ resolve: {};
12
+ }, {
13
+ typebox: {};
14
+ error: {};
15
+ }, {
16
+ schema: {};
17
+ standaloneSchema: {};
18
+ macro: {};
19
+ macroFn: {};
20
+ parser: {};
21
+ response: {};
22
+ }, {
23
+ api: {
24
+ activity: {
25
+ get: {
26
+ body: unknown;
27
+ params: {};
28
+ query: unknown;
29
+ headers: unknown;
30
+ response: {
31
+ 200: {
32
+ data: ActivityFeedItem[];
33
+ total: number;
34
+ page: number;
35
+ pageSize: number;
36
+ };
37
+ };
38
+ };
39
+ };
40
+ };
41
+ }, {
42
+ derive: {};
43
+ resolve: {};
44
+ schema: {};
45
+ standaloneSchema: {};
46
+ response: {};
47
+ }, {
48
+ derive: {};
49
+ resolve: {};
50
+ schema: {};
51
+ standaloneSchema: {};
52
+ response: {};
53
+ }>;
54
+ //# sourceMappingURL=activity-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-feed.d.ts","sourceRoot":"","sources":["../../../src/api/routes/activity-feed.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAqB,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AAU1F,eAAO,MAAM,kBAAkB,GAAI,IAAI,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDlD,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * GET /api/activity — global enriched activity feed.
3
+ */
4
+ import { Elysia } from 'elysia';
5
+ import { enrichActivityItem } from '../../services/ActivityEnricher';
6
+ function parseCommaSeparated(value) {
7
+ if (!value)
8
+ return [];
9
+ return value
10
+ .split(',')
11
+ .map((s) => s.trim())
12
+ .filter(Boolean);
13
+ }
14
+ export const activityFeedRoutes = (db) => new Elysia().get('/api/activity', ({ query }) => {
15
+ const typedQuery = query;
16
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
17
+ const page = Math.max(1, parseInt(typedQuery['page'] ?? '1', 10) || 1);
18
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
19
+ const pageSize = Math.min(Math.max(1, parseInt(typedQuery['pageSize'] ?? '50', 10) || 50), 200);
20
+ const offset = (page - 1) * pageSize;
21
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
22
+ const eventTypes = parseCommaSeparated(typedQuery['eventTypes']);
23
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
24
+ const marketTypes = parseCommaSeparated(typedQuery['marketTypes']);
25
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
26
+ const marketAddresses = parseCommaSeparated(typedQuery['marketAddresses']);
27
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
28
+ const traders = parseCommaSeparated(typedQuery['traders']);
29
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
30
+ const rawMinCollateral = typedQuery['minCollateral'];
31
+ const minCollateral = rawMinCollateral ? parseFloat(rawMinCollateral) : undefined;
32
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
33
+ const rawFrom = typedQuery['from'];
34
+ // biome-ignore lint/complexity/useLiteralKeys: index signature
35
+ const rawTo = typedQuery['to'];
36
+ const from = rawFrom ? parseInt(rawFrom, 10) : undefined;
37
+ const to = rawTo ? parseInt(rawTo, 10) : undefined;
38
+ const rows = db.activityFeed.findAll({
39
+ limit: pageSize,
40
+ offset,
41
+ eventTypes: eventTypes.length > 0 ? eventTypes : undefined,
42
+ marketTypes: marketTypes.length > 0 ? marketTypes : undefined,
43
+ marketAddresses: marketAddresses.length > 0 ? marketAddresses : undefined,
44
+ traders: traders.length > 0 ? traders : undefined,
45
+ minCollateral: minCollateral != null && Number.isFinite(minCollateral) ? minCollateral : undefined,
46
+ fromTimestamp: from,
47
+ toTimestamp: to,
48
+ });
49
+ const total = db.activityFeed.count({
50
+ eventTypes: eventTypes.length > 0 ? eventTypes : undefined,
51
+ marketTypes: marketTypes.length > 0 ? marketTypes : undefined,
52
+ marketAddresses: marketAddresses.length > 0 ? marketAddresses : undefined,
53
+ traders: traders.length > 0 ? traders : undefined,
54
+ minCollateral: minCollateral != null && Number.isFinite(minCollateral) ? minCollateral : undefined,
55
+ fromTimestamp: from,
56
+ toTimestamp: to,
57
+ });
58
+ const data = rows.map(enrichActivityItem);
59
+ return {
60
+ data,
61
+ total,
62
+ page,
63
+ pageSize,
64
+ };
65
+ });
66
+ //# sourceMappingURL=activity-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-feed.js","sourceRoot":"","sources":["../../../src/api/routes/activity-feed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Admin CRUD routes for webhook subscriptions.
3
+ */
4
+ import { Elysia } from 'elysia';
5
+ import type { DatabaseService } from '../../services/Database';
6
+ import type { SubscriptionResponse } from '../../types/activity';
7
+ export declare const adminSubscriptionRoutes: (db: DatabaseService, adminApiKey: string) => Elysia<"", {
8
+ decorator: {};
9
+ store: {};
10
+ derive: {};
11
+ resolve: {};
12
+ }, {
13
+ typebox: {};
14
+ error: {};
15
+ }, {
16
+ schema: {};
17
+ standaloneSchema: {};
18
+ macro: {};
19
+ macroFn: {};
20
+ parser: {};
21
+ response: {};
22
+ }, {
23
+ admin: {
24
+ subscriptions: {
25
+ post: {
26
+ body: unknown;
27
+ params: {};
28
+ query: unknown;
29
+ headers: unknown;
30
+ response: {
31
+ 200: {
32
+ error: string;
33
+ } | SubscriptionResponse | {
34
+ error: string;
35
+ };
36
+ };
37
+ };
38
+ };
39
+ };
40
+ } & {
41
+ admin: {
42
+ subscriptions: {
43
+ get: {
44
+ body: unknown;
45
+ params: {};
46
+ query: unknown;
47
+ headers: unknown;
48
+ response: {
49
+ 200: {
50
+ error: string;
51
+ } | SubscriptionResponse[];
52
+ };
53
+ };
54
+ };
55
+ };
56
+ } & {
57
+ admin: {
58
+ subscriptions: {
59
+ ":id": {
60
+ get: {
61
+ body: unknown;
62
+ params: {
63
+ id: string;
64
+ } & {};
65
+ query: unknown;
66
+ headers: unknown;
67
+ response: {
68
+ 200: {
69
+ error: string;
70
+ } | SubscriptionResponse | {
71
+ error: string;
72
+ };
73
+ 422: {
74
+ type: "validation";
75
+ on: string;
76
+ summary?: string;
77
+ message?: string;
78
+ found?: unknown;
79
+ property?: string;
80
+ expected?: string;
81
+ };
82
+ };
83
+ };
84
+ };
85
+ };
86
+ };
87
+ } & {
88
+ admin: {
89
+ subscriptions: {
90
+ ":id": {
91
+ put: {
92
+ body: unknown;
93
+ params: {
94
+ id: string;
95
+ } & {};
96
+ query: unknown;
97
+ headers: unknown;
98
+ response: {
99
+ 200: {
100
+ error: string;
101
+ } | SubscriptionResponse | {
102
+ error: string;
103
+ };
104
+ 422: {
105
+ type: "validation";
106
+ on: string;
107
+ summary?: string;
108
+ message?: string;
109
+ found?: unknown;
110
+ property?: string;
111
+ expected?: string;
112
+ };
113
+ };
114
+ };
115
+ };
116
+ };
117
+ };
118
+ } & {
119
+ admin: {
120
+ subscriptions: {
121
+ ":id": {
122
+ delete: {
123
+ body: unknown;
124
+ params: {
125
+ id: string;
126
+ } & {};
127
+ query: unknown;
128
+ headers: unknown;
129
+ response: {
130
+ 200: {
131
+ error: string;
132
+ } | {
133
+ error: string;
134
+ success?: never;
135
+ } | {
136
+ success: boolean;
137
+ error?: never;
138
+ };
139
+ 422: {
140
+ type: "validation";
141
+ on: string;
142
+ summary?: string;
143
+ message?: string;
144
+ found?: unknown;
145
+ property?: string;
146
+ expected?: string;
147
+ };
148
+ };
149
+ };
150
+ };
151
+ };
152
+ };
153
+ }, {
154
+ derive: {};
155
+ resolve: {};
156
+ schema: {};
157
+ standaloneSchema: {};
158
+ response: {};
159
+ }, {
160
+ derive: {};
161
+ resolve: {};
162
+ schema: {};
163
+ standaloneSchema: {};
164
+ response: {};
165
+ } & {
166
+ derive: {};
167
+ resolve: {};
168
+ schema: {};
169
+ standaloneSchema: {};
170
+ response: {
171
+ 200: {
172
+ error: string;
173
+ };
174
+ };
175
+ }>;
176
+ //# sourceMappingURL=admin-subscriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-subscriptions.d.ts","sourceRoot":"","sources":["../../../src/api/routes/admin-subscriptions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAGV,oBAAoB,EAGrB,MAAM,sBAAsB,CAAC;AAsB9B,eAAO,MAAM,uBAAuB,GAAI,IAAI,eAAe,EAAE,aAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2C1E,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Admin CRUD routes for webhook subscriptions.
3
+ */
4
+ import { Elysia } from 'elysia';
5
+ import { adminAuth } from '../middleware/admin-auth';
6
+ function toResponse(row) {
7
+ let filters = {};
8
+ try {
9
+ filters = JSON.parse(row.filters);
10
+ }
11
+ catch {
12
+ // Malformed filters — return empty
13
+ }
14
+ return {
15
+ id: row.id,
16
+ name: row.name,
17
+ webhookUrl: row.webhook_url,
18
+ filters,
19
+ isActive: row.is_active === 1,
20
+ createdAt: row.created_at,
21
+ updatedAt: row.updated_at,
22
+ lastDeliveredAt: row.last_delivered_at,
23
+ failureCount: row.failure_count,
24
+ };
25
+ }
26
+ export const adminSubscriptionRoutes = (db, adminApiKey) => new Elysia()
27
+ .use(adminAuth(adminApiKey))
28
+ .post('/admin/subscriptions', ({ body, set }) => {
29
+ const input = body;
30
+ if (!input.name || !input.webhook_url) {
31
+ set.status = 400;
32
+ return { error: 'name and webhook_url are required' };
33
+ }
34
+ const row = db.subscriptions.create(input);
35
+ set.status = 201;
36
+ return toResponse(row);
37
+ })
38
+ .get('/admin/subscriptions', () => {
39
+ return db.subscriptions.findAll().map(toResponse);
40
+ })
41
+ .get('/admin/subscriptions/:id', ({ params, set }) => {
42
+ const id = parseInt(params.id, 10);
43
+ const row = db.subscriptions.findById(id);
44
+ if (!row) {
45
+ set.status = 404;
46
+ return { error: 'Subscription not found' };
47
+ }
48
+ return toResponse(row);
49
+ })
50
+ .put('/admin/subscriptions/:id', ({ params, body, set }) => {
51
+ const id = parseInt(params.id, 10);
52
+ const input = body;
53
+ const row = db.subscriptions.update(id, input);
54
+ if (!row) {
55
+ set.status = 404;
56
+ return { error: 'Subscription not found' };
57
+ }
58
+ return toResponse(row);
59
+ })
60
+ .delete('/admin/subscriptions/:id', ({ params, set }) => {
61
+ const id = parseInt(params.id, 10);
62
+ const deleted = db.subscriptions.delete(id);
63
+ if (!deleted) {
64
+ set.status = 404;
65
+ return { error: 'Subscription not found' };
66
+ }
67
+ return { success: true };
68
+ });
69
+ //# sourceMappingURL=admin-subscriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-subscriptions.js","sourceRoot":"","sources":["../../../src/api/routes/admin-subscriptions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
+ export { activityFeedRoutes } from './activity-feed';
1
2
  export { adminRoutes } from './admin';
3
+ export { adminSubscriptionRoutes } from './admin-subscriptions';
2
4
  export { healthRoutes } from './health';
3
5
  export { marketEventsRoutes } from './market-events';
4
6
  export { marketTradersRoutes } from './market-traders';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,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,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,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,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,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC"}
@@ -1,4 +1,6 @@
1
+ export { activityFeedRoutes } from './activity-feed';
1
2
  export { adminRoutes } from './admin';
3
+ export { adminSubscriptionRoutes } from './admin-subscriptions';
2
4
  export { healthRoutes } from './health';
3
5
  export { marketEventsRoutes } from './market-events';
4
6
  export { marketTradersRoutes } from './market-traders';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,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,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,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,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,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC"}
@@ -2,6 +2,7 @@
2
2
  * IndexerClient — Effect Context.Tag service definition for the indexer REST API.
3
3
  */
4
4
  import { Context, type Effect } from 'effect';
5
+ import type { ActivityFeedItem, ActivityFeedQueryParams, CreateSubscriptionInput, SubscriptionResponse, UpdateSubscriptionInput } from '../types/activity';
5
6
  import type { AdminCreateMarketBody, AdminUpdateMarketBody, EventResponse, HealthResponse, MarketResponse, MultinoulliSnapshotsResponse, PaginatedResponse, RankingEntry, TraderEventResponse, TraderPositionResponse, TraderStatsResponse } from '../types/api';
6
7
  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 & {
7
8
  readonly _tag: "IndexerApiError";
@@ -41,6 +42,13 @@ export interface IndexerClientService {
41
42
  readonly deleteMarket: (address: string) => Effect.Effect<{
42
43
  success: true;
43
44
  }, IndexerApiError>;
45
+ readonly getActivityFeed: (params?: ActivityFeedQueryParams) => Effect.Effect<PaginatedResponse<ActivityFeedItem>, IndexerApiError>;
46
+ readonly getSubscriptions: () => Effect.Effect<readonly SubscriptionResponse[], IndexerApiError>;
47
+ readonly createSubscription: (body: CreateSubscriptionInput) => Effect.Effect<SubscriptionResponse, IndexerApiError>;
48
+ readonly updateSubscription: (id: number, body: UpdateSubscriptionInput) => Effect.Effect<SubscriptionResponse, IndexerApiError>;
49
+ readonly deleteSubscription: (id: number) => Effect.Effect<{
50
+ success: true;
51
+ }, IndexerApiError>;
44
52
  }
45
53
  declare const IndexerClient_base: Context.TagClass<IndexerClient, "IndexerClient", IndexerClientService>;
46
54
  export declare class IndexerClient extends IndexerClient_base {
@@ -1 +1 @@
1
- {"version":3,"file":"IndexerClient.d.ts","sourceRoot":"","sources":["../../src/client/IndexerClient.ts"],"names":[],"mappings":"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"}
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;AAepD,wEAAwE;AAExE,MAAM,OAAO,eAAgB,SAAQ,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAIrE;CAAG;AAmEL,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;AAsBpD,wEAAwE;AAExE,MAAM,OAAO,eAAgB,SAAQ,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAIrE;CAAG;AA0FL,wEAAwE;AAExE,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAG5D;CAAG"}