@agenticprimitives/delegation 1.0.0-alpha.4 → 1.0.0-alpha.41
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 +19 -2
- package/dist/authority-chain.d.ts +59 -0
- package/dist/authority-chain.d.ts.map +1 -0
- package/dist/authority-chain.js +70 -0
- package/dist/authority-chain.js.map +1 -0
- package/dist/caveats.d.ts +196 -1
- package/dist/caveats.d.ts.map +1 -1
- package/dist/caveats.js +374 -2
- package/dist/caveats.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -2
- package/dist/client.js.map +1 -1
- package/dist/es256-evidence-minter.d.ts +28 -0
- package/dist/es256-evidence-minter.d.ts.map +1 -0
- package/dist/es256-evidence-minter.js +48 -0
- package/dist/es256-evidence-minter.js.map +1 -0
- package/dist/evaluator.d.ts +1 -1
- package/dist/evaluator.d.ts.map +1 -1
- package/dist/evaluator.js +102 -2
- package/dist/evaluator.js.map +1 -1
- package/dist/hash.d.ts +1 -1
- package/dist/hash.d.ts.map +1 -1
- package/dist/index.d.ts +40 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -8
- package/dist/index.js.map +1 -1
- package/dist/invocation-proof.d.ts +133 -0
- package/dist/invocation-proof.d.ts.map +1 -0
- package/dist/invocation-proof.js +157 -0
- package/dist/invocation-proof.js.map +1 -0
- package/dist/lineage.d.ts +70 -0
- package/dist/lineage.d.ts.map +1 -0
- package/dist/lineage.js +65 -0
- package/dist/lineage.js.map +1 -0
- package/dist/mandate-handlers.d.ts +15 -0
- package/dist/mandate-handlers.d.ts.map +1 -0
- package/dist/mandate-handlers.js +279 -0
- package/dist/mandate-handlers.js.map +1 -0
- package/dist/mandate.d.ts +265 -0
- package/dist/mandate.d.ts.map +1 -0
- package/dist/mandate.js +275 -0
- package/dist/mandate.js.map +1 -0
- package/dist/method-authorization.d.ts +120 -0
- package/dist/method-authorization.d.ts.map +1 -0
- package/dist/method-authorization.js +173 -0
- package/dist/method-authorization.js.map +1 -0
- package/dist/onchain.d.ts +40 -4
- package/dist/onchain.d.ts.map +1 -1
- package/dist/onchain.js +140 -6
- package/dist/onchain.js.map +1 -1
- package/dist/presentation-release.d.ts +94 -0
- package/dist/presentation-release.d.ts.map +1 -0
- package/dist/presentation-release.js +93 -0
- package/dist/presentation-release.js.map +1 -0
- package/dist/quorum.d.ts +26 -0
- package/dist/quorum.d.ts.map +1 -0
- package/dist/quorum.js +80 -0
- package/dist/quorum.js.map +1 -0
- package/dist/session-delegation.d.ts +34 -0
- package/dist/session-delegation.d.ts.map +1 -0
- package/dist/session-delegation.js +33 -0
- package/dist/session-delegation.js.map +1 -0
- package/dist/session-manager.d.ts +1 -2
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +15 -6
- package/dist/session-manager.js.map +1 -1
- package/dist/standing.d.ts +101 -0
- package/dist/standing.d.ts.map +1 -0
- package/dist/standing.js +132 -0
- package/dist/standing.js.map +1 -0
- package/dist/token.d.ts +89 -1
- package/dist/token.d.ts.map +1 -1
- package/dist/token.js +485 -123
- package/dist/token.js.map +1 -1
- package/dist/types.d.ts +141 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -1
- package/dist/types.js.map +1 -1
- package/dist/verify-authorization.d.ts +28 -0
- package/dist/verify-authorization.d.ts.map +1 -0
- package/dist/verify-authorization.js +73 -0
- package/dist/verify-authorization.js.map +1 -0
- package/package.json +25 -16
package/dist/caveats.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
// addresses are derived via keccak256('urn:smart-agent:<name>')[0:20]. The
|
|
6
6
|
// sentinels never live on-chain; their semantics live in this package's
|
|
7
7
|
// evaluator (off-chain only).
|
|
8
|
-
import { encodeAbiParameters } from 'viem';
|
|
9
|
-
import { keccak_256 } from '@noble/hashes/sha3';
|
|
8
|
+
import { encodeAbiParameters, decodeAbiParameters, keccak256 } from 'viem';
|
|
9
|
+
import { keccak_256 } from '@noble/hashes/sha3.js';
|
|
10
10
|
// ─── Off-chain sentinel addresses ────────────────────────────────────────
|
|
11
11
|
function sentinelAddress(urn) {
|
|
12
12
|
const hash = keccak_256(new TextEncoder().encode(urn));
|
|
@@ -18,6 +18,32 @@ function sentinelAddress(urn) {
|
|
|
18
18
|
export const MCP_TOOL_SCOPE_ENFORCER = sentinelAddress('urn:smart-agent:mcp-tool-scope');
|
|
19
19
|
export const DATA_SCOPE_ENFORCER = sentinelAddress('urn:smart-agent:data-scope');
|
|
20
20
|
export const DELEGATE_BINDING_ENFORCER = sentinelAddress('urn:smart-agent:delegate-binding');
|
|
21
|
+
/** Spec 278 — vault-key-use authorization sentinel. Off-chain only; the KAS
|
|
22
|
+
* (key-authorization) enforces the grant's scope. Inert in the on-chain evaluator. */
|
|
23
|
+
export const VAULT_KEY_USE_ENFORCER = sentinelAddress('urn:smart-agent:vault-key-use');
|
|
24
|
+
/** Spec 317 — vault-record-scope sentinel. Off-chain only; the resource server (demo-mcp vault
|
|
25
|
+
* runtime) enforces the grant's resource+op scope on every vault op. Inert in the on-chain evaluator. */
|
|
26
|
+
export const VAULT_RECORD_SCOPE_ENFORCER = sentinelAddress('urn:smart-agent:vault-record-scope');
|
|
27
|
+
/** Spec 408 §2.1 (R917-P-2) — session-audience sentinel. Off-chain only: tags the DEL-001 session leaf
|
|
28
|
+
* with the DELEGATES the session key may present the principal's delegations to. Judged in
|
|
29
|
+
* `sessionDelegateBindingError`; shape-checked in the evaluator; never redeemed on chain. */
|
|
30
|
+
export const SESSION_AUDIENCE_ENFORCER = sentinelAddress('urn:smart-agent:session-audience');
|
|
31
|
+
/** Spec 305 W2 / zkID alignment §3 (Z2) — presentation-scope sentinel. Off-chain only: the bounds of a
|
|
32
|
+
* `credential.present` wire — which verifier AUDIENCES, which PREDICATE programs (by digest), which ISSUER facets
|
|
33
|
+
* (by keyId) a delegate key may cause a device signature for. Judged by the presentation mandate handler
|
|
34
|
+
* (`presentationHandler.isSubset`) before the key signs; shape-checked in the evaluator; never redeemed on chain
|
|
35
|
+
* (a presentation never reaches the chain — the KEY is what enforces it, zkID alignment §3). */
|
|
36
|
+
export const PRESENTATION_SCOPE_ENFORCER = sentinelAddress('urn:smart-agent:presentation-scope');
|
|
37
|
+
export function encodePresentationScopeTerms(t) {
|
|
38
|
+
return encodeAbiParameters([{ type: 'string[]' }, { type: 'bytes32[]' }, { type: 'string[]' }, { type: 'uint32' }], [t.audiences, t.predicateDigests, t.issuerKeyIds, t.maxPresentations]);
|
|
39
|
+
}
|
|
40
|
+
export function decodePresentationScopeTerms(terms) {
|
|
41
|
+
const [audiences, predicateDigests, issuerKeyIds, maxPresentations] = decodeAbiParameters([{ type: 'string[]' }, { type: 'bytes32[]' }, { type: 'string[]' }, { type: 'uint32' }], terms);
|
|
42
|
+
return { audiences: [...audiences], predicateDigests: [...predicateDigests], issuerKeyIds: [...issuerKeyIds], maxPresentations: Number(maxPresentations) };
|
|
43
|
+
}
|
|
44
|
+
export function buildPresentationScopeCaveat(t) {
|
|
45
|
+
return buildCaveat(PRESENTATION_SCOPE_ENFORCER, encodePresentationScopeTerms(t));
|
|
46
|
+
}
|
|
21
47
|
// ─── Generic caveat builder ──────────────────────────────────────────────
|
|
22
48
|
export function buildCaveat(enforcer, terms, args) {
|
|
23
49
|
return { enforcer, terms, args: args ?? '0x' };
|
|
@@ -32,6 +58,27 @@ export function encodeTimestampTerms(validAfter, validUntil) {
|
|
|
32
58
|
}
|
|
33
59
|
return encodeAbiParameters([{ type: 'uint256' }, { type: 'uint256' }], [BigInt(validAfter), BigInt(validUntil)]);
|
|
34
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Read back what `encodeTimestampTerms` wrote.
|
|
63
|
+
*
|
|
64
|
+
* DECODERS LIVE WITH THEIR ENCODERS. These three were in `@agenticprimitives/a2a`, one package away
|
|
65
|
+
* from the functions that produce the bytes, under a comment reading "must mirror delegation's
|
|
66
|
+
* encoders byte-for-byte" — which is the comment you write when the compiler cannot check it for you.
|
|
67
|
+
* That split is not theoretical: `demo-sso-next` hand-rolled its own timestamp decode against a
|
|
68
|
+
* comment claiming `uint128`, when the encoder emits `uint256`.
|
|
69
|
+
*/
|
|
70
|
+
export function decodeTimestampTerms(terms) {
|
|
71
|
+
const [validAfter, validUntil] = decodeAbiParameters([{ type: 'uint256' }, { type: 'uint256' }], terms);
|
|
72
|
+
return { validAfter, validUntil };
|
|
73
|
+
}
|
|
74
|
+
export function decodeAllowedTargetsTerms(terms) {
|
|
75
|
+
const [targets] = decodeAbiParameters([{ type: 'address[]' }], terms);
|
|
76
|
+
return targets;
|
|
77
|
+
}
|
|
78
|
+
export function decodeAllowedMethodsTerms(terms) {
|
|
79
|
+
const [selectors] = decodeAbiParameters([{ type: 'bytes4[]' }], terms);
|
|
80
|
+
return selectors;
|
|
81
|
+
}
|
|
35
82
|
export function encodeValueTerms(maxValue) {
|
|
36
83
|
if (maxValue < 0n)
|
|
37
84
|
throw new Error('encodeValueTerms: maxValue must be non-negative');
|
|
@@ -52,6 +99,16 @@ export function encodeAllowedMethodsTerms(selectors) {
|
|
|
52
99
|
}
|
|
53
100
|
return encodeAbiParameters([{ type: 'bytes4[]' }], [selectors]);
|
|
54
101
|
}
|
|
102
|
+
/** Exact-calldata pinning (CallDataHashEnforcer — ADR-0027 / spec 249 RW1-4b): terms =
|
|
103
|
+
* abi.encode(bytes32 keccak256(callData)). Binds a (sub-)delegation to EXACTLY one call so a
|
|
104
|
+
* registry checking `verifyAuthorizationForCall` authorizes only that precise payload — not
|
|
105
|
+
* merely its target + selector. Pass the exact `execute(...)`/inner calldata the grant permits. */
|
|
106
|
+
export function encodeCallDataHashTerms(callData) {
|
|
107
|
+
if (!/^0x([0-9a-fA-F]{2})*$/.test(callData)) {
|
|
108
|
+
throw new Error('encodeCallDataHashTerms: callData must be 0x-prefixed even-length hex');
|
|
109
|
+
}
|
|
110
|
+
return encodeAbiParameters([{ type: 'bytes32' }], [keccak256(callData)]);
|
|
111
|
+
}
|
|
55
112
|
// ─── Off-chain sentinel caveat builders ──────────────────────────────────
|
|
56
113
|
export function buildMcpToolScopeCaveat(allowedTools) {
|
|
57
114
|
if (allowedTools.length === 0)
|
|
@@ -74,6 +131,141 @@ export function buildDataScopeCaveat(grants) {
|
|
|
74
131
|
], [grants]);
|
|
75
132
|
return { enforcer: DATA_SCOPE_ENFORCER, terms, args: '0x' };
|
|
76
133
|
}
|
|
134
|
+
const DATA_SCOPE_ABI = [
|
|
135
|
+
{
|
|
136
|
+
type: 'tuple[]',
|
|
137
|
+
components: [
|
|
138
|
+
{ name: 'server', type: 'string' },
|
|
139
|
+
{ name: 'resources', type: 'string[]' },
|
|
140
|
+
{ name: 'fields', type: 'string[]' },
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
/** Decode a `DATA_SCOPE` caveat's terms back to its grants. Used OFF-CHAIN by the resource server (the
|
|
145
|
+
* vault/MCP runtime) to scope the field projection — the on-chain evaluator treats the sentinel as inert. */
|
|
146
|
+
export function decodeDataScopeTerms(terms) {
|
|
147
|
+
const [grants] = decodeAbiParameters(DATA_SCOPE_ABI, terms);
|
|
148
|
+
return grants;
|
|
149
|
+
}
|
|
150
|
+
// VAULT_KEY_USE (spec 278 §3.2): the person SA authorizes a host to wield a KEK
|
|
151
|
+
// for bounded resources/ops. ABI shape mirrors `VaultKeyUseGrant`; the KAS decodes
|
|
152
|
+
// it (via `decodeVaultKeyUseTerms`) to check scope ⊇ request before releasing a key.
|
|
153
|
+
const VAULT_KEY_USE_COMPONENTS = [
|
|
154
|
+
{ name: 'vaultId', type: 'string' },
|
|
155
|
+
{ name: 'kmsKeyRef', type: 'string' },
|
|
156
|
+
{ name: 'resources', type: 'string[]' },
|
|
157
|
+
{ name: 'classificationCeiling', type: 'string' },
|
|
158
|
+
{ name: 'ops', type: 'string[]' },
|
|
159
|
+
{ name: 'noSubdelegation', type: 'bool' },
|
|
160
|
+
];
|
|
161
|
+
const VAULT_KEY_USE_ABI = [{ type: 'tuple', components: VAULT_KEY_USE_COMPONENTS }];
|
|
162
|
+
export function buildVaultKeyUseCaveat(grant) {
|
|
163
|
+
if (!grant.vaultId)
|
|
164
|
+
throw new Error('buildVaultKeyUseCaveat: vaultId required');
|
|
165
|
+
if (!grant.kmsKeyRef)
|
|
166
|
+
throw new Error('buildVaultKeyUseCaveat: kmsKeyRef required');
|
|
167
|
+
if (grant.resources.length === 0)
|
|
168
|
+
throw new Error('buildVaultKeyUseCaveat: at least one resource required');
|
|
169
|
+
if (grant.ops.length === 0)
|
|
170
|
+
throw new Error('buildVaultKeyUseCaveat: at least one op required');
|
|
171
|
+
if (!grant.classificationCeiling)
|
|
172
|
+
throw new Error('buildVaultKeyUseCaveat: classificationCeiling required');
|
|
173
|
+
if (grant.noSubdelegation !== true)
|
|
174
|
+
throw new Error('buildVaultKeyUseCaveat: noSubdelegation must be true (vault-key authorizations are non-subdelegable, spec 278 VKB-D5)');
|
|
175
|
+
const terms = encodeAbiParameters(VAULT_KEY_USE_ABI, [grant]);
|
|
176
|
+
return { enforcer: VAULT_KEY_USE_ENFORCER, terms, args: '0x' };
|
|
177
|
+
}
|
|
178
|
+
/** Decode a `VAULT_KEY_USE` caveat's terms back to its grant. Used by the KAS
|
|
179
|
+
* (key-authorization, P2) to evaluate the authorization's scope against a request. */
|
|
180
|
+
export function decodeVaultKeyUseTerms(terms) {
|
|
181
|
+
const [g] = decodeAbiParameters(VAULT_KEY_USE_ABI, terms);
|
|
182
|
+
return g;
|
|
183
|
+
}
|
|
184
|
+
// VAULT_RECORD_SCOPE (spec 317 §3.2): the delegator authorizes a delegate to perform bounded ops on
|
|
185
|
+
// bounded vault resources at a named server. Enforced OFF-CHAIN by the resource server (demo-mcp),
|
|
186
|
+
// intersected deny-by-default with the owner's vault-key binding. ABI mirrors `VaultRecordScopeGrant`.
|
|
187
|
+
const VAULT_RECORD_SCOPE_COMPONENTS = [
|
|
188
|
+
{ name: 'server', type: 'string' },
|
|
189
|
+
{ name: 'resources', type: 'string[]' },
|
|
190
|
+
{ name: 'ops', type: 'string[]' },
|
|
191
|
+
];
|
|
192
|
+
const VAULT_RECORD_SCOPE_ABI = [{ type: 'tuple[]', components: VAULT_RECORD_SCOPE_COMPONENTS }];
|
|
193
|
+
const VAULT_RECORD_SCOPE_OPS = new Set(['read', 'write', 'delete']);
|
|
194
|
+
export function buildVaultRecordScopeCaveat(grants) {
|
|
195
|
+
if (grants.length === 0)
|
|
196
|
+
throw new Error('buildVaultRecordScopeCaveat: at least one grant required');
|
|
197
|
+
for (const g of grants) {
|
|
198
|
+
if (!g.server)
|
|
199
|
+
throw new Error('buildVaultRecordScopeCaveat: grant.server required');
|
|
200
|
+
if (g.resources.length === 0)
|
|
201
|
+
throw new Error('buildVaultRecordScopeCaveat: at least one resource required');
|
|
202
|
+
for (const r of g.resources) {
|
|
203
|
+
// Namespace safety (spec 317 F3): resources are matched against the server's `vault:<recordType>`
|
|
204
|
+
// resource string, so they MUST be `vault:`-prefixed; a bare `*` is refused (no full-vault glob).
|
|
205
|
+
if (!r.startsWith('vault:'))
|
|
206
|
+
throw new Error(`buildVaultRecordScopeCaveat: resource "${r}" must be vault:-prefixed`);
|
|
207
|
+
if (r === 'vault:*' || r === 'vault:')
|
|
208
|
+
throw new Error(`buildVaultRecordScopeCaveat: resource "${r}" is too broad (whole-vault); scope to a record family`);
|
|
209
|
+
}
|
|
210
|
+
if (g.ops.length === 0)
|
|
211
|
+
throw new Error('buildVaultRecordScopeCaveat: at least one op required');
|
|
212
|
+
for (const op of g.ops) {
|
|
213
|
+
if (!VAULT_RECORD_SCOPE_OPS.has(op))
|
|
214
|
+
throw new Error(`buildVaultRecordScopeCaveat: unknown op "${op}" (expected read|write|delete)`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const terms = encodeAbiParameters(VAULT_RECORD_SCOPE_ABI, [grants]);
|
|
218
|
+
return { enforcer: VAULT_RECORD_SCOPE_ENFORCER, terms, args: '0x' };
|
|
219
|
+
}
|
|
220
|
+
/** Decode a `VAULT_RECORD_SCOPE` caveat's terms back to its grants. Used OFF-CHAIN by the resource
|
|
221
|
+
* server (demo-mcp vault runtime) to gate each vault op — the on-chain evaluator treats it as inert. */
|
|
222
|
+
export function decodeVaultRecordScopeTerms(terms) {
|
|
223
|
+
const [grants] = decodeAbiParameters(VAULT_RECORD_SCOPE_ABI, terms);
|
|
224
|
+
return grants;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* The CANONICAL off-chain enforcement decision for `VAULT_RECORD_SCOPE` grants (spec 317 §3.2). Every
|
|
228
|
+
* resource server MUST use this one matcher rather than re-implementing it — a divergent re-implementation
|
|
229
|
+
* is exactly where a widening bug creeps in (security-audit F3). Decision:
|
|
230
|
+
* - `recordScopes` absent/empty ⇒ `true` (the delegation carried no record-scope caveat → this gate is
|
|
231
|
+
* inert; the resource server's own per-owner authorization still applies — the two gates AND).
|
|
232
|
+
* - present ⇒ authorized ONLY if some grant (a) names `req.server` exactly (a grant for another server
|
|
233
|
+
* confers nothing here — F2), (b) whose `ops` include `req.op`, AND (c) whose `resources` cover
|
|
234
|
+
* `req.resource` by an ANCHORED match: exact string, or a single trailing-`*` prefix (`a.slice(0,-1)`
|
|
235
|
+
* is a `startsWith` prefix; a bare `*` is NOT honored). So `vault:message.body:*` matches
|
|
236
|
+
* `vault:message.body:<id>` but NOT `vault:message.body-evil` — F3. Deny-by-default otherwise.
|
|
237
|
+
* `req.resource`/`req.op` MUST be the server-recovered values (never client-supplied), and the grants MUST
|
|
238
|
+
* be the POST-VERIFY grants (decoded only after the delegation signature verified — never raw caveats).
|
|
239
|
+
*/
|
|
240
|
+
export function vaultRecordScopeAllows(recordScopes, req) {
|
|
241
|
+
// `undefined` = the delegation carries NO record-scope caveat: this matcher is inert and the vault-key
|
|
242
|
+
// binding alone decides (spec 317 §3.2). An EMPTY LIST is different (R917-P-8, spec 408 §2.8): a scope
|
|
243
|
+
// caveat that names no resource is a grant of nothing, never of everything.
|
|
244
|
+
if (recordScopes === undefined)
|
|
245
|
+
return true;
|
|
246
|
+
if (recordScopes.length === 0)
|
|
247
|
+
return false;
|
|
248
|
+
for (const g of recordScopes) {
|
|
249
|
+
if (g.server !== req.server)
|
|
250
|
+
continue;
|
|
251
|
+
if (!g.ops.includes(req.op))
|
|
252
|
+
continue;
|
|
253
|
+
for (const a of g.resources) {
|
|
254
|
+
if (a === req.resource)
|
|
255
|
+
return true;
|
|
256
|
+
if (a.endsWith('*') && wildcardPrefixNamesARecordType(a.slice(0, -1)) && req.resource.startsWith(a.slice(0, -1)))
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
/** R917-P-8 (spec 408 §2.8): a trailing-`*` pattern is honoured only when its prefix names a record type —
|
|
263
|
+
* `vault:message.body:*` and `vault:message.body*` do; `*`, `v*` and `vault:*` (a whole namespace) do not.
|
|
264
|
+
* The prefix must have a non-empty namespace AND a non-empty type segment. */
|
|
265
|
+
export function wildcardPrefixNamesARecordType(prefix) {
|
|
266
|
+
const seg = prefix.split(':');
|
|
267
|
+
return seg.length >= 2 && seg[0].length > 0 && seg[1].length > 0;
|
|
268
|
+
}
|
|
77
269
|
export function buildDelegateBindingCaveat(delegateSmartAccount, delegatePersonAgent) {
|
|
78
270
|
const terms = encodeAbiParameters([{ type: 'address' }, { type: 'address' }], [delegateSmartAccount, delegatePersonAgent]);
|
|
79
271
|
return { enforcer: DELEGATE_BINDING_ENFORCER, terms, args: '0x' };
|
|
@@ -113,4 +305,184 @@ export function buildQuorumCaveat(opts) {
|
|
|
113
305
|
], [opts.signers, opts.threshold, opts.approvedHashRegistry]);
|
|
114
306
|
return { enforcer: opts.enforcer, terms, args: '0x' };
|
|
115
307
|
}
|
|
308
|
+
// ── Spec 272 (PAY-DEL-1) — x402 payment-mandate caveats ───────────────────────────────────────────
|
|
309
|
+
/** The ONLY method an x402 payment delegation may invoke: `IERC20.transfer(address,uint256)`. */
|
|
310
|
+
export const PAYMENT_TRANSFER_SELECTOR = '0xa9059cbb';
|
|
311
|
+
/** Encode the immutable `PaymentEnforcer` terms. MUST match `PaymentEnforcer.sol` `abi.decode`
|
|
312
|
+
* order/types: (treasury, asset, maxAmountPerCharge, maxAggregate, maxRedemptionsPerWindow,
|
|
313
|
+
* windowSeconds) → 192 bytes. */
|
|
314
|
+
export function encodePaymentTerms(opts) {
|
|
315
|
+
if (opts.maxAmountPerCharge <= 0n)
|
|
316
|
+
throw new Error('encodePaymentTerms: maxAmountPerCharge must be > 0');
|
|
317
|
+
if (opts.maxAggregate < opts.maxAmountPerCharge) {
|
|
318
|
+
throw new Error('encodePaymentTerms: maxAggregate must be >= maxAmountPerCharge');
|
|
319
|
+
}
|
|
320
|
+
if (!Number.isInteger(opts.maxRedemptionsPerWindow) || opts.maxRedemptionsPerWindow <= 0) {
|
|
321
|
+
throw new Error('encodePaymentTerms: maxRedemptionsPerWindow must be a positive integer');
|
|
322
|
+
}
|
|
323
|
+
if (!Number.isInteger(opts.windowSeconds) || opts.windowSeconds <= 0) {
|
|
324
|
+
throw new Error('encodePaymentTerms: windowSeconds must be a positive integer');
|
|
325
|
+
}
|
|
326
|
+
return encodeAbiParameters([
|
|
327
|
+
{ type: 'address' },
|
|
328
|
+
{ type: 'address' },
|
|
329
|
+
{ type: 'uint256' },
|
|
330
|
+
{ type: 'uint256' },
|
|
331
|
+
{ type: 'uint32' },
|
|
332
|
+
{ type: 'uint32' },
|
|
333
|
+
], [
|
|
334
|
+
opts.payee,
|
|
335
|
+
opts.asset,
|
|
336
|
+
opts.maxAmountPerCharge,
|
|
337
|
+
opts.maxAggregate,
|
|
338
|
+
opts.maxRedemptionsPerWindow,
|
|
339
|
+
opts.windowSeconds,
|
|
340
|
+
]);
|
|
341
|
+
}
|
|
342
|
+
/** The inverse — spec 358 W4's keyring selector reads WHICH payee a payment mandate binds, so a
|
|
343
|
+
* fanned-out step can be judged under the mandate that names ITS payee. Reading terms is not verifying
|
|
344
|
+
* them: the verifier still judges the selected mandate alone. */
|
|
345
|
+
export function decodePaymentTerms(terms) {
|
|
346
|
+
const [payee, asset, maxAmountPerCharge, maxAggregate, maxRedemptionsPerWindow, windowSeconds] = decodeAbiParameters([{ type: 'address' }, { type: 'address' }, { type: 'uint256' }, { type: 'uint256' }, { type: 'uint256' }, { type: 'uint256' }], terms);
|
|
347
|
+
return { payee, asset, maxAmountPerCharge, maxAggregate, maxRedemptionsPerWindow: Number(maxRedemptionsPerWindow), windowSeconds: Number(windowSeconds) };
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* PAY-DEL-1 — the caveat set for an x402 PAYMENT delegation (delegator = reader, delegate = the
|
|
351
|
+
* paid service agent). Composes the stateful `PaymentEnforcer` (spend + windowed-frequency cap +
|
|
352
|
+
* transfer-only + single-use nonce) with `timestamp` (expiry), `allowedTargets` (USDC only), and
|
|
353
|
+
* `allowedMethods` (transfer only) so the on-chain enforcers and the off-chain mandate agree.
|
|
354
|
+
*
|
|
355
|
+
* Caveat `args` are left `'0x'` at mint; the rail executor fills the PaymentEnforcer caveat's `args`
|
|
356
|
+
* with `abi.encode(mandateId, nonce, resourceHash)` at REDEMPTION time (terms = mint, args = redeem).
|
|
357
|
+
* Resource/skill binding rides the mandate's `contextBinding`, not an on-chain caveat (PAY-WIRE-5).
|
|
358
|
+
*/
|
|
359
|
+
export function buildPaymentMandateCaveats(opts) {
|
|
360
|
+
return [
|
|
361
|
+
buildCaveat(opts.enforcers.payment, encodePaymentTerms(opts)),
|
|
362
|
+
buildCaveat(opts.enforcers.timestamp, encodeTimestampTerms(opts.validAfter ?? 0, opts.validUntil)),
|
|
363
|
+
buildCaveat(opts.enforcers.allowedTargets, encodeAllowedTargetsTerms([opts.asset])),
|
|
364
|
+
buildCaveat(opts.enforcers.allowedMethods, encodeAllowedMethodsTerms([PAYMENT_TRANSFER_SELECTOR])),
|
|
365
|
+
];
|
|
366
|
+
}
|
|
367
|
+
export function describePaymentMandate(opts) {
|
|
368
|
+
return {
|
|
369
|
+
recipient: opts.payee,
|
|
370
|
+
asset: opts.asset,
|
|
371
|
+
maxAmountPerCharge: opts.maxAmountPerCharge,
|
|
372
|
+
sessionBudget: opts.maxAggregate,
|
|
373
|
+
maxRedemptionsPerWindow: opts.maxRedemptionsPerWindow,
|
|
374
|
+
windowSeconds: opts.windowSeconds,
|
|
375
|
+
expiresAt: opts.validUntil,
|
|
376
|
+
revocable: true,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/** The `kind` word in the terms — keccak256 of a short name, so a reader can tell bindings apart. */
|
|
380
|
+
export const DIGEST_BINDING_KIND = {
|
|
381
|
+
intent: keccak256(new TextEncoder().encode('ap:intent')),
|
|
382
|
+
projection: keccak256(new TextEncoder().encode('ap:projection')),
|
|
383
|
+
offer: keccak256(new TextEncoder().encode('ap:offer')),
|
|
384
|
+
plan: keccak256(new TextEncoder().encode('ap:plan')),
|
|
385
|
+
};
|
|
386
|
+
/** Reverse map for decoders (lowercased kind hash → name). */
|
|
387
|
+
export const DIGEST_KIND_NAMES = new Map(Object.entries(DIGEST_BINDING_KIND).map(([k, v]) => [v.toLowerCase(), k]));
|
|
388
|
+
export function encodeDigestBindingTerms(kind, digest) {
|
|
389
|
+
if (!/^0x[0-9a-fA-F]{64}$/.test(digest))
|
|
390
|
+
throw new Error(`encodeDigestBindingTerms: ${kind} digest must be a bytes32 hex string`);
|
|
391
|
+
return encodeAbiParameters([{ type: 'bytes32' }, { type: 'bytes32' }], [DIGEST_BINDING_KIND[kind], digest]);
|
|
392
|
+
}
|
|
393
|
+
export function decodeDigestBindingTerms(terms) {
|
|
394
|
+
const [kindHash, digest] = decodeAbiParameters([{ type: 'bytes32' }, { type: 'bytes32' }], terms);
|
|
395
|
+
const kind = DIGEST_KIND_NAMES.get(kindHash.toLowerCase());
|
|
396
|
+
if (!kind)
|
|
397
|
+
throw new Error(`decodeDigestBindingTerms: unknown binding kind ${kindHash}`);
|
|
398
|
+
return { kind, digest };
|
|
399
|
+
}
|
|
400
|
+
export function encodeDigestBindingArgs(digest, scheme) {
|
|
401
|
+
// Generation 1 (an estate whose DigestBindingEnforcer predates spec 408) takes the presented digest alone —
|
|
402
|
+
// 32 bytes, no nonce, not single-use. A deployment fact the caller states; never inferred from a revert.
|
|
403
|
+
if (scheme.generation === 1)
|
|
404
|
+
return encodeAbiParameters([{ type: 'bytes32' }], [digest]);
|
|
405
|
+
if (!/^0x[0-9a-fA-F]{64}$/.test(scheme.stepNonce))
|
|
406
|
+
throw new Error('encodeDigestBindingArgs: stepNonce must be a bytes32 hex string');
|
|
407
|
+
return encodeAbiParameters([{ type: 'bytes32' }, { type: 'bytes32' }], [digest, scheme.stepNonce]);
|
|
408
|
+
}
|
|
409
|
+
/** THE ONE derivation of a step's redemption nonce: `keccak256("<intentDigest>:<operation>")` where `operation`
|
|
410
|
+
* is the step's LOGICAL request identity — its declared idempotency key when the step carries one, else its
|
|
411
|
+
* stable step ref (spec 410 §3). Two deliberately identical payments are two operations (distinct ids); one
|
|
412
|
+
* payment retried after a lost response is one (the same id, the same nonce, consumed once on chain). The same
|
|
413
|
+
* derivation `PaymentEnforcer`'s nonce uses, so a step's on-chain identity is one value everywhere. */
|
|
414
|
+
export function digestBindingStepNonce(intentDigest, operation) {
|
|
415
|
+
return keccak256(new TextEncoder().encode(`${intentDigest}:${operation}`));
|
|
416
|
+
}
|
|
417
|
+
// ─── Spec 410 §7 — the information-flow caveat ──────────────────────────────────────────────────────
|
|
418
|
+
/** terms = abi.encode(string[] classIris): what a write under this mandate MAY CARRY, as ontology classes. */
|
|
419
|
+
export function encodePayloadClassesTerms(classIris) {
|
|
420
|
+
const list = [...new Set(classIris.map((c) => c.trim()).filter(Boolean))].sort();
|
|
421
|
+
if (!list.length)
|
|
422
|
+
throw new Error('encodePayloadClassesTerms: at least one class IRI');
|
|
423
|
+
for (const c of list)
|
|
424
|
+
if (!/^https?:\/\/\S+#\S+$|^[a-z][a-z0-9]*:[A-Za-z][\w-]*$/.test(c))
|
|
425
|
+
throw new Error(`encodePayloadClassesTerms: not an ontology class IRI or CURIE: ${c}`);
|
|
426
|
+
return encodeAbiParameters([{ type: 'string[]' }], [list]);
|
|
427
|
+
}
|
|
428
|
+
export function decodePayloadClassesTerms(terms) {
|
|
429
|
+
const [list] = decodeAbiParameters([{ type: 'string[]' }], terms);
|
|
430
|
+
return [...list];
|
|
431
|
+
}
|
|
432
|
+
export function buildPayloadClassesCaveat(enforcer, classIris) {
|
|
433
|
+
return buildCaveat(enforcer, encodePayloadClassesTerms(classIris));
|
|
434
|
+
}
|
|
435
|
+
/** One digest-binding caveat. Args are NOT pre-filled: they are the redeemer's per-step commitment
|
|
436
|
+
* (`encodeDigestBindingArgs`), set at redemption — a pre-filled value would be one nonce for every step. */
|
|
437
|
+
export function buildDigestBindingCaveat(enforcer, kind, digest) {
|
|
438
|
+
return buildCaveat(enforcer, encodeDigestBindingTerms(kind, digest));
|
|
439
|
+
}
|
|
440
|
+
/** Every digest binding a delegation carries, by kind. Empty ⇒ a standing capability, not a mandate. */
|
|
441
|
+
export function readDigestBindings(caveats, enforcer) {
|
|
442
|
+
const out = {};
|
|
443
|
+
for (const c of caveats) {
|
|
444
|
+
if (c.enforcer.toLowerCase() !== enforcer.toLowerCase())
|
|
445
|
+
continue;
|
|
446
|
+
const { kind, digest } = decodeDigestBindingTerms(c.terms);
|
|
447
|
+
out[kind] = digest;
|
|
448
|
+
}
|
|
449
|
+
return out;
|
|
450
|
+
}
|
|
451
|
+
// ─── Spec 408 §2.1 — the session leaf's AUDIENCE ─────────────────────────────────────────────────
|
|
452
|
+
//
|
|
453
|
+
// A DEL-001 leaf says "the principal's SA vouches for this session key". Before this caveat it said
|
|
454
|
+
// nothing about WHERE: any leaf a principal ever signed (a relying app's session, a runtime key's)
|
|
455
|
+
// could present ANY delegation the principal ever signed, to anyone — narrow leaf + broad root = broad
|
|
456
|
+
// (R917-P-2). The leaf now names the delegates it may present to, and the verifier refuses a
|
|
457
|
+
// delegation whose delegate is not among them. terms = abi.encode(address[] delegates).
|
|
458
|
+
export function encodeSessionAudienceTerms(delegates) {
|
|
459
|
+
if (!delegates.length)
|
|
460
|
+
throw new Error('encodeSessionAudienceTerms: a session leaf must name at least one delegate it may present to');
|
|
461
|
+
for (const d of delegates)
|
|
462
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(d))
|
|
463
|
+
throw new Error(`encodeSessionAudienceTerms: ${d} is not an address`);
|
|
464
|
+
// Lowercased: viem refuses a mixed-case address that is not its checksum form, and case is not identity.
|
|
465
|
+
return encodeAbiParameters([{ type: 'address[]' }], [delegates.map((d) => d.toLowerCase())]);
|
|
466
|
+
}
|
|
467
|
+
export function decodeSessionAudienceTerms(terms) {
|
|
468
|
+
const [out] = decodeAbiParameters([{ type: 'address[]' }], terms);
|
|
469
|
+
if (!out.length)
|
|
470
|
+
throw new Error('decodeSessionAudienceTerms: empty audience');
|
|
471
|
+
return [...out];
|
|
472
|
+
}
|
|
473
|
+
export function buildSessionAudienceCaveat(delegates) {
|
|
474
|
+
return buildCaveat(SESSION_AUDIENCE_ENFORCER, encodeSessionAudienceTerms(delegates));
|
|
475
|
+
}
|
|
476
|
+
/** The audience a leaf carries (lowercased), or null when it carries none — which the verifier refuses. */
|
|
477
|
+
export function readSessionAudience(caveats) {
|
|
478
|
+
const c = caveats.find((x) => x.enforcer.toLowerCase() === SESSION_AUDIENCE_ENFORCER.toLowerCase());
|
|
479
|
+
if (!c)
|
|
480
|
+
return null;
|
|
481
|
+
try {
|
|
482
|
+
return decodeSessionAudienceTerms(c.terms).map((a) => a.toLowerCase());
|
|
483
|
+
}
|
|
484
|
+
catch {
|
|
485
|
+
return null;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
116
488
|
//# sourceMappingURL=caveats.js.map
|
package/dist/caveats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caveats.js","sourceRoot":"","sources":["../src/caveats.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"caveats.js","sourceRoot":"","sources":["../src/caveats.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Address, Hex } from '@agenticprimitives/types';
|
|
2
|
-
import type { Caveat, Delegation, DelegationClientOpts } from './types';
|
|
2
|
+
import type { Caveat, Delegation, DelegationClientOpts } from './types.js';
|
|
3
3
|
export declare class DelegationClient {
|
|
4
4
|
private readonly opts;
|
|
5
5
|
constructor(opts: DelegationClientOpts);
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAa3E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;gBAChC,IAAI,EAAE,oBAAoB;IAItC;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE;QAC5B,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,GAAG,CAAC;KACjB,GAAG,OAAO,CAAC,UAAU,CAAC;CA6BxB"}
|
package/dist/client.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
// resulting signature, paired with the Delegation struct, becomes a
|
|
6
6
|
// fully-formed Delegation that the DelegationManager + ERC-1271 path on
|
|
7
7
|
// the smart account can validate.
|
|
8
|
-
import { ROOT_AUTHORITY } from './types';
|
|
9
|
-
import { DELEGATION_EIP712_TYPES, delegationDomain } from './hash';
|
|
8
|
+
import { ROOT_AUTHORITY } from './types.js';
|
|
9
|
+
import { DELEGATION_EIP712_TYPES, delegationDomain } from './hash.js';
|
|
10
10
|
function randomSalt() {
|
|
11
11
|
const buf = new Uint8Array(32);
|
|
12
12
|
// 32-byte random; high bit cleared to keep BigInt sign-safe (uint256 still has full range).
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,oEAAoE;AACpE,wEAAwE;AACxE,kCAAkC;AAIlC,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,oEAAoE;AACpE,wEAAwE;AACxE,kCAAkC;AAIlC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEtE,SAAS,UAAU;IACjB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,4FAA4F;IAC5F,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,OAAO,gBAAgB;IACV,IAAI,CAAuB;IAC5C,YAAY,IAA0B;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,MAKrB;QACC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,cAAc,CAAC;QACrD,MAAM,UAAU,GAAkC;YAChD,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS;YACT,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI;SACL,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACrD,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACxE,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,YAAY;YACzB,OAAO,EAAE;gBACP,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;iBACf,CAAC,CAAC;gBACH,IAAI,EAAE,UAAU,CAAC,IAAI;aACtB;SACF,CAAC,CAAC;QAEH,OAAO,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface Es256EvidenceMinterInput {
|
|
2
|
+
/** The attestation key's P-256 private scalar (32 bytes, hex). */
|
|
3
|
+
privateKeyHex: string;
|
|
4
|
+
/** `iss`, as the key service pins it. */
|
|
5
|
+
issuer: string;
|
|
6
|
+
/** `aud`, as the key service pins it. */
|
|
7
|
+
audience: string;
|
|
8
|
+
/** Statement lifetime; the key service checks `exp`. Default 120 s. */
|
|
9
|
+
ttlSeconds?: number;
|
|
10
|
+
/** Clock skew the statement tolerates backwards (`nbf`/`iat` = now − skew); the pilot CVM's clock lags. Default 120 s. */
|
|
11
|
+
skewSeconds?: number;
|
|
12
|
+
now?: () => number;
|
|
13
|
+
randomId?: () => string;
|
|
14
|
+
}
|
|
15
|
+
export interface Es256EvidenceMinter {
|
|
16
|
+
readonly kid: string;
|
|
17
|
+
publicJwk(): {
|
|
18
|
+
kty: 'EC';
|
|
19
|
+
crv: 'P-256';
|
|
20
|
+
x: string;
|
|
21
|
+
y: string;
|
|
22
|
+
kid: string;
|
|
23
|
+
};
|
|
24
|
+
/** A signed statement for `subject` carrying `claims` beside iss/aud/sub/iat/nbf/exp/jti. */
|
|
25
|
+
mint(subject: string, claims: Record<string, string | number | boolean>): Promise<string>;
|
|
26
|
+
}
|
|
27
|
+
export declare function createEs256EvidenceMinter(input: Es256EvidenceMinterInput): Es256EvidenceMinter;
|
|
28
|
+
//# sourceMappingURL=es256-evidence-minter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es256-evidence-minter.d.ts","sourceRoot":"","sources":["../src/es256-evidence-minter.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0HAA0H;IAC1H,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,SAAS,IAAI;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5E,6FAA6F;IAC7F,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3F;AASD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB,GAAG,mBAAmB,CAuB9F"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// THE RELEASE'S OWN ATTESTATION KEY — the ES256 key a runtime signs its bound-evidence statements with (faithkms ADR-0012 /
|
|
2
|
+
// zkID alignment Z6). It lives beside `createPresentationRelease` because the statement IS the release's: what it judged. A key service's P-256 device key signs only under a statement naming the digest, the venue and the
|
|
3
|
+
// predicate digest the presentation release judged; this is the minter of that statement, as a compact JWS (RFC 7515)
|
|
4
|
+
// with JWT claims (RFC 7519): `iss` / `aud` pinned by the key service's `[authority_evidence]` section, `sub` = the actor
|
|
5
|
+
// the release acted for, `jti` fresh, a short window, and the caller's claims beside them.
|
|
6
|
+
//
|
|
7
|
+
// NOT a device key and NOT a person's key: it is a secret the runtime holds the way it holds its relay key, so it carries
|
|
8
|
+
// no local-provider production guard — the guard is the key service's: it verifies the statement against the JWKS the
|
|
9
|
+
// operator pinned, and refuses any other issuer. `kid` = RFC 7638 thumbprint, published beside the public JWK.
|
|
10
|
+
import { p256 } from '@noble/curves/nist.js';
|
|
11
|
+
import { hexToBytes } from 'viem';
|
|
12
|
+
import { p256JwkThumbprint } from '@agenticprimitives/key-custody';
|
|
13
|
+
const b64url = (b) => {
|
|
14
|
+
const bytes = typeof b === 'string' ? new TextEncoder().encode(b) : b;
|
|
15
|
+
let s = '';
|
|
16
|
+
for (let i = 0; i < bytes.length; i++)
|
|
17
|
+
s += String.fromCharCode(bytes[i]);
|
|
18
|
+
return btoa(s).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
19
|
+
};
|
|
20
|
+
export function createEs256EvidenceMinter(input) {
|
|
21
|
+
const hex = input.privateKeyHex.startsWith('0x') ? input.privateKeyHex : `0x${input.privateKeyHex}`;
|
|
22
|
+
const priv = hexToBytes(hex);
|
|
23
|
+
if (priv.length !== 32)
|
|
24
|
+
throw new Error(`[es256-evidence] a P-256 private key is 32 bytes; got ${priv.length}`);
|
|
25
|
+
if (!input.issuer || !input.audience)
|
|
26
|
+
throw new Error('[es256-evidence] issuer and audience are pinned by the key service and must be named');
|
|
27
|
+
const pub = p256.getPublicKey(priv, false);
|
|
28
|
+
const x = b64url(pub.slice(1, 33)), y = b64url(pub.slice(33, 65));
|
|
29
|
+
const kid = p256JwkThumbprint({ x, y });
|
|
30
|
+
const now = input.now ?? (() => Math.floor(Date.now() / 1000));
|
|
31
|
+
const randomId = input.randomId ?? (() => crypto.randomUUID());
|
|
32
|
+
const ttl = input.ttlSeconds ?? 120, skew = input.skewSeconds ?? 120;
|
|
33
|
+
const header = b64url(JSON.stringify({ alg: 'ES256', typ: 'JWT', kid }));
|
|
34
|
+
return {
|
|
35
|
+
kid,
|
|
36
|
+
publicJwk: () => ({ kty: 'EC', crv: 'P-256', x, y, kid }),
|
|
37
|
+
async mint(subject, claims) {
|
|
38
|
+
for (const k of ['iss', 'aud', 'sub', 'iat', 'nbf', 'exp', 'jti'])
|
|
39
|
+
if (k in claims)
|
|
40
|
+
throw new Error(`[es256-evidence] ${k} is the minter's, not the caller's`);
|
|
41
|
+
const t = now();
|
|
42
|
+
const body = b64url(JSON.stringify({ iss: input.issuer, aud: input.audience, sub: subject, iat: t - skew, nbf: t - skew, exp: t + ttl, jti: randomId(), ...claims }));
|
|
43
|
+
const sig = p256.sign(new TextEncoder().encode(`${header}.${body}`), priv, { prehash: true, lowS: true });
|
|
44
|
+
return `${header}.${body}.${b64url(sig)}`;
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=es256-evidence-minter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es256-evidence-minter.js","sourceRoot":"","sources":["../src/es256-evidence-minter.ts"],"names":[],"mappings":"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"}
|
package/dist/evaluator.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Caveat, CaveatContext, CaveatVerdict, EnforcerAddressMap, EvaluateOpts } from './types';
|
|
1
|
+
import type { Caveat, CaveatContext, CaveatVerdict, EnforcerAddressMap, EvaluateOpts } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Evaluate every caveat in the array. Returns one verdict per caveat,
|
|
4
4
|
* in input order. Caller decides what to do on the first deny.
|
package/dist/evaluator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../src/evaluator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../src/evaluator.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AA8MpB;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,kBAAkB,EAC/B,IAAI,GAAE,YAAiB,GACtB,aAAa,EAAE,CAwDjB"}
|