@orygn/opa-mcp 0.4.0 → 0.6.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 +583 -4
- package/README.md +144 -98
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +14 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +91 -19
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +1 -6
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +17 -3
- package/dist/constants.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 +233 -50
- package/dist/lib/conftest-cli.js.map +1 -1
- package/dist/lib/errors.d.ts +4 -5
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +15 -3
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/inline-paths.d.ts +37 -0
- package/dist/lib/inline-paths.d.ts.map +1 -0
- package/dist/lib/inline-paths.js +162 -0
- package/dist/lib/inline-paths.js.map +1 -0
- 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 +74 -16
- package/dist/lib/opa-cli.d.ts.map +1 -1
- package/dist/lib/opa-cli.js +107 -30
- package/dist/lib/opa-cli.js.map +1 -1
- package/dist/lib/opa-client.d.ts +27 -1
- package/dist/lib/opa-client.d.ts.map +1 -1
- package/dist/lib/opa-client.js +98 -14
- package/dist/lib/opa-client.js.map +1 -1
- package/dist/lib/opa-paths.d.ts +34 -0
- package/dist/lib/opa-paths.d.ts.map +1 -0
- package/dist/lib/opa-paths.js +101 -0
- package/dist/lib/opa-paths.js.map +1 -0
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +83 -10
- package/dist/lib/output.js.map +1 -1
- 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 +0 -6
- package/dist/lib/rego-ast-walker.d.ts.map +1 -1
- package/dist/lib/rego-ast-walker.js +181 -55
- package/dist/lib/rego-ast-walker.js.map +1 -1
- package/dist/lib/rego-counterexample.d.ts +15 -2
- package/dist/lib/rego-counterexample.d.ts.map +1 -1
- package/dist/lib/rego-counterexample.js +63 -15
- package/dist/lib/rego-counterexample.js.map +1 -1
- package/dist/lib/rego-input-path.d.ts +20 -0
- package/dist/lib/rego-input-path.d.ts.map +1 -0
- package/dist/lib/rego-input-path.js +70 -0
- package/dist/lib/rego-input-path.js.map +1 -0
- package/dist/lib/rego-ir.d.ts +34 -3
- package/dist/lib/rego-ir.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.d.ts +88 -5
- package/dist/lib/rego-smt-encoder.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.js +270 -31
- package/dist/lib/rego-smt-encoder.js.map +1 -1
- package/dist/lib/rego-type-inferencer.d.ts +27 -2
- package/dist/lib/rego-type-inferencer.d.ts.map +1 -1
- package/dist/lib/rego-type-inferencer.js +71 -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 +203 -90
- package/dist/lib/rego-verify-engine.js.map +1 -1
- package/dist/lib/rego-z3.d.ts +66 -0
- package/dist/lib/rego-z3.d.ts.map +1 -1
- package/dist/lib/rego-z3.js +312 -5
- 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/lib/subprocess.d.ts +13 -0
- package/dist/lib/subprocess.d.ts.map +1 -1
- package/dist/lib/subprocess.js +153 -18
- package/dist/lib/subprocess.js.map +1 -1
- package/dist/lib/tool-helpers.d.ts +12 -25
- package/dist/lib/tool-helpers.d.ts.map +1 -1
- package/dist/lib/tool-helpers.js +66 -40
- package/dist/lib/tool-helpers.js.map +1 -1
- package/dist/prompts/index.js +2 -2
- package/dist/resources/index.js +1 -1
- package/dist/resources/index.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 +42 -15
- package/dist/resources/patterns.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +50 -7
- package/dist/server.js.map +1 -1
- package/dist/tools/authoring/capabilities.d.ts +4 -0
- package/dist/tools/authoring/capabilities.d.ts.map +1 -1
- package/dist/tools/authoring/capabilities.js +41 -4
- package/dist/tools/authoring/capabilities.js.map +1 -1
- package/dist/tools/authoring/check-schema.d.ts +6 -0
- package/dist/tools/authoring/check-schema.d.ts.map +1 -1
- package/dist/tools/authoring/check-schema.js +56 -3
- package/dist/tools/authoring/check-schema.js.map +1 -1
- package/dist/tools/authoring/format.d.ts.map +1 -1
- package/dist/tools/authoring/format.js +2 -2
- package/dist/tools/authoring/format.js.map +1 -1
- package/dist/tools/authoring/lint.d.ts.map +1 -1
- package/dist/tools/authoring/lint.js +8 -6
- package/dist/tools/authoring/lint.js.map +1 -1
- package/dist/tools/authoring/migrate-v1.d.ts.map +1 -1
- package/dist/tools/authoring/migrate-v1.js +20 -4
- package/dist/tools/authoring/migrate-v1.js.map +1 -1
- package/dist/tools/authoring/parse.d.ts.map +1 -1
- package/dist/tools/authoring/parse.js +3 -3
- package/dist/tools/authoring/parse.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 +125 -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/index.d.ts +5 -0
- package/dist/tools/conftest/index.d.ts.map +1 -1
- package/dist/tools/conftest/index.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 +61 -39
- 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 +40 -32
- package/dist/tools/conftest/verify.js.map +1 -1
- package/dist/tools/evaluation/_shared.js +9 -12
- package/dist/tools/evaluation/_shared.js.map +1 -1
- package/dist/tools/evaluation/bench.d.ts +29 -2
- package/dist/tools/evaluation/bench.d.ts.map +1 -1
- package/dist/tools/evaluation/bench.js +53 -9
- package/dist/tools/evaluation/bench.js.map +1 -1
- package/dist/tools/evaluation/compile.js +4 -4
- package/dist/tools/evaluation/compile.js.map +1 -1
- package/dist/tools/evaluation/eval.d.ts.map +1 -1
- package/dist/tools/evaluation/eval.js +12 -16
- package/dist/tools/evaluation/eval.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 +38 -6
- package/dist/tools/evaluation/exec.js.map +1 -1
- package/dist/tools/evaluation/test-multiroot.d.ts +6 -0
- package/dist/tools/evaluation/test-multiroot.d.ts.map +1 -1
- package/dist/tools/evaluation/test-multiroot.js +35 -8
- 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 +153 -32
- 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 +7 -7
- package/dist/tools/helpers/coverage-gaps.js.map +1 -1
- package/dist/tools/helpers/describe-policy.d.ts.map +1 -1
- package/dist/tools/helpers/describe-policy.js +2 -2
- package/dist/tools/helpers/describe-policy.js.map +1 -1
- package/dist/tools/helpers/explain-decision.d.ts.map +1 -1
- package/dist/tools/helpers/explain-decision.js +3 -4
- package/dist/tools/helpers/explain-decision.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 +214 -73
- package/dist/tools/helpers/explain-undefined.js.map +1 -1
- package/dist/tools/helpers/fix.d.ts +11 -5
- package/dist/tools/helpers/fix.d.ts.map +1 -1
- package/dist/tools/helpers/fix.js +88 -45
- package/dist/tools/helpers/fix.js.map +1 -1
- package/dist/tools/helpers/generate-test-skeleton.d.ts.map +1 -1
- package/dist/tools/helpers/generate-test-skeleton.js +105 -21
- package/dist/tools/helpers/generate-test-skeleton.js.map +1 -1
- package/dist/tools/helpers/playground-share.d.ts +4 -2
- package/dist/tools/helpers/playground-share.d.ts.map +1 -1
- package/dist/tools/helpers/playground-share.js +13 -3
- package/dist/tools/helpers/playground-share.js.map +1 -1
- package/dist/tools/helpers/policy-diff.d.ts.map +1 -1
- package/dist/tools/helpers/policy-diff.js +3 -4
- package/dist/tools/helpers/policy-diff.js.map +1 -1
- package/dist/tools/helpers/security-audit.d.ts.map +1 -1
- package/dist/tools/helpers/security-audit.js +19 -19
- package/dist/tools/helpers/security-audit.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/meta/index.d.ts +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 +86 -13
- 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 +10 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip this server's own temp-file paths out of anything a tool returns.
|
|
3
|
+
*
|
|
4
|
+
* Inline source is written to a private temp directory for the binaries to
|
|
5
|
+
* read, and their diagnostics, traces and coverage name that file. Nothing
|
|
6
|
+
* here imports another module of this server, so errors.ts can sanitise
|
|
7
|
+
* every envelope without an import cycle.
|
|
8
|
+
*/
|
|
9
|
+
import { tmpdir } from 'node:os';
|
|
10
|
+
/**
|
|
11
|
+
* Matches the temp-file paths written by OpaCli.withTempSource and
|
|
12
|
+
* RegalCli.withTempSource when handling inline source. Both now use
|
|
13
|
+
* mkdtemp which produces a private directory; the file inside is always
|
|
14
|
+
* named input.rego. Matches both Unix (/) and Windows (\) separators.
|
|
15
|
+
*/
|
|
16
|
+
export const INLINE_TEMP_PATH_PATTERN = /orygn-(?:opa|regal)-mcp-[^/\\]+[/\\]input\.rego$/i;
|
|
17
|
+
/**
|
|
18
|
+
* Replace a file path that refers to one of our temp files with the
|
|
19
|
+
* sentinel string `<inline>`. Returns the original string unchanged when
|
|
20
|
+
* it does not match the pattern, so callers can unconditionally apply it
|
|
21
|
+
* to all location.file values regardless of whether inline source was used.
|
|
22
|
+
*/
|
|
23
|
+
export function sanitizeInlinePath(file) {
|
|
24
|
+
return INLINE_TEMP_PATH_PATTERN.test(file) ? '<inline>' : file;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The files this server writes under the OS temp directory and hands to a
|
|
28
|
+
* binary: inline source for opa and regal, an inline schema for check-schema,
|
|
29
|
+
* and the archive bundle-verify extracts. A diagnostic names one of them by
|
|
30
|
+
* its full path, and a JSON-encoded diagnostic doubles the backslashes, so a
|
|
31
|
+
* separator is any run of them.
|
|
32
|
+
*/
|
|
33
|
+
const TEMP_FILE_MARKER = /orygn-(?:opa-mcp|regal-mcp|schema)[^\\/\r\n]{0,255}[\\/]+(?:input\.rego|schema\.json|verified\.tar\.gz)/gi;
|
|
34
|
+
const SEGMENT_CHAR = /[^\\/:*?"<>|\r\n]/;
|
|
35
|
+
const isSeparator = (c) => c === '/' || c === '\\';
|
|
36
|
+
const isBlank = (c) => c === ' ' || c === '\t';
|
|
37
|
+
/**
|
|
38
|
+
* Where the path that ends at `markerStart` begins: walk back over
|
|
39
|
+
* `<separators><segment>` pairs, then over a drive letter. Nothing before
|
|
40
|
+
* `floor` is examined, so a scan over a whole string is linear. A segment may
|
|
41
|
+
* hold whitespace, since a Windows temp directory sits under the user's
|
|
42
|
+
* profile and a macOS one can sit under the home directory; but a directory
|
|
43
|
+
* name does not start or end with whitespace, and text that does is prose
|
|
44
|
+
* around the path, where the walk stops. That is a heuristic, and it trades
|
|
45
|
+
* two ways: a word abutting a separator reads as a segment and is taken
|
|
46
|
+
* along with the path (prose lost, nothing leaked), and a temp directory
|
|
47
|
+
* under a component that itself starts or ends with whitespace keeps the
|
|
48
|
+
* components before it (the random temp name is still replaced).
|
|
49
|
+
*/
|
|
50
|
+
function pathStart(text, markerStart, floor) {
|
|
51
|
+
let start = markerStart;
|
|
52
|
+
let i = markerStart - 1;
|
|
53
|
+
while (i >= floor && isSeparator(text[i])) {
|
|
54
|
+
let j = i;
|
|
55
|
+
while (j >= floor && isSeparator(text[j]))
|
|
56
|
+
j--;
|
|
57
|
+
// Rooted at this separator run unless a segment precedes it.
|
|
58
|
+
start = j + 1;
|
|
59
|
+
let k = j;
|
|
60
|
+
while (k >= floor && SEGMENT_CHAR.test(text[k]))
|
|
61
|
+
k--;
|
|
62
|
+
if (k < j && k >= floor && isSeparator(text[k])) {
|
|
63
|
+
if (isBlank(text[j]) || isBlank(text[k + 1]))
|
|
64
|
+
break;
|
|
65
|
+
i = k;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (k === j &&
|
|
69
|
+
j >= floor + 1 &&
|
|
70
|
+
text[j] === ':' &&
|
|
71
|
+
/[A-Za-z]/.test(text[j - 1]) &&
|
|
72
|
+
(j - 2 < floor || !/[A-Za-z0-9]/.test(text[j - 2]))) {
|
|
73
|
+
start = j - 1;
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
return start;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The spellings a binary may use for a path under `root`: as written, with
|
|
81
|
+
* every separator run as either kind, JSON-encoded (backslashes doubled), and
|
|
82
|
+
* on Windows with the drive dropped, which OPA's loader does. Longest first,
|
|
83
|
+
* so a prefix never wins over the full form.
|
|
84
|
+
*/
|
|
85
|
+
function rootSpellings(root) {
|
|
86
|
+
const slashes = root.replace(/\\/g, '/');
|
|
87
|
+
const backslashes = root.replace(/\//g, '\\');
|
|
88
|
+
const bases = [root, slashes, backslashes];
|
|
89
|
+
for (const base of [...bases])
|
|
90
|
+
bases.push(base.replace(/^[A-Za-z]:/, ''));
|
|
91
|
+
const all = bases.flatMap((b) => [b, JSON.stringify(b).slice(1, -1)]);
|
|
92
|
+
return [...new Set(all)].filter((b) => b.length > 1).sort((a, b) => b.length - a.length);
|
|
93
|
+
}
|
|
94
|
+
const escapeRegExp = (text) => text.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
95
|
+
/**
|
|
96
|
+
* Exact matchers for this process's own temp files: the temp root the server
|
|
97
|
+
* writes under, a separator run, the directory prefix mkdtemp extends, its
|
|
98
|
+
* random suffix, and the file name. No guessing is involved, so a component
|
|
99
|
+
* of the root that starts or ends with whitespace, which the walk below has
|
|
100
|
+
* to treat as prose, is handled here.
|
|
101
|
+
*/
|
|
102
|
+
function exactMatchers(root) {
|
|
103
|
+
const sep = String.raw `(?:\\\\|\\|/)+`;
|
|
104
|
+
// The root must begin at a path boundary. Without this, a root such as
|
|
105
|
+
// `/tmp` matched inside `\\srv\tmp\...` or after `file://` and the text
|
|
106
|
+
// before it survived; the walk handles those spellings whole.
|
|
107
|
+
const boundary = String.raw `(?<![A-Za-z0-9_.~\\/-])`;
|
|
108
|
+
const tail = String.raw `orygn-(?:opa-mcp|regal-mcp|schema)[^\\/\r\n]{0,255}` +
|
|
109
|
+
sep +
|
|
110
|
+
String.raw `(?:input\.rego|schema\.json|verified\.tar\.gz)`;
|
|
111
|
+
return rootSpellings(root).map((r) => new RegExp(boundary + escapeRegExp(r) + sep + tail, 'gi'));
|
|
112
|
+
}
|
|
113
|
+
let ownMatchers;
|
|
114
|
+
/** Built on first use, from the temp root the server runs with. */
|
|
115
|
+
function ownTempMatchers() {
|
|
116
|
+
ownMatchers ??= exactMatchers(tmpdir());
|
|
117
|
+
return ownMatchers;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Replace every temp-file path wherever it sits inside `text`: first this
|
|
121
|
+
* process's own files by their exact spelling, then anything shaped like one
|
|
122
|
+
* of them by the walk below.
|
|
123
|
+
*/
|
|
124
|
+
export function sanitizeInlineText(text, roots) {
|
|
125
|
+
if (!text.toLowerCase().includes('orygn-'))
|
|
126
|
+
return text;
|
|
127
|
+
const matchers = roots === undefined ? ownTempMatchers() : roots.flatMap(exactMatchers);
|
|
128
|
+
for (const matcher of matchers)
|
|
129
|
+
text = text.replace(matcher, '<inline>');
|
|
130
|
+
if (!text.toLowerCase().includes('orygn-'))
|
|
131
|
+
return text;
|
|
132
|
+
let out = '';
|
|
133
|
+
let last = 0;
|
|
134
|
+
for (const match of text.matchAll(TEMP_FILE_MARKER)) {
|
|
135
|
+
const start = pathStart(text, match.index, last);
|
|
136
|
+
out += text.slice(last, start) + '<inline>';
|
|
137
|
+
last = match.index + match[0].length;
|
|
138
|
+
}
|
|
139
|
+
return out + text.slice(last);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Recursively rewrite every temp-file path, in string values and object
|
|
143
|
+
* keys, to the `<inline>` sentinel. OPA writes inline source to a temp file,
|
|
144
|
+
* so trace, coverage and profile output and every diagnostic reference that
|
|
145
|
+
* path; this normalizes the whole structure so callers never see an absolute
|
|
146
|
+
* temp path. Only a path shaped like this server's own temp files matches.
|
|
147
|
+
*/
|
|
148
|
+
export function sanitizeInlinePathsDeep(value) {
|
|
149
|
+
if (typeof value === 'string')
|
|
150
|
+
return sanitizeInlineText(value);
|
|
151
|
+
if (Array.isArray(value))
|
|
152
|
+
return value.map(sanitizeInlinePathsDeep);
|
|
153
|
+
if (value !== null && typeof value === 'object') {
|
|
154
|
+
const out = {};
|
|
155
|
+
for (const [key, val] of Object.entries(value)) {
|
|
156
|
+
out[sanitizeInlineText(key)] = sanitizeInlinePathsDeep(val);
|
|
157
|
+
}
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=inline-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-paths.js","sourceRoot":"","sources":["../../src/lib/inline-paths.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
|
@@ -96,6 +96,16 @@ export interface EvalInput {
|
|
|
96
96
|
partial?: boolean;
|
|
97
97
|
/** Refs treated as unknown during partial evaluation, e.g. ["input.user"]. */
|
|
98
98
|
unknowns?: string[];
|
|
99
|
+
/**
|
|
100
|
+
* Package the query is evaluated in, passed as `--package`, so a bare
|
|
101
|
+
* reference to a rule of that package resolves without qualification.
|
|
102
|
+
*/
|
|
103
|
+
package?: string;
|
|
104
|
+
/**
|
|
105
|
+
* Import statements for the query, each passed as `--import`, in the form
|
|
106
|
+
* they appear in a module: "data.lib", "input.tier as t".
|
|
107
|
+
*/
|
|
108
|
+
imports?: string[];
|
|
99
109
|
/** Treat builtin errors as fatal instead of returning undefined. */
|
|
100
110
|
strictBuiltinErrors?: boolean;
|
|
101
111
|
/** Path to a capabilities JSON file. */
|
|
@@ -213,12 +223,29 @@ export interface BuildInput {
|
|
|
213
223
|
export interface SignInput {
|
|
214
224
|
/** Path to a bundle directory or archive. */
|
|
215
225
|
bundle: string;
|
|
216
|
-
/**
|
|
226
|
+
/**
|
|
227
|
+
* Path to the PEM private key (RSA or ECDSA). For HMAC algorithms OPA
|
|
228
|
+
* accepts either the raw secret or a path to a file holding it; the tool
|
|
229
|
+
* layer only ever passes a validated path.
|
|
230
|
+
*/
|
|
217
231
|
signingKey: string;
|
|
218
232
|
/** Signing algorithm (e.g. `RS256`). Defaults to `RS256` in OPA. */
|
|
219
233
|
signingAlg?: string;
|
|
220
|
-
/** Path to a claims file
|
|
234
|
+
/** Path to a claims file. `keyid` and `scope` are set this way; `opa sign` has no flags for them. */
|
|
221
235
|
claimsFile?: string;
|
|
236
|
+
/**
|
|
237
|
+
* Directory that receives `.signatures.json` (`--output-file-path`).
|
|
238
|
+
* OPA defaults this to the process working directory, which for a
|
|
239
|
+
* long-running server is never where the caller wants the file.
|
|
240
|
+
*/
|
|
241
|
+
outputDir: string;
|
|
242
|
+
/**
|
|
243
|
+
* Working directory for opa. OPA records each signed file under the bundle
|
|
244
|
+
* path exactly as given, so for a directory the tool passes the parent here
|
|
245
|
+
* and the directory name as `bundle`; the signature then names files as
|
|
246
|
+
* `<name>/<file>` and stays valid wherever the directory sits under that name.
|
|
247
|
+
*/
|
|
248
|
+
cwd?: string;
|
|
222
249
|
}
|
|
223
250
|
/** Input for `opa exec` -- batch evaluation against multiple input files. */
|
|
224
251
|
export interface ExecInput {
|
|
@@ -244,27 +271,32 @@ export interface ExecInput {
|
|
|
244
271
|
/** Opt in to OPA v1.0-compatible behaviors (`--v1-compatible`). */
|
|
245
272
|
v1Compatible?: boolean;
|
|
246
273
|
}
|
|
247
|
-
/** Input for bundle signature verification via `opa
|
|
274
|
+
/** Input for bundle signature verification via `opa build --verification-key`. */
|
|
248
275
|
export interface BundleVerifyInput {
|
|
249
276
|
/** Path to the signed bundle directory or `.tar.gz` archive. */
|
|
250
277
|
bundle: string;
|
|
251
278
|
/**
|
|
252
|
-
* Path to the PEM file containing the public key (RSA/ECDSA) or
|
|
253
|
-
* HMAC
|
|
279
|
+
* Path to the PEM file containing the public key (RSA/ECDSA), or for
|
|
280
|
+
* HMAC algorithms a file holding the secret.
|
|
254
281
|
*/
|
|
255
282
|
verificationKey: string;
|
|
256
283
|
/**
|
|
257
|
-
*
|
|
258
|
-
*
|
|
284
|
+
* Name the key is registered under (`--verification-key-id`, default
|
|
285
|
+
* `default`). With a single key OPA does not check it against the
|
|
286
|
+
* signature's `keyid` claim; only `scope` is enforced.
|
|
259
287
|
*/
|
|
260
288
|
verificationKeyId?: string;
|
|
261
289
|
/** Signing algorithm used when the bundle was signed (e.g. `RS256`, `HS256`). */
|
|
262
290
|
signingAlg?: string;
|
|
263
291
|
/**
|
|
264
292
|
* Expected `scope` value in the bundle signature. Required when the
|
|
265
|
-
* bundle was signed with
|
|
293
|
+
* bundle was signed with a claims file that sets `scope`.
|
|
266
294
|
*/
|
|
267
295
|
scope?: string;
|
|
296
|
+
/** Load the bundle as Rego v0 (`--v0-compatible`). */
|
|
297
|
+
v0Compatible?: boolean;
|
|
298
|
+
/** Working directory for opa; see `SignInput.cwd`. */
|
|
299
|
+
cwd?: string;
|
|
268
300
|
}
|
|
269
301
|
/**
|
|
270
302
|
* Wrapper around the local `opa` binary.
|
|
@@ -352,16 +384,23 @@ export declare class OpaCli {
|
|
|
352
384
|
/** Build a deployable bundle from policy + data paths. */
|
|
353
385
|
build(input: BuildInput, signal?: AbortSignal): Promise<SpawnResult>;
|
|
354
386
|
/**
|
|
355
|
-
* Sign a bundle
|
|
356
|
-
*
|
|
387
|
+
* Sign a bundle with `opa sign`, writing `.signatures.json` into
|
|
388
|
+
* `input.outputDir`.
|
|
389
|
+
*
|
|
390
|
+
* `--bundle` is a boolean flag on `opa sign`; the bundle path is positional
|
|
391
|
+
* and goes after `--` so it can never be parsed as a flag.
|
|
357
392
|
*/
|
|
358
393
|
sign(input: SignInput, signal?: AbortSignal): Promise<SpawnResult>;
|
|
359
394
|
/**
|
|
360
|
-
* Verify a signed bundle
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
*
|
|
364
|
-
*
|
|
395
|
+
* Verify a signed bundle.
|
|
396
|
+
*
|
|
397
|
+
* OPA has no standalone verify command, and `opa eval` accepts no
|
|
398
|
+
* `--verification-key` at all. The flag lives on `opa build` and `opa run`.
|
|
399
|
+
* Build reads the key, checks the JWT against it, compares the scope claim,
|
|
400
|
+
* then checks every file, then parses, and exits non-zero at the first
|
|
401
|
+
* failure with the reason on stdout. The rebuilt archive goes to a private
|
|
402
|
+
* temp directory and is discarded: it is a side effect of the only
|
|
403
|
+
* verification path OPA offers, not a result.
|
|
365
404
|
*/
|
|
366
405
|
bundleVerify(input: BundleVerifyInput, signal?: AbortSignal): Promise<SpawnResult>;
|
|
367
406
|
/**
|
|
@@ -374,8 +413,27 @@ export declare class OpaCli {
|
|
|
374
413
|
* Run `opa` with the given argv and optional stdin. Tools should
|
|
375
414
|
* prefer the typed methods above, but this exists for the rare cases
|
|
376
415
|
* the typed surface does not yet cover.
|
|
416
|
+
*
|
|
417
|
+
* `cwd` is for commands whose output location defaults to the working
|
|
418
|
+
* directory; the server's own cwd is never a place a tool should write.
|
|
419
|
+
*/
|
|
420
|
+
run(args: string[], stdin?: string, signal?: AbortSignal,
|
|
421
|
+
/**
|
|
422
|
+
* The arguments OPA will mount as documents. On Windows an absolute one
|
|
423
|
+
* mounts under its drive letter, so these are rewritten relative to a
|
|
424
|
+
* working directory the child then runs in. Files OPA merely opens
|
|
425
|
+
* (`--input`, `--signing-key`, `--capabilities`, `-o`) must NOT be listed:
|
|
426
|
+
* they work absolute, and rewriting them risks a spurious drive conflict.
|
|
427
|
+
* See lib/opa-paths.ts.
|
|
428
|
+
*/
|
|
429
|
+
loadPaths?: readonly string[],
|
|
430
|
+
/**
|
|
431
|
+
* Run the child here. Used where OPA binds behaviour to the path it is
|
|
432
|
+
* given rather than to the file it opens, as `opa sign` does for a
|
|
433
|
+
* directory bundle. A rewritten load path derives its own working
|
|
434
|
+
* directory, and the two are never needed by the same command.
|
|
377
435
|
*/
|
|
378
|
-
|
|
436
|
+
cwd?: string): Promise<SpawnResult>;
|
|
379
437
|
/**
|
|
380
438
|
* Write `source` to a private temp directory (mode 0700) created with
|
|
381
439
|
* 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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"}
|