@tradejs/cli 1.0.9 → 1.0.11

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 (77) hide show
  1. package/README.md +13 -4
  2. package/dist/cli.js +29531 -13520
  3. package/dist/lib/aiPocketSearch.js +1316 -0
  4. package/dist/lib/aiTrainCharts.js +711 -0
  5. package/dist/lib/aiTrainDataset.js +40 -0
  6. package/dist/lib/aiTrainEvaluationDump.js +76 -0
  7. package/dist/lib/aiTrainMetrics.js +148 -8
  8. package/dist/lib/aiTrainOptions.js +130 -0
  9. package/dist/lib/aiTrainQuarantine.js +199 -0
  10. package/dist/lib/aiTrainResearch.js +467 -0
  11. package/dist/lib/binanceMarketContextBackfill.js +841 -0
  12. package/dist/lib/binanceMarketData.js +392 -0
  13. package/dist/lib/coinMarketCapContextBackfill.js +1126 -0
  14. package/dist/lib/continuity.js +60 -0
  15. package/dist/lib/derivativesContextBackfill.js +490 -77
  16. package/dist/lib/executionCalibration.js +705 -0
  17. package/dist/lib/marketContextPrepare.js +4441 -0
  18. package/dist/lib/paritySummary.js +101 -0
  19. package/dist/lib/runBot.js +1 -0
  20. package/dist/lib/runEnvironment.js +2259 -0
  21. package/dist/lib/runFormatting.js +1657 -0
  22. package/dist/lib/runtimeDebugEvidence.js +526 -0
  23. package/dist/lib/runtimeModeConfig.js +53 -0
  24. package/dist/lib/runtimeParity.js +88 -11
  25. package/dist/lib/runtimeParityDetails.js +751 -0
  26. package/dist/lib/runtimeRedis.js +157 -0
  27. package/dist/lib/runtimeSignalsLoader.js +40 -6
  28. package/dist/lib/runtimeSignalsStorage.js +45 -22
  29. package/dist/lib/runtimeStrategyBacktest.js +134 -0
  30. package/dist/lib/runtimeTradeSync.js +263 -0
  31. package/dist/lib/telegramReports.js +9 -0
  32. package/dist/lib/tickerUniverseCache.js +116 -0
  33. package/dist/lib/timeWindow.js +3 -3
  34. package/dist/scripts/agentRun.js +14 -8
  35. package/dist/scripts/aiExport.js +1721 -7
  36. package/dist/scripts/aiExportSelect.js +16 -4
  37. package/dist/scripts/aiPocketSearch.js +4190 -0
  38. package/dist/scripts/aiTrain.js +1866 -87
  39. package/dist/scripts/backtest.js +4534 -803
  40. package/dist/scripts/binanceMarketIngest.js +565 -0
  41. package/dist/scripts/bot.js +16 -2
  42. package/dist/scripts/candlesMigrateProvider.js +32 -22
  43. package/dist/scripts/cleanDir.js +15 -2
  44. package/dist/scripts/cleanRedis.js +15 -2
  45. package/dist/scripts/cleanTests.js +38 -2
  46. package/dist/scripts/cleanupMarketContext.js +69 -0
  47. package/dist/scripts/continuity.js +148 -67
  48. package/dist/scripts/derivativesIngest.js +14 -4
  49. package/dist/scripts/derivativesIngestCoinalyzeAll.js +14 -4
  50. package/dist/scripts/doctor.js +14 -4
  51. package/dist/scripts/executionCalibration.js +792 -0
  52. package/dist/scripts/infraCommon.js +18 -5
  53. package/dist/scripts/infraDown.js +14 -4
  54. package/dist/scripts/infraInit.js +32 -9
  55. package/dist/scripts/infraUp.js +24 -6
  56. package/dist/scripts/marketWs.js +222 -0
  57. package/dist/scripts/migration.js +15 -2
  58. package/dist/scripts/mlExport.js +1698 -10
  59. package/dist/scripts/mlExportSelect.js +16 -4
  60. package/dist/scripts/mlInspect.js +13 -3
  61. package/dist/scripts/mlTrainLatestSelect.js +14 -4
  62. package/dist/scripts/replay.js +8867 -0
  63. package/dist/scripts/replayRunner.js +8870 -0
  64. package/dist/scripts/replayRuntimeEvidence.js +868 -0
  65. package/dist/scripts/researchAuto.js +286 -59
  66. package/dist/scripts/results.js +3 -3
  67. package/dist/scripts/runtimeEvidence.js +605 -0
  68. package/dist/scripts/runtimeParity.js +6400 -1043
  69. package/dist/scripts/serverHealth.js +588 -0
  70. package/dist/scripts/signals.js +5628 -511
  71. package/dist/scripts/signalsDaemon.js +6205 -0
  72. package/dist/scripts/signalsSummary.js +833 -248
  73. package/dist/scripts/test-ml.js +25 -3
  74. package/dist/scripts/test.js +26 -1
  75. package/dist/scripts/user-add.js +15 -2
  76. package/dist/workers/testerWorker.js +130 -21
  77. package/package.json +18 -12
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
8
12
  var __copyProps = (to, from, except, desc) => {
9
13
  if (from && typeof from === "object" || typeof from === "function") {
10
14
  for (let key of __getOwnPropNames(from))
@@ -21,8 +25,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
29
 
25
30
  // src/scripts/cleanDir.ts
31
+ var cleanDir_exports = {};
32
+ __export(cleanDir_exports, {
33
+ main: () => main
34
+ });
35
+ module.exports = __toCommonJS(cleanDir_exports);
26
36
  var import_args = __toESM(require("args"));
27
37
  var import_cli = require("@tradejs/node/cli");
28
38
  import_args.default.option("dir", "Directory clean up", "cache");
@@ -33,8 +43,11 @@ var getDir = () => {
33
43
  }
34
44
  return "data/cache";
35
45
  };
36
- var run = async () => {
46
+ var main = async () => {
37
47
  await (0, import_cli.cleanFiles)(getDir());
38
48
  process.exit();
39
49
  };
40
- run();
50
+ // Annotate the CommonJS export names for ESM import in node:
51
+ 0 && (module.exports = {
52
+ main
53
+ });
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
8
12
  var __copyProps = (to, from, except, desc) => {
9
13
  if (from && typeof from === "object" || typeof from === "function") {
10
14
  for (let key of __getOwnPropNames(from))
@@ -21,8 +25,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
29
 
25
30
  // src/scripts/cleanRedis.ts
31
+ var cleanRedis_exports = {};
32
+ __export(cleanRedis_exports, {
33
+ main: () => main
34
+ });
35
+ module.exports = __toCommonJS(cleanRedis_exports);
26
36
  var import_args = __toESM(require("args"));
27
37
  var import_cli = require("@tradejs/node/cli");
28
38
  import_args.default.option("area", "Area clean up", "cache");
@@ -33,8 +43,11 @@ var getArea = () => {
33
43
  }
34
44
  return "cache";
35
45
  };
36
- var run = async () => {
46
+ var main = async () => {
37
47
  await (0, import_cli.cleanRedis)(getArea());
38
48
  process.exit();
39
49
  };
40
- run();
50
+ // Annotate the CommonJS export names for ESM import in node:
51
+ 0 && (module.exports = {
52
+ main
53
+ });
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
8
12
  var __copyProps = (to, from, except, desc) => {
9
13
  if (from && typeof from === "object" || typeof from === "function") {
10
14
  for (let key of __getOwnPropNames(from))
@@ -21,11 +25,20 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
29
 
25
30
  // src/scripts/cleanTests.ts
31
+ var cleanTests_exports = {};
32
+ __export(cleanTests_exports, {
33
+ main: () => main
34
+ });
35
+ module.exports = __toCommonJS(cleanTests_exports);
26
36
  var import_args = __toESM(require("args"));
37
+ var import_promises = __toESM(require("fs/promises"));
38
+ var import_path = __toESM(require("path"));
27
39
  var import_chalk = __toESM(require("chalk"));
28
40
  var import_cli = require("@tradejs/node/cli");
41
+ var import_backtestArtifacts = require("@tradejs/infra/backtestArtifacts");
29
42
  var import_redis = require("@tradejs/infra/redis");
30
43
  import_args.default.option(["U", "user"], "Clean tests for user", "");
31
44
  import_args.default.option(["C", "cache"], "Clean only cache keys", false);
@@ -58,16 +71,36 @@ var getUsersToClean = async () => {
58
71
  var cleanUserTests = async (userName) => {
59
72
  const testsPrefix = `users:${userName}:tests:`;
60
73
  const testsCachePrefix = `users:${userName}:cache:tests:`;
74
+ const projectRoot = process.env.PROJECT_CWD || process.cwd();
75
+ const persistedArtifactsDir = import_path.default.relative(
76
+ projectRoot,
77
+ (0, import_backtestArtifacts.getPersistedBacktestArtifactsDirForUser)(userName, projectRoot)
78
+ );
79
+ const cacheArtifactsDir = import_path.default.relative(
80
+ projectRoot,
81
+ (0, import_backtestArtifacts.getBacktestCacheArtifactsDirForUser)(userName, projectRoot)
82
+ );
61
83
  if (flags.cache) {
62
84
  console.log(import_chalk.default.yellow(`clean user cache: ${userName}`));
63
85
  await (0, import_cli.cleanRedis)(testsCachePrefix);
86
+ await (0, import_cli.cleanFiles)(cacheArtifactsDir);
64
87
  return;
65
88
  }
66
89
  console.log(import_chalk.default.yellow(`clean user tests: ${userName}`));
67
90
  await (0, import_cli.cleanRedis)(testsPrefix);
68
91
  await (0, import_cli.cleanRedis)(testsCachePrefix);
92
+ await (0, import_cli.cleanFiles)(persistedArtifactsDir);
93
+ await (0, import_cli.cleanFiles)(cacheArtifactsDir);
94
+ await import_promises.default.rm(import_path.default.join(projectRoot, persistedArtifactsDir), {
95
+ recursive: true,
96
+ force: true
97
+ });
98
+ await import_promises.default.rm(import_path.default.join(projectRoot, cacheArtifactsDir), {
99
+ recursive: true,
100
+ force: true
101
+ });
69
102
  };
70
- var run = async () => {
103
+ var main = async () => {
71
104
  const users = await getUsersToClean();
72
105
  if (users.length === 0) {
73
106
  console.log(import_chalk.default.yellow("No users found to clean tests."));
@@ -78,4 +111,7 @@ var run = async () => {
78
111
  }
79
112
  process.exit();
80
113
  };
81
- run();
114
+ // Annotate the CommonJS export names for ESM import in node:
115
+ 0 && (module.exports = {
116
+ main
117
+ });
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/scripts/cleanupMarketContext.ts
31
+ var cleanupMarketContext_exports = {};
32
+ __export(cleanupMarketContext_exports, {
33
+ main: () => main
34
+ });
35
+ module.exports = __toCommonJS(cleanupMarketContext_exports);
36
+ var import_config = require("dotenv/config");
37
+ var import_args = __toESM(require("args"));
38
+ var import_chalk = __toESM(require("chalk"));
39
+ var import_timescale = require("@tradejs/infra/timescale");
40
+ import_args.default.example(
41
+ "yarn cli maintenance:cleanup-market-context --apply",
42
+ "Remove deprecated snapshot-only market context data from Timescale"
43
+ );
44
+ import_args.default.option(["a", "apply"], "Apply destructive cleanup; default is dry-run");
45
+ var flags = import_args.default.parse(process.argv);
46
+ var main = async () => {
47
+ const apply = Boolean(flags.apply);
48
+ await (0, import_timescale.waitForDbReady)();
49
+ const items = await (0, import_timescale.cleanupDeprecatedMarketContext)({ apply });
50
+ if (!items.length) {
51
+ console.log(import_chalk.default.green("No deprecated market context data found."));
52
+ return;
53
+ }
54
+ console.log(
55
+ apply ? import_chalk.default.yellow("Deprecated market context cleanup applied:") : import_chalk.default.cyan("Deprecated market context cleanup dry-run:")
56
+ );
57
+ for (const item of items) {
58
+ console.log(
59
+ `${item.action} ${item.name}: rows=${item.rows} applied=${item.applied}`
60
+ );
61
+ }
62
+ if (!apply) {
63
+ console.log(import_chalk.default.gray("Pass --apply to execute this cleanup."));
64
+ }
65
+ };
66
+ // Annotate the CommonJS export names for ESM import in node:
67
+ 0 && (module.exports = {
68
+ main
69
+ });
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
8
12
  var __copyProps = (to, from, except, desc) => {
9
13
  if (from && typeof from === "object" || typeof from === "function") {
10
14
  for (let key of __getOwnPropNames(from))
@@ -21,8 +25,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
29
 
25
30
  // src/scripts/continuity.ts
31
+ var continuity_exports = {};
32
+ __export(continuity_exports, {
33
+ main: () => main
34
+ });
35
+ module.exports = __toCommonJS(continuity_exports);
26
36
  var import_args = __toESM(require("args"));
27
37
  var import_progress = __toESM(require("progress"));
28
38
  var import_chalk = __toESM(require("chalk"));
@@ -32,6 +42,37 @@ var import_constants = require("@tradejs/core/constants");
32
42
  var import_time = require("@tradejs/core/time");
33
43
  var import_logger = require("@tradejs/infra/logger");
34
44
  var import_timescale = require("@tradejs/infra/timescale");
45
+
46
+ // src/lib/continuity.ts
47
+ var import_types = require("@tradejs/types");
48
+ var parseContinuityUniverse = (value) => {
49
+ const normalized = String(value ?? "all").trim().toLowerCase();
50
+ if (normalized === "all" || (0, import_types.isMarketUniverse)(normalized)) {
51
+ return normalized;
52
+ }
53
+ throw new Error(
54
+ `Unknown market universe: ${normalized}. Supported: all, crypto, tradfi`
55
+ );
56
+ };
57
+ var resolveContinuityUniverses = (requested, supported) => requested === "all" ? [...supported] : supported.includes(requested) ? [requested] : [];
58
+ var findRepairableContinuityGap = (data, expectedMs, universe) => {
59
+ if (universe === "tradfi") return null;
60
+ for (let i = 1; i < data.length; i++) {
61
+ const prev = data[i - 1];
62
+ const current = data[i];
63
+ const diff = current.timestamp - prev.timestamp;
64
+ if (diff !== expectedMs) {
65
+ return {
66
+ prevTs: prev.timestamp,
67
+ ts: current.timestamp,
68
+ diffSeconds: Math.floor(diff / 1e3)
69
+ };
70
+ }
71
+ }
72
+ return null;
73
+ };
74
+
75
+ // src/scripts/continuity.ts
35
76
  import_args.default.option(["t", "tickers"], "Selected tickers");
36
77
  import_args.default.option(["f", "timeframe"], "Timeframe", 15);
37
78
  import_args.default.option(
@@ -40,6 +81,7 @@ import_args.default.option(
40
81
  "all"
41
82
  );
42
83
  import_args.default.option(["U", "user"], "Use user confg", "root");
84
+ import_args.default.option(["V", "universe"], "Market universe: all|crypto|tradfi", "all");
43
85
  var flags = import_args.default.parse(process.argv);
44
86
  var interval = Number(flags.timeframe);
45
87
  var intervalKey = flags.timeframe.toString();
@@ -63,22 +105,82 @@ var parseProviders = async (value) => {
63
105
  }
64
106
  return uniqueSelected;
65
107
  };
66
- var findGapInData = (data, expectedMs) => {
67
- for (let i = 1; i < data.length; i++) {
68
- const prev = data[i - 1];
69
- const current = data[i];
70
- const diff = current.timestamp - prev.timestamp;
71
- if (diff !== expectedMs) {
72
- return {
73
- prevTs: prev.timestamp,
74
- ts: current.timestamp,
75
- diffSeconds: Math.floor(diff / 1e3)
76
- };
108
+ var runContinuity = async ({
109
+ connector,
110
+ provider,
111
+ connectorName,
112
+ reloadStart,
113
+ reloadEnd
114
+ }) => {
115
+ const { universe } = connector;
116
+ const tickers = await (0, import_cli.getTickers)(
117
+ connector,
118
+ flags.tickers,
119
+ "",
120
+ void 0,
121
+ void 0,
122
+ { universe }
123
+ );
124
+ const bar = new import_progress.default(
125
+ ":current/:total [:bar][:percent] broken::broken fixed::fixed :eta(s) :symbol",
126
+ {
127
+ total: tickers.length,
128
+ width: 30
129
+ }
130
+ );
131
+ let broken = 0;
132
+ let fixed = 0;
133
+ const expectedMs = interval * 60 * 1e3;
134
+ import_logger.logger.info(
135
+ import_chalk.default.yellow(`continuity ${connectorName}:${universe}: ${tickers.length}`)
136
+ );
137
+ for await (const symbol of tickers) {
138
+ const data = await connector.kline({
139
+ symbol,
140
+ interval: intervalKey,
141
+ start: reloadStart,
142
+ end: reloadEnd,
143
+ silent: true
144
+ });
145
+ let gap = findRepairableContinuityGap(data, expectedMs, universe);
146
+ if (gap) {
147
+ broken++;
148
+ import_logger.logger.warn(
149
+ "[%s:%s] gap %s %s: %s -> %s (%ss)",
150
+ provider,
151
+ universe,
152
+ symbol,
153
+ interval,
154
+ (0, import_time.formatUnix)(gap.prevTs),
155
+ (0, import_time.formatUnix)(gap.ts),
156
+ gap.diffSeconds
157
+ );
158
+ await (0, import_timescale.deleteCandles)(provider, symbol, interval);
159
+ const reloaded = await connector.kline({
160
+ symbol,
161
+ interval: intervalKey,
162
+ start: reloadStart,
163
+ end: reloadEnd,
164
+ silent: true
165
+ });
166
+ gap = findRepairableContinuityGap(reloaded, expectedMs, universe);
167
+ if (!gap) {
168
+ fixed++;
169
+ }
77
170
  }
171
+ bar.tick(1, {
172
+ broken: import_chalk.default.yellow(broken),
173
+ fixed: import_chalk.default.cyan(fixed),
174
+ symbol: import_chalk.default.gray(symbol)
175
+ });
78
176
  }
79
- return null;
177
+ import_logger.logger.info(
178
+ import_chalk.default.yellow(
179
+ `[${provider}:${universe}] broken: ${broken}/${tickers.length}, fixed: ${fixed}`
180
+ )
181
+ );
80
182
  };
81
- var continuity = async () => {
183
+ var main = async () => {
82
184
  if (!Number.isFinite(interval) || interval <= 0) {
83
185
  import_logger.logger.error("Invalid timeframe: %s", flags.timeframe);
84
186
  process.exit(1);
@@ -86,6 +188,13 @@ var continuity = async () => {
86
188
  await (0, import_timescale.waitForDbReady)();
87
189
  const reloadStart = (0, import_time.getTimestamp)(import_constants.PRELOAD_DAYS);
88
190
  const reloadEnd = (0, import_time.getTimestamp)();
191
+ let requestedUniverse;
192
+ try {
193
+ requestedUniverse = parseContinuityUniverse(flags.universe);
194
+ } catch (error) {
195
+ import_logger.logger.error(error.message);
196
+ process.exit(1);
197
+ }
89
198
  const providerIds = await parseProviders(flags.provider);
90
199
  const providers = await Promise.all(
91
200
  providerIds.map(async (providerId) => {
@@ -125,66 +234,38 @@ var continuity = async () => {
125
234
  process.exit(1);
126
235
  }
127
236
  for await (const provider of activeProviders) {
128
- const connector = await provider.create({
237
+ const defaultConnector = await provider.create({
129
238
  userName: flags.user
130
239
  });
131
- const tickers = await (0, import_cli.getTickers)(connector, flags.tickers);
132
- const bar = new import_progress.default(
133
- ":current/:total [:bar][:percent] broken::broken fixed::fixed :eta(s) :symbol",
134
- {
135
- total: tickers.length,
136
- width: 30
137
- }
240
+ const universes = resolveContinuityUniverses(
241
+ requestedUniverse,
242
+ defaultConnector.capabilities.supportedUniverses
138
243
  );
139
- let broken = 0;
140
- let fixed = 0;
141
- const expectedMs = interval * 60 * 1e3;
142
- import_logger.logger.info(import_chalk.default.yellow(`continuity ${provider.name}: ${tickers.length}`));
143
- for await (const symbol of tickers) {
144
- const data = await connector.kline({
145
- symbol,
146
- interval: intervalKey,
147
- start: reloadStart,
148
- end: reloadEnd,
149
- silent: true
244
+ if (!universes.length) {
245
+ import_logger.logger.warn(
246
+ 'Skip provider "%s": universe "%s" is not supported',
247
+ provider.id,
248
+ requestedUniverse
249
+ );
250
+ continue;
251
+ }
252
+ for (const universe of universes) {
253
+ const connector = defaultConnector.universe === universe ? defaultConnector : await provider.create({
254
+ userName: flags.user,
255
+ universe
150
256
  });
151
- let gap = findGapInData(data, expectedMs);
152
- if (gap) {
153
- broken++;
154
- import_logger.logger.warn(
155
- "[%s] gap %s %s: %s -> %s (%ss)",
156
- provider.id,
157
- symbol,
158
- interval,
159
- (0, import_time.formatUnix)(gap.prevTs),
160
- (0, import_time.formatUnix)(gap.ts),
161
- gap.diffSeconds
162
- );
163
- await (0, import_timescale.deleteCandles)(provider.id, symbol, interval);
164
- const reloaded = await connector.kline({
165
- symbol,
166
- interval: intervalKey,
167
- start: reloadStart,
168
- end: reloadEnd,
169
- silent: true
170
- });
171
- gap = findGapInData(reloaded, expectedMs);
172
- if (!gap) {
173
- fixed++;
174
- }
175
- }
176
- bar.tick(1, {
177
- broken: import_chalk.default.yellow(broken),
178
- fixed: import_chalk.default.cyan(fixed),
179
- symbol: import_chalk.default.gray(symbol)
257
+ await runContinuity({
258
+ connector,
259
+ provider: provider.id,
260
+ connectorName: provider.name,
261
+ reloadStart,
262
+ reloadEnd
180
263
  });
181
264
  }
182
- import_logger.logger.info(
183
- import_chalk.default.yellow(
184
- `[${provider.id}] broken: ${broken}/${tickers.length}, fixed: ${fixed}`
185
- )
186
- );
187
265
  }
188
266
  process.exit();
189
267
  };
190
- continuity();
268
+ // Annotate the CommonJS export names for ESM import in node:
269
+ 0 && (module.exports = {
270
+ main
271
+ });
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
8
12
  var __copyProps = (to, from, except, desc) => {
9
13
  if (from && typeof from === "object" || typeof from === "function") {
10
14
  for (let key of __getOwnPropNames(from))
@@ -21,8 +25,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
29
 
25
30
  // src/scripts/derivativesIngest.ts
31
+ var derivativesIngest_exports = {};
32
+ __export(derivativesIngest_exports, {
33
+ main: () => main
34
+ });
35
+ module.exports = __toCommonJS(derivativesIngest_exports);
26
36
  var import_config = require("dotenv/config");
27
37
  var import_args = __toESM(require("args"));
28
38
  var import_chalk = __toESM(require("chalk"));
@@ -49,7 +59,7 @@ var asInt = (value, fallback) => {
49
59
  const parsed = Number.parseInt(String(value ?? ""), 10);
50
60
  return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
51
61
  };
52
- var run = async () => {
62
+ var main = async () => {
53
63
  const providerName = String(flags.provider || "coinalyze").trim().toLowerCase();
54
64
  const provider = import_connectors.marketDataProviders[providerName];
55
65
  if (!provider) {
@@ -106,7 +116,7 @@ var run = async () => {
106
116
  )
107
117
  );
108
118
  };
109
- run().catch((error) => {
110
- console.error(import_chalk.default.red(`derivativesIngest failed: ${error}`));
111
- process.exit(1);
119
+ // Annotate the CommonJS export names for ESM import in node:
120
+ 0 && (module.exports = {
121
+ main
112
122
  });
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
8
12
  var __copyProps = (to, from, except, desc) => {
9
13
  if (from && typeof from === "object" || typeof from === "function") {
10
14
  for (let key of __getOwnPropNames(from))
@@ -21,8 +25,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
29
 
25
30
  // src/scripts/derivativesIngestCoinalyzeAll.ts
31
+ var derivativesIngestCoinalyzeAll_exports = {};
32
+ __export(derivativesIngestCoinalyzeAll_exports, {
33
+ main: () => main
34
+ });
35
+ module.exports = __toCommonJS(derivativesIngestCoinalyzeAll_exports);
26
36
  var import_config = require("dotenv/config");
27
37
  var import_args = __toESM(require("args"));
28
38
  var import_chalk = __toESM(require("chalk"));
@@ -227,7 +237,7 @@ var fetchMetricBatch = async (params) => {
227
237
  const raw = await fetchJsonWithRateLimit(url.toString(), apiKey);
228
238
  return toSeriesMap(raw, metric);
229
239
  };
230
- var run = async () => {
240
+ var main = async () => {
231
241
  const userName = String(flags.user || "root").trim() || "root";
232
242
  const intervals = (0, import_indicators.normalizeDerivativesIntervals)(
233
243
  flags.intervals
@@ -394,7 +404,7 @@ var run = async () => {
394
404
  process.exit(1);
395
405
  }
396
406
  };
397
- run().catch((error) => {
398
- console.error(import_chalk.default.red(`derivativesIngestCoinalyzeAll failed: ${error}`));
399
- process.exit(1);
407
+ // Annotate the CommonJS export names for ESM import in node:
408
+ 0 && (module.exports = {
409
+ main
400
410
  });
@@ -8,6 +8,10 @@ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
8
  var __commonJS = (cb, mod) => function __require() {
9
9
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
10
  };
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
11
15
  var __copyProps = (to, from, except, desc) => {
12
16
  if (from && typeof from === "object" || typeof from === "function") {
13
17
  for (let key of __getOwnPropNames(from))
@@ -24,6 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
28
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
29
  mod
26
30
  ));
31
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
32
 
28
33
  // ../../node_modules/postgres-array/index.js
29
34
  var require_postgres_array = __commonJS({
@@ -4957,6 +4962,11 @@ var require_lib2 = __commonJS({
4957
4962
  });
4958
4963
 
4959
4964
  // src/scripts/doctor.ts
4965
+ var doctor_exports = {};
4966
+ __export(doctor_exports, {
4967
+ main: () => main
4968
+ });
4969
+ module.exports = __toCommonJS(doctor_exports);
4960
4970
  var import_config = require("dotenv/config");
4961
4971
  var import_args = __toESM(require("args"));
4962
4972
  var import_chalk = __toESM(require("chalk"));
@@ -5093,7 +5103,7 @@ var checkMlGrpc = async () => {
5093
5103
  };
5094
5104
  import_args.default.option("require-ml", "Treat ML gRPC connectivity as required", false).option("skip-ml", "Skip ML gRPC check", false);
5095
5105
  var flags = import_args.default.parse(process.argv);
5096
- var run = async () => {
5106
+ var main = async () => {
5097
5107
  const checks = [];
5098
5108
  checks.push(await checkRedis());
5099
5109
  checks.push(await checkPostgres());
@@ -5137,7 +5147,7 @@ var run = async () => {
5137
5147
  console.log("");
5138
5148
  console.log(import_chalk.default.green("Doctor passed."));
5139
5149
  };
5140
- run().catch((error) => {
5141
- console.error(import_chalk.default.red(`doctor failed: ${String(error)}`));
5142
- process.exit(1);
5150
+ // Annotate the CommonJS export names for ESM import in node:
5151
+ 0 && (module.exports = {
5152
+ main
5143
5153
  });