@tradejs/infra 3.1.2 → 3.1.4

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.
@@ -517,7 +517,6 @@ var redisKeys = {
517
517
  backtestConfig: (userName, config) => `users:${userName}:backtests:configs:${config}`,
518
518
  strategies: (userName) => `users:${userName}:strategies`,
519
519
  strategyConfig: (userName, strategyName, configId = "config") => `users:${userName}:strategies:${strategyName}:${configId}`,
520
- runtimeStrategyDraft: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:draft`,
521
520
  runtimeStrategyReleases: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:releases:`,
522
521
  runtimeStrategyRelease: (userName, strategyName, releaseVersion) => `users:${userName}:strategies:${strategyName}:releases:${releaseVersion}`,
523
522
  runtimeStrategyReleaseSequence: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:release-seq`,
package/dist/redis.d.mts CHANGED
@@ -47,7 +47,6 @@ declare const redisKeys: {
47
47
  backtestConfig: (userName: string, config: string) => string;
48
48
  strategies: (userName: string) => string;
49
49
  strategyConfig: (userName: string, strategyName: string, configId?: string) => string;
50
- runtimeStrategyDraft: (userName: string, strategyName: string) => string;
51
50
  runtimeStrategyReleases: (userName: string, strategyName: string) => string;
52
51
  runtimeStrategyRelease: (userName: string, strategyName: string, releaseVersion: number) => string;
53
52
  runtimeStrategyReleaseSequence: (userName: string, strategyName: string) => string;
package/dist/redis.d.ts CHANGED
@@ -47,7 +47,6 @@ declare const redisKeys: {
47
47
  backtestConfig: (userName: string, config: string) => string;
48
48
  strategies: (userName: string) => string;
49
49
  strategyConfig: (userName: string, strategyName: string, configId?: string) => string;
50
- runtimeStrategyDraft: (userName: string, strategyName: string) => string;
51
50
  runtimeStrategyReleases: (userName: string, strategyName: string) => string;
52
51
  runtimeStrategyRelease: (userName: string, strategyName: string, releaseVersion: number) => string;
53
52
  runtimeStrategyReleaseSequence: (userName: string, strategyName: string) => string;
package/dist/redis.js CHANGED
@@ -569,7 +569,6 @@ var redisKeys = {
569
569
  backtestConfig: (userName, config) => `users:${userName}:backtests:configs:${config}`,
570
570
  strategies: (userName) => `users:${userName}:strategies`,
571
571
  strategyConfig: (userName, strategyName, configId = "config") => `users:${userName}:strategies:${strategyName}:${configId}`,
572
- runtimeStrategyDraft: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:draft`,
573
572
  runtimeStrategyReleases: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:releases:`,
574
573
  runtimeStrategyRelease: (userName, strategyName, releaseVersion) => `users:${userName}:strategies:${strategyName}:releases:${releaseVersion}`,
575
574
  runtimeStrategyReleaseSequence: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:release-seq`,
package/dist/redis.mjs CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  setDataIfAbsent,
19
19
  setHashJsonField,
20
20
  setHashJsonFields
21
- } from "./chunk-RZTVC4ZL.mjs";
21
+ } from "./chunk-JLVCBKE3.mjs";
22
22
  export {
23
23
  RedisWriteBlockedError,
24
24
  closeRedisConnection,
@@ -1,5 +1,6 @@
1
1
  import { RuntimeDeployment, RuntimeDeploymentHeartbeat } from '@tradejs/types';
2
2
 
3
+ declare const verifyRuntimeDeployment: (value: unknown) => RuntimeDeployment;
3
4
  declare const listRuntimeDeployments: (userName: string) => Promise<RuntimeDeployment[]>;
4
5
  declare const getRuntimeDeployment: (userName: string, deploymentId: string) => Promise<RuntimeDeployment | null>;
5
6
  declare const saveRuntimeDeployment: (userName: string, deployment: RuntimeDeployment) => Promise<RuntimeDeployment>;
@@ -7,4 +8,4 @@ declare const deleteRuntimeDeployment: (userName: string, deploymentId: string)
7
8
  declare const getRuntimeDeploymentHeartbeat: (userName: string, deploymentId: string) => Promise<RuntimeDeploymentHeartbeat | null>;
8
9
  declare const saveRuntimeDeploymentHeartbeat: (userName: string, heartbeat: RuntimeDeploymentHeartbeat) => Promise<RuntimeDeploymentHeartbeat>;
9
10
 
10
- export { deleteRuntimeDeployment, getRuntimeDeployment, getRuntimeDeploymentHeartbeat, listRuntimeDeployments, saveRuntimeDeployment, saveRuntimeDeploymentHeartbeat };
11
+ export { deleteRuntimeDeployment, getRuntimeDeployment, getRuntimeDeploymentHeartbeat, listRuntimeDeployments, saveRuntimeDeployment, saveRuntimeDeploymentHeartbeat, verifyRuntimeDeployment };
@@ -1,5 +1,6 @@
1
1
  import { RuntimeDeployment, RuntimeDeploymentHeartbeat } from '@tradejs/types';
2
2
 
3
+ declare const verifyRuntimeDeployment: (value: unknown) => RuntimeDeployment;
3
4
  declare const listRuntimeDeployments: (userName: string) => Promise<RuntimeDeployment[]>;
4
5
  declare const getRuntimeDeployment: (userName: string, deploymentId: string) => Promise<RuntimeDeployment | null>;
5
6
  declare const saveRuntimeDeployment: (userName: string, deployment: RuntimeDeployment) => Promise<RuntimeDeployment>;
@@ -7,4 +8,4 @@ declare const deleteRuntimeDeployment: (userName: string, deploymentId: string)
7
8
  declare const getRuntimeDeploymentHeartbeat: (userName: string, deploymentId: string) => Promise<RuntimeDeploymentHeartbeat | null>;
8
9
  declare const saveRuntimeDeploymentHeartbeat: (userName: string, heartbeat: RuntimeDeploymentHeartbeat) => Promise<RuntimeDeploymentHeartbeat>;
9
10
 
10
- export { deleteRuntimeDeployment, getRuntimeDeployment, getRuntimeDeploymentHeartbeat, listRuntimeDeployments, saveRuntimeDeployment, saveRuntimeDeploymentHeartbeat };
11
+ export { deleteRuntimeDeployment, getRuntimeDeployment, getRuntimeDeploymentHeartbeat, listRuntimeDeployments, saveRuntimeDeployment, saveRuntimeDeploymentHeartbeat, verifyRuntimeDeployment };
@@ -35,7 +35,8 @@ __export(runtimeDeployments_exports, {
35
35
  getRuntimeDeploymentHeartbeat: () => getRuntimeDeploymentHeartbeat,
36
36
  listRuntimeDeployments: () => listRuntimeDeployments,
37
37
  saveRuntimeDeployment: () => saveRuntimeDeployment,
38
- saveRuntimeDeploymentHeartbeat: () => saveRuntimeDeploymentHeartbeat
38
+ saveRuntimeDeploymentHeartbeat: () => saveRuntimeDeploymentHeartbeat,
39
+ verifyRuntimeDeployment: () => verifyRuntimeDeployment
39
40
  });
40
41
  module.exports = __toCommonJS(runtimeDeployments_exports);
41
42
 
@@ -315,7 +316,6 @@ var redisKeys = {
315
316
  backtestConfig: (userName, config) => `users:${userName}:backtests:configs:${config}`,
316
317
  strategies: (userName) => `users:${userName}:strategies`,
317
318
  strategyConfig: (userName, strategyName, configId = "config") => `users:${userName}:strategies:${strategyName}:${configId}`,
318
- runtimeStrategyDraft: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:draft`,
319
319
  runtimeStrategyReleases: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:releases:`,
320
320
  runtimeStrategyRelease: (userName, strategyName, releaseVersion) => `users:${userName}:strategies:${strategyName}:releases:${releaseVersion}`,
321
321
  runtimeStrategyReleaseSequence: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:release-seq`,
@@ -383,13 +383,46 @@ var normalizeId = (value, label) => {
383
383
  if (!normalized) throw new Error(`${label} is required`);
384
384
  return normalized;
385
385
  };
386
- var isRuntimeDeployment = (value) => Boolean(
387
- value && typeof value === "object" && typeof value.id === "string" && typeof value.accountId === "string"
388
- );
386
+ var DEPLOYMENT_KEYS = /* @__PURE__ */ new Set([
387
+ "id",
388
+ "label",
389
+ "connectorName",
390
+ "provider",
391
+ "accountId",
392
+ "enabled",
393
+ "strategies",
394
+ "assetClasses",
395
+ "tickers"
396
+ ]);
397
+ var REFERENCE_KEYS = /* @__PURE__ */ new Set([
398
+ "strategyName",
399
+ "releaseVersion",
400
+ "controlState"
401
+ ]);
402
+ var verifyRuntimeDeployment = (value) => {
403
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
404
+ throw new Error("Invalid runtime deployment");
405
+ }
406
+ const deployment = value;
407
+ const strategies = deployment.strategies;
408
+ if (Object.keys(deployment).some((key) => !DEPLOYMENT_KEYS.has(key)) || typeof deployment.id !== "string" || typeof deployment.label !== "string" || typeof deployment.connectorName !== "string" || typeof deployment.provider !== "string" || typeof deployment.accountId !== "string" || typeof deployment.enabled !== "boolean" || !Array.isArray(strategies) || !strategies.length || strategies.some((value2) => {
409
+ if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) {
410
+ return true;
411
+ }
412
+ const reference = value2;
413
+ return Object.keys(reference).some((key) => !REFERENCE_KEYS.has(key)) || typeof reference.strategyName !== "string" || !reference.strategyName.trim() || !Number.isSafeInteger(reference.releaseVersion) || Number(reference.releaseVersion) <= 0 || reference.controlState !== "active" && reference.controlState !== "entries_paused";
414
+ })) {
415
+ throw new Error("Invalid runtime deployment");
416
+ }
417
+ return value;
418
+ };
389
419
  var listRuntimeDeployments = async (userName) => {
390
420
  const keys = await getKeys(redisKeys.runtimeDeployments(userName));
391
- const values = await Promise.all(keys.map((key) => getData(key, null)));
392
- return values.filter(isRuntimeDeployment).sort((left, right) => left.label.localeCompare(right.label));
421
+ const deploymentKeys = keys.filter((key) => !key.endsWith(":heartbeat"));
422
+ const values = await Promise.all(
423
+ deploymentKeys.map((key) => getData(key, null))
424
+ );
425
+ return values.filter((value) => value != null).map(verifyRuntimeDeployment).sort((left, right) => left.label.localeCompare(right.label));
393
426
  };
394
427
  var getRuntimeDeployment = async (userName, deploymentId) => {
395
428
  const normalizedId = normalizeId(deploymentId, "Deployment id");
@@ -397,38 +430,35 @@ var getRuntimeDeployment = async (userName, deploymentId) => {
397
430
  redisKeys.runtimeDeployment(userName, normalizedId),
398
431
  null
399
432
  );
400
- return isRuntimeDeployment(value) ? value : null;
433
+ return value == null ? null : verifyRuntimeDeployment(value);
401
434
  };
402
435
  var saveRuntimeDeployment = async (userName, deployment) => {
403
- const hasVersionedStrategies = deployment.strategies.some(
404
- (strategy) => strategy.releaseVersion != null
405
- );
406
- if (hasVersionedStrategies && deployment.strategies.some((strategy) => strategy.releaseVersion == null)) {
407
- throw new Error("A deployment cannot mix legacy configs and releases");
408
- }
409
436
  const strategies = deployment.strategies.map(
410
437
  (strategy) => {
411
- if (!hasVersionedStrategies) return strategy;
412
- if (!Number.isSafeInteger(strategy.releaseVersion) || !strategy.releaseVersion || strategy.config && Object.keys(strategy.config).length) {
438
+ if (!Number.isSafeInteger(strategy.releaseVersion) || !strategy.releaseVersion || strategy.controlState !== "active" && strategy.controlState !== "entries_paused") {
413
439
  throw new Error(
414
- `Invalid versioned strategy reference: ${strategy.strategyName}`
440
+ `Invalid runtime strategy reference: ${strategy.strategyName}`
415
441
  );
416
442
  }
417
443
  return {
418
444
  strategyName: strategy.strategyName,
419
445
  releaseVersion: strategy.releaseVersion,
420
- controlState: strategy.controlState === "entries_paused" ? "entries_paused" : "active"
446
+ controlState: strategy.controlState
421
447
  };
422
448
  }
423
449
  );
424
450
  const normalized = {
425
- ...deployment,
426
451
  id: normalizeId(deployment.id, "Deployment id"),
427
452
  label: deployment.label.trim(),
453
+ connectorName: deployment.connectorName.trim(),
428
454
  provider: deployment.provider.trim().toLowerCase(),
429
455
  accountId: normalizeId(deployment.accountId, "Account id"),
430
- strategies
456
+ enabled: deployment.enabled,
457
+ strategies,
458
+ assetClasses: deployment.assetClasses,
459
+ tickers: deployment.tickers
431
460
  };
461
+ verifyRuntimeDeployment(normalized);
432
462
  await setData(
433
463
  redisKeys.runtimeDeployment(userName, normalized.id),
434
464
  normalized,
@@ -471,5 +501,6 @@ var saveRuntimeDeploymentHeartbeat = async (userName, heartbeat) => {
471
501
  getRuntimeDeploymentHeartbeat,
472
502
  listRuntimeDeployments,
473
503
  saveRuntimeDeployment,
474
- saveRuntimeDeploymentHeartbeat
504
+ saveRuntimeDeploymentHeartbeat,
505
+ verifyRuntimeDeployment
475
506
  });
@@ -4,7 +4,7 @@ import {
4
4
  getKeys,
5
5
  redisKeys,
6
6
  setData
7
- } from "./chunk-RZTVC4ZL.mjs";
7
+ } from "./chunk-JLVCBKE3.mjs";
8
8
 
9
9
  // src/runtimeDeployments.ts
10
10
  var normalizeId = (value, label) => {
@@ -12,13 +12,46 @@ var normalizeId = (value, label) => {
12
12
  if (!normalized) throw new Error(`${label} is required`);
13
13
  return normalized;
14
14
  };
15
- var isRuntimeDeployment = (value) => Boolean(
16
- value && typeof value === "object" && typeof value.id === "string" && typeof value.accountId === "string"
17
- );
15
+ var DEPLOYMENT_KEYS = /* @__PURE__ */ new Set([
16
+ "id",
17
+ "label",
18
+ "connectorName",
19
+ "provider",
20
+ "accountId",
21
+ "enabled",
22
+ "strategies",
23
+ "assetClasses",
24
+ "tickers"
25
+ ]);
26
+ var REFERENCE_KEYS = /* @__PURE__ */ new Set([
27
+ "strategyName",
28
+ "releaseVersion",
29
+ "controlState"
30
+ ]);
31
+ var verifyRuntimeDeployment = (value) => {
32
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
33
+ throw new Error("Invalid runtime deployment");
34
+ }
35
+ const deployment = value;
36
+ const strategies = deployment.strategies;
37
+ if (Object.keys(deployment).some((key) => !DEPLOYMENT_KEYS.has(key)) || typeof deployment.id !== "string" || typeof deployment.label !== "string" || typeof deployment.connectorName !== "string" || typeof deployment.provider !== "string" || typeof deployment.accountId !== "string" || typeof deployment.enabled !== "boolean" || !Array.isArray(strategies) || !strategies.length || strategies.some((value2) => {
38
+ if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) {
39
+ return true;
40
+ }
41
+ const reference = value2;
42
+ return Object.keys(reference).some((key) => !REFERENCE_KEYS.has(key)) || typeof reference.strategyName !== "string" || !reference.strategyName.trim() || !Number.isSafeInteger(reference.releaseVersion) || Number(reference.releaseVersion) <= 0 || reference.controlState !== "active" && reference.controlState !== "entries_paused";
43
+ })) {
44
+ throw new Error("Invalid runtime deployment");
45
+ }
46
+ return value;
47
+ };
18
48
  var listRuntimeDeployments = async (userName) => {
19
49
  const keys = await getKeys(redisKeys.runtimeDeployments(userName));
20
- const values = await Promise.all(keys.map((key) => getData(key, null)));
21
- return values.filter(isRuntimeDeployment).sort((left, right) => left.label.localeCompare(right.label));
50
+ const deploymentKeys = keys.filter((key) => !key.endsWith(":heartbeat"));
51
+ const values = await Promise.all(
52
+ deploymentKeys.map((key) => getData(key, null))
53
+ );
54
+ return values.filter((value) => value != null).map(verifyRuntimeDeployment).sort((left, right) => left.label.localeCompare(right.label));
22
55
  };
23
56
  var getRuntimeDeployment = async (userName, deploymentId) => {
24
57
  const normalizedId = normalizeId(deploymentId, "Deployment id");
@@ -26,38 +59,35 @@ var getRuntimeDeployment = async (userName, deploymentId) => {
26
59
  redisKeys.runtimeDeployment(userName, normalizedId),
27
60
  null
28
61
  );
29
- return isRuntimeDeployment(value) ? value : null;
62
+ return value == null ? null : verifyRuntimeDeployment(value);
30
63
  };
31
64
  var saveRuntimeDeployment = async (userName, deployment) => {
32
- const hasVersionedStrategies = deployment.strategies.some(
33
- (strategy) => strategy.releaseVersion != null
34
- );
35
- if (hasVersionedStrategies && deployment.strategies.some((strategy) => strategy.releaseVersion == null)) {
36
- throw new Error("A deployment cannot mix legacy configs and releases");
37
- }
38
65
  const strategies = deployment.strategies.map(
39
66
  (strategy) => {
40
- if (!hasVersionedStrategies) return strategy;
41
- if (!Number.isSafeInteger(strategy.releaseVersion) || !strategy.releaseVersion || strategy.config && Object.keys(strategy.config).length) {
67
+ if (!Number.isSafeInteger(strategy.releaseVersion) || !strategy.releaseVersion || strategy.controlState !== "active" && strategy.controlState !== "entries_paused") {
42
68
  throw new Error(
43
- `Invalid versioned strategy reference: ${strategy.strategyName}`
69
+ `Invalid runtime strategy reference: ${strategy.strategyName}`
44
70
  );
45
71
  }
46
72
  return {
47
73
  strategyName: strategy.strategyName,
48
74
  releaseVersion: strategy.releaseVersion,
49
- controlState: strategy.controlState === "entries_paused" ? "entries_paused" : "active"
75
+ controlState: strategy.controlState
50
76
  };
51
77
  }
52
78
  );
53
79
  const normalized = {
54
- ...deployment,
55
80
  id: normalizeId(deployment.id, "Deployment id"),
56
81
  label: deployment.label.trim(),
82
+ connectorName: deployment.connectorName.trim(),
57
83
  provider: deployment.provider.trim().toLowerCase(),
58
84
  accountId: normalizeId(deployment.accountId, "Account id"),
59
- strategies
85
+ enabled: deployment.enabled,
86
+ strategies,
87
+ assetClasses: deployment.assetClasses,
88
+ tickers: deployment.tickers
60
89
  };
90
+ verifyRuntimeDeployment(normalized);
61
91
  await setData(
62
92
  redisKeys.runtimeDeployment(userName, normalized.id),
63
93
  normalized,
@@ -99,5 +129,6 @@ export {
99
129
  getRuntimeDeploymentHeartbeat,
100
130
  listRuntimeDeployments,
101
131
  saveRuntimeDeployment,
102
- saveRuntimeDeploymentHeartbeat
132
+ saveRuntimeDeploymentHeartbeat,
133
+ verifyRuntimeDeployment
103
134
  };
@@ -284,7 +284,6 @@ var redisKeys = {
284
284
  backtestConfig: (userName, config) => `users:${userName}:backtests:configs:${config}`,
285
285
  strategies: (userName) => `users:${userName}:strategies`,
286
286
  strategyConfig: (userName, strategyName, configId = "config") => `users:${userName}:strategies:${strategyName}:${configId}`,
287
- runtimeStrategyDraft: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:draft`,
288
287
  runtimeStrategyReleases: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:releases:`,
289
288
  runtimeStrategyRelease: (userName, strategyName, releaseVersion) => `users:${userName}:strategies:${strategyName}:releases:${releaseVersion}`,
290
289
  runtimeStrategyReleaseSequence: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:release-seq`,
@@ -3,7 +3,7 @@ import {
3
3
  getKeys,
4
4
  redisKeys,
5
5
  setData
6
- } from "./chunk-RZTVC4ZL.mjs";
6
+ } from "./chunk-JLVCBKE3.mjs";
7
7
 
8
8
  // src/runtimeStrategyConfigs.ts
9
9
  var RESERVED_STRATEGY_NAMES = /* @__PURE__ */ new Set(["charts"]);
@@ -1,24 +1,16 @@
1
- import { StrategyConfig, RuntimeStrategyDraft, RuntimeStrategyRelease, RuntimeStrategyControlState, RuntimeStrategyControlEvent } from '@tradejs/types';
1
+ import { StrategyConfig, RuntimeStrategyRelease, RuntimeStrategyControlState, RuntimeStrategyControlEvent } from '@tradejs/types';
2
2
 
3
3
  declare const assertRuntimeStrategyReleaseConfig: (config: StrategyConfig) => void;
4
4
  declare const verifyRuntimeStrategyRelease: (value: unknown) => RuntimeStrategyRelease;
5
- declare const getRuntimeStrategyDraft: (userName: string, strategyName: string) => Promise<RuntimeStrategyDraft | null>;
6
- declare const saveRuntimeStrategyDraft: ({ userName, strategyName, config, baseReleaseVersion, updatedBy, }: {
7
- userName: string;
8
- strategyName: string;
9
- config: StrategyConfig;
10
- baseReleaseVersion?: number | null;
11
- updatedBy: string;
12
- }) => Promise<RuntimeStrategyDraft>;
13
5
  declare const getRuntimeStrategyRelease: (userName: string, strategyName: string, releaseVersion: number) => Promise<RuntimeStrategyRelease | null>;
14
6
  declare const listRuntimeStrategyReleases: (userName: string, strategyName: string) => Promise<RuntimeStrategyRelease[]>;
15
7
  declare const publishRuntimeStrategyRelease: ({ userName, strategyName, config, strategyPackage, strategyPackageVersion, runtimePackageVersion, createdBy, }: {
16
8
  userName: string;
17
9
  strategyName: string;
18
10
  config: StrategyConfig;
19
- strategyPackage?: string | null;
20
- strategyPackageVersion?: string | null;
21
- runtimePackageVersion?: string | null;
11
+ strategyPackage: string;
12
+ strategyPackageVersion: string;
13
+ runtimePackageVersion: string;
22
14
  createdBy: string;
23
15
  }) => Promise<RuntimeStrategyRelease>;
24
16
  declare const recordRuntimeStrategyControlEvent: ({ userName, deploymentId, strategyName, releaseVersion, previousState, nextState, createdBy, }: {
@@ -31,4 +23,4 @@ declare const recordRuntimeStrategyControlEvent: ({ userName, deploymentId, stra
31
23
  createdBy: string;
32
24
  }) => Promise<RuntimeStrategyControlEvent>;
33
25
 
34
- export { assertRuntimeStrategyReleaseConfig, getRuntimeStrategyDraft, getRuntimeStrategyRelease, listRuntimeStrategyReleases, publishRuntimeStrategyRelease, recordRuntimeStrategyControlEvent, saveRuntimeStrategyDraft, verifyRuntimeStrategyRelease };
26
+ export { assertRuntimeStrategyReleaseConfig, getRuntimeStrategyRelease, listRuntimeStrategyReleases, publishRuntimeStrategyRelease, recordRuntimeStrategyControlEvent, verifyRuntimeStrategyRelease };
@@ -1,24 +1,16 @@
1
- import { StrategyConfig, RuntimeStrategyDraft, RuntimeStrategyRelease, RuntimeStrategyControlState, RuntimeStrategyControlEvent } from '@tradejs/types';
1
+ import { StrategyConfig, RuntimeStrategyRelease, RuntimeStrategyControlState, RuntimeStrategyControlEvent } from '@tradejs/types';
2
2
 
3
3
  declare const assertRuntimeStrategyReleaseConfig: (config: StrategyConfig) => void;
4
4
  declare const verifyRuntimeStrategyRelease: (value: unknown) => RuntimeStrategyRelease;
5
- declare const getRuntimeStrategyDraft: (userName: string, strategyName: string) => Promise<RuntimeStrategyDraft | null>;
6
- declare const saveRuntimeStrategyDraft: ({ userName, strategyName, config, baseReleaseVersion, updatedBy, }: {
7
- userName: string;
8
- strategyName: string;
9
- config: StrategyConfig;
10
- baseReleaseVersion?: number | null;
11
- updatedBy: string;
12
- }) => Promise<RuntimeStrategyDraft>;
13
5
  declare const getRuntimeStrategyRelease: (userName: string, strategyName: string, releaseVersion: number) => Promise<RuntimeStrategyRelease | null>;
14
6
  declare const listRuntimeStrategyReleases: (userName: string, strategyName: string) => Promise<RuntimeStrategyRelease[]>;
15
7
  declare const publishRuntimeStrategyRelease: ({ userName, strategyName, config, strategyPackage, strategyPackageVersion, runtimePackageVersion, createdBy, }: {
16
8
  userName: string;
17
9
  strategyName: string;
18
10
  config: StrategyConfig;
19
- strategyPackage?: string | null;
20
- strategyPackageVersion?: string | null;
21
- runtimePackageVersion?: string | null;
11
+ strategyPackage: string;
12
+ strategyPackageVersion: string;
13
+ runtimePackageVersion: string;
22
14
  createdBy: string;
23
15
  }) => Promise<RuntimeStrategyRelease>;
24
16
  declare const recordRuntimeStrategyControlEvent: ({ userName, deploymentId, strategyName, releaseVersion, previousState, nextState, createdBy, }: {
@@ -31,4 +23,4 @@ declare const recordRuntimeStrategyControlEvent: ({ userName, deploymentId, stra
31
23
  createdBy: string;
32
24
  }) => Promise<RuntimeStrategyControlEvent>;
33
25
 
34
- export { assertRuntimeStrategyReleaseConfig, getRuntimeStrategyDraft, getRuntimeStrategyRelease, listRuntimeStrategyReleases, publishRuntimeStrategyRelease, recordRuntimeStrategyControlEvent, saveRuntimeStrategyDraft, verifyRuntimeStrategyRelease };
26
+ export { assertRuntimeStrategyReleaseConfig, getRuntimeStrategyRelease, listRuntimeStrategyReleases, publishRuntimeStrategyRelease, recordRuntimeStrategyControlEvent, verifyRuntimeStrategyRelease };
@@ -31,12 +31,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var runtimeStrategyReleases_exports = {};
32
32
  __export(runtimeStrategyReleases_exports, {
33
33
  assertRuntimeStrategyReleaseConfig: () => assertRuntimeStrategyReleaseConfig,
34
- getRuntimeStrategyDraft: () => getRuntimeStrategyDraft,
35
34
  getRuntimeStrategyRelease: () => getRuntimeStrategyRelease,
36
35
  listRuntimeStrategyReleases: () => listRuntimeStrategyReleases,
37
36
  publishRuntimeStrategyRelease: () => publishRuntimeStrategyRelease,
38
37
  recordRuntimeStrategyControlEvent: () => recordRuntimeStrategyControlEvent,
39
- saveRuntimeStrategyDraft: () => saveRuntimeStrategyDraft,
40
38
  verifyRuntimeStrategyRelease: () => verifyRuntimeStrategyRelease
41
39
  });
42
40
  module.exports = __toCommonJS(runtimeStrategyReleases_exports);
@@ -327,7 +325,6 @@ var redisKeys = {
327
325
  backtestConfig: (userName, config) => `users:${userName}:backtests:configs:${config}`,
328
326
  strategies: (userName) => `users:${userName}:strategies`,
329
327
  strategyConfig: (userName, strategyName, configId = "config") => `users:${userName}:strategies:${strategyName}:${configId}`,
330
- runtimeStrategyDraft: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:draft`,
331
328
  runtimeStrategyReleases: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:releases:`,
332
329
  runtimeStrategyRelease: (userName, strategyName, releaseVersion) => `users:${userName}:strategies:${strategyName}:releases:${releaseVersion}`,
333
330
  runtimeStrategyReleaseSequence: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:release-seq`,
@@ -420,6 +417,11 @@ var assertStrategyName = (strategyName) => {
420
417
  throw new Error(`Invalid strategy name: ${strategyName}`);
421
418
  }
422
419
  };
420
+ var assertPackageIdentity = (value, label) => {
421
+ if (typeof value !== "string" || !value.trim()) {
422
+ throw new Error(`${label} is required for a runtime strategy release`);
423
+ }
424
+ };
423
425
  var assertRuntimeStrategyReleaseConfig = (config) => {
424
426
  const record = asRecord(config);
425
427
  if (!record) throw new Error("Strategy release config must be an object");
@@ -456,7 +458,7 @@ var assertRuntimeStrategyReleaseConfig = (config) => {
456
458
  var isRelease = (value) => {
457
459
  const release = asRecord(value);
458
460
  return Boolean(
459
- release?.schema === import_types.RUNTIME_STRATEGY_RELEASE_SCHEMA && typeof release.strategyName === "string" && Number.isSafeInteger(release.releaseVersion) && Number(release.releaseVersion) > 0 && asRecord(release.config) && typeof release.createdAt === "number" && typeof release.createdBy === "string" && typeof release.contentSha256 === "string" && SHA256_RE.test(release.contentSha256)
461
+ release?.schema === import_types.RUNTIME_STRATEGY_RELEASE_SCHEMA && typeof release.strategyName === "string" && Number.isSafeInteger(release.releaseVersion) && Number(release.releaseVersion) > 0 && asRecord(release.config) && typeof release.strategyPackage === "string" && Boolean(release.strategyPackage.trim()) && typeof release.strategyPackageVersion === "string" && Boolean(release.strategyPackageVersion.trim()) && typeof release.runtimePackageVersion === "string" && Boolean(release.runtimePackageVersion.trim()) && typeof release.createdAt === "number" && typeof release.createdBy === "string" && typeof release.contentSha256 === "string" && SHA256_RE.test(release.contentSha256)
460
462
  );
461
463
  };
462
464
  var verifyRuntimeStrategyRelease = (value) => {
@@ -470,35 +472,6 @@ var verifyRuntimeStrategyRelease = (value) => {
470
472
  assertRuntimeStrategyReleaseConfig(value.config);
471
473
  return value;
472
474
  };
473
- var getRuntimeStrategyDraft = async (userName, strategyName) => {
474
- const value = await getData(
475
- redisKeys.runtimeStrategyDraft(userName, strategyName),
476
- null
477
- );
478
- const draft = asRecord(value);
479
- return draft?.schema === import_types.RUNTIME_STRATEGY_DRAFT_SCHEMA && draft.strategyName === strategyName && asRecord(draft.config) ? value : null;
480
- };
481
- var saveRuntimeStrategyDraft = async ({
482
- userName,
483
- strategyName,
484
- config,
485
- baseReleaseVersion = null,
486
- updatedBy
487
- }) => {
488
- assertStrategyName(strategyName);
489
- const draft = {
490
- schema: import_types.RUNTIME_STRATEGY_DRAFT_SCHEMA,
491
- strategyName,
492
- baseReleaseVersion,
493
- config,
494
- updatedAt: Date.now(),
495
- updatedBy
496
- };
497
- await setData(redisKeys.runtimeStrategyDraft(userName, strategyName), draft, {
498
- expire: 0
499
- });
500
- return draft;
501
- };
502
475
  var getRuntimeStrategyRelease = async (userName, strategyName, releaseVersion) => {
503
476
  const value = await getData(
504
477
  redisKeys.runtimeStrategyRelease(userName, strategyName, releaseVersion),
@@ -522,13 +495,16 @@ var publishRuntimeStrategyRelease = async ({
522
495
  userName,
523
496
  strategyName,
524
497
  config,
525
- strategyPackage = null,
526
- strategyPackageVersion = null,
527
- runtimePackageVersion = null,
498
+ strategyPackage,
499
+ strategyPackageVersion,
500
+ runtimePackageVersion,
528
501
  createdBy
529
502
  }) => {
530
503
  assertStrategyName(strategyName);
531
504
  assertRuntimeStrategyReleaseConfig(config);
505
+ assertPackageIdentity(strategyPackage, "strategyPackage");
506
+ assertPackageIdentity(strategyPackageVersion, "strategyPackageVersion");
507
+ assertPackageIdentity(runtimePackageVersion, "runtimePackageVersion");
532
508
  const releaseVersion = await incrementKey(
533
509
  redisKeys.runtimeStrategyReleaseSequence(userName, strategyName)
534
510
  );
@@ -588,11 +564,9 @@ var recordRuntimeStrategyControlEvent = async ({
588
564
  // Annotate the CommonJS export names for ESM import in node:
589
565
  0 && (module.exports = {
590
566
  assertRuntimeStrategyReleaseConfig,
591
- getRuntimeStrategyDraft,
592
567
  getRuntimeStrategyRelease,
593
568
  listRuntimeStrategyReleases,
594
569
  publishRuntimeStrategyRelease,
595
570
  recordRuntimeStrategyControlEvent,
596
- saveRuntimeStrategyDraft,
597
571
  verifyRuntimeStrategyRelease
598
572
  });
@@ -5,12 +5,11 @@ import {
5
5
  redisKeys,
6
6
  setData,
7
7
  setDataIfAbsent
8
- } from "./chunk-RZTVC4ZL.mjs";
8
+ } from "./chunk-JLVCBKE3.mjs";
9
9
 
10
10
  // src/runtimeStrategyReleases.ts
11
11
  import { createHash, randomUUID } from "crypto";
12
12
  import {
13
- RUNTIME_STRATEGY_DRAFT_SCHEMA,
14
13
  RUNTIME_STRATEGY_RELEASE_SCHEMA
15
14
  } from "@tradejs/types";
16
15
  var SHA256_RE = /^[a-f0-9]{64}$/;
@@ -43,6 +42,11 @@ var assertStrategyName = (strategyName) => {
43
42
  throw new Error(`Invalid strategy name: ${strategyName}`);
44
43
  }
45
44
  };
45
+ var assertPackageIdentity = (value, label) => {
46
+ if (typeof value !== "string" || !value.trim()) {
47
+ throw new Error(`${label} is required for a runtime strategy release`);
48
+ }
49
+ };
46
50
  var assertRuntimeStrategyReleaseConfig = (config) => {
47
51
  const record = asRecord(config);
48
52
  if (!record) throw new Error("Strategy release config must be an object");
@@ -79,7 +83,7 @@ var assertRuntimeStrategyReleaseConfig = (config) => {
79
83
  var isRelease = (value) => {
80
84
  const release = asRecord(value);
81
85
  return Boolean(
82
- release?.schema === RUNTIME_STRATEGY_RELEASE_SCHEMA && typeof release.strategyName === "string" && Number.isSafeInteger(release.releaseVersion) && Number(release.releaseVersion) > 0 && asRecord(release.config) && typeof release.createdAt === "number" && typeof release.createdBy === "string" && typeof release.contentSha256 === "string" && SHA256_RE.test(release.contentSha256)
86
+ release?.schema === RUNTIME_STRATEGY_RELEASE_SCHEMA && typeof release.strategyName === "string" && Number.isSafeInteger(release.releaseVersion) && Number(release.releaseVersion) > 0 && asRecord(release.config) && typeof release.strategyPackage === "string" && Boolean(release.strategyPackage.trim()) && typeof release.strategyPackageVersion === "string" && Boolean(release.strategyPackageVersion.trim()) && typeof release.runtimePackageVersion === "string" && Boolean(release.runtimePackageVersion.trim()) && typeof release.createdAt === "number" && typeof release.createdBy === "string" && typeof release.contentSha256 === "string" && SHA256_RE.test(release.contentSha256)
83
87
  );
84
88
  };
85
89
  var verifyRuntimeStrategyRelease = (value) => {
@@ -93,35 +97,6 @@ var verifyRuntimeStrategyRelease = (value) => {
93
97
  assertRuntimeStrategyReleaseConfig(value.config);
94
98
  return value;
95
99
  };
96
- var getRuntimeStrategyDraft = async (userName, strategyName) => {
97
- const value = await getData(
98
- redisKeys.runtimeStrategyDraft(userName, strategyName),
99
- null
100
- );
101
- const draft = asRecord(value);
102
- return draft?.schema === RUNTIME_STRATEGY_DRAFT_SCHEMA && draft.strategyName === strategyName && asRecord(draft.config) ? value : null;
103
- };
104
- var saveRuntimeStrategyDraft = async ({
105
- userName,
106
- strategyName,
107
- config,
108
- baseReleaseVersion = null,
109
- updatedBy
110
- }) => {
111
- assertStrategyName(strategyName);
112
- const draft = {
113
- schema: RUNTIME_STRATEGY_DRAFT_SCHEMA,
114
- strategyName,
115
- baseReleaseVersion,
116
- config,
117
- updatedAt: Date.now(),
118
- updatedBy
119
- };
120
- await setData(redisKeys.runtimeStrategyDraft(userName, strategyName), draft, {
121
- expire: 0
122
- });
123
- return draft;
124
- };
125
100
  var getRuntimeStrategyRelease = async (userName, strategyName, releaseVersion) => {
126
101
  const value = await getData(
127
102
  redisKeys.runtimeStrategyRelease(userName, strategyName, releaseVersion),
@@ -145,13 +120,16 @@ var publishRuntimeStrategyRelease = async ({
145
120
  userName,
146
121
  strategyName,
147
122
  config,
148
- strategyPackage = null,
149
- strategyPackageVersion = null,
150
- runtimePackageVersion = null,
123
+ strategyPackage,
124
+ strategyPackageVersion,
125
+ runtimePackageVersion,
151
126
  createdBy
152
127
  }) => {
153
128
  assertStrategyName(strategyName);
154
129
  assertRuntimeStrategyReleaseConfig(config);
130
+ assertPackageIdentity(strategyPackage, "strategyPackage");
131
+ assertPackageIdentity(strategyPackageVersion, "strategyPackageVersion");
132
+ assertPackageIdentity(runtimePackageVersion, "runtimePackageVersion");
155
133
  const releaseVersion = await incrementKey(
156
134
  redisKeys.runtimeStrategyReleaseSequence(userName, strategyName)
157
135
  );
@@ -210,11 +188,9 @@ var recordRuntimeStrategyControlEvent = async ({
210
188
  };
211
189
  export {
212
190
  assertRuntimeStrategyReleaseConfig,
213
- getRuntimeStrategyDraft,
214
191
  getRuntimeStrategyRelease,
215
192
  listRuntimeStrategyReleases,
216
193
  publishRuntimeStrategyRelease,
217
194
  recordRuntimeStrategyControlEvent,
218
- saveRuntimeStrategyDraft,
219
195
  verifyRuntimeStrategyRelease
220
196
  };
@@ -314,7 +314,6 @@ var redisKeys = {
314
314
  backtestConfig: (userName, config) => `users:${userName}:backtests:configs:${config}`,
315
315
  strategies: (userName) => `users:${userName}:strategies`,
316
316
  strategyConfig: (userName, strategyName, configId = "config") => `users:${userName}:strategies:${strategyName}:${configId}`,
317
- runtimeStrategyDraft: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:draft`,
318
317
  runtimeStrategyReleases: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:releases:`,
319
318
  runtimeStrategyRelease: (userName, strategyName, releaseVersion) => `users:${userName}:strategies:${strategyName}:releases:${releaseVersion}`,
320
319
  runtimeStrategyReleaseSequence: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:release-seq`,
@@ -387,12 +386,11 @@ var normalizeId = (value, label) => {
387
386
  var isTradingAccount = (value) => Boolean(
388
387
  value && typeof value === "object" && typeof value.id === "string" && typeof value.provider === "string"
389
388
  );
390
- var withProviderUniverses = (account) => account.provider.toLowerCase() === "bybit" ? { ...account, universes: ["crypto", "tradfi"] } : account;
391
389
  var listTradingAccounts = async (userName) => {
392
390
  if (typeof redisKeys.tradingAccounts !== "function") return [];
393
391
  const keys = await getKeys(redisKeys.tradingAccounts(userName));
394
392
  const values = await Promise.all(keys.map((key) => getData(key, null)));
395
- return values.filter(isTradingAccount).map(withProviderUniverses).sort((left, right) => left.label.localeCompare(right.label));
393
+ return values.filter(isTradingAccount).sort((left, right) => left.label.localeCompare(right.label));
396
394
  };
397
395
  var getTradingAccount = async (userName, accountId) => {
398
396
  const normalizedId = normalizeId(accountId, "Account id");
@@ -400,16 +398,16 @@ var getTradingAccount = async (userName, accountId) => {
400
398
  redisKeys.tradingAccount(userName, normalizedId),
401
399
  null
402
400
  );
403
- return isTradingAccount(value) ? withProviderUniverses(value) : null;
401
+ return isTradingAccount(value) ? value : null;
404
402
  };
405
403
  var saveTradingAccount = async (userName, account) => {
406
- const normalized = withProviderUniverses({
404
+ const normalized = {
407
405
  ...account,
408
406
  id: normalizeId(account.id, "Account id"),
409
407
  label: account.label.trim(),
410
408
  provider: account.provider.trim().toLowerCase(),
411
409
  universes: [...new Set(account.universes)]
412
- });
410
+ };
413
411
  if (normalized.isDefault) {
414
412
  const previousDefaults = (await listTradingAccounts(userName)).filter(
415
413
  (candidate) => candidate.provider === normalized.provider && candidate.id !== normalized.id && candidate.isDefault && candidate.universes.some(
@@ -464,27 +462,7 @@ var resolveTradingAccount = async ({
464
462
  (account) => account.enabled && account.provider === provider.toLowerCase() && (!universe || account.universes.includes(universe))
465
463
  );
466
464
  const selected = accounts.find((account) => account.isDefault) ?? (accounts.length === 1 ? accounts[0] : null);
467
- if (selected) return selected;
468
- if (provider.toLowerCase() !== "bybit" || accounts.length > 1) {
469
- return null;
470
- }
471
- const legacy = await getData(redisKeys.user(userName));
472
- const legacyApiKey = String(legacy?.BYBIT_API_KEY ?? "").trim();
473
- const legacyApiSecret = String(legacy?.BYBIT_API_SECRET ?? "").trim();
474
- if (!legacyApiKey || !legacyApiSecret) {
475
- return null;
476
- }
477
- return {
478
- id: "bybit-default",
479
- label: "Bybit Default",
480
- provider: "bybit",
481
- enabled: true,
482
- isDefault: true,
483
- universes: ["crypto", "tradfi"],
484
- environment: "mainnet",
485
- apiKey: legacyApiKey,
486
- apiSecret: legacyApiSecret
487
- };
465
+ return selected;
488
466
  };
489
467
  // Annotate the CommonJS export names for ESM import in node:
490
468
  0 && (module.exports = {
@@ -4,7 +4,7 @@ import {
4
4
  getKeys,
5
5
  redisKeys,
6
6
  setData
7
- } from "./chunk-RZTVC4ZL.mjs";
7
+ } from "./chunk-JLVCBKE3.mjs";
8
8
 
9
9
  // src/tradingAccounts.ts
10
10
  var normalizeId = (value, label) => {
@@ -17,12 +17,11 @@ var normalizeId = (value, label) => {
17
17
  var isTradingAccount = (value) => Boolean(
18
18
  value && typeof value === "object" && typeof value.id === "string" && typeof value.provider === "string"
19
19
  );
20
- var withProviderUniverses = (account) => account.provider.toLowerCase() === "bybit" ? { ...account, universes: ["crypto", "tradfi"] } : account;
21
20
  var listTradingAccounts = async (userName) => {
22
21
  if (typeof redisKeys.tradingAccounts !== "function") return [];
23
22
  const keys = await getKeys(redisKeys.tradingAccounts(userName));
24
23
  const values = await Promise.all(keys.map((key) => getData(key, null)));
25
- return values.filter(isTradingAccount).map(withProviderUniverses).sort((left, right) => left.label.localeCompare(right.label));
24
+ return values.filter(isTradingAccount).sort((left, right) => left.label.localeCompare(right.label));
26
25
  };
27
26
  var getTradingAccount = async (userName, accountId) => {
28
27
  const normalizedId = normalizeId(accountId, "Account id");
@@ -30,16 +29,16 @@ var getTradingAccount = async (userName, accountId) => {
30
29
  redisKeys.tradingAccount(userName, normalizedId),
31
30
  null
32
31
  );
33
- return isTradingAccount(value) ? withProviderUniverses(value) : null;
32
+ return isTradingAccount(value) ? value : null;
34
33
  };
35
34
  var saveTradingAccount = async (userName, account) => {
36
- const normalized = withProviderUniverses({
35
+ const normalized = {
37
36
  ...account,
38
37
  id: normalizeId(account.id, "Account id"),
39
38
  label: account.label.trim(),
40
39
  provider: account.provider.trim().toLowerCase(),
41
40
  universes: [...new Set(account.universes)]
42
- });
41
+ };
43
42
  if (normalized.isDefault) {
44
43
  const previousDefaults = (await listTradingAccounts(userName)).filter(
45
44
  (candidate) => candidate.provider === normalized.provider && candidate.id !== normalized.id && candidate.isDefault && candidate.universes.some(
@@ -94,27 +93,7 @@ var resolveTradingAccount = async ({
94
93
  (account) => account.enabled && account.provider === provider.toLowerCase() && (!universe || account.universes.includes(universe))
95
94
  );
96
95
  const selected = accounts.find((account) => account.isDefault) ?? (accounts.length === 1 ? accounts[0] : null);
97
- if (selected) return selected;
98
- if (provider.toLowerCase() !== "bybit" || accounts.length > 1) {
99
- return null;
100
- }
101
- const legacy = await getData(redisKeys.user(userName));
102
- const legacyApiKey = String(legacy?.BYBIT_API_KEY ?? "").trim();
103
- const legacyApiSecret = String(legacy?.BYBIT_API_SECRET ?? "").trim();
104
- if (!legacyApiKey || !legacyApiSecret) {
105
- return null;
106
- }
107
- return {
108
- id: "bybit-default",
109
- label: "Bybit Default",
110
- provider: "bybit",
111
- enabled: true,
112
- isDefault: true,
113
- universes: ["crypto", "tradfi"],
114
- environment: "mainnet",
115
- apiKey: legacyApiKey,
116
- apiSecret: legacyApiSecret
117
- };
96
+ return selected;
118
97
  };
119
98
  export {
120
99
  deleteTradingAccount,
@@ -1,8 +1,6 @@
1
1
  interface UserRecord extends Record<string, unknown> {
2
2
  userName?: string;
3
3
  passwordHash?: string;
4
- BYBIT_API_KEY?: string;
5
- BYBIT_API_SECRET?: string;
6
4
  COINALYZE_API_KEY?: string;
7
5
  COINMARKETCAP_API_KEY?: string;
8
6
  AI_API_KEY?: string;
@@ -15,8 +13,6 @@ interface UserRecord extends Record<string, unknown> {
15
13
  }
16
14
  interface UserSettings {
17
15
  userName: string;
18
- BYBIT_API_KEY: string;
19
- BYBIT_API_SECRET: string;
20
16
  COINALYZE_API_KEY: string;
21
17
  COINMARKETCAP_API_KEY: string;
22
18
  AI_API_KEY: string;
@@ -1,8 +1,6 @@
1
1
  interface UserRecord extends Record<string, unknown> {
2
2
  userName?: string;
3
3
  passwordHash?: string;
4
- BYBIT_API_KEY?: string;
5
- BYBIT_API_SECRET?: string;
6
4
  COINALYZE_API_KEY?: string;
7
5
  COINMARKETCAP_API_KEY?: string;
8
6
  AI_API_KEY?: string;
@@ -15,8 +13,6 @@ interface UserRecord extends Record<string, unknown> {
15
13
  }
16
14
  interface UserSettings {
17
15
  userName: string;
18
- BYBIT_API_KEY: string;
19
- BYBIT_API_SECRET: string;
20
16
  COINALYZE_API_KEY: string;
21
17
  COINMARKETCAP_API_KEY: string;
22
18
  AI_API_KEY: string;
@@ -247,7 +247,6 @@ var redisKeys = {
247
247
  backtestConfig: (userName, config) => `users:${userName}:backtests:configs:${config}`,
248
248
  strategies: (userName) => `users:${userName}:strategies`,
249
249
  strategyConfig: (userName, strategyName, configId = "config") => `users:${userName}:strategies:${strategyName}:${configId}`,
250
- runtimeStrategyDraft: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:draft`,
251
250
  runtimeStrategyReleases: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:releases:`,
252
251
  runtimeStrategyRelease: (userName, strategyName, releaseVersion) => `users:${userName}:strategies:${strategyName}:releases:${releaseVersion}`,
253
252
  runtimeStrategyReleaseSequence: (userName, strategyName) => `users:${userName}:strategies:${strategyName}:release-seq`,
@@ -323,8 +322,6 @@ var getUserSettings = async (userName) => {
323
322
  const record = await getUserRecord(userName);
324
323
  return {
325
324
  userName,
326
- BYBIT_API_KEY: readUserString(record, "BYBIT_API_KEY"),
327
- BYBIT_API_SECRET: readUserString(record, "BYBIT_API_SECRET"),
328
325
  COINALYZE_API_KEY: readUserString(record, "COINALYZE_API_KEY"),
329
326
  COINMARKETCAP_API_KEY: readUserString(record, "COINMARKETCAP_API_KEY"),
330
327
  AI_API_KEY: readUserString(record, "AI_API_KEY"),
@@ -2,7 +2,7 @@ import {
2
2
  getData,
3
3
  redisKeys,
4
4
  setData
5
- } from "./chunk-RZTVC4ZL.mjs";
5
+ } from "./chunk-JLVCBKE3.mjs";
6
6
 
7
7
  // src/userSettings.ts
8
8
  var readString = (value) => typeof value === "string" ? value.trim() : "";
@@ -18,8 +18,6 @@ var getUserSettings = async (userName) => {
18
18
  const record = await getUserRecord(userName);
19
19
  return {
20
20
  userName,
21
- BYBIT_API_KEY: readUserString(record, "BYBIT_API_KEY"),
22
- BYBIT_API_SECRET: readUserString(record, "BYBIT_API_SECRET"),
23
21
  COINALYZE_API_KEY: readUserString(record, "COINALYZE_API_KEY"),
24
22
  COINMARKETCAP_API_KEY: readUserString(record, "COINMARKETCAP_API_KEY"),
25
23
  AI_API_KEY: readUserString(record, "AI_API_KEY"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tradejs/infra",
3
- "version": "3.1.2",
3
+ "version": "3.1.4",
4
4
  "description": "MIT-licensed server infrastructure adapters for TradeJS: Redis, Timescale, ML, logging, and IO.",
5
5
  "keywords": [
6
6
  "tradejs",
@@ -126,7 +126,7 @@
126
126
  "dependencies": {
127
127
  "@grpc/grpc-js": "^1.14.4",
128
128
  "@grpc/proto-loader": "^0.8.1",
129
- "@tradejs/types": "^3.1.2",
129
+ "@tradejs/types": "^3.1.4",
130
130
  "chalk": "4.1.2",
131
131
  "date-fns": "^3.6.0",
132
132
  "ioredis": "5.11.1",