@the-situation/indexer 0.17.1 → 0.18.1
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/dist/aggregator/cohort.d.ts +30 -0
- package/dist/aggregator/cohort.d.ts.map +1 -0
- package/dist/aggregator/cohort.js +153 -0
- package/dist/aggregator/cohort.js.map +1 -0
- package/dist/aggregator/daily.d.ts +71 -0
- package/dist/aggregator/daily.d.ts.map +1 -0
- package/dist/aggregator/daily.js +249 -0
- package/dist/aggregator/daily.js.map +1 -0
- package/dist/aggregator/domains.d.ts +20 -0
- package/dist/aggregator/domains.d.ts.map +1 -0
- package/dist/aggregator/domains.js +38 -0
- package/dist/aggregator/domains.js.map +1 -0
- package/dist/aggregator/index.d.ts +31 -0
- package/dist/aggregator/index.d.ts.map +1 -0
- package/dist/aggregator/index.js +100 -0
- package/dist/aggregator/index.js.map +1 -0
- package/dist/aggregator/lifetime.d.ts +52 -0
- package/dist/aggregator/lifetime.d.ts.map +1 -0
- package/dist/aggregator/lifetime.js +222 -0
- package/dist/aggregator/lifetime.js.map +1 -0
- package/dist/aggregator/roi.d.ts +42 -0
- package/dist/aggregator/roi.d.ts.map +1 -0
- package/dist/aggregator/roi.js +153 -0
- package/dist/aggregator/roi.js.map +1 -0
- package/dist/aggregator/sources.d.ts +59 -0
- package/dist/aggregator/sources.d.ts.map +1 -0
- package/dist/aggregator/sources.js +53 -0
- package/dist/aggregator/sources.js.map +1 -0
- package/dist/aggregator/writers.d.ts +22 -0
- package/dist/aggregator/writers.d.ts.map +1 -0
- package/dist/aggregator/writers.js +147 -0
- package/dist/aggregator/writers.js.map +1 -0
- package/dist/api/app.d.ts +177 -13
- package/dist/api/app.d.ts.map +1 -1
- package/dist/api/app.js +4 -3
- package/dist/api/app.js.map +1 -1
- package/dist/api/routes/admin-subscriptions.d.ts +10 -10
- package/dist/api/routes/analytics.d.ts +205 -0
- package/dist/api/routes/analytics.d.ts.map +1 -0
- package/dist/api/routes/analytics.js +122 -0
- package/dist/api/routes/analytics.js.map +1 -0
- 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/lp-history.d.ts +1 -1
- package/dist/api/routes/rankings.d.ts +17 -3
- package/dist/api/routes/rankings.d.ts.map +1 -1
- package/dist/api/routes/rankings.js +44 -5
- package/dist/api/routes/rankings.js.map +1 -1
- package/dist/api/routes/trader-stats.d.ts +11 -2
- package/dist/api/routes/trader-stats.d.ts.map +1 -1
- package/dist/api/routes/trader-stats.js +72 -2
- package/dist/api/routes/trader-stats.js.map +1 -1
- package/dist/client/IndexerClient.d.ts +30 -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 +50 -1
- package/dist/client/IndexerClientLive.js.map +1 -1
- package/dist/client/convenience.d.ts +9 -2
- package/dist/client/convenience.d.ts.map +1 -1
- package/dist/client/convenience.js +9 -1
- package/dist/client/convenience.js.map +1 -1
- package/dist/client/index.d.ts +3 -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/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/etl/event-indexer.d.ts +1 -1
- package/dist/etl/lp-position-refresher.d.ts +2 -1
- package/dist/etl/lp-position-refresher.d.ts.map +1 -1
- package/dist/etl/lp-position-refresher.js +24 -11
- package/dist/etl/lp-position-refresher.js.map +1 -1
- package/dist/etl/position-refresher.d.ts +1 -1
- package/dist/etl/state-refresher.d.ts +1 -1
- package/dist/index.js +54 -5
- package/dist/index.js.map +1 -1
- package/dist/layers/ChainReaderLive.d.ts.map +1 -1
- package/dist/layers/ChainReaderLive.js +15 -0
- package/dist/layers/ChainReaderLive.js.map +1 -1
- package/dist/services/ChainReader.d.ts +10 -0
- package/dist/services/ChainReader.d.ts.map +1 -1
- package/dist/services/ChainReader.js.map +1 -1
- package/dist/types/analytics.d.ts +194 -0
- package/dist/types/analytics.d.ts.map +1 -0
- package/dist/types/analytics.js +10 -0
- package/dist/types/analytics.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/warehouse/analytics-helpers.d.ts +36 -0
- package/dist/warehouse/analytics-helpers.d.ts.map +1 -0
- package/dist/warehouse/analytics-helpers.js +142 -0
- package/dist/warehouse/analytics-helpers.js.map +1 -0
- package/dist/warehouse/backfill.d.ts +26 -0
- package/dist/warehouse/backfill.d.ts.map +1 -0
- package/dist/warehouse/backfill.js +77 -0
- package/dist/warehouse/backfill.js.map +1 -0
- package/dist/warehouse/connection.d.ts +24 -0
- package/dist/warehouse/connection.d.ts.map +1 -0
- package/dist/warehouse/connection.js +30 -0
- package/dist/warehouse/connection.js.map +1 -0
- package/dist/warehouse/index.d.ts +14 -0
- package/dist/warehouse/index.d.ts.map +1 -0
- package/dist/warehouse/index.js +14 -0
- package/dist/warehouse/index.js.map +1 -0
- package/dist/warehouse/repositories/analytics.d.ts +61 -0
- package/dist/warehouse/repositories/analytics.d.ts.map +1 -0
- package/dist/warehouse/repositories/analytics.js +418 -0
- package/dist/warehouse/repositories/analytics.js.map +1 -0
- package/dist/warehouse/schema.d.ts +9 -0
- package/dist/warehouse/schema.d.ts.map +1 -0
- package/dist/warehouse/schema.js +219 -0
- package/dist/warehouse/schema.js.map +1 -0
- package/dist/warehouse/seed-domains.d.ts +29 -0
- package/dist/warehouse/seed-domains.d.ts.map +1 -0
- package/dist/warehouse/seed-domains.js +223 -0
- package/dist/warehouse/seed-domains.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregator data sources — synchronous reads from SQLite.
|
|
3
|
+
*
|
|
4
|
+
* These functions extract the minimum columns needed for analytics rollups.
|
|
5
|
+
* Keeping the projection narrow keeps memory usage bounded even at 10M+ events.
|
|
6
|
+
*/
|
|
7
|
+
import type { Database as SqliteDatabase } from 'bun:sqlite';
|
|
8
|
+
/** Magnitude divisor for `collateral_posted` raw values (token has 18 decimals). */
|
|
9
|
+
export declare const TOKEN_DECIMALS = 1000000000000000000;
|
|
10
|
+
export interface AggEventRow {
|
|
11
|
+
readonly id: number;
|
|
12
|
+
readonly market_address: string;
|
|
13
|
+
readonly event_type: string;
|
|
14
|
+
readonly trader: string | null;
|
|
15
|
+
readonly timestamp: number;
|
|
16
|
+
readonly collateral_posted: string | null;
|
|
17
|
+
readonly is_position_sell: number | null;
|
|
18
|
+
}
|
|
19
|
+
export interface AggPositionRow {
|
|
20
|
+
readonly market_address: string;
|
|
21
|
+
readonly trader: string;
|
|
22
|
+
readonly has_position: number;
|
|
23
|
+
readonly settlement_state: string;
|
|
24
|
+
readonly unrealized_pnl: number | null;
|
|
25
|
+
readonly realized_pnl: number | null;
|
|
26
|
+
readonly expected_value: number | null;
|
|
27
|
+
readonly delta_count: number;
|
|
28
|
+
readonly claimed: number;
|
|
29
|
+
}
|
|
30
|
+
export interface AggLPPositionRow {
|
|
31
|
+
readonly market_address: string;
|
|
32
|
+
readonly provider: string;
|
|
33
|
+
readonly total_deposited: number;
|
|
34
|
+
readonly total_withdrawn: number;
|
|
35
|
+
readonly current_value: number | null;
|
|
36
|
+
readonly unrealized_pnl: number | null;
|
|
37
|
+
readonly deposit_count: number;
|
|
38
|
+
readonly withdrawal_count: number;
|
|
39
|
+
readonly first_deposit_at: number | null;
|
|
40
|
+
readonly last_activity_at: number | null;
|
|
41
|
+
readonly claimed_at: number | null;
|
|
42
|
+
readonly claim_payout: number | null;
|
|
43
|
+
}
|
|
44
|
+
export declare function readAllEvents(db: SqliteDatabase): readonly AggEventRow[];
|
|
45
|
+
export declare function readAllPositions(db: SqliteDatabase): readonly AggPositionRow[];
|
|
46
|
+
export declare function readAllLPPositions(db: SqliteDatabase): readonly AggLPPositionRow[];
|
|
47
|
+
/**
|
|
48
|
+
* Parse the raw SQ128x128-style magnitude string into a human-readable token
|
|
49
|
+
* amount. Mirrors `parseCollateral` in services/ActivityEnricher.ts.
|
|
50
|
+
*/
|
|
51
|
+
export declare function parseCollateralAmount(raw: string | null): number;
|
|
52
|
+
/**
|
|
53
|
+
* Trade-like events count toward trader volume. Liquidity events are tracked
|
|
54
|
+
* separately for LPs.
|
|
55
|
+
*/
|
|
56
|
+
export declare const TRADE_EVENT_TYPES: Set<string>;
|
|
57
|
+
export declare const LIQUIDITY_ADD_TYPES: Set<string>;
|
|
58
|
+
export declare const LIQUIDITY_REMOVE_TYPES: Set<string>;
|
|
59
|
+
//# sourceMappingURL=sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/aggregator/sources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,oFAAoF;AACpF,eAAO,MAAM,cAAc,sBAAO,CAAC;AAEnC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,GAAG,SAAS,WAAW,EAAE,CASxE;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,GAAG,SAAS,cAAc,EAAE,CAQ9E;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,SAAS,gBAAgB,EAAE,CASlF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKhE;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAI5B,CAAC;AAEH,eAAO,MAAM,mBAAmB,aAI9B,CAAC;AAEH,eAAO,MAAM,sBAAsB,aAAiC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** Magnitude divisor for `collateral_posted` raw values (token has 18 decimals). */
|
|
2
|
+
export const TOKEN_DECIMALS = 1e18;
|
|
3
|
+
export function readAllEvents(db) {
|
|
4
|
+
return db
|
|
5
|
+
.query(`SELECT id, market_address, event_type, trader, timestamp,
|
|
6
|
+
collateral_posted, is_position_sell
|
|
7
|
+
FROM market_events
|
|
8
|
+
ORDER BY id ASC`)
|
|
9
|
+
.all();
|
|
10
|
+
}
|
|
11
|
+
export function readAllPositions(db) {
|
|
12
|
+
return db
|
|
13
|
+
.query(`SELECT market_address, trader, has_position, settlement_state,
|
|
14
|
+
unrealized_pnl, realized_pnl, expected_value, delta_count, claimed
|
|
15
|
+
FROM user_positions`)
|
|
16
|
+
.all();
|
|
17
|
+
}
|
|
18
|
+
export function readAllLPPositions(db) {
|
|
19
|
+
return db
|
|
20
|
+
.query(`SELECT market_address, provider, total_deposited, total_withdrawn,
|
|
21
|
+
current_value, unrealized_pnl, deposit_count, withdrawal_count,
|
|
22
|
+
first_deposit_at, last_activity_at, claimed_at, claim_payout
|
|
23
|
+
FROM lp_positions`)
|
|
24
|
+
.all();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse the raw SQ128x128-style magnitude string into a human-readable token
|
|
28
|
+
* amount. Mirrors `parseCollateral` in services/ActivityEnricher.ts.
|
|
29
|
+
*/
|
|
30
|
+
export function parseCollateralAmount(raw) {
|
|
31
|
+
if (raw == null || raw.length === 0)
|
|
32
|
+
return 0;
|
|
33
|
+
const val = Number(raw);
|
|
34
|
+
if (!Number.isFinite(val))
|
|
35
|
+
return 0;
|
|
36
|
+
return val / TOKEN_DECIMALS;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Trade-like events count toward trader volume. Liquidity events are tracked
|
|
40
|
+
* separately for LPs.
|
|
41
|
+
*/
|
|
42
|
+
export const TRADE_EVENT_TYPES = new Set([
|
|
43
|
+
'trade_executed',
|
|
44
|
+
'trade_moved',
|
|
45
|
+
'multinoulli_trade_executed',
|
|
46
|
+
]);
|
|
47
|
+
export const LIQUIDITY_ADD_TYPES = new Set([
|
|
48
|
+
'liquidity_added',
|
|
49
|
+
'market_initialized',
|
|
50
|
+
'bootstrapped',
|
|
51
|
+
]);
|
|
52
|
+
export const LIQUIDITY_REMOVE_TYPES = new Set(['liquidity_removed']);
|
|
53
|
+
//# sourceMappingURL=sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/aggregator/sources.ts"],"names":[],"mappings":"AAQA,oFAAoF;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAuCnC,MAAM,UAAU,aAAa,CAAC,EAAkB;IAC9C,OAAO,EAAE;SACN,KAAK,CACJ;;;uBAGiB,CAClB;SACA,GAAG,EAA4B,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAkB;IACjD,OAAO,EAAE;SACN,KAAK,CACJ;;2BAEqB,CACtB;SACA,GAAG,EAA+B,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAkB;IACnD,OAAO,EAAE;SACN,KAAK,CACJ;;;yBAGmB,CACpB;SACA,GAAG,EAAiC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAkB;IACtD,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,GAAG,cAAc,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,gBAAgB;IAChB,aAAa;IACb,4BAA4B;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IACzC,iBAAiB;IACjB,oBAAoB;IACpB,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bulk-write builders.
|
|
3
|
+
*
|
|
4
|
+
* Each writer truncates its target table and re-inserts. Truncate-and-reload
|
|
5
|
+
* is fine while the data set is small (~100k events) and avoids subtle
|
|
6
|
+
* incremental-update bugs. Switch to UPSERT-by-key once event volume justifies it.
|
|
7
|
+
*
|
|
8
|
+
* All writes happen inside a single transaction per table so readers never
|
|
9
|
+
* see a partially-written warehouse state.
|
|
10
|
+
*/
|
|
11
|
+
import type { SQL } from 'bun';
|
|
12
|
+
import type { DailyDomainStatRow, DailyLPStatRow, DailyMarketStatRow, DailyPlatformStatRow, DailyTraderStatRow } from './daily';
|
|
13
|
+
import type { LPLifetimeRow, TraderLifetimeRow } from './lifetime';
|
|
14
|
+
export declare function writeDailyTraderStats(pg: SQL, rows: readonly DailyTraderStatRow[]): Promise<void>;
|
|
15
|
+
export declare function writeDailyLPStats(pg: SQL, rows: readonly DailyLPStatRow[]): Promise<void>;
|
|
16
|
+
export declare function writeDailyMarketStats(pg: SQL, rows: readonly DailyMarketStatRow[]): Promise<void>;
|
|
17
|
+
export declare function writeDailyDomainStats(pg: SQL, rows: readonly DailyDomainStatRow[]): Promise<void>;
|
|
18
|
+
export declare function writeDailyPlatformStats(pg: SQL, rows: readonly DailyPlatformStatRow[]): Promise<void>;
|
|
19
|
+
export declare function writeTraderLifetime(pg: SQL, rows: readonly TraderLifetimeRow[]): Promise<void>;
|
|
20
|
+
export declare function writeLPLifetime(pg: SQL, rows: readonly LPLifetimeRow[]): Promise<void>;
|
|
21
|
+
export declare function recordAggregatorRun(pg: SQL, jobName: string, ok: boolean, error: string | null): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=writers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writers.d.ts","sourceRoot":"","sources":["../../src/aggregator/writers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKnE,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,SAAS,kBAAkB,EAAE,GAClC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,SAAS,cAAc,EAAE,GAC9B,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,SAAS,kBAAkB,EAAE,GAClC,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,SAAS,kBAAkB,EAAE,GAClC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,SAAS,oBAAoB,EAAE,GACpC,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,SAAS,iBAAiB,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,SAAS,aAAa,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,GAAG,EACP,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
const TIMESTAMP_OR_NULL = (ts) => ts == null ? null : new Date(ts * 1000).toISOString();
|
|
2
|
+
export async function writeDailyTraderStats(pg, rows) {
|
|
3
|
+
await pg.begin(async (tx) => {
|
|
4
|
+
await tx `TRUNCATE TABLE daily_trader_stats`;
|
|
5
|
+
for (const r of rows) {
|
|
6
|
+
await tx `
|
|
7
|
+
INSERT INTO daily_trader_stats
|
|
8
|
+
(date, trader, domain_slug, trade_count, buy_count, sell_count,
|
|
9
|
+
volume_collateral, markets_traded, updated_at)
|
|
10
|
+
VALUES
|
|
11
|
+
(${r.date}, ${r.trader}, ${r.domain_slug}, ${r.trade_count}, ${r.buy_count},
|
|
12
|
+
${r.sell_count}, ${r.volume_collateral}, ${r.markets_traded}, now())
|
|
13
|
+
`;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export async function writeDailyLPStats(pg, rows) {
|
|
18
|
+
await pg.begin(async (tx) => {
|
|
19
|
+
await tx `TRUNCATE TABLE daily_lp_stats`;
|
|
20
|
+
for (const r of rows) {
|
|
21
|
+
await tx `
|
|
22
|
+
INSERT INTO daily_lp_stats
|
|
23
|
+
(date, provider, domain_slug, deposit_count, withdraw_count,
|
|
24
|
+
deposited, withdrawn, net_position, markets_active, updated_at)
|
|
25
|
+
VALUES
|
|
26
|
+
(${r.date}, ${r.provider}, ${r.domain_slug}, ${r.deposit_count}, ${r.withdraw_count},
|
|
27
|
+
${r.deposited}, ${r.withdrawn}, ${r.deposited - r.withdrawn}, ${r.markets_active}, now())
|
|
28
|
+
`;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export async function writeDailyMarketStats(pg, rows) {
|
|
33
|
+
await pg.begin(async (tx) => {
|
|
34
|
+
await tx `TRUNCATE TABLE daily_market_stats`;
|
|
35
|
+
for (const r of rows) {
|
|
36
|
+
await tx `
|
|
37
|
+
INSERT INTO daily_market_stats
|
|
38
|
+
(date, market_address, trade_count, unique_traders, volume_collateral,
|
|
39
|
+
liquidity_added, liquidity_removed, unique_lps, updated_at)
|
|
40
|
+
VALUES
|
|
41
|
+
(${r.date}, ${r.market_address}, ${r.trade_count}, ${r.unique_traders},
|
|
42
|
+
${r.volume_collateral}, ${r.liquidity_added}, ${r.liquidity_removed},
|
|
43
|
+
${r.unique_lps}, now())
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export async function writeDailyDomainStats(pg, rows) {
|
|
49
|
+
await pg.begin(async (tx) => {
|
|
50
|
+
await tx `TRUNCATE TABLE daily_domain_stats`;
|
|
51
|
+
for (const r of rows) {
|
|
52
|
+
await tx `
|
|
53
|
+
INSERT INTO daily_domain_stats
|
|
54
|
+
(date, domain_slug, trade_count, unique_traders, unique_lps,
|
|
55
|
+
volume_collateral, liquidity_net, active_markets, updated_at)
|
|
56
|
+
VALUES
|
|
57
|
+
(${r.date}, ${r.domain_slug}, ${r.trade_count}, ${r.unique_traders}, ${r.unique_lps},
|
|
58
|
+
${r.volume_collateral}, ${r.liquidity_net}, ${r.active_markets}, now())
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export async function writeDailyPlatformStats(pg, rows) {
|
|
64
|
+
await pg.begin(async (tx) => {
|
|
65
|
+
await tx `TRUNCATE TABLE daily_platform_stats`;
|
|
66
|
+
for (const r of rows) {
|
|
67
|
+
await tx `
|
|
68
|
+
INSERT INTO daily_platform_stats
|
|
69
|
+
(date, trade_count, unique_traders, unique_lps, new_traders, new_lps,
|
|
70
|
+
volume_collateral, liquidity_net, active_markets, updated_at)
|
|
71
|
+
VALUES
|
|
72
|
+
(${r.date}, ${r.trade_count}, ${r.unique_traders}, ${r.unique_lps},
|
|
73
|
+
${r.new_traders}, ${r.new_lps}, ${r.volume_collateral}, ${r.liquidity_net},
|
|
74
|
+
${r.active_markets}, now())
|
|
75
|
+
`;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export async function writeTraderLifetime(pg, rows) {
|
|
80
|
+
await pg.begin(async (tx) => {
|
|
81
|
+
await tx `TRUNCATE TABLE trader_lifetime`;
|
|
82
|
+
for (const r of rows) {
|
|
83
|
+
const domainsJson = JSON.stringify(r.domains_json);
|
|
84
|
+
await tx `
|
|
85
|
+
INSERT INTO trader_lifetime
|
|
86
|
+
(trader, first_trade_at, last_trade_at, cohort_week,
|
|
87
|
+
total_trades, buy_count, sell_count, markets_traded,
|
|
88
|
+
domains_traded, domains_json, total_volume, total_collateral_at_risk,
|
|
89
|
+
realized_pnl, unrealized_pnl, total_pnl, roi_pct, active_days, updated_at)
|
|
90
|
+
VALUES
|
|
91
|
+
(${r.trader}, ${TIMESTAMP_OR_NULL(r.first_trade_at)},
|
|
92
|
+
${TIMESTAMP_OR_NULL(r.last_trade_at)}, ${r.cohort_week},
|
|
93
|
+
${r.total_trades}, ${r.buy_count}, ${r.sell_count}, ${r.markets_traded},
|
|
94
|
+
${r.domains_traded}, ${domainsJson}::jsonb,
|
|
95
|
+
${r.total_volume}, ${r.total_collateral_at_risk},
|
|
96
|
+
${r.realized_pnl}, ${r.unrealized_pnl}, ${r.total_pnl},
|
|
97
|
+
${r.roi_pct}, ${r.active_days}, now())
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
export async function writeLPLifetime(pg, rows) {
|
|
103
|
+
await pg.begin(async (tx) => {
|
|
104
|
+
await tx `TRUNCATE TABLE lp_lifetime`;
|
|
105
|
+
for (const r of rows) {
|
|
106
|
+
const domainsJson = JSON.stringify(r.domains_json);
|
|
107
|
+
await tx `
|
|
108
|
+
INSERT INTO lp_lifetime
|
|
109
|
+
(provider, first_deposit_at, last_activity_at, cohort_week,
|
|
110
|
+
deposit_count, withdraw_count, total_deposited, total_withdrawn,
|
|
111
|
+
net_position, current_value, unrealized_pnl, realized_pnl,
|
|
112
|
+
markets_provided, domains_provided, domains_json, active_days,
|
|
113
|
+
roi_pct, updated_at)
|
|
114
|
+
VALUES
|
|
115
|
+
(${r.provider}, ${TIMESTAMP_OR_NULL(r.first_deposit_at)},
|
|
116
|
+
${TIMESTAMP_OR_NULL(r.last_activity_at)}, ${r.cohort_week},
|
|
117
|
+
${r.deposit_count}, ${r.withdraw_count}, ${r.total_deposited},
|
|
118
|
+
${r.total_withdrawn}, ${r.net_position}, ${r.current_value},
|
|
119
|
+
${r.unrealized_pnl}, ${r.realized_pnl}, ${r.markets_provided},
|
|
120
|
+
${r.domains_provided}, ${domainsJson}::jsonb, ${r.active_days},
|
|
121
|
+
${r.roi_pct}, now())
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
export async function recordAggregatorRun(pg, jobName, ok, error) {
|
|
127
|
+
if (ok) {
|
|
128
|
+
await pg `
|
|
129
|
+
INSERT INTO aggregator_state (job_name, last_run_at, last_success_at, last_error)
|
|
130
|
+
VALUES (${jobName}, now(), now(), NULL)
|
|
131
|
+
ON CONFLICT (job_name) DO UPDATE SET
|
|
132
|
+
last_run_at = EXCLUDED.last_run_at,
|
|
133
|
+
last_success_at = EXCLUDED.last_success_at,
|
|
134
|
+
last_error = NULL
|
|
135
|
+
`;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
await pg `
|
|
139
|
+
INSERT INTO aggregator_state (job_name, last_run_at, last_error)
|
|
140
|
+
VALUES (${jobName}, now(), ${error})
|
|
141
|
+
ON CONFLICT (job_name) DO UPDATE SET
|
|
142
|
+
last_run_at = EXCLUDED.last_run_at,
|
|
143
|
+
last_error = EXCLUDED.last_error
|
|
144
|
+
`;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=writers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writers.js","sourceRoot":"","sources":["../../src/aggregator/writers.ts"],"names":[],"mappings":"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"}
|
package/dist/api/app.d.ts
CHANGED
|
@@ -5,11 +5,19 @@ import { Elysia } from 'elysia';
|
|
|
5
5
|
import type { DatabaseService } from '../services/Database';
|
|
6
6
|
import type { EventBusService } from '../services/EventBus';
|
|
7
7
|
import type { VoyagerRateLimitState } from '../services/VoyagerRateLimit';
|
|
8
|
+
import type { AnalyticsRepository } from '../warehouse/repositories/analytics';
|
|
8
9
|
export interface AppConfig {
|
|
9
10
|
readonly db: DatabaseService;
|
|
10
11
|
readonly eventBus: EventBusService;
|
|
11
12
|
readonly adminApiKey: string;
|
|
12
13
|
readonly rateLimit: VoyagerRateLimitState;
|
|
14
|
+
/**
|
|
15
|
+
* Warehouse analytics repository. `null` (or omitted) when
|
|
16
|
+
* WAREHOUSE_DATABASE_URL is not set — analytics routes return 503 and
|
|
17
|
+
* filter-aware variants of /api/rankings, /api/positions/:trader/stats fall
|
|
18
|
+
* back to OLTP / 503 for filtered requests.
|
|
19
|
+
*/
|
|
20
|
+
readonly analytics?: AnalyticsRepository | null;
|
|
13
21
|
}
|
|
14
22
|
export declare function createApp(config: AppConfig): Elysia<"", {
|
|
15
23
|
decorator: {};
|
|
@@ -228,8 +236,8 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
228
236
|
get: {
|
|
229
237
|
body: unknown;
|
|
230
238
|
params: {
|
|
231
|
-
provider: string;
|
|
232
239
|
address: string;
|
|
240
|
+
provider: string;
|
|
233
241
|
} & {};
|
|
234
242
|
query: unknown;
|
|
235
243
|
headers: unknown;
|
|
@@ -321,7 +329,9 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
321
329
|
query: unknown;
|
|
322
330
|
headers: unknown;
|
|
323
331
|
response: {
|
|
324
|
-
200: import("../types").TraderStatsResponse
|
|
332
|
+
200: import("../types").TraderStatsResponse | {
|
|
333
|
+
error: string;
|
|
334
|
+
};
|
|
325
335
|
422: {
|
|
326
336
|
type: "validation";
|
|
327
337
|
on: string;
|
|
@@ -346,7 +356,9 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
346
356
|
query: unknown;
|
|
347
357
|
headers: unknown;
|
|
348
358
|
response: {
|
|
349
|
-
200: import("../types").RankingEntry[]
|
|
359
|
+
200: import("../types").RankingEntry[] | {
|
|
360
|
+
error: string;
|
|
361
|
+
};
|
|
350
362
|
};
|
|
351
363
|
};
|
|
352
364
|
};
|
|
@@ -527,10 +539,10 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
527
539
|
name: string;
|
|
528
540
|
webhook_url: string;
|
|
529
541
|
filters: {
|
|
530
|
-
|
|
531
|
-
eventTypes?: ("settlement" | "trade_move" | "market_created")[];
|
|
542
|
+
eventTypes?: ("trade_move" | "settlement" | "market_created")[];
|
|
532
543
|
marketTypes?: string[];
|
|
533
544
|
marketAddresses?: string[];
|
|
545
|
+
traders?: string[];
|
|
534
546
|
minCollateral?: number;
|
|
535
547
|
};
|
|
536
548
|
};
|
|
@@ -538,9 +550,9 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
538
550
|
query: unknown;
|
|
539
551
|
headers: unknown;
|
|
540
552
|
response: {
|
|
541
|
-
200: {
|
|
553
|
+
200: import("../types").SubscriptionResponse | {
|
|
542
554
|
error: string;
|
|
543
|
-
}
|
|
555
|
+
};
|
|
544
556
|
422: {
|
|
545
557
|
type: "validation";
|
|
546
558
|
on: string;
|
|
@@ -582,9 +594,9 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
582
594
|
query: unknown;
|
|
583
595
|
headers: unknown;
|
|
584
596
|
response: {
|
|
585
|
-
200: {
|
|
597
|
+
200: import("../types").SubscriptionResponse | {
|
|
586
598
|
error: string;
|
|
587
|
-
} |
|
|
599
|
+
} | {
|
|
588
600
|
error: string;
|
|
589
601
|
};
|
|
590
602
|
422: {
|
|
@@ -611,10 +623,10 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
611
623
|
webhook_url?: string;
|
|
612
624
|
secret?: string;
|
|
613
625
|
filters?: {
|
|
614
|
-
|
|
615
|
-
eventTypes?: ("settlement" | "trade_move" | "market_created")[];
|
|
626
|
+
eventTypes?: ("trade_move" | "settlement" | "market_created")[];
|
|
616
627
|
marketTypes?: string[];
|
|
617
628
|
marketAddresses?: string[];
|
|
629
|
+
traders?: string[];
|
|
618
630
|
minCollateral?: number;
|
|
619
631
|
};
|
|
620
632
|
is_active?: boolean;
|
|
@@ -625,9 +637,9 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
625
637
|
query: unknown;
|
|
626
638
|
headers: unknown;
|
|
627
639
|
response: {
|
|
628
|
-
200: {
|
|
640
|
+
200: import("../types").SubscriptionResponse | {
|
|
629
641
|
error: string;
|
|
630
|
-
} |
|
|
642
|
+
} | {
|
|
631
643
|
error: string;
|
|
632
644
|
};
|
|
633
645
|
422: {
|
|
@@ -679,6 +691,158 @@ export declare function createApp(config: AppConfig): Elysia<"", {
|
|
|
679
691
|
};
|
|
680
692
|
};
|
|
681
693
|
};
|
|
694
|
+
} & {
|
|
695
|
+
api: {
|
|
696
|
+
analytics: {
|
|
697
|
+
overview: {
|
|
698
|
+
get: {
|
|
699
|
+
body: unknown;
|
|
700
|
+
params: {};
|
|
701
|
+
query: unknown;
|
|
702
|
+
headers: unknown;
|
|
703
|
+
response: {
|
|
704
|
+
200: import("../types").AnalyticsOverviewResponse | {
|
|
705
|
+
error: string;
|
|
706
|
+
};
|
|
707
|
+
};
|
|
708
|
+
};
|
|
709
|
+
};
|
|
710
|
+
};
|
|
711
|
+
};
|
|
712
|
+
} & {
|
|
713
|
+
api: {
|
|
714
|
+
analytics: {
|
|
715
|
+
domains: {
|
|
716
|
+
get: {
|
|
717
|
+
body: unknown;
|
|
718
|
+
params: {};
|
|
719
|
+
query: unknown;
|
|
720
|
+
headers: unknown;
|
|
721
|
+
response: {
|
|
722
|
+
200: import("../types").DomainsResponse | {
|
|
723
|
+
error: string;
|
|
724
|
+
};
|
|
725
|
+
};
|
|
726
|
+
};
|
|
727
|
+
};
|
|
728
|
+
};
|
|
729
|
+
};
|
|
730
|
+
} & {
|
|
731
|
+
api: {
|
|
732
|
+
analytics: {
|
|
733
|
+
domains: {
|
|
734
|
+
":slug": {
|
|
735
|
+
get: {
|
|
736
|
+
body: unknown;
|
|
737
|
+
params: {
|
|
738
|
+
slug: string;
|
|
739
|
+
} & {};
|
|
740
|
+
query: unknown;
|
|
741
|
+
headers: unknown;
|
|
742
|
+
response: {
|
|
743
|
+
200: import("../types").DomainDetailResponse | {
|
|
744
|
+
error: string;
|
|
745
|
+
};
|
|
746
|
+
422: {
|
|
747
|
+
type: "validation";
|
|
748
|
+
on: string;
|
|
749
|
+
summary?: string;
|
|
750
|
+
message?: string;
|
|
751
|
+
found?: unknown;
|
|
752
|
+
property?: string;
|
|
753
|
+
expected?: string;
|
|
754
|
+
};
|
|
755
|
+
};
|
|
756
|
+
};
|
|
757
|
+
};
|
|
758
|
+
};
|
|
759
|
+
};
|
|
760
|
+
};
|
|
761
|
+
} & {
|
|
762
|
+
api: {
|
|
763
|
+
analytics: {
|
|
764
|
+
cohorts: {
|
|
765
|
+
get: {
|
|
766
|
+
body: unknown;
|
|
767
|
+
params: {};
|
|
768
|
+
query: unknown;
|
|
769
|
+
headers: unknown;
|
|
770
|
+
response: {
|
|
771
|
+
200: import("../types").CohortsResponse | {
|
|
772
|
+
error: string;
|
|
773
|
+
};
|
|
774
|
+
};
|
|
775
|
+
};
|
|
776
|
+
};
|
|
777
|
+
};
|
|
778
|
+
};
|
|
779
|
+
} & {
|
|
780
|
+
api: {
|
|
781
|
+
analytics: {
|
|
782
|
+
roi: {
|
|
783
|
+
get: {
|
|
784
|
+
body: unknown;
|
|
785
|
+
params: {};
|
|
786
|
+
query: unknown;
|
|
787
|
+
headers: unknown;
|
|
788
|
+
response: {
|
|
789
|
+
200: import("../types").RoiResponse | {
|
|
790
|
+
error: string;
|
|
791
|
+
};
|
|
792
|
+
};
|
|
793
|
+
};
|
|
794
|
+
};
|
|
795
|
+
};
|
|
796
|
+
};
|
|
797
|
+
} & {
|
|
798
|
+
api: {
|
|
799
|
+
analytics: {
|
|
800
|
+
leaderboard: {
|
|
801
|
+
get: {
|
|
802
|
+
body: unknown;
|
|
803
|
+
params: {};
|
|
804
|
+
query: unknown;
|
|
805
|
+
headers: unknown;
|
|
806
|
+
response: {
|
|
807
|
+
200: import("../types").AnalyticsLeaderboardResponse | {
|
|
808
|
+
error: string;
|
|
809
|
+
};
|
|
810
|
+
};
|
|
811
|
+
};
|
|
812
|
+
};
|
|
813
|
+
};
|
|
814
|
+
};
|
|
815
|
+
} & {
|
|
816
|
+
api: {
|
|
817
|
+
analytics: {
|
|
818
|
+
traders: {
|
|
819
|
+
":address": {
|
|
820
|
+
get: {
|
|
821
|
+
body: unknown;
|
|
822
|
+
params: {
|
|
823
|
+
address: string;
|
|
824
|
+
} & {};
|
|
825
|
+
query: unknown;
|
|
826
|
+
headers: unknown;
|
|
827
|
+
response: {
|
|
828
|
+
200: import("../types").TraderAnalyticsResponse | {
|
|
829
|
+
error: string;
|
|
830
|
+
};
|
|
831
|
+
422: {
|
|
832
|
+
type: "validation";
|
|
833
|
+
on: string;
|
|
834
|
+
summary?: string;
|
|
835
|
+
message?: string;
|
|
836
|
+
found?: unknown;
|
|
837
|
+
property?: string;
|
|
838
|
+
expected?: string;
|
|
839
|
+
};
|
|
840
|
+
};
|
|
841
|
+
};
|
|
842
|
+
};
|
|
843
|
+
};
|
|
844
|
+
};
|
|
845
|
+
};
|
|
682
846
|
} & {
|
|
683
847
|
ws: {
|
|
684
848
|
subscribe: {
|
package/dist/api/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/api/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/api/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAsB/E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqB1C"}
|
package/dist/api/app.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { cors } from '@elysiajs/cors';
|
|
5
5
|
import { Elysia } from 'elysia';
|
|
6
6
|
import { errorHandler } from './middleware/error-handler';
|
|
7
|
-
import { activityFeedRoutes, adminRoutes, adminSubscriptionRoutes, spiceFaucetRoutes, healthRoutes, lpHistoryRoutes, marketEventsRoutes, marketLPsRoutes, marketRoutes, marketTradersRoutes, multinoulliSnapshotsRoute, positionRoutes, rankingRoutes, traderEventsRoutes, traderStatsRoutes, wsRoutes, } from './routes';
|
|
7
|
+
import { activityFeedRoutes, adminRoutes, adminSubscriptionRoutes, analyticsRoutes, spiceFaucetRoutes, healthRoutes, lpHistoryRoutes, marketEventsRoutes, marketLPsRoutes, marketRoutes, marketTradersRoutes, multinoulliSnapshotsRoute, positionRoutes, rankingRoutes, traderEventsRoutes, traderStatsRoutes, wsRoutes, } from './routes';
|
|
8
8
|
export function createApp(config) {
|
|
9
9
|
return new Elysia()
|
|
10
10
|
.use(cors())
|
|
@@ -18,12 +18,13 @@ export function createApp(config) {
|
|
|
18
18
|
.use(lpHistoryRoutes(config.db))
|
|
19
19
|
.use(positionRoutes(config.db))
|
|
20
20
|
.use(traderEventsRoutes(config.db))
|
|
21
|
-
.use(traderStatsRoutes(config.db))
|
|
22
|
-
.use(rankingRoutes(config.db))
|
|
21
|
+
.use(traderStatsRoutes(config.db, config.analytics ?? null))
|
|
22
|
+
.use(rankingRoutes(config.db, config.analytics ?? null))
|
|
23
23
|
.use(activityFeedRoutes(config.db))
|
|
24
24
|
.use(spiceFaucetRoutes(config.db))
|
|
25
25
|
.use(adminRoutes(config.db, config.adminApiKey))
|
|
26
26
|
.use(adminSubscriptionRoutes(config.db, config.adminApiKey))
|
|
27
|
+
.use(analyticsRoutes(config.analytics ?? null))
|
|
27
28
|
.use(wsRoutes(config.eventBus));
|
|
28
29
|
}
|
|
29
30
|
//# sourceMappingURL=app.js.map
|
package/dist/api/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/api/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/api/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,GACT,MAAM,UAAU,CAAC;AAgBlB,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,OAAO,IAAI,MAAM,EAAE;SAChB,GAAG,CAAC,IAAI,EAAE,CAAC;SACX,GAAG,CAAC,YAAY,CAAC;SACjB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;SAC9C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC5B,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACzC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACnC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC/B,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC/B,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC9B,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;SAC3D,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;SACvD,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACjC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;SAC/C,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;SAC3D,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;SAC9C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpC,CAAC"}
|