twzrd-x402-gate 0.11.2 → 0.11.4
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/CHANGELOG.md +17 -0
- package/QUICKSTART.md +3 -3
- package/README.md +4 -4
- package/dist/all-offers.d.ts +3 -0
- package/dist/all-offers.d.ts.map +1 -1
- package/dist/all-offers.js +3 -0
- package/dist/all-offers.js.map +1 -1
- package/dist/cloudflare-base.d.ts +2 -0
- package/dist/cloudflare-base.d.ts.map +1 -1
- package/dist/cloudflare-base.js +107 -43
- package/dist/cloudflare-base.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -8
- package/dist/config.js.map +1 -1
- package/dist/doctor.js +6 -6
- package/dist/evaluate.d.ts +1 -1
- package/dist/evaluate.d.ts.map +1 -1
- package/dist/evaluate.js +1 -1
- package/dist/evaluate.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/intent-adapters.d.ts +9 -0
- package/dist/intent-adapters.d.ts.map +1 -1
- package/dist/intent-adapters.js +21 -1
- package/dist/intent-adapters.js.map +1 -1
- package/dist/mcp-hook.d.ts.map +1 -1
- package/dist/mcp-hook.js +2 -0
- package/dist/mcp-hook.js.map +1 -1
- package/dist/mpp-hook.d.ts +0 -60
- package/dist/mpp-hook.d.ts.map +1 -1
- package/dist/mpp-hook.js +2 -1
- package/dist/mpp-hook.js.map +1 -1
- package/dist/paying-fetch.d.ts.map +1 -1
- package/dist/paying-fetch.js +15 -3
- package/dist/paying-fetch.js.map +1 -1
- package/dist/payto.d.ts +6 -0
- package/dist/payto.d.ts.map +1 -1
- package/dist/payto.js +1 -1
- package/dist/payto.js.map +1 -1
- package/dist/policy-fetch.d.ts.map +1 -1
- package/dist/policy-fetch.js +34 -15
- package/dist/policy-fetch.js.map +1 -1
- package/dist/seller-hook.d.ts +0 -27
- package/dist/seller-hook.d.ts.map +1 -1
- package/dist/seller-hook.js +2 -1
- package/dist/seller-hook.js.map +1 -1
- package/dist/wash-default.d.ts.map +1 -1
- package/dist/wash-default.js +2 -1
- package/dist/wash-default.js.map +1 -1
- package/dist/x402-client-hook.d.ts +1 -1
- package/dist/x402-client-hook.d.ts.map +1 -1
- package/dist/x402-client-hook.js +2 -1
- package/dist/x402-client-hook.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -28,6 +28,23 @@ All notable changes to `twzrd-x402-gate`. Dates are npm publish dates (UTC).
|
|
|
28
28
|
- **Seller side** (`createTwzrdSettleGuard`): fail-open by default. A screen that throws
|
|
29
29
|
returns without aborting settlement unless `failOpen: false`.
|
|
30
30
|
|
|
31
|
+
## 0.11.4 - 2026-10-01 (security fix)
|
|
32
|
+
|
|
33
|
+
- **`createTwzrdPolicyFetch` and the x402 intent adapter refuse a non-USDC asset** (`twzrd_non_usdc_asset`) instead of reading its base units as USD: 5 wSOL (`500000000`) passed a $1000 cap as "$500". The hook and approval seats already refused it; the policy seat now agrees. A bare `"USDC"` symbol is not a mint and is refused like any other non-mint asset on a network with a known USDC set. The MPP seat has its own priced-asset table and is unchanged (it also prices USDT 1:1; the x402 seats do not).
|
|
34
|
+
- **Base Worker**: an entry whose network is spelled `BASE`, `base` or `eip155:8453 ` is scored like `eip155:8453` (it was skipped, so a clean sibling could approve a wash one). An amount too large for a finite number is refused (`twzrd_invalid_price`). The Worker pays EVM entries only; Solana siblings are not scored by it.
|
|
35
|
+
|
|
36
|
+
## 0.11.3 — 2026-10-01 (security fix)
|
|
37
|
+
|
|
38
|
+
Follow-up to a red-team of the published 0.11.2. Every change adds a refusal or makes one reliable.
|
|
39
|
+
|
|
40
|
+
- **One flag parser.** `failOpen` (override, wash seat, seller hook), `cloudflare-base` `failOpen` and `refuseUnevaluated`, and the MPP `treatWarnAsBlock`
|
|
41
|
+
read a boolean the same way: true, 1, or true/1/yes/on in any case are on; anything else is off, and a typo warns once. `failOpen: "false"` no longer
|
|
42
|
+
opens on an outage.
|
|
43
|
+
- **`createTwzrdPayingFetch` and `createTwzrdPolicyFetch` check every offer**, as the other wrappers do since 0.11.2, and refuse an entry with no recipient.
|
|
44
|
+
- **`./cloudflare-base` has a deadline** (`intelTimeoutMs`, default 2000) and honours string flags.
|
|
45
|
+
- An `async` `onReceipt` that rejects no longer crashes the host. `intelTimeoutMs` above 2^31-1 is clamped instead of becoming 1 ms (the main gate config and the Base Worker; `timeoutMs` on the wash seat and settle guard is not clamped and fails closed by default). `createTwzrdPolicyFetch` books the costliest offer in the spend ledger, since the client may pay any entry.
|
|
46
|
+
- Behavior changes to note: on the paying and policy fetch wrappers a 402 with a legitimate entry plus a sibling that has no recipient (e.g. another rail) is now refused whole (`twzrd_unidentifiable_payment_recipient`), matching `wrapFetchWithTwzrdGate`; more than 8 distinct entries is refused (`too_many_payment_options`); settle-guard `failOpen` of `"false"`/`"0"`/`0` now fails closed (was open).
|
|
47
|
+
|
|
31
48
|
## 0.11.2 — 2026-09-28 (security fix)
|
|
32
49
|
|
|
33
50
|
Fixes from a line-by-line audit of the published 0.11.1. Every change adds a
|
package/QUICKSTART.md
CHANGED
|
@@ -6,13 +6,13 @@ is unreachable the gate never *invents* a wash flag. A failed preflight, or a me
|
|
|
6
6
|
outage on a scored path, blocks by default (`TWZRD_FAIL_OPEN=true` to allow). A reachable
|
|
7
7
|
card with no wash signal still proceeds.
|
|
8
8
|
|
|
9
|
-
**Pin:** `twzrd-x402-gate@0.11.
|
|
9
|
+
**Pin:** `twzrd-x402-gate@0.11.4` + stock PayAI client `x402-solana@3.0.0` (official
|
|
10
10
|
`beforePayment` seat). `@x402/core` Path E remains supported; refuse script is fallback.
|
|
11
11
|
|
|
12
12
|
## 1. Stock PayAI client (default seat — copy-paste)
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
npm install twzrd-x402-gate@0.11.
|
|
15
|
+
npm install twzrd-x402-gate@0.11.4 x402-solana@3.0.0
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
> **ESM-only.** The package ships `import` conditions only — a CommonJS
|
|
@@ -37,7 +37,7 @@ Then: `await client.fetch("https://merchant.example/paid");`
|
|
|
37
37
|
## 1b. Official `@x402/core` client (Path E)
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
npm install twzrd-x402-gate@0.11.
|
|
40
|
+
npm install twzrd-x402-gate@0.11.4 @x402/core @x402/fetch @x402/svm
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
```typescript
|
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ refuse. Protects the **payer** from a risky **merchant** (`payTo`). Chain-neutra
|
|
|
41
41
|
### Default-on AutoGate (5 lines)
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
npm install twzrd-x402-gate@0.11.
|
|
44
|
+
npm install twzrd-x402-gate@0.11.4 @x402/core @x402/fetch @x402/svm
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
```typescript
|
|
@@ -80,7 +80,7 @@ transfer on-chain. Wash/sybil edges are primarily discounted in TWZRD scoring, n
|
|
|
80
80
|
revenue refusal.
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
|
-
npm install twzrd-x402-gate@0.11.
|
|
83
|
+
npm install twzrd-x402-gate@0.11.4
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
```typescript
|
|
@@ -125,7 +125,7 @@ Fixture-backed SVM extract tests live in `test/seller-hook.test.ts` +
|
|
|
125
125
|
Install the published gate and run against wash fixtures:
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
npm install twzrd-x402-gate@0.11.
|
|
128
|
+
npm install twzrd-x402-gate@0.11.4
|
|
129
129
|
# from package root after install, or from a checkout:
|
|
130
130
|
npm run wash-dogfood
|
|
131
131
|
```
|
|
@@ -299,7 +299,7 @@ Dogfood (one public live proof path):
|
|
|
299
299
|
## Install
|
|
300
300
|
|
|
301
301
|
```bash
|
|
302
|
-
npm install twzrd-x402-gate@0.11.
|
|
302
|
+
npm install twzrd-x402-gate@0.11.4
|
|
303
303
|
```
|
|
304
304
|
|
|
305
305
|
Do not hardcode a version in this doc — every past pin here (**0.5.4**, **0.7.1**, **0.8.5**,
|
package/dist/all-offers.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ export declare function firstRefusedOffer(offers: Array<Record<string, unknown>>
|
|
|
20
20
|
config?: ResolvedTwzrdGateConfig;
|
|
21
21
|
resourceUrl?: string;
|
|
22
22
|
agentIntent: string;
|
|
23
|
+
resourceName?: string;
|
|
24
|
+
buyerWallet?: string;
|
|
25
|
+
sellerWallet?: string;
|
|
23
26
|
skip?: Record<string, unknown>;
|
|
24
27
|
}): Promise<{
|
|
25
28
|
offer: Record<string, unknown>;
|
package/dist/all-offers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all-offers.d.ts","sourceRoot":"","sources":["../src/all-offers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAS3D;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAanE,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAU/E;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAEzF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACtC,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACA,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"all-offers.d.ts","sourceRoot":"","sources":["../src/all-offers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAS3D;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAanE,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAU/E;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAEzF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACtC,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACA,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAyBzF"}
|
package/dist/all-offers.js
CHANGED
|
@@ -55,6 +55,9 @@ export async function firstRefusedOffer(offers, opts) {
|
|
|
55
55
|
payTo: f.payTo,
|
|
56
56
|
priceUsdc: priceUsdcFromAmountMicro(f.amount, offer),
|
|
57
57
|
agentIntent: opts.agentIntent,
|
|
58
|
+
resourceName: opts.resourceName,
|
|
59
|
+
buyerWallet: opts.buyerWallet,
|
|
60
|
+
sellerWallet: opts.sellerWallet,
|
|
58
61
|
chain: offer.network,
|
|
59
62
|
asset: requirementAsset(offer),
|
|
60
63
|
}, opts.config);
|
package/dist/all-offers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all-offers.js","sourceRoot":"","sources":["../src/all-offers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAEnE,SAAS,QAAQ,CAAC,CAA0B;IAC1C,MAAM,CAAC,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO;QACL,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAC5C,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QACrC,CAAC,CAAC,QAAQ,IAAI,EAAE;KACjB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAmC,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,CAA0B,EAAE,CAA0B;IAC9E,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAsC,EACtC,
|
|
1
|
+
{"version":3,"file":"all-offers.js","sourceRoot":"","sources":["../src/all-offers.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,8 @@ export type CloudflareBaseGateOptions = {
|
|
|
41
41
|
agentIntent?: string;
|
|
42
42
|
/** Default false: an unavailable or malformed preflight does not permit signing. */
|
|
43
43
|
failOpen?: boolean;
|
|
44
|
+
/** Deadline for the preflight call, ms (default 2000). A miss is an outage decided by failOpen. */
|
|
45
|
+
intelTimeoutMs?: number;
|
|
44
46
|
};
|
|
45
47
|
export declare class TwzrdBasePaymentBlockedError extends Error {
|
|
46
48
|
readonly verdict: BasePreflightVerdict;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare-base.d.ts","sourceRoot":"","sources":["../src/cloudflare-base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,YAAY,gBAA4B,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,qFAAqF;IACrF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,SAAS,+CAA+C,CAAC;AAEtE,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudflare-base.d.ts","sourceRoot":"","sources":["../src/cloudflare-base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,YAAY,gBAA4B,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,qFAAqF;IACrF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,SAAS,+CAA+C,CAAC;AAEtE,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mGAAmG;IACnG,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAWF,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;gBAE3B,OAAO,EAAE,oBAAoB;CAK1C;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,0BAA0B,EACxC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,oBAAoB,CAAC,CAwC/B;AA2BD,qFAAqF;AACrF,wBAAgB,iCAAiC,CAC/C,OAAO,GAAE,yBAA8B,GACtC,CAAC,YAAY,EAAE,0BAA0B,KAAK,OAAO,CAAC,OAAO,CAAC,CAqBhE;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,YAAY,EAAE,0BAA0B,EACxC,OAAO,EAAE,yBAAyB,EAClC,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC3B,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAgDD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,IAAI,CAAC,yBAAyB,EAAE,mBAAmB,GAAG,mBAAmB,CAAM,GACvF,MAAM,GAAG,SAAS,CAoBpB"}
|
package/dist/cloudflare-base.js
CHANGED
|
@@ -9,6 +9,14 @@ export const BASE_CHAIN_ID = 8453;
|
|
|
9
9
|
export const BASE_NETWORK = `eip155:${BASE_CHAIN_ID}`;
|
|
10
10
|
/** Base mainnet USDC. The only asset this module signs for. */
|
|
11
11
|
export const BASE_USDC = "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913";
|
|
12
|
+
const TRUE_FLAGS = new Set(["true", "1", "yes", "on"]);
|
|
13
|
+
/** Same reading as the main entry's isTrueFlag (kept local: this module imports no package code). */
|
|
14
|
+
function isTrueFlag(v) {
|
|
15
|
+
if (v === true || v === 1)
|
|
16
|
+
return true;
|
|
17
|
+
return typeof v === "string" && TRUE_FLAGS.has(v.trim().toLowerCase());
|
|
18
|
+
}
|
|
19
|
+
const DEFAULT_INTEL_TIMEOUT_MS = 2000;
|
|
12
20
|
export class TwzrdBasePaymentBlockedError extends Error {
|
|
13
21
|
verdict;
|
|
14
22
|
constructor(verdict) {
|
|
@@ -30,40 +38,92 @@ export async function twzrdBasePreflight(requirements, options = {}) {
|
|
|
30
38
|
if (typeof fetchFn !== "function")
|
|
31
39
|
throw new Error("[twzrd] Worker fetch is unavailable");
|
|
32
40
|
const intelBase = (options.intelBase ?? "https://intel.twzrd.xyz").replace(/\/+$/, "");
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
41
|
+
const t = Number(options.intelTimeoutMs);
|
|
42
|
+
const timeoutMs = Number.isFinite(t) && t > 0 ? Math.min(t, 2_147_483_647) : DEFAULT_INTEL_TIMEOUT_MS;
|
|
43
|
+
const ctrl = new AbortController();
|
|
44
|
+
let timer;
|
|
45
|
+
const deadline = new Promise((_, reject) => {
|
|
46
|
+
timer = setTimeout(() => {
|
|
47
|
+
ctrl.abort();
|
|
48
|
+
reject(new Error(`[twzrd] Base preflight timed out after ${timeoutMs}ms`));
|
|
49
|
+
}, timeoutMs);
|
|
50
|
+
});
|
|
51
|
+
const call = (async () => {
|
|
52
|
+
const response = await fetchFn(`${intelBase}/v1/intel/preflight`, {
|
|
53
|
+
signal: ctrl.signal,
|
|
54
|
+
method: "POST",
|
|
55
|
+
headers: { "content-type": "application/json" },
|
|
56
|
+
body: JSON.stringify({
|
|
57
|
+
resource_name: options.resourceName ?? requirements.resource ?? "cloudflare_base_x402",
|
|
58
|
+
resource_url: requirements.resource,
|
|
59
|
+
seller_wallet: payTo,
|
|
60
|
+
price_usdc: priceUsdc,
|
|
61
|
+
agent_intent: options.agentIntent ?? "cloudflare_base_x402_preflight",
|
|
62
|
+
chain: "base",
|
|
63
|
+
chain_id: BASE_CHAIN_ID,
|
|
64
|
+
}),
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok)
|
|
67
|
+
throw new Error(`[twzrd] Base preflight HTTP ${response.status}`);
|
|
68
|
+
return normalizePreflight(await response.json());
|
|
69
|
+
})();
|
|
70
|
+
try {
|
|
71
|
+
return await Promise.race([call, deadline]);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
clearTimeout(timer);
|
|
75
|
+
call.catch(() => { });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* A Base entry by network name or chain id, read case- and whitespace-insensitively ("BASE",
|
|
80
|
+
* "eip155:8453 ") so a spelling variant is scored, not skipped. This Worker pays EVM entries
|
|
81
|
+
* only: Solana siblings are not its to sign and are deliberately not scored here (0.11.4).
|
|
82
|
+
*/
|
|
83
|
+
function isBaseEntry(c) {
|
|
84
|
+
const network = typeof c.network === "string" ? c.network.trim().toLowerCase() : undefined;
|
|
85
|
+
const chainId = c.chainId ?? c.chain_id;
|
|
86
|
+
const chain = typeof chainId === "string" ? chainId.trim() : chainId;
|
|
87
|
+
return network === BASE_NETWORK || network === "base" || network === "base-mainnet" || chain === BASE_CHAIN_ID || chain === String(BASE_CHAIN_ID);
|
|
88
|
+
}
|
|
89
|
+
/** One requirements object per Base entry, so every entry the Worker could sign is evaluated (0.11.3). */
|
|
90
|
+
function perBaseEntry(requirements) {
|
|
91
|
+
const accepts = Array.isArray(requirements.accepts) ? requirements.accepts : [];
|
|
92
|
+
const base = accepts.filter((c) => {
|
|
93
|
+
if (!c || typeof c !== "object")
|
|
94
|
+
return false;
|
|
95
|
+
return isBaseEntry(c);
|
|
45
96
|
});
|
|
46
|
-
if (
|
|
47
|
-
|
|
48
|
-
|
|
97
|
+
if (base.length === 0)
|
|
98
|
+
return [requirements];
|
|
99
|
+
if (base.length > 8)
|
|
100
|
+
throw new OfferRefusal("too_many_payment_options", "[twzrd] more than 8 Base offers");
|
|
101
|
+
return base.map((entry) => ({ ...requirements, accepts: [entry] }));
|
|
49
102
|
}
|
|
50
103
|
/** Cloudflare `withX402Client` callback: true permits the retry; false aborts it. */
|
|
51
104
|
export function createTwzrdCloudflareBaseApproval(options = {}) {
|
|
52
105
|
return async (requirements) => {
|
|
53
|
-
let
|
|
106
|
+
let entries;
|
|
107
|
+
const offers = [];
|
|
54
108
|
try {
|
|
55
|
-
|
|
109
|
+
entries = perBaseEntry(requirements);
|
|
110
|
+
for (const e of entries)
|
|
111
|
+
offers.push(baseOffer(e));
|
|
56
112
|
}
|
|
57
113
|
catch {
|
|
58
114
|
// A malformed or non-USDC offer is not an outage: failOpen never signs it.
|
|
59
115
|
return false;
|
|
60
116
|
}
|
|
61
117
|
try {
|
|
62
|
-
|
|
63
|
-
|
|
118
|
+
for (let i = 0; i < entries.length; i++) {
|
|
119
|
+
const verdict = await twzrdBasePreflight(entries[i], options);
|
|
120
|
+
if (baseRefusal(verdict, offers[i].priceUsdc, options) !== undefined)
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
64
124
|
}
|
|
65
125
|
catch {
|
|
66
|
-
return options.failOpen
|
|
126
|
+
return isTrueFlag(options.failOpen);
|
|
67
127
|
}
|
|
68
128
|
};
|
|
69
129
|
}
|
|
@@ -76,9 +136,12 @@ export function createTwzrdCloudflareBaseApproval(options = {}) {
|
|
|
76
136
|
export async function withTwzrdBasePreflight(requirements, options, signOrSend) {
|
|
77
137
|
// Offer shape first: a malformed amount or non-USDC asset is refused before
|
|
78
138
|
// intel and is never an outage for failOpen to wave through (0.11.2).
|
|
79
|
-
let
|
|
139
|
+
let entries;
|
|
140
|
+
const offers = [];
|
|
80
141
|
try {
|
|
81
|
-
|
|
142
|
+
entries = perBaseEntry(requirements);
|
|
143
|
+
for (const e of entries)
|
|
144
|
+
offers.push(baseOffer(e));
|
|
82
145
|
}
|
|
83
146
|
catch (error) {
|
|
84
147
|
throw new TwzrdBasePaymentBlockedError({
|
|
@@ -87,18 +150,20 @@ export async function withTwzrdBasePreflight(requirements, options, signOrSend)
|
|
|
87
150
|
reasons: [refusalCode(error)],
|
|
88
151
|
});
|
|
89
152
|
}
|
|
90
|
-
let
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
153
|
+
for (let i = 0; i < entries.length; i++) {
|
|
154
|
+
let verdict;
|
|
155
|
+
try {
|
|
156
|
+
verdict = await twzrdBasePreflight(entries[i], options);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (isTrueFlag(options.failOpen))
|
|
160
|
+
return signOrSend();
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
const refusal = baseRefusal(verdict, offers[i].priceUsdc, options);
|
|
164
|
+
if (refusal) {
|
|
165
|
+
throw new TwzrdBasePaymentBlockedError({ ...verdict, reasons: [refusal, ...verdict.reasons] });
|
|
166
|
+
}
|
|
102
167
|
}
|
|
103
168
|
return signOrSend();
|
|
104
169
|
}
|
|
@@ -120,13 +185,7 @@ function refusalCode(error) {
|
|
|
120
185
|
*/
|
|
121
186
|
function baseOffer(requirements) {
|
|
122
187
|
const accepts = Array.isArray(requirements.accepts) ? requirements.accepts : [];
|
|
123
|
-
const accept = accepts.find((candidate) =>
|
|
124
|
-
if (!candidate || typeof candidate !== "object")
|
|
125
|
-
return false;
|
|
126
|
-
const network = candidate.network;
|
|
127
|
-
const chainId = candidate.chainId ?? candidate.chain_id;
|
|
128
|
-
return network === BASE_NETWORK || chainId === BASE_CHAIN_ID || chainId === String(BASE_CHAIN_ID);
|
|
129
|
-
});
|
|
188
|
+
const accept = accepts.find((candidate) => !!candidate && typeof candidate === "object" && isBaseEntry(candidate));
|
|
130
189
|
const payTo = accept?.payTo ?? accept?.pay_to;
|
|
131
190
|
if (typeof payTo !== "string" || !/^0x[a-fA-F0-9]{40}$/.test(payTo)) {
|
|
132
191
|
throw new OfferRefusal("twzrd_unidentifiable_payment_recipient", "[twzrd] Base x402 requirements lack a valid eip155:8453 payTo");
|
|
@@ -144,7 +203,12 @@ function baseOffer(requirements) {
|
|
|
144
203
|
if (asset != null && String(asset).toLowerCase() !== BASE_USDC) {
|
|
145
204
|
throw new OfferRefusal("twzrd_non_usdc_asset", "[twzrd] Base offer names an asset other than USDC");
|
|
146
205
|
}
|
|
147
|
-
|
|
206
|
+
const priceUsdc = Number(amount) / 1_000_000;
|
|
207
|
+
// 400 digits overflow Number to Infinity; the Solana hook refuses that as twzrd_invalid_price.
|
|
208
|
+
if (!Number.isFinite(priceUsdc)) {
|
|
209
|
+
throw new OfferRefusal("twzrd_invalid_price", "[twzrd] Base offer amount is out of range");
|
|
210
|
+
}
|
|
211
|
+
return { payTo, priceUsdc };
|
|
148
212
|
}
|
|
149
213
|
/**
|
|
150
214
|
* The package's signing rules applied to a Base preflight card (0.11.2).
|
|
@@ -161,7 +225,7 @@ export function baseRefusal(verdict, priceUsdc, options = {}) {
|
|
|
161
225
|
const unevaluated = (typeof verdict.nullReason === "string" && verdict.nullReason.trim() !== "") || verdict.scoreIsNull === true;
|
|
162
226
|
if (unevaluated) {
|
|
163
227
|
const nr = verdict.nullReason || "score_null";
|
|
164
|
-
if (options.refuseUnevaluated
|
|
228
|
+
if (isTrueFlag(options.refuseUnevaluated))
|
|
165
229
|
return `twzrd_unevaluated_subject_${nr}`;
|
|
166
230
|
if (cap === null)
|
|
167
231
|
return `twzrd_unevaluated_no_cap_${nr}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare-base.js","sourceRoot":"","sources":["../src/cloudflare-base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,aAAa,EAAE,CAAC;AAmBtD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAG,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudflare-base.js","sourceRoot":"","sources":["../src/cloudflare-base.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -27,5 +27,11 @@ export type ResolvedTwzrdGateConfig = {
|
|
|
27
27
|
runId: string;
|
|
28
28
|
};
|
|
29
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* One reading of a boolean flag for every seat (0.11.3): true, 1, or the strings
|
|
32
|
+
* true/1/yes/on in any case are on. Everything else is off, and an unrecognised
|
|
33
|
+
* non-empty string (a typo) is off with a one-time warning, never silently on.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isTrueFlag(v: unknown): boolean;
|
|
30
36
|
export declare function resolveConfig(overrides?: TwzrdGateConfig): ResolvedTwzrdGateConfig;
|
|
31
37
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,wFAAwF;IACxF,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gGAAgG;IAChG,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,sBAAsB,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7C,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,0EAA0E;IAC1E,WAAW,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,wFAAwF;IACxF,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gGAAgG;IAChG,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,sBAAsB,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7C,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,0EAA0E;IAC1E,WAAW,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD,CAAC;AAoBF;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAW9C;AAYD,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,uBAAuB,CA8FlF"}
|
package/dist/config.js
CHANGED
|
@@ -11,19 +11,35 @@ function parseBlockDecisions(raw) {
|
|
|
11
11
|
* A typo must not silently leave strict mode off (0.11.2).
|
|
12
12
|
*/
|
|
13
13
|
const TRUTHY = new Set(["true", "1", "yes", "on"]);
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const FALSY = new Set(["", "false", "0", "no", "off"]);
|
|
15
|
+
const warnedFlags = new Set();
|
|
16
|
+
/**
|
|
17
|
+
* One reading of a boolean flag for every seat (0.11.3): true, 1, or the strings
|
|
18
|
+
* true/1/yes/on in any case are on. Everything else is off, and an unrecognised
|
|
19
|
+
* non-empty string (a typo) is off with a one-time warning, never silently on.
|
|
20
|
+
*/
|
|
21
|
+
export function isTrueFlag(v) {
|
|
16
22
|
if (v === true || v === 1)
|
|
17
23
|
return true;
|
|
18
|
-
if (typeof v === "string")
|
|
19
|
-
|
|
24
|
+
if (typeof v === "string") {
|
|
25
|
+
const t = v.trim().toLowerCase();
|
|
26
|
+
if (TRUTHY.has(t))
|
|
27
|
+
return true;
|
|
28
|
+
if (!FALSY.has(t) && !warnedFlags.has(t)) {
|
|
29
|
+
warnedFlags.add(t);
|
|
30
|
+
console.warn(`[twzrd-x402-gate] unrecognised flag value ${JSON.stringify(v)} treated as off; use true/false`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
20
33
|
return false;
|
|
21
34
|
}
|
|
35
|
+
function strictFlag(override, env) {
|
|
36
|
+
return isTrueFlag(override !== undefined && override !== null ? override : env);
|
|
37
|
+
}
|
|
22
38
|
const DEFAULT_INTEL_TIMEOUT_MS = 2000;
|
|
23
39
|
function intelTimeout(override, env) {
|
|
24
40
|
const raw = override ?? env;
|
|
25
41
|
const n = typeof raw === "number" ? raw : raw == null || raw === "" ? NaN : Number(raw);
|
|
26
|
-
return Number.isFinite(n) && n > 0 ? n : DEFAULT_INTEL_TIMEOUT_MS;
|
|
42
|
+
return Number.isFinite(n) && n > 0 ? Math.min(n, 2_147_483_647) : DEFAULT_INTEL_TIMEOUT_MS;
|
|
27
43
|
}
|
|
28
44
|
export function resolveConfig(overrides) {
|
|
29
45
|
const intelBase = (overrides?.intelBase ??
|
|
@@ -38,9 +54,9 @@ export function resolveConfig(overrides) {
|
|
|
38
54
|
// Default false (fail-closed): block and log loudly on preflight outage,
|
|
39
55
|
// and on merchant_card outage on the reputation-scored path.
|
|
40
56
|
// Opt in to legacy fail-open with TWZRD_FAIL_OPEN=true or TWZRD_FAIL_OPEN=1.
|
|
41
|
-
const failOpen = overrides?.failOpen
|
|
42
|
-
(
|
|
43
|
-
|
|
57
|
+
const failOpen = overrides?.failOpen != null
|
|
58
|
+
? isTrueFlag(overrides.failOpen)
|
|
59
|
+
: process.env.TWZRD_FAIL_OPEN === "true" || process.env.TWZRD_FAIL_OPEN === "1";
|
|
44
60
|
// Default false: can_spend false alone does not block. null_reason
|
|
45
61
|
// unknown_subject is handled earlier (refuseUnevaluated) and is not this
|
|
46
62
|
// knob. Opt in to strict can_spend gating with TWZRD_GATE_ON_CAN_SPEND (true/1/yes/on, any case).
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA4BA,SAAS,mBAAmB,CAAC,GAAuB;IAClD,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;IACtC,OAAO,IAAI,GAAG,CACZ,MAAM;SACH,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACnD,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.js
CHANGED
|
@@ -33,7 +33,7 @@ const HOSTS = [
|
|
|
33
33
|
id: "solana-agent-kit",
|
|
34
34
|
label: "Solana Agent Kit (SolanaAgentKit)",
|
|
35
35
|
deps: ["solana-agent-kit"],
|
|
36
|
-
install: "npm install twzrd-x402-gate@0.11.
|
|
36
|
+
install: "npm install twzrd-x402-gate@0.11.4",
|
|
37
37
|
snippet: `import { SolanaAgentKit } from "solana-agent-kit";
|
|
38
38
|
import { twzrdBeforeSign } from "twzrd-x402-gate";
|
|
39
39
|
|
|
@@ -49,7 +49,7 @@ const agent = new SolanaAgentKit(wallet, rpcUrl, {
|
|
|
49
49
|
id: "pay-kit",
|
|
50
50
|
label: "Solana PayKit (createPayKitClient)",
|
|
51
51
|
deps: ["@solana/pay-kit"],
|
|
52
|
-
install: "npm install twzrd-x402-gate@0.11.
|
|
52
|
+
install: "npm install twzrd-x402-gate@0.11.4 @solana/pay-kit",
|
|
53
53
|
snippet: `import { createPayKitClient } from "@solana/pay-kit";
|
|
54
54
|
import { createTwzrdPayKitBeforePaymentHook } from "twzrd-x402-gate";
|
|
55
55
|
|
|
@@ -71,7 +71,7 @@ const client = await createPayKitClient({
|
|
|
71
71
|
id: "x402-client",
|
|
72
72
|
label: "official x402 client (@x402/core)",
|
|
73
73
|
deps: ["@x402/core", "@x402/fetch", "@x402/svm"],
|
|
74
|
-
install: "npm install twzrd-x402-gate@0.11.
|
|
74
|
+
install: "npm install twzrd-x402-gate@0.11.4 @x402/core @x402/fetch @x402/svm",
|
|
75
75
|
snippet: `import { x402Client } from "@x402/core/client";
|
|
76
76
|
import { installTwzrdAutoGate } from "twzrd-x402-gate";
|
|
77
77
|
|
|
@@ -83,7 +83,7 @@ installTwzrdAutoGate(client, { refuseWashFlagged: true });`,
|
|
|
83
83
|
id: "elizaos",
|
|
84
84
|
label: "elizaOS agent runtime",
|
|
85
85
|
deps: ["@elizaos/core", "elizaos"],
|
|
86
|
-
install: "npm install twzrd-x402-gate@0.11.
|
|
86
|
+
install: "npm install twzrd-x402-gate@0.11.4",
|
|
87
87
|
snippet: `import { installTwzrdAutoGate } from "twzrd-x402-gate";
|
|
88
88
|
|
|
89
89
|
// Gate the payment client your plugin hands to the runtime, not the runtime
|
|
@@ -94,7 +94,7 @@ installTwzrdAutoGate(paymentClient, { refuseWashFlagged: true });`,
|
|
|
94
94
|
id: "goat",
|
|
95
95
|
label: "GOAT SDK",
|
|
96
96
|
deps: ["@goat-sdk/core"],
|
|
97
|
-
install: "npm install twzrd-x402-gate@0.11.
|
|
97
|
+
install: "npm install twzrd-x402-gate@0.11.4",
|
|
98
98
|
snippet: `import { installTwzrdAutoGate } from "twzrd-x402-gate";
|
|
99
99
|
|
|
100
100
|
installTwzrdAutoGate(walletClient, { refuseWashFlagged: true });`,
|
|
@@ -103,7 +103,7 @@ installTwzrdAutoGate(walletClient, { refuseWashFlagged: true });`,
|
|
|
103
103
|
id: "raw-fetch",
|
|
104
104
|
label: "raw fetch + x402 payer",
|
|
105
105
|
deps: ["x402-fetch", "x402"],
|
|
106
|
-
install: "npm install twzrd-x402-gate@0.11.
|
|
106
|
+
install: "npm install twzrd-x402-gate@0.11.4",
|
|
107
107
|
snippet: `import { installTwzrdAutoGate } from "twzrd-x402-gate";
|
|
108
108
|
|
|
109
109
|
// Wraps fetch: a refused payment never reaches the payer.
|
package/dist/evaluate.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export type EvaluateX402Options = TwzrdGateConfig & {
|
|
|
32
32
|
* Called immediately after a receipt is captured on-chain.
|
|
33
33
|
* Provides the raw twzrd_receipt object and the settlement tx hash (if present).
|
|
34
34
|
*/
|
|
35
|
-
onReceipt?: (receipt: unknown, tx: string | undefined) => void
|
|
35
|
+
onReceipt?: (receipt: unknown, tx: string | undefined) => void | Promise<void>;
|
|
36
36
|
/**
|
|
37
37
|
* Require a captured Path A receipt to be proven included in the Receipt
|
|
38
38
|
* Transparency log under a key the host pinned, before it counts as trust.
|
package/dist/evaluate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,yBAAyB,GAAG,KAAK,CAAC;IACxD;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iFAAiF;IACjF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8FAA8F;IAC9F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6GAA6G;IAC7G,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kFAAkF;IAClF,aAAa,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,uBAAuB,EAC5C,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CA+S7B"}
|
package/dist/evaluate.js
CHANGED
|
@@ -178,7 +178,7 @@ export async function evaluate_x402_resource(resourceUrl, paymentRequirements, o
|
|
|
178
178
|
// A consumer callback must not turn a paid receipt into a deny (0.11.2).
|
|
179
179
|
try {
|
|
180
180
|
if (opts.onReceipt)
|
|
181
|
-
opts.onReceipt(receipt, tx);
|
|
181
|
+
void Promise.resolve(opts.onReceipt(receipt, tx)).catch(() => { });
|
|
182
182
|
}
|
|
183
183
|
catch {
|
|
184
184
|
/* telemetry */
|