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 +96 -0
- package/README.md +25 -7
- package/bin/twzrd-gate-doctor.js +34 -0
- package/bin/twzrd-gate-eval-refuse.js +1 -1
- package/dist/auto-gate.d.ts +19 -5
- package/dist/auto-gate.d.ts.map +1 -1
- package/dist/auto-gate.js +15 -6
- package/dist/auto-gate.js.map +1 -1
- package/dist/block-proof.d.ts +8 -1
- package/dist/block-proof.d.ts.map +1 -1
- package/dist/block-proof.js +1 -1
- package/dist/block-proof.js.map +1 -1
- package/dist/doctor.d.ts +48 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +246 -0
- package/dist/doctor.js.map +1 -0
- 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/x402-client-hook.d.ts +43 -0
- package/dist/x402-client-hook.d.ts.map +1 -1
- package/dist/x402-client-hook.js +63 -0
- package/dist/x402-client-hook.js.map +1 -1
- package/package.json +15 -7
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.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
257
|
+
npm install twzrd-x402-gate@0.8.10
|
|
242
258
|
```
|
|
243
259
|
|
|
244
|
-
Current npm truth: `0.8.
|
|
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.
|
|
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
|
}
|
package/dist/auto-gate.d.ts
CHANGED
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Design: docs/strategy/install-autogate-design.md (#1586).
|
|
5
5
|
*
|
|
6
|
-
* One name across
|
|
7
|
-
* 1. Fetch / payWrap
|
|
8
|
-
* 2. x402 client
|
|
9
|
-
* 3.
|
|
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.
|
package/dist/auto-gate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-gate.d.ts","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
7
|
-
* 1. Fetch / payWrap
|
|
8
|
-
* 2. x402 client
|
|
9
|
-
* 3.
|
|
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).
|
package/dist/auto-gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-gate.js","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auto-gate.js","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/block-proof.d.ts
CHANGED
|
@@ -16,7 +16,12 @@ export type AutogateBlockProof = {
|
|
|
16
16
|
internal_reason: string | null;
|
|
17
17
|
};
|
|
18
18
|
interception: {
|
|
19
|
-
|
|
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;
|
|
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"}
|
package/dist/block-proof.js
CHANGED
|
@@ -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,
|
package/dist/block-proof.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAChH,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,GAClC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,IAAI,IAAI,aAAa,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,
|
|
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,
|
|
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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"}
|
package/dist/x402-client-hook.js
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAoD,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACL,0BAA0B,GAG3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AA0HlE,SAAS,OAAO,CAAC,GAAiC;IAChD,OAAO,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,cAAqD;IAErD,IAAI,CAAC,cAAc;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,cAG1B,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC;IACjC,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClE,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,yFAAyF;YACvF,2EAA2E,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,2FAA2F;YACzF,mEAAmE,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAgB,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,oBAA8C,EAC9C,OAAsC,EACtC,QAAyB;IAEzB,MAAM,GAAG,GAA4B,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,IAAI,oBAAoB,CAAC,MAAM,CAAC;IACxE,MAAM,WAAW,GACf,oBAAoB,CAAC,MAAM,IAAI,oBAAoB,CAAC,iBAAiB,CAAC;IACxE,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC;IAE7C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CACxC;QACE,WAAW,EAAE,oBAAoB,CAAC,QAAQ;QAC1C,KAAK;QACL,SAAS;QACT,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EAAE,OAAO;KACf,EACD,GAAG,CACJ,CAAC;IAEF,wEAAwE;IACxE,2EAA2E;IAC3E,wEAAwE;IACxE,IAAI,MAAiC,CAAC;IACtC,IAAI,QAAqC,CAAC;IAC1C,IAAI,OAAO,EAAE,cAAc,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,QAAQ,IAAI,2BAA2B,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC/E,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;QAClC,0EAA0E;QAC1E,MAAM,GAAG,wBAAwB,CAAC,oBAAoB,EAAE;YACtD,WAAW,EAAE,oBAAoB,CAAC,QAAQ;YAC1C,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,OAAO,EAAE,EAAE,CAAC,OAAO;SACpB,CAAC,CAAC;QACH,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;YACtC,MAAM,EAAE,MAAO;YACf,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;YACpB,mEAAmE;YACnE,mEAAmE;YACnE,sDAAsD;YACtD,WAAW,EAAE,QAAQ,CAAC,QAAQ;YAC9B,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;gBACnB,uEAAuE;gBACvE,oEAAoE;gBACpE,iEAAiE;gBACjE,+DAA+D;gBAC/D,KAAK,EAAE,6BAA6B,CAAC,QAAQ,CAAC;gBAC9C,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;gBAC9C,QAAQ,EACN,QAAQ,CAAC,OAAO,KAAK,OAAO;oBAC5B,QAAQ,CAAC,OAAO,KAAK,MAAM;oBAC3B,QAAQ,CAAC,OAAO,KAAK,OAAO;oBAC1B,CAAC,CAAC,QAAQ,CAAC,OAAO;oBAClB,CAAC,CAAC,SAAS;gBACf,UAAU,EAAE,QAAQ,CAAC,KAAK,IAAI,SAAS;aACxC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,CAAC;YACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YACjC,KAAK;YACL,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,OAAO;YACpC,WAAW;YACX,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IAED,2EAA2E;IAC3E,wDAAwD;IACxD,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GACV,QAAQ,IAAI,QAAQ,CAAC,QAAQ;YAC3B,CAAC,CAAC,iCAAiC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,SAAS,EAAE;YAChG,CAAC,CAAC,WAAW,QAAQ,CAAC,MAAM,UAAU,KAAK,IAAI,SAAS,YAAY,OAAO,IAAI,SAAS,EAAE,CAAC;QAC/F,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;IACD,qFAAqF;IACrF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAsB,EACtB,OAAsC;IAEtC,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,QAAQ,GAAG,2BAA2B,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEtE,MAAM,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,EAAE,CACzC,6BAA6B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CACnE,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,oBAA8C,EAC9C,OAAsC;IAEtC,OAAO,6BAA6B,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC"}
|
|
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.
|
|
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": {
|