@agenticprimitives/delegation 1.0.0-alpha.4 → 1.0.0-alpha.40

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.
Files changed (80) hide show
  1. package/README.md +19 -2
  2. package/dist/authority-chain.d.ts +59 -0
  3. package/dist/authority-chain.d.ts.map +1 -0
  4. package/dist/authority-chain.js +70 -0
  5. package/dist/authority-chain.js.map +1 -0
  6. package/dist/caveats.d.ts +196 -1
  7. package/dist/caveats.d.ts.map +1 -1
  8. package/dist/caveats.js +374 -2
  9. package/dist/caveats.js.map +1 -1
  10. package/dist/client.d.ts +1 -1
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +2 -2
  13. package/dist/client.js.map +1 -1
  14. package/dist/evaluator.d.ts +1 -1
  15. package/dist/evaluator.d.ts.map +1 -1
  16. package/dist/evaluator.js +102 -2
  17. package/dist/evaluator.js.map +1 -1
  18. package/dist/hash.d.ts +1 -1
  19. package/dist/hash.d.ts.map +1 -1
  20. package/dist/index.d.ts +38 -11
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +43 -8
  23. package/dist/index.js.map +1 -1
  24. package/dist/invocation-proof.d.ts +133 -0
  25. package/dist/invocation-proof.d.ts.map +1 -0
  26. package/dist/invocation-proof.js +157 -0
  27. package/dist/invocation-proof.js.map +1 -0
  28. package/dist/lineage.d.ts +70 -0
  29. package/dist/lineage.d.ts.map +1 -0
  30. package/dist/lineage.js +65 -0
  31. package/dist/lineage.js.map +1 -0
  32. package/dist/mandate-handlers.d.ts +15 -0
  33. package/dist/mandate-handlers.d.ts.map +1 -0
  34. package/dist/mandate-handlers.js +279 -0
  35. package/dist/mandate-handlers.js.map +1 -0
  36. package/dist/mandate.d.ts +265 -0
  37. package/dist/mandate.d.ts.map +1 -0
  38. package/dist/mandate.js +275 -0
  39. package/dist/mandate.js.map +1 -0
  40. package/dist/method-authorization.d.ts +120 -0
  41. package/dist/method-authorization.d.ts.map +1 -0
  42. package/dist/method-authorization.js +173 -0
  43. package/dist/method-authorization.js.map +1 -0
  44. package/dist/onchain.d.ts +40 -4
  45. package/dist/onchain.d.ts.map +1 -1
  46. package/dist/onchain.js +140 -6
  47. package/dist/onchain.js.map +1 -1
  48. package/dist/presentation-release.d.ts +65 -0
  49. package/dist/presentation-release.d.ts.map +1 -0
  50. package/dist/presentation-release.js +81 -0
  51. package/dist/presentation-release.js.map +1 -0
  52. package/dist/quorum.d.ts +26 -0
  53. package/dist/quorum.d.ts.map +1 -0
  54. package/dist/quorum.js +80 -0
  55. package/dist/quorum.js.map +1 -0
  56. package/dist/session-delegation.d.ts +34 -0
  57. package/dist/session-delegation.d.ts.map +1 -0
  58. package/dist/session-delegation.js +33 -0
  59. package/dist/session-delegation.js.map +1 -0
  60. package/dist/session-manager.d.ts +1 -2
  61. package/dist/session-manager.d.ts.map +1 -1
  62. package/dist/session-manager.js +15 -6
  63. package/dist/session-manager.js.map +1 -1
  64. package/dist/standing.d.ts +101 -0
  65. package/dist/standing.d.ts.map +1 -0
  66. package/dist/standing.js +132 -0
  67. package/dist/standing.js.map +1 -0
  68. package/dist/token.d.ts +89 -1
  69. package/dist/token.d.ts.map +1 -1
  70. package/dist/token.js +485 -123
  71. package/dist/token.js.map +1 -1
  72. package/dist/types.d.ts +141 -0
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/types.js +7 -1
  75. package/dist/types.js.map +1 -1
  76. package/dist/verify-authorization.d.ts +28 -0
  77. package/dist/verify-authorization.d.ts.map +1 -0
  78. package/dist/verify-authorization.js +73 -0
  79. package/dist/verify-authorization.js.map +1 -0
  80. package/package.json +25 -16
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAeA,OAAO,EAA4B,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AACxE,OAAO,KAAK,EAEV,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,cAAc,EACf,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAwBtE;;;;;;;gBAOgB;AAChB,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAsBpD;AAiDD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAClG,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1C,IAAI,CAAC,EAAE;IACL,iEAAiE;IACjE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACA,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CA2EzC;AAuCD,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,kBAAkB,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACvC;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IASvB;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,WAAW,CAAC,EACR;QAAE,IAAI,EAAE,mBAAmB,CAAA;KAAE,GAC7B;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,WAAW,EAAE,GAAG,CAAC;QAAC,gBAAgB,EAAE,GAAG,CAAA;KAAE,CAAC;IAEnE;;;;;;;;;;;OAWG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AA+BD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAA;CAAE,GAAG,WAAW,CAAC,CAgQ1E"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"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"}