@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/standing.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// STANDING WIRES — one capability, decided once (spec 397 `act-as-me`; the shape spec 400 W2a opened for a runtime's
|
|
2
|
+
// standing grant). A standing wire is a delegation from a principal (a person, or her treasury for a payment) to a
|
|
3
|
+
// DELEGATE KEY, caveated to ONE capability selector and a window — and, for a payment, to one payee, one asset and
|
|
4
|
+
// a cap — with NO intent binding. That absence is what makes it standing: it is a capability, not a mandate
|
|
5
|
+
// (`verifyMandateForStep` refuses it alone, `not-a-mandate`), and nothing acts on it directly.
|
|
6
|
+
//
|
|
7
|
+
// When a run parks `authority_required`, the holder of the delegate key DERIVES the mandate the run asked for: a
|
|
8
|
+
// child of the standing wire bound to exactly that intent (`deriveMandate`, subset-checked by the capability's own
|
|
9
|
+
// handler), signs it with the delegate key, and presents the chain [child, standing]. The harness verifies every
|
|
10
|
+
// link — the standing wire's signature against the principal (ERC-1271 / approved digest), its revocation on chain,
|
|
11
|
+
// the child ⊆ parent, the intent and plan binding — before the step acts. Revoke the standing wire on chain and the
|
|
12
|
+
// next derivation is refused everywhere.
|
|
13
|
+
//
|
|
14
|
+
// What a standing wire is NOT: a session, a bearer, a wildcard (never `A2A_ANY_SKILL`), or a pre-approval of
|
|
15
|
+
// anything but the named capability within the window and the cap. One wire, one capability selector.
|
|
16
|
+
import { toHex } from 'viem';
|
|
17
|
+
import { ROOT_AUTHORITY } from './types.js';
|
|
18
|
+
import { hashDelegation } from './hash.js';
|
|
19
|
+
import { readDigestBindings } from './caveats.js';
|
|
20
|
+
import { deriveMandate, subsetHandlerFor } from './mandate.js';
|
|
21
|
+
import { CAPABILITY_RAR_TYPE, DEFAULT_SUBSET_HANDLERS, PAYMENT_RAR_TYPE, PRESENTATION_RAR_TYPE, PRESENTATION_CAPABILITY } from './mandate-handlers.js';
|
|
22
|
+
/** The RAR type a capability is bounded by — the verifier's own map. */
|
|
23
|
+
export const standingRequirementType = (capability) => (capability === 'treasury.payment.execute' ? PAYMENT_RAR_TYPE : capability === PRESENTATION_CAPABILITY ? PRESENTATION_RAR_TYPE : CAPABILITY_RAR_TYPE);
|
|
24
|
+
/**
|
|
25
|
+
* The UNSIGNED standing wire and its digest. The caller signs `ref` with the delegator's custodian (an off-chain
|
|
26
|
+
* signature, or the approved-digest sentinel after a batch approval) and sets `wire.signature`.
|
|
27
|
+
*/
|
|
28
|
+
export function buildStandingWire(i) {
|
|
29
|
+
if (!i.capability.trim())
|
|
30
|
+
throw new Error('a standing wire names one capability');
|
|
31
|
+
const type = standingRequirementType(i.capability);
|
|
32
|
+
if (type === PAYMENT_RAR_TYPE && !i.payment)
|
|
33
|
+
throw new Error('a standing payment wire needs its bounds: payee, asset, maxAmount');
|
|
34
|
+
if (type !== PAYMENT_RAR_TYPE && i.payment)
|
|
35
|
+
throw new Error(`${i.capability} is not a payment — it takes no cap`);
|
|
36
|
+
if (i.payment && i.payment.maxAmount <= 0n)
|
|
37
|
+
throw new Error('the cap must be above zero');
|
|
38
|
+
if (type === PRESENTATION_RAR_TYPE && !i.presentation)
|
|
39
|
+
throw new Error('a standing presentation wire needs its bounds: audiences, predicateDigests, issuerKeyIds');
|
|
40
|
+
if (type !== PRESENTATION_RAR_TYPE && i.presentation)
|
|
41
|
+
throw new Error(`${i.capability} is not a presentation — it takes no audiences`);
|
|
42
|
+
if (i.presentation && (!i.presentation.audiences.length || !i.presentation.predicateDigests.length || !i.presentation.issuerKeyIds.length))
|
|
43
|
+
throw new Error('a presentation wire names at least one audience, one predicate program and one issuer facet');
|
|
44
|
+
const h = subsetHandlerFor(type, i.handlers ?? DEFAULT_SUBSET_HANDLERS);
|
|
45
|
+
if (!h)
|
|
46
|
+
throw new Error(`no subset handler for ${type}`);
|
|
47
|
+
const now = Math.floor(Date.now() / 1000);
|
|
48
|
+
const requirement = {
|
|
49
|
+
type,
|
|
50
|
+
// A payment need arrives from the harness with `actions: [capability]` and `locations: [asset]` (the step's
|
|
51
|
+
// shape), and from a read-back wire as `actions: ['execute']` (the handler's shape). The parent names both, so
|
|
52
|
+
// `isSubset` holds for either child; the on-chain selectors are the handler's and do not depend on this list.
|
|
53
|
+
actions: type === PAYMENT_RAR_TYPE ? ['execute', i.capability] : type === PRESENTATION_RAR_TYPE ? ['present', i.capability] : [i.capability],
|
|
54
|
+
validAfter: now - 60,
|
|
55
|
+
validUntil: now + i.validForSeconds,
|
|
56
|
+
...(i.payment ? { locations: [i.payment.asset.toLowerCase()], limits: {
|
|
57
|
+
payee: i.payment.payee.toLowerCase(), asset: i.payment.asset.toLowerCase(),
|
|
58
|
+
maxAmount: i.payment.maxAmount.toString(), maxAggregate: (i.payment.maxAggregate ?? i.payment.maxAmount).toString(),
|
|
59
|
+
maxRedemptionsPerWindow: i.payment.maxRedemptionsPerWindow ?? 1, windowSeconds: i.payment.windowSeconds ?? 86_400,
|
|
60
|
+
} } : {}),
|
|
61
|
+
...(i.presentation ? { limits: {
|
|
62
|
+
audiences: JSON.stringify(i.presentation.audiences), predicateDigests: JSON.stringify(i.presentation.predicateDigests.map((d) => d.toLowerCase())),
|
|
63
|
+
issuerKeyIds: JSON.stringify(i.presentation.issuerKeyIds), maxPresentations: i.presentation.maxPresentations ?? 0,
|
|
64
|
+
} } : {}),
|
|
65
|
+
};
|
|
66
|
+
const caveats = h.toCaveats(requirement, i.enforcers);
|
|
67
|
+
const salt = i.salt ?? BigInt(toHex(crypto.getRandomValues(new Uint8Array(16))));
|
|
68
|
+
const delegation = { delegator: i.delegator, delegate: i.delegate, authority: ROOT_AUTHORITY, caveats, salt, signature: '0x' };
|
|
69
|
+
const ref = hashDelegation(delegation, i.chainId, i.delegationManager);
|
|
70
|
+
return {
|
|
71
|
+
delegation,
|
|
72
|
+
standing: { v: 1, template: i.template, capability: i.capability, wire: { ...delegation, salt: salt.toString() }, ref, requirement, enforcers: i.enforcers, chainId: i.chainId, delegationManager: i.delegationManager, grantedAt: new Date().toISOString() },
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** Attach the signature the custodian produced over `ref` (or the approved-digest sentinel). */
|
|
76
|
+
export function signedStandingWire(s, signature) {
|
|
77
|
+
return { ...s, wire: { ...s.wire, signature } };
|
|
78
|
+
}
|
|
79
|
+
export function parkedNeedOf(data) {
|
|
80
|
+
const d = data;
|
|
81
|
+
if (!d?.requirement || typeof d.requirement !== 'object' || !d.delegator || !d.delegate)
|
|
82
|
+
return null;
|
|
83
|
+
if (typeof d.requirement.intentDigest !== 'string' || !Array.isArray(d.requirement.actions))
|
|
84
|
+
return null;
|
|
85
|
+
return { requirement: d.requirement, delegator: d.delegator, delegate: d.delegate };
|
|
86
|
+
}
|
|
87
|
+
/** Does this standing wire cover the capability a step needs? Type and capability, not yet the bounds. */
|
|
88
|
+
export function standingCovers(s, capabilityId) {
|
|
89
|
+
return s.capability === capabilityId && s.requirement.type === standingRequirementType(capabilityId);
|
|
90
|
+
}
|
|
91
|
+
/** Pick the standing wire for a parked need: the one whose capability matches AND whose principal is the need's delegator. */
|
|
92
|
+
export function standingFor(set, need, capabilityId) {
|
|
93
|
+
const want = need.delegator.toLowerCase();
|
|
94
|
+
return set.find((s) => standingCovers(s, capabilityId) && String(s.wire.delegator ?? '').toLowerCase() === want && s.requirement.type === need.requirement.type) ?? null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The child for THIS intent, from the standing wire, signed with the delegate key — or why not. The need must be an
|
|
98
|
+
* act OF the wire's principal and ⊆ the wire (the capability's handler judges: for a payment, the amount against
|
|
99
|
+
* the cap, the payee and the asset against the wire's); its window is clamped into the wire's. Anything else stays
|
|
100
|
+
* parked for the person — the surface's `grant_link` still works.
|
|
101
|
+
*/
|
|
102
|
+
export async function deriveFromStanding(s, need, sign, handlers = DEFAULT_SUBSET_HANDLERS) {
|
|
103
|
+
if (String(s.wire.delegator ?? '').toLowerCase() !== need.delegator.toLowerCase())
|
|
104
|
+
return { ok: false, reason: `the run needs an act of ${need.delegator}; this wire is ${String(s.wire.delegator)}'s` };
|
|
105
|
+
if (need.requirement.type !== s.requirement.type)
|
|
106
|
+
return { ok: false, reason: `the run needs a ${need.requirement.type} mandate; this wire is ${s.requirement.type}` };
|
|
107
|
+
const parent = { ...s.wire, salt: BigInt(String(s.wire.salt)) };
|
|
108
|
+
const now = Math.floor(Date.now() / 1000);
|
|
109
|
+
const validAfter = Math.max(need.requirement.validAfter ?? 0, s.requirement.validAfter ?? 0);
|
|
110
|
+
const validUntil = Math.min(need.requirement.validUntil, s.requirement.validUntil);
|
|
111
|
+
if (validAfter > now || validUntil <= now)
|
|
112
|
+
return { ok: false, reason: `the standing wire's window (until ${new Date(s.requirement.validUntil * 1000).toISOString().slice(0, 16)}) does not cover now` };
|
|
113
|
+
const salt = BigInt(toHex(crypto.getRandomValues(new Uint8Array(16))));
|
|
114
|
+
const out = deriveMandate({
|
|
115
|
+
parent,
|
|
116
|
+
parentRequirement: { ...s.requirement, intentDigest: need.requirement.intentDigest },
|
|
117
|
+
requirement: { ...need.requirement, validAfter, validUntil },
|
|
118
|
+
grantee: need.delegate,
|
|
119
|
+
enforcers: s.enforcers, chainId: s.chainId, delegationManager: s.delegationManager, salt, handlers,
|
|
120
|
+
});
|
|
121
|
+
if (!out.ok)
|
|
122
|
+
return { ok: false, reason: out.reason };
|
|
123
|
+
const signature = await sign(out.digest);
|
|
124
|
+
const child = { ...out.delegation, signature, salt: salt.toString() };
|
|
125
|
+
return { ok: true, presented: [child, s.wire], childRef: out.digest, parentRef: s.ref };
|
|
126
|
+
}
|
|
127
|
+
/** Is this wire STANDING — no intent binding among its caveats? (A mandate always carries one.) */
|
|
128
|
+
export function isStandingWire(wire, digestBindingEnforcer) {
|
|
129
|
+
const caveats = (wire.caveats ?? []).map((c) => ({ enforcer: c.enforcer, terms: c.terms, args: (c.args ?? '0x') }));
|
|
130
|
+
return !readDigestBindings(caveats, digestBindingEnforcer).intent;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=standing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standing.js","sourceRoot":"","sources":["../src/standing.ts"],"names":[],"mappings":"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"}
|
package/dist/token.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Address, type Hex } from 'viem';
|
|
2
|
-
import type { DelegationTokenClaims, VerifyError, VerifyOpts, DataScopeGrant } from './types';
|
|
2
|
+
import type { Delegation, DelegationTokenClaims, VerifyError, VerifyOpts, DataScopeGrant, VaultRecordScopeGrant } from './types.js';
|
|
3
3
|
import { type AuditSink } from '@agenticprimitives/audit';
|
|
4
4
|
/** Sorted-key JSON; BigInt → numeric string. Both sides must produce the
|
|
5
5
|
* exact same bytes for the signature to round-trip.
|
|
@@ -67,6 +67,68 @@ export interface VerifyOptsExt extends VerifyOpts {
|
|
|
67
67
|
* `process.env.NODE_ENV` is undefined).
|
|
68
68
|
*/
|
|
69
69
|
revocationFailMode?: 'closed' | 'open';
|
|
70
|
+
/**
|
|
71
|
+
* spec 289 §5 — optional injected revocation reader. When provided, the
|
|
72
|
+
* revocation check routes through it (resilient, multi-provider, evidence-
|
|
73
|
+
* bearing, with the bounded-freshness invariant) INSTEAD of the inline
|
|
74
|
+
* single-client `isRevoked` read. Structurally compatible with chain-state's
|
|
75
|
+
* `ChainAuthorityReader` (so delegation needs no chain-state dependency). A
|
|
76
|
+
* fail-closed reader result (evidence.source begins `fail-closed`) is treated
|
|
77
|
+
* exactly like the inline read's RPC-throw: rejected under `revocationFailMode:
|
|
78
|
+
* 'closed'` (default), tolerated under `'open'`. Omit ⇒ unchanged inline read.
|
|
79
|
+
*/
|
|
80
|
+
chainRevocationReader?: {
|
|
81
|
+
isDelegationRevoked(hash: Hex): Promise<{
|
|
82
|
+
revoked: boolean;
|
|
83
|
+
evidence?: {
|
|
84
|
+
source: string;
|
|
85
|
+
};
|
|
86
|
+
}>;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* spec 289 §5 (W2) — optional injected acceptance reader. When provided AND `requireAcceptedOnChain`,
|
|
90
|
+
* the `hasAcceptedSessionDelegation` high-risk gate routes through it (resilient, multi-provider,
|
|
91
|
+
* evidence-bearing) INSTEAD of the inline single-client read. Structurally compatible with chain-state's
|
|
92
|
+
* `ChainAuthorityReader` (so delegation needs no chain-state dependency). Acceptance is inherently
|
|
93
|
+
* fail-closed (the tier REQUIRES `accepted === true`): a fail-closed reader result (evidence.source
|
|
94
|
+
* begins `fail-closed`) or a throw is rejected, exactly like the inline read's RPC-throw. Omit ⇒
|
|
95
|
+
* unchanged inline read.
|
|
96
|
+
*/
|
|
97
|
+
chainAcceptanceReader?: {
|
|
98
|
+
isSessionDelegationAccepted(principal: Address, hash: Hex): Promise<{
|
|
99
|
+
accepted: boolean;
|
|
100
|
+
evidence?: {
|
|
101
|
+
source: string;
|
|
102
|
+
};
|
|
103
|
+
}>;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* spec 289 §5 (W3) — optional injected signature reader. When provided, BOTH signature-verify sites
|
|
107
|
+
* (the main delegator signature AND the DEL-001 session-delegation leaf) route through it (resilient,
|
|
108
|
+
* multi-provider, evidence-bearing) INSTEAD of the inline single-client USV/ERC-1271 read. Structurally
|
|
109
|
+
* compatible with chain-state's `ChainAuthorityReader.verifySmartAgentSignature` (so delegation needs no
|
|
110
|
+
* chain-state dependency). The reader validates via the UniversalSignatureValidator (connection-agnostic:
|
|
111
|
+
* ECDSA / ERC-1271 / ERC-6492) and reports `deployed` as a FACT; this verifier keeps the POLICY:
|
|
112
|
+
* - a fail-closed reader result (evidence.source begins `fail-closed`) or a throw → reject (signature
|
|
113
|
+
* is critical — fail closed, like the inline read's revert);
|
|
114
|
+
* - `valid === false` → reject;
|
|
115
|
+
* - `requireDeployed && !deployed` → reject (a counterfactual/undeployed SA; the caller must opt into
|
|
116
|
+
* it explicitly with `requireDeployed: false`, exactly as the legacy inline path required).
|
|
117
|
+
* Omit ⇒ unchanged inline read (USV when `universalSignatureValidator` is set, else legacy ERC-1271).
|
|
118
|
+
*/
|
|
119
|
+
chainSignatureReader?: {
|
|
120
|
+
verifySmartAgentSignature(input: {
|
|
121
|
+
signer: Address;
|
|
122
|
+
digest: Hex;
|
|
123
|
+
signature: Hex;
|
|
124
|
+
}): Promise<{
|
|
125
|
+
valid: boolean;
|
|
126
|
+
deployed: boolean;
|
|
127
|
+
evidence?: {
|
|
128
|
+
source: string;
|
|
129
|
+
};
|
|
130
|
+
}>;
|
|
131
|
+
};
|
|
70
132
|
/**
|
|
71
133
|
* Audit sink (audit C3 pass 3b). When provided, every verify outcome
|
|
72
134
|
* emits a `delegation.verify.{accept,reject}` event. The principal
|
|
@@ -133,6 +195,17 @@ export interface VerifyOptsExt extends VerifyOpts {
|
|
|
133
195
|
payloadHash: Hex;
|
|
134
196
|
packedSignatures: Hex;
|
|
135
197
|
};
|
|
198
|
+
/**
|
|
199
|
+
* Usage-accounting mode for the delegation token's `usageLimit`/JTI (spec 290 §3).
|
|
200
|
+
* - `'consume'` (DEFAULT — unchanged): atomically consume one use at verify.
|
|
201
|
+
* - `'reserve'`: reserve an in-flight use at verify and return a
|
|
202
|
+
* `JtiReservation` on the success result; the caller `commit()`s ONLY after
|
|
203
|
+
* the call is admitted + executed, and `release()`s on any later rejection
|
|
204
|
+
* (rate limit, budget, policy) so a post-verify failure never burns a use.
|
|
205
|
+
* Requires the `jtiStore` to implement `reserveUsage` (else verify fails
|
|
206
|
+
* closed — no silent fallback to consume).
|
|
207
|
+
*/
|
|
208
|
+
usageMode?: 'consume' | 'reserve';
|
|
136
209
|
/**
|
|
137
210
|
* When `true`, verify that the delegator's smart account has
|
|
138
211
|
* pre-blessed this delegation hash on-chain via
|
|
@@ -147,12 +220,27 @@ export interface VerifyOptsExt extends VerifyOpts {
|
|
|
147
220
|
*/
|
|
148
221
|
requireAcceptedOnChain?: boolean;
|
|
149
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* DEL-001 (spec 270 v4) — the chain-free part of the session-key binding (testable without an RPC).
|
|
225
|
+
* Returns an error reason, or `null` when the leaf links correctly: `sessionDelegation` present, its
|
|
226
|
+
* delegator is the outer delegation's DELEGATOR (the principal's SA — the canonical identity every
|
|
227
|
+
* connection strategy signs for), and its delegate is the presenting session key. The signature proof
|
|
228
|
+
* (the delegator SA authorized the leaf — validated via the UniversalSignatureValidator, so any
|
|
229
|
+
* credential type works) is checked separately in `verifyDelegationToken`.
|
|
230
|
+
*
|
|
231
|
+
* v4 binds to the DELEGATOR (was the delegate in v3): the SA's own authority — recoverable at connect
|
|
232
|
+
* under every credential strategy alike — vouches for the session key.
|
|
233
|
+
*/
|
|
234
|
+
export declare function sessionDelegateBindingError(delegation: Delegation, sessionDelegation: Delegation | undefined, sessionKeyAddress: Address): string | null;
|
|
150
235
|
/**
|
|
151
236
|
* Full verification pipeline. Caller passes `toolName` in opts for tool-scope
|
|
152
237
|
* caveat evaluation; without it the mcp-tool-scope caveat denies.
|
|
153
238
|
*/
|
|
154
239
|
export declare function verifyDelegationToken(token: string, opts: VerifyOptsExt): Promise<{
|
|
155
240
|
principal: Address;
|
|
241
|
+
sessionKeyAddress: Address;
|
|
156
242
|
grants?: DataScopeGrant[];
|
|
243
|
+
recordScopes?: VaultRecordScopeGrant[];
|
|
244
|
+
usage?: import('./types.js').JtiReservation;
|
|
157
245
|
} | VerifyError>;
|
|
158
246
|
//# sourceMappingURL=token.d.ts.map
|
package/dist/token.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"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"}
|