@agenticprimitives/delegation 0.1.0-alpha.2
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/LICENSE +21 -0
- package/README.md +46 -0
- package/dist/caveats.d.ts +50 -0
- package/dist/caveats.d.ts.map +1 -0
- package/dist/caveats.js +116 -0
- package/dist/caveats.js.map +1 -0
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +57 -0
- package/dist/client.js.map +1 -0
- package/dist/evaluator.d.ts +15 -0
- package/dist/evaluator.d.ts.map +1 -0
- package/dist/evaluator.js +209 -0
- package/dist/evaluator.js.map +1 -0
- package/dist/hash.d.ts +45 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +80 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/onchain.d.ts +8 -0
- package/dist/onchain.d.ts.map +1 -0
- package/dist/onchain.js +9 -0
- package/dist/onchain.js.map +1 -0
- package/dist/session-manager.d.ts +51 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +259 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/token.d.ts +158 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +459 -0
- package/dist/token.js.map +1 -0
- package/dist/types.d.ts +162 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
- package/spec.md +6 -0
package/dist/token.js
ADDED
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
// DelegationToken envelope (per spec 202 §4):
|
|
2
|
+
// base64url(canonicalJSON(claims)) + '.' + base64url(sessionKeySig)
|
|
3
|
+
//
|
|
4
|
+
// Verification (per spec 202 §6):
|
|
5
|
+
// 1. recover session key from signature → must match claims.sessionKeyAddress
|
|
6
|
+
// 2. check claims.aud matches expected audience + claims.exp not past
|
|
7
|
+
// 3. EIP-712 hashDelegation
|
|
8
|
+
// 4. on-chain DelegationManager.isRevoked
|
|
9
|
+
// 5. on-chain AgentAccount.isValidSignature (ERC-1271)
|
|
10
|
+
// 6. evaluateCaveats (fail-closed) — pass toolName via opts for tool-scope
|
|
11
|
+
// 7. atomic JTI usage tracking
|
|
12
|
+
// 8. return { principal: delegator }
|
|
13
|
+
import { secp256k1 } from '@noble/curves/secp256k1';
|
|
14
|
+
import { keccak_256 } from '@noble/hashes/sha3';
|
|
15
|
+
import { createPublicClient, http } from 'viem';
|
|
16
|
+
import { hashDelegation } from './hash';
|
|
17
|
+
import { evaluateCaveats } from './evaluator';
|
|
18
|
+
import { buildEvent } from '@agenticprimitives/audit';
|
|
19
|
+
// ─── base64url + canonical JSON helpers ──────────────────────────────────
|
|
20
|
+
function base64urlEncode(s) {
|
|
21
|
+
return Buffer.from(s, 'utf8').toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
22
|
+
}
|
|
23
|
+
function base64urlDecodeStr(s) {
|
|
24
|
+
let padded = s.replace(/-/g, '+').replace(/_/g, '/');
|
|
25
|
+
while (padded.length % 4)
|
|
26
|
+
padded += '=';
|
|
27
|
+
return Buffer.from(padded, 'base64').toString('utf8');
|
|
28
|
+
}
|
|
29
|
+
function base64urlEncodeBytes(b) {
|
|
30
|
+
return Buffer.from(b).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
31
|
+
}
|
|
32
|
+
function base64urlDecodeBytes(s) {
|
|
33
|
+
let padded = s.replace(/-/g, '+').replace(/_/g, '/');
|
|
34
|
+
while (padded.length % 4)
|
|
35
|
+
padded += '=';
|
|
36
|
+
return new Uint8Array(Buffer.from(padded, 'base64'));
|
|
37
|
+
}
|
|
38
|
+
/** Sorted-key JSON; BigInt → numeric string. Both sides must produce the
|
|
39
|
+
* exact same bytes for the signature to round-trip.
|
|
40
|
+
*
|
|
41
|
+
* Exported for cross-runtime golden-test fixtures. Stability of this
|
|
42
|
+
* function is a SECURITY INVARIANT — any byte-level drift across
|
|
43
|
+
* runtimes (Node, Bun, browser, Cloudflare Workers) means the same
|
|
44
|
+
* claims hash to different signatures, breaking token verification
|
|
45
|
+
* silently. */
|
|
46
|
+
export function canonicalJSON(value) {
|
|
47
|
+
const seen = new WeakSet();
|
|
48
|
+
const stringify = (v) => {
|
|
49
|
+
if (v === null)
|
|
50
|
+
return 'null';
|
|
51
|
+
if (typeof v === 'boolean')
|
|
52
|
+
return String(v);
|
|
53
|
+
if (typeof v === 'number')
|
|
54
|
+
return Number.isFinite(v) ? String(v) : 'null';
|
|
55
|
+
if (typeof v === 'bigint')
|
|
56
|
+
return JSON.stringify(v.toString());
|
|
57
|
+
if (typeof v === 'string')
|
|
58
|
+
return JSON.stringify(v);
|
|
59
|
+
if (Array.isArray(v)) {
|
|
60
|
+
return '[' + v.map((x) => (x === undefined ? 'null' : stringify(x))).join(',') + ']';
|
|
61
|
+
}
|
|
62
|
+
if (typeof v === 'object') {
|
|
63
|
+
if (seen.has(v))
|
|
64
|
+
throw new Error('canonicalJSON: circular reference');
|
|
65
|
+
seen.add(v);
|
|
66
|
+
const obj = v;
|
|
67
|
+
// Drop undefined keys (standard JSON behavior).
|
|
68
|
+
const keys = Object.keys(obj).filter((k) => obj[k] !== undefined).sort();
|
|
69
|
+
return '{' + keys.map((k) => JSON.stringify(k) + ':' + stringify(obj[k])).join(',') + '}';
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`canonicalJSON: unsupported type ${typeof v}`);
|
|
72
|
+
};
|
|
73
|
+
return stringify(value);
|
|
74
|
+
}
|
|
75
|
+
function eip191Digest(message) {
|
|
76
|
+
const bytes = new TextEncoder().encode(message);
|
|
77
|
+
const prefix = new TextEncoder().encode(`\x19Ethereum Signed Message:\n${bytes.length}`);
|
|
78
|
+
const combined = new Uint8Array(prefix.length + bytes.length);
|
|
79
|
+
combined.set(prefix, 0);
|
|
80
|
+
combined.set(bytes, prefix.length);
|
|
81
|
+
return keccak_256(combined);
|
|
82
|
+
}
|
|
83
|
+
function recoverEoaFromEip191Sig(message, signature) {
|
|
84
|
+
const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
|
|
85
|
+
if (sig.length !== 130)
|
|
86
|
+
throw new Error(`signature must be 65 bytes (130 hex chars); got ${sig.length}`);
|
|
87
|
+
const r = BigInt('0x' + sig.slice(0, 64));
|
|
88
|
+
const s = BigInt('0x' + sig.slice(64, 128));
|
|
89
|
+
const v = parseInt(sig.slice(128, 130), 16);
|
|
90
|
+
const recovery = v >= 27 ? v - 27 : v;
|
|
91
|
+
const eipSig = new secp256k1.Signature(r, s).addRecoveryBit(recovery);
|
|
92
|
+
const digest = eip191Digest(message);
|
|
93
|
+
const pub = eipSig.recoverPublicKey(digest).toRawBytes(false);
|
|
94
|
+
const hash = keccak_256(pub.slice(1));
|
|
95
|
+
let hex = '0x';
|
|
96
|
+
for (const b of hash.slice(12))
|
|
97
|
+
hex += b.toString(16).padStart(2, '0');
|
|
98
|
+
return hex;
|
|
99
|
+
}
|
|
100
|
+
function randomJti() {
|
|
101
|
+
const buf = new Uint8Array(16);
|
|
102
|
+
globalThis.crypto.getRandomValues(buf);
|
|
103
|
+
let s = 'jti_';
|
|
104
|
+
for (const b of buf)
|
|
105
|
+
s += b.toString(16).padStart(2, '0');
|
|
106
|
+
return s;
|
|
107
|
+
}
|
|
108
|
+
// ─── Mint ──────────────────────────────────────────────────────────────────
|
|
109
|
+
/**
|
|
110
|
+
* Production hard-ceilings on token lifespan + reuse. Callers may set
|
|
111
|
+
* tighter limits via `opts.maxAllowedTtlSeconds` / `opts.maxAllowedUsageLimit`;
|
|
112
|
+
* setting LOOSER values requires explicit `opts.acceptElevatedRisk: true`.
|
|
113
|
+
*
|
|
114
|
+
* Rationale: a leaked long-lived high-usage token is an authority leak
|
|
115
|
+
* for its full window. Today's defaults (1h TTL, 100 uses) are aggressive
|
|
116
|
+
* enough that a missed-rotation incident has bounded blast radius.
|
|
117
|
+
*/
|
|
118
|
+
const DEFAULT_MAX_TTL_SECONDS = 60 * 60; // 1 hour
|
|
119
|
+
const DEFAULT_MAX_USAGE_LIMIT = 100;
|
|
120
|
+
export async function mintDelegationToken(claims, signMessage, opts) {
|
|
121
|
+
const jti = claims.jti ?? randomJti();
|
|
122
|
+
const ttl = claims.ttlSeconds ?? 600; // 10 minutes default; tokens are short-lived
|
|
123
|
+
// Production ceiling enforcement.
|
|
124
|
+
const ttlCeiling = opts?.maxAllowedTtlSeconds ?? DEFAULT_MAX_TTL_SECONDS;
|
|
125
|
+
if (ttl > ttlCeiling && !opts?.acceptElevatedRisk) {
|
|
126
|
+
throw new Error(`mintDelegationToken: ttlSeconds=${ttl} exceeds ceiling=${ttlCeiling}. ` +
|
|
127
|
+
`Tighten TTL or set { acceptElevatedRisk: true } to acknowledge ` +
|
|
128
|
+
`the elevated blast-radius of a long-lived token.`);
|
|
129
|
+
}
|
|
130
|
+
if (typeof claims.usageLimit === 'number' &&
|
|
131
|
+
claims.usageLimit > (opts?.maxAllowedUsageLimit ?? DEFAULT_MAX_USAGE_LIMIT) &&
|
|
132
|
+
!opts?.acceptElevatedRisk) {
|
|
133
|
+
throw new Error(`mintDelegationToken: usageLimit=${claims.usageLimit} exceeds ceiling=` +
|
|
134
|
+
`${opts?.maxAllowedUsageLimit ?? DEFAULT_MAX_USAGE_LIMIT}. ` +
|
|
135
|
+
`Tighten usageLimit or set { acceptElevatedRisk: true }.`);
|
|
136
|
+
}
|
|
137
|
+
if (ttl <= 0) {
|
|
138
|
+
throw new Error(`mintDelegationToken: ttlSeconds must be positive; got ${ttl}`);
|
|
139
|
+
}
|
|
140
|
+
if (typeof claims.usageLimit === 'number' && claims.usageLimit <= 0) {
|
|
141
|
+
throw new Error(`mintDelegationToken: usageLimit must be positive when set; got ${claims.usageLimit}`);
|
|
142
|
+
}
|
|
143
|
+
const iat = Math.floor(Date.now() / 1000);
|
|
144
|
+
const exp = iat + ttl;
|
|
145
|
+
const full = {
|
|
146
|
+
iss: claims.iss,
|
|
147
|
+
aud: claims.aud,
|
|
148
|
+
sub: claims.sub,
|
|
149
|
+
delegation: claims.delegation,
|
|
150
|
+
sessionKeyAddress: claims.sessionKeyAddress,
|
|
151
|
+
jti,
|
|
152
|
+
iat,
|
|
153
|
+
exp,
|
|
154
|
+
usageLimit: claims.usageLimit,
|
|
155
|
+
};
|
|
156
|
+
const canonical = canonicalJSON(full);
|
|
157
|
+
const sig = await signMessage(canonical);
|
|
158
|
+
const sigHex = sig.startsWith('0x') ? sig.slice(2) : sig;
|
|
159
|
+
const sigBytes = new Uint8Array(Buffer.from(sigHex, 'hex'));
|
|
160
|
+
const token = `${base64urlEncode(canonical)}.${base64urlEncodeBytes(sigBytes)}`;
|
|
161
|
+
// Audit emit (C3 pass 3c). Fail-soft. JTI is logged because it's the
|
|
162
|
+
// correlation primitive for downstream verify events — not secret.
|
|
163
|
+
if (opts?.auditSink) {
|
|
164
|
+
try {
|
|
165
|
+
await opts.auditSink.write(buildEvent({
|
|
166
|
+
action: 'delegation.mint',
|
|
167
|
+
outcome: 'success',
|
|
168
|
+
correlationId: opts.correlationId,
|
|
169
|
+
actor: { type: 'user', id: claims.delegation.delegator },
|
|
170
|
+
subject: { type: 'jti', id: jti },
|
|
171
|
+
audience: claims.aud,
|
|
172
|
+
context: {
|
|
173
|
+
iss: claims.iss,
|
|
174
|
+
sub: claims.sub,
|
|
175
|
+
sessionKeyAddress: claims.sessionKeyAddress,
|
|
176
|
+
ttlSeconds: ttl,
|
|
177
|
+
usageLimit: claims.usageLimit ?? null,
|
|
178
|
+
},
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
/* fail-soft */
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return { token, jti };
|
|
186
|
+
}
|
|
187
|
+
// ─── Verify ────────────────────────────────────────────────────────────────
|
|
188
|
+
const DELEGATION_MANAGER_ABI = [
|
|
189
|
+
{
|
|
190
|
+
type: 'function',
|
|
191
|
+
name: 'isRevoked',
|
|
192
|
+
stateMutability: 'view',
|
|
193
|
+
inputs: [{ name: 'hash', type: 'bytes32' }],
|
|
194
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
195
|
+
},
|
|
196
|
+
];
|
|
197
|
+
const ACCOUNT_ABI_ERC1271 = [
|
|
198
|
+
{
|
|
199
|
+
type: 'function',
|
|
200
|
+
name: 'isValidSignature',
|
|
201
|
+
stateMutability: 'view',
|
|
202
|
+
inputs: [
|
|
203
|
+
{ name: 'hash', type: 'bytes32' },
|
|
204
|
+
{ name: 'signature', type: 'bytes' },
|
|
205
|
+
],
|
|
206
|
+
outputs: [{ name: '', type: 'bytes4' }],
|
|
207
|
+
},
|
|
208
|
+
];
|
|
209
|
+
const ACCEPTED_SESSION_DELEGATION_ABI = [
|
|
210
|
+
{
|
|
211
|
+
type: 'function',
|
|
212
|
+
name: 'isAcceptedSessionDelegation',
|
|
213
|
+
stateMutability: 'view',
|
|
214
|
+
inputs: [{ name: 'sessionDelegationHash', type: 'bytes32' }],
|
|
215
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
216
|
+
},
|
|
217
|
+
];
|
|
218
|
+
const ERC1271_MAGIC = '0x1626ba7e';
|
|
219
|
+
function decodeToken(token) {
|
|
220
|
+
const parts = token.split('.');
|
|
221
|
+
if (parts.length !== 2)
|
|
222
|
+
return null;
|
|
223
|
+
let canonical;
|
|
224
|
+
let claims;
|
|
225
|
+
try {
|
|
226
|
+
canonical = base64urlDecodeStr(parts[0]);
|
|
227
|
+
const parsed = JSON.parse(canonical);
|
|
228
|
+
if (typeof parsed.delegation.salt === 'string') {
|
|
229
|
+
parsed.delegation = { ...parsed.delegation, salt: BigInt(parsed.delegation.salt) };
|
|
230
|
+
}
|
|
231
|
+
claims = parsed;
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
const sigBytes = base64urlDecodeBytes(parts[1]);
|
|
237
|
+
let sigHex = '0x';
|
|
238
|
+
for (const b of sigBytes)
|
|
239
|
+
sigHex += b.toString(16).padStart(2, '0');
|
|
240
|
+
return { claims, canonical, signature: sigHex };
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Full verification pipeline. Caller passes `toolName` in opts for tool-scope
|
|
244
|
+
* caveat evaluation; without it the mcp-tool-scope caveat denies.
|
|
245
|
+
*/
|
|
246
|
+
export async function verifyDelegationToken(token, opts) {
|
|
247
|
+
// Audit emit helper (audit C3 pass 3b). Fail-soft: an emit failure
|
|
248
|
+
// never breaks the verify flow.
|
|
249
|
+
const emit = async (outcome, reason, principal, delegationDigest) => {
|
|
250
|
+
if (!opts.auditSink)
|
|
251
|
+
return;
|
|
252
|
+
try {
|
|
253
|
+
await opts.auditSink.write(buildEvent({
|
|
254
|
+
action: outcome === 'success'
|
|
255
|
+
? 'delegation.verify.accept'
|
|
256
|
+
: 'delegation.verify.reject',
|
|
257
|
+
outcome,
|
|
258
|
+
correlationId: opts.correlationId,
|
|
259
|
+
actor: principal ? { type: 'user', id: principal } : { type: 'unknown' },
|
|
260
|
+
subject: delegationDigest
|
|
261
|
+
? { type: 'delegation', id: delegationDigest }
|
|
262
|
+
: undefined,
|
|
263
|
+
audience: opts.audience,
|
|
264
|
+
chainId: opts.chainId,
|
|
265
|
+
digest: delegationDigest,
|
|
266
|
+
reason,
|
|
267
|
+
context: opts.toolName ? { tool: opts.toolName } : undefined,
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
/* fail-soft */
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
const rejectWith = async (reason, principal, delegationDigest) => {
|
|
275
|
+
await emit('denied', reason, principal, delegationDigest);
|
|
276
|
+
return { error: reason };
|
|
277
|
+
};
|
|
278
|
+
const decoded = decodeToken(token);
|
|
279
|
+
if (!decoded)
|
|
280
|
+
return rejectWith('malformed token');
|
|
281
|
+
const { claims, canonical, signature } = decoded;
|
|
282
|
+
if (claims.aud !== opts.audience)
|
|
283
|
+
return rejectWith('audience mismatch');
|
|
284
|
+
const now = Math.floor((opts.now ?? Date.now)() / 1000);
|
|
285
|
+
if (typeof claims.exp !== 'number' || claims.exp < now)
|
|
286
|
+
return rejectWith('token expired');
|
|
287
|
+
// 1. recover session key
|
|
288
|
+
let recovered;
|
|
289
|
+
try {
|
|
290
|
+
recovered = recoverEoaFromEip191Sig(canonical, signature);
|
|
291
|
+
}
|
|
292
|
+
catch (e) {
|
|
293
|
+
return rejectWith(`signature recovery failed: ${e instanceof Error ? e.message : e}`);
|
|
294
|
+
}
|
|
295
|
+
if (recovered.toLowerCase() !== claims.sessionKeyAddress.toLowerCase()) {
|
|
296
|
+
return rejectWith('session-key signature mismatch');
|
|
297
|
+
}
|
|
298
|
+
// 2. EIP-712 hash
|
|
299
|
+
const eip712Hash = hashDelegation(claims.delegation, opts.chainId, opts.delegationManager);
|
|
300
|
+
// 3. on-chain checks
|
|
301
|
+
const requireDeployed = opts.requireDeployed ?? true;
|
|
302
|
+
// H7-B.9 / XPKG-005: default fail-CLOSED regardless of runtime. The
|
|
303
|
+
// previous NODE_ENV-keyed default opened on Workers / SES where
|
|
304
|
+
// `process.env.NODE_ENV` is undefined. Callers who genuinely want the
|
|
305
|
+
// permissive behavior MUST set `revocationFailMode: 'open'` explicitly.
|
|
306
|
+
const revocationFailMode = opts.revocationFailMode ?? 'closed';
|
|
307
|
+
const publicClient = createPublicClient({ transport: http(opts.rpcUrl) });
|
|
308
|
+
try {
|
|
309
|
+
const revoked = (await publicClient.readContract({
|
|
310
|
+
address: opts.delegationManager,
|
|
311
|
+
abi: DELEGATION_MANAGER_ABI,
|
|
312
|
+
functionName: 'isRevoked',
|
|
313
|
+
args: [eip712Hash],
|
|
314
|
+
}));
|
|
315
|
+
if (revoked) {
|
|
316
|
+
return rejectWith('delegation revoked', claims.delegation.delegator, eip712Hash);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
catch (e) {
|
|
320
|
+
if (revocationFailMode === 'closed') {
|
|
321
|
+
return rejectWith('revocation check unavailable; refusing to verify (set revocationFailMode=open only for explicit dev/demo paths)', claims.delegation.delegator, eip712Hash);
|
|
322
|
+
}
|
|
323
|
+
void e;
|
|
324
|
+
}
|
|
325
|
+
try {
|
|
326
|
+
const code = await publicClient.getCode({ address: claims.delegation.delegator });
|
|
327
|
+
const isDeployed = !!(code && code !== '0x' && code.length > 2);
|
|
328
|
+
if (!isDeployed) {
|
|
329
|
+
if (requireDeployed) {
|
|
330
|
+
return rejectWith(`delegator smart account ${claims.delegation.delegator} is not deployed — cannot verify ERC-1271. Set verifyDelegationToken opt requireDeployed=false only for explicit counterfactual-demo use cases.`, claims.delegation.delegator, eip712Hash);
|
|
331
|
+
}
|
|
332
|
+
// Tolerated: caller opted into the undeployed path explicitly.
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
const magic = (await publicClient.readContract({
|
|
336
|
+
address: claims.delegation.delegator,
|
|
337
|
+
abi: ACCOUNT_ABI_ERC1271,
|
|
338
|
+
functionName: 'isValidSignature',
|
|
339
|
+
args: [eip712Hash, claims.delegation.signature],
|
|
340
|
+
}));
|
|
341
|
+
if (magic.toLowerCase() !== ERC1271_MAGIC) {
|
|
342
|
+
return rejectWith('erc1271 validation failed', claims.delegation.delegator, eip712Hash);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch (e) {
|
|
347
|
+
return rejectWith(`erc1271 call reverted: ${e instanceof Error ? e.message : e}`, claims.delegation.delegator, eip712Hash);
|
|
348
|
+
}
|
|
349
|
+
// 4. caveat evaluation
|
|
350
|
+
//
|
|
351
|
+
// H7-B.2 (PKG-DELEGATION-001 closure): verifyDelegationToken is an
|
|
352
|
+
// OFF-CHAIN gate (JTI / session-token / ERC-1271 / audit). It does NOT
|
|
353
|
+
// redeem the delegation on-chain, so on-chain-only caveats MUST stay
|
|
354
|
+
// strict — missing context for Value / AllowedTargets / AllowedMethods /
|
|
355
|
+
// inert sentinels denies with `'context-required'` rather than silently
|
|
356
|
+
// permitting. Callers who genuinely will redeem on-chain (a separate
|
|
357
|
+
// redeem path) call `evaluateCaveats` directly with `{ enforceOnChain: true }`.
|
|
358
|
+
const verdicts = evaluateCaveats(claims.delegation.caveats, { timestamp: now, mcpTool: opts.toolName }, opts.enforcerMap, { enforceOnChain: opts.enforceOnChain === true });
|
|
359
|
+
for (const v of verdicts) {
|
|
360
|
+
if (!v.allowed) {
|
|
361
|
+
return rejectWith(`caveat denied (${v.reason})`, claims.delegation.delegator, eip712Hash);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// 4.5. Spec 207 threshold-policy gates.
|
|
365
|
+
// - requireQuorumCaveat: the delegation MUST carry a caveat whose
|
|
366
|
+
// enforcer matches the caller's expected QuorumEnforcer address.
|
|
367
|
+
// Caller decides which delegations need this based on the tool's
|
|
368
|
+
// tool-policy decision (`requiresQuorum`). Without this opt set
|
|
369
|
+
// we don't require quorum — backwards-compatible.
|
|
370
|
+
if (opts.requireQuorumCaveat) {
|
|
371
|
+
const target = opts.requireQuorumCaveat.enforcer.toLowerCase();
|
|
372
|
+
const hasQuorum = claims.delegation.caveats.some((c) => c.enforcer.toLowerCase() === target);
|
|
373
|
+
if (!hasQuorum) {
|
|
374
|
+
return rejectWith('tier requires quorum caveat but delegation lacks one', claims.delegation.delegator, eip712Hash);
|
|
375
|
+
}
|
|
376
|
+
// Audit H3 — caveat presence alone is NOT proof of quorum. The
|
|
377
|
+
// caller must declare ONE of two enforcement models so the gap
|
|
378
|
+
// is structural rather than implicit.
|
|
379
|
+
if (!opts.quorumProof) {
|
|
380
|
+
return rejectWith('quorum caveat present but no quorumProof supplied — refusing to assume on-chain enforcement', claims.delegation.delegator, eip712Hash);
|
|
381
|
+
}
|
|
382
|
+
if (opts.quorumProof.mode === 'off-chain') {
|
|
383
|
+
// Off-chain verification is a planned mode; the wire-format
|
|
384
|
+
// (payloadHash + packedSignatures) is reserved here so consumers
|
|
385
|
+
// can migrate when the implementation lands. Failing closed
|
|
386
|
+
// until the spec'd off-chain payload format is implemented.
|
|
387
|
+
return rejectWith('quorum_off_chain_not_implemented', claims.delegation.delegator, eip712Hash);
|
|
388
|
+
}
|
|
389
|
+
// mode === 'on-chain-redeemed' — caller asserts the call will
|
|
390
|
+
// pass through QuorumEnforcer.beforeHook on chain. Accept; the
|
|
391
|
+
// on-chain layer is responsible for the actual signature check.
|
|
392
|
+
}
|
|
393
|
+
// - requireAcceptedOnChain: account.isAcceptedSessionDelegation(hash)
|
|
394
|
+
// must return true. Spec § 6 high-risk gate. Single extra chain
|
|
395
|
+
// read; only fires when the tool-policy decision flips this on
|
|
396
|
+
// (typically critical-tier tools).
|
|
397
|
+
let acceptedOnChain = false;
|
|
398
|
+
if (opts.requireAcceptedOnChain) {
|
|
399
|
+
try {
|
|
400
|
+
acceptedOnChain = (await publicClient.readContract({
|
|
401
|
+
address: claims.delegation.delegator,
|
|
402
|
+
abi: ACCEPTED_SESSION_DELEGATION_ABI,
|
|
403
|
+
functionName: 'isAcceptedSessionDelegation',
|
|
404
|
+
args: [eip712Hash],
|
|
405
|
+
}));
|
|
406
|
+
}
|
|
407
|
+
catch (e) {
|
|
408
|
+
return rejectWith(`acceptSessionDelegation check reverted: ${e instanceof Error ? e.message : e}`, claims.delegation.delegator, eip712Hash);
|
|
409
|
+
}
|
|
410
|
+
if (!acceptedOnChain) {
|
|
411
|
+
return rejectWith('tier requires on-chain acceptSessionDelegation blessing; not present', claims.delegation.delegator, eip712Hash);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// 5. JTI replay
|
|
415
|
+
const limit = claims.usageLimit ?? 10;
|
|
416
|
+
const usage = await opts.jtiStore.trackUsage(claims.jti, limit);
|
|
417
|
+
if (!usage.allowed) {
|
|
418
|
+
return rejectWith('token usage limit exceeded', claims.delegation.delegator, eip712Hash);
|
|
419
|
+
}
|
|
420
|
+
// Accept emit — extended context to capture the threshold-policy
|
|
421
|
+
// outcome (`acceptedOnChain`) for forensics + dashboards. Reuses the
|
|
422
|
+
// same `emit` shape as the reject path but with extra context fields.
|
|
423
|
+
if (opts.auditSink) {
|
|
424
|
+
try {
|
|
425
|
+
const context = {};
|
|
426
|
+
if (opts.toolName)
|
|
427
|
+
context.tool = opts.toolName;
|
|
428
|
+
if (opts.requireAcceptedOnChain !== undefined) {
|
|
429
|
+
context.acceptedOnChain = acceptedOnChain;
|
|
430
|
+
}
|
|
431
|
+
await opts.auditSink.write(buildEvent({
|
|
432
|
+
action: 'delegation.verify.accept',
|
|
433
|
+
outcome: 'success',
|
|
434
|
+
correlationId: opts.correlationId,
|
|
435
|
+
actor: { type: 'user', id: claims.delegation.delegator },
|
|
436
|
+
subject: { type: 'delegation', id: eip712Hash },
|
|
437
|
+
audience: opts.audience,
|
|
438
|
+
chainId: opts.chainId,
|
|
439
|
+
digest: eip712Hash,
|
|
440
|
+
context: Object.keys(context).length > 0 ? context : undefined,
|
|
441
|
+
}));
|
|
442
|
+
}
|
|
443
|
+
catch {
|
|
444
|
+
/* fail-soft */
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return { principal: claims.delegation.delegator };
|
|
448
|
+
}
|
|
449
|
+
// H7-B.8 (XPKG-002 / EXT-024 closure) — `verifyCrossDelegation` was a
|
|
450
|
+
// public stub that unconditionally returned a "not implemented" error
|
|
451
|
+
// string. Public symbols whose existence implies a capability the runtime
|
|
452
|
+
// can't provide are an ADR-0013 violation (silent fallback in the type
|
|
453
|
+
// system). Per spec 100 §6, experimental surface goes behind the
|
|
454
|
+
// `./experimental` subpath. This implementation isn't ready for that
|
|
455
|
+
// subpath either, so the function is DELETED from the public surface.
|
|
456
|
+
// When the cross-delegation work resumes it lands under
|
|
457
|
+
// `./experimental` per the doctrine. See PKG-delegation-001 in
|
|
458
|
+
// docs/audits/2026-05-packages-contracts-production-readiness.md.
|
|
459
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import type { Address, Hex } from '@agenticprimitives/types';
|
|
2
|
+
export type { Address, Hex };
|
|
3
|
+
export declare const ROOT_AUTHORITY: Hex;
|
|
4
|
+
export interface Caveat {
|
|
5
|
+
enforcer: Address;
|
|
6
|
+
terms: Hex;
|
|
7
|
+
args?: Hex;
|
|
8
|
+
}
|
|
9
|
+
export interface Delegation {
|
|
10
|
+
delegator: Address;
|
|
11
|
+
delegate: Address;
|
|
12
|
+
authority: Hex;
|
|
13
|
+
caveats: Caveat[];
|
|
14
|
+
salt: bigint;
|
|
15
|
+
signature: Hex;
|
|
16
|
+
}
|
|
17
|
+
export interface DataScopeGrant {
|
|
18
|
+
server: string;
|
|
19
|
+
resources: string[];
|
|
20
|
+
fields: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface DelegationTokenClaims {
|
|
23
|
+
iss: string;
|
|
24
|
+
aud: string;
|
|
25
|
+
sub: Address;
|
|
26
|
+
delegation: Delegation;
|
|
27
|
+
sessionKeyAddress: Address;
|
|
28
|
+
jti: string;
|
|
29
|
+
iat: number;
|
|
30
|
+
exp: number;
|
|
31
|
+
usageLimit?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface EnforcerAddressMap {
|
|
34
|
+
delegationManager: Address;
|
|
35
|
+
timestamp: Address;
|
|
36
|
+
value: Address;
|
|
37
|
+
allowedTargets: Address;
|
|
38
|
+
allowedMethods: Address;
|
|
39
|
+
taskBinding?: Address;
|
|
40
|
+
callDataHash?: Address;
|
|
41
|
+
recovery?: Address;
|
|
42
|
+
rateLimit?: Address;
|
|
43
|
+
}
|
|
44
|
+
export interface CaveatContext {
|
|
45
|
+
timestamp: number;
|
|
46
|
+
mcpTool?: string;
|
|
47
|
+
target?: Address;
|
|
48
|
+
selector?: Hex;
|
|
49
|
+
value?: bigint;
|
|
50
|
+
principal?: Address;
|
|
51
|
+
}
|
|
52
|
+
export type CaveatVerdict = {
|
|
53
|
+
enforcer: Address;
|
|
54
|
+
allowed: true;
|
|
55
|
+
reason?: string;
|
|
56
|
+
} | {
|
|
57
|
+
enforcer: Address;
|
|
58
|
+
allowed: false;
|
|
59
|
+
reason: string;
|
|
60
|
+
};
|
|
61
|
+
export type VerifyError = {
|
|
62
|
+
error: string;
|
|
63
|
+
};
|
|
64
|
+
export interface JtiStore {
|
|
65
|
+
trackUsage(jti: string, limit: number): Promise<{
|
|
66
|
+
usage: number;
|
|
67
|
+
allowed: boolean;
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
70
|
+
export interface VerifyOpts {
|
|
71
|
+
chainId: number;
|
|
72
|
+
delegationManager: Address;
|
|
73
|
+
rpcUrl: string;
|
|
74
|
+
audience: string;
|
|
75
|
+
enforcerMap: EnforcerAddressMap;
|
|
76
|
+
jtiStore: JtiStore;
|
|
77
|
+
now?: () => number;
|
|
78
|
+
/**
|
|
79
|
+
* Opt in to permissive caveat evaluation for on-chain-only caveats
|
|
80
|
+
* (Value / AllowedTargets / AllowedMethods / inert sentinels) when the
|
|
81
|
+
* caller can guarantee an on-chain redeem will follow (where the enforcer
|
|
82
|
+
* DOES fire). When `false`/omitted (default — H7-B.2 strict mode), those
|
|
83
|
+
* caveats deny missing-context with `'context-required'` so off-chain
|
|
84
|
+
* gates (MCP / A2A) can't silently permit a call that the on-chain
|
|
85
|
+
* enforcer would have caught.
|
|
86
|
+
*
|
|
87
|
+
* Off-chain JTI / session-token verify uses strict mode. Spec 202 §11.
|
|
88
|
+
*/
|
|
89
|
+
enforceOnChain?: boolean;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* H7-B.2 — options for `evaluateCaveats`. Mirrors the `enforceOnChain` flag
|
|
93
|
+
* on {@link VerifyOpts}. Strict by default.
|
|
94
|
+
*/
|
|
95
|
+
export interface EvaluateOpts {
|
|
96
|
+
enforceOnChain?: boolean;
|
|
97
|
+
}
|
|
98
|
+
export interface DelegationClientOpts {
|
|
99
|
+
signer: {
|
|
100
|
+
address: Address;
|
|
101
|
+
signTypedData(args: {
|
|
102
|
+
domain: {
|
|
103
|
+
name: string;
|
|
104
|
+
version: string;
|
|
105
|
+
chainId: number;
|
|
106
|
+
verifyingContract: Address;
|
|
107
|
+
};
|
|
108
|
+
types: Record<string, ReadonlyArray<{
|
|
109
|
+
name: string;
|
|
110
|
+
type: string;
|
|
111
|
+
}>>;
|
|
112
|
+
primaryType: string;
|
|
113
|
+
message: Record<string, unknown>;
|
|
114
|
+
}): Promise<Hex>;
|
|
115
|
+
};
|
|
116
|
+
smartAccount: Address;
|
|
117
|
+
chainId: number;
|
|
118
|
+
delegationManager: Address;
|
|
119
|
+
}
|
|
120
|
+
export interface SessionMeta {
|
|
121
|
+
sessionId: string;
|
|
122
|
+
accountAddress: Address;
|
|
123
|
+
chainId: number;
|
|
124
|
+
expiresAt: string;
|
|
125
|
+
}
|
|
126
|
+
export interface SessionPackage {
|
|
127
|
+
sessionPrivateKey: Hex;
|
|
128
|
+
delegation: Delegation;
|
|
129
|
+
}
|
|
130
|
+
export interface SessionRow {
|
|
131
|
+
id: string;
|
|
132
|
+
accountAddress: Address;
|
|
133
|
+
chainId: number;
|
|
134
|
+
sessionKeyAddress: Address;
|
|
135
|
+
status: 'pending' | 'active' | 'revoked' | 'expired';
|
|
136
|
+
encryptedPackage: Uint8Array;
|
|
137
|
+
iv: Uint8Array;
|
|
138
|
+
encryptedDataKey: Uint8Array;
|
|
139
|
+
keyVersion: string;
|
|
140
|
+
expiresAt: string;
|
|
141
|
+
variant?: 'A' | 'B';
|
|
142
|
+
createdAt: string;
|
|
143
|
+
revokedAt?: string;
|
|
144
|
+
}
|
|
145
|
+
export interface SessionStore {
|
|
146
|
+
save(row: SessionRow): Promise<void>;
|
|
147
|
+
get(id: string): Promise<SessionRow | null>;
|
|
148
|
+
list(accountAddress: Address): Promise<SessionRow[]>;
|
|
149
|
+
revoke(id: string): Promise<void>;
|
|
150
|
+
}
|
|
151
|
+
export interface TxContext {
|
|
152
|
+
rpcUrl: string;
|
|
153
|
+
chainId: number;
|
|
154
|
+
delegationManager: Address;
|
|
155
|
+
signer: {
|
|
156
|
+
address: Address;
|
|
157
|
+
signMessage(msg: string | {
|
|
158
|
+
raw: Hex;
|
|
159
|
+
}): Promise<Hex>;
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAMlD,MAAM,CAAC,MAAM,cAAc,GACzB,oEAAoE,CAAC"}
|