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.
- package/README.md +9 -0
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/paying-fetch.d.ts +15 -0
- package/dist/paying-fetch.d.ts.map +1 -0
- package/dist/paying-fetch.js +67 -0
- package/dist/paying-fetch.js.map +1 -0
- package/dist/policy-fetch.d.ts +18 -0
- package/dist/policy-fetch.d.ts.map +1 -0
- package/dist/policy-fetch.js +77 -0
- package/dist/policy-fetch.js.map +1 -0
- package/dist/policy-runtime.d.ts +2 -0
- package/dist/policy-runtime.d.ts.map +1 -1
- package/dist/policy-runtime.js +14 -0
- package/dist/policy-runtime.js.map +1 -1
- package/dist/resource-bind-tx.d.ts +27 -0
- package/dist/resource-bind-tx.d.ts.map +1 -0
- package/dist/resource-bind-tx.js +118 -0
- package/dist/resource-bind-tx.js.map +1 -0
- package/dist/resource-bind.d.ts +48 -0
- package/dist/resource-bind.d.ts.map +1 -0
- package/dist/resource-bind.js +203 -0
- package/dist/resource-bind.js.map +1 -0
- package/dist/spend-control.d.ts +39 -0
- package/dist/spend-control.d.ts.map +1 -0
- package/dist/spend-control.js +137 -0
- package/dist/spend-control.js.map +1 -0
- package/dist/spend-ledger-file.d.ts +3 -0
- package/dist/spend-ledger-file.d.ts.map +1 -0
- package/dist/spend-ledger-file.js +66 -0
- package/dist/spend-ledger-file.js.map +1 -0
- package/dist/x402-client-hook.d.ts +7 -2
- package/dist/x402-client-hook.d.ts.map +1 -1
- package/dist/x402-client-hook.js +45 -6
- package/dist/x402-client-hook.js.map +1 -1
- 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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAChH,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACL,iCAAiC,EACjC,KAAK,iCAAiC,GACvC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sCAAsC,EACtC,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,GAClC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,gCAAgC,EAChC,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,IAAI,IAAI,aAAa,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,yBAAyB,EACzB,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,GACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,6BAA6B,EAC7B,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,IAAI,IAAI,iBAAiB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,SAAS,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kCAAkC,EAClC,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,iCAAiC,EACjC,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC"}
|
|
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":"AAAA,qFAAqF;AACrF,qFAAqF;AACrF,uFAAuF;AACvF,qFAAqF;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAChH,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,YAAY,GAKb,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACL,iCAAiC,GAElC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,sBAAsB,GAGvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sCAAsC,EACtC,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,GAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,GAOxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,gCAAgC,EAChC,uBAAuB,EACvB,8BAA8B,GAI/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,IAAI,IAAI,aAAa,GAGtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,yBAAyB,EACzB,uBAAuB,
|
|
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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"}
|
package/dist/policy-runtime.d.ts
CHANGED
|
@@ -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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"}
|
package/dist/policy-runtime.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,YAAY,GAIb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAEvF,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;AAE5C,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;
|
|
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":"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"}
|