@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.
|
|
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.
|
|
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",
|