@tradejs/infra 2.0.20 → 2.0.21

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.
@@ -3,10 +3,15 @@ import { StrategyEvidenceMarkerPayload, StrategyEvidenceMarkerEnvelope } from '@
3
3
  declare const canonicalStrategyEvidenceJson: (value: unknown) => string;
4
4
  declare const strategyEvidenceSha256: (value: unknown) => string;
5
5
  declare const strategyEvidenceFingerprint: (value: unknown) => string;
6
+ /**
7
+ * Fingerprints strategy decision semantics without local/runtime bindings,
8
+ * credentials, config identity, or position-risk scale.
9
+ */
10
+ declare const strategyLogicConfigFingerprint: (value: unknown) => string;
6
11
  declare const strategyEvidenceFileSha256: (filePath: string) => Promise<string>;
7
12
  declare const safeStrategyEvidenceSegment: (value: string, fallback?: string) => string;
8
13
  declare const compactStrategyEvidenceTimestamp: (timestamp: number) => string;
9
14
  declare const createStrategyEvidenceMarkerEnvelope: (payload: StrategyEvidenceMarkerPayload) => StrategyEvidenceMarkerEnvelope;
10
15
  declare const verifyStrategyEvidenceMarkerEnvelope: (value: unknown) => StrategyEvidenceMarkerEnvelope;
11
16
 
12
- export { canonicalStrategyEvidenceJson, compactStrategyEvidenceTimestamp, createStrategyEvidenceMarkerEnvelope, safeStrategyEvidenceSegment, strategyEvidenceFileSha256, strategyEvidenceFingerprint, strategyEvidenceSha256, verifyStrategyEvidenceMarkerEnvelope };
17
+ export { canonicalStrategyEvidenceJson, compactStrategyEvidenceTimestamp, createStrategyEvidenceMarkerEnvelope, safeStrategyEvidenceSegment, strategyEvidenceFileSha256, strategyEvidenceFingerprint, strategyEvidenceSha256, strategyLogicConfigFingerprint, verifyStrategyEvidenceMarkerEnvelope };
@@ -3,10 +3,15 @@ import { StrategyEvidenceMarkerPayload, StrategyEvidenceMarkerEnvelope } from '@
3
3
  declare const canonicalStrategyEvidenceJson: (value: unknown) => string;
4
4
  declare const strategyEvidenceSha256: (value: unknown) => string;
5
5
  declare const strategyEvidenceFingerprint: (value: unknown) => string;
6
+ /**
7
+ * Fingerprints strategy decision semantics without local/runtime bindings,
8
+ * credentials, config identity, or position-risk scale.
9
+ */
10
+ declare const strategyLogicConfigFingerprint: (value: unknown) => string;
6
11
  declare const strategyEvidenceFileSha256: (filePath: string) => Promise<string>;
7
12
  declare const safeStrategyEvidenceSegment: (value: string, fallback?: string) => string;
8
13
  declare const compactStrategyEvidenceTimestamp: (timestamp: number) => string;
9
14
  declare const createStrategyEvidenceMarkerEnvelope: (payload: StrategyEvidenceMarkerPayload) => StrategyEvidenceMarkerEnvelope;
10
15
  declare const verifyStrategyEvidenceMarkerEnvelope: (value: unknown) => StrategyEvidenceMarkerEnvelope;
11
16
 
12
- export { canonicalStrategyEvidenceJson, compactStrategyEvidenceTimestamp, createStrategyEvidenceMarkerEnvelope, safeStrategyEvidenceSegment, strategyEvidenceFileSha256, strategyEvidenceFingerprint, strategyEvidenceSha256, verifyStrategyEvidenceMarkerEnvelope };
17
+ export { canonicalStrategyEvidenceJson, compactStrategyEvidenceTimestamp, createStrategyEvidenceMarkerEnvelope, safeStrategyEvidenceSegment, strategyEvidenceFileSha256, strategyEvidenceFingerprint, strategyEvidenceSha256, strategyLogicConfigFingerprint, verifyStrategyEvidenceMarkerEnvelope };
@@ -27,6 +27,7 @@ __export(strategyReleaseEvidence_exports, {
27
27
  strategyEvidenceFileSha256: () => strategyEvidenceFileSha256,
28
28
  strategyEvidenceFingerprint: () => strategyEvidenceFingerprint,
29
29
  strategyEvidenceSha256: () => strategyEvidenceSha256,
30
+ strategyLogicConfigFingerprint: () => strategyLogicConfigFingerprint,
30
31
  verifyStrategyEvidenceMarkerEnvelope: () => verifyStrategyEvidenceMarkerEnvelope
31
32
  });
32
33
  module.exports = __toCommonJS(strategyReleaseEvidence_exports);
@@ -43,6 +44,13 @@ var MARKER_TYPES = /* @__PURE__ */ new Set([
43
44
  "P",
44
45
  "R"
45
46
  ]);
47
+ var STRATEGY_LOGIC_BINDING_KEYS = /* @__PURE__ */ new Set([
48
+ "ACCOUNT_ID",
49
+ "DEPLOYMENT_ID",
50
+ "MAX_LOSS_VALUE",
51
+ "configId"
52
+ ]);
53
+ var SECRET_CONFIG_KEY_RE = /(?:^|_)(?:API_KEY|API_SECRET|TOKEN|PASSWORD|PRIVATE_KEY)$/i;
46
54
  var asRecord = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
47
55
  var isString = (value) => typeof value === "string" && value.trim().length > 0;
48
56
  var isNumber = (value) => typeof value === "number" && Number.isFinite(value);
@@ -59,6 +67,17 @@ var canonicalStrategyEvidenceJson = (value) => {
59
67
  };
60
68
  var strategyEvidenceSha256 = (value) => (0, import_node_crypto.createHash)("sha256").update(canonicalStrategyEvidenceJson(value)).digest("hex");
61
69
  var strategyEvidenceFingerprint = (value) => strategyEvidenceSha256(value).slice(0, 16);
70
+ var normalizeStrategyLogicConfig = (value) => {
71
+ if (Array.isArray(value)) return value.map(normalizeStrategyLogicConfig);
72
+ const record = asRecord(value);
73
+ if (!record) return value;
74
+ return Object.fromEntries(
75
+ Object.entries(record).filter(
76
+ ([key]) => !STRATEGY_LOGIC_BINDING_KEYS.has(key) && !SECRET_CONFIG_KEY_RE.test(key)
77
+ ).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => [key, normalizeStrategyLogicConfig(entry)])
78
+ );
79
+ };
80
+ var strategyLogicConfigFingerprint = (value) => strategyEvidenceFingerprint(normalizeStrategyLogicConfig(value));
62
81
  var strategyEvidenceFileSha256 = async (filePath) => {
63
82
  const hash = (0, import_node_crypto.createHash)("sha256");
64
83
  for await (const chunk of (0, import_node_fs.createReadStream)(filePath)) hash.update(chunk);
@@ -116,5 +135,6 @@ var verifyStrategyEvidenceMarkerEnvelope = (value) => {
116
135
  strategyEvidenceFileSha256,
117
136
  strategyEvidenceFingerprint,
118
137
  strategyEvidenceSha256,
138
+ strategyLogicConfigFingerprint,
119
139
  verifyStrategyEvidenceMarkerEnvelope
120
140
  });
@@ -14,6 +14,13 @@ var MARKER_TYPES = /* @__PURE__ */ new Set([
14
14
  "P",
15
15
  "R"
16
16
  ]);
17
+ var STRATEGY_LOGIC_BINDING_KEYS = /* @__PURE__ */ new Set([
18
+ "ACCOUNT_ID",
19
+ "DEPLOYMENT_ID",
20
+ "MAX_LOSS_VALUE",
21
+ "configId"
22
+ ]);
23
+ var SECRET_CONFIG_KEY_RE = /(?:^|_)(?:API_KEY|API_SECRET|TOKEN|PASSWORD|PRIVATE_KEY)$/i;
17
24
  var asRecord = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
18
25
  var isString = (value) => typeof value === "string" && value.trim().length > 0;
19
26
  var isNumber = (value) => typeof value === "number" && Number.isFinite(value);
@@ -30,6 +37,17 @@ var canonicalStrategyEvidenceJson = (value) => {
30
37
  };
31
38
  var strategyEvidenceSha256 = (value) => createHash("sha256").update(canonicalStrategyEvidenceJson(value)).digest("hex");
32
39
  var strategyEvidenceFingerprint = (value) => strategyEvidenceSha256(value).slice(0, 16);
40
+ var normalizeStrategyLogicConfig = (value) => {
41
+ if (Array.isArray(value)) return value.map(normalizeStrategyLogicConfig);
42
+ const record = asRecord(value);
43
+ if (!record) return value;
44
+ return Object.fromEntries(
45
+ Object.entries(record).filter(
46
+ ([key]) => !STRATEGY_LOGIC_BINDING_KEYS.has(key) && !SECRET_CONFIG_KEY_RE.test(key)
47
+ ).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => [key, normalizeStrategyLogicConfig(entry)])
48
+ );
49
+ };
50
+ var strategyLogicConfigFingerprint = (value) => strategyEvidenceFingerprint(normalizeStrategyLogicConfig(value));
33
51
  var strategyEvidenceFileSha256 = async (filePath) => {
34
52
  const hash = createHash("sha256");
35
53
  for await (const chunk of createReadStream(filePath)) hash.update(chunk);
@@ -86,5 +104,6 @@ export {
86
104
  strategyEvidenceFileSha256,
87
105
  strategyEvidenceFingerprint,
88
106
  strategyEvidenceSha256,
107
+ strategyLogicConfigFingerprint,
89
108
  verifyStrategyEvidenceMarkerEnvelope
90
109
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tradejs/infra",
3
- "version": "2.0.20",
3
+ "version": "2.0.21",
4
4
  "description": "MIT-licensed server infrastructure adapters for TradeJS: Redis, Timescale, ML, logging, and IO.",
5
5
  "keywords": [
6
6
  "tradejs",
@@ -143,7 +143,7 @@
143
143
  "dependencies": {
144
144
  "@grpc/grpc-js": "^1.14.4",
145
145
  "@grpc/proto-loader": "^0.8.1",
146
- "@tradejs/types": "^2.0.20",
146
+ "@tradejs/types": "^2.0.21",
147
147
  "chalk": "4.1.2",
148
148
  "date-fns": "^3.6.0",
149
149
  "ioredis": "5.11.1",