@the-situation/indexer 0.11.0 → 0.11.2
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 +5 -1
- package/dist/api/app.d.ts +40 -0
- package/dist/api/app.d.ts.map +1 -1
- package/dist/api/app.js +2 -1
- package/dist/api/app.js.map +1 -1
- package/dist/api/routes/admin.d.ts.map +1 -1
- package/dist/api/routes/admin.js +16 -0
- package/dist/api/routes/admin.js.map +1 -1
- package/dist/api/routes/index.d.ts +1 -0
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/index.js +1 -0
- package/dist/api/routes/index.js.map +1 -1
- package/dist/api/routes/market-events.d.ts.map +1 -1
- package/dist/api/routes/market-events.js.map +1 -1
- package/dist/api/routes/market-traders.d.ts.map +1 -1
- package/dist/api/routes/market-traders.js +1 -0
- package/dist/api/routes/market-traders.js.map +1 -1
- package/dist/api/routes/multinoulli-snapshots.d.ts +78 -0
- package/dist/api/routes/multinoulli-snapshots.d.ts.map +1 -0
- package/dist/api/routes/multinoulli-snapshots.js +33 -0
- package/dist/api/routes/multinoulli-snapshots.js.map +1 -0
- package/dist/api/routes/positions.d.ts.map +1 -1
- package/dist/api/routes/positions.js +1 -0
- package/dist/api/routes/positions.js.map +1 -1
- package/dist/api/routes/trader-events.d.ts.map +1 -1
- package/dist/api/routes/trader-events.js.map +1 -1
- package/dist/client/IndexerClient.d.ts +2 -1
- package/dist/client/IndexerClient.d.ts.map +1 -1
- package/dist/client/IndexerClient.js.map +1 -1
- package/dist/client/IndexerClientLive.d.ts.map +1 -1
- package/dist/client/IndexerClientLive.js +7 -0
- package/dist/client/IndexerClientLive.js.map +1 -1
- package/dist/client/convenience.d.ts +1 -0
- package/dist/client/convenience.d.ts.map +1 -1
- package/dist/client/convenience.js +1 -0
- package/dist/client/convenience.js.map +1 -1
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/trader-stats.d.ts +2 -0
- package/dist/client/trader-stats.d.ts.map +1 -1
- package/dist/client/trader-stats.js +5 -1
- package/dist/client/trader-stats.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/db/repositories/event.d.ts +2 -1
- package/dist/db/repositories/event.d.ts.map +1 -1
- package/dist/db/repositories/event.js +16 -12
- package/dist/db/repositories/event.js.map +1 -1
- package/dist/db/repositories/market-state.d.ts +2 -0
- package/dist/db/repositories/market-state.d.ts.map +1 -1
- package/dist/db/repositories/market-state.js +5 -3
- package/dist/db/repositories/market-state.js.map +1 -1
- package/dist/db/repositories/multinoulli-snapshots.d.ts +44 -0
- package/dist/db/repositories/multinoulli-snapshots.d.ts.map +1 -0
- package/dist/db/repositories/multinoulli-snapshots.js +54 -0
- package/dist/db/repositories/multinoulli-snapshots.js.map +1 -0
- package/dist/db/repositories/position.d.ts.map +1 -1
- package/dist/db/repositories/position.js +10 -3
- package/dist/db/repositories/position.js.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +142 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/etl/decoder.d.ts.map +1 -1
- package/dist/etl/decoder.js +195 -29
- package/dist/etl/decoder.js.map +1 -1
- package/dist/etl/event-indexer.d.ts +1 -1
- package/dist/etl/event-indexer.d.ts.map +1 -1
- package/dist/etl/event-indexer.js +16 -0
- package/dist/etl/event-indexer.js.map +1 -1
- package/dist/etl/position-refresher.d.ts +2 -2
- package/dist/etl/position-refresher.d.ts.map +1 -1
- package/dist/etl/position-refresher.js +80 -4
- package/dist/etl/position-refresher.js.map +1 -1
- package/dist/etl/state-refresher.d.ts +1 -1
- package/dist/etl/state-refresher.d.ts.map +1 -1
- package/dist/etl/state-refresher.js +18 -2
- package/dist/etl/state-refresher.js.map +1 -1
- package/dist/index.js +4 -175
- package/dist/index.js.map +1 -1
- package/dist/layers/ChainReaderLive.d.ts +2 -0
- package/dist/layers/ChainReaderLive.d.ts.map +1 -1
- package/dist/layers/ChainReaderLive.js +256 -63
- package/dist/layers/ChainReaderLive.js.map +1 -1
- package/dist/layers/DatabaseLive.d.ts.map +1 -1
- package/dist/layers/DatabaseLive.js +2 -0
- package/dist/layers/DatabaseLive.js.map +1 -1
- package/dist/layers/index.d.ts +1 -1
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/layers/index.js +1 -1
- package/dist/layers/index.js.map +1 -1
- package/dist/services/ChainReader.d.ts +11 -3
- package/dist/services/ChainReader.d.ts.map +1 -1
- package/dist/services/ChainReader.js.map +1 -1
- package/dist/services/Database.d.ts +2 -0
- package/dist/services/Database.d.ts.map +1 -1
- package/dist/services/Database.js.map +1 -1
- package/dist/types/api.d.ts +12 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/event.d.ts +16 -1
- package/dist/types/event.d.ts.map +1 -1
- package/dist/types/market.d.ts +7 -1
- package/dist/types/market.d.ts.map +1 -1
- package/dist/types/position.d.ts +10 -0
- package/dist/types/position.d.ts.map +1 -1
- package/package.json +3 -1
|
@@ -66,13 +66,17 @@ export const getFullTraderProfile = (trader) => Effect.flatMap(IndexerClient, (c
|
|
|
66
66
|
rankings: client.getRankings({ limit: 200 }),
|
|
67
67
|
activity: getTraderActivity(trader).pipe(Effect.provideService(IndexerClient, client)),
|
|
68
68
|
}, { concurrency: 'unbounded' }).pipe(Effect.map(({ stats, positions, rankings, activity }) => {
|
|
69
|
-
const
|
|
69
|
+
const rankingsArray = rankings;
|
|
70
|
+
const rankIndex = rankingsArray.findIndex((r) => r.trader.toLowerCase() === trader.toLowerCase());
|
|
71
|
+
const ranking = rankIndex >= 0 ? rankingsArray[rankIndex] : null;
|
|
72
|
+
const rank = rankIndex >= 0 ? rankIndex + 1 : null;
|
|
70
73
|
const pnlHistory = computePnlHistory(activity);
|
|
71
74
|
return {
|
|
72
75
|
trader,
|
|
73
76
|
stats,
|
|
74
77
|
positions,
|
|
75
78
|
ranking,
|
|
79
|
+
rank,
|
|
76
80
|
recentActivity: activity,
|
|
77
81
|
pnlHistory,
|
|
78
82
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trader-stats.js","sourceRoot":"","sources":["../../src/client/trader-stats.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOhC,OAAO,EAAwB,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"trader-stats.js","sourceRoot":"","sources":["../../src/client/trader-stats.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;CAC9C;AAED,wBAAgB,UAAU,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;CAC9C;AAED,wBAAgB,UAAU,IAAI,aAAa,CAqB1C"}
|
package/dist/config.js
CHANGED
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
export function loadConfig() {
|
|
5
5
|
const voyagerApiKey = requireEnv('VOYAGER_API_KEY');
|
|
6
6
|
const adminApiKey = requireEnv('ADMIN_API_KEY');
|
|
7
|
+
const env = process.env;
|
|
7
8
|
return {
|
|
8
9
|
voyagerApiKey,
|
|
9
10
|
adminApiKey,
|
|
10
|
-
dbPath:
|
|
11
|
+
dbPath: env.DB_PATH ?? './data/indexer.db',
|
|
11
12
|
port: envInt('PORT', 3000),
|
|
12
|
-
starknetRpcUrl:
|
|
13
|
+
starknetRpcUrl: env.STARKNET_RPC_URL ?? 'https://api.cartridge.gg/x/starknet/sepolia',
|
|
13
14
|
eventPollIntervalMs: envInt('EVENT_POLL_INTERVAL_MS', 15000),
|
|
14
15
|
statePollIntervalMs: envInt('STATE_POLL_INTERVAL_MS', 30000),
|
|
15
16
|
positionPollIntervalMs: envInt('POSITION_POLL_INTERVAL_MS', 60000),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,MAAM,UAAU,UAAU;IACxB,MAAM,aAAa,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,MAAM,UAAU,UAAU;IACxB,MAAM,aAAa,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,GAGnB,CAAC;IAEF,OAAO;QACL,aAAa;QACb,WAAW;QACX,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,mBAAmB;QAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QAC1B,cAAc,EAAE,GAAG,CAAC,gBAAgB,IAAI,6CAA6C;QACrF,mBAAmB,EAAE,MAAM,CAAC,wBAAwB,EAAE,KAAK,CAAC;QAC5D,mBAAmB,EAAE,MAAM,CAAC,wBAAwB,EAAE,KAAK,CAAC;QAC5D,sBAAsB,EAAE,MAAM,CAAC,2BAA2B,EAAE,KAAK,CAAC;QAClE,iBAAiB,EAAE,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACnD,kBAAkB,EAAE,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC;QACzD,2BAA2B,EAAE,MAAM,CAAC,iCAAiC,EAAE,GAAG,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,IAAY,EAAE,QAAgB;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Event insert (dedup by
|
|
2
|
+
* Event insert (dedup by event_uid UNIQUE) + queries.
|
|
3
3
|
*/
|
|
4
4
|
import type { Database } from 'bun:sqlite';
|
|
5
5
|
import type { InsertEventInput, MarketEventRow } from '../../types';
|
|
6
6
|
export declare class EventRepository {
|
|
7
7
|
private readonly db;
|
|
8
8
|
constructor(db: Database);
|
|
9
|
+
private runInsert;
|
|
9
10
|
insert(input: InsertEventInput): boolean;
|
|
10
11
|
insertBatch(inputs: readonly InsertEventInput[]): number;
|
|
11
12
|
findByMarket(marketAddress: string, options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/event.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEpE,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/event.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEpE,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC,OAAO,CAAC,SAAS;IA6BjB,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO;IAmBxC,WAAW,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM;IAuBxD,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC7B,GACL,cAAc,EAAE;IA0BnB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAO5C,UAAU,IAAI,MAAM;IAKpB,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC7B,GACL,CAAC,cAAc,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE;IA4BhD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOrC,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;CAUrD"}
|
|
@@ -3,17 +3,21 @@ export class EventRepository {
|
|
|
3
3
|
constructor(db) {
|
|
4
4
|
this.db = db;
|
|
5
5
|
}
|
|
6
|
+
runInsert(stmt, input) {
|
|
7
|
+
const result = stmt.run(input.market_address, input.event_uid, input.tx_hash, input.block_number, input.timestamp, input.event_type, input.trader, input.mean, input.std_dev, input.lower_bound, input.upper_bound, input.old_mean, input.old_std_dev, input.collateral_posted, input.raw_data, input.outcome_count ?? null, input.min_outcome_index ?? null, input.is_position_sell != null ? (input.is_position_sell ? 1 : 0) : null, input.settlement_outcome_index ?? null, input.settlement_outcomes_json ?? null, input.settlement_value ?? null, input.settlement_x1 ?? null, input.settlement_x2 ?? null);
|
|
8
|
+
return result.changes;
|
|
9
|
+
}
|
|
6
10
|
insert(input) {
|
|
7
11
|
try {
|
|
8
|
-
this.db
|
|
9
|
-
|
|
10
|
-
(market_address, tx_hash, block_number, timestamp, event_type,
|
|
12
|
+
const stmt = this.db.query(`INSERT OR IGNORE INTO market_events
|
|
13
|
+
(market_address, event_uid, tx_hash, block_number, timestamp, event_type,
|
|
11
14
|
trader, mean, std_dev, lower_bound, upper_bound,
|
|
12
15
|
old_mean, old_std_dev, collateral_posted, raw_data,
|
|
13
16
|
outcome_count, min_outcome_index, is_position_sell,
|
|
14
|
-
settlement_outcome_index, settlement_outcomes_json
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
settlement_outcome_index, settlement_outcomes_json,
|
|
18
|
+
settlement_value, settlement_x1, settlement_x2)
|
|
19
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
20
|
+
this.runInsert(stmt, input);
|
|
17
21
|
return true;
|
|
18
22
|
}
|
|
19
23
|
catch {
|
|
@@ -23,16 +27,16 @@ export class EventRepository {
|
|
|
23
27
|
insertBatch(inputs) {
|
|
24
28
|
let inserted = 0;
|
|
25
29
|
const stmt = this.db.query(`INSERT OR IGNORE INTO market_events
|
|
26
|
-
(market_address, tx_hash, block_number, timestamp, event_type,
|
|
30
|
+
(market_address, event_uid, tx_hash, block_number, timestamp, event_type,
|
|
27
31
|
trader, mean, std_dev, lower_bound, upper_bound,
|
|
28
32
|
old_mean, old_std_dev, collateral_posted, raw_data,
|
|
29
33
|
outcome_count, min_outcome_index, is_position_sell,
|
|
30
|
-
settlement_outcome_index, settlement_outcomes_json
|
|
31
|
-
|
|
34
|
+
settlement_outcome_index, settlement_outcomes_json,
|
|
35
|
+
settlement_value, settlement_x1, settlement_x2)
|
|
36
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
32
37
|
const tx = this.db.transaction(() => {
|
|
33
38
|
for (const input of inputs) {
|
|
34
|
-
|
|
35
|
-
inserted += result.changes;
|
|
39
|
+
inserted += this.runInsert(stmt, input);
|
|
36
40
|
}
|
|
37
41
|
});
|
|
38
42
|
tx();
|
|
@@ -54,7 +58,7 @@ export class EventRepository {
|
|
|
54
58
|
return this.db
|
|
55
59
|
.query(`SELECT * FROM market_events
|
|
56
60
|
WHERE ${conditions.join(' AND ')}
|
|
57
|
-
ORDER BY block_number ASC, timestamp ASC
|
|
61
|
+
ORDER BY block_number ASC, timestamp ASC, id ASC
|
|
58
62
|
LIMIT ? OFFSET ?`)
|
|
59
63
|
.all(...params);
|
|
60
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/db/repositories/event.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/db/repositories/event.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,8 @@ export interface UpsertMarketStateInput {
|
|
|
17
17
|
readonly mean_raw: string | null;
|
|
18
18
|
readonly sigma_raw: string | null;
|
|
19
19
|
readonly variance_raw: string | null;
|
|
20
|
+
readonly k: number | null;
|
|
21
|
+
readonly effective_k: number | null;
|
|
20
22
|
}
|
|
21
23
|
export declare class MarketStateRepository {
|
|
22
24
|
private readonly db;
|
|
@@ -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;
|
|
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;CACrC;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEzC,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IA4C3C,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAQ1D,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;CAQ5C"}
|
|
@@ -8,8 +8,8 @@ export class MarketStateRepository {
|
|
|
8
8
|
.query(`INSERT INTO market_state
|
|
9
9
|
(market_address, mean, sigma, variance, is_initialized, is_paused,
|
|
10
10
|
is_settled, settlement_value, total_shares, total_backing,
|
|
11
|
-
mean_raw, sigma_raw, variance_raw, fetched_at)
|
|
12
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, unixepoch())
|
|
11
|
+
mean_raw, sigma_raw, variance_raw, k, effective_k, fetched_at)
|
|
12
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, unixepoch())
|
|
13
13
|
ON CONFLICT(market_address) DO UPDATE SET
|
|
14
14
|
mean = excluded.mean,
|
|
15
15
|
sigma = excluded.sigma,
|
|
@@ -23,8 +23,10 @@ export class MarketStateRepository {
|
|
|
23
23
|
mean_raw = excluded.mean_raw,
|
|
24
24
|
sigma_raw = excluded.sigma_raw,
|
|
25
25
|
variance_raw = excluded.variance_raw,
|
|
26
|
+
k = excluded.k,
|
|
27
|
+
effective_k = excluded.effective_k,
|
|
26
28
|
fetched_at = unixepoch()`)
|
|
27
|
-
.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);
|
|
29
|
+
.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);
|
|
28
30
|
}
|
|
29
31
|
findByMarket(marketAddress) {
|
|
30
32
|
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":"AAwBA,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;;;;;;;;;;;;;;;;;;;;oCAoB4B,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,CAClB,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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multinoulli state snapshots — historical probability vectors for time series.
|
|
3
|
+
*
|
|
4
|
+
* A new row is inserted each time the state refresher detects a probability
|
|
5
|
+
* change (via probs_hash), giving the frontend a time series of probability
|
|
6
|
+
* vectors without needing per-event RPC calls.
|
|
7
|
+
*/
|
|
8
|
+
import type { Database } from 'bun:sqlite';
|
|
9
|
+
export interface MultinoulliSnapshotRow {
|
|
10
|
+
readonly id: number;
|
|
11
|
+
readonly market_address: string;
|
|
12
|
+
readonly timestamp: number;
|
|
13
|
+
readonly probs_json: string;
|
|
14
|
+
readonly probs_hash: string;
|
|
15
|
+
readonly outcome_count: number;
|
|
16
|
+
readonly matrix_rows: number;
|
|
17
|
+
readonly matrix_cols: number;
|
|
18
|
+
}
|
|
19
|
+
export interface InsertSnapshotInput {
|
|
20
|
+
readonly market_address: string;
|
|
21
|
+
readonly probs_json: string;
|
|
22
|
+
readonly probs_hash: string;
|
|
23
|
+
readonly outcome_count: number;
|
|
24
|
+
readonly matrix_rows: number;
|
|
25
|
+
readonly matrix_cols: number;
|
|
26
|
+
}
|
|
27
|
+
export declare class MultinoulliSnapshotsRepository {
|
|
28
|
+
private readonly db;
|
|
29
|
+
constructor(db: Database);
|
|
30
|
+
/**
|
|
31
|
+
* Insert a snapshot only if the probs have changed since the last one.
|
|
32
|
+
* Uses probs_hash to deduplicate — if the hash matches the latest
|
|
33
|
+
* snapshot for this market, the insert is skipped.
|
|
34
|
+
*/
|
|
35
|
+
insertIfChanged(input: InsertSnapshotInput): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get all snapshots for a market, ordered by timestamp ascending.
|
|
38
|
+
* Optionally limited to the most recent N snapshots.
|
|
39
|
+
*/
|
|
40
|
+
findByMarket(marketAddress: string, limit?: number): MultinoulliSnapshotRow[];
|
|
41
|
+
/** Count snapshots for a market */
|
|
42
|
+
countByMarket(marketAddress: string): number;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=multinoulli-snapshots.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export class MultinoulliSnapshotsRepository {
|
|
2
|
+
db;
|
|
3
|
+
constructor(db) {
|
|
4
|
+
this.db = db;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Insert a snapshot only if the probs have changed since the last one.
|
|
8
|
+
* Uses probs_hash to deduplicate — if the hash matches the latest
|
|
9
|
+
* snapshot for this market, the insert is skipped.
|
|
10
|
+
*/
|
|
11
|
+
insertIfChanged(input) {
|
|
12
|
+
const latest = this.db
|
|
13
|
+
.query(`SELECT probs_hash FROM multinoulli_state_snapshots
|
|
14
|
+
WHERE market_address = ?
|
|
15
|
+
ORDER BY timestamp DESC LIMIT 1`)
|
|
16
|
+
.get(input.market_address);
|
|
17
|
+
if (latest?.probs_hash === input.probs_hash) {
|
|
18
|
+
return false; // No change — skip
|
|
19
|
+
}
|
|
20
|
+
this.db
|
|
21
|
+
.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);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get all snapshots for a market, ordered by timestamp ascending.
|
|
29
|
+
* Optionally limited to the most recent N snapshots.
|
|
30
|
+
*/
|
|
31
|
+
findByMarket(marketAddress, limit) {
|
|
32
|
+
const sql = limit
|
|
33
|
+
? `SELECT * FROM (
|
|
34
|
+
SELECT * FROM multinoulli_state_snapshots
|
|
35
|
+
WHERE market_address = ?
|
|
36
|
+
ORDER BY timestamp DESC
|
|
37
|
+
LIMIT ?
|
|
38
|
+
) sub ORDER BY timestamp ASC`
|
|
39
|
+
: `SELECT * FROM multinoulli_state_snapshots
|
|
40
|
+
WHERE market_address = ?
|
|
41
|
+
ORDER BY timestamp ASC`;
|
|
42
|
+
return limit
|
|
43
|
+
? this.db.query(sql).all(marketAddress, limit)
|
|
44
|
+
: this.db.query(sql).all(marketAddress);
|
|
45
|
+
}
|
|
46
|
+
/** Count snapshots for a market */
|
|
47
|
+
countByMarket(marketAddress) {
|
|
48
|
+
const row = this.db
|
|
49
|
+
.query('SELECT COUNT(*) as count FROM multinoulli_state_snapshots WHERE market_address = ?')
|
|
50
|
+
.get(marketAddress);
|
|
51
|
+
return row.count;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=multinoulli-snapshots.js.map
|
|
@@ -0,0 +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 +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;
|
|
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;IAwDxC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASzD,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"}
|
|
@@ -9,8 +9,10 @@ export class PositionRepository {
|
|
|
9
9
|
(market_address, trader, has_position, collateral_locked,
|
|
10
10
|
mean, sigma, variance, settlement_state, unrealized_pnl,
|
|
11
11
|
delta_count, claimed, position_type, outcome_count,
|
|
12
|
-
original_probs_json, collateral_locked_raw,
|
|
13
|
-
|
|
12
|
+
original_probs_json, collateral_locked_raw,
|
|
13
|
+
expected_value, effective_mean, effective_sigma, effective_variance,
|
|
14
|
+
effective_probs_json, fetched_at)
|
|
15
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, unixepoch())
|
|
14
16
|
ON CONFLICT(market_address, trader) DO UPDATE SET
|
|
15
17
|
has_position = excluded.has_position,
|
|
16
18
|
collateral_locked = excluded.collateral_locked,
|
|
@@ -25,8 +27,13 @@ export class PositionRepository {
|
|
|
25
27
|
outcome_count = excluded.outcome_count,
|
|
26
28
|
original_probs_json = excluded.original_probs_json,
|
|
27
29
|
collateral_locked_raw = excluded.collateral_locked_raw,
|
|
30
|
+
expected_value = excluded.expected_value,
|
|
31
|
+
effective_mean = excluded.effective_mean,
|
|
32
|
+
effective_sigma = excluded.effective_sigma,
|
|
33
|
+
effective_variance = excluded.effective_variance,
|
|
34
|
+
effective_probs_json = excluded.effective_probs_json,
|
|
28
35
|
fetched_at = unixepoch()`)
|
|
29
|
-
.run(input.market_address, input.trader, input.has_position ? 1 : 0, input.collateral_locked ?? null, input.mean ?? null, input.sigma ?? null, input.variance ?? null, input.settlement_state ?? 'unknown', input.unrealized_pnl ?? null, input.delta_count ?? 0, input.claimed ? 1 : 0, input.position_type ?? 'normal', input.outcome_count ?? null, input.original_probs_json ?? null, input.collateral_locked_raw ?? null);
|
|
36
|
+
.run(input.market_address, input.trader, input.has_position ? 1 : 0, input.collateral_locked ?? null, input.mean ?? null, input.sigma ?? null, input.variance ?? null, input.settlement_state ?? 'unknown', input.unrealized_pnl ?? null, input.delta_count ?? 0, input.claimed ? 1 : 0, input.position_type ?? 'normal', input.outcome_count ?? null, input.original_probs_json ?? null, input.collateral_locked_raw ?? null, input.expected_value ?? null, input.effective_mean ?? null, input.effective_sigma ?? null, input.effective_variance ?? null, input.effective_probs_json ?? null);
|
|
30
37
|
}
|
|
31
38
|
ensureTrader(marketAddress, trader) {
|
|
32
39
|
this.db
|
|
@@ -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
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;oCA2B4B,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,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,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"}
|
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;AA4R3C,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAsCnD"}
|
package/dist/db/schema.js
CHANGED
|
@@ -31,6 +31,8 @@ CREATE TABLE IF NOT EXISTS market_state (
|
|
|
31
31
|
mean_raw TEXT,
|
|
32
32
|
sigma_raw TEXT,
|
|
33
33
|
variance_raw TEXT,
|
|
34
|
+
k REAL,
|
|
35
|
+
effective_k REAL,
|
|
34
36
|
fetched_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
35
37
|
);
|
|
36
38
|
|
|
@@ -56,7 +58,8 @@ CREATE TABLE IF NOT EXISTS multinoulli_market_state (
|
|
|
56
58
|
CREATE TABLE IF NOT EXISTS market_events (
|
|
57
59
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
58
60
|
market_address TEXT NOT NULL REFERENCES markets(address),
|
|
59
|
-
|
|
61
|
+
event_uid TEXT NOT NULL UNIQUE,
|
|
62
|
+
tx_hash TEXT NOT NULL,
|
|
60
63
|
block_number INTEGER NOT NULL,
|
|
61
64
|
timestamp INTEGER NOT NULL,
|
|
62
65
|
event_type TEXT NOT NULL,
|
|
@@ -74,6 +77,9 @@ CREATE TABLE IF NOT EXISTS market_events (
|
|
|
74
77
|
is_position_sell INTEGER,
|
|
75
78
|
settlement_outcome_index INTEGER,
|
|
76
79
|
settlement_outcomes_json TEXT,
|
|
80
|
+
settlement_value REAL,
|
|
81
|
+
settlement_x1 REAL,
|
|
82
|
+
settlement_x2 REAL,
|
|
77
83
|
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
78
84
|
);
|
|
79
85
|
|
|
@@ -83,6 +89,9 @@ CREATE INDEX IF NOT EXISTS idx_events_market_block
|
|
|
83
89
|
CREATE INDEX IF NOT EXISTS idx_events_trader
|
|
84
90
|
ON market_events(trader) WHERE trader IS NOT NULL;
|
|
85
91
|
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_events_trader_ts
|
|
93
|
+
ON market_events(trader, timestamp DESC) WHERE trader IS NOT NULL;
|
|
94
|
+
|
|
86
95
|
CREATE INDEX IF NOT EXISTS idx_events_market_ts
|
|
87
96
|
ON market_events(market_address, timestamp);
|
|
88
97
|
|
|
@@ -102,6 +111,11 @@ CREATE TABLE IF NOT EXISTS user_positions (
|
|
|
102
111
|
outcome_count INTEGER,
|
|
103
112
|
original_probs_json TEXT,
|
|
104
113
|
collateral_locked_raw TEXT,
|
|
114
|
+
expected_value REAL,
|
|
115
|
+
effective_mean REAL,
|
|
116
|
+
effective_sigma REAL,
|
|
117
|
+
effective_variance REAL,
|
|
118
|
+
effective_probs_json TEXT,
|
|
105
119
|
fetched_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
106
120
|
PRIMARY KEY (market_address, trader)
|
|
107
121
|
);
|
|
@@ -112,6 +126,20 @@ CREATE INDEX IF NOT EXISTS idx_positions_trader
|
|
|
112
126
|
CREATE INDEX IF NOT EXISTS idx_markets_active
|
|
113
127
|
ON markets(is_active) WHERE is_active = 1;
|
|
114
128
|
|
|
129
|
+
CREATE TABLE IF NOT EXISTS multinoulli_state_snapshots (
|
|
130
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
131
|
+
market_address TEXT NOT NULL REFERENCES markets(address),
|
|
132
|
+
timestamp INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
133
|
+
probs_json TEXT NOT NULL,
|
|
134
|
+
probs_hash TEXT NOT NULL,
|
|
135
|
+
outcome_count INTEGER NOT NULL,
|
|
136
|
+
matrix_rows INTEGER DEFAULT 0,
|
|
137
|
+
matrix_cols INTEGER DEFAULT 0
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
CREATE INDEX IF NOT EXISTS idx_multinoulli_snapshots_market_ts
|
|
141
|
+
ON multinoulli_state_snapshots(market_address, timestamp);
|
|
142
|
+
|
|
115
143
|
CREATE TABLE IF NOT EXISTS indexer_cursors (
|
|
116
144
|
market_address TEXT PRIMARY KEY REFERENCES markets(address),
|
|
117
145
|
last_block_number INTEGER NOT NULL DEFAULT 0,
|
|
@@ -131,19 +159,130 @@ function safeAddColumn(db, table, column, definition) {
|
|
|
131
159
|
// Column already exists — ignore
|
|
132
160
|
}
|
|
133
161
|
}
|
|
162
|
+
function tableColumns(db, table) {
|
|
163
|
+
const rows = db.query(`PRAGMA table_info(${table})`).all();
|
|
164
|
+
return new Set(rows.map((r) => r.name));
|
|
165
|
+
}
|
|
166
|
+
function hasUniqueSingleColumnIndex(db, table, column) {
|
|
167
|
+
const indexes = db.query(`PRAGMA index_list(${table})`).all();
|
|
168
|
+
for (const idx of indexes) {
|
|
169
|
+
if (idx.unique !== 1) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const cols = db.query(`PRAGMA index_info(${idx.name})`).all();
|
|
173
|
+
if (cols.length === 1 && cols[0]?.name === column) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
function migrateMarketEventsTable(db) {
|
|
180
|
+
const columns = tableColumns(db, 'market_events');
|
|
181
|
+
const hasEventUid = columns.has('event_uid');
|
|
182
|
+
const hasLegacyUniqueTxHash = hasUniqueSingleColumnIndex(db, 'market_events', 'tx_hash');
|
|
183
|
+
if (hasEventUid && !hasLegacyUniqueTxHash) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const hasSettlementValue = columns.has('settlement_value');
|
|
187
|
+
const hasSettlementX1 = columns.has('settlement_x1');
|
|
188
|
+
const hasSettlementX2 = columns.has('settlement_x2');
|
|
189
|
+
const eventUidExpr = hasEventUid
|
|
190
|
+
? "COALESCE(event_uid, tx_hash || ':' || CAST(id AS TEXT))"
|
|
191
|
+
: "tx_hash || ':' || CAST(id AS TEXT)";
|
|
192
|
+
const settlementValueExpr = hasSettlementValue ? 'settlement_value' : 'NULL';
|
|
193
|
+
const settlementX1Expr = hasSettlementX1 ? 'settlement_x1' : 'NULL';
|
|
194
|
+
const settlementX2Expr = hasSettlementX2 ? 'settlement_x2' : 'NULL';
|
|
195
|
+
db.exec('PRAGMA foreign_keys = OFF');
|
|
196
|
+
db.exec('BEGIN');
|
|
197
|
+
try {
|
|
198
|
+
db.exec(`
|
|
199
|
+
CREATE TABLE IF NOT EXISTS market_events_v2 (
|
|
200
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
201
|
+
market_address TEXT NOT NULL REFERENCES markets(address),
|
|
202
|
+
event_uid TEXT NOT NULL UNIQUE,
|
|
203
|
+
tx_hash TEXT NOT NULL,
|
|
204
|
+
block_number INTEGER NOT NULL,
|
|
205
|
+
timestamp INTEGER NOT NULL,
|
|
206
|
+
event_type TEXT NOT NULL,
|
|
207
|
+
trader TEXT,
|
|
208
|
+
mean REAL NOT NULL,
|
|
209
|
+
std_dev REAL NOT NULL,
|
|
210
|
+
lower_bound REAL NOT NULL,
|
|
211
|
+
upper_bound REAL NOT NULL,
|
|
212
|
+
old_mean REAL,
|
|
213
|
+
old_std_dev REAL,
|
|
214
|
+
collateral_posted TEXT,
|
|
215
|
+
raw_data TEXT,
|
|
216
|
+
outcome_count INTEGER,
|
|
217
|
+
min_outcome_index INTEGER,
|
|
218
|
+
is_position_sell INTEGER,
|
|
219
|
+
settlement_outcome_index INTEGER,
|
|
220
|
+
settlement_outcomes_json TEXT,
|
|
221
|
+
settlement_value REAL,
|
|
222
|
+
settlement_x1 REAL,
|
|
223
|
+
settlement_x2 REAL,
|
|
224
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
225
|
+
);
|
|
226
|
+
`);
|
|
227
|
+
db.exec(`
|
|
228
|
+
INSERT INTO market_events_v2 (
|
|
229
|
+
id, market_address, event_uid, tx_hash, block_number, timestamp, event_type,
|
|
230
|
+
trader, mean, std_dev, lower_bound, upper_bound,
|
|
231
|
+
old_mean, old_std_dev, collateral_posted, raw_data,
|
|
232
|
+
outcome_count, min_outcome_index, is_position_sell,
|
|
233
|
+
settlement_outcome_index, settlement_outcomes_json,
|
|
234
|
+
settlement_value, settlement_x1, settlement_x2, created_at
|
|
235
|
+
)
|
|
236
|
+
SELECT
|
|
237
|
+
id, market_address, ${eventUidExpr}, tx_hash, block_number, timestamp, event_type,
|
|
238
|
+
trader, mean, std_dev, lower_bound, upper_bound,
|
|
239
|
+
old_mean, old_std_dev, collateral_posted, raw_data,
|
|
240
|
+
outcome_count, min_outcome_index, is_position_sell,
|
|
241
|
+
settlement_outcome_index, settlement_outcomes_json,
|
|
242
|
+
${settlementValueExpr}, ${settlementX1Expr}, ${settlementX2Expr}, created_at
|
|
243
|
+
FROM market_events;
|
|
244
|
+
`);
|
|
245
|
+
db.exec('DROP TABLE market_events');
|
|
246
|
+
db.exec('ALTER TABLE market_events_v2 RENAME TO market_events');
|
|
247
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_block ON market_events(market_address, block_number)');
|
|
248
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_events_trader ON market_events(trader) WHERE trader IS NOT NULL');
|
|
249
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_events_trader_ts ON market_events(trader, timestamp DESC) WHERE trader IS NOT NULL');
|
|
250
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_events_market_ts ON market_events(market_address, timestamp)');
|
|
251
|
+
db.exec('COMMIT');
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
db.exec('ROLLBACK');
|
|
255
|
+
throw error;
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
db.exec('PRAGMA foreign_keys = ON');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
134
261
|
export function initializeSchema(db) {
|
|
135
262
|
db.exec(SCHEMA_DDL);
|
|
136
263
|
// Migrations for existing databases
|
|
137
264
|
safeAddColumn(db, 'markets', 'market_type', "TEXT NOT NULL DEFAULT 'normal'");
|
|
265
|
+
safeAddColumn(db, 'market_events', 'event_uid', 'TEXT');
|
|
138
266
|
safeAddColumn(db, 'market_events', 'outcome_count', 'INTEGER');
|
|
139
267
|
safeAddColumn(db, 'market_events', 'min_outcome_index', 'INTEGER');
|
|
140
268
|
safeAddColumn(db, 'market_events', 'is_position_sell', 'INTEGER');
|
|
141
269
|
safeAddColumn(db, 'market_events', 'settlement_outcome_index', 'INTEGER');
|
|
142
270
|
safeAddColumn(db, 'market_events', 'settlement_outcomes_json', 'TEXT');
|
|
271
|
+
safeAddColumn(db, 'market_events', 'settlement_value', 'REAL');
|
|
272
|
+
safeAddColumn(db, 'market_events', 'settlement_x1', 'REAL');
|
|
273
|
+
safeAddColumn(db, 'market_events', 'settlement_x2', 'REAL');
|
|
143
274
|
safeAddColumn(db, 'user_positions', 'position_type', "TEXT DEFAULT 'normal'");
|
|
144
275
|
safeAddColumn(db, 'user_positions', 'outcome_count', 'INTEGER');
|
|
145
276
|
safeAddColumn(db, 'user_positions', 'original_probs_json', 'TEXT');
|
|
146
277
|
safeAddColumn(db, 'user_positions', 'collateral_locked_raw', 'TEXT');
|
|
278
|
+
// Leaderboard: expected value and effective distribution columns
|
|
279
|
+
safeAddColumn(db, 'user_positions', 'expected_value', 'REAL');
|
|
280
|
+
safeAddColumn(db, 'user_positions', 'effective_mean', 'REAL');
|
|
281
|
+
safeAddColumn(db, 'user_positions', 'effective_sigma', 'REAL');
|
|
282
|
+
safeAddColumn(db, 'user_positions', 'effective_variance', 'REAL');
|
|
283
|
+
safeAddColumn(db, 'user_positions', 'effective_probs_json', 'TEXT');
|
|
284
|
+
safeAddColumn(db, 'market_state', 'k', 'REAL');
|
|
285
|
+
safeAddColumn(db, 'market_state', 'effective_k', 'REAL');
|
|
147
286
|
// Rich market metadata columns
|
|
148
287
|
safeAddColumn(db, 'markets', 'x_axis_label', 'TEXT DEFAULT NULL');
|
|
149
288
|
safeAddColumn(db, 'markets', 'x_axis_unit', 'TEXT DEFAULT NULL');
|
|
@@ -151,5 +290,7 @@ export function initializeSchema(db) {
|
|
|
151
290
|
safeAddColumn(db, 'markets', 'row_labels', 'TEXT DEFAULT NULL');
|
|
152
291
|
safeAddColumn(db, 'markets', 'col_labels', 'TEXT DEFAULT NULL');
|
|
153
292
|
safeAddColumn(db, 'markets', 'resolution_source', 'TEXT DEFAULT NULL');
|
|
293
|
+
// Rebuild event table when upgrading from legacy tx_hash-unique schema.
|
|
294
|
+
migrateMarketEventsTable(db);
|
|
154
295
|
}
|
|
155
296
|
//# sourceMappingURL=schema.js.map
|
package/dist/db/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqJlB,CAAC;AAEF;;GAEG;AACH,SAAS,aAAa,CAAC,EAAY,EAAE,KAAa,EAAE,MAAc,EAAE,UAAkB;IACpF,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,eAAe,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAY,EAAE,KAAa;IAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAsC,CAAC;IAC/F,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,0BAA0B,CAAC,EAAY,EAAE,KAAa,EAAE,MAAc;IAC7E,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAGzD,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAEzD,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAAC,EAAY;IAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,qBAAqB,GAAG,0BAA0B,CAAC,EAAE,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAEzF,IAAI,WAAW,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,WAAW;QAC9B,CAAC,CAAC,yDAAyD;QAC3D,CAAC,CAAC,oCAAoC,CAAC;IACzC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpE,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACrC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BP,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;8BAUkB,YAAY;;;;;UAKhC,mBAAmB,KAAK,gBAAgB,KAAK,gBAAgB;;KAElE,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACpC,EAAE,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QAChE,EAAE,CAAC,IAAI,CACL,mGAAmG,CACpG,CAAC;QACF,EAAE,CAAC,IAAI,CACL,gGAAgG,CACjG,CAAC;QACF,EAAE,CAAC,IAAI,CACL,mHAAmH,CACpH,CAAC;QACF,EAAE,CAAC,IAAI,CACL,6FAA6F,CAC9F,CAAC;QACF,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpB,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAY;IAC3C,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,oCAAoC;IACpC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,gCAAgC,CAAC,CAAC;IAC9E,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACxD,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAC/D,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAClE,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,0BAA0B,EAAE,SAAS,CAAC,CAAC;IAC1E,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAC/D,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,eAAe,EAAE,uBAAuB,CAAC,CAAC;IAC9E,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAChE,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAErE,iEAAiE;IACjE,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC9D,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC9D,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC/D,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;IAClE,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACpE,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAEzD,+BAA+B;IAC/B,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;IAClE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC;IACjE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IACpE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAChE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAChE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IAEvE,wEAAwE;IACxE,wBAAwB,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/etl/decoder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EACV,YAAY,EAKZ,UAAU,EACV,YAAY,EACb,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/etl/decoder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EACV,YAAY,EAKZ,UAAU,EACV,YAAY,EACb,MAAM,UAAU,CAAC;AAkDlB,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CA2B7F;AAoCD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,UAAU,CAAC,EAAE,UAAU,GACtB,YAAY,EAAE,CAYhB"}
|