@the-situation/indexer 0.13.0 → 0.14.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 (87) hide show
  1. package/README.md +21 -0
  2. package/dist/__tests__/performance/perf-fixtures.d.ts +26 -0
  3. package/dist/__tests__/performance/perf-fixtures.d.ts.map +1 -0
  4. package/dist/__tests__/performance/perf-fixtures.js +172 -0
  5. package/dist/__tests__/performance/perf-fixtures.js.map +1 -0
  6. package/dist/__tests__/performance/perf-utils.d.ts +42 -0
  7. package/dist/__tests__/performance/perf-utils.d.ts.map +1 -0
  8. package/dist/__tests__/performance/perf-utils.js +91 -0
  9. package/dist/__tests__/performance/perf-utils.js.map +1 -0
  10. package/dist/api/app.d.ts +1 -1
  11. package/dist/api/routes/admin-subscriptions.d.ts +1 -1
  12. package/dist/api/routes/admin.d.ts.map +1 -1
  13. package/dist/api/routes/admin.js +4 -0
  14. package/dist/api/routes/admin.js.map +1 -1
  15. package/dist/api/routes/market-events.d.ts.map +1 -1
  16. package/dist/api/routes/market-events.js +8 -0
  17. package/dist/api/routes/market-events.js.map +1 -1
  18. package/dist/api/routes/markets.d.ts.map +1 -1
  19. package/dist/api/routes/markets.js +8 -0
  20. package/dist/api/routes/markets.js.map +1 -1
  21. package/dist/api/routes/trader-events.d.ts.map +1 -1
  22. package/dist/api/routes/trader-events.js +8 -0
  23. package/dist/api/routes/trader-events.js.map +1 -1
  24. package/dist/db/connection.d.ts.map +1 -1
  25. package/dist/db/connection.js +4 -0
  26. package/dist/db/connection.js.map +1 -1
  27. package/dist/db/repositories/activity-feed.d.ts +3 -0
  28. package/dist/db/repositories/activity-feed.d.ts.map +1 -1
  29. package/dist/db/repositories/activity-feed.js +33 -18
  30. package/dist/db/repositories/activity-feed.js.map +1 -1
  31. package/dist/db/repositories/event.d.ts +22 -0
  32. package/dist/db/repositories/event.d.ts.map +1 -1
  33. package/dist/db/repositories/event.js +139 -75
  34. package/dist/db/repositories/event.js.map +1 -1
  35. package/dist/db/repositories/lp-position.d.ts +2 -10
  36. package/dist/db/repositories/lp-position.d.ts.map +1 -1
  37. package/dist/db/repositories/lp-position.js +54 -52
  38. package/dist/db/repositories/lp-position.js.map +1 -1
  39. package/dist/db/repositories/market-state.d.ts +10 -0
  40. package/dist/db/repositories/market-state.d.ts.map +1 -1
  41. package/dist/db/repositories/market-state.js +16 -5
  42. package/dist/db/repositories/market-state.js.map +1 -1
  43. package/dist/db/repositories/market.d.ts +7 -0
  44. package/dist/db/repositories/market.d.ts.map +1 -1
  45. package/dist/db/repositories/market.js +32 -24
  46. package/dist/db/repositories/market.js.map +1 -1
  47. package/dist/db/repositories/multinoulli-snapshots.d.ts +1 -0
  48. package/dist/db/repositories/multinoulli-snapshots.d.ts.map +1 -1
  49. package/dist/db/repositories/multinoulli-snapshots.js +7 -5
  50. package/dist/db/repositories/multinoulli-snapshots.js.map +1 -1
  51. package/dist/db/repositories/position.d.ts +1 -0
  52. package/dist/db/repositories/position.d.ts.map +1 -1
  53. package/dist/db/repositories/position.js +9 -0
  54. package/dist/db/repositories/position.js.map +1 -1
  55. package/dist/db/schema.d.ts.map +1 -1
  56. package/dist/db/schema.js +114 -5
  57. package/dist/db/schema.js.map +1 -1
  58. package/dist/etl/decoder.js +16 -0
  59. package/dist/etl/decoder.js.map +1 -1
  60. package/dist/etl/event-indexer.d.ts.map +1 -1
  61. package/dist/etl/event-indexer.js +138 -74
  62. package/dist/etl/event-indexer.js.map +1 -1
  63. package/dist/etl/lp-position-refresher.d.ts +9 -3
  64. package/dist/etl/lp-position-refresher.d.ts.map +1 -1
  65. package/dist/etl/lp-position-refresher.js +74 -21
  66. package/dist/etl/lp-position-refresher.js.map +1 -1
  67. package/dist/etl/position-refresher.d.ts +9 -3
  68. package/dist/etl/position-refresher.d.ts.map +1 -1
  69. package/dist/etl/position-refresher.js +44 -36
  70. package/dist/etl/position-refresher.js.map +1 -1
  71. package/dist/etl/state-refresher.d.ts +8 -3
  72. package/dist/etl/state-refresher.d.ts.map +1 -1
  73. package/dist/etl/state-refresher.js +137 -12
  74. package/dist/etl/state-refresher.js.map +1 -1
  75. package/dist/layers/ChainReaderLive.d.ts.map +1 -1
  76. package/dist/layers/ChainReaderLive.js +69 -22
  77. package/dist/layers/ChainReaderLive.js.map +1 -1
  78. package/dist/services/ChainReader.d.ts +21 -0
  79. package/dist/services/ChainReader.d.ts.map +1 -1
  80. package/dist/services/ChainReader.js.map +1 -1
  81. package/dist/types/api.d.ts +28 -0
  82. package/dist/types/api.d.ts.map +1 -1
  83. package/dist/types/event.d.ts +24 -0
  84. package/dist/types/event.d.ts.map +1 -1
  85. package/dist/types/market.d.ts +16 -0
  86. package/dist/types/market.d.ts.map +1 -1
  87. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"lp-position.js","sourceRoot":"","sources":["../../../src/db/repositories/lp-position.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lp-position.js","sourceRoot":"","sources":["../../../src/db/repositories/lp-position.ts"],"names":[],"mappings":"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"}
@@ -8,15 +8,25 @@ export interface UpsertMarketStateInput {
8
8
  readonly mean: number | null;
9
9
  readonly sigma: number | null;
10
10
  readonly variance: number | null;
11
+ readonly mean_2?: number | null;
12
+ readonly sigma_2?: number | null;
13
+ readonly variance_2?: number | null;
14
+ readonly rho?: number | null;
11
15
  readonly is_initialized: boolean;
12
16
  readonly is_paused: boolean;
13
17
  readonly is_settled: boolean;
14
18
  readonly settlement_value: number | null;
19
+ readonly settlement_x1?: number | null;
20
+ readonly settlement_x2?: number | null;
15
21
  readonly total_shares: string | null;
16
22
  readonly total_backing: string | null;
17
23
  readonly mean_raw: string | null;
18
24
  readonly sigma_raw: string | null;
19
25
  readonly variance_raw: string | null;
26
+ readonly mean_2_raw?: string | null;
27
+ readonly sigma_2_raw?: string | null;
28
+ readonly variance_2_raw?: string | null;
29
+ readonly rho_raw?: string | null;
20
30
  readonly k: number | null;
21
31
  readonly effective_k: number | null;
22
32
  readonly payout_amplifier: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"market-state.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/market-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IA8C3C,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAQ1D,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;CAQ5C"}
1
+ {"version":3,"file":"market-state.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/market-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAmE3C,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAQ1D,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;CAQ5C"}
@@ -6,28 +6,39 @@ export class MarketStateRepository {
6
6
  upsert(input) {
7
7
  this.db
8
8
  .query(`INSERT INTO market_state
9
- (market_address, mean, sigma, variance, is_initialized, is_paused,
10
- is_settled, settlement_value, total_shares, total_backing,
11
- mean_raw, sigma_raw, variance_raw, k, effective_k, payout_amplifier, fetched_at)
12
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, unixepoch())
9
+ (market_address, mean, sigma, variance, mean_2, sigma_2, variance_2, rho,
10
+ is_initialized, is_paused, is_settled, settlement_value, settlement_x1, settlement_x2,
11
+ total_shares, total_backing, mean_raw, sigma_raw, variance_raw, mean_2_raw,
12
+ sigma_2_raw, variance_2_raw, rho_raw, k, effective_k, payout_amplifier, fetched_at)
13
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, unixepoch())
13
14
  ON CONFLICT(market_address) DO UPDATE SET
14
15
  mean = excluded.mean,
15
16
  sigma = excluded.sigma,
16
17
  variance = excluded.variance,
18
+ mean_2 = excluded.mean_2,
19
+ sigma_2 = excluded.sigma_2,
20
+ variance_2 = excluded.variance_2,
21
+ rho = excluded.rho,
17
22
  is_initialized = excluded.is_initialized,
18
23
  is_paused = excluded.is_paused,
19
24
  is_settled = excluded.is_settled,
20
25
  settlement_value = excluded.settlement_value,
26
+ settlement_x1 = excluded.settlement_x1,
27
+ settlement_x2 = excluded.settlement_x2,
21
28
  total_shares = excluded.total_shares,
22
29
  total_backing = excluded.total_backing,
23
30
  mean_raw = excluded.mean_raw,
24
31
  sigma_raw = excluded.sigma_raw,
25
32
  variance_raw = excluded.variance_raw,
33
+ mean_2_raw = excluded.mean_2_raw,
34
+ sigma_2_raw = excluded.sigma_2_raw,
35
+ variance_2_raw = excluded.variance_2_raw,
36
+ rho_raw = excluded.rho_raw,
26
37
  k = excluded.k,
27
38
  effective_k = excluded.effective_k,
28
39
  payout_amplifier = excluded.payout_amplifier,
29
40
  fetched_at = unixepoch()`)
30
- .run(input.market_address, input.mean, input.sigma, input.variance, input.is_initialized ? 1 : 0, input.is_paused ? 1 : 0, input.is_settled ? 1 : 0, input.settlement_value, input.total_shares, input.total_backing, input.mean_raw, input.sigma_raw, input.variance_raw, input.k, input.effective_k, input.payout_amplifier);
41
+ .run(input.market_address, input.mean, input.sigma, input.variance, input.mean_2 ?? null, input.sigma_2 ?? null, input.variance_2 ?? null, input.rho ?? null, input.is_initialized ? 1 : 0, input.is_paused ? 1 : 0, input.is_settled ? 1 : 0, input.settlement_value, input.settlement_x1 ?? null, input.settlement_x2 ?? null, input.total_shares, input.total_backing, input.mean_raw, input.sigma_raw, input.variance_raw, input.mean_2_raw ?? null, input.sigma_2_raw ?? null, input.variance_2_raw ?? null, input.rho_raw ?? null, input.k, input.effective_k, input.payout_amplifier);
31
42
  }
32
43
  findByMarket(marketAddress) {
33
44
  return (this.db
@@ -1 +1 @@
1
- {"version":3,"file":"market-state.js","sourceRoot":"","sources":["../../../src/db/repositories/market-state.ts"],"names":[],"mappings":"AAyBA,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C,MAAM,CAAC,KAA6B;QAClC,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;;;;;;;;;;;;;;;;;;;;oCAqB4B,CAC7B;aACA,GAAG,CACF,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5B,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxB,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,CAAC,EACP,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,gBAAgB,CACvB,CAAC;IACN,CAAC;IAED,YAAY,CAAC,aAAqB;QAChC,OAAO,CACJ,IAAI,CAAC,EAAE;aACL,KAAK,CAAC,qDAAqD,CAAC;aAC5D,GAAG,CAAC,aAAa,CAA2B,IAAI,IAAI,CACxD,CAAC;IACJ,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAsB,CAAC;QACnF,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
1
+ {"version":3,"file":"market-state.js","sourceRoot":"","sources":["../../../src/db/repositories/market-state.ts"],"names":[],"mappings":"AAmCA,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C,MAAM,CAAC,KAA6B;QAClC,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAgC4B,CAC7B;aACA,GAAG,CACF,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,OAAO,IAAI,IAAI,EACrB,KAAK,CAAC,UAAU,IAAI,IAAI,EACxB,KAAK,CAAC,GAAG,IAAI,IAAI,EACjB,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5B,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxB,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,aAAa,IAAI,IAAI,EAC3B,KAAK,CAAC,aAAa,IAAI,IAAI,EAC3B,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,UAAU,IAAI,IAAI,EACxB,KAAK,CAAC,WAAW,IAAI,IAAI,EACzB,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,OAAO,IAAI,IAAI,EACrB,KAAK,CAAC,CAAC,EACP,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,gBAAgB,CACvB,CAAC;IACN,CAAC;IAED,YAAY,CAAC,aAAqB;QAChC,OAAO,CACJ,IAAI,CAAC,EAAE;aACL,KAAK,CAAC,qDAAqD,CAAC;aAC5D,GAAG,CAAC,aAAa,CAA2B,IAAI,IAAI,CACxD,CAAC;IACJ,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAsB,CAAC;QACnF,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -5,6 +5,13 @@ import type { Database } from 'bun:sqlite';
5
5
  import type { CreateMarketInput, MarketRow, UpdateMarketInput } from '../../types';
6
6
  export declare class MarketRepository {
7
7
  private readonly db;
8
+ private readonly findAllStmt;
9
+ private readonly findAllActiveStmt;
10
+ private readonly findByAddressStmt;
11
+ private readonly createStmt;
12
+ private readonly updateStmt;
13
+ private readonly softDeleteStmt;
14
+ private readonly countStmt;
8
15
  constructor(db: Database);
9
16
  findAll(activeOnly?: boolean): MarketRow[];
10
17
  findByAddress(address: string): MarketRow | null;
@@ -1 +1 @@
1
- {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/market.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnF,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC,OAAO,CAAC,UAAU,UAAQ,GAAG,SAAS,EAAE;IAOxC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAOhD,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS;IA6B3C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI;IAmEnE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOpC,KAAK,IAAI,MAAM;CAMhB"}
1
+ {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/market.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnF,qBAAa,gBAAgB;IASf,OAAO,CAAC,QAAQ,CAAC,EAAE;IAR/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;gBAE7B,EAAE,EAAE,QAAQ;IA0BzC,OAAO,CAAC,UAAU,UAAQ,GAAG,SAAS,EAAE;IAMxC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIhD,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS;IAyB3C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI;IA8DnE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKpC,KAAK,IAAI,MAAM;CAMhB"}
@@ -1,28 +1,44 @@
1
1
  export class MarketRepository {
2
2
  db;
3
+ findAllStmt;
4
+ findAllActiveStmt;
5
+ findByAddressStmt;
6
+ createStmt;
7
+ updateStmt;
8
+ softDeleteStmt;
9
+ countStmt;
3
10
  constructor(db) {
4
11
  this.db = db;
12
+ this.findAllStmt = this.db.query('SELECT * FROM markets ORDER BY created_at DESC');
13
+ this.findAllActiveStmt = this.db.query('SELECT * FROM markets WHERE is_active = 1 ORDER BY created_at DESC');
14
+ this.findByAddressStmt = this.db.query('SELECT * FROM markets WHERE address = ?');
15
+ this.createStmt = this.db.query(`INSERT INTO markets (address, title, description, category, topics, market_type,
16
+ x_axis_label, x_axis_unit, y_axis_label, y_axis_unit, outcome_labels, row_labels, col_labels, resolution_source)
17
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
18
+ this.updateStmt = this.db.query(`UPDATE markets
19
+ SET title = ?, description = ?, category = ?, topics = ?,
20
+ is_active = ?, market_type = ?,
21
+ x_axis_label = ?, x_axis_unit = ?, y_axis_label = ?, y_axis_unit = ?, outcome_labels = ?,
22
+ row_labels = ?, col_labels = ?, resolution_source = ?,
23
+ updated_at = unixepoch()
24
+ WHERE address = ?`);
25
+ this.softDeleteStmt = this.db.query('UPDATE markets SET is_active = 0, updated_at = unixepoch() WHERE address = ?');
26
+ this.countStmt = this.db.query('SELECT COUNT(*) as cnt FROM markets');
5
27
  }
6
28
  findAll(activeOnly = false) {
7
- const sql = activeOnly
8
- ? 'SELECT * FROM markets WHERE is_active = 1 ORDER BY created_at DESC'
9
- : 'SELECT * FROM markets ORDER BY created_at DESC';
10
- return this.db.query(sql).all();
29
+ return activeOnly
30
+ ? this.findAllActiveStmt.all()
31
+ : this.findAllStmt.all();
11
32
  }
12
33
  findByAddress(address) {
13
- return (this.db.query('SELECT * FROM markets WHERE address = ?').get(address) ??
14
- null);
34
+ return this.findByAddressStmt.get(address) ?? null;
15
35
  }
16
36
  create(input) {
17
37
  const topics = JSON.stringify(input.topics ?? []);
18
38
  const outcomeLabels = input.outcome_labels ? JSON.stringify(input.outcome_labels) : null;
19
39
  const rowLabels = input.row_labels ? JSON.stringify(input.row_labels) : null;
20
40
  const colLabels = input.col_labels ? JSON.stringify(input.col_labels) : null;
21
- this.db
22
- .query(`INSERT INTO markets (address, title, description, category, topics, market_type,
23
- x_axis_label, x_axis_unit, outcome_labels, row_labels, col_labels, resolution_source)
24
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
25
- .run(input.address.toLowerCase(), input.title, input.description ?? '', input.category ?? '', topics, input.market_type ?? 'normal', input.x_axis_label ?? null, input.x_axis_unit ?? null, outcomeLabels, rowLabels, colLabels, input.resolution_source ?? null);
41
+ this.createStmt.run(input.address.toLowerCase(), input.title, input.description ?? '', input.category ?? '', topics, input.market_type ?? 'normal', input.x_axis_label ?? null, input.x_axis_unit ?? null, input.y_axis_label ?? null, input.y_axis_unit ?? null, outcomeLabels, rowLabels, colLabels, input.resolution_source ?? null);
26
42
  return this.findByAddress(input.address.toLowerCase());
27
43
  }
28
44
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: explicit merge logic keeps update semantics deterministic.
@@ -40,6 +56,8 @@ export class MarketRepository {
40
56
  // New metadata fields: undefined = keep existing, null = clear, value = set
41
57
  const xAxisLabel = input.x_axis_label === undefined ? existing.x_axis_label : input.x_axis_label;
42
58
  const xAxisUnit = input.x_axis_unit === undefined ? existing.x_axis_unit : input.x_axis_unit;
59
+ const yAxisLabel = input.y_axis_label === undefined ? existing.y_axis_label : input.y_axis_label;
60
+ const yAxisUnit = input.y_axis_unit === undefined ? existing.y_axis_unit : input.y_axis_unit;
43
61
  const outcomeLabels = input.outcome_labels === undefined
44
62
  ? existing.outcome_labels
45
63
  : input.outcome_labels === null
@@ -56,25 +74,15 @@ export class MarketRepository {
56
74
  ? null
57
75
  : JSON.stringify(input.col_labels);
58
76
  const resolutionSource = input.resolution_source === undefined ? existing.resolution_source : input.resolution_source;
59
- this.db
60
- .query(`UPDATE markets
61
- SET title = ?, description = ?, category = ?, topics = ?,
62
- is_active = ?, market_type = ?,
63
- x_axis_label = ?, x_axis_unit = ?, outcome_labels = ?,
64
- row_labels = ?, col_labels = ?, resolution_source = ?,
65
- updated_at = unixepoch()
66
- WHERE address = ?`)
67
- .run(title, description, category, topics, isActive, marketType, xAxisLabel, xAxisUnit, outcomeLabels, rowLabels, colLabels, resolutionSource, address);
77
+ this.updateStmt.run(title, description, category, topics, isActive, marketType, xAxisLabel, xAxisUnit, yAxisLabel, yAxisUnit, outcomeLabels, rowLabels, colLabels, resolutionSource, address);
68
78
  return this.findByAddress(address);
69
79
  }
70
80
  softDelete(address) {
71
- const result = this.db
72
- .query('UPDATE markets SET is_active = 0, updated_at = unixepoch() WHERE address = ?')
73
- .run(address);
81
+ const result = this.softDeleteStmt.run(address);
74
82
  return result.changes > 0;
75
83
  }
76
84
  count() {
77
- const row = this.db.query('SELECT COUNT(*) as cnt FROM markets').get();
85
+ const row = this.countStmt.get();
78
86
  return row.cnt;
79
87
  }
80
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"market.js","sourceRoot":"","sources":["../../../src/db/repositories/market.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"market.js","sourceRoot":"","sources":["../../../src/db/repositories/market.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export interface MultinoulliSnapshotRow {
18
18
  }
19
19
  export interface InsertSnapshotInput {
20
20
  readonly market_address: string;
21
+ readonly timestamp?: number;
21
22
  readonly probs_json: string;
22
23
  readonly probs_hash: string;
23
24
  readonly outcome_count: number;
@@ -1 +1 @@
1
- {"version":3,"file":"multinoulli-snapshots.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/multinoulli-snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,8BAA8B;IAC7B,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;IA+BpD;;;OAGG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAiB7E,mCAAmC;IACnC,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;CAM7C"}
1
+ {"version":3,"file":"multinoulli-snapshots.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/multinoulli-snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,8BAA8B;IAC7B,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;IAkCpD;;;OAGG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAiB7E,mCAAmC;IACnC,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;CAM7C"}
@@ -9,19 +9,21 @@ export class MultinoulliSnapshotsRepository {
9
9
  * snapshot for this market, the insert is skipped.
10
10
  */
11
11
  insertIfChanged(input) {
12
+ const timestamp = input.timestamp ?? Math.floor(Date.now() / 1000);
12
13
  const latest = this.db
13
14
  .query(`SELECT probs_hash FROM multinoulli_state_snapshots
14
15
  WHERE market_address = ?
15
- ORDER BY timestamp DESC LIMIT 1`)
16
- .get(input.market_address);
16
+ AND timestamp <= ?
17
+ ORDER BY timestamp DESC, id DESC LIMIT 1`)
18
+ .get(input.market_address, timestamp);
17
19
  if (latest?.probs_hash === input.probs_hash) {
18
20
  return false; // No change — skip
19
21
  }
20
22
  this.db
21
23
  .query(`INSERT INTO multinoulli_state_snapshots
22
- (market_address, probs_json, probs_hash, outcome_count, matrix_rows, matrix_cols)
23
- VALUES (?, ?, ?, ?, ?, ?)`)
24
- .run(input.market_address, input.probs_json, input.probs_hash, input.outcome_count, input.matrix_rows, input.matrix_cols);
24
+ (market_address, timestamp, probs_json, probs_hash, outcome_count, matrix_rows, matrix_cols)
25
+ VALUES (?, ?, ?, ?, ?, ?, ?)`)
26
+ .run(input.market_address, timestamp, input.probs_json, input.probs_hash, input.outcome_count, input.matrix_rows, input.matrix_cols);
25
27
  return true;
26
28
  }
27
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"multinoulli-snapshots.js","sourceRoot":"","sources":["../../../src/db/repositories/multinoulli-snapshots.ts"],"names":[],"mappings":"AA6BA,MAAM,OAAO,8BAA8B;IACZ;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C;;;;OAIG;IACH,eAAe,CAAC,KAA0B;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,KAAK,CACJ;;yCAEiC,CAClC;aACA,GAAG,CAAC,KAAK,CAAC,cAAc,CAAkC,CAAC;QAE9D,IAAI,MAAM,EAAE,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC,CAAC,mBAAmB;QACnC,CAAC;QAED,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;mCAE2B,CAC5B;aACA,GAAG,CACF,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,WAAW,CAClB,CAAC;QAEJ,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,aAAqB,EAAE,KAAc;QAChD,MAAM,GAAG,GAAG,KAAK;YACf,CAAC,CAAC;;;;;sCAK8B;YAChC,CAAC,CAAC;;gCAEwB,CAAC;QAE7B,OAAO,KAAK;YACV,CAAC,CAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAA8B;YAC5E,CAAC,CAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAA8B,CAAC;IAC1E,CAAC;IAED,mCAAmC;IACnC,aAAa,CAAC,aAAqB;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,KAAK,CAAC,oFAAoF,CAAC;aAC3F,GAAG,CAAC,aAAa,CAAsB,CAAC;QAC3C,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"multinoulli-snapshots.js","sourceRoot":"","sources":["../../../src/db/repositories/multinoulli-snapshots.ts"],"names":[],"mappings":"AA8BA,MAAM,OAAO,8BAA8B;IACZ;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C;;;;OAIG;IACH,eAAe,CAAC,KAA0B;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,KAAK,CACJ;;;kDAG0C,CAC3C;aACA,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,CAAkC,CAAC;QAEzE,IAAI,MAAM,EAAE,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC,CAAC,mBAAmB;QACnC,CAAC;QAED,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;sCAE8B,CAC/B;aACA,GAAG,CACF,KAAK,CAAC,cAAc,EACpB,SAAS,EACT,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,WAAW,CAClB,CAAC;QAEJ,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,aAAqB,EAAE,KAAc;QAChD,MAAM,GAAG,GAAG,KAAK;YACf,CAAC,CAAC;;;;;sCAK8B;YAChC,CAAC,CAAC;;gCAEwB,CAAC;QAE7B,OAAO,KAAK;YACV,CAAC,CAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAA8B;YAC5E,CAAC,CAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAA8B,CAAC;IAC1E,CAAC;IAED,mCAAmC;IACnC,aAAa,CAAC,aAAqB;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,KAAK,CAAC,oFAAoF,CAAC;aAC3F,GAAG,CAAC,aAAa,CAAsB,CAAC;QAC3C,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;CACF"}
@@ -12,6 +12,7 @@ export declare class PositionRepository {
12
12
  findByMarket(marketAddress: string): UserPositionRow[];
13
13
  findByTrader(trader: string): UserPositionRow[];
14
14
  findAll(): UserPositionRow[];
15
+ findByActiveMarkets(): UserPositionRow[];
15
16
  deleteByMarket(marketAddress: string): number;
16
17
  }
17
18
  //# sourceMappingURL=position.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/position.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAExE,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IA0DxC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASzD,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAQtE,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,eAAe,EAAE;IAUtD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE;IAU/C,OAAO,IAAI,eAAe,EAAE;IAM5B,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;CAM9C"}
1
+ {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/position.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAExE,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IA0DxC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASzD,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAQtE,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,eAAe,EAAE;IAUtD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE;IAU/C,OAAO,IAAI,eAAe,EAAE;IAM5B,mBAAmB,IAAI,eAAe,EAAE;IAYxC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;CAM9C"}
@@ -66,6 +66,15 @@ export class PositionRepository {
66
66
  .query('SELECT * FROM user_positions ORDER BY market_address, trader')
67
67
  .all();
68
68
  }
69
+ findByActiveMarkets() {
70
+ return this.db
71
+ .query(`SELECT up.*
72
+ FROM user_positions up
73
+ JOIN markets m ON m.address = up.market_address
74
+ WHERE m.is_active = 1
75
+ ORDER BY up.market_address, up.trader`)
76
+ .all();
77
+ }
69
78
  deleteByMarket(marketAddress) {
70
79
  const result = this.db
71
80
  .query('DELETE FROM user_positions WHERE market_address = ?')
@@ -1 +1 @@
1
- {"version":3,"file":"position.js","sourceRoot":"","sources":["../../../src/db/repositories/position.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C,MAAM,CAAC,KAA0B;QAC/B,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA4B4B,CAC7B;aACA,GAAG,CACF,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,KAAK,CAAC,iBAAiB,IAAI,IAAI,EAC/B,KAAK,CAAC,IAAI,IAAI,IAAI,EAClB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,KAAK,CAAC,QAAQ,IAAI,IAAI,EACtB,KAAK,CAAC,gBAAgB,IAAI,SAAS,EACnC,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,WAAW,IAAI,CAAC,EACtB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrB,KAAK,CAAC,aAAa,IAAI,QAAQ,EAC/B,KAAK,CAAC,aAAa,IAAI,IAAI,EAC3B,KAAK,CAAC,mBAAmB,IAAI,IAAI,EACjC,KAAK,CAAC,qBAAqB,IAAI,IAAI,EACnC,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,eAAe,IAAI,IAAI,EAC7B,KAAK,CAAC,kBAAkB,IAAI,IAAI,EAChC,KAAK,CAAC,oBAAoB,IAAI,IAAI,CACnC,CAAC;IACN,CAAC;IAED,YAAY,CAAC,aAAqB,EAAE,MAAc;QAChD,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;uBACe,CAChB;aACA,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,aAAqB,EAAE,MAAc;QAC3C,OAAO,CACJ,IAAI,CAAC,EAAE;aACL,KAAK,CAAC,sEAAsE,CAAC;aAC7E,GAAG,CAAC,aAAa,EAAE,MAAM,CAA4B,IAAI,IAAI,CACjE,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,aAAqB;QAChC,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CACJ;;yBAEiB,CAClB;aACA,GAAG,CAAC,aAAa,CAAsB,CAAC;IAC7C,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CACJ;;iCAEyB,CAC1B;aACA,GAAG,CAAC,MAAM,CAAsB,CAAC;IACtC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CAAC,8DAA8D,CAAC;aACrE,GAAG,EAAuB,CAAC;IAChC,CAAC;IAED,cAAc,CAAC,aAAqB;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,KAAK,CAAC,qDAAqD,CAAC;aAC5D,GAAG,CAAC,aAAa,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"position.js","sourceRoot":"","sources":["../../../src/db/repositories/position.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C,MAAM,CAAC,KAA0B;QAC/B,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA4B4B,CAC7B;aACA,GAAG,CACF,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,KAAK,CAAC,iBAAiB,IAAI,IAAI,EAC/B,KAAK,CAAC,IAAI,IAAI,IAAI,EAClB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,KAAK,CAAC,QAAQ,IAAI,IAAI,EACtB,KAAK,CAAC,gBAAgB,IAAI,SAAS,EACnC,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,WAAW,IAAI,CAAC,EACtB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrB,KAAK,CAAC,aAAa,IAAI,QAAQ,EAC/B,KAAK,CAAC,aAAa,IAAI,IAAI,EAC3B,KAAK,CAAC,mBAAmB,IAAI,IAAI,EACjC,KAAK,CAAC,qBAAqB,IAAI,IAAI,EACnC,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,eAAe,IAAI,IAAI,EAC7B,KAAK,CAAC,kBAAkB,IAAI,IAAI,EAChC,KAAK,CAAC,oBAAoB,IAAI,IAAI,CACnC,CAAC;IACN,CAAC;IAED,YAAY,CAAC,aAAqB,EAAE,MAAc;QAChD,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;uBACe,CAChB;aACA,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,aAAqB,EAAE,MAAc;QAC3C,OAAO,CACJ,IAAI,CAAC,EAAE;aACL,KAAK,CAAC,sEAAsE,CAAC;aAC7E,GAAG,CAAC,aAAa,EAAE,MAAM,CAA4B,IAAI,IAAI,CACjE,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,aAAqB;QAChC,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CACJ;;yBAEiB,CAClB;aACA,GAAG,CAAC,aAAa,CAAsB,CAAC;IAC7C,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CACJ;;iCAEyB,CAC1B;aACA,GAAG,CAAC,MAAM,CAAsB,CAAC;IACtC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CAAC,8DAA8D,CAAC;aACrE,GAAG,EAAuB,CAAC;IAChC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CACJ;;;;+CAIuC,CACxC;aACA,GAAG,EAAuB,CAAC;IAChC,CAAC;IAED,cAAc,CAAC,aAAqB;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,KAAK,CAAC,qDAAqD,CAAC;aAC5D,GAAG,CAAC,aAAa,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAgV3C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAoDnD"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAib3C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAsGnD"}
package/dist/db/schema.js CHANGED
@@ -8,6 +8,8 @@ CREATE TABLE IF NOT EXISTS markets (
8
8
  market_type TEXT NOT NULL DEFAULT 'normal',
9
9
  x_axis_label TEXT DEFAULT NULL,
10
10
  x_axis_unit TEXT DEFAULT NULL,
11
+ y_axis_label TEXT DEFAULT NULL,
12
+ y_axis_unit TEXT DEFAULT NULL,
11
13
  outcome_labels TEXT DEFAULT NULL,
12
14
  row_labels TEXT DEFAULT NULL,
13
15
  col_labels TEXT DEFAULT NULL,
@@ -22,15 +24,25 @@ CREATE TABLE IF NOT EXISTS market_state (
22
24
  mean REAL,
23
25
  sigma REAL,
24
26
  variance REAL,
27
+ mean_2 REAL,
28
+ sigma_2 REAL,
29
+ variance_2 REAL,
30
+ rho REAL,
25
31
  is_initialized INTEGER NOT NULL DEFAULT 0,
26
32
  is_paused INTEGER NOT NULL DEFAULT 0,
27
33
  is_settled INTEGER NOT NULL DEFAULT 0,
28
34
  settlement_value REAL,
35
+ settlement_x1 REAL,
36
+ settlement_x2 REAL,
29
37
  total_shares TEXT,
30
38
  total_backing TEXT,
31
39
  mean_raw TEXT,
32
40
  sigma_raw TEXT,
33
41
  variance_raw TEXT,
42
+ mean_2_raw TEXT,
43
+ sigma_2_raw TEXT,
44
+ variance_2_raw TEXT,
45
+ rho_raw TEXT,
34
46
  k REAL,
35
47
  effective_k REAL,
36
48
  payout_amplifier REAL DEFAULT 1.0,
@@ -73,6 +85,14 @@ CREATE TABLE IF NOT EXISTS market_events (
73
85
  upper_bound REAL NOT NULL,
74
86
  old_mean REAL,
75
87
  old_std_dev REAL,
88
+ mean_2 REAL,
89
+ std_dev_2 REAL,
90
+ lower_bound_2 REAL,
91
+ upper_bound_2 REAL,
92
+ old_mean_2 REAL,
93
+ old_std_dev_2 REAL,
94
+ rho REAL,
95
+ old_rho REAL,
76
96
  collateral_posted TEXT,
77
97
  raw_data TEXT,
78
98
  outcome_count INTEGER,
@@ -87,7 +107,7 @@ CREATE TABLE IF NOT EXISTS market_events (
87
107
  );
88
108
 
89
109
  CREATE INDEX IF NOT EXISTS idx_events_market_block
90
- ON market_events(market_address, block_number);
110
+ ON market_events(market_address, block_number, timestamp, id);
91
111
 
92
112
  CREATE INDEX IF NOT EXISTS idx_events_trader
93
113
  ON market_events(trader) WHERE trader IS NOT NULL;
@@ -98,6 +118,13 @@ CREATE INDEX IF NOT EXISTS idx_events_trader_ts
98
118
  CREATE INDEX IF NOT EXISTS idx_events_market_ts
99
119
  ON market_events(market_address, timestamp);
100
120
 
121
+ CREATE INDEX IF NOT EXISTS idx_events_market_trader
122
+ ON market_events(market_address, trader) WHERE trader IS NOT NULL;
123
+
124
+ CREATE INDEX IF NOT EXISTS idx_events_market_lower_trader_type_ts
125
+ ON market_events(market_address, LOWER(trader), event_type, timestamp DESC, id DESC)
126
+ WHERE trader IS NOT NULL;
127
+
101
128
  CREATE TABLE IF NOT EXISTS user_positions (
102
129
  market_address TEXT NOT NULL REFERENCES markets(address),
103
130
  trader TEXT NOT NULL,
@@ -128,7 +155,10 @@ CREATE INDEX IF NOT EXISTS idx_positions_trader
128
155
  ON user_positions(trader);
129
156
 
130
157
  CREATE INDEX IF NOT EXISTS idx_markets_active
131
- ON markets(is_active) WHERE is_active = 1;
158
+ ON markets(created_at DESC) WHERE is_active = 1;
159
+
160
+ CREATE INDEX IF NOT EXISTS idx_markets_type_address
161
+ ON markets(market_type, address);
132
162
 
133
163
  CREATE TABLE IF NOT EXISTS multinoulli_state_snapshots (
134
164
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -160,6 +190,9 @@ CREATE TABLE IF NOT EXISTS subscriptions (
160
190
  CREATE INDEX IF NOT EXISTS idx_events_timestamp_desc
161
191
  ON market_events(timestamp DESC, id DESC);
162
192
 
193
+ CREATE INDEX IF NOT EXISTS idx_events_type_timestamp_desc
194
+ ON market_events(event_type, timestamp DESC, id DESC);
195
+
163
196
  CREATE TABLE IF NOT EXISTS spice_mints (
164
197
  recipient TEXT PRIMARY KEY,
165
198
  tx_hash TEXT,
@@ -228,6 +261,20 @@ function hasUniqueSingleColumnIndex(db, table, column) {
228
261
  }
229
262
  return false;
230
263
  }
264
+ function indexColumnNames(db, indexName) {
265
+ const rows = db.query(`PRAGMA index_info(${indexName})`).all();
266
+ return rows.map((row) => row.name);
267
+ }
268
+ function ensureIndexColumns(db, indexName, expectedColumns, createSql) {
269
+ const existingColumns = indexColumnNames(db, indexName);
270
+ const matches = existingColumns.length === expectedColumns.length &&
271
+ existingColumns.every((name, idx) => name === expectedColumns[idx]);
272
+ if (matches) {
273
+ return;
274
+ }
275
+ db.exec(`DROP INDEX IF EXISTS ${indexName}`);
276
+ db.exec(createSql);
277
+ }
231
278
  function migrateMarketEventsTable(db) {
232
279
  const columns = tableColumns(db, 'market_events');
233
280
  const hasEventUid = columns.has('event_uid');
@@ -238,12 +285,28 @@ function migrateMarketEventsTable(db) {
238
285
  const hasSettlementValue = columns.has('settlement_value');
239
286
  const hasSettlementX1 = columns.has('settlement_x1');
240
287
  const hasSettlementX2 = columns.has('settlement_x2');
288
+ const hasMean2 = columns.has('mean_2');
289
+ const hasStdDev2 = columns.has('std_dev_2');
290
+ const hasLowerBound2 = columns.has('lower_bound_2');
291
+ const hasUpperBound2 = columns.has('upper_bound_2');
292
+ const hasOldMean2 = columns.has('old_mean_2');
293
+ const hasOldStdDev2 = columns.has('old_std_dev_2');
294
+ const hasRho = columns.has('rho');
295
+ const hasOldRho = columns.has('old_rho');
241
296
  const eventUidExpr = hasEventUid
242
297
  ? "COALESCE(event_uid, tx_hash || ':' || CAST(id AS TEXT))"
243
298
  : "tx_hash || ':' || CAST(id AS TEXT)";
244
299
  const settlementValueExpr = hasSettlementValue ? 'settlement_value' : 'NULL';
245
300
  const settlementX1Expr = hasSettlementX1 ? 'settlement_x1' : 'NULL';
246
301
  const settlementX2Expr = hasSettlementX2 ? 'settlement_x2' : 'NULL';
302
+ const mean2Expr = hasMean2 ? 'mean_2' : 'NULL';
303
+ const stdDev2Expr = hasStdDev2 ? 'std_dev_2' : 'NULL';
304
+ const lowerBound2Expr = hasLowerBound2 ? 'lower_bound_2' : 'NULL';
305
+ const upperBound2Expr = hasUpperBound2 ? 'upper_bound_2' : 'NULL';
306
+ const oldMean2Expr = hasOldMean2 ? 'old_mean_2' : 'NULL';
307
+ const oldStdDev2Expr = hasOldStdDev2 ? 'old_std_dev_2' : 'NULL';
308
+ const rhoExpr = hasRho ? 'rho' : 'NULL';
309
+ const oldRhoExpr = hasOldRho ? 'old_rho' : 'NULL';
247
310
  db.exec('PRAGMA foreign_keys = OFF');
248
311
  db.exec('BEGIN');
249
312
  try {
@@ -263,6 +326,14 @@ function migrateMarketEventsTable(db) {
263
326
  upper_bound REAL NOT NULL,
264
327
  old_mean REAL,
265
328
  old_std_dev REAL,
329
+ mean_2 REAL,
330
+ std_dev_2 REAL,
331
+ lower_bound_2 REAL,
332
+ upper_bound_2 REAL,
333
+ old_mean_2 REAL,
334
+ old_std_dev_2 REAL,
335
+ rho REAL,
336
+ old_rho REAL,
266
337
  collateral_posted TEXT,
267
338
  raw_data TEXT,
268
339
  outcome_count INTEGER,
@@ -280,7 +351,8 @@ function migrateMarketEventsTable(db) {
280
351
  INSERT INTO market_events_v2 (
281
352
  id, market_address, event_uid, tx_hash, block_number, timestamp, event_type,
282
353
  trader, mean, std_dev, lower_bound, upper_bound,
283
- old_mean, old_std_dev, collateral_posted, raw_data,
354
+ old_mean, old_std_dev, mean_2, std_dev_2, lower_bound_2, upper_bound_2,
355
+ old_mean_2, old_std_dev_2, rho, old_rho, collateral_posted, raw_data,
284
356
  outcome_count, min_outcome_index, is_position_sell,
285
357
  settlement_outcome_index, settlement_outcomes_json,
286
358
  settlement_value, settlement_x1, settlement_x2, created_at
@@ -288,7 +360,8 @@ function migrateMarketEventsTable(db) {
288
360
  SELECT
289
361
  id, market_address, ${eventUidExpr}, tx_hash, block_number, timestamp, event_type,
290
362
  trader, mean, std_dev, lower_bound, upper_bound,
291
- old_mean, old_std_dev, collateral_posted, raw_data,
363
+ old_mean, old_std_dev, ${mean2Expr}, ${stdDev2Expr}, ${lowerBound2Expr}, ${upperBound2Expr},
364
+ ${oldMean2Expr}, ${oldStdDev2Expr}, ${rhoExpr}, ${oldRhoExpr}, collateral_posted, raw_data,
292
365
  outcome_count, min_outcome_index, is_position_sell,
293
366
  settlement_outcome_index, settlement_outcomes_json,
294
367
  ${settlementValueExpr}, ${settlementX1Expr}, ${settlementX2Expr}, created_at
@@ -296,10 +369,14 @@ function migrateMarketEventsTable(db) {
296
369
  `);
297
370
  db.exec('DROP TABLE market_events');
298
371
  db.exec('ALTER TABLE market_events_v2 RENAME TO market_events');
299
- db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_block ON market_events(market_address, block_number)');
372
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_block ON market_events(market_address, block_number, timestamp, id)');
300
373
  db.exec('CREATE INDEX IF NOT EXISTS idx_events_trader ON market_events(trader) WHERE trader IS NOT NULL');
301
374
  db.exec('CREATE INDEX IF NOT EXISTS idx_events_trader_ts ON market_events(trader, timestamp DESC) WHERE trader IS NOT NULL');
302
375
  db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_ts ON market_events(market_address, timestamp)');
376
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_trader ON market_events(market_address, trader) WHERE trader IS NOT NULL');
377
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_lower_trader_type_ts ON market_events(market_address, LOWER(trader), event_type, timestamp DESC, id DESC) WHERE trader IS NOT NULL');
378
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_timestamp_desc ON market_events(timestamp DESC, id DESC)');
379
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_type_timestamp_desc ON market_events(event_type, timestamp DESC, id DESC)');
303
380
  db.exec('COMMIT');
304
381
  }
305
382
  catch (error) {
@@ -323,6 +400,14 @@ export function initializeSchema(db) {
323
400
  safeAddColumn(db, 'market_events', 'settlement_value', 'REAL');
324
401
  safeAddColumn(db, 'market_events', 'settlement_x1', 'REAL');
325
402
  safeAddColumn(db, 'market_events', 'settlement_x2', 'REAL');
403
+ safeAddColumn(db, 'market_events', 'mean_2', 'REAL');
404
+ safeAddColumn(db, 'market_events', 'std_dev_2', 'REAL');
405
+ safeAddColumn(db, 'market_events', 'lower_bound_2', 'REAL');
406
+ safeAddColumn(db, 'market_events', 'upper_bound_2', 'REAL');
407
+ safeAddColumn(db, 'market_events', 'old_mean_2', 'REAL');
408
+ safeAddColumn(db, 'market_events', 'old_std_dev_2', 'REAL');
409
+ safeAddColumn(db, 'market_events', 'rho', 'REAL');
410
+ safeAddColumn(db, 'market_events', 'old_rho', 'REAL');
326
411
  safeAddColumn(db, 'user_positions', 'position_type', "TEXT DEFAULT 'normal'");
327
412
  safeAddColumn(db, 'user_positions', 'outcome_count', 'INTEGER');
328
413
  safeAddColumn(db, 'user_positions', 'original_probs_json', 'TEXT');
@@ -337,12 +422,29 @@ export function initializeSchema(db) {
337
422
  safeAddColumn(db, 'market_state', 'k', 'REAL');
338
423
  safeAddColumn(db, 'market_state', 'effective_k', 'REAL');
339
424
  safeAddColumn(db, 'market_state', 'payout_amplifier', 'REAL DEFAULT 1.0');
425
+ safeAddColumn(db, 'market_state', 'mean_2', 'REAL');
426
+ safeAddColumn(db, 'market_state', 'sigma_2', 'REAL');
427
+ safeAddColumn(db, 'market_state', 'variance_2', 'REAL');
428
+ safeAddColumn(db, 'market_state', 'rho', 'REAL');
429
+ safeAddColumn(db, 'market_state', 'settlement_x1', 'REAL');
430
+ safeAddColumn(db, 'market_state', 'settlement_x2', 'REAL');
431
+ safeAddColumn(db, 'market_state', 'mean_2_raw', 'TEXT');
432
+ safeAddColumn(db, 'market_state', 'sigma_2_raw', 'TEXT');
433
+ safeAddColumn(db, 'market_state', 'variance_2_raw', 'TEXT');
434
+ safeAddColumn(db, 'market_state', 'rho_raw', 'TEXT');
435
+ safeAddColumn(db, 'multinoulli_market_state', 'matrix_constraint_mode', 'INTEGER DEFAULT 0');
436
+ safeAddColumn(db, 'multinoulli_market_state', 'matrix_rows', 'INTEGER DEFAULT 0');
437
+ safeAddColumn(db, 'multinoulli_market_state', 'matrix_cols', 'INTEGER DEFAULT 0');
340
438
  safeAddColumn(db, 'multinoulli_market_state', 'payout_amplifier', 'REAL DEFAULT 1.0');
439
+ safeAddColumn(db, 'multinoulli_state_snapshots', 'matrix_rows', 'INTEGER DEFAULT 0');
440
+ safeAddColumn(db, 'multinoulli_state_snapshots', 'matrix_cols', 'INTEGER DEFAULT 0');
341
441
  // Webhook subscription secret
342
442
  safeAddColumn(db, 'subscriptions', 'secret', 'TEXT');
343
443
  // Rich market metadata columns
344
444
  safeAddColumn(db, 'markets', 'x_axis_label', 'TEXT DEFAULT NULL');
345
445
  safeAddColumn(db, 'markets', 'x_axis_unit', 'TEXT DEFAULT NULL');
446
+ safeAddColumn(db, 'markets', 'y_axis_label', 'TEXT DEFAULT NULL');
447
+ safeAddColumn(db, 'markets', 'y_axis_unit', 'TEXT DEFAULT NULL');
346
448
  safeAddColumn(db, 'markets', 'outcome_labels', 'TEXT DEFAULT NULL');
347
449
  safeAddColumn(db, 'markets', 'row_labels', 'TEXT DEFAULT NULL');
348
450
  safeAddColumn(db, 'markets', 'col_labels', 'TEXT DEFAULT NULL');
@@ -356,5 +458,12 @@ export function initializeSchema(db) {
356
458
  safeAddColumn(db, 'lp_positions', 'claim_payout', 'REAL');
357
459
  // Rebuild event table when upgrading from legacy tx_hash-unique schema.
358
460
  migrateMarketEventsTable(db);
461
+ // Upgrade legacy index definitions in-place without changing schema compatibility.
462
+ ensureIndexColumns(db, 'idx_events_market_block', ['market_address', 'block_number', 'timestamp', 'id'], 'CREATE INDEX idx_events_market_block ON market_events(market_address, block_number, timestamp, id)');
463
+ ensureIndexColumns(db, 'idx_markets_active', ['created_at'], 'CREATE INDEX idx_markets_active ON markets(created_at DESC) WHERE is_active = 1');
464
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_trader ON market_events(market_address, trader) WHERE trader IS NOT NULL');
465
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_lower_trader_type_ts ON market_events(market_address, LOWER(trader), event_type, timestamp DESC, id DESC) WHERE trader IS NOT NULL');
466
+ db.exec('CREATE INDEX IF NOT EXISTS idx_events_type_timestamp_desc ON market_events(event_type, timestamp DESC, id DESC)');
467
+ db.exec('CREATE INDEX IF NOT EXISTS idx_markets_type_address ON markets(market_type, address)');
359
468
  }
360
469
  //# sourceMappingURL=schema.js.map