@tradejs/infra 2.0.21 → 3.0.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/dist/{chunk-YVIHTUV5.mjs → chunk-OLB6NQRG.mjs} +1 -1
- package/dist/{chunk-I2J6YDBD.mjs → chunk-ZXU7OYFU.mjs} +65 -38
- package/dist/internal-BuHqoCCV.d.mts +9 -0
- package/dist/internal-q48Torp4.d.ts +9 -0
- package/dist/ml.mjs +3 -3
- package/dist/query-tkHVD4Xo.d.mts +12 -0
- package/dist/query-tkHVD4Xo.d.ts +12 -0
- package/dist/timescale/candles.js +6 -4
- package/dist/timescale/candles.mjs +2 -2
- package/dist/timescale/client.d.mts +3 -2
- package/dist/timescale/client.d.ts +3 -2
- package/dist/timescale/client.js +40 -15
- package/dist/timescale/client.mjs +2 -2
- package/dist/timescale/derivatives.d.mts +4 -2
- package/dist/timescale/derivatives.d.ts +4 -2
- package/dist/timescale/derivatives.js +20 -12
- package/dist/timescale/derivatives.mjs +479 -13
- package/dist/timescale/hyperliquidWhales.d.mts +29 -25
- package/dist/timescale/hyperliquidWhales.d.ts +29 -25
- package/dist/timescale/hyperliquidWhales.js +84 -71
- package/dist/timescale/hyperliquidWhales.mjs +1103 -14
- package/dist/timescale/marketContext.d.mts +15 -11
- package/dist/timescale/marketContext.d.ts +15 -11
- package/dist/timescale/marketContext.js +67 -57
- package/dist/timescale/marketContext.mjs +1259 -28
- package/dist/timescale/spread.js +6 -4
- package/dist/timescale/spread.mjs +105 -5
- package/dist/userSettings.js +3 -316
- package/dist/userSettings.mjs +3 -21
- package/package.json +2 -22
- package/dist/aiEndpoints.d.mts +0 -10
- package/dist/aiEndpoints.d.ts +0 -10
- package/dist/aiEndpoints.js +0 -159
- package/dist/aiEndpoints.mjs +0 -12
- package/dist/aiLanguages.d.mts +0 -11
- package/dist/aiLanguages.d.ts +0 -11
- package/dist/aiLanguages.js +0 -71
- package/dist/aiLanguages.mjs +0 -12
- package/dist/aiModels.d.mts +0 -12
- package/dist/aiModels.d.ts +0 -12
- package/dist/aiModels.js +0 -272
- package/dist/aiModels.mjs +0 -17
- package/dist/chunk-2CZREG43.mjs +0 -112
- package/dist/chunk-CCC7DX2T.mjs +0 -44
- package/dist/chunk-DFMKDB2R.mjs +0 -1285
- package/dist/chunk-DTCLZIBM.mjs +0 -163
- package/dist/chunk-NWXFWTWU.mjs +0 -1114
- package/dist/chunk-SZQB7ER5.mjs +0 -492
- package/dist/chunk-XQ3YBULV.mjs +0 -132
- package/dist/internal-2coHaaos.d.mts +0 -26
- package/dist/internal-2coHaaos.d.ts +0 -26
- package/dist/timescale.d.mts +0 -9
- package/dist/timescale.d.ts +0 -9
- package/dist/timescale.js +0 -4228
- package/dist/timescale.mjs +0 -138
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { T as TimescaleMarketContextQueryOptions
|
|
1
|
+
import { MarketBreadthRow, MarketCmcExchangeLiquidityContextRow, MarketCmcFearGreedContextRow, MarketCmcIndexContextRow, MarketGlobalContextRow, MarketReferenceAssetContextRow, MarketTradeFlowRow, MarketFeatureInterval } from '@tradejs/types';
|
|
2
|
+
export { T as TimescaleMarketContextQueryOptions } from '../query-tkHVD4Xo.mjs';
|
|
3
3
|
import { M as MarketFeatureAsOf } from '../values-BrvcmnfM.mjs';
|
|
4
|
+
export { T as TimescaleMarketContextSource, e as ensureCoinMarketCapContextSchema, b as ensureMarketContextSchemas } from '../internal-BuHqoCCV.mjs';
|
|
4
5
|
import 'pg';
|
|
5
6
|
|
|
7
|
+
declare const ensureBinanceMarketSchema: () => Promise<void>;
|
|
8
|
+
|
|
6
9
|
declare function upsertMarketTradeFlowRows(rows: MarketTradeFlowRow[]): Promise<void>;
|
|
7
10
|
declare function upsertMarketBreadthRows(rows: MarketBreadthRow[]): Promise<void>;
|
|
8
11
|
declare function upsertMarketGlobalContextRows(rows: MarketGlobalContextRow[]): Promise<void>;
|
|
@@ -10,6 +13,15 @@ declare function upsertMarketReferenceAssetContextRows(rows: MarketReferenceAsse
|
|
|
10
13
|
declare function upsertMarketCmcExchangeLiquidityContextRows(rows: MarketCmcExchangeLiquidityContextRow[]): Promise<void>;
|
|
11
14
|
declare function upsertMarketCmcFearGreedContextRows(rows: MarketCmcFearGreedContextRow[]): Promise<void>;
|
|
12
15
|
declare function upsertMarketCmcIndexContextRows(rows: MarketCmcIndexContextRow[]): Promise<void>;
|
|
16
|
+
declare function upsertMarketContextBackfillCoverage(rows: Array<{
|
|
17
|
+
source: string;
|
|
18
|
+
scope: string;
|
|
19
|
+
interval: string;
|
|
20
|
+
fromMs: number;
|
|
21
|
+
toMs: number;
|
|
22
|
+
rowsCount: number;
|
|
23
|
+
}>): Promise<void>;
|
|
24
|
+
|
|
13
25
|
declare function getMarketContextBackfillCoverage(params: {
|
|
14
26
|
source: string;
|
|
15
27
|
scopes: string[];
|
|
@@ -25,14 +37,6 @@ declare function getMarketContextBackfillCoverage(params: {
|
|
|
25
37
|
rowsCount: number;
|
|
26
38
|
checkedAtMs?: number;
|
|
27
39
|
}>>;
|
|
28
|
-
declare function upsertMarketContextBackfillCoverage(rows: Array<{
|
|
29
|
-
source: string;
|
|
30
|
-
scope: string;
|
|
31
|
-
interval: string;
|
|
32
|
-
fromMs: number;
|
|
33
|
-
toMs: number;
|
|
34
|
-
rowsCount: number;
|
|
35
|
-
}>): Promise<void>;
|
|
36
40
|
declare function getLatestMarketTradeFlow(params: {
|
|
37
41
|
symbol: string;
|
|
38
42
|
interval: MarketFeatureInterval;
|
|
@@ -185,4 +189,4 @@ declare function getMarketBreadthCoverage(params: {
|
|
|
185
189
|
btcAltMetricsRows: number;
|
|
186
190
|
} | null>;
|
|
187
191
|
|
|
188
|
-
export { type DeprecatedMarketContextCleanupItem, MarketFeatureAsOf, cleanupDeprecatedMarketContext, getLatestMarketBreadth, getLatestMarketCmcExchangeLiquidityContext, getLatestMarketCmcFearGreedContext, getLatestMarketCmcIndexContexts, getLatestMarketGlobalContext, getLatestMarketReferenceAssetContexts, getLatestMarketTradeFlow, getMarketBreadthCoverage, getMarketCmcExchangeLiquidityContextCoverage, getMarketCmcFearGreedContextCoverage, getMarketCmcIndexContextCoverage, getMarketContextBackfillCoverage, getMarketGlobalContextCoverage, getMarketReferenceAssetContextCoverage, getMarketTradeFlowCoverage, upsertMarketBreadthRows, upsertMarketCmcExchangeLiquidityContextRows, upsertMarketCmcFearGreedContextRows, upsertMarketCmcIndexContextRows, upsertMarketContextBackfillCoverage, upsertMarketGlobalContextRows, upsertMarketReferenceAssetContextRows, upsertMarketTradeFlowRows };
|
|
192
|
+
export { type DeprecatedMarketContextCleanupItem, MarketFeatureAsOf, cleanupDeprecatedMarketContext, ensureBinanceMarketSchema, getLatestMarketBreadth, getLatestMarketCmcExchangeLiquidityContext, getLatestMarketCmcFearGreedContext, getLatestMarketCmcIndexContexts, getLatestMarketGlobalContext, getLatestMarketReferenceAssetContexts, getLatestMarketTradeFlow, getMarketBreadthCoverage, getMarketCmcExchangeLiquidityContextCoverage, getMarketCmcFearGreedContextCoverage, getMarketCmcIndexContextCoverage, getMarketContextBackfillCoverage, getMarketGlobalContextCoverage, getMarketReferenceAssetContextCoverage, getMarketTradeFlowCoverage, upsertMarketBreadthRows, upsertMarketCmcExchangeLiquidityContextRows, upsertMarketCmcFearGreedContextRows, upsertMarketCmcIndexContextRows, upsertMarketContextBackfillCoverage, upsertMarketGlobalContextRows, upsertMarketReferenceAssetContextRows, upsertMarketTradeFlowRows };
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { T as TimescaleMarketContextQueryOptions
|
|
1
|
+
import { MarketBreadthRow, MarketCmcExchangeLiquidityContextRow, MarketCmcFearGreedContextRow, MarketCmcIndexContextRow, MarketGlobalContextRow, MarketReferenceAssetContextRow, MarketTradeFlowRow, MarketFeatureInterval } from '@tradejs/types';
|
|
2
|
+
export { T as TimescaleMarketContextQueryOptions } from '../query-tkHVD4Xo.js';
|
|
3
3
|
import { M as MarketFeatureAsOf } from '../values-BrvcmnfM.js';
|
|
4
|
+
export { T as TimescaleMarketContextSource, e as ensureCoinMarketCapContextSchema, b as ensureMarketContextSchemas } from '../internal-q48Torp4.js';
|
|
4
5
|
import 'pg';
|
|
5
6
|
|
|
7
|
+
declare const ensureBinanceMarketSchema: () => Promise<void>;
|
|
8
|
+
|
|
6
9
|
declare function upsertMarketTradeFlowRows(rows: MarketTradeFlowRow[]): Promise<void>;
|
|
7
10
|
declare function upsertMarketBreadthRows(rows: MarketBreadthRow[]): Promise<void>;
|
|
8
11
|
declare function upsertMarketGlobalContextRows(rows: MarketGlobalContextRow[]): Promise<void>;
|
|
@@ -10,6 +13,15 @@ declare function upsertMarketReferenceAssetContextRows(rows: MarketReferenceAsse
|
|
|
10
13
|
declare function upsertMarketCmcExchangeLiquidityContextRows(rows: MarketCmcExchangeLiquidityContextRow[]): Promise<void>;
|
|
11
14
|
declare function upsertMarketCmcFearGreedContextRows(rows: MarketCmcFearGreedContextRow[]): Promise<void>;
|
|
12
15
|
declare function upsertMarketCmcIndexContextRows(rows: MarketCmcIndexContextRow[]): Promise<void>;
|
|
16
|
+
declare function upsertMarketContextBackfillCoverage(rows: Array<{
|
|
17
|
+
source: string;
|
|
18
|
+
scope: string;
|
|
19
|
+
interval: string;
|
|
20
|
+
fromMs: number;
|
|
21
|
+
toMs: number;
|
|
22
|
+
rowsCount: number;
|
|
23
|
+
}>): Promise<void>;
|
|
24
|
+
|
|
13
25
|
declare function getMarketContextBackfillCoverage(params: {
|
|
14
26
|
source: string;
|
|
15
27
|
scopes: string[];
|
|
@@ -25,14 +37,6 @@ declare function getMarketContextBackfillCoverage(params: {
|
|
|
25
37
|
rowsCount: number;
|
|
26
38
|
checkedAtMs?: number;
|
|
27
39
|
}>>;
|
|
28
|
-
declare function upsertMarketContextBackfillCoverage(rows: Array<{
|
|
29
|
-
source: string;
|
|
30
|
-
scope: string;
|
|
31
|
-
interval: string;
|
|
32
|
-
fromMs: number;
|
|
33
|
-
toMs: number;
|
|
34
|
-
rowsCount: number;
|
|
35
|
-
}>): Promise<void>;
|
|
36
40
|
declare function getLatestMarketTradeFlow(params: {
|
|
37
41
|
symbol: string;
|
|
38
42
|
interval: MarketFeatureInterval;
|
|
@@ -185,4 +189,4 @@ declare function getMarketBreadthCoverage(params: {
|
|
|
185
189
|
btcAltMetricsRows: number;
|
|
186
190
|
} | null>;
|
|
187
191
|
|
|
188
|
-
export { type DeprecatedMarketContextCleanupItem, MarketFeatureAsOf, cleanupDeprecatedMarketContext, getLatestMarketBreadth, getLatestMarketCmcExchangeLiquidityContext, getLatestMarketCmcFearGreedContext, getLatestMarketCmcIndexContexts, getLatestMarketGlobalContext, getLatestMarketReferenceAssetContexts, getLatestMarketTradeFlow, getMarketBreadthCoverage, getMarketCmcExchangeLiquidityContextCoverage, getMarketCmcFearGreedContextCoverage, getMarketCmcIndexContextCoverage, getMarketContextBackfillCoverage, getMarketGlobalContextCoverage, getMarketReferenceAssetContextCoverage, getMarketTradeFlowCoverage, upsertMarketBreadthRows, upsertMarketCmcExchangeLiquidityContextRows, upsertMarketCmcFearGreedContextRows, upsertMarketCmcIndexContextRows, upsertMarketContextBackfillCoverage, upsertMarketGlobalContextRows, upsertMarketReferenceAssetContextRows, upsertMarketTradeFlowRows };
|
|
192
|
+
export { type DeprecatedMarketContextCleanupItem, MarketFeatureAsOf, cleanupDeprecatedMarketContext, ensureBinanceMarketSchema, getLatestMarketBreadth, getLatestMarketCmcExchangeLiquidityContext, getLatestMarketCmcFearGreedContext, getLatestMarketCmcIndexContexts, getLatestMarketGlobalContext, getLatestMarketReferenceAssetContexts, getLatestMarketTradeFlow, getMarketBreadthCoverage, getMarketCmcExchangeLiquidityContextCoverage, getMarketCmcFearGreedContextCoverage, getMarketCmcIndexContextCoverage, getMarketContextBackfillCoverage, getMarketGlobalContextCoverage, getMarketReferenceAssetContextCoverage, getMarketTradeFlowCoverage, upsertMarketBreadthRows, upsertMarketCmcExchangeLiquidityContextRows, upsertMarketCmcFearGreedContextRows, upsertMarketCmcIndexContextRows, upsertMarketContextBackfillCoverage, upsertMarketGlobalContextRows, upsertMarketReferenceAssetContextRows, upsertMarketTradeFlowRows };
|
|
@@ -141,18 +141,7 @@ var toMarketFeatureAge = (rowTs, atMs) => {
|
|
|
141
141
|
return Number.isFinite(ageMs) ? ageMs : null;
|
|
142
142
|
};
|
|
143
143
|
|
|
144
|
-
// src/timescale/
|
|
145
|
-
var derivativesSchemaReady = false;
|
|
146
|
-
var binanceMarketSchemaReady = false;
|
|
147
|
-
var hyperliquidWhaleSchemaReady = false;
|
|
148
|
-
var derivativesSchemaReadyPromise = null;
|
|
149
|
-
var binanceMarketSchemaReadyPromise = null;
|
|
150
|
-
var hyperliquidWhaleSchemaReadyPromise = null;
|
|
151
|
-
var marketContextSchemaMode = "ensure";
|
|
152
|
-
var verifiedMarketContextSchemas = /* @__PURE__ */ new Set();
|
|
153
|
-
var DERIVATIVES_SCHEMA_LOCK_KEY = 610001;
|
|
154
|
-
var BINANCE_MARKET_SCHEMA_LOCK_KEY = 610003;
|
|
155
|
-
var HYPERLIQUID_WHALE_SCHEMA_LOCK_KEY = 610004;
|
|
144
|
+
// src/timescale/schema/lifecycle.ts
|
|
156
145
|
var withSchemaLock = async (lockKey, work) => {
|
|
157
146
|
const pool = getPool();
|
|
158
147
|
await pool.query("SELECT pg_advisory_lock($1)", [lockKey]);
|
|
@@ -162,6 +151,11 @@ var withSchemaLock = async (lockKey, work) => {
|
|
|
162
151
|
await pool.query("SELECT pg_advisory_unlock($1)", [lockKey]);
|
|
163
152
|
}
|
|
164
153
|
};
|
|
154
|
+
|
|
155
|
+
// src/timescale/schema/derivatives.ts
|
|
156
|
+
var derivativesSchemaReady = false;
|
|
157
|
+
var derivativesSchemaReadyPromise = null;
|
|
158
|
+
var DERIVATIVES_SCHEMA_LOCK_KEY = 610001;
|
|
165
159
|
var ensureDerivativesSchema = async () => {
|
|
166
160
|
if (derivativesSchemaReady) return;
|
|
167
161
|
if (derivativesSchemaReadyPromise) {
|
|
@@ -249,6 +243,11 @@ var ensureDerivativesSchema = async () => {
|
|
|
249
243
|
});
|
|
250
244
|
await derivativesSchemaReadyPromise;
|
|
251
245
|
};
|
|
246
|
+
|
|
247
|
+
// src/timescale/schema/marketContext.ts
|
|
248
|
+
var binanceMarketSchemaReady = false;
|
|
249
|
+
var binanceMarketSchemaReadyPromise = null;
|
|
250
|
+
var BINANCE_MARKET_SCHEMA_LOCK_KEY = 610003;
|
|
252
251
|
var ensureBinanceMarketSchema = async () => {
|
|
253
252
|
if (binanceMarketSchemaReady) return;
|
|
254
253
|
if (binanceMarketSchemaReadyPromise) {
|
|
@@ -529,6 +528,11 @@ var ensureBinanceMarketSchema = async () => {
|
|
|
529
528
|
});
|
|
530
529
|
await binanceMarketSchemaReadyPromise;
|
|
531
530
|
};
|
|
531
|
+
|
|
532
|
+
// src/timescale/schema/hyperliquidWhales.ts
|
|
533
|
+
var hyperliquidWhaleSchemaReady = false;
|
|
534
|
+
var hyperliquidWhaleSchemaReadyPromise = null;
|
|
535
|
+
var HYPERLIQUID_WHALE_SCHEMA_LOCK_KEY = 610004;
|
|
532
536
|
var ensureHyperliquidWhaleSchema = async () => {
|
|
533
537
|
if (hyperliquidWhaleSchemaReady) return;
|
|
534
538
|
if (hyperliquidWhaleSchemaReadyPromise) {
|
|
@@ -757,6 +761,10 @@ var ensureHyperliquidWhaleSchema = async () => {
|
|
|
757
761
|
});
|
|
758
762
|
await hyperliquidWhaleSchemaReadyPromise;
|
|
759
763
|
};
|
|
764
|
+
|
|
765
|
+
// src/timescale/internal.ts
|
|
766
|
+
var marketContextSchemaMode = "ensure";
|
|
767
|
+
var verifiedMarketContextSchemas = /* @__PURE__ */ new Set();
|
|
760
768
|
var ensureCoinMarketCapContextSchema = async () => ensureBinanceMarketSchema();
|
|
761
769
|
var ensureMarketContextSchema = async (source) => {
|
|
762
770
|
switch (source) {
|
|
@@ -810,7 +818,7 @@ var ensureMarketContextSchemas = async (sources) => {
|
|
|
810
818
|
}
|
|
811
819
|
};
|
|
812
820
|
|
|
813
|
-
// src/timescale/marketContext.ts
|
|
821
|
+
// src/timescale/marketContext/commands.ts
|
|
814
822
|
async function upsertMarketTradeFlowRows(rows) {
|
|
815
823
|
if (!rows.length) return;
|
|
816
824
|
await ensureBinanceMarketSchema();
|
|
@@ -1266,6 +1274,52 @@ async function upsertMarketCmcIndexContextRows(rows) {
|
|
|
1266
1274
|
flat
|
|
1267
1275
|
);
|
|
1268
1276
|
}
|
|
1277
|
+
async function upsertMarketContextBackfillCoverage(rows) {
|
|
1278
|
+
const normalizedRows = rows.map((row) => ({
|
|
1279
|
+
source: String(row.source || "").trim().toLowerCase(),
|
|
1280
|
+
scope: String(row.scope || "").trim().toLowerCase(),
|
|
1281
|
+
interval: String(row.interval || "").trim().toLowerCase(),
|
|
1282
|
+
fromMs: Math.trunc(row.fromMs),
|
|
1283
|
+
toMs: Math.trunc(row.toMs),
|
|
1284
|
+
rowsCount: Math.max(0, Math.trunc(row.rowsCount))
|
|
1285
|
+
})).filter(
|
|
1286
|
+
(row) => row.source && row.scope && row.interval && Number.isFinite(row.fromMs) && Number.isFinite(row.toMs) && row.toMs >= row.fromMs
|
|
1287
|
+
);
|
|
1288
|
+
if (!normalizedRows.length) return;
|
|
1289
|
+
await ensureBinanceMarketSchema();
|
|
1290
|
+
const pool = getPool();
|
|
1291
|
+
const cols = [
|
|
1292
|
+
"source",
|
|
1293
|
+
"scope",
|
|
1294
|
+
"interval",
|
|
1295
|
+
"from_ts",
|
|
1296
|
+
"to_ts",
|
|
1297
|
+
"rows_count"
|
|
1298
|
+
];
|
|
1299
|
+
const valuesSql = normalizedRows.map(
|
|
1300
|
+
(_, i) => `(${cols.map((__, j) => `$${i * cols.length + j + 1}`).join(",")})`
|
|
1301
|
+
).join(",");
|
|
1302
|
+
const flat = normalizedRows.flatMap((row) => [
|
|
1303
|
+
row.source,
|
|
1304
|
+
row.scope,
|
|
1305
|
+
row.interval,
|
|
1306
|
+
new Date(row.fromMs),
|
|
1307
|
+
new Date(row.toMs),
|
|
1308
|
+
row.rowsCount
|
|
1309
|
+
]);
|
|
1310
|
+
await pool.query(
|
|
1311
|
+
`
|
|
1312
|
+
INSERT INTO market_context_backfill_coverage (${cols.join(",")})
|
|
1313
|
+
VALUES ${valuesSql}
|
|
1314
|
+
ON CONFLICT (source, scope, interval, from_ts, to_ts) DO UPDATE SET
|
|
1315
|
+
rows_count = EXCLUDED.rows_count,
|
|
1316
|
+
checked_at = now()
|
|
1317
|
+
`,
|
|
1318
|
+
flat
|
|
1319
|
+
);
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
// src/timescale/marketContext/queries.ts
|
|
1269
1323
|
async function getMarketContextBackfillCoverage(params) {
|
|
1270
1324
|
const source = String(params.source || "").trim().toLowerCase();
|
|
1271
1325
|
const scopes = [
|
|
@@ -1311,50 +1365,6 @@ async function getMarketContextBackfillCoverage(params) {
|
|
|
1311
1365
|
};
|
|
1312
1366
|
});
|
|
1313
1367
|
}
|
|
1314
|
-
async function upsertMarketContextBackfillCoverage(rows) {
|
|
1315
|
-
const normalizedRows = rows.map((row) => ({
|
|
1316
|
-
source: String(row.source || "").trim().toLowerCase(),
|
|
1317
|
-
scope: String(row.scope || "").trim().toLowerCase(),
|
|
1318
|
-
interval: String(row.interval || "").trim().toLowerCase(),
|
|
1319
|
-
fromMs: Math.trunc(row.fromMs),
|
|
1320
|
-
toMs: Math.trunc(row.toMs),
|
|
1321
|
-
rowsCount: Math.max(0, Math.trunc(row.rowsCount))
|
|
1322
|
-
})).filter(
|
|
1323
|
-
(row) => row.source && row.scope && row.interval && Number.isFinite(row.fromMs) && Number.isFinite(row.toMs) && row.toMs >= row.fromMs
|
|
1324
|
-
);
|
|
1325
|
-
if (!normalizedRows.length) return;
|
|
1326
|
-
await ensureBinanceMarketSchema();
|
|
1327
|
-
const pool = getPool();
|
|
1328
|
-
const cols = [
|
|
1329
|
-
"source",
|
|
1330
|
-
"scope",
|
|
1331
|
-
"interval",
|
|
1332
|
-
"from_ts",
|
|
1333
|
-
"to_ts",
|
|
1334
|
-
"rows_count"
|
|
1335
|
-
];
|
|
1336
|
-
const valuesSql = normalizedRows.map(
|
|
1337
|
-
(_, i) => `(${cols.map((__, j) => `$${i * cols.length + j + 1}`).join(",")})`
|
|
1338
|
-
).join(",");
|
|
1339
|
-
const flat = normalizedRows.flatMap((row) => [
|
|
1340
|
-
row.source,
|
|
1341
|
-
row.scope,
|
|
1342
|
-
row.interval,
|
|
1343
|
-
new Date(row.fromMs),
|
|
1344
|
-
new Date(row.toMs),
|
|
1345
|
-
row.rowsCount
|
|
1346
|
-
]);
|
|
1347
|
-
await pool.query(
|
|
1348
|
-
`
|
|
1349
|
-
INSERT INTO market_context_backfill_coverage (${cols.join(",")})
|
|
1350
|
-
VALUES ${valuesSql}
|
|
1351
|
-
ON CONFLICT (source, scope, interval, from_ts, to_ts) DO UPDATE SET
|
|
1352
|
-
rows_count = EXCLUDED.rows_count,
|
|
1353
|
-
checked_at = now()
|
|
1354
|
-
`,
|
|
1355
|
-
flat
|
|
1356
|
-
);
|
|
1357
|
-
}
|
|
1358
1368
|
async function getLatestMarketTradeFlow(params) {
|
|
1359
1369
|
await prepareMarketContextSchemaForRead("binance");
|
|
1360
1370
|
const res = await queryMarketContext(
|