twzrd-x402-gate 0.8.9 → 0.8.11

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/QUICKSTART.md ADDED
@@ -0,0 +1,96 @@
1
+ # twzrd-x402-gate — Quickstart (15 minutes, 0 USDC)
2
+
3
+ Refuses payment to a wash-flagged merchant **before your wallet signs**. Free intel, no
4
+ API key, no signup, no config — every `TWZRD_*` env var is an optional override. If intel
5
+ is unreachable the gate never *invents* a wash flag (the wash check fails open); a failed
6
+ preflight blocks the payment by default (`TWZRD_FAIL_OPEN=true` to allow).
7
+
8
+ **Pin:** `twzrd-x402-gate@0.8.11` + stock PayAI client `x402-solana@2.1.0` (official
9
+ `beforePayment` seat). `@x402/core` Path E remains supported; refuse script is fallback.
10
+
11
+ ## 1. Stock PayAI client (default seat — copy-paste)
12
+
13
+ ```bash
14
+ npm install twzrd-x402-gate@0.8.11 x402-solana@2.1.0
15
+ ```
16
+
17
+ ```typescript
18
+ import { createX402Client } from "x402-solana";
19
+ import {
20
+ createTwzrdBeforePaymentHook,
21
+ // or: installTwzrdAutoGate
22
+ } from "twzrd-x402-gate";
23
+
24
+ const client = createX402Client({
25
+ wallet,
26
+ network: "solana",
27
+ // runs AFTER requirement selection, BEFORE signTransaction
28
+ beforePayment: createTwzrdBeforePaymentHook({ refuseWashFlagged: true }),
29
+ // equivalent:
30
+ // beforePayment: installTwzrdAutoGate("x402-solana", { refuseWashFlagged: true }),
31
+ });
32
+
33
+ await client.fetch("https://merchant.example/paid");
34
+ ```
35
+
36
+ ## 1b. Official `@x402/core` client (Path E)
37
+
38
+ ```bash
39
+ npm install twzrd-x402-gate@0.8.11 @x402/core @x402/fetch @x402/svm
40
+ ```
41
+
42
+ ```typescript
43
+ import { x402Client } from "@x402/core/client";
44
+ import { installTwzrdAutoGate } from "twzrd-x402-gate";
45
+
46
+ const client = new x402Client();
47
+ // refuseWashFlagged defaults true; gateOnCanSpend stays false unless you opt in
48
+ installTwzrdAutoGate(client, { refuseWashFlagged: true });
49
+ // then register schemes + wrapFetchWithPayment as usual
50
+ ```
51
+
52
+ ## 2. Prove it blocked something (spends nothing)
53
+
54
+ ```bash
55
+ # Stock-client seat proof (beforePayment, signer_invocation_count=0)
56
+ npm run x402-solana-before-payment-proof
57
+ # writes block-proof-<run_id>.json — hook: beforePayment
58
+
59
+ # @x402/core Path E proof (onBeforePaymentCreation)
60
+ npm run autogate-block-proof
61
+ ```
62
+
63
+ That JSON is your receipt: a bad merchant intercepted with 0 USDC at risk.
64
+
65
+ **Fallback only:** `npx twzrd-gate-eval-refuse` / `npm run gate-eval-refuse` still works for
66
+ CLI smoke, but it is **not** the primary install story — agents that only summarize
67
+ `RUN_THIS_NOW` without seating a gate on a signer path never clear W1.
68
+
69
+ ## 3. See your own seat
70
+
71
+ Every preflight is stamped `X-Twzrd-Caller: twzrd-x402-gate/<version>` — your seat
72
+ identity in TWZRD's metrics. To make runs attributable to *you* (recommended):
73
+
74
+ ```typescript
75
+ createTwzrdBeforePaymentHook({
76
+ refuseWashFlagged: true,
77
+ attribution: { integration: "<your-host-or-project>", runId: "<uuid-per-run>" },
78
+ });
79
+ ```
80
+
81
+ ## 4. The only three knobs you need
82
+
83
+ | Knob | Effect |
84
+ |------|--------|
85
+ | `TWZRD_AUTO_GATE=0` | Kill switch — gate fully off, payments proceed unguarded |
86
+ | `refuseWashFlagged: false` | Stop refusing wash-flagged merchants (default `true`) |
87
+ | `gateOnCanSpend: true` | Opt-in hard cap: also block when `can_spend=false` (default `false`) |
88
+
89
+ Everything else (thresholds, wash caps, fail posture, settle guard): [README](./README.md).
90
+
91
+ ## What this will NOT do
92
+
93
+ - **No Base/EVM reputation.** Non-Solana networks get an explicit `unknown` (payment
94
+ allowed, observed) unless you set `TWZRD_UNSUPPORTED_NETWORK_MODE=strict`.
95
+ - **No delivery guarantee.** It screens the merchant before you pay, nothing after.
96
+ - **Not a wallet.** It never holds keys or signs — it only decides if your signer runs.
package/README.md CHANGED
@@ -10,7 +10,7 @@ refuse. Protects the **payer** from a risky **merchant** (`payTo`). Chain-neutra
10
10
  ### Default-on AutoGate (5 lines)
11
11
 
12
12
  ```bash
13
- npm install twzrd-x402-gate@0.8.9 @x402/core @x402/fetch @x402/svm
13
+ npm install twzrd-x402-gate@0.8.10 @x402/core @x402/fetch @x402/svm
14
14
  ```
15
15
 
16
16
  ```typescript
@@ -49,7 +49,7 @@ transfer on-chain. Wash/sybil edges are primarily discounted in TWZRD scoring, n
49
49
  revenue refusal.
50
50
 
51
51
  ```bash
52
- npm install twzrd-x402-gate@0.8.9
52
+ npm install twzrd-x402-gate@0.8.10
53
53
  ```
54
54
 
55
55
  ```typescript
@@ -81,7 +81,23 @@ Offline demo: `npx tsx examples/seller-settle-guard.ts`
81
81
  Fixture-backed SVM extract tests live in `test/seller-hook.test.ts` +
82
82
  `test/fixtures/exact-svm-transfer-checked.ts`.
83
83
 
84
- **PayAI agentic-payments** (the active PayAI SDK, not the dormant x402-solana):
84
+ **PayAI x402-solana@2.1.0+** (stock client — primary Solana seat via `beforePayment`):
85
+
86
+ ```typescript
87
+ import { createX402Client } from "x402-solana";
88
+ import { createTwzrdBeforePaymentHook } from "twzrd-x402-gate";
89
+
90
+ const client = createX402Client({
91
+ wallet,
92
+ network: "solana",
93
+ beforePayment: createTwzrdBeforePaymentHook({ refuseWashFlagged: true }),
94
+ });
95
+ ```
96
+
97
+ Also: `installTwzrdAutoGate("x402-solana", opts)` returns the same hook.
98
+ Prove refuse-before-sign: `npm run x402-solana-before-payment-proof`.
99
+
100
+ **PayAI agentic-payments** (alternate PayAI surface; prefer x402-solana@2.1.0 when available):
85
101
  `npx tsx examples/payai-agentic-onPaymentVerified.ts` — wire `onPaymentVerified`
86
102
  → `toPayaiVerifyResult` to screen payers before serving. Fail-open by default.
87
103
 
@@ -93,7 +109,7 @@ Fixture-backed SVM extract tests live in `test/seller-hook.test.ts` +
93
109
  Install the published gate and run against wash fixtures:
94
110
 
95
111
  ```bash
96
- npm install twzrd-x402-gate@0.8.9
112
+ npm install twzrd-x402-gate@0.8.10
97
113
  # from package root after install, or from a checkout:
98
114
  npm run wash-dogfood
99
115
  ```
@@ -238,10 +254,10 @@ Dogfood (one public live proof path):
238
254
  ## Install
239
255
 
240
256
  ```bash
241
- npm install twzrd-x402-gate@0.8.9
257
+ npm install twzrd-x402-gate@0.8.10
242
258
  ```
243
259
 
244
- Current npm truth: `0.8.9` (buyer gate + optional seller settle guard + payer-extract hardening).
260
+ Current npm truth: `0.8.11` (buyer gate + PayAI `beforePayment` seat + optional seller settle guard).
245
261
  Check `npm view twzrd-x402-gate version` if in doubt (do not pin stale **0.5.4** / **0.7.1**).
246
262
 
247
263
  Optional settle guard (resource-server **payer** policy): see **Seller settle guard
@@ -427,8 +443,10 @@ Canonical entry point (design: `docs/strategy/install-autogate-design.md`). One
427
443
  | Call | Adapter |
428
444
  |------|---------|
429
445
  | `installTwzrdAutoGate(payWrap, opts?)` | Fetch: guard raw fetch → pay client |
430
- | `installTwzrdAutoGate(x402Client, opts?)` | Official x402 `onBeforePaymentCreation` |
446
+ | `installTwzrdAutoGate(x402Client, opts?)` | Official `@x402/core` `onBeforePaymentCreation` |
447
+ | `installTwzrdAutoGate("x402-solana", opts?)` | PayAI stock client `beforePayment` (2.1.0+) |
431
448
  | `installTwzrdAutoGate("mpp", opts)` | MPP `onChallenge` (returns handler) |
449
+ | `createTwzrdBeforePaymentHook(opts?)` | Same as `"x402-solana"` — pass to `createX402Client` |
432
450
 
433
451
  Aliases: `installTwzrdX402ClientHook`, `createTwzrdMppOnChallenge` remain; docs prefer AutoGate.
434
452
  Kill switch: `TWZRD_GATE_ENABLED=false` or `TWZRD_AUTO_GATE=0`. Uninstall x402 installs with `uninstallTwzrdAutoGate(client)`.
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Publishable bin for twzrd-gate-doctor.
4
+ * Prefers compiled dist; falls back to tsx source in dev checkouts.
5
+ * Mirrors bin/twzrd-safe-fetch.js so packaging behaves identically.
6
+ */
7
+ import { spawnSync } from "node:child_process";
8
+ import { existsSync } from "node:fs";
9
+ import { dirname, join } from "node:path";
10
+ import { fileURLToPath, pathToFileURL } from "node:url";
11
+
12
+ const __dirname = dirname(fileURLToPath(import.meta.url));
13
+ const root = join(__dirname, "..");
14
+ const dist = join(root, "dist", "doctor.js");
15
+ const src = join(root, "src", "doctor.ts");
16
+
17
+ if (existsSync(dist)) {
18
+ await import(pathToFileURL(dist).href);
19
+ } else if (existsSync(src)) {
20
+ // Do NOT set cwd to the package root here (unlike twzrd-safe-fetch): the
21
+ // doctor inspects process.cwd() to find the OPERATOR's package.json. Running
22
+ // it from the package root made it read our own manifest and report a
23
+ // signing surface for every project, including ones with nothing to gate.
24
+ // tsx resolves `src` by absolute path, so the user's cwd is safe to keep.
25
+ const r = spawnSync("npx", ["--yes", "tsx", src, ...process.argv.slice(2)], {
26
+ stdio: "inherit",
27
+ });
28
+ process.exit(r.status ?? 1);
29
+ } else {
30
+ console.error(
31
+ "twzrd-gate-doctor: missing dist/doctor.js — run npm run build in twzrd-x402-gate",
32
+ );
33
+ process.exit(1);
34
+ }
@@ -80,7 +80,7 @@ async function main() {
80
80
  if (!resolveImport(pkg)) {
81
81
  console.error(
82
82
  `twzrd-gate-eval-refuse: missing peer ${pkg}. Run:\n` +
83
- ` npm install twzrd-x402-gate@0.8.6 @x402/core @x402/fetch @x402/svm @solana/kit @scure/base`,
83
+ ` npm install twzrd-x402-gate@0.8.10 @x402/core @x402/fetch @x402/svm @solana/kit @scure/base`,
84
84
  );
85
85
  process.exit(2);
86
86
  }
@@ -3,10 +3,11 @@
3
3
  *
4
4
  * Design: docs/strategy/install-autogate-design.md (#1586).
5
5
  *
6
- * One name across three adapters:
7
- * 1. Fetch / payWrap — guard raw fetch, then hand to x402 payer
8
- * 2. x402 client — onBeforePaymentCreation (official Path E)
9
- * 3. MPP — onChallenge via createTwzrdMppOnChallenge
6
+ * One name across four adapters:
7
+ * 1. Fetch / payWrap — guard raw fetch, then hand to x402 payer
8
+ * 2. x402 client — onBeforePaymentCreation (@x402/core Path E)
9
+ * 3. x402-solana seat — beforePayment on createX402Client (PayAI 2.1.0+)
10
+ * 4. MPP — onChallenge via createTwzrdMppOnChallenge
10
11
  *
11
12
  * Default ON. Kill switch (any):
12
13
  * TWZRD_AUTO_GATE=0|false
@@ -14,7 +15,7 @@
14
15
  * options.disabled: true
15
16
  */
16
17
  import { type TwzrdGuardOptions } from "./with-guard.js";
17
- import { type InstallX402ClientHookOptions, type X402ClientLike } from "./x402-client-hook.js";
18
+ import { type BeforePaymentCreationResult, type InstallX402ClientHookOptions, type X402ClientLike, type X402SelectedRequirements, type X402SolanaBeforePaymentContext } from "./x402-client-hook.js";
18
19
  import { type MppOnChallengeHelpers, type MppOnChallengeOptions, type MppChallenge } from "./mpp-hook.js";
19
20
  /**
20
21
  * Takes a guarded (pre-pay-checked) fetch and returns the fetch your agent actually
@@ -64,6 +65,19 @@ export declare function installTwzrdAutoGate(client: X402ClientLike, options?: I
64
65
  * onChallenge: installTwzrdAutoGate("mpp", { signer, policy: { maxAmountUsd: "1.00" } })
65
66
  */
66
67
  export declare function installTwzrdAutoGate(adapter: "mpp", options: InstallAutoGateMppOptions): (challenge: MppChallenge, helpers: MppOnChallengeHelpers) => Promise<string | undefined>;
68
+ /**
69
+ * PayAI x402-solana stock-client seat (2.1.0+): returns a `beforePayment` hook
70
+ * for `createX402Client({ beforePayment })`. Runs after requirement selection,
71
+ * before signTransaction. Prefer this over the refuse-script-only happy path.
72
+ *
73
+ * @example
74
+ * const client = createX402Client({
75
+ * wallet,
76
+ * network: "solana",
77
+ * beforePayment: installTwzrdAutoGate("x402-solana", { refuseWashFlagged: true }),
78
+ * });
79
+ */
80
+ export declare function installTwzrdAutoGate(adapter: "x402-solana", options?: InstallAutoGateX402Options): (requirements: X402SelectedRequirements & Record<string, unknown>, context?: X402SolanaBeforePaymentContext) => Promise<BeforePaymentCreationResult>;
67
81
  /**
68
82
  * Disable a prior installTwzrdAutoGate on an x402 client (soft uninstall).
69
83
  * Fetch compositions cannot be uninstalled — rebuild with disabled:true instead.
@@ -1 +1 @@
1
- {"version":3,"file":"auto-gate.d.ts","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC;AAEnE,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GACzD,0BAA0B,GAAG;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB,CAAC;AAEJ,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAEjE,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GACnE,0BAA0B,CAAC;AAE7B,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,GAC3D,0BAA0B,CAAC;AAM7B,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAOjF;AAcD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,KAAK,CAAC;AAEhB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,0BAA0B,GACnC,cAAc,CAAC;AAElB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,yBAAyB,GACjC,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAiE5F;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CASnE"}
1
+ {"version":3,"file":"auto-gate.d.ts","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC;AAEnE,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GACzD,0BAA0B,GAAG;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB,CAAC;AAEJ,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAEjE,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GACnE,0BAA0B,CAAC;AAE7B,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,GAC3D,0BAA0B,CAAC;AAM7B,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAOjF;AAcD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,KAAK,CAAC;AAEhB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,0BAA0B,GACnC,cAAc,CAAC;AAElB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,yBAAyB,GACjC,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAE5F;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,0BAA0B,GACnC,CACD,YAAY,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,OAAO,CAAC,EAAE,8BAA8B,KACrC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AA8E1C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CASnE"}
package/dist/auto-gate.js CHANGED
@@ -3,10 +3,11 @@
3
3
  *
4
4
  * Design: docs/strategy/install-autogate-design.md (#1586).
5
5
  *
6
- * One name across three adapters:
7
- * 1. Fetch / payWrap — guard raw fetch, then hand to x402 payer
8
- * 2. x402 client — onBeforePaymentCreation (official Path E)
9
- * 3. MPP — onChallenge via createTwzrdMppOnChallenge
6
+ * One name across four adapters:
7
+ * 1. Fetch / payWrap — guard raw fetch, then hand to x402 payer
8
+ * 2. x402 client — onBeforePaymentCreation (@x402/core Path E)
9
+ * 3. x402-solana seat — beforePayment on createX402Client (PayAI 2.1.0+)
10
+ * 4. MPP — onChallenge via createTwzrdMppOnChallenge
10
11
  *
11
12
  * Default ON. Kill switch (any):
12
13
  * TWZRD_AUTO_GATE=0|false
@@ -14,7 +15,7 @@
14
15
  * options.disabled: true
15
16
  */
16
17
  import { withTwzrdGuard } from "./with-guard.js";
17
- import { installTwzrdX402ClientHook, } from "./x402-client-hook.js";
18
+ import { createTwzrdBeforePaymentHook, installTwzrdX402ClientHook, } from "./x402-client-hook.js";
18
19
  import { createTwzrdMppOnChallenge, } from "./mpp-hook.js";
19
20
  const clientInstalls = new WeakMap();
20
21
  /** True when env or options ask to skip the gate entirely. */
@@ -46,6 +47,14 @@ export function installTwzrdAutoGate(target, options) {
46
47
  }
47
48
  return createTwzrdMppOnChallenge(mppOpts);
48
49
  }
50
+ // ── PayAI x402-solana beforePayment ────────────────────────────────
51
+ if (target === "x402-solana") {
52
+ const solOpts = options;
53
+ if (isTwzrdAutoGateDisabled(solOpts)) {
54
+ return async () => undefined;
55
+ }
56
+ return createTwzrdBeforePaymentHook(solOpts);
57
+ }
49
58
  // ── x402 client ──────────────────────────────────────────────────────
50
59
  if (isX402ClientLike(target)) {
51
60
  const x402Opts = options;
@@ -77,7 +86,7 @@ export function installTwzrdAutoGate(target, options) {
77
86
  }
78
87
  return target(withTwzrdGuard(raw, fetchOpts));
79
88
  }
80
- throw new TypeError('[twzrd-x402-gate] installTwzrdAutoGate: expected a PayWrap function, an x402 client with onBeforePaymentCreation, or the string "mpp"');
89
+ throw new TypeError('[twzrd-x402-gate] installTwzrdAutoGate: expected a PayWrap function, an x402 client with onBeforePaymentCreation, or the string "mpp" / "x402-solana"');
81
90
  }
82
91
  /**
83
92
  * Disable a prior installTwzrdAutoGate on an x402 client (soft uninstall).
@@ -1 +1 @@
1
- {"version":3,"file":"auto-gate.js","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-gate.js","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,12 @@ export type AutogateBlockProof = {
16
16
  internal_reason: string | null;
17
17
  };
18
18
  interception: {
19
- hook: "onBeforePaymentCreation";
19
+ /**
20
+ * Seat that aborted:
21
+ * - onBeforePaymentCreation — @x402/core client registrar
22
+ * - beforePayment — PayAI x402-solana createX402Client config seat (2.1.0+)
23
+ */
24
+ hook: "onBeforePaymentCreation" | "beforePayment";
20
25
  aborted: boolean;
21
26
  reason: string;
22
27
  internal_reason: string | null;
@@ -42,6 +47,8 @@ export type BuildAutogateBlockProofInput = {
42
47
  onchain_settlements?: number;
43
48
  package_version?: string;
44
49
  now?: () => Date;
50
+ /** Default onBeforePaymentCreation; pass "beforePayment" for stock PayAI seat proofs */
51
+ hook?: "onBeforePaymentCreation" | "beforePayment";
45
52
  };
46
53
  export declare function buildAutogateBlockProof(input: BuildAutogateBlockProofInput): AutogateBlockProof;
47
54
  //# sourceMappingURL=block-proof.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"block-proof.d.ts","sourceRoot":"","sources":["../src/block-proof.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,2BAA2B,kCAAkC,CAAC;AAE3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,OAAO,2BAA2B,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE;QAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;QAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,YAAY,EAAE;QACZ,IAAI,EAAE,yBAAyB,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,UAAU,EAAE;QACV,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,kBAAkB,CAuCpB"}
1
+ {"version":3,"file":"block-proof.d.ts","sourceRoot":"","sources":["../src/block-proof.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,2BAA2B,kCAAkC,CAAC;AAE3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,OAAO,2BAA2B,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE;QAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;QAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,YAAY,EAAE;QACZ;;;;WAIG;QACH,IAAI,EAAE,yBAAyB,GAAG,eAAe,CAAC;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF,UAAU,EAAE;QACV,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,wFAAwF;IACxF,IAAI,CAAC,EAAE,yBAAyB,GAAG,eAAe,CAAC;CACpD,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,kBAAkB,CAuCpB"}
@@ -30,7 +30,7 @@ export function buildAutogateBlockProof(input) {
30
30
  internal_reason: internal,
31
31
  },
32
32
  interception: {
33
- hook: "onBeforePaymentCreation",
33
+ hook: input.hook ?? "onBeforePaymentCreation",
34
34
  aborted: input.aborted,
35
35
  reason: publicReason,
36
36
  internal_reason: internal,
@@ -1 +1 @@
1
- {"version":3,"file":"block-proof.js","sourceRoot":"","sources":["../src/block-proof.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,CAAC,MAAM,2BAA2B,GAAG,+BAA+B,CAAC;AA4C3E,MAAM,UAAU,uBAAuB,CACrC,KAAmC;IAEnC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC;IACvC,MAAM,YAAY,GAAG,QAAQ;QAC3B,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAClC,CAAC,CAAC,iCAAiC,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GACZ,KAAK,CAAC,OAAO,KAAK,IAAI;QACtB,MAAM,KAAK,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,OAAO,KAAK,CAAC,CAAC;IAEhB,OAAO;QACL,cAAc,EAAE,2BAA2B;QAC3C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QACtD,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,cAAc;QACxD,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,gBAAgB,EAAE;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;YAChC,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI;YACxC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;YACtC,eAAe,EAAE,QAAQ;SAC1B;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,YAAY;YACpB,eAAe,EAAE,QAAQ;SAC1B;QACD,UAAU,EAAE;YACV,kBAAkB,EAAE,MAAM;YAC1B,iBAAiB,EAAE,KAAK;YACxB,mBAAmB,EAAE,OAAO;SAC7B;QACD,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"block-proof.js","sourceRoot":"","sources":["../src/block-proof.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,CAAC,MAAM,2BAA2B,GAAG,+BAA+B,CAAC;AAmD3E,MAAM,UAAU,uBAAuB,CACrC,KAAmC;IAEnC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC;IACvC,MAAM,YAAY,GAAG,QAAQ;QAC3B,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAClC,CAAC,CAAC,iCAAiC,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GACZ,KAAK,CAAC,OAAO,KAAK,IAAI;QACtB,MAAM,KAAK,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,OAAO,KAAK,CAAC,CAAC;IAEhB,OAAO;QACL,cAAc,EAAE,2BAA2B;QAC3C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QACtD,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,cAAc;QACxD,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,gBAAgB,EAAE;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;YAChC,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI;YACxC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;YACtC,eAAe,EAAE,QAAQ;SAC1B;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,yBAAyB;YAC7C,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,YAAY;YACpB,eAAe,EAAE,QAAQ;SAC1B;QACD,UAAU,EAAE;YACV,kBAAkB,EAAE,MAAM;YAC1B,iBAAiB,EAAE,KAAK;YACxB,mBAAmB,EAAE,OAAO;SAC7B;QACD,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * `npx twzrd-gate-doctor` — one command that turns "should I gate this?" into
3
+ * "here are the exact lines for THIS project, and here is the gate refusing."
4
+ *
5
+ * Why a doctor and not a codemod: patching someone else's source is invasive,
6
+ * hard to review, and the first thing an operator reverts. The adoption blocker
7
+ * is not typing three lines — it is not knowing WHICH three lines apply to the
8
+ * client you already use, and not believing the gate actually refuses anything.
9
+ * So this does exactly two things:
10
+ *
11
+ * 1. DETECT the x402 / agent surface already in package.json and print the
12
+ * snippet for that specific host (not a generic README excerpt).
13
+ * 2. PROVE a refusal, offline, spending nothing: a wash-flagged verdict is fed
14
+ * to the real hook and we assert the signer was never invoked.
15
+ *
16
+ * Exit codes: 0 = a seam was found and the refusal proof passed. 1 = proof
17
+ * failed (a real problem — report it). 2 = no x402 surface detected (nothing to
18
+ * gate here yet, not an error).
19
+ *
20
+ * No network by default: the refusal proof is deterministic and local, so it
21
+ * works in CI and on a plane. Pass --live to additionally preflight a real
22
+ * wash-flagged seller against intel.
23
+ */
24
+ type Host = {
25
+ id: string;
26
+ label: string;
27
+ /** Any of these dependency names present ⇒ this host applies. */
28
+ deps: string[];
29
+ install: string;
30
+ snippet: string;
31
+ note?: string;
32
+ };
33
+ export declare function detectHosts(pkg: Record<string, unknown> | null): Host[];
34
+ /**
35
+ * Deterministic, offline refusal proof.
36
+ *
37
+ * Feeds a wash-flagged card straight to the policy layer and asserts the signer
38
+ * never ran. This is the claim an operator needs to believe before adopting,
39
+ * and it must be checkable without spending or reaching the network.
40
+ */
41
+ export declare function proveRefusal(): Promise<{
42
+ refused: boolean;
43
+ signerInvocations: number;
44
+ reason: string;
45
+ }>;
46
+ export declare function main(argv?: string[]): Promise<number>;
47
+ export {};
48
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAOH,KAAK,IAAI,GAAG;IACV,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA4EF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CASvE;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAuED;AAMD,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDlF"}
package/dist/doctor.js ADDED
@@ -0,0 +1,246 @@
1
+ /**
2
+ * `npx twzrd-gate-doctor` — one command that turns "should I gate this?" into
3
+ * "here are the exact lines for THIS project, and here is the gate refusing."
4
+ *
5
+ * Why a doctor and not a codemod: patching someone else's source is invasive,
6
+ * hard to review, and the first thing an operator reverts. The adoption blocker
7
+ * is not typing three lines — it is not knowing WHICH three lines apply to the
8
+ * client you already use, and not believing the gate actually refuses anything.
9
+ * So this does exactly two things:
10
+ *
11
+ * 1. DETECT the x402 / agent surface already in package.json and print the
12
+ * snippet for that specific host (not a generic README excerpt).
13
+ * 2. PROVE a refusal, offline, spending nothing: a wash-flagged verdict is fed
14
+ * to the real hook and we assert the signer was never invoked.
15
+ *
16
+ * Exit codes: 0 = a seam was found and the refusal proof passed. 1 = proof
17
+ * failed (a real problem — report it). 2 = no x402 surface detected (nothing to
18
+ * gate here yet, not an error).
19
+ *
20
+ * No network by default: the refusal proof is deterministic and local, so it
21
+ * works in CI and on a plane. Pass --live to additionally preflight a real
22
+ * wash-flagged seller against intel.
23
+ */
24
+ import { readFileSync } from "node:fs";
25
+ import { join } from "node:path";
26
+ import { CLIENT_VERSION } from "./version.js";
27
+ /**
28
+ * Ordered most-specific first: a project using solana-agent-kit AND @x402/core
29
+ * should be told about the SAK seat, because that is where its signing happens.
30
+ */
31
+ const HOSTS = [
32
+ {
33
+ id: "solana-agent-kit",
34
+ label: "Solana Agent Kit (SolanaAgentKit)",
35
+ deps: ["solana-agent-kit"],
36
+ install: "npm install twzrd-x402-gate",
37
+ snippet: `import { SolanaAgentKit } from "solana-agent-kit";
38
+ import { twzrdBeforeSign } from "twzrd-x402-gate";
39
+
40
+ // Every plugin that signs goes through this policy, including plugins that
41
+ // call agent.wallet.signAndSendTransaction directly.
42
+ const agent = new SolanaAgentKit(wallet, rpcUrl, {
43
+ beforeSign: twzrdBeforeSign({ refuseWashFlagged: true }),
44
+ });`,
45
+ note: "Requires the optional beforeSign hook on Config (sendaifun/solana-agent-kit#599). " +
46
+ "Until that lands, wrap the wallet yourself with wrapWallet() from that PR.",
47
+ },
48
+ {
49
+ id: "x402-client",
50
+ label: "official x402 client (@x402/core)",
51
+ deps: ["@x402/core", "@x402/fetch", "@x402/svm"],
52
+ install: "npm install twzrd-x402-gate @x402/core @x402/fetch @x402/svm",
53
+ snippet: `import { x402Client } from "@x402/core/client";
54
+ import { installTwzrdAutoGate } from "twzrd-x402-gate";
55
+
56
+ const client = new x402Client();
57
+ // Runs after requirement selection, BEFORE payload creation / signing.
58
+ installTwzrdAutoGate(client, { refuseWashFlagged: true });`,
59
+ },
60
+ {
61
+ id: "elizaos",
62
+ label: "elizaOS agent runtime",
63
+ deps: ["@elizaos/core", "elizaos"],
64
+ install: "npm install twzrd-x402-gate",
65
+ snippet: `import { installTwzrdAutoGate } from "twzrd-x402-gate";
66
+
67
+ // Gate the payment client your plugin hands to the runtime, not the runtime
68
+ // itself — the seam is wherever the signer lives.
69
+ installTwzrdAutoGate(paymentClient, { refuseWashFlagged: true });`,
70
+ },
71
+ {
72
+ id: "goat",
73
+ label: "GOAT SDK",
74
+ deps: ["@goat-sdk/core"],
75
+ install: "npm install twzrd-x402-gate",
76
+ snippet: `import { installTwzrdAutoGate } from "twzrd-x402-gate";
77
+
78
+ installTwzrdAutoGate(walletClient, { refuseWashFlagged: true });`,
79
+ },
80
+ {
81
+ id: "raw-fetch",
82
+ label: "raw fetch + x402 payer",
83
+ deps: ["x402-fetch", "x402"],
84
+ install: "npm install twzrd-x402-gate",
85
+ snippet: `import { installTwzrdAutoGate } from "twzrd-x402-gate";
86
+
87
+ // Wraps fetch: a refused payment never reaches the payer.
88
+ const gatedFetch = installTwzrdAutoGate(payFetch, { refuseWashFlagged: true });`,
89
+ },
90
+ ];
91
+ function readPackageJson(cwd) {
92
+ try {
93
+ return JSON.parse(readFileSync(join(cwd, "package.json"), "utf8"));
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ }
99
+ export function detectHosts(pkg) {
100
+ if (!pkg)
101
+ return [];
102
+ const all = {
103
+ ...(pkg.dependencies ?? {}),
104
+ ...(pkg.devDependencies ?? {}),
105
+ ...(pkg.peerDependencies ?? {}),
106
+ };
107
+ const names = new Set(Object.keys(all));
108
+ return HOSTS.filter((h) => h.deps.some((d) => names.has(d)));
109
+ }
110
+ /**
111
+ * Deterministic, offline refusal proof.
112
+ *
113
+ * Feeds a wash-flagged card straight to the policy layer and asserts the signer
114
+ * never ran. This is the claim an operator needs to believe before adopting,
115
+ * and it must be checkable without spending or reaching the network.
116
+ */
117
+ export async function proveRefusal() {
118
+ const { installTwzrdAutoGate } = await import("./auto-gate.js");
119
+ // Model the official-client seam, which is the path with existing coverage
120
+ // (see test/autogate-intercept.test.ts). A wash-flagged card must come back
121
+ // as abort, and the signer stub must never be reached.
122
+ let signerInvocations = 0;
123
+ let hook;
124
+ const client = {
125
+ onBeforePaymentCreation(h) {
126
+ hook = h;
127
+ return client;
128
+ },
129
+ };
130
+ installTwzrdAutoGate(client, {
131
+ refuseWashFlagged: true,
132
+ gateOnCanSpend: false,
133
+ preflightMinScore: 0,
134
+ failOpen: true,
135
+ // Injected preflight response: wash_flagged ⇒ the policy must refuse. No network.
136
+ fetch: (async () => new Response(JSON.stringify({
137
+ readiness_card: {
138
+ decision: "block",
139
+ trust_score: 30,
140
+ can_spend: false,
141
+ wash_flagged: true,
142
+ wash_label: "ring",
143
+ },
144
+ }), { status: 200, headers: { "content-type": "application/json" } })),
145
+ });
146
+ if (!hook) {
147
+ return {
148
+ refused: false,
149
+ signerInvocations,
150
+ reason: "gate did not install a pre-payment hook",
151
+ };
152
+ }
153
+ let refused = false;
154
+ let reason = "";
155
+ try {
156
+ const out = await hook({
157
+ selectedRequirements: {
158
+ payTo: "34w53UkhfBBmVLBcphD1M4dRhbBTQaLLbnRfyTeXzc5m",
159
+ network: "solana",
160
+ asset: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
161
+ maxAmountRequired: "50000",
162
+ scheme: "exact",
163
+ },
164
+ // If the gate ever approved, a real client would call this next.
165
+ sign: async () => {
166
+ signerInvocations += 1;
167
+ },
168
+ });
169
+ if (out && typeof out === "object" && out.abort) {
170
+ refused = true;
171
+ reason = String(out.reason ?? "abort");
172
+ }
173
+ }
174
+ catch (err) {
175
+ // A throwing refusal is equally acceptable: nothing got signed.
176
+ refused = true;
177
+ reason = String(err?.message ?? err).slice(0, 160);
178
+ }
179
+ return { refused, signerInvocations, reason };
180
+ }
181
+ function line(s = "") {
182
+ process.stdout.write(`${s}\n`);
183
+ }
184
+ export async function main(argv = process.argv.slice(2)) {
185
+ const cwd = process.cwd();
186
+ const pkg = readPackageJson(cwd);
187
+ const detected = detectHosts(pkg);
188
+ line(`twzrd-gate-doctor (twzrd-x402-gate ${CLIENT_VERSION})`);
189
+ line();
190
+ if (!pkg) {
191
+ line("No package.json here. Run this from your project root.");
192
+ return 2;
193
+ }
194
+ if (detected.length === 0) {
195
+ line("No x402 / agent signing surface detected in this project.");
196
+ line("Nothing to gate yet — this is not an error.");
197
+ line();
198
+ line("The gate is useful once something here signs a Solana USDC payment.");
199
+ line("Surfaces it recognises: @x402/core, solana-agent-kit, @elizaos/core,");
200
+ line("@goat-sdk/core, x402-fetch.");
201
+ return 2;
202
+ }
203
+ line(`Detected ${detected.length} signing surface(s):`);
204
+ for (const h of detected)
205
+ line(` • ${h.label}`);
206
+ line();
207
+ for (const h of detected) {
208
+ line(`── ${h.label} ${"─".repeat(Math.max(0, 58 - h.label.length))}`);
209
+ line();
210
+ line(` ${h.install}`);
211
+ line();
212
+ for (const l of h.snippet.split("\n"))
213
+ line(` ${l}`);
214
+ if (h.note) {
215
+ line();
216
+ line(` Note: ${h.note}`);
217
+ }
218
+ line();
219
+ }
220
+ line("── Refusal proof (offline, spends nothing) ──────────────────");
221
+ line();
222
+ const proof = await proveRefusal();
223
+ if (proof.refused && proof.signerInvocations === 0) {
224
+ line(" PASS — wash-flagged seller refused before signing.");
225
+ line(` signer invocations: ${proof.signerInvocations}`);
226
+ line(` reason: ${proof.reason}`);
227
+ line();
228
+ line(" That is the whole product: the payment did not happen, and it cost 0.");
229
+ return 0;
230
+ }
231
+ line(" FAIL — the gate did NOT refuse a wash-flagged seller.");
232
+ line(` refused=${proof.refused} signer_invocations=${proof.signerInvocations}`);
233
+ line(" Please report this with your package versions — it is a real bug.");
234
+ return 1;
235
+ }
236
+ // Only auto-run as a CLI, never on import (keeps it testable). Anchored on a
237
+ // path separator so a file merely ENDING in "doctor.ts" (e.g. probe-doctor.ts)
238
+ // does not trigger the CLI — that bit me while testing this very function.
239
+ if (process.argv[1] &&
240
+ /(^|[\\/])doctor(\.[cm]?[jt]s)?$/.test(process.argv[1])) {
241
+ main().then((code) => process.exit(code), (err) => {
242
+ process.stderr.write(`twzrd-gate-doctor: ${String(err)}\n`);
243
+ process.exit(1);
244
+ });
245
+ }
246
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,7 +14,7 @@ export { installTwzrdAutoGate, uninstallTwzrdAutoGate, isTwzrdAutoGateDisabled,
14
14
  export { TWZRD_TRUST_GATE_BLOCK_WASH, TWZRD_TRUST_GATE_BLOCK_CAN_SPEND, TWZRD_TRUST_GATE_BLOCK_DECISION, toTrustGateBlockReason, } from "./trust-gate-reason.js";
15
15
  export { AUTOGATE_BLOCK_PROOF_SCHEMA, buildAutogateBlockProof, type AutogateBlockProof, type BuildAutogateBlockProofInput, } from "./block-proof.js";
16
16
  export { safeFetch, runAgentcashFetch, main as safeFetchMain, type SafeFetchOptions, type SafeFetchResult, } from "./safe-fetch.js";
17
- export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, type X402ClientLike, type X402SelectedRequirements, type BeforePaymentCreationContext, type BeforePaymentCreationResult, type InstallX402ClientHookOptions, type X402PaymentControlOptions, } from "./x402-client-hook.js";
17
+ export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, evaluateBeforePaymentCreation, createTwzrdBeforePaymentHook, mapX402SolanaRequirements, type X402ClientLike, type X402SelectedRequirements, type BeforePaymentCreationContext, type BeforePaymentCreationResult, type InstallX402ClientHookOptions, type X402PaymentControlOptions, type X402SolanaBeforePaymentContext, } from "./x402-client-hook.js";
18
18
  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";
19
19
  export { quickCheck, QUICK_PRICE_USDC, type QuickCheckResult, type QuickCheckOptions, type TwzrdTier, } from "./quick.js";
20
20
  export { createSponsoredX402Fetch, type SponsorSettle, type SponsoredX402Options, } from "./sponsored.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
@@ -17,7 +17,7 @@ export { installTwzrdAutoGate, uninstallTwzrdAutoGate, isTwzrdAutoGateDisabled,
17
17
  export { TWZRD_TRUST_GATE_BLOCK_WASH, TWZRD_TRUST_GATE_BLOCK_CAN_SPEND, TWZRD_TRUST_GATE_BLOCK_DECISION, toTrustGateBlockReason, } from "./trust-gate-reason.js";
18
18
  export { AUTOGATE_BLOCK_PROOF_SCHEMA, buildAutogateBlockProof, } from "./block-proof.js";
19
19
  export { safeFetch, runAgentcashFetch, main as safeFetchMain, } from "./safe-fetch.js";
20
- export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, } from "./x402-client-hook.js";
20
+ export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, evaluateBeforePaymentCreation, createTwzrdBeforePaymentHook, mapX402SolanaRequirements, } from "./x402-client-hook.js";
21
21
  export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, } from "./adoption-proof.js";
22
22
  export { quickCheck, QUICK_PRICE_USDC, } from "./quick.js";
23
23
  export { createSponsoredX402Fetch, } from "./sponsored.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,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,sBAAsB,GAGvB,MAAM,eAAe,CAAC;AACvB,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,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GAGxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,IAAI,IAAI,aAAa,GAGtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAO3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,IAAI,IAAI,iBAAiB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,GAMxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,UAAU,EACV,gBAAgB,GAIjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,wBAAwB,GAGzB,MAAM,gBAAgB,CAAC;AAexB,uEAAuE;AACvE,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,GAQxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,cAAc,GAOf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,wBAAwB,GAIzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GAMnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,+BAA+B,EAC/B,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC;AAC3B,wEAAwE;AACxE,yFAAyF;AACzF,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,gBAAgB,EAChB,mBAAmB,GAQpB,MAAM,kBAAkB,CAAC"}
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,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,sBAAsB,GAGvB,MAAM,eAAe,CAAC;AACvB,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,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GAGxB,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,yBAAyB,GAQ1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,IAAI,IAAI,iBAAiB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,GAMxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,UAAU,EACV,gBAAgB,GAIjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,wBAAwB,GAGzB,MAAM,gBAAgB,CAAC;AAexB,uEAAuE;AACvE,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,GAQxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,cAAc,GAOf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,wBAAwB,GAIzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GAMnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,+BAA+B,EAC/B,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC;AAC3B,wEAAwE;AACxE,yFAAyF;AACzF,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,gBAAgB,EAChB,mBAAmB,GAQpB,MAAM,kBAAkB,CAAC"}
@@ -163,5 +163,48 @@ export declare function installTwzrdX402ClientHook(client: X402ClientLike, optio
163
163
  * only provides the selected requirements object.
164
164
  */
165
165
  export declare function twzrdBeforePaymentCreation(selectedRequirements: X402SelectedRequirements, options?: InstallX402ClientHookOptions): Promise<BeforePaymentCreationResult>;
166
+ /**
167
+ * Context shape from PayAI `x402-solana` `beforePayment` (config seat on
168
+ * `createX402Client`). Field names match x402-solana@2.1.0; we only require
169
+ * the subset used for resource binding. No hard dependency on the package.
170
+ */
171
+ export type X402SolanaBeforePaymentContext = {
172
+ requestUrl?: string;
173
+ responseUrl?: string;
174
+ declaredResource?: string;
175
+ protocolVersion?: 1 | 2;
176
+ signal?: AbortSignal;
177
+ };
178
+ /**
179
+ * Map PayAI stock-client requirements (+ optional context) into the shared
180
+ * evaluator input. Prefer requirement fields; fall back to challenge-declared
181
+ * resource then the caller's request URL.
182
+ */
183
+ export declare function mapX402SolanaRequirements(requirements: X402SelectedRequirements & Record<string, unknown>, context?: X402SolanaBeforePaymentContext): X402SelectedRequirements;
184
+ /**
185
+ * Stock PayAI client seat: `createX402Client({ beforePayment })`.
186
+ *
187
+ * Returns a hook with the official x402-solana@2.1.0 signature
188
+ * `(requirements, context) => Promise<{ abort: true, reason } | void>`.
189
+ * Runs AFTER requirement selection and BEFORE `signTransaction`.
190
+ *
191
+ * Same security semantic as `installTwzrdX402ClientHook` /
192
+ * `evaluateBeforePaymentCreation` — shared evaluator, refuse/wash/can_spend.
193
+ *
194
+ * @example
195
+ * ```ts
196
+ * import { createX402Client } from "x402-solana";
197
+ * import { createTwzrdBeforePaymentHook } from "twzrd-x402-gate";
198
+ *
199
+ * const client = createX402Client({
200
+ * wallet,
201
+ * network: "solana",
202
+ * beforePayment: createTwzrdBeforePaymentHook({ refuseWashFlagged: true }),
203
+ * });
204
+ * ```
205
+ *
206
+ * Alias via AutoGate: `installTwzrdAutoGate("x402-solana", opts)`.
207
+ */
208
+ export declare function createTwzrdBeforePaymentHook(options?: InstallX402ClientHookOptions): (requirements: X402SelectedRequirements & Record<string, unknown>, context?: X402SolanaBeforePaymentContext) => Promise<BeforePaymentCreationResult>;
166
209
  export {};
167
210
  //# sourceMappingURL=x402-client-hook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"x402-client-hook.d.ts","sourceRoot":"","sources":["../src/x402-client-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"x402-client-hook.d.ts","sourceRoot":"","sources":["../src/x402-client-hook.ts"],"names":[],"mappings":"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"}
@@ -168,4 +168,67 @@ export function installTwzrdX402ClientHook(client, options) {
168
168
  export async function twzrdBeforePaymentCreation(selectedRequirements, options) {
169
169
  return evaluateBeforePaymentCreation(selectedRequirements, options);
170
170
  }
171
+ /**
172
+ * Map PayAI stock-client requirements (+ optional context) into the shared
173
+ * evaluator input. Prefer requirement fields; fall back to challenge-declared
174
+ * resource then the caller's request URL.
175
+ */
176
+ export function mapX402SolanaRequirements(requirements, context) {
177
+ const payTo = requirements.payTo ??
178
+ requirements.pay_to;
179
+ const amount = requirements.amount ??
180
+ requirements.maxAmountRequired;
181
+ const resource = requirements.resource ??
182
+ context?.declaredResource ??
183
+ context?.requestUrl;
184
+ return {
185
+ payTo,
186
+ pay_to: payTo,
187
+ network: requirements.network,
188
+ amount,
189
+ maxAmountRequired: amount,
190
+ asset: requirements.asset,
191
+ resource,
192
+ scheme: requirements.scheme,
193
+ };
194
+ }
195
+ /**
196
+ * Stock PayAI client seat: `createX402Client({ beforePayment })`.
197
+ *
198
+ * Returns a hook with the official x402-solana@2.1.0 signature
199
+ * `(requirements, context) => Promise<{ abort: true, reason } | void>`.
200
+ * Runs AFTER requirement selection and BEFORE `signTransaction`.
201
+ *
202
+ * Same security semantic as `installTwzrdX402ClientHook` /
203
+ * `evaluateBeforePaymentCreation` — shared evaluator, refuse/wash/can_spend.
204
+ *
205
+ * @example
206
+ * ```ts
207
+ * import { createX402Client } from "x402-solana";
208
+ * import { createTwzrdBeforePaymentHook } from "twzrd-x402-gate";
209
+ *
210
+ * const client = createX402Client({
211
+ * wallet,
212
+ * network: "solana",
213
+ * beforePayment: createTwzrdBeforePaymentHook({ refuseWashFlagged: true }),
214
+ * });
215
+ * ```
216
+ *
217
+ * Alias via AutoGate: `installTwzrdAutoGate("x402-solana", opts)`.
218
+ */
219
+ export function createTwzrdBeforePaymentHook(options) {
220
+ // Resolve Payment Control signer once (fail fast) — same as install path.
221
+ const pcSigner = resolvePaymentControlSigner(options?.paymentControl);
222
+ return async (requirements, context) => {
223
+ // Honor AbortSignal if the stock client forwarded one (cancel → no sign).
224
+ if (context?.signal?.aborted) {
225
+ return {
226
+ abort: true,
227
+ reason: "[twzrd] aborted_before_payment: signal already aborted",
228
+ };
229
+ }
230
+ const selected = mapX402SolanaRequirements(requirements, context);
231
+ return evaluateBeforePaymentCreation(selected, options, pcSigner);
232
+ };
233
+ }
171
234
  //# sourceMappingURL=x402-client-hook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"x402-client-hook.js","sourceRoot":"","sources":["../src/x402-client-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"x402-client-hook.js","sourceRoot":"","sources":["../src/x402-client-hook.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "twzrd-x402-gate",
3
- "version": "0.8.9",
4
- "description": "Core: buyer-side x402 trust gate. Free TWZRD preflight (ReadinessCard) before signing USDC to any merchant, with optional $0.001 paid trust escalate on warn \u2014 blocking spend on bad intel, no human in the loop. Optional: createTwzrdSettleGuard for resource servers to apply merchant policy on the payer before settle+serve. installTwzrdAutoGate is the canonical default-on entry across fetch payWrap, x402 client (onBeforePaymentCreation), and MPP onChallenge. Fail-closed by default \u2014 set TWZRD_FAIL_OPEN=true for outage allow; kill switch TWZRD_GATE_ENABLED=false or TWZRD_AUTO_GATE=0. Always stamps X-Twzrd-Caller for seat metrics.",
3
+ "version": "0.8.11",
4
+ "description": "Core: buyer-side x402 trust gate. Free TWZRD preflight (ReadinessCard) before signing USDC to any merchant, with optional $0.001 paid trust escalate on warn \u2014 blocking spend on bad intel, no human in the loop. Optional: createTwzrdSettleGuard for resource servers to apply merchant policy on the payer before settle+serve. installTwzrdAutoGate is the canonical default-on entry across fetch payWrap, x402 client (onBeforePaymentCreation), PayAI x402-solana beforePayment (2.1.0+), and MPP onChallenge. Fail-closed by default \u2014 set TWZRD_FAIL_OPEN=true for outage allow; kill switch TWZRD_GATE_ENABLED=false or TWZRD_AUTO_GATE=0. Always stamps X-Twzrd-Caller for seat metrics.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "bin": {
9
9
  "twzrd-safe-fetch": "./bin/twzrd-safe-fetch.js",
10
- "twzrd-gate-eval-refuse": "./bin/twzrd-gate-eval-refuse.js"
10
+ "twzrd-gate-eval-refuse": "./bin/twzrd-gate-eval-refuse.js",
11
+ "twzrd-gate-doctor": "./bin/twzrd-gate-doctor.js"
11
12
  },
12
13
  "exports": {
13
14
  ".": {
@@ -23,13 +24,14 @@
23
24
  "files": [
24
25
  "dist",
25
26
  "bin",
26
- "README.md"
27
+ "README.md",
28
+ "QUICKSTART.md"
27
29
  ],
28
30
  "scripts": {
29
31
  "build": "tsc",
30
32
  "prepublishOnly": "tsc",
31
33
  "typecheck": "tsc --noEmit -p tsconfig.check.json",
32
- "test": "tsx test/version-identity.test.ts && tsx test/policy.test.ts && tsx test/wrap-fetch.test.ts && tsx test/mcp-hook.test.ts && tsx test/attribution.test.ts && tsx test/auto-receipt.test.ts && tsx test/quick.test.ts && tsx test/sponsored.test.ts && tsx test/escalation.test.ts && tsx test/wash-refuse.test.ts && tsx test/auto-gate.test.ts && tsx test/autogate-intercept.test.ts && tsx test/network.test.ts && tsx test/safe-fetch.test.ts && tsx test/payto-prefer.test.ts && tsx test/challenge-swap.test.ts && tsx test/x402-client-hook.test.ts && tsx test/hook-single-eval.test.ts && tsx test/run-attribution.test.ts && tsx test/payment-control.test.ts && tsx test/intent-binding.test.ts && tsx test/mpp-hook.test.ts && tsx test/mpp-safety.test.ts && tsx test/payment-control-followup.test.ts && tsx test/payment-control-hardening.test.ts && tsx test/x402-official-compat.test.ts && tsx test/seller-hook.test.ts && tsx test/adoption-proof.test.ts && tsx test/delivery-capture.test.ts",
34
+ "test": "tsx test/version-identity.test.ts && tsx test/policy.test.ts && tsx test/wrap-fetch.test.ts && tsx test/mcp-hook.test.ts && tsx test/attribution.test.ts && tsx test/auto-receipt.test.ts && tsx test/quick.test.ts && tsx test/sponsored.test.ts && tsx test/escalation.test.ts && tsx test/wash-refuse.test.ts && tsx test/auto-gate.test.ts && tsx test/autogate-intercept.test.ts && tsx test/x402-solana-before-payment.test.ts && tsx test/network.test.ts && tsx test/safe-fetch.test.ts && tsx test/payto-prefer.test.ts && tsx test/challenge-swap.test.ts && tsx test/x402-client-hook.test.ts && tsx test/hook-single-eval.test.ts && tsx test/run-attribution.test.ts && tsx test/payment-control.test.ts && tsx test/intent-binding.test.ts && tsx test/mpp-hook.test.ts && tsx test/mpp-safety.test.ts && tsx test/payment-control-followup.test.ts && tsx test/payment-control-hardening.test.ts && tsx test/x402-official-compat.test.ts && tsx test/seller-hook.test.ts && tsx test/adoption-proof.test.ts && tsx test/delivery-capture.test.ts && tsx test/doctor.test.ts",
33
35
  "pack-smoke": "node scripts/pack-smoke.mjs",
34
36
  "safe-fetch": "tsx src/safe-fetch.ts",
35
37
  "guard-demo": "tsx examples/agentic-market-gate.ts",
@@ -37,11 +39,13 @@
37
39
  "sponsored-demo": "tsx examples/sponsored-payer.ts --dry-run",
38
40
  "wash-dogfood": "tsx examples/wash-refuse-dogfood.ts",
39
41
  "autogate-block-proof": "tsx examples/autogate-block-proof.ts",
42
+ "x402-solana-before-payment-proof": "tsx examples/x402-solana-before-payment-proof.ts",
40
43
  "official-dogfood": "tsx examples/official-x402-dogfood.ts",
41
44
  "adoption-proof": "tsx src/adoption-proof.ts",
42
45
  "demo:buyer-no-spend": "tsx src/adoption-proof.ts -- --integration ops-demo-buyer-no-spend",
43
46
  "live-autogate-matrix": "tsx examples/live-autogate-matrix.ts",
44
- "gate-eval-refuse": "node bin/twzrd-gate-eval-refuse.js"
47
+ "gate-eval-refuse": "node bin/twzrd-gate-eval-refuse.js",
48
+ "gate-doctor": "tsx src/doctor.ts"
45
49
  },
46
50
  "keywords": [
47
51
  "x402",
@@ -74,7 +78,8 @@
74
78
  "@solana/kit": ">=5.1.0",
75
79
  "@x402/core": ">=2.0.0",
76
80
  "@x402/fetch": ">=2.0.0",
77
- "@x402/svm": ">=2.0.0"
81
+ "@x402/svm": ">=2.0.0",
82
+ "x402-solana": ">=2.1.0"
78
83
  },
79
84
  "peerDependenciesMeta": {
80
85
  "@scure/base": {
@@ -91,6 +96,9 @@
91
96
  },
92
97
  "@x402/svm": {
93
98
  "optional": true
99
+ },
100
+ "x402-solana": {
101
+ "optional": true
94
102
  }
95
103
  },
96
104
  "devDependencies": {