twzrd-x402-gate 0.9.0 → 0.9.1

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 (38) hide show
  1. package/README.md +9 -0
  2. package/dist/index.d.ts +9 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +7 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/paying-fetch.d.ts +15 -0
  7. package/dist/paying-fetch.d.ts.map +1 -0
  8. package/dist/paying-fetch.js +67 -0
  9. package/dist/paying-fetch.js.map +1 -0
  10. package/dist/policy-fetch.d.ts +18 -0
  11. package/dist/policy-fetch.d.ts.map +1 -0
  12. package/dist/policy-fetch.js +77 -0
  13. package/dist/policy-fetch.js.map +1 -0
  14. package/dist/policy-runtime.d.ts +2 -0
  15. package/dist/policy-runtime.d.ts.map +1 -1
  16. package/dist/policy-runtime.js +14 -0
  17. package/dist/policy-runtime.js.map +1 -1
  18. package/dist/resource-bind-tx.d.ts +27 -0
  19. package/dist/resource-bind-tx.d.ts.map +1 -0
  20. package/dist/resource-bind-tx.js +118 -0
  21. package/dist/resource-bind-tx.js.map +1 -0
  22. package/dist/resource-bind.d.ts +48 -0
  23. package/dist/resource-bind.d.ts.map +1 -0
  24. package/dist/resource-bind.js +203 -0
  25. package/dist/resource-bind.js.map +1 -0
  26. package/dist/spend-control.d.ts +39 -0
  27. package/dist/spend-control.d.ts.map +1 -0
  28. package/dist/spend-control.js +137 -0
  29. package/dist/spend-control.js.map +1 -0
  30. package/dist/spend-ledger-file.d.ts +3 -0
  31. package/dist/spend-ledger-file.d.ts.map +1 -0
  32. package/dist/spend-ledger-file.js +66 -0
  33. package/dist/spend-ledger-file.js.map +1 -0
  34. package/dist/x402-client-hook.d.ts +7 -2
  35. package/dist/x402-client-hook.d.ts.map +1 -1
  36. package/dist/x402-client-hook.js +45 -6
  37. package/dist/x402-client-hook.js.map +1 -1
  38. package/package.json +8 -3
package/README.md CHANGED
@@ -6,6 +6,15 @@ Agents pay other machines unsupervised. Most 402s are junk or wash. Something ha
6
6
  to say **no** before the signature. TWZRD is that no — inside `beforePayment` /
7
7
  fetch+sign, not inside PayAI’s SDK defaults, not as a shop at intel.twzrd.xyz.
8
8
 
9
+ The other reason the no must live at the signature: **attaching a funded wallet
10
+ to an agent that reads untrusted web content is a drain vector** — indirect
11
+ prompt injection can spend anything the agent can sign. The gate closes it by
12
+ attaching the wallet to a policy runtime the injected content cannot
13
+ renegotiate: per-request cap, rolling daily ceiling, wash brake, endpoint
14
+ mandates, and a tamper-evident spend ledger that survives restarts. A fully
15
+ compromised agent spends at most what policy allows, to whom it allows, with
16
+ every decision signed.
17
+
9
18
  ### Replace naked `createX402Client({ wallet })` (5 lines)
10
19
 
11
20
  ```bash
package/dist/index.d.ts CHANGED
@@ -17,8 +17,15 @@ export { installTwzrdAutoGate, uninstallTwzrdAutoGate, isTwzrdAutoGateDisabled,
17
17
  export { TWZRD_TRUST_GATE_BLOCK_WASH, TWZRD_TRUST_GATE_BLOCK_CAN_SPEND, TWZRD_TRUST_GATE_BLOCK_DECISION, TWZRD_TRUST_GATE_BLOCK_BUDGET, toTrustGateBlockReason, } from "./trust-gate-reason.js";
18
18
  export { attachBlockOutcomeAttestation, AUTOGATE_BLOCK_PROOF_SCHEMA, AUTOGATE_BLOCK_PROOF_SCHEMA_V1_1, AUTOGATE_BLOCK_PROOF_SCHEMA_V1_2, buildAutogateBlockProof, resolveInstalledPackageVersion, type AutogateBlockProof, type BuildAutogateBlockProofInput, type ExecutionMode, } from "./block-proof.js";
19
19
  export { safeFetch, runAgentcashFetch, main as safeFetchMain, type SafeFetchOptions, type SafeFetchResult, } from "./safe-fetch.js";
20
- export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, evaluateBeforePaymentCreation, createTwzrdBeforePaymentHook, createTwzrdFullBeforePaymentHook, mapX402SolanaRequirements, flattenDeclaredResource, type X402ClientLike, type X402SelectedRequirements, type X402DeclaredResource, type BeforePaymentCreationContext, type BeforePaymentCreationResult, type InstallX402ClientHookOptions, type X402PaymentControlOptions, type X402SolanaBeforePaymentContext, } from "./x402-client-hook.js";
20
+ export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, evaluateBeforePaymentCreation, createTwzrdBeforePaymentHook, createTwzrdFullBeforePaymentHook, mapX402SolanaRequirements, flattenDeclaredResource, resourceUrlFromPaymentRequired, type X402ClientLike, type X402SelectedRequirements, type X402DeclaredResource, type BeforePaymentCreationContext, type BeforePaymentCreationResult, type InstallX402ClientHookOptions, type X402PaymentControlOptions, type X402SolanaBeforePaymentContext, } from "./x402-client-hook.js";
21
21
  export { createTwzrdPayingClient, createTwzrdWashBeforePaymentHook, evaluateWashOnlyBeforePayment, mapWashRequirements, type WashDefaultOptions, type CreateTwzrdPayingClientInput, type CreateTwzrdPayingClientResult, type WashSelectedRequirements, type WashBeforePaymentContext, type WashBeforePaymentResult, } from "./wash-default.js";
22
+ export { createTwzrdPayingFetch, TwzrdWashAbortError } from "./paying-fetch.js";
23
+ export { RESOURCE_BIND_DOMAIN, RESOURCE_BIND_EXTRA_KEY, RESOURCE_BIND_MEMO_PREFIX, RESOURCE_BIND_MEMO_MAX, ZERO_BODY_HASH, canonicalResourceUrl, resourceBindLeafHash, networksEquivalent, rawReqFromPaymentRequired, rememberRawInvoice, wrapFetchRememberInvoice, resourceBindMemo, memoContainsResourceBind, stampResourceBind, evaluateResourceBind, type BindStrength, type ResourceBindReq, type ResourceBindDecision, } from "./resource-bind.js";
24
+ export { extractSvmMemoFromTransaction, extractSvmTransferLegs, evaluateResourceBindFromSvmTx, evaluateResourceBindLegsFromSvmTx, MEMO_PROGRAM_ADDRESS as RESOURCE_BIND_MEMO_PROGRAM, type ResourceBindLeafFields, type SvmTransferLegs, } from "./resource-bind-tx.js";
25
+ export { twzrd, spendControlSafeFetch, type SpendControlOptions, type SpendControlResult, } from "./spend-control.js";
26
+ export type { CreateTwzrdPayingFetchInput } from "./paying-fetch.js";
27
+ export { createTwzrdPolicyFetch, TwzrdPolicyAbortError } from "./policy-fetch.js";
28
+ export type { CreateTwzrdPolicyFetchInput } from "./policy-fetch.js";
22
29
  export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, type GateAdoptionTranscript, type GateAdoptionStep, type GateAdoptionAssertions, type GateAdoptionLineage, type RunGateAdoptionProofOptions, } from "./adoption-proof.js";
23
30
  export { quickCheck, QUICK_PRICE_USDC, type QuickCheckResult, type QuickCheckOptions, type TwzrdTier, } from "./quick.js";
24
31
  export { createSponsoredX402Fetch, type SponsorSettle, type SponsoredX402Options, } from "./sponsored.js";
@@ -27,6 +34,7 @@ export { canonicalJson, intentHash, toMicroUsd, fromMicroUsd, INTENT_HASH_PREFIX
27
34
  export { assertIntentApproved, createDecisionRegistry, createLocalDecisionSigner, createSeededDecisionSigner, decisionPreimage, MAX_CITED_OUTCOMES, newDecisionId, normalizeCitedOutcomes, signDecision, verifyDecisionSignature, TwzrdIntentBindingError, type AssertIntentApprovedOptions, type BindingErrorCode, type DecisionConstraints, type DecisionRegistry, type DecisionSigner, type PaymentDecision, type PaymentDecisionVerdict, } from "./decision-token.js";
28
35
  export { buildBlockedNeverSignedAttestation, buildOutcomeAttestation, computeDecisionOutcomeLeafV1, DECISION_OUTCOME_V1_DOMAIN, verifyOutcomeAttestationSignature, type DecisionOutcomeAttestation, type DecisionOutcomeFields, type OutcomeKind, type OutcomeVerdict, } from "./outcome-attestation.js";
29
36
  export { createMemorySpendLedger, evaluateIntent, POLICY_VERSION, TWZRD_BUDGET_EXCEEDED, type CounterpartyIntelligence, type EvaluateIntentOptions, type IntelligenceProvider, type Mandate, type SpendLedger, type SpendPolicy, } from "./policy-runtime.js";
37
+ export { createFileSpendLedger } from "./spend-ledger-file.js";
30
38
  export { ap2CheckoutToIntent, x402RequirementsToIntent, type Ap2Cart, type Ap2UserMandate, type X402IntentContext, } from "./intent-adapters.js";
31
39
  export { createTwzrdMppOnChallenge, mppChallengeToIntent, mppChallengeDigest, BASE_CHAIN_ID, BASE_USDC_CURRENCY, NATIVE_SOL_CURRENCY, TwzrdMppBlockError, type MppChallenge, type MppIntentContext, type MppOnChallengeHelpers, type MppOnChallengeOptions, type MppEvmChargeRequest, type MppSolanaChargeRequest, } from "./mpp-hook.js";
32
40
  export { approvalToIntelligence, counterpartyKnownFromApproval, createTwzrdIntelligenceProvider, intentAmountToPriceUsd, type TwzrdIntelligenceOptions, } from "./intelligence.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -20,8 +20,13 @@ export { installTwzrdAutoGate, uninstallTwzrdAutoGate, isTwzrdAutoGateDisabled,
20
20
  export { TWZRD_TRUST_GATE_BLOCK_WASH, TWZRD_TRUST_GATE_BLOCK_CAN_SPEND, TWZRD_TRUST_GATE_BLOCK_DECISION, TWZRD_TRUST_GATE_BLOCK_BUDGET, toTrustGateBlockReason, } from "./trust-gate-reason.js";
21
21
  export { attachBlockOutcomeAttestation, AUTOGATE_BLOCK_PROOF_SCHEMA, AUTOGATE_BLOCK_PROOF_SCHEMA_V1_1, AUTOGATE_BLOCK_PROOF_SCHEMA_V1_2, buildAutogateBlockProof, resolveInstalledPackageVersion, } from "./block-proof.js";
22
22
  export { safeFetch, runAgentcashFetch, main as safeFetchMain, } from "./safe-fetch.js";
23
- export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, evaluateBeforePaymentCreation, createTwzrdBeforePaymentHook, createTwzrdFullBeforePaymentHook, mapX402SolanaRequirements, flattenDeclaredResource, } from "./x402-client-hook.js";
23
+ export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, evaluateBeforePaymentCreation, createTwzrdBeforePaymentHook, createTwzrdFullBeforePaymentHook, mapX402SolanaRequirements, flattenDeclaredResource, resourceUrlFromPaymentRequired, } from "./x402-client-hook.js";
24
24
  export { createTwzrdPayingClient, createTwzrdWashBeforePaymentHook, evaluateWashOnlyBeforePayment, mapWashRequirements, } from "./wash-default.js";
25
+ export { createTwzrdPayingFetch, TwzrdWashAbortError } from "./paying-fetch.js";
26
+ export { RESOURCE_BIND_DOMAIN, RESOURCE_BIND_EXTRA_KEY, RESOURCE_BIND_MEMO_PREFIX, RESOURCE_BIND_MEMO_MAX, ZERO_BODY_HASH, canonicalResourceUrl, resourceBindLeafHash, networksEquivalent, rawReqFromPaymentRequired, rememberRawInvoice, wrapFetchRememberInvoice, resourceBindMemo, memoContainsResourceBind, stampResourceBind, evaluateResourceBind, } from "./resource-bind.js";
27
+ export { extractSvmMemoFromTransaction, extractSvmTransferLegs, evaluateResourceBindFromSvmTx, evaluateResourceBindLegsFromSvmTx, MEMO_PROGRAM_ADDRESS as RESOURCE_BIND_MEMO_PROGRAM, } from "./resource-bind-tx.js";
28
+ export { twzrd, spendControlSafeFetch, } from "./spend-control.js";
29
+ export { createTwzrdPolicyFetch, TwzrdPolicyAbortError } from "./policy-fetch.js";
25
30
  export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, } from "./adoption-proof.js";
26
31
  export { quickCheck, QUICK_PRICE_USDC, } from "./quick.js";
27
32
  export { createSponsoredX402Fetch, } from "./sponsored.js";
@@ -30,6 +35,7 @@ export { canonicalJson, intentHash, toMicroUsd, fromMicroUsd, INTENT_HASH_PREFIX
30
35
  export { assertIntentApproved, createDecisionRegistry, createLocalDecisionSigner, createSeededDecisionSigner, decisionPreimage, MAX_CITED_OUTCOMES, newDecisionId, normalizeCitedOutcomes, signDecision, verifyDecisionSignature, TwzrdIntentBindingError, } from "./decision-token.js";
31
36
  export { buildBlockedNeverSignedAttestation, buildOutcomeAttestation, computeDecisionOutcomeLeafV1, DECISION_OUTCOME_V1_DOMAIN, verifyOutcomeAttestationSignature, } from "./outcome-attestation.js";
32
37
  export { createMemorySpendLedger, evaluateIntent, POLICY_VERSION, TWZRD_BUDGET_EXCEEDED, } from "./policy-runtime.js";
38
+ export { createFileSpendLedger } from "./spend-ledger-file.js";
33
39
  export { ap2CheckoutToIntent, x402RequirementsToIntent, } from "./intent-adapters.js";
34
40
  export { createTwzrdMppOnChallenge, mppChallengeToIntent, mppChallengeDigest, BASE_CHAIN_ID, BASE_USDC_CURRENCY, NATIVE_SOL_CURRENCY, TwzrdMppBlockError, } from "./mpp-hook.js";
35
41
  export { approvalToIntelligence, counterpartyKnownFromApproval, createTwzrdIntelligenceProvider, intentAmountToPriceUsd, } from "./intelligence.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type WashDefaultOptions } from "./wash-default.js";
2
+ /** Wash abort; never treated as a dead origin. */
3
+ export declare class TwzrdWashAbortError extends Error {
4
+ name: string;
5
+ }
6
+ export type CreateTwzrdPayingFetchInput = WashDefaultOptions & {
7
+ wallet?: unknown;
8
+ rawFetch?: typeof fetch;
9
+ wrapPay?: (guarded: typeof fetch) => typeof fetch;
10
+ peekFetch?: typeof fetch;
11
+ topUrl?: string;
12
+ routeUrl?: string;
13
+ };
14
+ export declare function createTwzrdPayingFetch(opts: CreateTwzrdPayingFetchInput): typeof fetch;
15
+ //# sourceMappingURL=paying-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paying-fetch.d.ts","sourceRoot":"","sources":["../src/paying-fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,mBAAmB,CAAC;AAE3B,kDAAkD;AAClD,qBAAa,mBAAoB,SAAQ,KAAK;IACnC,IAAI,SAAyB;CACvC;AAID,MAAM,MAAM,2BAA2B,GAAG,kBAAkB,GAAG;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC;IAClD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAWF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,KAAK,CAuCtF"}
@@ -0,0 +1,67 @@
1
+ import { pickRequirements } from "./payto.js";
2
+ import { wrapFetchRememberInvoice } from "./resource-bind.js";
3
+ import { evaluateWashOnlyBeforePayment, mapWashRequirements, } from "./wash-default.js";
4
+ /** Wash abort; never treated as a dead origin. */
5
+ export class TwzrdWashAbortError extends Error {
6
+ name = "TwzrdWashAbortError";
7
+ }
8
+ const STRIP = /^(authorization|cookie|payment-signature|payment-response)$/i;
9
+ function fwd(h, extra) {
10
+ const out = {};
11
+ new Headers(h).forEach((v, k) => { if (!STRIP.test(k))
12
+ out[k] = v; });
13
+ for (const [k, v] of Object.entries(extra ?? {})) {
14
+ if (/^x-outbid-/i.test(k) && typeof v === "string")
15
+ out[k] = v;
16
+ }
17
+ return out;
18
+ }
19
+ export function createTwzrdPayingFetch(opts) {
20
+ const inner = opts.rawFetch ?? globalThis.fetch.bind(globalThis);
21
+ const raw = wrapFetchRememberInvoice(inner);
22
+ const peek = opts.peekFetch ?? inner;
23
+ const guarded = async (input, init) => {
24
+ const resp = await raw(input, init);
25
+ if (resp.status !== 402)
26
+ return resp;
27
+ let accepts;
28
+ try {
29
+ accepts = (await resp.clone().json()).accepts;
30
+ }
31
+ catch {
32
+ return resp;
33
+ }
34
+ const requestUrl = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
35
+ const decision = await evaluateWashOnlyBeforePayment(mapWashRequirements(pickRequirements(accepts), { requestUrl }), opts);
36
+ if (decision?.abort === true)
37
+ throw new TwzrdWashAbortError(decision.reason);
38
+ return resp;
39
+ };
40
+ let pay = opts.wrapPay?.(guarded);
41
+ return async (input, init) => {
42
+ if (!pay) {
43
+ if (opts.wallet == null)
44
+ throw new Error("[twzrd-x402-gate] createTwzrdPayingFetch needs wallet or wrapPay");
45
+ pay = (await import("@x402/fetch")).wrapFetchWithPayment(guarded, opts.wallet);
46
+ }
47
+ try {
48
+ return await pay(input, init);
49
+ }
50
+ catch (err) {
51
+ const abort = init?.signal?.aborted === true || err?.name === "AbortError";
52
+ if (err instanceof TwzrdWashAbortError || err?.name === "TwzrdPolicyAbortError" || abort)
53
+ throw err;
54
+ try {
55
+ await peek(opts.topUrl ?? "https://outbid.sh/top");
56
+ }
57
+ catch { /* peek is free */ }
58
+ const body = (await (await pay(opts.routeUrl ?? "https://outbid.sh/route", {
59
+ headers: { accept: "application/json" },
60
+ })).json());
61
+ if (typeof body.url !== "string")
62
+ throw new Error("[twzrd-x402-gate] outbid /route missing url");
63
+ return pay(body.url, { ...init, headers: fwd(init?.headers, body.forward_headers) });
64
+ }
65
+ };
66
+ }
67
+ //# sourceMappingURL=paying-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paying-fetch.js","sourceRoot":"","sources":["../src/paying-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { DecisionSigner, PaymentDecision } from "./decision-token.js";
2
+ import { type CreateTwzrdPayingFetchInput } from "./paying-fetch.js";
3
+ import { type Mandate, type SpendLedger, type SpendPolicy } from "./policy-runtime.js";
4
+ /** Budget/mandate abort; never treated as a dead origin. */
5
+ export declare class TwzrdPolicyAbortError extends Error {
6
+ name: string;
7
+ readonly decision: PaymentDecision;
8
+ constructor(decision: PaymentDecision);
9
+ }
10
+ export type CreateTwzrdPolicyFetchInput = CreateTwzrdPayingFetchInput & {
11
+ signer: DecisionSigner;
12
+ policy?: SpendPolicy;
13
+ mandate?: Mandate;
14
+ ledger?: SpendLedger;
15
+ onAudit?: (d: PaymentDecision) => void;
16
+ };
17
+ export declare function createTwzrdPolicyFetch(opts: CreateTwzrdPolicyFetchInput): typeof fetch;
18
+ //# sourceMappingURL=policy-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-fetch.d.ts","sourceRoot":"","sources":["../src/policy-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3E,OAAO,EAA0B,KAAK,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAE7F,OAAO,EAAkB,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvG,4DAA4D;AAC5D,qBAAa,qBAAsB,SAAQ,KAAK;IACrC,IAAI,SAA2B;IACxC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;gBACvB,QAAQ,EAAE,eAAe;CAItC;AAED,MAAM,MAAM,2BAA2B,GAAG,2BAA2B,GAAG;IACtE,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,KAAK,CAkDtF"}
@@ -0,0 +1,77 @@
1
+ import { x402RequirementsToIntent } from "./intent-adapters.js";
2
+ import { toMicroUsd } from "./intent.js";
3
+ import { createTwzrdPayingFetch } from "./paying-fetch.js";
4
+ import { pickRequirements } from "./payto.js";
5
+ import { evaluateIntent } from "./policy-runtime.js";
6
+ /** Budget/mandate abort; never treated as a dead origin. */
7
+ export class TwzrdPolicyAbortError extends Error {
8
+ name = "TwzrdPolicyAbortError";
9
+ decision;
10
+ constructor(decision) {
11
+ super(`[twzrd] ${decision.reasonCodes.join(",")}`);
12
+ this.decision = decision;
13
+ }
14
+ }
15
+ export function createTwzrdPolicyFetch(opts) {
16
+ let pending;
17
+ const userWrap = opts.wrapPay;
18
+ return createTwzrdPayingFetch({
19
+ ...opts,
20
+ wrapPay: (washed) => {
21
+ const gated = async (input, init) => {
22
+ const resp = await washed(input, init);
23
+ if (resp.status !== 402)
24
+ return resp;
25
+ let accepts;
26
+ try {
27
+ accepts = (await resp.clone().json()).accepts;
28
+ }
29
+ catch {
30
+ return resp;
31
+ }
32
+ let intent;
33
+ try {
34
+ const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
35
+ intent = x402RequirementsToIntent(pickRequirements(accepts), { resourceUrl: url });
36
+ }
37
+ catch {
38
+ return resp;
39
+ }
40
+ const decision = await evaluateIntent(intent, {
41
+ signer: opts.signer, policy: opts.policy, mandate: opts.mandate,
42
+ ledger: opts.ledger, recordSpend: false,
43
+ });
44
+ if (decision.decision === "block") {
45
+ opts.onAudit?.(decision);
46
+ throw new TwzrdPolicyAbortError(decision);
47
+ }
48
+ pending = { payTo: intent.payTo, amount: intent.amount, decision };
49
+ return resp;
50
+ };
51
+ let pay = userWrap?.(gated);
52
+ return async (input, init) => {
53
+ if (!pay) {
54
+ if (opts.wallet == null)
55
+ throw new Error("[twzrd-x402-gate] createTwzrdPolicyFetch needs wallet or wrapPay");
56
+ pay = (await import("@x402/fetch")).wrapFetchWithPayment(gated, opts.wallet);
57
+ }
58
+ const r = await pay(input, init);
59
+ if (r.ok && pending) {
60
+ const now = Date.now();
61
+ const micro = toMicroUsd(pending.amount);
62
+ opts.ledger?.record(`counterparty:${pending.payTo}`, micro, now);
63
+ // Mirrors evaluateIntent's recordSpend scopes — dailyCeilingUsd
64
+ // reads policy:global, which this record-on-200 path must feed.
65
+ if (opts.policy?.dailyCeilingUsd !== undefined)
66
+ opts.ledger?.record("policy:global", micro, now);
67
+ if (opts.mandate)
68
+ opts.ledger?.record(`mandate:${opts.mandate.mandateId}`, micro, now);
69
+ opts.onAudit?.(pending.decision);
70
+ }
71
+ pending = undefined;
72
+ return r;
73
+ };
74
+ },
75
+ });
76
+ }
77
+ //# sourceMappingURL=policy-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-fetch.js","sourceRoot":"","sources":["../src/policy-fetch.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,8 @@ export type SpendPolicy = {
35
35
  allowedNetworks?: string[];
36
36
  allowedAssets?: string[];
37
37
  maxAmountUsd?: string;
38
+ /** Global cumulative ceiling over a rolling 24h, all counterparties (needs a ledger). */
39
+ dailyCeilingUsd?: string;
38
40
  blocklist?: string[];
39
41
  allowlist?: string[];
40
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"policy-runtime.d.ts","sourceRoot":"","sources":["../src/policy-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-runtime.d.ts","sourceRoot":"","sources":["../src/policy-runtime.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,7 @@ export function createMemorySpendLedger() {
42
42
  };
43
43
  }
44
44
  const MONTH_MS = 30 * 24 * 60 * 60 * 1000;
45
+ const DAY_MS = 24 * 60 * 60 * 1000;
45
46
  /**
46
47
  * Evaluate one PaymentIntent. Never throws on a policy outcome — a block is a
47
48
  * signed block decision (auditable), not an exception. Throws only on
@@ -118,6 +119,14 @@ export async function evaluateIntent(intent, options) {
118
119
  // Remaining headroom for a compliant retry is the per-tx cap itself.
119
120
  blockBudget("POLICY_MAX_AMOUNT", toMicroUsd(policy.maxAmountUsd));
120
121
  }
122
+ if (policy.dailyCeilingUsd !== undefined && options.ledger) {
123
+ const spent = options.ledger.spentMicro("policy:global", DAY_MS, now);
124
+ const ceiling = toMicroUsd(policy.dailyCeilingUsd);
125
+ if (spent + amountMicro > ceiling) {
126
+ const remaining = ceiling > spent ? ceiling - spent : 0n;
127
+ blockBudget("POLICY_DAILY_CEILING", remaining);
128
+ }
129
+ }
121
130
  if (policy.recurringMaxPriceIncreasePct !== undefined &&
122
131
  intent.context?.recurring &&
123
132
  intent.context.priorSpend) {
@@ -167,6 +176,11 @@ export async function evaluateIntent(intent, options) {
167
176
  /* 4. Record spend that will be permitted (feeds cumulative/monthly caps) */
168
177
  if (!blocked && options.ledger && options.recordSpend !== false) {
169
178
  options.ledger.record(`counterparty:${intent.payTo}`, amountMicro, now);
179
+ // Global scope only when the ceiling is on — ledgers that don't opt in
180
+ // keep the one-record-per-allow invariant (hook-single-eval guard).
181
+ if (policy?.dailyCeilingUsd !== undefined) {
182
+ options.ledger.record("policy:global", amountMicro, now);
183
+ }
170
184
  if (mandate)
171
185
  options.ledger.record(`mandate:${mandate.mandateId}`, amountMicro, now);
172
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"policy-runtime.js","sourceRoot":"","sources":["../src/policy-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-runtime.js","sourceRoot":"","sources":["../src/policy-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Memo + TransferChecked from one SVM wire tx. Hash-only evaluate stays
3
+ * memo-inclusion. Legs-hard requires memo match AND mint/amount/dest-ATA.
4
+ * Decodes presented bytes; does not prove the tx landed. Caller must confirm
5
+ * inclusion (fetch by signature, err null) before treating hard as chain evidence.
6
+ */
7
+ import { type ResourceBindDecision } from "./resource-bind.js";
8
+ export declare const MEMO_PROGRAM_ADDRESS = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
9
+ export type ResourceBindLeafFields = {
10
+ leaf_hash: string;
11
+ pay_to: string;
12
+ asset: string;
13
+ amount_raw: string;
14
+ payer?: string;
15
+ };
16
+ export type SvmTransferLegs = {
17
+ mint: string;
18
+ dest: string;
19
+ authority: string;
20
+ amount: string;
21
+ tokenProgram: string;
22
+ };
23
+ export declare function extractSvmMemoFromTransaction(transaction: string): Promise<string | null>;
24
+ export declare function extractSvmTransferLegs(transaction: string): Promise<SvmTransferLegs | null>;
25
+ export declare function evaluateResourceBindFromSvmTx(transaction: string, leaf_hash: string): Promise<ResourceBindDecision>;
26
+ export declare function evaluateResourceBindLegsFromSvmTx(transaction: string, leaf: ResourceBindLeafFields): Promise<ResourceBindDecision>;
27
+ //# sourceMappingURL=resource-bind-tx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-bind-tx.d.ts","sourceRoot":"","sources":["../src/resource-bind-tx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,oBAAoB,gDAAgD,CAAC;AAIlF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACtF,CAAC;AACF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;CACrF,CAAC;AAyCF,wBAAsB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI/F;AAED,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAEjG;AAED,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GACrC,OAAO,CAAC,oBAAoB,CAAC,CAG/B;AASD,wBAAsB,iCAAiC,CACrD,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAChD,OAAO,CAAC,oBAAoB,CAAC,CAmC/B"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Memo + TransferChecked from one SVM wire tx. Hash-only evaluate stays
3
+ * memo-inclusion. Legs-hard requires memo match AND mint/amount/dest-ATA.
4
+ * Decodes presented bytes; does not prove the tx landed. Caller must confirm
5
+ * inclusion (fetch by signature, err null) before treating hard as chain evidence.
6
+ */
7
+ import { evaluateResourceBind, memoContainsResourceBind, RESOURCE_BIND_MEMO_PREFIX, } from "./resource-bind.js";
8
+ export const MEMO_PROGRAM_ADDRESS = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
9
+ const TOKEN = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
10
+ const TOKEN22 = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
11
+ function asBytes(data) {
12
+ if (!data)
13
+ return null;
14
+ return data instanceof Uint8Array ? data : new Uint8Array(data);
15
+ }
16
+ async function observe(transaction) {
17
+ const tx = transaction.trim();
18
+ if (!tx || tx.length < 32 || !/^[A-Za-z0-9+/]+=*$/.test(tx))
19
+ return null;
20
+ try {
21
+ const svm = await import("@x402/svm");
22
+ const kit = await import("@solana/kit");
23
+ const decoded = svm.decodeTransactionFromPayload({ transaction: tx });
24
+ const compiled = kit.getCompiledTransactionMessageDecoder().decode(decoded.messageBytes);
25
+ const accounts = (compiled.staticAccounts ?? []).map((a) => a.toString());
26
+ const memos = [];
27
+ let transfer = null;
28
+ for (const ix of compiled.instructions ?? []) {
29
+ if (ix.programAddressIndex == null)
30
+ continue;
31
+ const program = accounts[ix.programAddressIndex];
32
+ const d = asBytes(ix.data);
33
+ if (program === (svm.MEMO_PROGRAM_ADDRESS ?? MEMO_PROGRAM_ADDRESS)) {
34
+ if (d?.byteLength)
35
+ memos.push(new TextDecoder().decode(d));
36
+ continue;
37
+ }
38
+ if (transfer)
39
+ continue;
40
+ if ((program !== TOKEN && program !== TOKEN22) || !d || d[0] !== 12 || d.byteLength < 10)
41
+ continue;
42
+ const keys = (ix.accountIndices ?? []).map((i) => accounts[i]);
43
+ if (keys.length < 4)
44
+ continue;
45
+ const amount = new DataView(d.buffer, d.byteOffset + 1, 8).getBigUint64(0, true).toString();
46
+ transfer = { mint: keys[1], dest: keys[2], authority: keys[3], amount, tokenProgram: program };
47
+ }
48
+ return { memos, transfer };
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ export async function extractSvmMemoFromTransaction(transaction) {
55
+ const o = await observe(transaction);
56
+ if (!o?.memos.length)
57
+ return null;
58
+ return o.memos.find((m) => m.startsWith(RESOURCE_BIND_MEMO_PREFIX)) ?? o.memos[0];
59
+ }
60
+ export async function extractSvmTransferLegs(transaction) {
61
+ return (await observe(transaction))?.transfer ?? null;
62
+ }
63
+ export async function evaluateResourceBindFromSvmTx(transaction, leaf_hash) {
64
+ const tx_memo = await extractSvmMemoFromTransaction(transaction);
65
+ return evaluateResourceBind({ leaf_hash, tx_memo: tx_memo ?? undefined, extra_stamped: false });
66
+ }
67
+ function refuse(leaf_hash, reason) {
68
+ return {
69
+ strength: "refuse", evidence_level: "unbound", fact_type: "resource_bound",
70
+ leaf_hash, extra_stamped: false, reason,
71
+ };
72
+ }
73
+ export async function evaluateResourceBindLegsFromSvmTx(transaction, leaf) {
74
+ const o = await observe(transaction);
75
+ if (!o)
76
+ return evaluateResourceBind({ leaf_hash: leaf.leaf_hash, extra_stamped: false });
77
+ const tx_memo = o.memos.find((m) => m.startsWith(RESOURCE_BIND_MEMO_PREFIX)) ?? o.memos[0] ?? null;
78
+ const tr = o.transfer;
79
+ if (!tr)
80
+ return refuse(leaf.leaf_hash, "no TransferChecked in tx");
81
+ let amountOk = false;
82
+ try {
83
+ amountOk = BigInt(tr.amount) === BigInt(leaf.amount_raw);
84
+ }
85
+ catch {
86
+ amountOk = false;
87
+ }
88
+ if (tr.mint !== leaf.asset || !amountOk) {
89
+ return refuse(leaf.leaf_hash, "transfer mint/amount mismatch vs leaf");
90
+ }
91
+ if (leaf.payer && tr.authority !== leaf.payer) {
92
+ return refuse(leaf.leaf_hash, "transfer authority mismatch vs leaf.payer");
93
+ }
94
+ try {
95
+ const token = await import("@solana-program/token");
96
+ const { address } = await import("@solana/kit");
97
+ const [ata] = await token.findAssociatedTokenPda({
98
+ owner: address(leaf.pay_to), mint: address(leaf.asset), tokenProgram: address(tr.tokenProgram),
99
+ });
100
+ if (ata !== tr.dest)
101
+ return refuse(leaf.leaf_hash, "dest ATA mismatch vs ATA(pay_to, mint)");
102
+ }
103
+ catch {
104
+ return refuse(leaf.leaf_hash, "dest ATA derive failed");
105
+ }
106
+ if (!tx_memo || !memoContainsResourceBind(tx_memo, leaf.leaf_hash)) {
107
+ return {
108
+ strength: "soft", evidence_level: "client_stamped", fact_type: "resource_bound",
109
+ leaf_hash: leaf.leaf_hash, extra_stamped: false, reason: "legs match; memo unbound",
110
+ };
111
+ }
112
+ return {
113
+ strength: "hard", evidence_level: "tx_included", fact_type: "resource_bound",
114
+ leaf_hash: leaf.leaf_hash, extra_stamped: false,
115
+ reason: "memo + transfer dest/amount/asset match leaf (same tx)",
116
+ };
117
+ }
118
+ //# sourceMappingURL=resource-bind-tx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-bind-tx.js","sourceRoot":"","sources":["../src/resource-bind-tx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oBAAoB,EAAE,wBAAwB,EAAE,yBAAyB,GAE1E,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,oBAAoB,GAAG,6CAA6C,CAAC;AAClF,MAAM,KAAK,GAAG,6CAA6C,CAAC;AAC5D,MAAM,OAAO,GAAG,6CAA6C,CAAC;AAW9D,SAAS,OAAO,CAAC,IAAgB;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAmB,CAAC,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,WAAmB;IACxC,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,4BAA4B,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,GAAG,CAAC,oCAAoC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAqB,CAE/F,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,QAAQ,GAA2B,IAAI,CAAC;QAC5C,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YAC7C,IAAI,EAAE,CAAC,mBAAmB,IAAI,IAAI;gBAAE,SAAS;YAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;YACjD,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,oBAAoB,IAAI,oBAAoB,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,EAAE,UAAU;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,SAAS;YACX,CAAC;YACD,IAAI,QAAQ;gBAAE,SAAS;YACvB,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,GAAG,EAAE;gBAAE,SAAS;YACnG,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAC9B,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5F,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,WAAmB;IACrE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB;IAC9D,OAAO,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,WAAmB,EAAE,SAAiB;IAEtC,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,WAAW,CAAC,CAAC;IACjE,OAAO,oBAAoB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,MAAM,CAAC,SAAiB,EAAE,MAAc;IAC/C,OAAO;QACL,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB;QAC1E,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,WAAmB,EAAE,IAA4B;IAEjD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,oBAAoB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACnG,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;IACtB,IAAI,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IACnE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,QAAQ,GAAG,KAAK,CAAC;IAAC,CAAC;IAC7F,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,2CAA2C,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,CAAC,sBAAsB,CAAC;YAC/C,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC;SAC/F,CAAC,CAAC;QACH,IAAI,GAAG,KAAK,EAAE,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,wCAAwC,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,OAAO;YACL,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB;YAC/E,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B;SACpF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB;QAC5E,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK;QAC/C,MAAM,EAAE,wDAAwD;KACjE,CAAC;AACJ,CAAC"}