@the-situation/indexer 0.13.0 → 0.15.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.
- package/README.md +21 -0
- package/dist/__tests__/performance/perf-fixtures.d.ts +26 -0
- package/dist/__tests__/performance/perf-fixtures.d.ts.map +1 -0
- package/dist/__tests__/performance/perf-fixtures.js +172 -0
- package/dist/__tests__/performance/perf-fixtures.js.map +1 -0
- package/dist/__tests__/performance/perf-utils.d.ts +42 -0
- package/dist/__tests__/performance/perf-utils.d.ts.map +1 -0
- package/dist/__tests__/performance/perf-utils.js +91 -0
- package/dist/__tests__/performance/perf-utils.js.map +1 -0
- package/dist/api/app.d.ts +6 -6
- package/dist/api/routes/admin-subscriptions.d.ts +6 -6
- package/dist/api/routes/admin.d.ts.map +1 -1
- package/dist/api/routes/admin.js +4 -0
- package/dist/api/routes/admin.js.map +1 -1
- package/dist/api/routes/market-events.d.ts.map +1 -1
- package/dist/api/routes/market-events.js +8 -0
- package/dist/api/routes/market-events.js.map +1 -1
- package/dist/api/routes/markets.d.ts.map +1 -1
- package/dist/api/routes/markets.js +8 -0
- package/dist/api/routes/markets.js.map +1 -1
- package/dist/api/routes/trader-events.d.ts.map +1 -1
- package/dist/api/routes/trader-events.js +8 -0
- package/dist/api/routes/trader-events.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +4 -0
- package/dist/db/connection.js.map +1 -1
- package/dist/db/repositories/activity-feed.d.ts +3 -0
- package/dist/db/repositories/activity-feed.d.ts.map +1 -1
- package/dist/db/repositories/activity-feed.js +33 -18
- package/dist/db/repositories/activity-feed.js.map +1 -1
- package/dist/db/repositories/event.d.ts +22 -0
- package/dist/db/repositories/event.d.ts.map +1 -1
- package/dist/db/repositories/event.js +139 -75
- package/dist/db/repositories/event.js.map +1 -1
- package/dist/db/repositories/lp-position.d.ts +2 -10
- package/dist/db/repositories/lp-position.d.ts.map +1 -1
- package/dist/db/repositories/lp-position.js +54 -52
- package/dist/db/repositories/lp-position.js.map +1 -1
- package/dist/db/repositories/market-state.d.ts +10 -0
- package/dist/db/repositories/market-state.d.ts.map +1 -1
- package/dist/db/repositories/market-state.js +16 -5
- package/dist/db/repositories/market-state.js.map +1 -1
- package/dist/db/repositories/market.d.ts +7 -0
- package/dist/db/repositories/market.d.ts.map +1 -1
- package/dist/db/repositories/market.js +32 -24
- package/dist/db/repositories/market.js.map +1 -1
- package/dist/db/repositories/multinoulli-snapshots.d.ts +1 -0
- package/dist/db/repositories/multinoulli-snapshots.d.ts.map +1 -1
- package/dist/db/repositories/multinoulli-snapshots.js +7 -5
- package/dist/db/repositories/multinoulli-snapshots.js.map +1 -1
- package/dist/db/repositories/position.d.ts +1 -0
- package/dist/db/repositories/position.d.ts.map +1 -1
- package/dist/db/repositories/position.js +9 -0
- package/dist/db/repositories/position.js.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +114 -5
- package/dist/db/schema.js.map +1 -1
- package/dist/etl/decoder.js +16 -0
- package/dist/etl/decoder.js.map +1 -1
- package/dist/etl/event-indexer.d.ts +6 -2
- package/dist/etl/event-indexer.d.ts.map +1 -1
- package/dist/etl/event-indexer.js +175 -79
- package/dist/etl/event-indexer.js.map +1 -1
- package/dist/etl/lp-position-refresher.d.ts +8 -2
- package/dist/etl/lp-position-refresher.d.ts.map +1 -1
- package/dist/etl/lp-position-refresher.js +74 -21
- package/dist/etl/lp-position-refresher.js.map +1 -1
- package/dist/etl/position-refresher.d.ts +9 -3
- package/dist/etl/position-refresher.d.ts.map +1 -1
- package/dist/etl/position-refresher.js +44 -36
- package/dist/etl/position-refresher.js.map +1 -1
- package/dist/etl/state-refresher.d.ts +8 -3
- package/dist/etl/state-refresher.d.ts.map +1 -1
- package/dist/etl/state-refresher.js +154 -16
- package/dist/etl/state-refresher.js.map +1 -1
- package/dist/layers/ChainReaderLive.d.ts.map +1 -1
- package/dist/layers/ChainReaderLive.js +180 -26
- package/dist/layers/ChainReaderLive.js.map +1 -1
- package/dist/services/ChainReader.d.ts +34 -1
- package/dist/services/ChainReader.d.ts.map +1 -1
- package/dist/services/ChainReader.js.map +1 -1
- package/dist/services/VoyagerRateLimit.d.ts +13 -1
- package/dist/services/VoyagerRateLimit.d.ts.map +1 -1
- package/dist/services/VoyagerRateLimit.js +20 -3
- package/dist/services/VoyagerRateLimit.js.map +1 -1
- package/dist/types/api.d.ts +28 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/event.d.ts +24 -0
- package/dist/types/event.d.ts.map +1 -1
- package/dist/types/market.d.ts +16 -0
- package/dist/types/market.d.ts.map +1 -1
- package/package.json +3 -1
|
@@ -13,10 +13,20 @@ export class LPPositionRepository {
|
|
|
13
13
|
/** Recompute deposit/withdrawal totals from market_events. Idempotent — safe
|
|
14
14
|
* to call on every event cycle without double-counting. */
|
|
15
15
|
recomputeFromEvents(marketAddress, provider) {
|
|
16
|
+
this.recomputeFromEventsBatch(marketAddress, [provider]);
|
|
17
|
+
}
|
|
18
|
+
/** Recompute LP aggregates for multiple providers in one DB pass. */
|
|
19
|
+
recomputeFromEventsBatch(marketAddress, providers) {
|
|
16
20
|
const mAddr = marketAddress.toLowerCase();
|
|
17
|
-
const
|
|
18
|
-
|
|
21
|
+
const normalizedProviders = Array.from(new Set(providers
|
|
22
|
+
.map((provider) => provider.toLowerCase().trim())
|
|
23
|
+
.filter((provider) => provider.length > 0)));
|
|
24
|
+
if (normalizedProviders.length === 0)
|
|
25
|
+
return;
|
|
26
|
+
const placeholders = normalizedProviders.map(() => '?').join(', ');
|
|
27
|
+
const rows = this.db
|
|
19
28
|
.query(`SELECT
|
|
29
|
+
LOWER(trader) AS provider,
|
|
20
30
|
COALESCE(SUM(CASE WHEN event_type IN ('liquidity_added', 'market_initialized')
|
|
21
31
|
THEN CAST(collateral_posted AS REAL) / 1e18 ELSE 0 END), 0) AS total_deposited,
|
|
22
32
|
COALESCE(SUM(CASE WHEN event_type = 'liquidity_removed'
|
|
@@ -26,58 +36,50 @@ export class LPPositionRepository {
|
|
|
26
36
|
MIN(CASE WHEN event_type IN ('liquidity_added', 'market_initialized') THEN timestamp END) AS first_deposit_at,
|
|
27
37
|
MAX(timestamp) AS last_activity_at
|
|
28
38
|
FROM market_events
|
|
29
|
-
WHERE market_address = ?
|
|
30
|
-
AND event_type IN ('liquidity_added', 'liquidity_removed', 'market_initialized')
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
.run(row.total_deposited, row.total_withdrawn, row.deposit_count, row.withdrawal_count, row.first_deposit_at, row.last_activity_at, mAddr, pAddr);
|
|
44
|
-
// Populate entry distribution from market_state if not yet set.
|
|
45
|
-
// The initial LP sets the market distribution, so their entry distribution
|
|
46
|
-
// equals the market's initial distribution at the time of their first deposit.
|
|
47
|
-
this.populateEntryDistributionIfMissing(mAddr, pAddr);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* If entry_mean is null, populate entry distribution + component_lambda from market_state.
|
|
51
|
-
*
|
|
52
|
-
* Lambda formula: `k × √(2σ√π)` — the AMM's full-pool lambda for the distribution.
|
|
53
|
-
* This is the full lambda, not scaled by share fraction. Consumers must scale by
|
|
54
|
-
* `shares / totalShares` to get the per-LP component lambda. We store the full value
|
|
55
|
-
* because the share fraction at LP-entry time isn't readily available in this context,
|
|
56
|
-
* and the consumer already has the shares data from `getLPShares`.
|
|
57
|
-
*/
|
|
58
|
-
populateEntryDistributionIfMissing(marketAddress, provider) {
|
|
59
|
-
const existing = this.db
|
|
60
|
-
.query('SELECT entry_mean FROM lp_positions WHERE market_address = ? AND provider = ?')
|
|
61
|
-
.get(marketAddress, provider);
|
|
62
|
-
if (existing?.entry_mean != null)
|
|
63
|
-
return; // already populated
|
|
64
|
-
// Use the market's current distribution as fallback (works for the bootstrapper LP
|
|
65
|
-
// who set the initial distribution, and is a reasonable approximation for later LPs).
|
|
39
|
+
WHERE market_address = ?
|
|
40
|
+
AND event_type IN ('liquidity_added', 'liquidity_removed', 'market_initialized')
|
|
41
|
+
AND LOWER(trader) IN (${placeholders})
|
|
42
|
+
GROUP BY LOWER(trader)`)
|
|
43
|
+
.all(mAddr, ...normalizedProviders);
|
|
44
|
+
const aggregatesByProvider = new Map(rows.map((row) => [row.provider, row]));
|
|
45
|
+
const updateStats = this.db.query(`UPDATE lp_positions
|
|
46
|
+
SET total_deposited = ?,
|
|
47
|
+
total_withdrawn = ?,
|
|
48
|
+
deposit_count = ?,
|
|
49
|
+
withdrawal_count = ?,
|
|
50
|
+
first_deposit_at = ?,
|
|
51
|
+
last_activity_at = ?
|
|
52
|
+
WHERE market_address = ? AND provider = ?`);
|
|
66
53
|
const state = this.db
|
|
67
54
|
.query('SELECT mean, sigma, k FROM market_state WHERE market_address = ?')
|
|
68
|
-
.get(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
55
|
+
.get(mAddr);
|
|
56
|
+
const entryState = state != null && state.mean != null && state.sigma != null && state.k != null
|
|
57
|
+
? { mean: state.mean, sigma: state.sigma, k: state.k }
|
|
58
|
+
: null;
|
|
59
|
+
// Lambda = k × sqrt(2σsqrt(pi)) for the full pool; LP consumers scale by share fraction.
|
|
60
|
+
const lambda = entryState
|
|
61
|
+
? entryState.k * Math.sqrt(2 * entryState.sigma * Math.sqrt(Math.PI))
|
|
62
|
+
: null;
|
|
63
|
+
const updateEntryDistribution = entryState
|
|
64
|
+
? this.db.query(`UPDATE lp_positions
|
|
65
|
+
SET entry_mean = ?,
|
|
66
|
+
entry_sigma = ?,
|
|
67
|
+
entry_k = ?,
|
|
68
|
+
component_lambda = ?
|
|
69
|
+
WHERE market_address = ? AND provider = ? AND entry_mean IS NULL`)
|
|
70
|
+
: null;
|
|
71
|
+
const tx = this.db.transaction(() => {
|
|
72
|
+
for (const provider of normalizedProviders) {
|
|
73
|
+
const row = aggregatesByProvider.get(provider);
|
|
74
|
+
updateStats.run(row?.total_deposited ?? 0, row?.total_withdrawn ?? 0, row?.deposit_count ?? 0, row?.withdrawal_count ?? 0, row?.first_deposit_at ?? null, row?.last_activity_at ?? null, mAddr, provider);
|
|
75
|
+
// The initial LP sets the market distribution, so their entry distribution
|
|
76
|
+
// equals the market's initial distribution at the time of their first deposit.
|
|
77
|
+
if (updateEntryDistribution && entryState && lambda != null) {
|
|
78
|
+
updateEntryDistribution.run(entryState.mean, entryState.sigma, entryState.k, lambda, mAddr, provider);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
tx();
|
|
81
83
|
}
|
|
82
84
|
/** Set entry distribution fields if not yet populated. */
|
|
83
85
|
upsertEntryDistribution(marketAddress, provider, mean, sigma, k) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lp-position.js","sourceRoot":"","sources":["../../../src/db/repositories/lp-position.ts"],"names":[],"mappings":"AAoCA,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C,8DAA8D;IAC9D,cAAc,CAAC,aAAqB,EAAE,QAAgB;QACpD,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;uBACe,CAChB;aACA,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;gEAC4D;IAC5D,mBAAmB,CAAC,aAAqB,EAAE,QAAgB;QACzD,
|
|
1
|
+
{"version":3,"file":"lp-position.js","sourceRoot":"","sources":["../../../src/db/repositories/lp-position.ts"],"names":[],"mappings":"AAoCA,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAE7C,8DAA8D;IAC9D,cAAc,CAAC,aAAqB,EAAE,QAAgB;QACpD,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;uBACe,CAChB;aACA,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;gEAC4D;IAC5D,mBAAmB,CAAC,aAAqB,EAAE,QAAgB;QACzD,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,qEAAqE;IACrE,wBAAwB,CAAC,aAAqB,EAAE,SAA4B;QAC1E,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CACpC,IAAI,GAAG,CACL,SAAS;aACN,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;aAChD,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAC7C,CACF,CAAC;QACF,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,KAAK,CACJ;;;;;;;;;;;;;mCAa2B,YAAY;gCACf,CACzB;aACA,GAAG,CAAC,KAAK,EAAE,GAAG,mBAAmB,CAQlC,CAAC;QAEH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7E,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAC/B;;;;;;;iDAO2C,CAC5C,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE;aAClB,KAAK,CAAC,kEAAkE,CAAC;aACzE,GAAG,CAAC,KAAK,CAA2E,CAAC;QACxF,MAAM,UAAU,GACd,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI;YAC3E,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;YACtD,CAAC,CAAC,IAAI,CAAC;QACX,yFAAyF;QACzF,MAAM,MAAM,GAAG,UAAU;YACvB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,uBAAuB,GAAG,UAAU;YACxC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CACX;;;;;4EAKkE,CACnE;YACH,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAClC,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;gBAC3C,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/C,WAAW,CAAC,GAAG,CACb,GAAG,EAAE,eAAe,IAAI,CAAC,EACzB,GAAG,EAAE,eAAe,IAAI,CAAC,EACzB,GAAG,EAAE,aAAa,IAAI,CAAC,EACvB,GAAG,EAAE,gBAAgB,IAAI,CAAC,EAC1B,GAAG,EAAE,gBAAgB,IAAI,IAAI,EAC7B,GAAG,EAAE,gBAAgB,IAAI,IAAI,EAC7B,KAAK,EACL,QAAQ,CACT,CAAC;gBAEF,2EAA2E;gBAC3E,+EAA+E;gBAC/E,IAAI,uBAAuB,IAAI,UAAU,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBAC5D,uBAAuB,CAAC,GAAG,CACzB,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,CAAC,EACZ,MAAM,EACN,KAAK,EACL,QAAQ,CACT,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,EAAE,CAAC;IACP,CAAC;IAED,0DAA0D;IAC1D,uBAAuB,CACrB,aAAqB,EACrB,QAAgB,EAChB,IAAmB,EACnB,KAAoB,EACpB,CAAgB;QAEhB,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO;QACzB,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;;;0EAIkE,CACnE;aACA,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,0FAA0F;IAC1F,WAAW,CACT,aAAqB,EACrB,QAAgB,EAChB,SAAiB,EACjB,WAAmB;QAEnB,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;;mDAG2C,CAC5C;aACA,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,qDAAqD;IACrD,MAAM,CAAC,KAA4B;QACjC,IAAI,CAAC,EAAE;aACJ,KAAK,CACJ;;;;;;mDAM2C,CAC5C;aACA,GAAG,CACF,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,aAAa,IAAI,IAAI,EAC3B,KAAK,CAAC,aAAa,IAAI,IAAI,EAC3B,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,EAClC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC7B,CAAC;IACN,CAAC;IAED,YAAY,CAAC,aAAqB;QAChC,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CAAC,iFAAiF,CAAC;aACxF,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAoB,CAAC;IACzD,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CAAC,+CAA+C,CAAC;aACtD,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAoB,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,aAAqB,EAAE,QAAgB;QAC7C,OACE,IAAI,CAAC,EAAE;aACJ,KAAK,CAAC,sEAAsE,CAAC;aAC7E,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,CAC3D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAqB,CAAC;IAC9E,CAAC;IAED,cAAc,CAAC,aAAqB;QAClC,OAAO,IAAI,CAAC,EAAE;aACX,KAAK,CAAC,mDAAmD,CAAC;aAC1D,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -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;
|
|
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,
|
|
10
|
-
is_settled, settlement_value,
|
|
11
|
-
|
|
12
|
-
|
|
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":"
|
|
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;
|
|
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
|
-
|
|
8
|
-
?
|
|
9
|
-
:
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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":"AAMA,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"market.js","sourceRoot":"","sources":["../../../src/db/repositories/market.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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
|
-
|
|
16
|
-
|
|
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":"
|
|
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"}
|
package/dist/db/schema.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|