@orygn/opa-mcp 0.4.0 → 0.5.0
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/CHANGELOG.md +339 -3
- package/README.md +71 -72
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +57 -15
- package/dist/config.js.map +1 -1
- package/dist/lib/bundle-signatures.d.ts +23 -0
- package/dist/lib/bundle-signatures.d.ts.map +1 -0
- package/dist/lib/bundle-signatures.js +152 -0
- package/dist/lib/bundle-signatures.js.map +1 -0
- package/dist/lib/child-env.d.ts +9 -2
- package/dist/lib/child-env.d.ts.map +1 -1
- package/dist/lib/child-env.js +38 -6
- package/dist/lib/child-env.js.map +1 -1
- package/dist/lib/conftest-cli.d.ts +25 -10
- package/dist/lib/conftest-cli.d.ts.map +1 -1
- package/dist/lib/conftest-cli.js +152 -33
- package/dist/lib/conftest-cli.js.map +1 -1
- package/dist/lib/install-id.d.ts.map +1 -1
- package/dist/lib/install-id.js +18 -3
- package/dist/lib/install-id.js.map +1 -1
- package/dist/lib/json-stream.d.ts +26 -0
- package/dist/lib/json-stream.d.ts.map +1 -0
- package/dist/lib/json-stream.js +69 -0
- package/dist/lib/json-stream.js.map +1 -0
- package/dist/lib/opa-cli.d.ts +64 -16
- package/dist/lib/opa-cli.d.ts.map +1 -1
- package/dist/lib/opa-cli.js +98 -28
- package/dist/lib/opa-cli.js.map +1 -1
- package/dist/lib/opa-paths.d.ts +24 -0
- package/dist/lib/opa-paths.d.ts.map +1 -0
- package/dist/lib/opa-paths.js +97 -0
- package/dist/lib/opa-paths.js.map +1 -0
- package/dist/lib/regal-cli.d.ts +16 -1
- package/dist/lib/regal-cli.d.ts.map +1 -1
- package/dist/lib/regal-cli.js +40 -6
- package/dist/lib/regal-cli.js.map +1 -1
- package/dist/lib/rego-ast-walker.d.ts.map +1 -1
- package/dist/lib/rego-ast-walker.js +141 -17
- package/dist/lib/rego-ast-walker.js.map +1 -1
- package/dist/lib/rego-counterexample.d.ts +1 -1
- package/dist/lib/rego-counterexample.d.ts.map +1 -1
- package/dist/lib/rego-counterexample.js +23 -5
- package/dist/lib/rego-counterexample.js.map +1 -1
- package/dist/lib/rego-ir.d.ts +32 -2
- package/dist/lib/rego-ir.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.d.ts +53 -5
- package/dist/lib/rego-smt-encoder.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.js +192 -26
- package/dist/lib/rego-smt-encoder.js.map +1 -1
- package/dist/lib/rego-type-inferencer.d.ts +1 -1
- package/dist/lib/rego-type-inferencer.d.ts.map +1 -1
- package/dist/lib/rego-type-inferencer.js +3 -3
- package/dist/lib/rego-type-inferencer.js.map +1 -1
- package/dist/lib/rego-verify-engine.d.ts.map +1 -1
- package/dist/lib/rego-verify-engine.js +109 -77
- package/dist/lib/rego-verify-engine.js.map +1 -1
- package/dist/lib/rego-z3.d.ts +10 -0
- package/dist/lib/rego-z3.d.ts.map +1 -1
- package/dist/lib/rego-z3.js +38 -0
- package/dist/lib/rego-z3.js.map +1 -1
- package/dist/lib/security.d.ts +8 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +130 -54
- package/dist/lib/security.js.map +1 -1
- package/dist/resources/patterns.d.ts +1 -1
- package/dist/resources/patterns.d.ts.map +1 -1
- package/dist/resources/patterns.js +40 -12
- package/dist/resources/patterns.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/bundles/build.d.ts.map +1 -1
- package/dist/tools/bundles/build.js +12 -4
- package/dist/tools/bundles/build.js.map +1 -1
- package/dist/tools/bundles/sign.d.ts +9 -2
- package/dist/tools/bundles/sign.d.ts.map +1 -1
- package/dist/tools/bundles/sign.js +145 -19
- package/dist/tools/bundles/sign.js.map +1 -1
- package/dist/tools/bundles/verify.d.ts +1 -1
- package/dist/tools/bundles/verify.d.ts.map +1 -1
- package/dist/tools/bundles/verify.js +58 -19
- package/dist/tools/bundles/verify.js.map +1 -1
- package/dist/tools/conftest/pull.d.ts.map +1 -1
- package/dist/tools/conftest/pull.js +24 -10
- package/dist/tools/conftest/pull.js.map +1 -1
- package/dist/tools/conftest/push.d.ts.map +1 -1
- package/dist/tools/conftest/push.js +17 -7
- package/dist/tools/conftest/push.js.map +1 -1
- package/dist/tools/conftest/test.d.ts +10 -6
- package/dist/tools/conftest/test.d.ts.map +1 -1
- package/dist/tools/conftest/test.js +47 -24
- package/dist/tools/conftest/test.js.map +1 -1
- package/dist/tools/conftest/verify.d.ts +10 -6
- package/dist/tools/conftest/verify.d.ts.map +1 -1
- package/dist/tools/conftest/verify.js +30 -18
- package/dist/tools/conftest/verify.js.map +1 -1
- package/dist/tools/evaluation/bench.d.ts +16 -0
- package/dist/tools/evaluation/bench.d.ts.map +1 -1
- package/dist/tools/evaluation/bench.js +30 -5
- package/dist/tools/evaluation/bench.js.map +1 -1
- package/dist/tools/evaluation/exec.d.ts +16 -0
- package/dist/tools/evaluation/exec.d.ts.map +1 -1
- package/dist/tools/evaluation/exec.js +35 -2
- package/dist/tools/evaluation/exec.js.map +1 -1
- package/dist/tools/evaluation/test-multiroot.d.ts +4 -0
- package/dist/tools/evaluation/test-multiroot.d.ts.map +1 -1
- package/dist/tools/evaluation/test-multiroot.js +12 -2
- package/dist/tools/evaluation/test-multiroot.js.map +1 -1
- package/dist/tools/evaluation/test.d.ts +45 -0
- package/dist/tools/evaluation/test.d.ts.map +1 -1
- package/dist/tools/evaluation/test.js +146 -27
- package/dist/tools/evaluation/test.js.map +1 -1
- package/dist/tools/helpers/coverage-gaps.d.ts +11 -3
- package/dist/tools/helpers/coverage-gaps.d.ts.map +1 -1
- package/dist/tools/helpers/coverage-gaps.js +4 -3
- package/dist/tools/helpers/coverage-gaps.js.map +1 -1
- package/dist/tools/helpers/explain-undefined.d.ts +9 -3
- package/dist/tools/helpers/explain-undefined.d.ts.map +1 -1
- package/dist/tools/helpers/explain-undefined.js +83 -51
- package/dist/tools/helpers/explain-undefined.js.map +1 -1
- package/dist/tools/helpers/verify.d.ts.map +1 -1
- package/dist/tools/helpers/verify.js +5 -1
- package/dist/tools/helpers/verify.js.map +1 -1
- package/dist/tools/server-management/_shared.d.ts +15 -4
- package/dist/tools/server-management/_shared.d.ts.map +1 -1
- package/dist/tools/server-management/_shared.js +73 -12
- package/dist/tools/server-management/_shared.js.map +1 -1
- package/dist/tools/server-management/data.d.ts.map +1 -1
- package/dist/tools/server-management/data.js +88 -23
- package/dist/tools/server-management/data.js.map +1 -1
- package/dist/tools/server-management/decisions.d.ts.map +1 -1
- package/dist/tools/server-management/decisions.js +16 -3
- package/dist/tools/server-management/decisions.js.map +1 -1
- package/dist/tools/server-management/policies.d.ts.map +1 -1
- package/dist/tools/server-management/policies.js +44 -7
- package/dist/tools/server-management/policies.js.map +1 -1
- package/dist/tools/server-management/status.d.ts.map +1 -1
- package/dist/tools/server-management/status.js +80 -13
- package/dist/tools/server-management/status.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conftest-cli.js","sourceRoot":"","sources":["../../src/lib/conftest-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"conftest-cli.js","sourceRoot":"","sources":["../../src/lib/conftest-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-id.d.ts","sourceRoot":"","sources":["../../src/lib/install-id.ts"],"names":[],"mappings":"AA2CA;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"install-id.d.ts","sourceRoot":"","sources":["../../src/lib/install-id.ts"],"names":[],"mappings":"AA2CA;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0C3D"}
|
package/dist/lib/install-id.js
CHANGED
|
@@ -43,21 +43,36 @@ function parseId(content) {
|
|
|
43
43
|
*/
|
|
44
44
|
export async function getInstallId() {
|
|
45
45
|
// Try reading an existing file first.
|
|
46
|
+
let unusableFileExists = false;
|
|
46
47
|
try {
|
|
47
48
|
const content = await readFile(INSTALL_ID_FILE, 'utf8');
|
|
48
49
|
const id = parseId(content);
|
|
49
50
|
if (id)
|
|
50
51
|
return id;
|
|
52
|
+
// The file is there but holds no id: truncated by a crash or a full
|
|
53
|
+
// disk, or a first run interrupted between create and write.
|
|
54
|
+
unusableFileExists = true;
|
|
51
55
|
}
|
|
52
56
|
catch {
|
|
53
57
|
// File not found yet -- fall through to create.
|
|
54
58
|
}
|
|
55
|
-
// Generate a new UUID and write it exclusively (wx = fail if exists,
|
|
56
|
-
// handles two processes starting simultaneously without a lock).
|
|
57
59
|
const id = randomUUID();
|
|
58
60
|
try {
|
|
59
61
|
await mkdir(INSTALL_ID_DIR, { recursive: true });
|
|
60
|
-
|
|
62
|
+
// `wx` (fail if exists) when the file is absent, so two processes
|
|
63
|
+
// starting at once cannot both claim to have created it.
|
|
64
|
+
//
|
|
65
|
+
// `w` when the file exists but is unusable, so it can be repaired. With
|
|
66
|
+
// `wx` unconditionally a zero-byte file was permanent: the read found no
|
|
67
|
+
// id, the exclusive write failed because the file existed, the fallback
|
|
68
|
+
// read found no id again, and every later run repeated that. The install
|
|
69
|
+
// then pinged without an id forever, was never counted as an install, and
|
|
70
|
+
// cost the collector six writes per start instead of one read. Two
|
|
71
|
+
// processes repairing at once may write different ids and one wins, which
|
|
72
|
+
// over-counts a single install once; that is the cheaper failure.
|
|
73
|
+
await writeFile(INSTALL_ID_FILE, FILE_HEADER + id + '\n', {
|
|
74
|
+
flag: unusableFileExists ? 'w' : 'wx',
|
|
75
|
+
});
|
|
61
76
|
return id;
|
|
62
77
|
}
|
|
63
78
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-id.js","sourceRoot":"","sources":["../../src/lib/install-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAE3D,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAElF,MAAM,WAAW,GAAG;IAClB,sBAAsB;IACtB,GAAG;IACH,yDAAyD;IACzD,wEAAwE;IACxE,uEAAuE;IACvE,qEAAqE;IACrE,GAAG;IACH,2DAA2D;IAC3D,GAAG;IACH,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,OAAO,CAAC,OAAe;IAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,sCAAsC;IACtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"install-id.js","sourceRoot":"","sources":["../../src/lib/install-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAE3D,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAElF,MAAM,WAAW,GAAG;IAClB,sBAAsB;IACtB,GAAG;IACH,yDAAyD;IACzD,wEAAwE;IACxE,uEAAuE;IACvE,qEAAqE;IACrE,GAAG;IACH,2DAA2D;IAC3D,GAAG;IACH,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,OAAO,CAAC,OAAe;IAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,sCAAsC;IACtC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAClB,oEAAoE;QACpE,6DAA6D;QAC7D,kBAAkB,GAAG,IAAI,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;IAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,kEAAkE;QAClE,yDAAyD;QACzD,EAAE;QACF,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,0EAA0E;QAC1E,mEAAmE;QACnE,0EAA0E;QAC1E,kEAAkE;QAClE,MAAM,SAAS,CAAC,eAAe,EAAE,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE;YACxD,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;SACtC,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,iDAAiD;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading a stream of concatenated JSON values.
|
|
3
|
+
*
|
|
4
|
+
* `opa test --count N` prints one pretty-printed JSON array per repetition,
|
|
5
|
+
* back to back, so the whole output is neither a single JSON value nor NDJSON:
|
|
6
|
+
*
|
|
7
|
+
* [
|
|
8
|
+
* { "name": "test_a" }
|
|
9
|
+
* ]
|
|
10
|
+
* [
|
|
11
|
+
* { "name": "test_a" }
|
|
12
|
+
* ]
|
|
13
|
+
*
|
|
14
|
+
* `JSON.parse` rejects that, and parsing line by line finds no complete value
|
|
15
|
+
* on any line. Splitting into top-level values is the only way to read it.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Split `text` into its top-level JSON values, in order.
|
|
19
|
+
*
|
|
20
|
+
* Scans for balanced brackets while tracking string state, so a bracket or a
|
|
21
|
+
* brace inside a string literal cannot end a value early. Returns an empty
|
|
22
|
+
* array when nothing parses, so a caller can treat that exactly as it treats
|
|
23
|
+
* unparseable output.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseJsonValues<T = unknown>(text: string): T[];
|
|
26
|
+
//# sourceMappingURL=json-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-stream.d.ts","sourceRoot":"","sources":["../../src/lib/json-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CA2C9D"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading a stream of concatenated JSON values.
|
|
3
|
+
*
|
|
4
|
+
* `opa test --count N` prints one pretty-printed JSON array per repetition,
|
|
5
|
+
* back to back, so the whole output is neither a single JSON value nor NDJSON:
|
|
6
|
+
*
|
|
7
|
+
* [
|
|
8
|
+
* { "name": "test_a" }
|
|
9
|
+
* ]
|
|
10
|
+
* [
|
|
11
|
+
* { "name": "test_a" }
|
|
12
|
+
* ]
|
|
13
|
+
*
|
|
14
|
+
* `JSON.parse` rejects that, and parsing line by line finds no complete value
|
|
15
|
+
* on any line. Splitting into top-level values is the only way to read it.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Split `text` into its top-level JSON values, in order.
|
|
19
|
+
*
|
|
20
|
+
* Scans for balanced brackets while tracking string state, so a bracket or a
|
|
21
|
+
* brace inside a string literal cannot end a value early. Returns an empty
|
|
22
|
+
* array when nothing parses, so a caller can treat that exactly as it treats
|
|
23
|
+
* unparseable output.
|
|
24
|
+
*/
|
|
25
|
+
export function parseJsonValues(text) {
|
|
26
|
+
const values = [];
|
|
27
|
+
let depth = 0;
|
|
28
|
+
let start = -1;
|
|
29
|
+
let inString = false;
|
|
30
|
+
let escaped = false;
|
|
31
|
+
for (let i = 0; i < text.length; i++) {
|
|
32
|
+
const ch = text[i];
|
|
33
|
+
if (inString) {
|
|
34
|
+
if (escaped)
|
|
35
|
+
escaped = false;
|
|
36
|
+
else if (ch === '\\')
|
|
37
|
+
escaped = true;
|
|
38
|
+
else if (ch === '"')
|
|
39
|
+
inString = false;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (ch === '"') {
|
|
43
|
+
inString = true;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (ch === '[' || ch === '{') {
|
|
47
|
+
if (depth === 0)
|
|
48
|
+
start = i;
|
|
49
|
+
depth++;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (ch === ']' || ch === '}') {
|
|
53
|
+
if (depth === 0)
|
|
54
|
+
continue; // stray closer; nothing is open
|
|
55
|
+
depth--;
|
|
56
|
+
if (depth === 0 && start !== -1) {
|
|
57
|
+
try {
|
|
58
|
+
values.push(JSON.parse(text.slice(start, i + 1)));
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// A malformed value is skipped rather than discarding the rest.
|
|
62
|
+
}
|
|
63
|
+
start = -1;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return values;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=json-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-stream.js","sourceRoot":"","sources":["../../src/lib/json-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAc,IAAY;IACvD,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QAEpB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,OAAO;gBAAE,OAAO,GAAG,KAAK,CAAC;iBACxB,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAO,GAAG,IAAI,CAAC;iBAChC,IAAI,EAAE,KAAK,GAAG;gBAAE,QAAQ,GAAG,KAAK,CAAC;YACtC,SAAS;QACX,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,IAAI,KAAK,KAAK,CAAC;gBAAE,KAAK,GAAG,CAAC,CAAC;YAC3B,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,IAAI,KAAK,KAAK,CAAC;gBAAE,SAAS,CAAC,gCAAgC;YAC3D,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAM,CAAC,CAAC;gBACzD,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;gBAClE,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/lib/opa-cli.d.ts
CHANGED
|
@@ -213,12 +213,29 @@ export interface BuildInput {
|
|
|
213
213
|
export interface SignInput {
|
|
214
214
|
/** Path to a bundle directory or archive. */
|
|
215
215
|
bundle: string;
|
|
216
|
-
/**
|
|
216
|
+
/**
|
|
217
|
+
* Path to the PEM private key (RSA or ECDSA). For HMAC algorithms OPA
|
|
218
|
+
* accepts either the raw secret or a path to a file holding it; the tool
|
|
219
|
+
* layer only ever passes a validated path.
|
|
220
|
+
*/
|
|
217
221
|
signingKey: string;
|
|
218
222
|
/** Signing algorithm (e.g. `RS256`). Defaults to `RS256` in OPA. */
|
|
219
223
|
signingAlg?: string;
|
|
220
|
-
/** Path to a claims file
|
|
224
|
+
/** Path to a claims file. `keyid` and `scope` are set this way; `opa sign` has no flags for them. */
|
|
221
225
|
claimsFile?: string;
|
|
226
|
+
/**
|
|
227
|
+
* Directory that receives `.signatures.json` (`--output-file-path`).
|
|
228
|
+
* OPA defaults this to the process working directory, which for a
|
|
229
|
+
* long-running server is never where the caller wants the file.
|
|
230
|
+
*/
|
|
231
|
+
outputDir: string;
|
|
232
|
+
/**
|
|
233
|
+
* Working directory for opa. OPA records each signed file under the bundle
|
|
234
|
+
* path exactly as given, so for a directory the tool passes the parent here
|
|
235
|
+
* and the directory name as `bundle`; the signature then names files as
|
|
236
|
+
* `<name>/<file>` and stays valid wherever the directory sits under that name.
|
|
237
|
+
*/
|
|
238
|
+
cwd?: string;
|
|
222
239
|
}
|
|
223
240
|
/** Input for `opa exec` -- batch evaluation against multiple input files. */
|
|
224
241
|
export interface ExecInput {
|
|
@@ -244,27 +261,32 @@ export interface ExecInput {
|
|
|
244
261
|
/** Opt in to OPA v1.0-compatible behaviors (`--v1-compatible`). */
|
|
245
262
|
v1Compatible?: boolean;
|
|
246
263
|
}
|
|
247
|
-
/** Input for bundle signature verification via `opa
|
|
264
|
+
/** Input for bundle signature verification via `opa build --verification-key`. */
|
|
248
265
|
export interface BundleVerifyInput {
|
|
249
266
|
/** Path to the signed bundle directory or `.tar.gz` archive. */
|
|
250
267
|
bundle: string;
|
|
251
268
|
/**
|
|
252
|
-
* Path to the PEM file containing the public key (RSA/ECDSA) or
|
|
253
|
-
* HMAC
|
|
269
|
+
* Path to the PEM file containing the public key (RSA/ECDSA), or for
|
|
270
|
+
* HMAC algorithms a file holding the secret.
|
|
254
271
|
*/
|
|
255
272
|
verificationKey: string;
|
|
256
273
|
/**
|
|
257
|
-
*
|
|
258
|
-
*
|
|
274
|
+
* Name the key is registered under (`--verification-key-id`, default
|
|
275
|
+
* `default`). With a single key OPA does not check it against the
|
|
276
|
+
* signature's `keyid` claim; only `scope` is enforced.
|
|
259
277
|
*/
|
|
260
278
|
verificationKeyId?: string;
|
|
261
279
|
/** Signing algorithm used when the bundle was signed (e.g. `RS256`, `HS256`). */
|
|
262
280
|
signingAlg?: string;
|
|
263
281
|
/**
|
|
264
282
|
* Expected `scope` value in the bundle signature. Required when the
|
|
265
|
-
* bundle was signed with
|
|
283
|
+
* bundle was signed with a claims file that sets `scope`.
|
|
266
284
|
*/
|
|
267
285
|
scope?: string;
|
|
286
|
+
/** Load the bundle as Rego v0 (`--v0-compatible`). */
|
|
287
|
+
v0Compatible?: boolean;
|
|
288
|
+
/** Working directory for opa; see `SignInput.cwd`. */
|
|
289
|
+
cwd?: string;
|
|
268
290
|
}
|
|
269
291
|
/**
|
|
270
292
|
* Wrapper around the local `opa` binary.
|
|
@@ -352,16 +374,23 @@ export declare class OpaCli {
|
|
|
352
374
|
/** Build a deployable bundle from policy + data paths. */
|
|
353
375
|
build(input: BuildInput, signal?: AbortSignal): Promise<SpawnResult>;
|
|
354
376
|
/**
|
|
355
|
-
* Sign a bundle
|
|
356
|
-
*
|
|
377
|
+
* Sign a bundle with `opa sign`, writing `.signatures.json` into
|
|
378
|
+
* `input.outputDir`.
|
|
379
|
+
*
|
|
380
|
+
* `--bundle` is a boolean flag on `opa sign`; the bundle path is positional
|
|
381
|
+
* and goes after `--` so it can never be parsed as a flag.
|
|
357
382
|
*/
|
|
358
383
|
sign(input: SignInput, signal?: AbortSignal): Promise<SpawnResult>;
|
|
359
384
|
/**
|
|
360
|
-
* Verify a signed bundle
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
*
|
|
364
|
-
*
|
|
385
|
+
* Verify a signed bundle.
|
|
386
|
+
*
|
|
387
|
+
* OPA has no standalone verify command, and `opa eval` accepts no
|
|
388
|
+
* `--verification-key` at all. The flag lives on `opa build` and `opa run`.
|
|
389
|
+
* Build reads the key, checks the JWT against it, compares the scope claim,
|
|
390
|
+
* then checks every file, then parses, and exits non-zero at the first
|
|
391
|
+
* failure with the reason on stdout. The rebuilt archive goes to a private
|
|
392
|
+
* temp directory and is discarded: it is a side effect of the only
|
|
393
|
+
* verification path OPA offers, not a result.
|
|
365
394
|
*/
|
|
366
395
|
bundleVerify(input: BundleVerifyInput, signal?: AbortSignal): Promise<SpawnResult>;
|
|
367
396
|
/**
|
|
@@ -374,8 +403,27 @@ export declare class OpaCli {
|
|
|
374
403
|
* Run `opa` with the given argv and optional stdin. Tools should
|
|
375
404
|
* prefer the typed methods above, but this exists for the rare cases
|
|
376
405
|
* the typed surface does not yet cover.
|
|
406
|
+
*
|
|
407
|
+
* `cwd` is for commands whose output location defaults to the working
|
|
408
|
+
* directory; the server's own cwd is never a place a tool should write.
|
|
409
|
+
*/
|
|
410
|
+
run(args: string[], stdin?: string, signal?: AbortSignal,
|
|
411
|
+
/**
|
|
412
|
+
* The arguments OPA will mount as documents. On Windows an absolute one
|
|
413
|
+
* mounts under its drive letter, so these are rewritten relative to a
|
|
414
|
+
* working directory the child then runs in. Files OPA merely opens
|
|
415
|
+
* (`--input`, `--signing-key`, `--capabilities`, `-o`) must NOT be listed:
|
|
416
|
+
* they work absolute, and rewriting them risks a spurious drive conflict.
|
|
417
|
+
* See lib/opa-paths.ts.
|
|
418
|
+
*/
|
|
419
|
+
loadPaths?: readonly string[],
|
|
420
|
+
/**
|
|
421
|
+
* Run the child here. Used where OPA binds behaviour to the path it is
|
|
422
|
+
* given rather than to the file it opens, as `opa sign` does for a
|
|
423
|
+
* directory bundle. A rewritten load path derives its own working
|
|
424
|
+
* directory, and the two are never needed by the same command.
|
|
377
425
|
*/
|
|
378
|
-
|
|
426
|
+
cwd?: string): Promise<SpawnResult>;
|
|
379
427
|
/**
|
|
380
428
|
* Write `source` to a private temp directory (mode 0700) created with
|
|
381
429
|
* mkdtemp. The directory and its contents are removed on completion.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opa-cli.d.ts","sourceRoot":"","sources":["../../src/lib/opa-cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opa-cli.d.ts","sourceRoot":"","sources":["../../src/lib/opa-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/opa-cli.js
CHANGED
|
@@ -15,10 +15,12 @@
|
|
|
15
15
|
* would force conversions both ways. Stdout is JSON whenever
|
|
16
16
|
* `--format=json` is set, and tools call `JSON.parse` on it themselves.
|
|
17
17
|
*/
|
|
18
|
+
import { existsSync } from 'node:fs';
|
|
18
19
|
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
19
20
|
import { tmpdir } from 'node:os';
|
|
20
21
|
import { join } from 'node:path';
|
|
21
22
|
import { coerceJsonArg } from './json-coerce.js';
|
|
23
|
+
import { rewriteLoadPaths } from './opa-paths.js';
|
|
22
24
|
import { runBinary } from './subprocess.js';
|
|
23
25
|
/**
|
|
24
26
|
* Wrapper around the local `opa` binary.
|
|
@@ -130,7 +132,7 @@ export class OpaCli {
|
|
|
130
132
|
if (input.bundle)
|
|
131
133
|
args.push('--bundle');
|
|
132
134
|
args.push(...(input.paths ?? []));
|
|
133
|
-
return this.run(args, undefined, signal);
|
|
135
|
+
return this.run(args, undefined, signal, input.paths ?? []);
|
|
134
136
|
}
|
|
135
137
|
/**
|
|
136
138
|
* Parse Rego source to a JSON AST. Stdout is the AST as JSON.
|
|
@@ -180,7 +182,7 @@ export class OpaCli {
|
|
|
180
182
|
args.push('--data', path);
|
|
181
183
|
}
|
|
182
184
|
args.push(input.ref);
|
|
183
|
-
return this.run(args, undefined, signal);
|
|
185
|
+
return this.run(args, undefined, signal, input.paths);
|
|
184
186
|
}
|
|
185
187
|
// ─── Evaluation ──────────────────────────────────────────────────────
|
|
186
188
|
/**
|
|
@@ -231,7 +233,7 @@ export class OpaCli {
|
|
|
231
233
|
stdin = JSON.stringify(coerceJsonArg(input.input));
|
|
232
234
|
}
|
|
233
235
|
args.push(input.query);
|
|
234
|
-
return this.run(args, stdin, signal);
|
|
236
|
+
return this.run(args, stdin, signal, input.paths ?? []);
|
|
235
237
|
}
|
|
236
238
|
/**
|
|
237
239
|
* Run Rego unit tests. Stdout is JSON with per-test pass/fail.
|
|
@@ -266,7 +268,7 @@ export class OpaCli {
|
|
|
266
268
|
if (input.v1Compatible)
|
|
267
269
|
args.push('--v1-compatible');
|
|
268
270
|
args.push(...input.paths);
|
|
269
|
-
return this.run(args, undefined, signal);
|
|
271
|
+
return this.run(args, undefined, signal, input.paths);
|
|
270
272
|
}
|
|
271
273
|
/**
|
|
272
274
|
* Benchmark a query. Stdout is JSON with iteration timing statistics.
|
|
@@ -287,7 +289,7 @@ export class OpaCli {
|
|
|
287
289
|
stdin = JSON.stringify(coerceJsonArg(input.input));
|
|
288
290
|
}
|
|
289
291
|
args.push(input.query);
|
|
290
|
-
return this.run(args, stdin, signal);
|
|
292
|
+
return this.run(args, stdin, signal, input.paths ?? []);
|
|
291
293
|
}
|
|
292
294
|
// ─── Bundles ─────────────────────────────────────────────────────────
|
|
293
295
|
/** Build a deployable bundle from policy + data paths. */
|
|
@@ -325,38 +327,53 @@ export class OpaCli {
|
|
|
325
327
|
if (input.verificationKeyId)
|
|
326
328
|
args.push('--verification-key-id', input.verificationKeyId);
|
|
327
329
|
args.push(...input.paths);
|
|
328
|
-
return this.run(args, undefined, signal);
|
|
330
|
+
return this.run(args, undefined, signal, input.paths);
|
|
329
331
|
}
|
|
330
332
|
/**
|
|
331
|
-
* Sign a bundle
|
|
332
|
-
*
|
|
333
|
+
* Sign a bundle with `opa sign`, writing `.signatures.json` into
|
|
334
|
+
* `input.outputDir`.
|
|
335
|
+
*
|
|
336
|
+
* `--bundle` is a boolean flag on `opa sign`; the bundle path is positional
|
|
337
|
+
* and goes after `--` so it can never be parsed as a flag.
|
|
333
338
|
*/
|
|
334
339
|
async sign(input, signal) {
|
|
335
|
-
const args = ['sign', '--signing-key', input.signingKey];
|
|
340
|
+
const args = ['sign', '--bundle', '--signing-key', input.signingKey];
|
|
336
341
|
if (input.signingAlg)
|
|
337
342
|
args.push('--signing-alg', input.signingAlg);
|
|
338
343
|
if (input.claimsFile)
|
|
339
344
|
args.push('--claims-file', input.claimsFile);
|
|
340
|
-
args.push('--
|
|
341
|
-
return this.run(args, undefined, signal);
|
|
345
|
+
args.push('--output-file-path', input.outputDir, '--', input.bundle);
|
|
346
|
+
return this.run(args, undefined, signal, [], input.cwd);
|
|
342
347
|
}
|
|
343
348
|
/**
|
|
344
|
-
* Verify a signed bundle
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
349
|
+
* Verify a signed bundle.
|
|
350
|
+
*
|
|
351
|
+
* OPA has no standalone verify command, and `opa eval` accepts no
|
|
352
|
+
* `--verification-key` at all. The flag lives on `opa build` and `opa run`.
|
|
353
|
+
* Build reads the key, checks the JWT against it, compares the scope claim,
|
|
354
|
+
* then checks every file, then parses, and exits non-zero at the first
|
|
355
|
+
* failure with the reason on stdout. The rebuilt archive goes to a private
|
|
356
|
+
* temp directory and is discarded: it is a side effect of the only
|
|
357
|
+
* verification path OPA offers, not a result.
|
|
349
358
|
*/
|
|
350
359
|
async bundleVerify(input, signal) {
|
|
351
|
-
const
|
|
352
|
-
|
|
353
|
-
args
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
+
const tmpDir = await mkdtemp(join(tmpdir(), 'orygn-opa-mcp-verify-'));
|
|
361
|
+
try {
|
|
362
|
+
const args = ['build', '--bundle', '--verification-key', input.verificationKey];
|
|
363
|
+
if (input.verificationKeyId)
|
|
364
|
+
args.push('--verification-key-id', input.verificationKeyId);
|
|
365
|
+
if (input.signingAlg)
|
|
366
|
+
args.push('--signing-alg', input.signingAlg);
|
|
367
|
+
if (input.scope)
|
|
368
|
+
args.push('--scope', input.scope);
|
|
369
|
+
if (input.v0Compatible)
|
|
370
|
+
args.push('--v0-compatible');
|
|
371
|
+
args.push('-o', join(tmpDir, 'verified.tar.gz'), '--', input.bundle);
|
|
372
|
+
return await this.run(args, undefined, signal, [], input.cwd);
|
|
373
|
+
}
|
|
374
|
+
finally {
|
|
375
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
376
|
+
}
|
|
360
377
|
}
|
|
361
378
|
/**
|
|
362
379
|
* Batch-evaluate a policy decision against one or more input files using
|
|
@@ -385,18 +402,54 @@ export class OpaCli {
|
|
|
385
402
|
args.push('--timeout', input.timeout);
|
|
386
403
|
if (input.v1Compatible)
|
|
387
404
|
args.push('--v1-compatible');
|
|
405
|
+
// The --bundle roots are mounted. The positional input files are read as
|
|
406
|
+
// the input document for each evaluation, not mounted, so they are left
|
|
407
|
+
// exactly as given.
|
|
408
|
+
const execLoadPaths = [...(input.bundle ? [input.bundle] : []), ...(input.dataPaths ?? [])];
|
|
388
409
|
args.push(...input.inputPaths);
|
|
389
|
-
return this.run(args, undefined, signal);
|
|
410
|
+
return this.run(args, undefined, signal, execLoadPaths);
|
|
390
411
|
}
|
|
391
412
|
// ─── Low-level escape hatch ──────────────────────────────────────────
|
|
392
413
|
/**
|
|
393
414
|
* Run `opa` with the given argv and optional stdin. Tools should
|
|
394
415
|
* prefer the typed methods above, but this exists for the rare cases
|
|
395
416
|
* the typed surface does not yet cover.
|
|
417
|
+
*
|
|
418
|
+
* `cwd` is for commands whose output location defaults to the working
|
|
419
|
+
* directory; the server's own cwd is never a place a tool should write.
|
|
396
420
|
*/
|
|
397
|
-
async run(args, stdin, signal
|
|
421
|
+
async run(args, stdin, signal,
|
|
422
|
+
/**
|
|
423
|
+
* The arguments OPA will mount as documents. On Windows an absolute one
|
|
424
|
+
* mounts under its drive letter, so these are rewritten relative to a
|
|
425
|
+
* working directory the child then runs in. Files OPA merely opens
|
|
426
|
+
* (`--input`, `--signing-key`, `--capabilities`, `-o`) must NOT be listed:
|
|
427
|
+
* they work absolute, and rewriting them risks a spurious drive conflict.
|
|
428
|
+
* See lib/opa-paths.ts.
|
|
429
|
+
*/
|
|
430
|
+
loadPaths = [],
|
|
431
|
+
/**
|
|
432
|
+
* Run the child here. Used where OPA binds behaviour to the path it is
|
|
433
|
+
* given rather than to the file it opens, as `opa sign` does for a
|
|
434
|
+
* directory bundle. A rewritten load path derives its own working
|
|
435
|
+
* directory, and the two are never needed by the same command.
|
|
436
|
+
*/
|
|
437
|
+
cwd) {
|
|
438
|
+
const rewritten = rewriteLoadPaths(args, loadPaths);
|
|
439
|
+
if (rewritten.conflict) {
|
|
440
|
+
return {
|
|
441
|
+
exitCode: 1,
|
|
442
|
+
stdout: '',
|
|
443
|
+
stderr: `load paths span more than one drive (${rewritten.conflict.drives.join(', ')}). ` +
|
|
444
|
+
'opa reads an absolute path as prefix:path, so on Windows it can load documents ' +
|
|
445
|
+
'from only one drive at a time. Use paths on a single drive.',
|
|
446
|
+
timedOut: false,
|
|
447
|
+
aborted: false,
|
|
448
|
+
durationMs: 0,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
398
451
|
const opts = {
|
|
399
|
-
args,
|
|
452
|
+
args: rewritten.args,
|
|
400
453
|
timeoutMs: this.config.subprocessTimeoutMs,
|
|
401
454
|
maxOutputBytes: this.config.maxSubprocessBytes,
|
|
402
455
|
};
|
|
@@ -404,6 +457,23 @@ export class OpaCli {
|
|
|
404
457
|
opts.stdin = stdin;
|
|
405
458
|
if (signal !== undefined)
|
|
406
459
|
opts.signal = signal;
|
|
460
|
+
const runCwd = cwd ?? rewritten.cwd;
|
|
461
|
+
if (runCwd !== undefined) {
|
|
462
|
+
// A working directory that vanished after validation makes spawn fail
|
|
463
|
+
// with the same ENOENT a missing binary produces, which would be
|
|
464
|
+
// reported as OPA_BINARY_NOT_FOUND. Name the real cause instead.
|
|
465
|
+
if (!existsSync(runCwd)) {
|
|
466
|
+
return {
|
|
467
|
+
exitCode: 1,
|
|
468
|
+
stdout: '',
|
|
469
|
+
stderr: `working directory does not exist: ${runCwd}`,
|
|
470
|
+
timedOut: false,
|
|
471
|
+
aborted: false,
|
|
472
|
+
durationMs: 0,
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
opts.cwd = runCwd;
|
|
476
|
+
}
|
|
407
477
|
return runBinary(this.config.opaBinary, opts);
|
|
408
478
|
}
|
|
409
479
|
// ─── Internal: temp file management ──────────────────────────────────
|