twzrd-x402-gate 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,9 +2,58 @@
2
2
 
3
3
  **TWZRD is the default `onBeforePaymentCreation` policy engine for official x402 clients.**
4
4
 
5
- Agent-side firewall: after the client selects the exact payment requirement and **before**
6
- payment payload creation / wallet signing — free preflight + merchant_card wash refuse.
7
- Chain-neutral envelope; **Solana-deep** reputation only (Base/EVM = explicit `unknown`).
5
+ **Core product (buyer gate):** after the client selects the exact payment requirement and
6
+ **before** payment payload creation / wallet signing — free preflight + merchant_card wash
7
+ refuse. Protects the **payer** from a risky **merchant** (`payTo`). Chain-neutral envelope;
8
+ **Solana-deep** reputation only (Base/EVM = explicit `unknown`).
9
+
10
+ **Optional (0.8.1):** a resource-server settle hook so merchants can apply **customer policy**
11
+ before they settle and serve (abuse, sanctions, bots, “don’t serve this payer”). Not an equal
12
+ mirror of the buyer problem — settled USDC is final; wash resistance is mainly TWZRD scoring.
13
+
14
+ ## Seller settle guard (`onBeforeSettle`) — optional 0.8.1
15
+
16
+ Resource servers can screen the **payer** before *they* settle an inbound payment and serve
17
+ the resource. Use for merchant policy (abuse / sanctions / bots / customer selection). TWZRD is
18
+ not in the settlement path: advisory + fail-open by default. Attaches to official
19
+ `x402ResourceServer.onBeforeSettle` (inherited by `@x402/express|hono|next|fastify` and Python x402).
20
+
21
+ Do **not** treat this as “protect merchant reputation by rejecting USDC” — anyone can still
22
+ transfer on-chain. Wash/sybil edges are primarily discounted in TWZRD scoring, not forced
23
+ revenue refusal.
24
+
25
+ ```bash
26
+ npm install twzrd-x402-gate@0.8.2
27
+ ```
28
+
29
+ ```typescript
30
+ import { x402ResourceServer } from "@x402/core/server";
31
+ import { createTwzrdSettleGuard, twzrdPayerScreen } from "twzrd-x402-gate";
32
+
33
+ const server = new x402ResourceServer(facilitator);
34
+ server.onBeforeSettle(
35
+ createTwzrdSettleGuard({ screen: twzrdPayerScreen() }),
36
+ );
37
+ ```
38
+
39
+ **Defaults (fail-open / advisory):**
40
+
41
+ | Behavior | Default |
42
+ |----------|---------|
43
+ | Abort settlement | `decision=block` **or** `wash_flagged=true` |
44
+ | `warn` | **allowed** (continues) unless you set `abortOn.warn` |
45
+ | Default screen | free `GET /v1/intel/merchant_card/{payer}` via `twzrdPayerScreen()` |
46
+ | Screen/extract timeout | `timeoutMs: 3000` — on timeout, **continue** (fail-open) |
47
+ | Unresolved payer / null screen / screen error | **continue** unless `failOpen: false` |
48
+ | Paid `/v1/intel/trust` | **not** default — inject a custom `screen` if you want it |
49
+
50
+ Payer identity prefers signed/encoded scheme fields (EIP-3009 `authorization.from`, Permit2
51
+ `permit2Authorization.from`, exact-SVM `payload.transaction` via optional peer `@x402/svm`)
52
+ over client-supplied loose aliases — so a spoofed `payload.payer` cannot bypass screening.
53
+
54
+ Offline demo: `npx tsx examples/seller-settle-guard.ts`
55
+ Fixture-backed SVM extract tests live in `test/seller-hook.test.ts` +
56
+ `test/fixtures/exact-svm-transfer-checked.ts`.
8
57
 
9
58
 
10
59
  ## Demonstrable refuse mechanism (free, fail-open, reproducible)
@@ -14,7 +63,7 @@ Chain-neutral envelope; **Solana-deep** reputation only (Base/EVM = explicit `un
14
63
  Install the published gate and run against wash fixtures:
15
64
 
16
65
  ```bash
17
- npm install twzrd-x402-gate@0.7.1
66
+ npm install twzrd-x402-gate@0.8.2
18
67
  # from package root after install, or from a checkout:
19
68
  npm run wash-dogfood
20
69
  ```
@@ -34,7 +83,7 @@ Gate dogfood: `approved=false` `reason=twzrd_decision_block`, **USDC spent = 0**
34
83
 
35
84
  **Accurate paste line:**
36
85
 
37
- > Preflight returned decision=block on wash seller 7G73PL… / HuSiSpc… (preflight_id 378468 / 378469, wash_flagged=true). Gate approved=false reason=twzrd_decision_block. No USDC spent. No tx broadcast. Repro: `npm i twzrd-x402-gate@0.7.1 && npm run wash-dogfood` or gist above.
86
+ > Preflight returned decision=block on wash seller 7G73PL… / HuSiSpc… (preflight_id 378468 / 378469, wash_flagged=true). Gate approved=false reason=twzrd_decision_block. No USDC spent. No tx broadcast. Repro: `npm i twzrd-x402-gate@0.8.1 && npm run wash-dogfood` or gist above.
38
87
 
39
88
  This is a **reproducible demonstration** that the free gate blocks known wash sellers with stamped `preflight_id`s and zero spend. It is **not** proof that external agents already default to this path at scale.
40
89
 
@@ -116,17 +165,27 @@ Canonical path for every agent that spends USDC on Solana x402:
116
165
 
117
166
  **Order note:** `onWarnUpsell` (points at paid `/trust`) fires on preflight `warn` **before** the merchant_card wash check. A wash-flagged seller that preflighted as `warn` may still get the upsell hook, then be refused on step 2.
118
167
 
119
- Dogfood:
168
+ Dogfood (one public live proof path):
120
169
  - Free only (wash refuse): `npm run wash-dogfood` → [`examples/wash-refuse-dogfood.ts`](./examples/wash-refuse-dogfood.ts)
121
170
  - Official client + Path E hook (live Solana ≤$0.001): `npm run official-dogfood` → [`examples/official-x402-dogfood.ts`](./examples/official-x402-dogfood.ts). Needs `@x402/fetch` `@x402/svm` `@x402/core` `@solana/kit` `@scure/base` and a funded Solana key (`SVM_KEYPAIR_PATH` or `~/.agentcash/solana-wallet.json`). `--block` exercises hard `gateOnCanSpend` abort with $0 spend.
171
+ - Multi-hook composition (amount cap then TWZRD, abort short-circuit) is proven offline against the real `x402Client` in `test/x402-official-compat.test.ts`.
172
+ - Release identity: `CLIENT_VERSION` is read from `package.json` (single source of truth); `npm test` includes `version-identity`; `npm run pack-smoke` packs the tarball and checks the installed header.
122
173
 
123
174
  ## Install
124
175
 
125
176
  ```bash
126
- npm install twzrd-x402-gate@0.7.1
177
+ npm install twzrd-x402-gate@0.8.2
127
178
  ```
128
179
 
129
- Current npm truth: check `npm view twzrd-x402-gate version` (do not pin stale **0.5.4**).
180
+ Current npm truth: `0.8.2` (buyer gate + optional seller settle guard + payer-extract hardening).
181
+ Check `npm view twzrd-x402-gate version` if in doubt (do not pin stale **0.5.4** / **0.7.1**).
182
+
183
+ Optional settle guard (resource-server **payer** policy): see **Seller settle guard
184
+ (`onBeforeSettle`) — optional 0.8.1** above. Do not confuse with facilitator
185
+ `createOnBeforeSettleHook` in `@wzrd_sol/plugin-trustgate/facilitator` — that screens
186
+ the **merchant/payTo** on a brokered settle (buyer-side counterparty check at the rail).
187
+
188
+ Live card screen: `npx tsx examples/seller-settle-guard.ts --live <payerWallet>`
130
189
 
131
190
  ## TWZRD Payment Control (protocol-neutral authorization core)
132
191
 
@@ -592,6 +651,16 @@ A 402 whose payment requirements yield **no identifiable seller wallet** (missin
592
651
  | `disabled` (`installTwzrdAutoGate` only) | `TWZRD_AUTO_GATE=0`/`false` | `false` | Bypass the guard entirely — `payWrap` gets the raw, unguarded fetch |
593
652
  | `attribution` | `TWZRD_ATTRIBUTION_INTEGRATION` + `TWZRD_ATTRIBUTION_RUN_ID` | — | Opt-in run attribution (see below) |
594
653
 
654
+ ## Gate adoption proof (no-spend harness)
655
+
656
+ Deterministic install→transcript path for operators (no wallet, no USDC):
657
+
658
+ ```bash
659
+ npm run adoption-proof -- --integration <YOUR_ID> --run-id <UUID>
660
+ ```
661
+
662
+ Emits `twzrd.gate_adoption_transcript.v1` JSON: block path aborts with `signerInvocations: 0`, allow path emits decision, attribution headers stamped on mocked preflight. Full acceptance criteria (what counts as `EXTERNAL_RUN` vs dogfood): monorepo `docs/strategy/gate-adoption-operator-proof.md`.
663
+
595
664
  ## Run attribution (optional, for integration correlation)
596
665
 
597
666
  When you set `attribution`, the gate stamps **only the TWZRD preflight request** (never the
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Gate Adoption Proof Harness — deterministic, no-spend, package-local.
3
+ *
4
+ * Closes the install→transcript gap for operators who already installed
5
+ * installTwzrdX402ClientHook / installTwzrdAutoGate:
6
+ * 1) exact selectedRequirements reach the pre-sign hook
7
+ * 2) onDecision emits a verdict
8
+ * 3) block path aborts and never invokes a wallet/signer stub
9
+ * 4) attribution (integration + runId + client) is stamped on preflight only
10
+ *
11
+ * This harness is correlation / integration evidence. It is NOT EXTERNAL_RUN
12
+ * by itself (see docs/strategy/gate-adoption-operator-proof.md).
13
+ */
14
+ import { type X402SelectedRequirements } from "./x402-client-hook.js";
15
+ export declare const ADOPTION_TRANSCRIPT_SCHEMA: "twzrd.gate_adoption_transcript.v1";
16
+ /** Fixture merchant pubkey (base58-shaped); not a live spend target. */
17
+ export declare const ADOPTION_PROOF_SELLER = "sLJ4uneGcD1mg6hKtkLYsY5HCw1nJ8GpNAmbzBWPBgk";
18
+ export declare const ADOPTION_PROOF_NETWORK = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
19
+ export declare const ADOPTION_PROOF_RESOURCE = "https://merchant.example/twzrd-adoption-proof";
20
+ export type GateAdoptionStepName = "block_path" | "allow_path";
21
+ export type GateAdoptionStep = {
22
+ name: GateAdoptionStepName;
23
+ selectedRequirements: X402SelectedRequirements;
24
+ abort: boolean;
25
+ reason?: string;
26
+ decisionEmitted: boolean;
27
+ verdict: string;
28
+ approved: boolean;
29
+ /**
30
+ * payTo as reported by the hook's onDecision callback (hook-derived).
31
+ * Used to prove selectedRequirements reached the real hook path — not
32
+ * merely echoed from harness-local selectedRequirements.
33
+ */
34
+ hookPayTo?: string;
35
+ /**
36
+ * seller_wallet from the preflight JSON body the hook actually POSTed
37
+ * (hook-derived via mocked fetch recorder).
38
+ */
39
+ preflightSellerWallet?: string | null;
40
+ /** Count of wallet/signer stub invocations during this step (must be 0). */
41
+ signerInvocations: number;
42
+ /** Headers observed on the mocked preflight fetch for this step. */
43
+ preflightAttribution: {
44
+ integration: string | null;
45
+ runId: string | null;
46
+ client: string | null;
47
+ };
48
+ };
49
+ export type GateAdoptionAssertions = {
50
+ selectedRequirementReachedHook: boolean;
51
+ decisionEmitted: boolean;
52
+ blockedPathNeverInvokesSigner: boolean;
53
+ allowPathNeverInvokesSigner: boolean;
54
+ attributionSurfaced: boolean;
55
+ };
56
+ /**
57
+ * Lineage of this transcript.
58
+ * - dogfood: package harness, CI, or TWZRD-authored run
59
+ * - external_candidate: operator-supplied integration id (still needs server-side join for EXTERNAL_RUN)
60
+ */
61
+ export type GateAdoptionLineage = "dogfood" | "external_candidate";
62
+ export type GateAdoptionTranscript = {
63
+ schema: typeof ADOPTION_TRANSCRIPT_SCHEMA;
64
+ package: "twzrd-x402-gate";
65
+ packageVersion: string;
66
+ proofKind: "local_deterministic_harness";
67
+ mode: "no_spend";
68
+ integration: string;
69
+ runId: string;
70
+ lineage: GateAdoptionLineage;
71
+ clientHeader: string;
72
+ steps: GateAdoptionStep[];
73
+ assertions: GateAdoptionAssertions;
74
+ ok: boolean;
75
+ /**
76
+ * What this transcript is NOT. Operators must not treat package downloads,
77
+ * free preflight hits alone, or self-authored runIds as EXTERNAL_RUN.
78
+ */
79
+ notExternalRunProof: string[];
80
+ /** Human pointer to the acceptance contract. */
81
+ acceptanceDoc: "docs/strategy/gate-adoption-operator-proof.md";
82
+ };
83
+ export type RunGateAdoptionProofOptions = {
84
+ /** Stable integration label (e.g. "acme-agent-v1"). Default dogfood label. */
85
+ integration?: string;
86
+ /** Per-run id. Default random UUID. Echo in your issue / transcript. */
87
+ runId?: string;
88
+ /**
89
+ * Mark lineage external_candidate when the operator sets a non-internal integration id.
90
+ * Still not EXTERNAL_RUN without server-side observation (see acceptance doc).
91
+ */
92
+ lineage?: GateAdoptionLineage;
93
+ };
94
+ /**
95
+ * Run the deterministic no-spend adoption proof.
96
+ * Never contacts a wallet; never spends USDC. Preflight is mocked.
97
+ */
98
+ export declare function runGateAdoptionProof(opts?: RunGateAdoptionProofOptions): Promise<GateAdoptionTranscript>;
99
+ /** CLI entry: print one JSON transcript to stdout; exit 0 if ok else 1. */
100
+ export declare function main(argv?: string[]): Promise<number>;
101
+ //# sourceMappingURL=adoption-proof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adoption-proof.d.ts","sourceRoot":"","sources":["../src/adoption-proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAKL,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,0BAA0B,EAAG,mCAA4C,CAAC;AAEvF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,gDAAgD,CAAC;AACnF,eAAO,MAAM,sBAAsB,4CAA4C,CAAC;AAChF,eAAO,MAAM,uBAAuB,kDAAkD,CAAC;AAEvF,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,YAAY,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,oBAAoB,EAAE;QACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,8BAA8B,EAAE,OAAO,CAAC;IACxC,eAAe,EAAE,OAAO,CAAC;IACzB,6BAA6B,EAAE,OAAO,CAAC;IACvC,2BAA2B,EAAE,OAAO,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,oBAAoB,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,6BAA6B,CAAC;IACzC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,mBAAmB,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,EAAE,sBAAsB,CAAC;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ;;;OAGG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gDAAgD;IAChD,aAAa,EAAE,+CAA+C,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AA8FF;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,GAAE,2BAAgC,GACrC,OAAO,CAAC,sBAAsB,CAAC,CAsLjC;AAED,2EAA2E;AAC3E,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlF"}
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Gate Adoption Proof Harness — deterministic, no-spend, package-local.
3
+ *
4
+ * Closes the install→transcript gap for operators who already installed
5
+ * installTwzrdX402ClientHook / installTwzrdAutoGate:
6
+ * 1) exact selectedRequirements reach the pre-sign hook
7
+ * 2) onDecision emits a verdict
8
+ * 3) block path aborts and never invokes a wallet/signer stub
9
+ * 4) attribution (integration + runId + client) is stamped on preflight only
10
+ *
11
+ * This harness is correlation / integration evidence. It is NOT EXTERNAL_RUN
12
+ * by itself (see docs/strategy/gate-adoption-operator-proof.md).
13
+ */
14
+ import { CLIENT_VERSION } from "./version.js";
15
+ import { installTwzrdX402ClientHook, } from "./x402-client-hook.js";
16
+ export const ADOPTION_TRANSCRIPT_SCHEMA = "twzrd.gate_adoption_transcript.v1";
17
+ /** Fixture merchant pubkey (base58-shaped); not a live spend target. */
18
+ export const ADOPTION_PROOF_SELLER = "sLJ4uneGcD1mg6hKtkLYsY5HCw1nJ8GpNAmbzBWPBgk";
19
+ export const ADOPTION_PROOF_NETWORK = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
20
+ export const ADOPTION_PROOF_RESOURCE = "https://merchant.example/twzrd-adoption-proof";
21
+ function mockClient() {
22
+ let hook;
23
+ const client = {
24
+ onBeforePaymentCreation(h) {
25
+ hook = h;
26
+ return client;
27
+ },
28
+ };
29
+ return {
30
+ client,
31
+ async fire(ctx) {
32
+ if (!hook)
33
+ throw new Error("adoption-proof: hook not installed");
34
+ return hook(ctx);
35
+ },
36
+ };
37
+ }
38
+ function preflightCard(decision, canSpend) {
39
+ return {
40
+ readiness_card: {
41
+ decision,
42
+ can_spend: canSpend,
43
+ trust_score: decision === "block" || !canSpend ? 10 : 90,
44
+ seller_wallet: ADOPTION_PROOF_SELLER,
45
+ },
46
+ preflight_id: decision === "block" || !canSpend ? 1 : 2,
47
+ };
48
+ }
49
+ function recordingPreflightFetch(body) {
50
+ let last = null;
51
+ let lastSeller = null;
52
+ const fetchImpl = (async (_url, init) => {
53
+ last = new Headers(init?.headers);
54
+ lastSeller = null;
55
+ if (typeof init?.body === "string") {
56
+ try {
57
+ const parsed = JSON.parse(init.body);
58
+ if (typeof parsed.seller_wallet === "string")
59
+ lastSeller = parsed.seller_wallet;
60
+ }
61
+ catch {
62
+ // ignore non-JSON bodies
63
+ }
64
+ }
65
+ return new Response(JSON.stringify(body), {
66
+ status: 200,
67
+ headers: { "content-type": "application/json" },
68
+ });
69
+ });
70
+ return {
71
+ fetch: fetchImpl,
72
+ lastHeaders: () => last,
73
+ lastSellerWallet: () => lastSeller,
74
+ };
75
+ }
76
+ function baseRequirements(amount) {
77
+ return {
78
+ payTo: ADOPTION_PROOF_SELLER,
79
+ network: ADOPTION_PROOF_NETWORK,
80
+ amount,
81
+ asset: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
82
+ resource: ADOPTION_PROOF_RESOURCE,
83
+ scheme: "exact",
84
+ };
85
+ }
86
+ function isInternalIntegration(integration) {
87
+ const i = integration.toLowerCase();
88
+ return (i.startsWith("twzrd-") ||
89
+ i.startsWith("twzrd/") ||
90
+ i.startsWith("ops-") ||
91
+ i.startsWith("test-") ||
92
+ i === "dogfood" ||
93
+ i.includes("dogfood") ||
94
+ i.includes("internal") ||
95
+ i.includes("ci-") ||
96
+ i === "gate-adoption-proof");
97
+ }
98
+ /**
99
+ * Run the deterministic no-spend adoption proof.
100
+ * Never contacts a wallet; never spends USDC. Preflight is mocked.
101
+ */
102
+ export async function runGateAdoptionProof(opts = {}) {
103
+ const integration = opts.integration?.trim() || "gate-adoption-proof";
104
+ const runId = opts.runId?.trim() ||
105
+ (typeof crypto !== "undefined" && "randomUUID" in crypto
106
+ ? crypto.randomUUID()
107
+ : `run-${Date.now()}`);
108
+ const lineage = opts.lineage ??
109
+ (isInternalIntegration(integration) ? "dogfood" : "external_candidate");
110
+ const clientHeader = `twzrd-x402-gate/${CLIENT_VERSION}`;
111
+ const steps = [];
112
+ // ── block path: can_spend false → abort, signer must stay 0 ─────────────
113
+ {
114
+ const signerInvocations = { n: 0 };
115
+ const signer = {
116
+ async sign() {
117
+ signerInvocations.n += 1;
118
+ throw new Error("adoption-proof: signer must not be called");
119
+ },
120
+ };
121
+ const { fetch, lastHeaders, lastSellerWallet } = recordingPreflightFetch(preflightCard("warn", false));
122
+ const { client, fire } = mockClient();
123
+ let decisionDetail;
124
+ installTwzrdX402ClientHook(client, {
125
+ gateOnCanSpend: true,
126
+ refuseWashFlagged: false,
127
+ fetch,
128
+ attribution: { integration, runId },
129
+ onDecision: (d) => {
130
+ decisionDetail = {
131
+ approved: d.approved,
132
+ verdict: d.verdict,
133
+ reason: d.reason,
134
+ payTo: d.payTo,
135
+ };
136
+ },
137
+ });
138
+ // Operator would call wallet.signMessage only after hook returns non-abort.
139
+ // We only invoke signer if the hook allows — proving block never reaches it.
140
+ const req = baseRequirements("1000");
141
+ const result = await fire({ selectedRequirements: req });
142
+ const abort = Boolean(result && typeof result === "object" && "abort" in result && result.abort);
143
+ if (!abort) {
144
+ await signer.sign();
145
+ }
146
+ const h = lastHeaders();
147
+ const abortReason = abort && result && typeof result === "object" && "reason" in result
148
+ ? String(result.reason)
149
+ : undefined;
150
+ steps.push({
151
+ name: "block_path",
152
+ selectedRequirements: req,
153
+ abort,
154
+ reason: abortReason,
155
+ decisionEmitted: decisionDetail != null,
156
+ verdict: decisionDetail?.verdict ?? "missing",
157
+ approved: decisionDetail?.approved ?? false,
158
+ hookPayTo: decisionDetail?.payTo,
159
+ preflightSellerWallet: lastSellerWallet(),
160
+ signerInvocations: signerInvocations.n,
161
+ preflightAttribution: {
162
+ integration: h?.get("x-twzrd-integration") ?? null,
163
+ runId: h?.get("x-twzrd-run-id") ?? null,
164
+ client: h?.get("x-twzrd-client") ?? null,
165
+ },
166
+ });
167
+ }
168
+ // ── allow path: decision allow, still no real wallet spend ──────────────
169
+ {
170
+ const signerInvocations = { n: 0 };
171
+ const { fetch, lastHeaders, lastSellerWallet } = recordingPreflightFetch(preflightCard("allow", true));
172
+ const { client, fire } = mockClient();
173
+ let decisionDetail;
174
+ installTwzrdX402ClientHook(client, {
175
+ gateOnCanSpend: true,
176
+ refuseWashFlagged: false,
177
+ preflightMinScore: 40,
178
+ fetch,
179
+ attribution: { integration, runId },
180
+ onDecision: (d) => {
181
+ decisionDetail = {
182
+ approved: d.approved,
183
+ verdict: d.verdict,
184
+ reason: d.reason,
185
+ payTo: d.payTo,
186
+ };
187
+ },
188
+ });
189
+ const req = baseRequirements("1000");
190
+ const result = await fire({ selectedRequirements: req });
191
+ const abort = Boolean(result && typeof result === "object" && "abort" in result && result.abort);
192
+ // Allow path: payload construction would run next — we do not call a wallet signer
193
+ // in this no_spend harness (proves allow decision without spend).
194
+ void signerInvocations;
195
+ const h = lastHeaders();
196
+ steps.push({
197
+ name: "allow_path",
198
+ selectedRequirements: req,
199
+ abort,
200
+ reason: abort && result && typeof result === "object" && "reason" in result
201
+ ? String(result.reason)
202
+ : undefined,
203
+ decisionEmitted: decisionDetail != null,
204
+ verdict: decisionDetail?.verdict ?? "missing",
205
+ approved: decisionDetail?.approved ?? false,
206
+ hookPayTo: decisionDetail?.payTo,
207
+ preflightSellerWallet: lastSellerWallet(),
208
+ signerInvocations: signerInvocations.n,
209
+ preflightAttribution: {
210
+ integration: h?.get("x-twzrd-integration") ?? null,
211
+ runId: h?.get("x-twzrd-run-id") ?? null,
212
+ client: h?.get("x-twzrd-client") ?? null,
213
+ },
214
+ });
215
+ }
216
+ const block = steps.find((s) => s.name === "block_path");
217
+ const allow = steps.find((s) => s.name === "allow_path");
218
+ // Hook-derived only: onDecision.payTo, abort reason, and preflight POST body.
219
+ // Do NOT use step.selectedRequirements (harness-echo) for this flag.
220
+ const blockHookSawSeller = block.hookPayTo === ADOPTION_PROOF_SELLER ||
221
+ (typeof block.reason === "string" && block.reason.includes(ADOPTION_PROOF_SELLER)) ||
222
+ block.preflightSellerWallet === ADOPTION_PROOF_SELLER;
223
+ const allowHookSawSeller = allow.hookPayTo === ADOPTION_PROOF_SELLER ||
224
+ allow.preflightSellerWallet === ADOPTION_PROOF_SELLER;
225
+ const assertions = {
226
+ selectedRequirementReachedHook: blockHookSawSeller && allowHookSawSeller,
227
+ decisionEmitted: block.decisionEmitted && allow.decisionEmitted,
228
+ blockedPathNeverInvokesSigner: block.abort === true && block.signerInvocations === 0,
229
+ allowPathNeverInvokesSigner: allow.signerInvocations === 0 && allow.abort === false,
230
+ attributionSurfaced: block.preflightAttribution.integration === integration &&
231
+ block.preflightAttribution.runId === runId &&
232
+ block.preflightAttribution.client === clientHeader &&
233
+ allow.preflightAttribution.integration === integration &&
234
+ allow.preflightAttribution.runId === runId,
235
+ };
236
+ const ok = Object.values(assertions).every(Boolean);
237
+ return {
238
+ schema: ADOPTION_TRANSCRIPT_SCHEMA,
239
+ package: "twzrd-x402-gate",
240
+ packageVersion: CLIENT_VERSION,
241
+ proofKind: "local_deterministic_harness",
242
+ mode: "no_spend",
243
+ integration,
244
+ runId,
245
+ lineage,
246
+ clientHeader,
247
+ steps,
248
+ assertions,
249
+ ok,
250
+ notExternalRunProof: [
251
+ "package_download_counts",
252
+ "preflight_hits_alone",
253
+ "self_authored_run_id_without_operator_transcript",
254
+ "this_harness_alone_without_server_side_join",
255
+ ],
256
+ acceptanceDoc: "docs/strategy/gate-adoption-operator-proof.md",
257
+ };
258
+ }
259
+ /** CLI entry: print one JSON transcript to stdout; exit 0 if ok else 1. */
260
+ export async function main(argv = process.argv.slice(2)) {
261
+ let integration;
262
+ let runId;
263
+ for (let i = 0; i < argv.length; i++) {
264
+ const a = argv[i];
265
+ if (a === "--integration" && argv[i + 1])
266
+ integration = argv[++i];
267
+ else if (a === "--run-id" && argv[i + 1])
268
+ runId = argv[++i];
269
+ else if (a === "--help" || a === "-h") {
270
+ process.stdout.write("Usage: npm run adoption-proof -- [--integration <id>] [--run-id <uuid>]\n" +
271
+ "Deterministic no-spend gate adoption transcript (JSON on stdout).\n" +
272
+ "See docs/strategy/gate-adoption-operator-proof.md\n");
273
+ return 0;
274
+ }
275
+ }
276
+ const transcript = await runGateAdoptionProof({ integration, runId });
277
+ process.stdout.write(`${JSON.stringify(transcript, null, 2)}\n`);
278
+ return transcript.ok ? 0 : 1;
279
+ }
280
+ const isDirect = typeof process !== "undefined" &&
281
+ process.argv[1] &&
282
+ (process.argv[1].endsWith("adoption-proof.ts") ||
283
+ process.argv[1].endsWith("adoption-proof.js"));
284
+ if (isDirect) {
285
+ main().then((code) => process.exit(code), (err) => {
286
+ console.error(err);
287
+ process.exit(1);
288
+ });
289
+ }
290
+ //# sourceMappingURL=adoption-proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adoption-proof.js","sourceRoot":"","sources":["../src/adoption-proof.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export { CLIENT_VERSION } from "./version.js";
1
2
  export { createTwzrdGate, defaultGate, type TwzrdGate } from "./gate.js";
2
3
  export { resolveConfig, type ResolvedTwzrdGateConfig } from "./config.js";
3
4
  export { evaluateReadinessCard, buildPreflightInput, twzrdPreflight, twzrdApprovePayment, type PolicyEvaluateInput, } from "./policy.js";
@@ -12,6 +13,7 @@ export { withTwzrdGuard, type TwzrdGuardOptions } from "./with-guard.js";
12
13
  export { installTwzrdAutoGate, type PayWrap, type InstallAutoGateOptions, } from "./auto-gate.js";
13
14
  export { safeFetch, runAgentcashFetch, main as safeFetchMain, type SafeFetchOptions, type SafeFetchResult, } from "./safe-fetch.js";
14
15
  export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, type X402ClientLike, type X402SelectedRequirements, type BeforePaymentCreationContext, type BeforePaymentCreationResult, type InstallX402ClientHookOptions, type X402PaymentControlOptions, } from "./x402-client-hook.js";
16
+ 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";
15
17
  export { quickCheck, QUICK_PRICE_USDC, type QuickCheckResult, type QuickCheckOptions, type TwzrdTier, } from "./quick.js";
16
18
  export { createSponsoredX402Fetch, type SponsorSettle, type SponsoredX402Options, } from "./sponsored.js";
17
19
  export type { TwzrdDecision, TwzrdReadinessCard, TwzrdPreflightInput, TwzrdGateConfig, TwzrdApproveContext, TwzrdApprovalResult, TwzrdUpsellContext, X402PaymentRequirements, X402PaymentRequiredBody, X402McpPaymentRequest, X402McpPaymentRequestedContext, } from "./types.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
@@ -2,6 +2,7 @@
2
2
  // gate.ts also defines a generic-fn wrapper of the same name; re-exporting both here
3
3
  // is a duplicate-export collision that esbuild/tsx/Vite reject (tsc silently keeps the
4
4
  // last one). The fetch wrapper is the documented public API, so we export only that.
5
+ export { CLIENT_VERSION } from "./version.js";
5
6
  export { createTwzrdGate, defaultGate } from "./gate.js";
6
7
  export { resolveConfig } from "./config.js";
7
8
  export { evaluateReadinessCard, buildPreflightInput, twzrdPreflight, twzrdApprovePayment, } from "./policy.js";
@@ -15,6 +16,7 @@ export { withTwzrdGuard } from "./with-guard.js";
15
16
  export { installTwzrdAutoGate, } from "./auto-gate.js";
16
17
  export { safeFetch, runAgentcashFetch, main as safeFetchMain, } from "./safe-fetch.js";
17
18
  export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, } from "./x402-client-hook.js";
19
+ export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, } from "./adoption-proof.js";
18
20
  export { quickCheck, QUICK_PRICE_USDC, } from "./quick.js";
19
21
  export { createSponsoredX402Fetch, } from "./sponsored.js";
20
22
  /* ── TWZRD Payment Control (protocol-neutral authorization core) ── */
@@ -24,7 +26,7 @@ export { createMemorySpendLedger, evaluateIntent, POLICY_VERSION, } from "./poli
24
26
  export { ap2CheckoutToIntent, x402RequirementsToIntent, } from "./intent-adapters.js";
25
27
  export { createTwzrdMppOnChallenge, mppChallengeToIntent, mppChallengeDigest, NATIVE_SOL_CURRENCY, TwzrdMppBlockError, } from "./mpp-hook.js";
26
28
  export { approvalToIntelligence, counterpartyKnownFromApproval, createTwzrdIntelligenceProvider, intentAmountToPriceUsd, } from "./intelligence.js";
27
- // Seller-side (resource server) pre-settlement payer screening the mirror of
28
- // the buyer gate. Attaches to x402ResourceServer.onBeforeSettle; advisory + fail-open.
29
+ // Optional resource-server settle guard (merchant policy on the payer).
30
+ // Core product remains the buyer gate. Attaches to onBeforeSettle; advisory + fail-open.
29
31
  export { createTwzrdSettleGuard, defaultExtractPayer, extractSvmPayerFromTransaction, twzrdPayerScreen, toPayaiVerifyResult, } from "./seller-hook.js";
30
32
  //# sourceMappingURL=index.js.map
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,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,MAAM,YAAY,CAAC;AAC/F,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,GAGrB,MAAM,gBAAgB,CAAC;AACxB,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,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,+EAA+E;AAC/E,uFAAuF;AACvF,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,MAAM,YAAY,CAAC;AAC/F,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,GAGrB,MAAM,gBAAgB,CAAC;AACxB,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,12 +1,13 @@
1
1
  /**
2
- * Seller-side x402 pre-settlement guard the MIRROR of the buyer gate.
2
+ * Optional seller-side x402 pre-settlement guard (merchant customer policy).
3
3
  *
4
- * The rest of this package gates a PAYER's outgoing spend (buyer screens the
5
- * seller before paying). This module is the other direction: a resource server
6
- * (SELLER), before it settles an incoming x402 payment, screens the PAYER
7
- * against TWZRD's payer-graph reputation and can veto settlement of
8
- * wash / sybil / abusive payers keeping the seller's own demand-quality
9
- * reputation clean (captive/wash inbound is exactly what TWZRD flags).
4
+ * Core product of this package is the BUYER gate: a payer screens the merchant
5
+ * (payTo) before spending. This module is the other direction and is optional:
6
+ * a resource server (merchant), before it settles an inbound x402 payment, can
7
+ * screen the payer for policy reasons (abuse, sanctions, bots, customer selection)
8
+ * and veto settlement. It is not an equal product mirror of the buyer gate
9
+ * settled USDC is final; wash resistance is primarily TWZRD scoring (discount
10
+ * bad edges), not forcing merchants to reject revenue to stay "clean."
10
11
  *
11
12
  * Attaches to the official, unit-tested `x402ResourceServer.onBeforeSettle`
12
13
  * hook (inherited by @x402/express|hono|next|fastify and python x402), whose
@@ -1 +1 @@
1
- {"version":3,"file":"seller-hook.d.ts","sourceRoot":"","sources":["../src/seller-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seller-hook.d.ts","sourceRoot":"","sources":["../src/seller-hook.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  /**
2
- * Seller-side x402 pre-settlement guard the MIRROR of the buyer gate.
2
+ * Optional seller-side x402 pre-settlement guard (merchant customer policy).
3
3
  *
4
- * The rest of this package gates a PAYER's outgoing spend (buyer screens the
5
- * seller before paying). This module is the other direction: a resource server
6
- * (SELLER), before it settles an incoming x402 payment, screens the PAYER
7
- * against TWZRD's payer-graph reputation and can veto settlement of
8
- * wash / sybil / abusive payers keeping the seller's own demand-quality
9
- * reputation clean (captive/wash inbound is exactly what TWZRD flags).
4
+ * Core product of this package is the BUYER gate: a payer screens the merchant
5
+ * (payTo) before spending. This module is the other direction and is optional:
6
+ * a resource server (merchant), before it settles an inbound x402 payment, can
7
+ * screen the payer for policy reasons (abuse, sanctions, bots, customer selection)
8
+ * and veto settlement. It is not an equal product mirror of the buyer gate
9
+ * settled USDC is final; wash resistance is primarily TWZRD scoring (discount
10
+ * bad edges), not forcing merchants to reject revenue to stay "clean."
10
11
  *
11
12
  * Attaches to the official, unit-tested `x402ResourceServer.onBeforeSettle`
12
13
  * hook (inherited by @x402/express|hono|next|fastify and python x402), whose
@@ -1 +1 @@
1
- {"version":3,"file":"seller-hook.js","sourceRoot":"","sources":["../src/seller-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seller-hook.js","sourceRoot":"","sources":["../src/seller-hook.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,6 +1,2 @@
1
- /**
2
- * Package version, stamped on the `X-TWZRD-Client` preflight attribution header.
3
- * Keep in sync with package.json `version`.
4
- */
5
- export declare const CLIENT_VERSION = "0.8.1";
1
+ export declare const CLIENT_VERSION: string;
6
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,cAAc,EAAE,MAEpB,CAAC"}
package/dist/version.js CHANGED
@@ -1,6 +1,11 @@
1
1
  /**
2
2
  * Package version, stamped on the `X-TWZRD-Client` preflight attribution header.
3
- * Keep in sync with package.json `version`.
3
+ *
4
+ * Single source of truth: package.json `version`. Never hand-edit a duplicate
5
+ * string here — require the package root so src/ (tsx) and dist/ (published)
6
+ * both resolve the same file one level up.
4
7
  */
5
- export const CLIENT_VERSION = "0.8.1";
8
+ import { createRequire } from "node:module";
9
+ const require = createRequire(import.meta.url);
10
+ export const CLIENT_VERSION = require("../package.json").version;
6
11
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GACzB,OAAO,CAAC,iBAAiB,CAC1B,CAAC,OAAO,CAAC"}
@@ -120,6 +120,20 @@ export type InstallX402ClientHookOptions = TwzrdGateConfig & {
120
120
  decision?: PaymentDecision;
121
121
  }) => void;
122
122
  };
123
+ /**
124
+ * Resolve Payment Control signer once at install / first evaluate.
125
+ * EXACTLY one of signer/secret — never silently prefer one when both are set.
126
+ */
127
+ export declare function resolvePaymentControlSigner(paymentControl: X402PaymentControlOptions | undefined): DecisionSigner | undefined;
128
+ /**
129
+ * Shared evaluator used by both `installTwzrdX402ClientHook` and
130
+ * `twzrdBeforePaymentCreation`. Same legacy preflight + optional Payment
131
+ * Control + onDecision telemetry — one security semantic under both entry points.
132
+ *
133
+ * @param pcSigner Pre-resolved signer (install-time) or leave undefined to
134
+ * resolve from options.paymentControl on each call.
135
+ */
136
+ export declare function evaluateBeforePaymentCreation(selectedRequirements: X402SelectedRequirements, options?: InstallX402ClientHookOptions, pcSigner?: DecisionSigner): Promise<BeforePaymentCreationResult>;
123
137
  /**
124
138
  * Install TWZRD as the default onBeforePaymentCreation policy engine.
125
139
  *
@@ -142,7 +156,11 @@ export declare function installTwzrdX402ClientHook(client: X402ClientLike, optio
142
156
  /**
143
157
  * Standalone handler for runtimes that expose an equivalent hook API
144
158
  * (Python on_before_payment_creation, Go OnBeforePaymentCreation).
145
- * Returns abort result without requiring a client instance.
159
+ *
160
+ * Full parity with `installTwzrdX402ClientHook`: same shared evaluator
161
+ * (legacy preflight + optional Payment Control + onDecision). Prefer the
162
+ * install helper when you have an x402Client instance; use this when the host
163
+ * only provides the selected requirements object.
146
164
  */
147
165
  export declare function twzrdBeforePaymentCreation(selectedRequirements: X402SelectedRequirements, options?: InstallX402ClientHookOptions): Promise<BeforePaymentCreationResult>;
148
166
  export {};
@@ -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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"}
@@ -19,6 +19,118 @@ import { counterpartyKnownFromApproval } from "./intelligence.js";
19
19
  function pickReq(ctx) {
20
20
  return ctx.selectedRequirements ?? ctx.requirements ?? {};
21
21
  }
22
+ /**
23
+ * Resolve Payment Control signer once at install / first evaluate.
24
+ * EXACTLY one of signer/secret — never silently prefer one when both are set.
25
+ */
26
+ export function resolvePaymentControlSigner(paymentControl) {
27
+ if (!paymentControl)
28
+ return undefined;
29
+ const { signer, secret } = paymentControl;
30
+ const hasSigner = signer != null;
31
+ const hasSecret = typeof secret === "string" && secret.length > 0;
32
+ if (hasSigner && hasSecret) {
33
+ throw new Error("[twzrd] paymentControl: provide exactly one of `signer` or `secret` — both were given. " +
34
+ "Silently choosing one would sign decisions with a key you did not intend.");
35
+ }
36
+ if (!hasSigner && !hasSecret) {
37
+ throw new Error("[twzrd] paymentControl: provide exactly one of `signer` or `secret` — neither was given. " +
38
+ "Decisions must be signed to be verifiable at the signer boundary.");
39
+ }
40
+ return hasSigner ? signer : createSeededDecisionSigner(secret);
41
+ }
42
+ /**
43
+ * Shared evaluator used by both `installTwzrdX402ClientHook` and
44
+ * `twzrdBeforePaymentCreation`. Same legacy preflight + optional Payment
45
+ * Control + onDecision telemetry — one security semantic under both entry points.
46
+ *
47
+ * @param pcSigner Pre-resolved signer (install-time) or leave undefined to
48
+ * resolve from options.paymentControl on each call.
49
+ */
50
+ export async function evaluateBeforePaymentCreation(selectedRequirements, options, pcSigner) {
51
+ const cfg = resolveConfig(options);
52
+ const payTo = selectedRequirements.payTo ?? selectedRequirements.pay_to;
53
+ const amountMicro = selectedRequirements.amount ?? selectedRequirements.maxAmountRequired;
54
+ const priceUsdc = priceUsdcFromAmountMicro(amountMicro);
55
+ const network = selectedRequirements.network;
56
+ const approval = await twzrdApprovePayment({
57
+ resourceUrl: selectedRequirements.resource,
58
+ payTo,
59
+ priceUsdc,
60
+ agentIntent: "x402_onBeforePaymentCreation",
61
+ chain: network,
62
+ }, cfg);
63
+ // Opt-in Payment Control: build the canonical intent and run the policy
64
+ // runtime, feeding the preflight result in as remote intelligence. Skipped
65
+ // when payTo/amount are missing — the legacy gate already denies those.
66
+ let intent;
67
+ let decision;
68
+ if (options?.paymentControl && payTo && amountMicro) {
69
+ const signer = pcSigner ?? resolvePaymentControlSigner(options.paymentControl);
70
+ const pc = options.paymentControl;
71
+ // x402RequirementsToIntent converts the wire micro-amount to decimal USD.
72
+ intent = x402RequirementsToIntent(selectedRequirements, {
73
+ resourceUrl: selectedRequirements.resource,
74
+ method: pc.method,
75
+ facilitator: pc.facilitator,
76
+ purpose: pc.purpose,
77
+ });
78
+ decision = await evaluateIntent(intent, {
79
+ signer: signer,
80
+ policy: pc.policy,
81
+ mandate: pc.mandate,
82
+ ledger: pc.ledger,
83
+ ttlMs: pc.ttlMs,
84
+ now: options.now?.(),
85
+ // Ledger hygiene: never record spend for a payment the legacy gate
86
+ // already denied — the hook aborts it regardless of this decision,
87
+ // so recording would pollute cumulative/monthly caps.
88
+ recordSpend: approval.approved,
89
+ intelligence: () => ({
90
+ // NOT reputationScored — that flag is true for any scored Solana path,
91
+ // including a wallet we have never observed, which would mark every
92
+ // recipient known:true and disable unknownCounterparty entirely.
93
+ // Same shared mapping as the standalone intelligence provider.
94
+ known: counterpartyKnownFromApproval(approval),
95
+ washFlagged: approval.washFlagged ?? undefined,
96
+ decision: approval.verdict === "allow" ||
97
+ approval.verdict === "warn" ||
98
+ approval.verdict === "block"
99
+ ? approval.verdict
100
+ : undefined,
101
+ trustScore: approval.score ?? undefined,
102
+ }),
103
+ });
104
+ }
105
+ try {
106
+ options?.onDecision?.({
107
+ approved: approval.approved,
108
+ reason: approval.reason,
109
+ verdict: String(approval.verdict),
110
+ payTo,
111
+ network: approval.network ?? network,
112
+ amountMicro,
113
+ reputationScored: approval.reputationScored,
114
+ policyAction: approval.policyAction,
115
+ intent,
116
+ decision,
117
+ });
118
+ }
119
+ catch {
120
+ // never break payment path on telemetry
121
+ }
122
+ // Payment Control can only TIGHTEN: abort if the legacy gate denied OR the
123
+ // signed decision blocks. Never loosen a legacy denial.
124
+ const pcBlocks = decision?.decision === "block";
125
+ if (!approval.approved || pcBlocks) {
126
+ const reason = pcBlocks && approval.approved
127
+ ? `[twzrd] payment_control_block:${decision?.reasonCodes.join(",")} payTo=${payTo ?? "unknown"}`
128
+ : `[twzrd] ${approval.reason} payTo=${payTo ?? "unknown"} network=${network ?? "unknown"}`;
129
+ return { abort: true, reason };
130
+ }
131
+ // void / undefined → proceed to payment payload creation (same selectedRequirements)
132
+ return undefined;
133
+ }
22
134
  /**
23
135
  * Install TWZRD as the default onBeforePaymentCreation policy engine.
24
136
  *
@@ -38,131 +150,22 @@ function pickReq(ctx) {
38
150
  * ```
39
151
  */
40
152
  export function installTwzrdX402ClientHook(client, options) {
41
- const cfg = resolveConfig(options);
42
- // Resolve the Payment Control signer once at install time (fail fast).
43
- // EXACTLY one of signer/secret — never silently prefer one when both are set.
44
- let pcSigner;
45
- if (options?.paymentControl) {
46
- const { signer, secret } = options.paymentControl;
47
- const hasSigner = signer != null;
48
- const hasSecret = typeof secret === "string" && secret.length > 0;
49
- if (hasSigner && hasSecret) {
50
- throw new Error("[twzrd] paymentControl: provide exactly one of `signer` or `secret` — both were given. " +
51
- "Silently choosing one would sign decisions with a key you did not intend.");
52
- }
53
- if (!hasSigner && !hasSecret) {
54
- throw new Error("[twzrd] paymentControl: provide exactly one of `signer` or `secret` — neither was given. " +
55
- "Decisions must be signed to be verifiable at the signer boundary.");
56
- }
57
- pcSigner = hasSigner ? signer : createSeededDecisionSigner(secret);
58
- }
59
- client.onBeforePaymentCreation(async (context) => {
60
- const req = pickReq(context);
61
- const payTo = req.payTo ?? req.pay_to;
62
- const amountMicro = req.amount ?? req.maxAmountRequired;
63
- const priceUsdc = priceUsdcFromAmountMicro(amountMicro);
64
- const network = req.network;
65
- const approval = await twzrdApprovePayment({
66
- resourceUrl: req.resource,
67
- payTo,
68
- priceUsdc,
69
- agentIntent: "x402_onBeforePaymentCreation",
70
- chain: network,
71
- }, cfg);
72
- // Opt-in Payment Control: build the canonical intent and run the policy
73
- // runtime, feeding the preflight result in as remote intelligence. Skipped
74
- // when payTo/amount are missing — the legacy gate already denies those.
75
- let intent;
76
- let decision;
77
- if (options?.paymentControl && payTo && amountMicro) {
78
- const pc = options.paymentControl;
79
- // x402RequirementsToIntent converts the wire micro-amount to decimal USD.
80
- intent = x402RequirementsToIntent(req, {
81
- resourceUrl: req.resource,
82
- method: pc.method,
83
- facilitator: pc.facilitator,
84
- purpose: pc.purpose,
85
- });
86
- decision = await evaluateIntent(intent, {
87
- signer: pcSigner,
88
- policy: pc.policy,
89
- mandate: pc.mandate,
90
- ledger: pc.ledger,
91
- ttlMs: pc.ttlMs,
92
- now: options.now?.(),
93
- // Ledger hygiene: never record spend for a payment the legacy gate
94
- // already denied — the hook aborts it regardless of this decision,
95
- // so recording would pollute cumulative/monthly caps.
96
- recordSpend: approval.approved,
97
- intelligence: () => ({
98
- // NOT reputationScored — that flag is true for any scored Solana path,
99
- // including a wallet we have never observed, which would mark every
100
- // recipient known:true and disable unknownCounterparty entirely.
101
- // Same shared mapping as the standalone intelligence provider.
102
- known: counterpartyKnownFromApproval(approval),
103
- washFlagged: approval.washFlagged ?? undefined,
104
- decision: approval.verdict === "allow" ||
105
- approval.verdict === "warn" ||
106
- approval.verdict === "block"
107
- ? approval.verdict
108
- : undefined,
109
- trustScore: approval.score ?? undefined,
110
- }),
111
- });
112
- }
113
- try {
114
- options?.onDecision?.({
115
- approved: approval.approved,
116
- reason: approval.reason,
117
- verdict: String(approval.verdict),
118
- payTo,
119
- network: approval.network ?? network,
120
- amountMicro,
121
- reputationScored: approval.reputationScored,
122
- policyAction: approval.policyAction,
123
- intent,
124
- decision,
125
- });
126
- }
127
- catch {
128
- // never break payment path on telemetry
129
- }
130
- // Payment Control can only TIGHTEN: abort if the legacy gate denied OR the
131
- // signed decision blocks. Never loosen a legacy denial.
132
- const pcBlocks = decision?.decision === "block";
133
- if (!approval.approved || pcBlocks) {
134
- const reason = pcBlocks && approval.approved
135
- ? `[twzrd] payment_control_block:${decision?.reasonCodes.join(",")} payTo=${payTo ?? "unknown"}`
136
- : `[twzrd] ${approval.reason} payTo=${payTo ?? "unknown"} network=${network ?? "unknown"}`;
137
- return { abort: true, reason };
138
- }
139
- // void / undefined → proceed to payment payload creation (same selectedRequirements)
140
- });
153
+ // Resolve Payment Control signer once at install (fail fast). Body is ONLY
154
+ // the shared evaluator never inline a second preflight/PC path here.
155
+ const pcSigner = resolvePaymentControlSigner(options?.paymentControl);
156
+ client.onBeforePaymentCreation((context) => evaluateBeforePaymentCreation(pickReq(context), options, pcSigner));
141
157
  return client;
142
158
  }
143
159
  /**
144
160
  * Standalone handler for runtimes that expose an equivalent hook API
145
161
  * (Python on_before_payment_creation, Go OnBeforePaymentCreation).
146
- * Returns abort result without requiring a client instance.
162
+ *
163
+ * Full parity with `installTwzrdX402ClientHook`: same shared evaluator
164
+ * (legacy preflight + optional Payment Control + onDecision). Prefer the
165
+ * install helper when you have an x402Client instance; use this when the host
166
+ * only provides the selected requirements object.
147
167
  */
148
168
  export async function twzrdBeforePaymentCreation(selectedRequirements, options) {
149
- const cfg = resolveConfig(options);
150
- const payTo = selectedRequirements.payTo ?? selectedRequirements.pay_to;
151
- const amountMicro = selectedRequirements.amount ?? selectedRequirements.maxAmountRequired;
152
- const priceUsdc = priceUsdcFromAmountMicro(amountMicro);
153
- const approval = await twzrdApprovePayment({
154
- resourceUrl: selectedRequirements.resource,
155
- payTo,
156
- priceUsdc,
157
- agentIntent: "x402_onBeforePaymentCreation",
158
- chain: selectedRequirements.network,
159
- }, cfg);
160
- if (!approval.approved) {
161
- return {
162
- abort: true,
163
- reason: `[twzrd] ${approval.reason} payTo=${payTo ?? "unknown"}`,
164
- };
165
- }
166
- return undefined;
169
+ return evaluateBeforePaymentCreation(selectedRequirements, options);
167
170
  }
168
171
  //# 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,7 +1,7 @@
1
1
  {
2
2
  "name": "twzrd-x402-gate",
3
- "version": "0.8.1",
4
- "description": "Buyer-side x402 trust gate. Run a free TWZRD preflight (ReadinessCard) before signing USDC to any x402 merchant, and autonomously escalate a `warn` to a $0.001 paid trust check that re-decides — blocking the spend on bad paid intel, no human in the loop. Seller-side: screen payers before settling with createTwzrdSettleGuard (one-line x402ResourceServer.onBeforeSettle). Default refuse when free merchant_card.wash_flagged (opt out TWZRD_REFUSE_WASH_FLAGGED=0). A 402 with no extractable payTo fails closed (twzrd_unidentifiable_payment_recipient) instead of falling through to the generic unknown-seller warn. Wraps fetch (HTTP 402) and the @x402/mcp onPaymentRequested hook — fixed in 0.5.2 to read the real @x402/mcp v2 nested `paymentRequired.accepts` shape (verified against @x402/mcp@2.17.0; previously only the flat legacy shape was read, causing a silent 100%-false-block once wired into a real runtime). installTwzrdAutoGate(payWrap) is the default-on one-liner: guards the raw fetch, then hands it to your x402 client, so the correct guard-before-pay composition can't be built backwards. BREAKING(0.2.0): fail-closed by default — set TWZRD_FAIL_OPEN=true to restore legacy allow-on-outage behavior.",
3
+ "version": "0.8.2",
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 — 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 (abuse/sanctions/bots; not equal to the buyer product — wash resistance is mainly TWZRD scoring). Default refuse when free merchant_card.wash_flagged (opt out TWZRD_REFUSE_WASH_FLAGGED=0). A 402 with no extractable payTo fails closed (twzrd_unidentifiable_payment_recipient). Wraps fetch (HTTP 402) and the @x402/mcp onPaymentRequested hook — fixed in 0.5.2 for real @x402/mcp v2 nested paymentRequired.accepts. installTwzrdAutoGate(payWrap) is the default-on one-liner. BREAKING(0.2.0): fail-closed by default — set TWZRD_FAIL_OPEN=true to restore legacy allow-on-outage behavior.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -16,7 +16,8 @@
16
16
  "./safe-fetch": {
17
17
  "types": "./dist/safe-fetch.d.ts",
18
18
  "import": "./dist/safe-fetch.js"
19
- }
19
+ },
20
+ "./package.json": "./package.json"
20
21
  },
21
22
  "files": [
22
23
  "dist",
@@ -27,13 +28,16 @@
27
28
  "build": "tsc",
28
29
  "prepublishOnly": "tsc",
29
30
  "typecheck": "tsc --noEmit -p tsconfig.check.json",
30
- "test": "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/network.test.ts && tsx test/safe-fetch.test.ts && tsx test/challenge-swap.test.ts && tsx test/x402-client-hook.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",
31
+ "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/network.test.ts && tsx test/safe-fetch.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",
32
+ "pack-smoke": "node scripts/pack-smoke.mjs",
31
33
  "safe-fetch": "tsx src/safe-fetch.ts",
32
34
  "guard-demo": "tsx examples/agentic-market-gate.ts",
33
35
  "autoreceipt-demo": "tsx examples/auto-receipt.ts --dry-run",
34
36
  "sponsored-demo": "tsx examples/sponsored-payer.ts --dry-run",
35
37
  "wash-dogfood": "tsx examples/wash-refuse-dogfood.ts",
36
- "official-dogfood": "tsx examples/official-x402-dogfood.ts"
38
+ "official-dogfood": "tsx examples/official-x402-dogfood.ts",
39
+ "adoption-proof": "tsx src/adoption-proof.ts",
40
+ "demo:buyer-no-spend": "tsx src/adoption-proof.ts -- --integration ops-demo-buyer-no-spend"
37
41
  },
38
42
  "keywords": [
39
43
  "x402",