@tradejs/cli 1.0.8 → 1.0.10
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/cli.js +29748 -13641
- package/dist/lib/aiPocketSearch.js +1316 -0
- package/dist/lib/aiTrainCharts.js +711 -0
- package/dist/lib/aiTrainDataset.js +40 -0
- package/dist/lib/aiTrainEvaluationDump.js +76 -0
- package/dist/lib/aiTrainMetrics.js +148 -8
- package/dist/lib/aiTrainOptions.js +130 -0
- package/dist/lib/aiTrainQuarantine.js +199 -0
- package/dist/lib/aiTrainResearch.js +467 -0
- package/dist/lib/binanceMarketContextBackfill.js +841 -0
- package/dist/lib/binanceMarketData.js +392 -0
- package/dist/lib/coinMarketCapContextBackfill.js +1088 -0
- package/dist/lib/continuity.js +60 -0
- package/dist/lib/derivativesContextBackfill.js +490 -77
- package/dist/lib/executionCalibration.js +705 -0
- package/dist/lib/marketContextPrepare.js +4403 -0
- package/dist/lib/paritySummary.js +101 -0
- package/dist/lib/runBot.js +1 -0
- package/dist/lib/runEnvironment.js +2254 -0
- package/dist/lib/runFormatting.js +1657 -0
- package/dist/lib/runtimeDebugEvidence.js +526 -0
- package/dist/lib/runtimeModeConfig.js +53 -0
- package/dist/lib/runtimeParity.js +88 -11
- package/dist/lib/runtimeParityDetails.js +751 -0
- package/dist/lib/runtimeRedis.js +157 -0
- package/dist/lib/runtimeSignalsLoader.js +187 -0
- package/dist/lib/runtimeSignalsStorage.js +185 -0
- package/dist/lib/runtimeStrategyBacktest.js +134 -0
- package/dist/lib/runtimeTradeSync.js +263 -0
- package/dist/lib/telegramReports.js +9 -0
- package/dist/lib/tickerUniverseCache.js +116 -0
- package/dist/lib/timeWindow.js +3 -3
- package/dist/scripts/agentRun.js +28 -8
- package/dist/scripts/aiExport.js +1721 -7
- package/dist/scripts/aiExportSelect.js +16 -4
- package/dist/scripts/aiPocketSearch.js +4190 -0
- package/dist/scripts/aiTrain.js +1866 -87
- package/dist/scripts/backtest.js +4509 -818
- package/dist/scripts/binanceMarketIngest.js +565 -0
- package/dist/scripts/bot.js +16 -2
- package/dist/scripts/candlesMigrateProvider.js +32 -22
- package/dist/scripts/cleanDir.js +15 -2
- package/dist/scripts/cleanRedis.js +15 -2
- package/dist/scripts/cleanTests.js +38 -2
- package/dist/scripts/cleanupMarketContext.js +69 -0
- package/dist/scripts/continuity.js +148 -67
- package/dist/scripts/derivativesIngest.js +14 -4
- package/dist/scripts/derivativesIngestCoinalyzeAll.js +14 -4
- package/dist/scripts/doctor.js +14 -4
- package/dist/scripts/executionCalibration.js +792 -0
- package/dist/scripts/infraCommon.js +10 -0
- package/dist/scripts/infraDown.js +14 -4
- package/dist/scripts/infraInit.js +24 -4
- package/dist/scripts/infraUp.js +14 -4
- package/dist/scripts/marketWs.js +222 -0
- package/dist/scripts/migration.js +15 -2
- package/dist/scripts/mlExport.js +1698 -10
- package/dist/scripts/mlExportSelect.js +16 -4
- package/dist/scripts/mlInspect.js +13 -3
- package/dist/scripts/mlTrainLatestSelect.js +14 -4
- package/dist/scripts/replay.js +8824 -0
- package/dist/scripts/replayRunner.js +8827 -0
- package/dist/scripts/replayRuntimeEvidence.js +868 -0
- package/dist/scripts/researchAuto.js +289 -60
- package/dist/scripts/results.js +3 -3
- package/dist/scripts/runtimeEvidence.js +605 -0
- package/dist/scripts/runtimeParity.js +6360 -1004
- package/dist/scripts/serverHealth.js +588 -0
- package/dist/scripts/signals.js +5623 -486
- package/dist/scripts/signalsDaemon.js +6167 -0
- package/dist/scripts/signalsSummary.js +954 -312
- package/dist/scripts/test-ml.js +25 -3
- package/dist/scripts/test.js +26 -1
- package/dist/scripts/user-add.js +15 -2
- package/dist/workers/testerWorker.js +130 -21
- package/package.json +18 -12
package/dist/scripts/cleanDir.js
CHANGED
|
@@ -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
|
|
46
|
+
var main = async () => {
|
|
37
47
|
await (0, import_cli.cleanFiles)(getDir());
|
|
38
48
|
process.exit();
|
|
39
49
|
};
|
|
40
|
-
|
|
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
|
|
46
|
+
var main = async () => {
|
|
37
47
|
await (0, import_cli.cleanRedis)(getArea());
|
|
38
48
|
process.exit();
|
|
39
49
|
};
|
|
40
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
237
|
+
const defaultConnector = await provider.create({
|
|
129
238
|
userName: flags.user
|
|
130
239
|
});
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
{
|
|
135
|
-
total: tickers.length,
|
|
136
|
-
width: 30
|
|
137
|
-
}
|
|
240
|
+
const universes = resolveContinuityUniverses(
|
|
241
|
+
requestedUniverse,
|
|
242
|
+
defaultConnector.capabilities.supportedUniverses
|
|
138
243
|
);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
|
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
|
-
|
|
398
|
-
|
|
399
|
-
|
|
407
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
408
|
+
0 && (module.exports = {
|
|
409
|
+
main
|
|
400
410
|
});
|
package/dist/scripts/doctor.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
5141
|
-
|
|
5142
|
-
|
|
5150
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
5151
|
+
0 && (module.exports = {
|
|
5152
|
+
main
|
|
5143
5153
|
});
|