attenu-guard 0.1.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 +46 -0
- package/LICENSE +202 -0
- package/README.md +200 -0
- package/SECURITY.md +34 -0
- package/bin/attenu-guard.js +4 -0
- package/dist/cjs/adapters/langgraph.d.ts +174 -0
- package/dist/cjs/adapters/langgraph.d.ts.map +1 -0
- package/dist/cjs/adapters/langgraph.js +242 -0
- package/dist/cjs/adapters/langgraph.js.map +1 -0
- package/dist/cjs/audit.d.ts +82 -0
- package/dist/cjs/audit.d.ts.map +1 -0
- package/dist/cjs/audit.js +195 -0
- package/dist/cjs/audit.js.map +1 -0
- package/dist/cjs/authority.d.ts +114 -0
- package/dist/cjs/authority.d.ts.map +1 -0
- package/dist/cjs/authority.js +238 -0
- package/dist/cjs/authority.js.map +1 -0
- package/dist/cjs/canonical.d.ts +91 -0
- package/dist/cjs/canonical.d.ts.map +1 -0
- package/dist/cjs/canonical.js +372 -0
- package/dist/cjs/canonical.js.map +1 -0
- package/dist/cjs/ceilings.d.ts +211 -0
- package/dist/cjs/ceilings.d.ts.map +1 -0
- package/dist/cjs/ceilings.js +476 -0
- package/dist/cjs/ceilings.js.map +1 -0
- package/dist/cjs/chain.d.ts +106 -0
- package/dist/cjs/chain.d.ts.map +1 -0
- package/dist/cjs/chain.js +0 -0
- package/dist/cjs/chain.js.map +1 -0
- package/dist/cjs/cli.d.ts +16 -0
- package/dist/cjs/cli.d.ts.map +1 -0
- package/dist/cjs/cli.js +100 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/evidence.d.ts +163 -0
- package/dist/cjs/evidence.d.ts.map +1 -0
- package/dist/cjs/evidence.js +409 -0
- package/dist/cjs/evidence.js.map +1 -0
- package/dist/cjs/guard.d.ts +186 -0
- package/dist/cjs/guard.d.ts.map +1 -0
- package/dist/cjs/guard.js +432 -0
- package/dist/cjs/guard.js.map +1 -0
- package/dist/cjs/index.d.ts +52 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +99 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/reasons.d.ts +93 -0
- package/dist/cjs/reasons.d.ts.map +1 -0
- package/dist/cjs/reasons.js +139 -0
- package/dist/cjs/reasons.js.map +1 -0
- package/dist/cjs/strikes.d.ts +24 -0
- package/dist/cjs/strikes.d.ts.map +1 -0
- package/dist/cjs/strikes.js +30 -0
- package/dist/cjs/strikes.js.map +1 -0
- package/dist/cjs/wire.d.ts +83 -0
- package/dist/cjs/wire.d.ts.map +1 -0
- package/dist/cjs/wire.js +165 -0
- package/dist/cjs/wire.js.map +1 -0
- package/dist/esm/adapters/langgraph.d.ts +174 -0
- package/dist/esm/adapters/langgraph.d.ts.map +1 -0
- package/dist/esm/adapters/langgraph.js +199 -0
- package/dist/esm/adapters/langgraph.js.map +1 -0
- package/dist/esm/audit.d.ts +82 -0
- package/dist/esm/audit.d.ts.map +1 -0
- package/dist/esm/audit.js +189 -0
- package/dist/esm/audit.js.map +1 -0
- package/dist/esm/authority.d.ts +114 -0
- package/dist/esm/authority.d.ts.map +1 -0
- package/dist/esm/authority.js +233 -0
- package/dist/esm/authority.js.map +1 -0
- package/dist/esm/canonical.d.ts +91 -0
- package/dist/esm/canonical.d.ts.map +1 -0
- package/dist/esm/canonical.js +359 -0
- package/dist/esm/canonical.js.map +1 -0
- package/dist/esm/ceilings.d.ts +211 -0
- package/dist/esm/ceilings.d.ts.map +1 -0
- package/dist/esm/ceilings.js +460 -0
- package/dist/esm/ceilings.js.map +1 -0
- package/dist/esm/chain.d.ts +106 -0
- package/dist/esm/chain.d.ts.map +1 -0
- package/dist/esm/chain.js +0 -0
- package/dist/esm/chain.js.map +1 -0
- package/dist/esm/cli.d.ts +16 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +97 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/evidence.d.ts +163 -0
- package/dist/esm/evidence.d.ts.map +1 -0
- package/dist/esm/evidence.js +398 -0
- package/dist/esm/evidence.js.map +1 -0
- package/dist/esm/guard.d.ts +186 -0
- package/dist/esm/guard.d.ts.map +1 -0
- package/dist/esm/guard.js +427 -0
- package/dist/esm/guard.js.map +1 -0
- package/dist/esm/index.d.ts +52 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +42 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/reasons.d.ts +93 -0
- package/dist/esm/reasons.d.ts.map +1 -0
- package/dist/esm/reasons.js +134 -0
- package/dist/esm/reasons.js.map +1 -0
- package/dist/esm/strikes.d.ts +24 -0
- package/dist/esm/strikes.d.ts.map +1 -0
- package/dist/esm/strikes.js +26 -0
- package/dist/esm/strikes.js.map +1 -0
- package/dist/esm/wire.d.ts +83 -0
- package/dist/esm/wire.d.ts.map +1 -0
- package/dist/esm/wire.js +159 -0
- package/dist/esm/wire.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* attenu-guard — enforced authority attenuation for multi-agent AI systems.
|
|
3
|
+
*
|
|
4
|
+
* A sub-agent's authority can never exceed its parent's, chains have hard
|
|
5
|
+
* ceilings, and any subtree can be revoked in one call — enforced in code, with
|
|
6
|
+
* a hash-chained audit log anyone can verify offline.
|
|
7
|
+
*
|
|
8
|
+
* import { Authority, Guard, RowLimit, EgressRank } from "attenu-guard";
|
|
9
|
+
*
|
|
10
|
+
* const orchestrator = Guard.issue("orchestrator", new Authority({
|
|
11
|
+
* scopes: ["crm.*", "mail.send"],
|
|
12
|
+
* ceilings: [new RowLimit(100_000), new EgressRank("any")],
|
|
13
|
+
* ttl: 3600,
|
|
14
|
+
* }));
|
|
15
|
+
*
|
|
16
|
+
* const summarizer = orchestrator.delegate("summarizer", new Authority({
|
|
17
|
+
* scopes: ["crm.read"],
|
|
18
|
+
* ceilings: [new RowLimit(5_000), new EgressRank("none")],
|
|
19
|
+
* ttl: 900,
|
|
20
|
+
* }), "summarise the Q3 pipeline");
|
|
21
|
+
*
|
|
22
|
+
* const decision = summarizer.check("crm.read", { context: { rows: 4200 } });
|
|
23
|
+
* if (!decision.allowed) console.log(decision.explain());
|
|
24
|
+
*
|
|
25
|
+
* summarizer.enforce("crm.export", { context: { egress: "any" } }); // throws
|
|
26
|
+
*
|
|
27
|
+
* The ledger and the evidence bundle use the same wire format as the Python
|
|
28
|
+
* library, verified by cross-language fixtures — a bundle exported by either
|
|
29
|
+
* one verifies with the other.
|
|
30
|
+
*/
|
|
31
|
+
export { Authority, AuthorityError } from "./authority.js";
|
|
32
|
+
export type { AuthorityInit, AuthorityWire } from "./authority.js";
|
|
33
|
+
export { Guard, AuthorityDenied } from "./guard.js";
|
|
34
|
+
export type { CheckOptions, IssueOptions, RecordDenialOptions } from "./guard.js";
|
|
35
|
+
export { Decision, Reason, ReasonCode, Disposition, DISPOSITIONS } from "./reasons.js";
|
|
36
|
+
export type { DispositionValue, ReasonCodeValue, ReasonInit } from "./reasons.js";
|
|
37
|
+
export { Allow, CallLimit, Deny, EgressRank, Prefix, RowLimit, SpendCap, UnknownCeiling, ceilingFromWire, ctxFieldOf, describe, isMetered, registerCeiling, } from "./ceilings.js";
|
|
38
|
+
export type { Ceiling, CeilingClass, Context } from "./ceilings.js";
|
|
39
|
+
export { AuditLog, GENESIS, SCHEMA_VERSION, chainIdOf, hashEntry } from "./audit.js";
|
|
40
|
+
export type { Anchor, AuditLogInit, LedgerEntry, Sink } from "./audit.js";
|
|
41
|
+
export { Chain, ManualClock, MonotonicClock } from "./chain.js";
|
|
42
|
+
export type { Clock, ChainInit, Node } from "./chain.js";
|
|
43
|
+
export { StrikePolicy } from "./strikes.js";
|
|
44
|
+
export type { StrikeMode, StrikePolicyInit } from "./strikes.js";
|
|
45
|
+
export { EvidenceLeakError, LEDGER_FIELDS, anchorFor, delegationGraph, denials, exportBundle, parseBundle, redactionReport, verifyBundle, } from "./evidence.js";
|
|
46
|
+
export type { Bundle, DelegationGraph, DenialRow, ExportOptions, GraphNode, RedactionReport, RedactionViolation, VerifyChecks, VerifyReport, } from "./evidence.js";
|
|
47
|
+
export { Ed25519Signer, Ed25519Verifier, HS256TestSigner } from "./wire.js";
|
|
48
|
+
export type { Signer } from "./wire.js";
|
|
49
|
+
export { RawNumber, canonicalBytes, canonicalJson, compareCodePoints, parseJson, pyJsonDumps, pyNumber, pyString, sortedStrings, toPlain, } from "./canonical.js";
|
|
50
|
+
export type { CJson, Json } from "./canonical.js";
|
|
51
|
+
export declare const VERSION = "0.1.0";
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvF,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EACL,KAAK,EACL,SAAS,EACT,IAAI,EACJ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,eAAe,EACf,UAAU,EACV,QAAQ,EACR,SAAS,EACT,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrF,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE1E,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAChE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,eAAe,EACf,OAAO,EACP,YAAY,EACZ,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,MAAM,EACN,eAAe,EACf,SAAS,EACT,aAAa,EACb,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5E,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EACL,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* attenu-guard — enforced authority attenuation for multi-agent AI systems.
|
|
4
|
+
*
|
|
5
|
+
* A sub-agent's authority can never exceed its parent's, chains have hard
|
|
6
|
+
* ceilings, and any subtree can be revoked in one call — enforced in code, with
|
|
7
|
+
* a hash-chained audit log anyone can verify offline.
|
|
8
|
+
*
|
|
9
|
+
* import { Authority, Guard, RowLimit, EgressRank } from "attenu-guard";
|
|
10
|
+
*
|
|
11
|
+
* const orchestrator = Guard.issue("orchestrator", new Authority({
|
|
12
|
+
* scopes: ["crm.*", "mail.send"],
|
|
13
|
+
* ceilings: [new RowLimit(100_000), new EgressRank("any")],
|
|
14
|
+
* ttl: 3600,
|
|
15
|
+
* }));
|
|
16
|
+
*
|
|
17
|
+
* const summarizer = orchestrator.delegate("summarizer", new Authority({
|
|
18
|
+
* scopes: ["crm.read"],
|
|
19
|
+
* ceilings: [new RowLimit(5_000), new EgressRank("none")],
|
|
20
|
+
* ttl: 900,
|
|
21
|
+
* }), "summarise the Q3 pipeline");
|
|
22
|
+
*
|
|
23
|
+
* const decision = summarizer.check("crm.read", { context: { rows: 4200 } });
|
|
24
|
+
* if (!decision.allowed) console.log(decision.explain());
|
|
25
|
+
*
|
|
26
|
+
* summarizer.enforce("crm.export", { context: { egress: "any" } }); // throws
|
|
27
|
+
*
|
|
28
|
+
* The ledger and the evidence bundle use the same wire format as the Python
|
|
29
|
+
* library, verified by cross-language fixtures — a bundle exported by either
|
|
30
|
+
* one verifies with the other.
|
|
31
|
+
*/
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
exports.pyNumber = exports.pyJsonDumps = exports.parseJson = exports.compareCodePoints = exports.canonicalJson = exports.canonicalBytes = exports.RawNumber = exports.HS256TestSigner = exports.Ed25519Verifier = exports.Ed25519Signer = exports.verifyBundle = exports.redactionReport = exports.parseBundle = exports.exportBundle = exports.denials = exports.delegationGraph = exports.anchorFor = exports.LEDGER_FIELDS = exports.EvidenceLeakError = exports.StrikePolicy = exports.MonotonicClock = exports.ManualClock = exports.Chain = exports.hashEntry = exports.chainIdOf = exports.SCHEMA_VERSION = exports.GENESIS = exports.AuditLog = exports.registerCeiling = exports.isMetered = exports.describe = exports.ctxFieldOf = exports.ceilingFromWire = exports.UnknownCeiling = exports.SpendCap = exports.RowLimit = exports.Prefix = exports.EgressRank = exports.Deny = exports.CallLimit = exports.Allow = exports.DISPOSITIONS = exports.Disposition = exports.ReasonCode = exports.Reason = exports.Decision = exports.AuthorityDenied = exports.Guard = exports.AuthorityError = exports.Authority = void 0;
|
|
34
|
+
exports.VERSION = exports.toPlain = exports.sortedStrings = exports.pyString = void 0;
|
|
35
|
+
var authority_js_1 = require("./authority.js");
|
|
36
|
+
Object.defineProperty(exports, "Authority", { enumerable: true, get: function () { return authority_js_1.Authority; } });
|
|
37
|
+
Object.defineProperty(exports, "AuthorityError", { enumerable: true, get: function () { return authority_js_1.AuthorityError; } });
|
|
38
|
+
var guard_js_1 = require("./guard.js");
|
|
39
|
+
Object.defineProperty(exports, "Guard", { enumerable: true, get: function () { return guard_js_1.Guard; } });
|
|
40
|
+
Object.defineProperty(exports, "AuthorityDenied", { enumerable: true, get: function () { return guard_js_1.AuthorityDenied; } });
|
|
41
|
+
var reasons_js_1 = require("./reasons.js");
|
|
42
|
+
Object.defineProperty(exports, "Decision", { enumerable: true, get: function () { return reasons_js_1.Decision; } });
|
|
43
|
+
Object.defineProperty(exports, "Reason", { enumerable: true, get: function () { return reasons_js_1.Reason; } });
|
|
44
|
+
Object.defineProperty(exports, "ReasonCode", { enumerable: true, get: function () { return reasons_js_1.ReasonCode; } });
|
|
45
|
+
Object.defineProperty(exports, "Disposition", { enumerable: true, get: function () { return reasons_js_1.Disposition; } });
|
|
46
|
+
Object.defineProperty(exports, "DISPOSITIONS", { enumerable: true, get: function () { return reasons_js_1.DISPOSITIONS; } });
|
|
47
|
+
var ceilings_js_1 = require("./ceilings.js");
|
|
48
|
+
Object.defineProperty(exports, "Allow", { enumerable: true, get: function () { return ceilings_js_1.Allow; } });
|
|
49
|
+
Object.defineProperty(exports, "CallLimit", { enumerable: true, get: function () { return ceilings_js_1.CallLimit; } });
|
|
50
|
+
Object.defineProperty(exports, "Deny", { enumerable: true, get: function () { return ceilings_js_1.Deny; } });
|
|
51
|
+
Object.defineProperty(exports, "EgressRank", { enumerable: true, get: function () { return ceilings_js_1.EgressRank; } });
|
|
52
|
+
Object.defineProperty(exports, "Prefix", { enumerable: true, get: function () { return ceilings_js_1.Prefix; } });
|
|
53
|
+
Object.defineProperty(exports, "RowLimit", { enumerable: true, get: function () { return ceilings_js_1.RowLimit; } });
|
|
54
|
+
Object.defineProperty(exports, "SpendCap", { enumerable: true, get: function () { return ceilings_js_1.SpendCap; } });
|
|
55
|
+
Object.defineProperty(exports, "UnknownCeiling", { enumerable: true, get: function () { return ceilings_js_1.UnknownCeiling; } });
|
|
56
|
+
Object.defineProperty(exports, "ceilingFromWire", { enumerable: true, get: function () { return ceilings_js_1.ceilingFromWire; } });
|
|
57
|
+
Object.defineProperty(exports, "ctxFieldOf", { enumerable: true, get: function () { return ceilings_js_1.ctxFieldOf; } });
|
|
58
|
+
Object.defineProperty(exports, "describe", { enumerable: true, get: function () { return ceilings_js_1.describe; } });
|
|
59
|
+
Object.defineProperty(exports, "isMetered", { enumerable: true, get: function () { return ceilings_js_1.isMetered; } });
|
|
60
|
+
Object.defineProperty(exports, "registerCeiling", { enumerable: true, get: function () { return ceilings_js_1.registerCeiling; } });
|
|
61
|
+
var audit_js_1 = require("./audit.js");
|
|
62
|
+
Object.defineProperty(exports, "AuditLog", { enumerable: true, get: function () { return audit_js_1.AuditLog; } });
|
|
63
|
+
Object.defineProperty(exports, "GENESIS", { enumerable: true, get: function () { return audit_js_1.GENESIS; } });
|
|
64
|
+
Object.defineProperty(exports, "SCHEMA_VERSION", { enumerable: true, get: function () { return audit_js_1.SCHEMA_VERSION; } });
|
|
65
|
+
Object.defineProperty(exports, "chainIdOf", { enumerable: true, get: function () { return audit_js_1.chainIdOf; } });
|
|
66
|
+
Object.defineProperty(exports, "hashEntry", { enumerable: true, get: function () { return audit_js_1.hashEntry; } });
|
|
67
|
+
var chain_js_1 = require("./chain.js");
|
|
68
|
+
Object.defineProperty(exports, "Chain", { enumerable: true, get: function () { return chain_js_1.Chain; } });
|
|
69
|
+
Object.defineProperty(exports, "ManualClock", { enumerable: true, get: function () { return chain_js_1.ManualClock; } });
|
|
70
|
+
Object.defineProperty(exports, "MonotonicClock", { enumerable: true, get: function () { return chain_js_1.MonotonicClock; } });
|
|
71
|
+
var strikes_js_1 = require("./strikes.js");
|
|
72
|
+
Object.defineProperty(exports, "StrikePolicy", { enumerable: true, get: function () { return strikes_js_1.StrikePolicy; } });
|
|
73
|
+
var evidence_js_1 = require("./evidence.js");
|
|
74
|
+
Object.defineProperty(exports, "EvidenceLeakError", { enumerable: true, get: function () { return evidence_js_1.EvidenceLeakError; } });
|
|
75
|
+
Object.defineProperty(exports, "LEDGER_FIELDS", { enumerable: true, get: function () { return evidence_js_1.LEDGER_FIELDS; } });
|
|
76
|
+
Object.defineProperty(exports, "anchorFor", { enumerable: true, get: function () { return evidence_js_1.anchorFor; } });
|
|
77
|
+
Object.defineProperty(exports, "delegationGraph", { enumerable: true, get: function () { return evidence_js_1.delegationGraph; } });
|
|
78
|
+
Object.defineProperty(exports, "denials", { enumerable: true, get: function () { return evidence_js_1.denials; } });
|
|
79
|
+
Object.defineProperty(exports, "exportBundle", { enumerable: true, get: function () { return evidence_js_1.exportBundle; } });
|
|
80
|
+
Object.defineProperty(exports, "parseBundle", { enumerable: true, get: function () { return evidence_js_1.parseBundle; } });
|
|
81
|
+
Object.defineProperty(exports, "redactionReport", { enumerable: true, get: function () { return evidence_js_1.redactionReport; } });
|
|
82
|
+
Object.defineProperty(exports, "verifyBundle", { enumerable: true, get: function () { return evidence_js_1.verifyBundle; } });
|
|
83
|
+
var wire_js_1 = require("./wire.js");
|
|
84
|
+
Object.defineProperty(exports, "Ed25519Signer", { enumerable: true, get: function () { return wire_js_1.Ed25519Signer; } });
|
|
85
|
+
Object.defineProperty(exports, "Ed25519Verifier", { enumerable: true, get: function () { return wire_js_1.Ed25519Verifier; } });
|
|
86
|
+
Object.defineProperty(exports, "HS256TestSigner", { enumerable: true, get: function () { return wire_js_1.HS256TestSigner; } });
|
|
87
|
+
var canonical_js_1 = require("./canonical.js");
|
|
88
|
+
Object.defineProperty(exports, "RawNumber", { enumerable: true, get: function () { return canonical_js_1.RawNumber; } });
|
|
89
|
+
Object.defineProperty(exports, "canonicalBytes", { enumerable: true, get: function () { return canonical_js_1.canonicalBytes; } });
|
|
90
|
+
Object.defineProperty(exports, "canonicalJson", { enumerable: true, get: function () { return canonical_js_1.canonicalJson; } });
|
|
91
|
+
Object.defineProperty(exports, "compareCodePoints", { enumerable: true, get: function () { return canonical_js_1.compareCodePoints; } });
|
|
92
|
+
Object.defineProperty(exports, "parseJson", { enumerable: true, get: function () { return canonical_js_1.parseJson; } });
|
|
93
|
+
Object.defineProperty(exports, "pyJsonDumps", { enumerable: true, get: function () { return canonical_js_1.pyJsonDumps; } });
|
|
94
|
+
Object.defineProperty(exports, "pyNumber", { enumerable: true, get: function () { return canonical_js_1.pyNumber; } });
|
|
95
|
+
Object.defineProperty(exports, "pyString", { enumerable: true, get: function () { return canonical_js_1.pyString; } });
|
|
96
|
+
Object.defineProperty(exports, "sortedStrings", { enumerable: true, get: function () { return canonical_js_1.sortedStrings; } });
|
|
97
|
+
Object.defineProperty(exports, "toPlain", { enumerable: true, get: function () { return canonical_js_1.toPlain; } });
|
|
98
|
+
exports.VERSION = "0.1.0";
|
|
99
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;;;;AAEH,+CAA2D;AAAlD,yGAAA,SAAS,OAAA;AAAE,8GAAA,cAAc,OAAA;AAGlC,uCAAoD;AAA3C,iGAAA,KAAK,OAAA;AAAE,2GAAA,eAAe,OAAA;AAG/B,2CAAuF;AAA9E,sGAAA,QAAQ,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,wGAAA,UAAU,OAAA;AAAE,yGAAA,WAAW,OAAA;AAAE,0GAAA,YAAY,OAAA;AAGhE,6CAcuB;AAbrB,oGAAA,KAAK,OAAA;AACL,wGAAA,SAAS,OAAA;AACT,mGAAA,IAAI,OAAA;AACJ,yGAAA,UAAU,OAAA;AACV,qGAAA,MAAM,OAAA;AACN,uGAAA,QAAQ,OAAA;AACR,uGAAA,QAAQ,OAAA;AACR,6GAAA,cAAc,OAAA;AACd,8GAAA,eAAe,OAAA;AACf,yGAAA,UAAU,OAAA;AACV,uGAAA,QAAQ,OAAA;AACR,wGAAA,SAAS,OAAA;AACT,8GAAA,eAAe,OAAA;AAIjB,uCAAqF;AAA5E,oGAAA,QAAQ,OAAA;AAAE,mGAAA,OAAO,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,qGAAA,SAAS,OAAA;AAGhE,uCAAgE;AAAvD,iGAAA,KAAK,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,0GAAA,cAAc,OAAA;AAG3C,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AAGrB,6CAUuB;AATrB,gHAAA,iBAAiB,OAAA;AACjB,4GAAA,aAAa,OAAA;AACb,wGAAA,SAAS,OAAA;AACT,8GAAA,eAAe,OAAA;AACf,sGAAA,OAAO,OAAA;AACP,2GAAA,YAAY,OAAA;AACZ,0GAAA,WAAW,OAAA;AACX,8GAAA,eAAe,OAAA;AACf,2GAAA,YAAY,OAAA;AAcd,qCAA4E;AAAnE,wGAAA,aAAa,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,0GAAA,eAAe,OAAA;AAGxD,+CAWwB;AAVtB,yGAAA,SAAS,OAAA;AACT,8GAAA,cAAc,OAAA;AACd,6GAAA,aAAa,OAAA;AACb,iHAAA,iBAAiB,OAAA;AACjB,yGAAA,SAAS,OAAA;AACT,2GAAA,WAAW,OAAA;AACX,wGAAA,QAAQ,OAAA;AACR,wGAAA,QAAQ,OAAA;AACR,6GAAA,aAAa,OAAA;AACb,uGAAA,OAAO,OAAA;AAII,QAAA,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* reasons.ts — the machine-readable outcome vocabulary for authorization decisions.
|
|
3
|
+
*
|
|
4
|
+
* Every policy evaluation produces a `Decision` carrying zero or more `Reason`s.
|
|
5
|
+
* A denial without a reason is a bug, so every deny path attaches at least one
|
|
6
|
+
* `Reason` with a stable code from `ReasonCode`.
|
|
7
|
+
*
|
|
8
|
+
* The code strings — not the classes — are the contract. They are what the audit
|
|
9
|
+
* ledger stores and what survives a process or language boundary, so they match
|
|
10
|
+
* the Python library's `attenu_guard.reasons` value for value.
|
|
11
|
+
*/
|
|
12
|
+
import type { Json } from "./canonical.js";
|
|
13
|
+
/**
|
|
14
|
+
* Stable string constants for machine-readable denial reasons. Never rename an
|
|
15
|
+
* existing value; add new ones instead.
|
|
16
|
+
*/
|
|
17
|
+
export declare const ReasonCode: {
|
|
18
|
+
readonly SCOPE_NOT_GRANTED: "scope_not_granted";
|
|
19
|
+
readonly CEILING_EXCEEDED: "ceiling_exceeded";
|
|
20
|
+
readonly EXPIRED: "expired";
|
|
21
|
+
readonly REVOKED: "revoked";
|
|
22
|
+
readonly INTEGRITY: "integrity";
|
|
23
|
+
readonly DEPTH_EXCEEDED: "depth_exceeded";
|
|
24
|
+
readonly FANOUT_EXCEEDED: "fanout_exceeded";
|
|
25
|
+
readonly UNMETERED: "unmetered";
|
|
26
|
+
/** Fail-closed outcome for a ceiling type this build does not recognise. */
|
|
27
|
+
readonly UNKNOWN_CONSTRAINT: "unknown_constraint";
|
|
28
|
+
readonly CHAIN_REVOKED: "chain_revoked";
|
|
29
|
+
readonly AGENT_BANNED: "agent_banned";
|
|
30
|
+
readonly TTL_EXPIRED: "ttl_expired";
|
|
31
|
+
readonly MAX_DEPTH: "max_depth";
|
|
32
|
+
readonly MAX_FANOUT: "max_fanout";
|
|
33
|
+
readonly CHAIN_CEILING: "chain_ceiling";
|
|
34
|
+
/** The principal holds no authority at all in this chain. */
|
|
35
|
+
readonly NO_AUTHORITY: "no_authority";
|
|
36
|
+
};
|
|
37
|
+
export type ReasonCodeValue = (typeof ReasonCode)[keyof typeof ReasonCode];
|
|
38
|
+
/**
|
|
39
|
+
* WHY a denied scope was not in the node's authority — the ledger's answer to
|
|
40
|
+
* "held, or over-reach?". The library records what its caller states; it never
|
|
41
|
+
* derives. Never rename a value.
|
|
42
|
+
*/
|
|
43
|
+
export declare const Disposition: {
|
|
44
|
+
/** Known, curated, waiting on a human decision. */
|
|
45
|
+
readonly HELD_PENDING_GRANT: "held_pending_grant";
|
|
46
|
+
/** Resolvable only to a tier-2 heuristic that is never granted. */
|
|
47
|
+
readonly WITHHELD_TIER2: "withheld_tier2";
|
|
48
|
+
/** No authority known for this tool at all. */
|
|
49
|
+
readonly UNRESOLVED: "unresolved";
|
|
50
|
+
/** Resolved and grantable, but not held by THIS node — real over-reach. */
|
|
51
|
+
readonly OUT_OF_AUTHORITY: "out_of_authority";
|
|
52
|
+
};
|
|
53
|
+
export type DispositionValue = (typeof Disposition)[keyof typeof Disposition];
|
|
54
|
+
export declare const DISPOSITIONS: ReadonlySet<string>;
|
|
55
|
+
export interface ReasonInit {
|
|
56
|
+
/** Which ceiling or dimension, e.g. "max_rows". */
|
|
57
|
+
constraint?: string | null;
|
|
58
|
+
/** The bound that applied. */
|
|
59
|
+
limit?: Json;
|
|
60
|
+
/** The value or action that violated it. */
|
|
61
|
+
requested?: Json;
|
|
62
|
+
/** Free-text, human-readable detail. */
|
|
63
|
+
message?: string;
|
|
64
|
+
}
|
|
65
|
+
/** One specific cause of a denial. */
|
|
66
|
+
export declare class Reason {
|
|
67
|
+
readonly code: string;
|
|
68
|
+
readonly constraint: string | null;
|
|
69
|
+
readonly limit: Json;
|
|
70
|
+
readonly requested: Json;
|
|
71
|
+
readonly message: string;
|
|
72
|
+
constructor(code: string, init?: ReasonInit);
|
|
73
|
+
toDict(): Record<string, Json>;
|
|
74
|
+
toString(): string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The result of a policy evaluation. Truthiness lives on `.allowed` — JavaScript
|
|
78
|
+
* has no `__bool__`, so call sites read `if (decision.allowed)`.
|
|
79
|
+
*
|
|
80
|
+
* `determiningNode` names the chain node whose state was decisive.
|
|
81
|
+
*/
|
|
82
|
+
export declare class Decision {
|
|
83
|
+
readonly allowed: boolean;
|
|
84
|
+
readonly reasons: readonly Reason[];
|
|
85
|
+
readonly determiningNode: string | null;
|
|
86
|
+
constructor(allowed: boolean, reasons?: readonly Reason[], determiningNode?: string | null);
|
|
87
|
+
/** A single human-readable line — for logs, CLIs and error messages. */
|
|
88
|
+
explain(): string;
|
|
89
|
+
toDict(): Record<string, Json>;
|
|
90
|
+
static allow(node?: string | null): Decision;
|
|
91
|
+
static deny(reasons: Reason | readonly Reason[], node?: string | null): Decision;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=reasons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasons.d.ts","sourceRoot":"","sources":["../../src/reasons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;IASrB,4EAA4E;;;;;;;;IAU5E,6DAA6D;;CAErD,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAE3E;;;;GAIG;AACH,eAAO,MAAM,WAAW;IACtB,mDAAmD;;IAEnD,mEAAmE;;IAEnE,+CAA+C;;IAE/C,2EAA2E;;CAEnE,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAE9E,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAAuC,CAAC;AAErF,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,8BAA8B;IAC9B,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,4CAA4C;IAC5C,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sCAAsC;AACtC,qBAAa,MAAM;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe;IAQ/C,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;IAU9B,QAAQ,IAAI,MAAM;CAQnB;AAQD;;;;;GAKG;AACH,qBAAa,QAAQ;IAEjB,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;gBAF9B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,SAAS,MAAM,EAAO,EAC/B,eAAe,GAAE,MAAM,GAAG,IAAW;IAGhD,wEAAwE;IACxE,OAAO,IAAI,MAAM;IAMjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;IAQ9B,MAAM,CAAC,KAAK,CAAC,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,QAAQ;IAIlD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,QAAQ;CAIvF"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* reasons.ts — the machine-readable outcome vocabulary for authorization decisions.
|
|
4
|
+
*
|
|
5
|
+
* Every policy evaluation produces a `Decision` carrying zero or more `Reason`s.
|
|
6
|
+
* A denial without a reason is a bug, so every deny path attaches at least one
|
|
7
|
+
* `Reason` with a stable code from `ReasonCode`.
|
|
8
|
+
*
|
|
9
|
+
* The code strings — not the classes — are the contract. They are what the audit
|
|
10
|
+
* ledger stores and what survives a process or language boundary, so they match
|
|
11
|
+
* the Python library's `attenu_guard.reasons` value for value.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.Decision = exports.Reason = exports.DISPOSITIONS = exports.Disposition = exports.ReasonCode = void 0;
|
|
15
|
+
/**
|
|
16
|
+
* Stable string constants for machine-readable denial reasons. Never rename an
|
|
17
|
+
* existing value; add new ones instead.
|
|
18
|
+
*/
|
|
19
|
+
exports.ReasonCode = {
|
|
20
|
+
SCOPE_NOT_GRANTED: "scope_not_granted",
|
|
21
|
+
CEILING_EXCEEDED: "ceiling_exceeded",
|
|
22
|
+
EXPIRED: "expired",
|
|
23
|
+
REVOKED: "revoked",
|
|
24
|
+
INTEGRITY: "integrity",
|
|
25
|
+
DEPTH_EXCEEDED: "depth_exceeded",
|
|
26
|
+
FANOUT_EXCEEDED: "fanout_exceeded",
|
|
27
|
+
UNMETERED: "unmetered",
|
|
28
|
+
/** Fail-closed outcome for a ceiling type this build does not recognise. */
|
|
29
|
+
UNKNOWN_CONSTRAINT: "unknown_constraint",
|
|
30
|
+
// Structural failures — the reason strings an `AuthorityError` carries when a
|
|
31
|
+
// DELEGATION is refused. These are the published v0.1 audit vocabulary.
|
|
32
|
+
CHAIN_REVOKED: "chain_revoked",
|
|
33
|
+
AGENT_BANNED: "agent_banned",
|
|
34
|
+
TTL_EXPIRED: "ttl_expired",
|
|
35
|
+
MAX_DEPTH: "max_depth",
|
|
36
|
+
MAX_FANOUT: "max_fanout",
|
|
37
|
+
CHAIN_CEILING: "chain_ceiling",
|
|
38
|
+
/** The principal holds no authority at all in this chain. */
|
|
39
|
+
NO_AUTHORITY: "no_authority",
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* WHY a denied scope was not in the node's authority — the ledger's answer to
|
|
43
|
+
* "held, or over-reach?". The library records what its caller states; it never
|
|
44
|
+
* derives. Never rename a value.
|
|
45
|
+
*/
|
|
46
|
+
exports.Disposition = {
|
|
47
|
+
/** Known, curated, waiting on a human decision. */
|
|
48
|
+
HELD_PENDING_GRANT: "held_pending_grant",
|
|
49
|
+
/** Resolvable only to a tier-2 heuristic that is never granted. */
|
|
50
|
+
WITHHELD_TIER2: "withheld_tier2",
|
|
51
|
+
/** No authority known for this tool at all. */
|
|
52
|
+
UNRESOLVED: "unresolved",
|
|
53
|
+
/** Resolved and grantable, but not held by THIS node — real over-reach. */
|
|
54
|
+
OUT_OF_AUTHORITY: "out_of_authority",
|
|
55
|
+
};
|
|
56
|
+
exports.DISPOSITIONS = new Set(Object.values(exports.Disposition));
|
|
57
|
+
/** One specific cause of a denial. */
|
|
58
|
+
class Reason {
|
|
59
|
+
code;
|
|
60
|
+
constraint;
|
|
61
|
+
limit;
|
|
62
|
+
requested;
|
|
63
|
+
message;
|
|
64
|
+
constructor(code, init = {}) {
|
|
65
|
+
this.code = code;
|
|
66
|
+
this.constraint = init.constraint ?? null;
|
|
67
|
+
this.limit = init.limit ?? null;
|
|
68
|
+
this.requested = init.requested ?? null;
|
|
69
|
+
this.message = init.message ?? "";
|
|
70
|
+
}
|
|
71
|
+
toDict() {
|
|
72
|
+
return {
|
|
73
|
+
code: this.code,
|
|
74
|
+
constraint: this.constraint,
|
|
75
|
+
limit: this.limit,
|
|
76
|
+
requested: this.requested,
|
|
77
|
+
message: this.message,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
toString() {
|
|
81
|
+
const bits = [this.code];
|
|
82
|
+
if (this.constraint !== null)
|
|
83
|
+
bits.push(`constraint=${this.constraint}`);
|
|
84
|
+
if (this.limit !== null)
|
|
85
|
+
bits.push(`limit=${renderValue(this.limit)}`);
|
|
86
|
+
if (this.requested !== null)
|
|
87
|
+
bits.push(`requested=${renderValue(this.requested)}`);
|
|
88
|
+
const line = bits.join(" ");
|
|
89
|
+
return this.message ? `${line}: ${this.message}` : line;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.Reason = Reason;
|
|
93
|
+
function renderValue(value) {
|
|
94
|
+
if (Array.isArray(value))
|
|
95
|
+
return `[${value.map(renderValue).join(", ")}]`;
|
|
96
|
+
if (value !== null && typeof value === "object")
|
|
97
|
+
return JSON.stringify(value);
|
|
98
|
+
return String(value);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The result of a policy evaluation. Truthiness lives on `.allowed` — JavaScript
|
|
102
|
+
* has no `__bool__`, so call sites read `if (decision.allowed)`.
|
|
103
|
+
*
|
|
104
|
+
* `determiningNode` names the chain node whose state was decisive.
|
|
105
|
+
*/
|
|
106
|
+
class Decision {
|
|
107
|
+
allowed;
|
|
108
|
+
reasons;
|
|
109
|
+
determiningNode;
|
|
110
|
+
constructor(allowed, reasons = [], determiningNode = null) {
|
|
111
|
+
this.allowed = allowed;
|
|
112
|
+
this.reasons = reasons;
|
|
113
|
+
this.determiningNode = determiningNode;
|
|
114
|
+
}
|
|
115
|
+
/** A single human-readable line — for logs, CLIs and error messages. */
|
|
116
|
+
explain() {
|
|
117
|
+
if (this.allowed)
|
|
118
|
+
return "allowed";
|
|
119
|
+
if (this.reasons.length === 0)
|
|
120
|
+
return "denied";
|
|
121
|
+
return "denied: " + this.reasons.map((r) => r.toString()).join("; ");
|
|
122
|
+
}
|
|
123
|
+
toDict() {
|
|
124
|
+
return {
|
|
125
|
+
allowed: this.allowed,
|
|
126
|
+
reasons: this.reasons.map((r) => r.toDict()),
|
|
127
|
+
determining_node: this.determiningNode,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
static allow(node = null) {
|
|
131
|
+
return new Decision(true, [], node);
|
|
132
|
+
}
|
|
133
|
+
static deny(reasons, node = null) {
|
|
134
|
+
const list = reasons instanceof Reason ? [reasons] : Array.from(reasons);
|
|
135
|
+
return new Decision(false, list, node);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.Decision = Decision;
|
|
139
|
+
//# sourceMappingURL=reasons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasons.js","sourceRoot":"","sources":["../../src/reasons.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strike policy — revoke a node after repeated denials.
|
|
3
|
+
*
|
|
4
|
+
* A denied agent that keeps probing the same wall is either broken or hostile.
|
|
5
|
+
* After N strikes the node is cascade-revoked and the parent can see why on the
|
|
6
|
+
* ledger. Off unless a policy is attached.
|
|
7
|
+
*/
|
|
8
|
+
export type StrikeMode = "same_scope" | "total";
|
|
9
|
+
export interface StrikePolicyInit {
|
|
10
|
+
/** A policy is only attached when wanted; `false` disarms without detaching. */
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
/** Strikes before revocation. */
|
|
13
|
+
n?: number;
|
|
14
|
+
/** `same_scope`: N denials of ONE scope. `total`: N denials across any scope. */
|
|
15
|
+
mode?: StrikeMode;
|
|
16
|
+
}
|
|
17
|
+
export declare class StrikePolicy {
|
|
18
|
+
readonly enabled: boolean;
|
|
19
|
+
readonly n: number;
|
|
20
|
+
readonly mode: StrikeMode;
|
|
21
|
+
constructor(init?: StrikePolicyInit);
|
|
22
|
+
key(nodeId: string, scope: string): string;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=strikes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strikes.d.ts","sourceRoot":"","sources":["../../src/strikes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;gBAEd,IAAI,GAAE,gBAAqB;IAUvC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;CAG3C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Strike policy — revoke a node after repeated denials.
|
|
4
|
+
*
|
|
5
|
+
* A denied agent that keeps probing the same wall is either broken or hostile.
|
|
6
|
+
* After N strikes the node is cascade-revoked and the parent can see why on the
|
|
7
|
+
* ledger. Off unless a policy is attached.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.StrikePolicy = void 0;
|
|
11
|
+
class StrikePolicy {
|
|
12
|
+
enabled;
|
|
13
|
+
n;
|
|
14
|
+
mode;
|
|
15
|
+
constructor(init = {}) {
|
|
16
|
+
this.enabled = init.enabled ?? true;
|
|
17
|
+
this.n = init.n ?? 3;
|
|
18
|
+
this.mode = init.mode ?? "same_scope";
|
|
19
|
+
if (this.mode !== "same_scope" && this.mode !== "total") {
|
|
20
|
+
throw new Error("mode must be 'same_scope' or 'total'");
|
|
21
|
+
}
|
|
22
|
+
if (this.n < 1)
|
|
23
|
+
throw new Error("n must be >= 1");
|
|
24
|
+
}
|
|
25
|
+
key(nodeId, scope) {
|
|
26
|
+
return this.mode === "same_scope" ? `${nodeId} ${scope}` : `${nodeId} *`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.StrikePolicy = StrikePolicy;
|
|
30
|
+
//# sourceMappingURL=strikes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strikes.js","sourceRoot":"","sources":["../../src/strikes.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAaH,MAAa,YAAY;IACd,OAAO,CAAU;IACjB,CAAC,CAAS;IACV,IAAI,CAAa;IAE1B,YAAY,OAAyB,EAAE;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QACpC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpD,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,KAAa;QAC/B,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAC3E,CAAC;CACF;AAlBD,oCAkBC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wire.ts — the signing and verification backends.
|
|
3
|
+
*
|
|
4
|
+
* Anchors and delegation tokens are signed over canonical JSON bytes. Two
|
|
5
|
+
* backends ship, matching the Python library's `attenu_guard.wire`:
|
|
6
|
+
*
|
|
7
|
+
* `HS256TestSigner` stdlib HMAC-SHA256, for tests, examples and local dev;
|
|
8
|
+
* `Ed25519Signer` the production signer the Internet-Draft requires, with
|
|
9
|
+
* `Ed25519Verifier` for anyone holding only the public half.
|
|
10
|
+
*
|
|
11
|
+
* Everything here is built on Node's own `node:crypto`, so the package keeps
|
|
12
|
+
* zero runtime dependencies. Ed25519 keys are wrapped in the fixed DER prefixes
|
|
13
|
+
* below rather than pulled from a library.
|
|
14
|
+
*/
|
|
15
|
+
import { type KeyObject } from "node:crypto";
|
|
16
|
+
/**
|
|
17
|
+
* The pluggable signing and verification backend. `alg` is the JOSE algorithm
|
|
18
|
+
* identifier that goes in a token header.
|
|
19
|
+
*/
|
|
20
|
+
export interface Signer {
|
|
21
|
+
readonly alg: string;
|
|
22
|
+
readonly kid?: string | null;
|
|
23
|
+
sign(signingInput: Buffer): Buffer;
|
|
24
|
+
verify(signingInput: Buffer, sig: Buffer, keyId?: string | null): boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* stdlib HMAC-SHA256 signer — the default for tests, examples and local dev,
|
|
28
|
+
* because it needs no key management at all.
|
|
29
|
+
*
|
|
30
|
+
* NOT FOR PRODUCTION. HMAC is symmetric: `sign` and `verify` use the identical
|
|
31
|
+
* secret, so anyone able to verify a bundle is also able to forge one. That
|
|
32
|
+
* precludes the property the draft is built around — public offline
|
|
33
|
+
* verification at an untrusted enforcement point — because every verifier would
|
|
34
|
+
* have to hold the minting secret. Use `Ed25519Signer` in production; this
|
|
35
|
+
* class exists so the wire format and the interop fixtures can be exercised
|
|
36
|
+
* with no key distribution.
|
|
37
|
+
*/
|
|
38
|
+
export declare class HS256TestSigner implements Signer {
|
|
39
|
+
private readonly secret;
|
|
40
|
+
readonly alg = "HS256";
|
|
41
|
+
readonly kid: string;
|
|
42
|
+
constructor(secret: Buffer, kid?: string);
|
|
43
|
+
sign(signingInput: Buffer): Buffer;
|
|
44
|
+
verify(signingInput: Buffer, sig: Buffer, _keyId?: string | null): boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The production signer the draft requires ("Implementations MUST support
|
|
48
|
+
* Ed25519"); JOSE alg "EdDSA". Public-key, so — unlike `HS256TestSigner` — a
|
|
49
|
+
* verifier never needs the signing secret, which is exactly what offline
|
|
50
|
+
* verification at an untrusted edge depends on.
|
|
51
|
+
*/
|
|
52
|
+
export declare class Ed25519Signer implements Signer {
|
|
53
|
+
readonly alg = "EdDSA";
|
|
54
|
+
readonly kid: string;
|
|
55
|
+
private readonly privateKey;
|
|
56
|
+
private readonly publicKey;
|
|
57
|
+
constructor(privateKey?: KeyObject, kid?: string);
|
|
58
|
+
/** A signer wrapping a freshly generated keypair. */
|
|
59
|
+
static generate(kid?: string): Ed25519Signer;
|
|
60
|
+
/** Rebuild a signer from the 32 raw bytes `privateBytesRaw` produced. */
|
|
61
|
+
static fromPrivateBytes(raw: Buffer, kid?: string): Ed25519Signer;
|
|
62
|
+
sign(signingInput: Buffer): Buffer;
|
|
63
|
+
verify(signingInput: Buffer, sig: Buffer, _keyId?: string | null): boolean;
|
|
64
|
+
/** The 32-byte raw public key — a trust anchor to distribute out of band. */
|
|
65
|
+
publicBytesRaw(): Buffer;
|
|
66
|
+
/** The 32-byte raw private key — what a key FILE stores, never a repo. */
|
|
67
|
+
privateBytesRaw(): Buffer;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The public-key-only counterpart of `Ed25519Signer` — what a console, an
|
|
71
|
+
* auditor or an ingest server holds. It verifies anchors signed by the matching
|
|
72
|
+
* private key and can never sign: `sign` throws.
|
|
73
|
+
*/
|
|
74
|
+
export declare class Ed25519Verifier implements Signer {
|
|
75
|
+
readonly alg = "EdDSA";
|
|
76
|
+
readonly kid: string;
|
|
77
|
+
private readonly publicKey;
|
|
78
|
+
constructor(publicBytesRaw: Buffer, kid?: string);
|
|
79
|
+
sign(_signingInput: Buffer): Buffer;
|
|
80
|
+
verify(signingInput: Buffer, sig: Buffer, _keyId?: string | null): boolean;
|
|
81
|
+
publicBytesRaw(): Buffer;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/wire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;CAC3E;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAK1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,QAAQ,CAAC,GAAG,WAAW;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAGF,MAAM,EAAE,MAAM,EAC/B,GAAG,SAAS;IAKd,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIlC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;CAO3E;AAwCD;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,QAAQ,CAAC,GAAG,WAAW;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,SAAc;IAYrD,qDAAqD;IACrD,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAc,GAAG,aAAa;IAIjD,yEAAyE;IACzE,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAc,GAAG,aAAa;IAItE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIlC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAQ1E,6EAA6E;IAC7E,cAAc,IAAI,MAAM;IAIxB,0EAA0E;IAC1E,eAAe,IAAI,MAAM;CAG1B;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAC5C,QAAQ,CAAC,GAAG,WAAW;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,cAAc,EAAE,MAAM,EAAE,GAAG,SAAc;IAKrD,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAInC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAQ1E,cAAc,IAAI,MAAM;CAGzB"}
|