@tradejs/infra 2.0.17 → 2.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/ai.js +3 -54
  2. package/dist/ai.mjs +1 -54
  3. package/dist/chunk-2CZREG43.mjs +112 -0
  4. package/dist/chunk-DFMKDB2R.mjs +1285 -0
  5. package/dist/chunk-I2J6YDBD.mjs +910 -0
  6. package/dist/chunk-NWXFWTWU.mjs +1114 -0
  7. package/dist/chunk-SZQB7ER5.mjs +492 -0
  8. package/dist/chunk-YVIHTUV5.mjs +286 -0
  9. package/dist/internal-2coHaaos.d.mts +26 -0
  10. package/dist/internal-2coHaaos.d.ts +26 -0
  11. package/dist/runtimeDeployments.d.mts +10 -0
  12. package/dist/runtimeDeployments.d.ts +10 -0
  13. package/dist/runtimeDeployments.js +447 -0
  14. package/dist/runtimeDeployments.mjs +81 -0
  15. package/dist/runtimeStrategyConfigs.d.mts +28 -0
  16. package/dist/runtimeStrategyConfigs.d.ts +28 -0
  17. package/dist/runtimeStrategyConfigs.js +425 -0
  18. package/dist/runtimeStrategyConfigs.mjs +89 -0
  19. package/dist/timescale/candles.d.mts +38 -0
  20. package/dist/timescale/candles.d.ts +38 -0
  21. package/dist/timescale/candles.js +408 -0
  22. package/dist/timescale/candles.mjs +21 -0
  23. package/dist/timescale/client.d.mts +4 -0
  24. package/dist/timescale/client.d.ts +4 -0
  25. package/dist/timescale/client.js +109 -0
  26. package/dist/timescale/client.mjs +12 -0
  27. package/dist/timescale/derivatives.d.mts +90 -0
  28. package/dist/timescale/derivatives.d.ts +90 -0
  29. package/dist/timescale/derivatives.js +1270 -0
  30. package/dist/timescale/derivatives.mjs +26 -0
  31. package/dist/timescale/hyperliquidWhales.d.mts +149 -0
  32. package/dist/timescale/hyperliquidWhales.d.ts +149 -0
  33. package/dist/timescale/hyperliquidWhales.js +1893 -0
  34. package/dist/timescale/hyperliquidWhales.mjs +30 -0
  35. package/dist/timescale/marketContext.d.mts +188 -0
  36. package/dist/timescale/marketContext.d.ts +188 -0
  37. package/dist/timescale/marketContext.js +2091 -0
  38. package/dist/timescale/marketContext.mjs +60 -0
  39. package/dist/timescale/spread.d.mts +11 -0
  40. package/dist/timescale/spread.d.ts +11 -0
  41. package/dist/timescale/spread.js +215 -0
  42. package/dist/timescale/spread.mjs +11 -0
  43. package/dist/timescale.d.mts +9 -476
  44. package/dist/timescale.d.ts +9 -476
  45. package/dist/timescale.js +2121 -2112
  46. package/dist/timescale.mjs +73 -4070
  47. package/dist/tradingAccounts.d.mts +2 -8
  48. package/dist/tradingAccounts.d.ts +2 -8
  49. package/dist/tradingAccounts.js +0 -71
  50. package/dist/tradingAccounts.mjs +0 -65
  51. package/dist/values-BrvcmnfM.d.mts +6 -0
  52. package/dist/values-BrvcmnfM.d.ts +6 -0
  53. package/package.json +43 -2
@@ -0,0 +1,60 @@
1
+ import {
2
+ cleanupDeprecatedMarketContext,
3
+ getLatestMarketBreadth,
4
+ getLatestMarketCmcExchangeLiquidityContext,
5
+ getLatestMarketCmcFearGreedContext,
6
+ getLatestMarketCmcIndexContexts,
7
+ getLatestMarketGlobalContext,
8
+ getLatestMarketReferenceAssetContexts,
9
+ getLatestMarketTradeFlow,
10
+ getMarketBreadthCoverage,
11
+ getMarketCmcExchangeLiquidityContextCoverage,
12
+ getMarketCmcFearGreedContextCoverage,
13
+ getMarketCmcIndexContextCoverage,
14
+ getMarketContextBackfillCoverage,
15
+ getMarketGlobalContextCoverage,
16
+ getMarketReferenceAssetContextCoverage,
17
+ getMarketTradeFlowCoverage,
18
+ upsertMarketBreadthRows,
19
+ upsertMarketCmcExchangeLiquidityContextRows,
20
+ upsertMarketCmcFearGreedContextRows,
21
+ upsertMarketCmcIndexContextRows,
22
+ upsertMarketContextBackfillCoverage,
23
+ upsertMarketGlobalContextRows,
24
+ upsertMarketReferenceAssetContextRows,
25
+ upsertMarketTradeFlowRows
26
+ } from "../chunk-DFMKDB2R.mjs";
27
+ import {
28
+ ensureBinanceMarketSchema,
29
+ ensureCoinMarketCapContextSchema,
30
+ ensureMarketContextSchemas
31
+ } from "../chunk-I2J6YDBD.mjs";
32
+ export {
33
+ cleanupDeprecatedMarketContext,
34
+ ensureBinanceMarketSchema,
35
+ ensureCoinMarketCapContextSchema,
36
+ ensureMarketContextSchemas,
37
+ getLatestMarketBreadth,
38
+ getLatestMarketCmcExchangeLiquidityContext,
39
+ getLatestMarketCmcFearGreedContext,
40
+ getLatestMarketCmcIndexContexts,
41
+ getLatestMarketGlobalContext,
42
+ getLatestMarketReferenceAssetContexts,
43
+ getLatestMarketTradeFlow,
44
+ getMarketBreadthCoverage,
45
+ getMarketCmcExchangeLiquidityContextCoverage,
46
+ getMarketCmcFearGreedContextCoverage,
47
+ getMarketCmcIndexContextCoverage,
48
+ getMarketContextBackfillCoverage,
49
+ getMarketGlobalContextCoverage,
50
+ getMarketReferenceAssetContextCoverage,
51
+ getMarketTradeFlowCoverage,
52
+ upsertMarketBreadthRows,
53
+ upsertMarketCmcExchangeLiquidityContextRows,
54
+ upsertMarketCmcFearGreedContextRows,
55
+ upsertMarketCmcIndexContextRows,
56
+ upsertMarketContextBackfillCoverage,
57
+ upsertMarketGlobalContextRows,
58
+ upsertMarketReferenceAssetContextRows,
59
+ upsertMarketTradeFlowRows
60
+ };
@@ -0,0 +1,11 @@
1
+ import { DerivativesInterval, SpreadRow } from '@tradejs/types';
2
+
3
+ declare function upsertSpreadRows(rows: SpreadRow[]): Promise<void>;
4
+ declare function getSpreadRangeForSymbols(symbols: string[], interval: DerivativesInterval, startMs: number, endMs: number): Promise<any[]>;
5
+ declare function getSpreadSummary(hours?: number, limit?: number): Promise<{
6
+ rows: any[];
7
+ aggregates: any[];
8
+ hours: number;
9
+ }>;
10
+
11
+ export { getSpreadRangeForSymbols, getSpreadSummary, upsertSpreadRows };
@@ -0,0 +1,11 @@
1
+ import { DerivativesInterval, SpreadRow } from '@tradejs/types';
2
+
3
+ declare function upsertSpreadRows(rows: SpreadRow[]): Promise<void>;
4
+ declare function getSpreadRangeForSymbols(symbols: string[], interval: DerivativesInterval, startMs: number, endMs: number): Promise<any[]>;
5
+ declare function getSpreadSummary(hours?: number, limit?: number): Promise<{
6
+ rows: any[];
7
+ aggregates: any[];
8
+ hours: number;
9
+ }>;
10
+
11
+ export { getSpreadRangeForSymbols, getSpreadSummary, upsertSpreadRows };
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/timescale/spread.ts
21
+ var spread_exports = {};
22
+ __export(spread_exports, {
23
+ getSpreadRangeForSymbols: () => getSpreadRangeForSymbols,
24
+ getSpreadSummary: () => getSpreadSummary,
25
+ upsertSpreadRows: () => upsertSpreadRows
26
+ });
27
+ module.exports = __toCommonJS(spread_exports);
28
+
29
+ // src/timescale/pool.ts
30
+ var import_pg = require("pg");
31
+ var getPool = () => {
32
+ if (!global.__pgPool__) {
33
+ const max = Number(process.env.PG_POOL_MAX ?? 10);
34
+ const connectionTimeoutMillis = Number(
35
+ process.env.PG_CONNECTION_TIMEOUT_MS ?? 3e4
36
+ );
37
+ global.__pgPool__ = new import_pg.Pool({
38
+ host: process.env.PG_HOST || "127.0.0.1",
39
+ port: Number(process.env.PG_PORT ?? 5432),
40
+ user: process.env.PG_USER || "app",
41
+ password: String(process.env.PG_PASSWORD ?? "app"),
42
+ database: process.env.PG_DATABASE || process.env.PG_DB || "app",
43
+ max: Number.isFinite(max) && max > 0 ? Math.floor(max) : 10,
44
+ idleTimeoutMillis: 3e4,
45
+ connectionTimeoutMillis: Number.isFinite(connectionTimeoutMillis) && connectionTimeoutMillis > 0 ? Math.floor(connectionTimeoutMillis) : 3e4
46
+ });
47
+ }
48
+ return global.__pgPool__;
49
+ };
50
+
51
+ // src/timescale/internal.ts
52
+ var spreadSchemaReady = false;
53
+ var spreadSchemaReadyPromise = null;
54
+ var SPREAD_SCHEMA_LOCK_KEY = 610002;
55
+ var withSchemaLock = async (lockKey, work) => {
56
+ const pool = getPool();
57
+ await pool.query("SELECT pg_advisory_lock($1)", [lockKey]);
58
+ try {
59
+ await work();
60
+ } finally {
61
+ await pool.query("SELECT pg_advisory_unlock($1)", [lockKey]);
62
+ }
63
+ };
64
+ var ensureSpreadSchema = async () => {
65
+ if (spreadSchemaReady) return;
66
+ if (spreadSchemaReadyPromise) {
67
+ await spreadSchemaReadyPromise;
68
+ return;
69
+ }
70
+ const pool = getPool();
71
+ spreadSchemaReadyPromise = withSchemaLock(
72
+ SPREAD_SCHEMA_LOCK_KEY,
73
+ async () => {
74
+ if (spreadSchemaReady) return;
75
+ await pool.query("CREATE EXTENSION IF NOT EXISTS timescaledb");
76
+ await pool.query(`
77
+ CREATE TABLE IF NOT EXISTS market_spread (
78
+ symbol text NOT NULL,
79
+ interval text NOT NULL,
80
+ ts timestamptz NOT NULL,
81
+ binance_price double precision,
82
+ coinbase_price double precision,
83
+ spread double precision,
84
+ source text,
85
+ ingested_at timestamptz NOT NULL DEFAULT now(),
86
+ PRIMARY KEY (symbol, interval, ts)
87
+ )
88
+ `);
89
+ await pool.query(`
90
+ SELECT create_hypertable(
91
+ 'market_spread',
92
+ 'ts',
93
+ if_not_exists => TRUE,
94
+ chunk_time_interval => interval '14 days'
95
+ )
96
+ `);
97
+ await pool.query(`
98
+ CREATE INDEX IF NOT EXISTS market_spread_symbol_tf_ts_idx
99
+ ON market_spread (symbol, interval, ts DESC)
100
+ `);
101
+ spreadSchemaReady = true;
102
+ }
103
+ ).finally(() => {
104
+ spreadSchemaReadyPromise = null;
105
+ });
106
+ await spreadSchemaReadyPromise;
107
+ };
108
+
109
+ // src/timescale/spread.ts
110
+ async function upsertSpreadRows(rows) {
111
+ if (!rows.length) return;
112
+ await ensureSpreadSchema();
113
+ const pool = getPool();
114
+ const cols = [
115
+ "symbol",
116
+ "interval",
117
+ "ts",
118
+ "binance_price",
119
+ "coinbase_price",
120
+ "spread",
121
+ "source"
122
+ ];
123
+ const maxRows = Math.floor(65535 / cols.length);
124
+ if (rows.length > maxRows) {
125
+ for (let i = 0; i < rows.length; i += maxRows) {
126
+ await upsertSpreadRows(rows.slice(i, i + maxRows));
127
+ }
128
+ return;
129
+ }
130
+ const valuesSql = rows.map(
131
+ (_, i) => `(${cols.map((__, j) => `$${i * cols.length + j + 1}`).join(",")})`
132
+ ).join(",");
133
+ const flat = rows.flatMap((row) => [
134
+ row.symbol,
135
+ row.interval,
136
+ row.ts,
137
+ row.binancePrice ?? null,
138
+ row.coinbasePrice ?? null,
139
+ row.spread ?? null,
140
+ row.source ?? null
141
+ ]);
142
+ const sql = `
143
+ INSERT INTO market_spread (${cols.join(",")})
144
+ VALUES ${valuesSql}
145
+ ON CONFLICT (symbol, interval, ts) DO UPDATE SET
146
+ binance_price = COALESCE(EXCLUDED.binance_price, market_spread.binance_price),
147
+ coinbase_price = COALESCE(EXCLUDED.coinbase_price, market_spread.coinbase_price),
148
+ spread = COALESCE(EXCLUDED.spread, market_spread.spread),
149
+ source = COALESCE(EXCLUDED.source, market_spread.source),
150
+ ingested_at = now()
151
+ `;
152
+ await pool.query(sql, flat);
153
+ }
154
+ async function getSpreadRangeForSymbols(symbols, interval, startMs, endMs) {
155
+ if (!symbols.length) {
156
+ return [];
157
+ }
158
+ await ensureSpreadSchema();
159
+ const pool = getPool();
160
+ const sql = `
161
+ SELECT symbol, interval, ts, binance_price, coinbase_price, spread
162
+ FROM market_spread
163
+ WHERE symbol = ANY($1)
164
+ AND interval = $2
165
+ AND ts >= to_timestamp($3/1000.0)
166
+ AND ts <= to_timestamp($4/1000.0)
167
+ ORDER BY symbol ASC, ts ASC
168
+ `;
169
+ const res = await pool.query(sql, [symbols, interval, startMs, endMs]);
170
+ return res.rows;
171
+ }
172
+ async function getSpreadSummary(hours = 24, limit = 500) {
173
+ await ensureSpreadSchema();
174
+ const pool = getPool();
175
+ const cappedHours = Math.max(1, Math.min(24 * 30, hours));
176
+ const cappedLimit = Math.max(50, Math.min(5e3, limit));
177
+ const rowsQ = await pool.query(
178
+ `
179
+ SELECT symbol, interval, ts, binance_price, coinbase_price, spread
180
+ FROM market_spread
181
+ WHERE ts >= now() - ($1 || ' hours')::interval
182
+ ORDER BY ts DESC
183
+ LIMIT $2
184
+ `,
185
+ [String(cappedHours), cappedLimit]
186
+ );
187
+ const aggQ = await pool.query(
188
+ `
189
+ SELECT
190
+ symbol,
191
+ interval,
192
+ COUNT(*)::int AS points,
193
+ MAX(ts) AS last_ts,
194
+ AVG(spread) AS avg_spread,
195
+ STDDEV_POP(spread) AS std_spread
196
+ FROM market_spread
197
+ WHERE ts >= now() - ($1 || ' hours')::interval
198
+ GROUP BY symbol, interval
199
+ ORDER BY points DESC, symbol ASC
200
+ LIMIT 500
201
+ `,
202
+ [String(cappedHours)]
203
+ );
204
+ return {
205
+ rows: rowsQ.rows,
206
+ aggregates: aggQ.rows,
207
+ hours: cappedHours
208
+ };
209
+ }
210
+ // Annotate the CommonJS export names for ESM import in node:
211
+ 0 && (module.exports = {
212
+ getSpreadRangeForSymbols,
213
+ getSpreadSummary,
214
+ upsertSpreadRows
215
+ });
@@ -0,0 +1,11 @@
1
+ import {
2
+ getSpreadRangeForSymbols,
3
+ getSpreadSummary,
4
+ upsertSpreadRows
5
+ } from "../chunk-2CZREG43.mjs";
6
+ import "../chunk-I2J6YDBD.mjs";
7
+ export {
8
+ getSpreadRangeForSymbols,
9
+ getSpreadSummary,
10
+ upsertSpreadRows
11
+ };