@decionis/agent-safe-pipeline 0.3.4 → 0.3.6
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/README.md +5 -4
- package/dist/Index.d.ts +7 -0
- package/dist/Index.d.ts.map +1 -1
- package/dist/Index.js +7 -0
- package/dist/Index.js.map +1 -1
- package/dist/audit/AuditRecorder.d.ts +1 -1
- package/dist/audit/AuditRecorder.d.ts.map +1 -1
- package/dist/audit/AuditRecorder.js.map +1 -1
- package/dist/decision/DecionisGate.d.ts +11 -1
- package/dist/decision/DecionisGate.d.ts.map +1 -1
- package/dist/decision/DecionisGate.js +52 -4
- package/dist/decision/DecionisGate.js.map +1 -1
- package/dist/decision/DecisionAuthority.d.ts +15 -1
- package/dist/decision/DecisionAuthority.d.ts.map +1 -1
- package/dist/decision/DecisionAuthority.js.map +1 -1
- package/dist/decision/edge/BundleWindow.d.ts +43 -0
- package/dist/decision/edge/BundleWindow.d.ts.map +1 -0
- package/dist/decision/edge/BundleWindow.js +41 -0
- package/dist/decision/edge/BundleWindow.js.map +1 -0
- package/dist/decision/edge/EdgeBundleManager.d.ts +87 -0
- package/dist/decision/edge/EdgeBundleManager.d.ts.map +1 -0
- package/dist/decision/edge/EdgeBundleManager.js +175 -0
- package/dist/decision/edge/EdgeBundleManager.js.map +1 -0
- package/dist/decision/edge/EdgeBundleSource.d.ts +59 -0
- package/dist/decision/edge/EdgeBundleSource.d.ts.map +1 -0
- package/dist/decision/edge/EdgeBundleSource.js +99 -0
- package/dist/decision/edge/EdgeBundleSource.js.map +1 -0
- package/dist/decision/edge/EdgeDecisionAuthority.d.ts +104 -0
- package/dist/decision/edge/EdgeDecisionAuthority.d.ts.map +1 -0
- package/dist/decision/edge/EdgeDecisionAuthority.js +197 -0
- package/dist/decision/edge/EdgeDecisionAuthority.js.map +1 -0
- package/dist/decision/edge/EdgeModule.d.ts +63 -0
- package/dist/decision/edge/EdgeModule.d.ts.map +1 -0
- package/dist/decision/edge/EdgeModule.js +147 -0
- package/dist/decision/edge/EdgeModule.js.map +1 -0
- package/dist/execution/ActionRegistry.d.ts +23 -0
- package/dist/execution/ActionRegistry.d.ts.map +1 -1
- package/dist/execution/ActionRegistry.js +32 -2
- package/dist/execution/ActionRegistry.js.map +1 -1
- package/dist/execution/AuthorizationVerifier.d.ts.map +1 -1
- package/dist/execution/AuthorizationVerifier.js +7 -2
- package/dist/execution/AuthorizationVerifier.js.map +1 -1
- package/dist/execution/LocalAuthorizationVerifier.d.ts +70 -0
- package/dist/execution/LocalAuthorizationVerifier.d.ts.map +1 -0
- package/dist/execution/LocalAuthorizationVerifier.js +119 -0
- package/dist/execution/LocalAuthorizationVerifier.js.map +1 -0
- package/dist/execution/PostgresReplayStore.d.ts +57 -0
- package/dist/execution/PostgresReplayStore.d.ts.map +1 -0
- package/dist/execution/PostgresReplayStore.js +81 -0
- package/dist/execution/PostgresReplayStore.js.map +1 -0
- package/dist/execution/ReplayStore.d.ts +14 -0
- package/dist/execution/ReplayStore.d.ts.map +1 -1
- package/dist/execution/ReplayStore.js +8 -0
- package/dist/execution/ReplayStore.js.map +1 -1
- package/dist/execution/SafeExecutor.d.ts +125 -3
- package/dist/execution/SafeExecutor.d.ts.map +1 -1
- package/dist/execution/SafeExecutor.js +242 -68
- package/dist/execution/SafeExecutor.js.map +1 -1
- package/dist/intent/ExecutionIntent.d.ts +32 -0
- package/dist/intent/ExecutionIntent.d.ts.map +1 -1
- package/dist/intent/ExecutionIntent.js +7 -0
- package/dist/intent/ExecutionIntent.js.map +1 -1
- package/dist/intent/ExecutionSignals.d.ts +124 -0
- package/dist/intent/ExecutionSignals.d.ts.map +1 -0
- package/dist/intent/ExecutionSignals.js +124 -0
- package/dist/intent/ExecutionSignals.js.map +1 -0
- package/dist/intent/IntentCapture.d.ts.map +1 -1
- package/dist/intent/IntentCapture.js +9 -2
- package/dist/intent/IntentCapture.js.map +1 -1
- package/dist/testing/LocalAuthority.d.ts +17 -2
- package/dist/testing/LocalAuthority.d.ts.map +1 -1
- package/dist/testing/LocalAuthority.js +38 -1
- package/dist/testing/LocalAuthority.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { DecionisGate } from "../DecionisGate.js";
|
|
4
|
+
import { FailClosedDecision, } from "../DecisionAuthority.js";
|
|
5
|
+
import { immutableGateDecision } from "../ImmutableGateDecision.js";
|
|
6
|
+
const sha256 = z.string().regex(/^sha256:[0-9a-f]{64}$/);
|
|
7
|
+
const identifier = z.string().min(1).max(200);
|
|
8
|
+
/** The `decide` result (module ABI 3). Fields beyond these are not read. */
|
|
9
|
+
const DecideResultSchema = z.object({
|
|
10
|
+
verdict: z.enum(["ALLOW", "ESCALATE", "BLOCK"]),
|
|
11
|
+
reason_codes: z.array(identifier).max(50),
|
|
12
|
+
policy_version: identifier,
|
|
13
|
+
bundle: z.object({
|
|
14
|
+
bundle_id: identifier,
|
|
15
|
+
policy_version: identifier,
|
|
16
|
+
kid: identifier,
|
|
17
|
+
jti: identifier,
|
|
18
|
+
}),
|
|
19
|
+
authority_requirement: z.record(z.string(), z.unknown()).nullable(),
|
|
20
|
+
evaluation_digest: sha256,
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* A `DecisionAuthority` that decides inside the deployment, with the Decionis
|
|
24
|
+
* edge evaluator: the same verdict hosted `enforce-and-bind` gives for the
|
|
25
|
+
* same binding and bundle, with no network call on the way.
|
|
26
|
+
*
|
|
27
|
+
* - `ALLOW` in enforcement becomes a local authorization, held in
|
|
28
|
+
* `LocalGrants` and consumed once by `LocalAuthorizationVerifier`; there is
|
|
29
|
+
* no Decionis grant on this path and nothing to claim.
|
|
30
|
+
* - `BLOCK` is a refusal, as it is hosted.
|
|
31
|
+
* - `ESCALATE` in enforcement hands the same intent, with the same escalation
|
|
32
|
+
* options, to the hosted authority: the human-approval paths are hosted.
|
|
33
|
+
* - Approval evidence is only ever evaluated hosted.
|
|
34
|
+
* - No usable bundle, a module fault, or a result this host cannot read
|
|
35
|
+
* follows `onUnavailable`: the hosted authority, or a fail-closed `BLOCK`.
|
|
36
|
+
*
|
|
37
|
+
* This class is the open host. The evaluator is a separately licensed
|
|
38
|
+
* module this package does not contain; without it the executor runs on the
|
|
39
|
+
* hosted authority alone, exactly as it does without this class.
|
|
40
|
+
*/
|
|
41
|
+
export class EdgeDecisionAuthority {
|
|
42
|
+
options;
|
|
43
|
+
evaluationMode;
|
|
44
|
+
onUnavailable;
|
|
45
|
+
clock;
|
|
46
|
+
constructor(options) {
|
|
47
|
+
this.options = options;
|
|
48
|
+
const mode = options.mode ?? "ENFORCEMENT";
|
|
49
|
+
if (mode !== "ENFORCEMENT" && mode !== "SHADOW")
|
|
50
|
+
throw new Error("EDGE_MODE_INVALID");
|
|
51
|
+
const hostedMode = options.hosted.evaluationMode;
|
|
52
|
+
if (hostedMode !== undefined && hostedMode !== mode)
|
|
53
|
+
throw new Error("EDGE_MODE_MISMATCH");
|
|
54
|
+
const onUnavailable = options.onUnavailable ?? "hosted";
|
|
55
|
+
if (onUnavailable !== "hosted" && onUnavailable !== "block") {
|
|
56
|
+
throw new Error("EDGE_ON_UNAVAILABLE_INVALID");
|
|
57
|
+
}
|
|
58
|
+
this.evaluationMode = mode;
|
|
59
|
+
this.onUnavailable = onUnavailable;
|
|
60
|
+
this.clock = options.clock ?? Date.now;
|
|
61
|
+
}
|
|
62
|
+
async evaluate(captured, evidence, options = {}) {
|
|
63
|
+
if (evidence !== undefined)
|
|
64
|
+
return await this.options.hosted.evaluate(captured, evidence, options);
|
|
65
|
+
const replayed = await this.replayed(captured);
|
|
66
|
+
if (replayed !== null)
|
|
67
|
+
return FailClosedDecision.create(captured.intentHash, replayed);
|
|
68
|
+
const now = this.clock();
|
|
69
|
+
const bundle = this.options.bundles.current(now);
|
|
70
|
+
if (bundle === null) {
|
|
71
|
+
return await this.unavailable(captured, "EDGE_BUNDLE_UNAVAILABLE", null, options);
|
|
72
|
+
}
|
|
73
|
+
let envelope;
|
|
74
|
+
try {
|
|
75
|
+
envelope = this.options.module.decide(bundle.handle, {
|
|
76
|
+
binding: DecionisGate.binding(captured),
|
|
77
|
+
mode: this.evaluationMode,
|
|
78
|
+
now: new Date(now).toISOString(),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return await this.unavailable(captured, "EDGE_MODULE_FAULTED", null, options);
|
|
83
|
+
}
|
|
84
|
+
if (!envelope.ok) {
|
|
85
|
+
return await this.unavailable(captured, "EDGE_MODULE_REFUSED", envelope.code, options);
|
|
86
|
+
}
|
|
87
|
+
const parsed = DecideResultSchema.safeParse(envelope.result);
|
|
88
|
+
if (!parsed.success || !EdgeDecisionAuthority.sameBundle(parsed.data, bundle)) {
|
|
89
|
+
return await this.unavailable(captured, "EDGE_RESULT_INVALID", null, options);
|
|
90
|
+
}
|
|
91
|
+
const result = parsed.data;
|
|
92
|
+
const delegated = result.verdict === "ESCALATE" && this.evaluationMode === "ENFORCEMENT";
|
|
93
|
+
const decisionId = EdgeDecisionAuthority.decisionId(captured, result);
|
|
94
|
+
try {
|
|
95
|
+
this.options.record?.({
|
|
96
|
+
event: "EDGE_DECISION",
|
|
97
|
+
mode: this.evaluationMode,
|
|
98
|
+
intent_id: captured.intent.intentId,
|
|
99
|
+
intent_hash: captured.intentHash,
|
|
100
|
+
decision_id: decisionId,
|
|
101
|
+
verdict: result.verdict,
|
|
102
|
+
reason_codes: [...result.reason_codes],
|
|
103
|
+
policy_version: result.policy_version,
|
|
104
|
+
bundle_id: result.bundle.bundle_id,
|
|
105
|
+
kid: result.bundle.kid,
|
|
106
|
+
jti: result.bundle.jti,
|
|
107
|
+
evaluation_digest: result.evaluation_digest,
|
|
108
|
+
delegated,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return FailClosedDecision.create(captured.intentHash, "EDGE_RECORD_UNAVAILABLE");
|
|
113
|
+
}
|
|
114
|
+
if (delegated)
|
|
115
|
+
return await this.options.hosted.evaluate(captured, undefined, options);
|
|
116
|
+
return this.local(captured, result, decisionId, bundle, now);
|
|
117
|
+
}
|
|
118
|
+
local(captured, result, decisionId, bundle, now) {
|
|
119
|
+
const dossierId = `edge:${result.evaluation_digest}`;
|
|
120
|
+
let authorization = null;
|
|
121
|
+
if (result.verdict === "ALLOW" && this.evaluationMode === "ENFORCEMENT") {
|
|
122
|
+
// The authorization lives no longer than the intent or the bundle.
|
|
123
|
+
const expiresAtMs = Math.min(Date.parse(captured.intent.expiresAt), bundle.expiresAtMs);
|
|
124
|
+
if (!(expiresAtMs > now)) {
|
|
125
|
+
return FailClosedDecision.create(captured.intentHash, "INTENT_EXPIRED");
|
|
126
|
+
}
|
|
127
|
+
const expiresAt = new Date(expiresAtMs).toISOString();
|
|
128
|
+
const token = this.options.grants.issue({
|
|
129
|
+
intentId: captured.intent.intentId,
|
|
130
|
+
intentHash: captured.intentHash,
|
|
131
|
+
decisionId,
|
|
132
|
+
dossierId,
|
|
133
|
+
expiresAt,
|
|
134
|
+
});
|
|
135
|
+
authorization = { token, expiresAt };
|
|
136
|
+
}
|
|
137
|
+
return immutableGateDecision({
|
|
138
|
+
verdict: result.verdict,
|
|
139
|
+
decisionId,
|
|
140
|
+
dossierId,
|
|
141
|
+
intentHash: captured.intentHash,
|
|
142
|
+
reasonCodes: result.reason_codes,
|
|
143
|
+
authorization,
|
|
144
|
+
failClosed: false,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
async unavailable(captured, reason, moduleCode, options) {
|
|
148
|
+
const fallback = this.onUnavailable === "hosted" ? "HOSTED" : "BLOCK";
|
|
149
|
+
try {
|
|
150
|
+
this.options.record?.({
|
|
151
|
+
event: "EDGE_UNAVAILABLE",
|
|
152
|
+
mode: this.evaluationMode,
|
|
153
|
+
intent_id: captured.intent.intentId,
|
|
154
|
+
intent_hash: captured.intentHash,
|
|
155
|
+
reason,
|
|
156
|
+
module_code: moduleCode !== null && /^[a-z][a-z0-9_]{0,62}$/.test(moduleCode) ? moduleCode : null,
|
|
157
|
+
fallback,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return FailClosedDecision.create(captured.intentHash, "EDGE_RECORD_UNAVAILABLE");
|
|
162
|
+
}
|
|
163
|
+
if (fallback === "HOSTED")
|
|
164
|
+
return await this.options.hosted.evaluate(captured, undefined, options);
|
|
165
|
+
return FailClosedDecision.create(captured.intentHash, reason);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Why an enforcement decision must not be made: the intent has already
|
|
169
|
+
* been claimed, or the store that would say so cannot be asked. Neither is
|
|
170
|
+
* a decision, so neither is recorded or counted.
|
|
171
|
+
*/
|
|
172
|
+
async replayed(captured) {
|
|
173
|
+
const store = this.options.replay;
|
|
174
|
+
if (this.evaluationMode !== "ENFORCEMENT" || store?.consumed === undefined)
|
|
175
|
+
return null;
|
|
176
|
+
try {
|
|
177
|
+
return (await store.consumed(captured.intent.intentId)) ? "INTENT_ALREADY_CONSUMED" : null;
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return "EDGE_REPLAY_STORE_UNAVAILABLE";
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/** The module must have decided on the bundle this host gave it. */
|
|
184
|
+
static sameBundle(result, bundle) {
|
|
185
|
+
return (result.bundle.bundle_id === bundle.bundleId &&
|
|
186
|
+
result.bundle.policy_version === bundle.policyVersion &&
|
|
187
|
+
result.bundle.kid === bundle.kid);
|
|
188
|
+
}
|
|
189
|
+
/** Unique per intent and evaluation, and derivable from the record that names it. */
|
|
190
|
+
static decisionId(captured, result) {
|
|
191
|
+
const digest = createHash("sha256")
|
|
192
|
+
.update(`${captured.intentHash}\n${result.evaluation_digest}\n${result.bundle.jti}`, "utf8")
|
|
193
|
+
.digest("hex");
|
|
194
|
+
return `edge:${digest.slice(0, 40)}`;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=EdgeDecisionAuthority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EdgeDecisionAuthority.js","sourceRoot":"","sources":["../../../src/decision/edge/EdgeDecisionAuthority.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** The module ABI this host speaks: ABI 2's bundle exports plus `decide`. */
|
|
2
|
+
export declare const EDGE_MODULE_ABI_VERSION = 3;
|
|
3
|
+
/** Why a module was refused, or why a call into it failed. Never a message from the module. */
|
|
4
|
+
export type EdgeModuleErrorCode = "EDGE_MODULE_UNREADABLE" | "EDGE_MODULE_INVALID" | "EDGE_MODULE_ABI_UNSUPPORTED" | "EDGE_MODULE_FAULTED";
|
|
5
|
+
export declare class EdgeModuleError extends Error {
|
|
6
|
+
readonly code: EdgeModuleErrorCode;
|
|
7
|
+
constructor(code: EdgeModuleErrorCode);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* One answer from the module: its result, or the refusal code it gave. The
|
|
11
|
+
* module's own message is dropped here; it may quote the input, and nothing
|
|
12
|
+
* of the input belongs in a log line.
|
|
13
|
+
*/
|
|
14
|
+
export type EdgeEnvelope = {
|
|
15
|
+
readonly ok: true;
|
|
16
|
+
readonly result: unknown;
|
|
17
|
+
} | {
|
|
18
|
+
readonly ok: false;
|
|
19
|
+
readonly code: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* The host side of the Decionis edge evaluator: the proprietary WebAssembly
|
|
23
|
+
* module, licensed separately and not part of this package, instantiated with
|
|
24
|
+
* no imports. This class knows the module's calling convention and nothing of
|
|
25
|
+
* its policy semantics.
|
|
26
|
+
*
|
|
27
|
+
* A module that does not export ABI 3 is refused at construction, so a
|
|
28
|
+
* process configured for the edge never starts on an older or a foreign
|
|
29
|
+
* module. A call that traps marks the instance faulted: its memory can no
|
|
30
|
+
* longer be trusted, so every later call refuses rather than answering from
|
|
31
|
+
* it.
|
|
32
|
+
*/
|
|
33
|
+
export declare class EdgeModule {
|
|
34
|
+
private readonly exports;
|
|
35
|
+
private faulted;
|
|
36
|
+
private readonly encoder;
|
|
37
|
+
private readonly decoder;
|
|
38
|
+
private constructor();
|
|
39
|
+
/** Reads, compiles and instantiates the module at `path`. */
|
|
40
|
+
static fromFile(path: string): EdgeModule;
|
|
41
|
+
/**
|
|
42
|
+
* Compiles and instantiates `bytes` synchronously, so a refusal is a
|
|
43
|
+
* refusal to start rather than a promise someone forgets to await.
|
|
44
|
+
*/
|
|
45
|
+
static fromBytes(bytes: Uint8Array<ArrayBuffer>): EdgeModule;
|
|
46
|
+
/** Checks an instance's exports against ABI 3. */
|
|
47
|
+
static fromExports(exports: WebAssembly.Exports): EdgeModule;
|
|
48
|
+
/** True once a call trapped; the instance answers nothing after that. */
|
|
49
|
+
get isFaulted(): boolean;
|
|
50
|
+
/** `load_bundle({signed_bundle, org_id, now})`. */
|
|
51
|
+
loadBundle(input: {
|
|
52
|
+
readonly signed_bundle: string;
|
|
53
|
+
readonly org_id: string;
|
|
54
|
+
readonly now: string;
|
|
55
|
+
}): EdgeEnvelope;
|
|
56
|
+
/** `decide(handle, {binding, mode, now})`. */
|
|
57
|
+
decide(handle: number, input: unknown): EdgeEnvelope;
|
|
58
|
+
/** `unload_bundle(handle)`: true when the handle was loaded and is now released. */
|
|
59
|
+
unloadBundle(handle: number): boolean;
|
|
60
|
+
private call;
|
|
61
|
+
private static envelope;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=EdgeModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EdgeModule.d.ts","sourceRoot":"","sources":["../../../src/decision/edge/EdgeModule.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,+FAA+F;AAC/F,MAAM,MAAM,mBAAmB,GAC3B,wBAAwB,GACxB,qBAAqB,GACrB,6BAA6B,GAC7B,qBAAqB,CAAC;AAE1B,qBAAa,eAAgB,SAAQ,KAAK;aACL,IAAI,EAAE,mBAAmB;gBAAzB,IAAI,EAAE,mBAAmB;CAI7D;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAuBlG;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;IAKD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAErE,OAAO;IAEP,6DAA6D;WAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAUhD;;;OAGG;WACW,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU;IAUnE,kDAAkD;WACpC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,GAAG,UAAU;IAyBnE,yEAAyE;IACzE,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,mDAAmD;IAC5C,UAAU,CAAC,KAAK,EAAE;QACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,GAAG,YAAY;IAIhB,8CAA8C;IACvC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,YAAY;IAI3D,oFAAoF;IAC7E,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAU5C,OAAO,CAAC,IAAI;IAuBZ,OAAO,CAAC,MAAM,CAAC,QAAQ;CAYxB"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
/** The module ABI this host speaks: ABI 2's bundle exports plus `decide`. */
|
|
3
|
+
export const EDGE_MODULE_ABI_VERSION = 3;
|
|
4
|
+
export class EdgeModuleError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
constructor(code) {
|
|
7
|
+
super(code);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.name = "EdgeModuleError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const FUNCTIONS = [
|
|
13
|
+
"alloc",
|
|
14
|
+
"dealloc",
|
|
15
|
+
"abi_version",
|
|
16
|
+
"load_bundle",
|
|
17
|
+
"evaluate_bundle",
|
|
18
|
+
"decide",
|
|
19
|
+
"unload_bundle",
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* The host side of the Decionis edge evaluator: the proprietary WebAssembly
|
|
23
|
+
* module, licensed separately and not part of this package, instantiated with
|
|
24
|
+
* no imports. This class knows the module's calling convention and nothing of
|
|
25
|
+
* its policy semantics.
|
|
26
|
+
*
|
|
27
|
+
* A module that does not export ABI 3 is refused at construction, so a
|
|
28
|
+
* process configured for the edge never starts on an older or a foreign
|
|
29
|
+
* module. A call that traps marks the instance faulted: its memory can no
|
|
30
|
+
* longer be trusted, so every later call refuses rather than answering from
|
|
31
|
+
* it.
|
|
32
|
+
*/
|
|
33
|
+
export class EdgeModule {
|
|
34
|
+
exports;
|
|
35
|
+
faulted = false;
|
|
36
|
+
encoder = new TextEncoder();
|
|
37
|
+
decoder = new TextDecoder("utf-8", { fatal: true });
|
|
38
|
+
constructor(exports) {
|
|
39
|
+
this.exports = exports;
|
|
40
|
+
}
|
|
41
|
+
/** Reads, compiles and instantiates the module at `path`. */
|
|
42
|
+
static fromFile(path) {
|
|
43
|
+
let bytes;
|
|
44
|
+
try {
|
|
45
|
+
bytes = readFileSync(path);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
throw new EdgeModuleError("EDGE_MODULE_UNREADABLE");
|
|
49
|
+
}
|
|
50
|
+
return EdgeModule.fromBytes(bytes);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Compiles and instantiates `bytes` synchronously, so a refusal is a
|
|
54
|
+
* refusal to start rather than a promise someone forgets to await.
|
|
55
|
+
*/
|
|
56
|
+
static fromBytes(bytes) {
|
|
57
|
+
let instance;
|
|
58
|
+
try {
|
|
59
|
+
instance = new WebAssembly.Instance(new WebAssembly.Module(bytes), {});
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
throw new EdgeModuleError("EDGE_MODULE_INVALID");
|
|
63
|
+
}
|
|
64
|
+
return EdgeModule.fromExports(instance.exports);
|
|
65
|
+
}
|
|
66
|
+
/** Checks an instance's exports against ABI 3. */
|
|
67
|
+
static fromExports(exports) {
|
|
68
|
+
if (!(exports["memory"] instanceof WebAssembly.Memory)) {
|
|
69
|
+
throw new EdgeModuleError("EDGE_MODULE_INVALID");
|
|
70
|
+
}
|
|
71
|
+
for (const name of FUNCTIONS) {
|
|
72
|
+
if (typeof exports[name] !== "function") {
|
|
73
|
+
// An ABI 2 module lacks `decide`; it is an older module, not a broken one.
|
|
74
|
+
throw new EdgeModuleError(name === "decide" ? "EDGE_MODULE_ABI_UNSUPPORTED" : "EDGE_MODULE_INVALID");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const module = new EdgeModule(exports);
|
|
78
|
+
let version;
|
|
79
|
+
try {
|
|
80
|
+
version = module.exports.abi_version();
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
throw new EdgeModuleError("EDGE_MODULE_INVALID");
|
|
84
|
+
}
|
|
85
|
+
if (version !== EDGE_MODULE_ABI_VERSION) {
|
|
86
|
+
throw new EdgeModuleError("EDGE_MODULE_ABI_UNSUPPORTED");
|
|
87
|
+
}
|
|
88
|
+
return module;
|
|
89
|
+
}
|
|
90
|
+
/** True once a call trapped; the instance answers nothing after that. */
|
|
91
|
+
get isFaulted() {
|
|
92
|
+
return this.faulted;
|
|
93
|
+
}
|
|
94
|
+
/** `load_bundle({signed_bundle, org_id, now})`. */
|
|
95
|
+
loadBundle(input) {
|
|
96
|
+
return this.call(input, (ptr, len) => this.exports.load_bundle(ptr, len));
|
|
97
|
+
}
|
|
98
|
+
/** `decide(handle, {binding, mode, now})`. */
|
|
99
|
+
decide(handle, input) {
|
|
100
|
+
return this.call(input, (ptr, len) => this.exports.decide(handle, ptr, len));
|
|
101
|
+
}
|
|
102
|
+
/** `unload_bundle(handle)`: true when the handle was loaded and is now released. */
|
|
103
|
+
unloadBundle(handle) {
|
|
104
|
+
if (this.faulted)
|
|
105
|
+
return false;
|
|
106
|
+
try {
|
|
107
|
+
return this.exports.unload_bundle(handle) === 1;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
this.faulted = true;
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
call(input, invoke) {
|
|
115
|
+
if (this.faulted)
|
|
116
|
+
throw new EdgeModuleError("EDGE_MODULE_FAULTED");
|
|
117
|
+
try {
|
|
118
|
+
const bytes = this.encoder.encode(JSON.stringify(input));
|
|
119
|
+
const ptr = this.exports.alloc(bytes.length);
|
|
120
|
+
if (ptr === 0)
|
|
121
|
+
throw new EdgeModuleError("EDGE_MODULE_FAULTED");
|
|
122
|
+
// The buffer is read after `alloc`, which may have grown the memory.
|
|
123
|
+
new Uint8Array(this.exports.memory.buffer, ptr, bytes.length).set(bytes);
|
|
124
|
+
const packed = invoke(ptr, bytes.length);
|
|
125
|
+
this.exports.dealloc(ptr, bytes.length);
|
|
126
|
+
const outPtr = Number(packed >> 32n);
|
|
127
|
+
const outLen = Number(packed & 0xffffffffn);
|
|
128
|
+
const text = this.decoder.decode(new Uint8Array(this.exports.memory.buffer, outPtr, outLen).slice());
|
|
129
|
+
this.exports.dealloc(outPtr, outLen);
|
|
130
|
+
return EdgeModule.envelope(JSON.parse(text));
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
this.faulted = true;
|
|
134
|
+
throw new EdgeModuleError("EDGE_MODULE_FAULTED");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
static envelope(value) {
|
|
138
|
+
const envelope = value;
|
|
139
|
+
if (envelope.ok === true && "result" in envelope)
|
|
140
|
+
return { ok: true, result: envelope.result };
|
|
141
|
+
if (envelope.ok === false && typeof envelope.error?.code === "string") {
|
|
142
|
+
return { ok: false, code: envelope.error.code };
|
|
143
|
+
}
|
|
144
|
+
throw new EdgeModuleError("EDGE_MODULE_FAULTED");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=EdgeModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EdgeModule.js","sourceRoot":"","sources":["../../../src/decision/edge/EdgeModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,8 @@ export type ActionExecutionAttempt = {
|
|
|
49
49
|
readonly receipt: string | null;
|
|
50
50
|
} | {
|
|
51
51
|
readonly status: "FAILED_BEFORE_DISPATCH";
|
|
52
|
+
/** The handler's own code, when it refused with a `PreDispatchRefusal`. */
|
|
53
|
+
readonly code?: string;
|
|
52
54
|
} | {
|
|
53
55
|
readonly status: "REFUSED_AFTER_DISPATCH";
|
|
54
56
|
readonly reason: string;
|
|
@@ -83,6 +85,27 @@ export declare class ProviderRefusal extends Error {
|
|
|
83
85
|
/** The provider's own reason, as a code; never its response body. */
|
|
84
86
|
reason: string);
|
|
85
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* What a handler throws when it refuses before anything was sent: the request
|
|
90
|
+
* cannot be built, a credential cannot be resolved, or the payload no longer
|
|
91
|
+
* matches what the authority bound.
|
|
92
|
+
*
|
|
93
|
+
* Any error thrown before the dispatch already counts as a failure before
|
|
94
|
+
* dispatch. This one says why: its code reaches the execution result and the
|
|
95
|
+
* audit trail instead of collapsing into HANDLER_FAILED_BEFORE_DISPATCH, so a
|
|
96
|
+
* payload that changed after the decision reads as PAYLOAD_BINDING_MISMATCH
|
|
97
|
+
* (BEAP-L3-ADP-05: what can fail before the dispatch boundary fails before
|
|
98
|
+
* it, and says so). A code that is not upper snake case is replaced with
|
|
99
|
+
* HANDLER_FAILED_BEFORE_DISPATCH, so a handler cannot write free text into the
|
|
100
|
+
* audit trail.
|
|
101
|
+
*
|
|
102
|
+
* Thrown inside the dispatch it means nothing more than any other error: the
|
|
103
|
+
* request left, so the outcome is unknown.
|
|
104
|
+
*/
|
|
105
|
+
export declare class PreDispatchRefusal extends Error {
|
|
106
|
+
readonly code: string;
|
|
107
|
+
constructor(code: string);
|
|
108
|
+
}
|
|
86
109
|
export declare class ActionRegistry {
|
|
87
110
|
private readonly actions;
|
|
88
111
|
private readonly pendingReconciliations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionRegistry.d.ts","sourceRoot":"","sources":["../../src/execution/ActionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,sBAAsB,CAAC,WAAW;IACjD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClG;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,2BAA2B,CAAC,WAAW;IACtD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,MAAM,sBAAsB,CAAC,OAAO,IACtC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACnC;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAEnC,MAAM,WAAW,aAAa,CAAC,WAAW,EAAE,OAAO;IACjD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAClF,gFAAgF;IAChF,SAAS,CAAC,CACR,OAAO,EAAE,2BAA2B,CAAC,WAAW,CAAC,GAChD,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;CAC/E;AAUD,MAAM,MAAM,sBAAsB,GAC9B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3F;
|
|
1
|
+
{"version":3,"file":"ActionRegistry.d.ts","sourceRoot":"","sources":["../../src/execution/ActionRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,34 @@ export class ProviderRefusal extends Error {
|
|
|
27
27
|
this.name = "ProviderRefusal";
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
/** A pre-dispatch refusal code: upper snake case, as every reason code here is. */
|
|
31
|
+
const PRE_DISPATCH_CODE = /^[A-Z][A-Z0-9_]{2,63}$/;
|
|
32
|
+
/**
|
|
33
|
+
* What a handler throws when it refuses before anything was sent: the request
|
|
34
|
+
* cannot be built, a credential cannot be resolved, or the payload no longer
|
|
35
|
+
* matches what the authority bound.
|
|
36
|
+
*
|
|
37
|
+
* Any error thrown before the dispatch already counts as a failure before
|
|
38
|
+
* dispatch. This one says why: its code reaches the execution result and the
|
|
39
|
+
* audit trail instead of collapsing into HANDLER_FAILED_BEFORE_DISPATCH, so a
|
|
40
|
+
* payload that changed after the decision reads as PAYLOAD_BINDING_MISMATCH
|
|
41
|
+
* (BEAP-L3-ADP-05: what can fail before the dispatch boundary fails before
|
|
42
|
+
* it, and says so). A code that is not upper snake case is replaced with
|
|
43
|
+
* HANDLER_FAILED_BEFORE_DISPATCH, so a handler cannot write free text into the
|
|
44
|
+
* audit trail.
|
|
45
|
+
*
|
|
46
|
+
* Thrown inside the dispatch it means nothing more than any other error: the
|
|
47
|
+
* request left, so the outcome is unknown.
|
|
48
|
+
*/
|
|
49
|
+
export class PreDispatchRefusal extends Error {
|
|
50
|
+
code;
|
|
51
|
+
constructor(code) {
|
|
52
|
+
const safe = PRE_DISPATCH_CODE.test(code) ? code : "HANDLER_FAILED_BEFORE_DISPATCH";
|
|
53
|
+
super(safe);
|
|
54
|
+
this.name = "PreDispatchRefusal";
|
|
55
|
+
this.code = safe;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
30
58
|
export class ActionRegistry {
|
|
31
59
|
actions = new Map();
|
|
32
60
|
pendingReconciliations = new Map();
|
|
@@ -107,8 +135,10 @@ export class ActionRegistry {
|
|
|
107
135
|
if (dispatched && error instanceof ProviderRefusal) {
|
|
108
136
|
return { status: "REFUSED_AFTER_DISPATCH", reason: error.reason, receipt };
|
|
109
137
|
}
|
|
110
|
-
|
|
111
|
-
|
|
138
|
+
if (dispatched)
|
|
139
|
+
return { status: "UNKNOWN_AFTER_DISPATCH", receipt };
|
|
140
|
+
return error instanceof PreDispatchRefusal
|
|
141
|
+
? { status: "FAILED_BEFORE_DISPATCH", code: error.code }
|
|
112
142
|
: { status: "FAILED_BEFORE_DISPATCH" };
|
|
113
143
|
}
|
|
114
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionRegistry.js","sourceRoot":"","sources":["../../src/execution/ActionRegistry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ActionRegistry.js","sourceRoot":"","sources":["../../src/execution/ActionRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorizationVerifier.d.ts","sourceRoot":"","sources":["../../src/execution/AuthorizationVerifier.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AuthorizationVerifier.d.ts","sourceRoot":"","sources":["../../src/execution/AuthorizationVerifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -178,8 +178,13 @@ export class DecionisGrantVerifier {
|
|
|
178
178
|
intent_hash: captured.intentHash,
|
|
179
179
|
intent: CanonicalIntentHasher.bindingOf(captured.intent),
|
|
180
180
|
// A Presence-bound decision is re-verified by the authority at claim
|
|
181
|
-
// time, so the same evidence must accompany the claim.
|
|
182
|
-
|
|
181
|
+
// time, so the same evidence must accompany the claim. A presence
|
|
182
|
+
// attestation is verified once, at evaluation, where the authority
|
|
183
|
+
// records it with the grant; the claim contract carries Presence
|
|
184
|
+
// evidence only, so an attestation is not sent again here.
|
|
185
|
+
...(decision.evidence?.humanApproval?.provider === "presence"
|
|
186
|
+
? { evidence: decision.evidence }
|
|
187
|
+
: {}),
|
|
183
188
|
consumed_by: captured.intent.actor.id,
|
|
184
189
|
commit_correlation_id: commitCorrelationId,
|
|
185
190
|
}),
|