twzrd-x402-gate 0.8.2 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -9
- package/dist/auto-gate.d.ts +56 -31
- package/dist/auto-gate.d.ts.map +1 -1
- package/dist/auto-gate.js +88 -27
- package/dist/auto-gate.js.map +1 -1
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/payto.d.ts +9 -1
- package/dist/payto.d.ts.map +1 -1
- package/dist/payto.js +38 -1
- package/dist/payto.js.map +1 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +12 -4
- package/dist/policy.js.map +1 -1
- package/dist/types.d.ts +8 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ transfer on-chain. Wash/sybil edges are primarily discounted in TWZRD scoring, n
|
|
|
23
23
|
revenue refusal.
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
npm install twzrd-x402-gate@0.8.
|
|
26
|
+
npm install twzrd-x402-gate@0.8.3
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
```typescript
|
|
@@ -55,6 +55,10 @@ Offline demo: `npx tsx examples/seller-settle-guard.ts`
|
|
|
55
55
|
Fixture-backed SVM extract tests live in `test/seller-hook.test.ts` +
|
|
56
56
|
`test/fixtures/exact-svm-transfer-checked.ts`.
|
|
57
57
|
|
|
58
|
+
**PayAI agentic-payments** (the active PayAI SDK, not the dormant x402-solana):
|
|
59
|
+
`npx tsx examples/payai-agentic-onPaymentVerified.ts` — wire `onPaymentVerified`
|
|
60
|
+
→ `toPayaiVerifyResult` to screen payers before serving. Fail-open by default.
|
|
61
|
+
|
|
58
62
|
|
|
59
63
|
## Demonstrable refuse mechanism (free, fail-open, reproducible)
|
|
60
64
|
|
|
@@ -63,7 +67,7 @@ Fixture-backed SVM extract tests live in `test/seller-hook.test.ts` +
|
|
|
63
67
|
Install the published gate and run against wash fixtures:
|
|
64
68
|
|
|
65
69
|
```bash
|
|
66
|
-
npm install twzrd-x402-gate@0.8.
|
|
70
|
+
npm install twzrd-x402-gate@0.8.3
|
|
67
71
|
# from package root after install, or from a checkout:
|
|
68
72
|
npm run wash-dogfood
|
|
69
73
|
```
|
|
@@ -83,10 +87,44 @@ Gate dogfood: `approved=false` `reason=twzrd_decision_block`, **USDC spent = 0**
|
|
|
83
87
|
|
|
84
88
|
**Accurate paste line:**
|
|
85
89
|
|
|
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.
|
|
90
|
+
> 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.3 && npm run wash-dogfood` or gist above.
|
|
87
91
|
|
|
88
92
|
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.
|
|
89
93
|
|
|
94
|
+
### Foreign-wallet block proof (official @x402 stack, fresh key, zero history)
|
|
95
|
+
|
|
96
|
+
**Verified 2026-07-23:** the same pre-sign block with a **brand-new wallet that has
|
|
97
|
+
zero TWZRD/corpus history** — proving the mechanism is wallet-independent, not a
|
|
98
|
+
whitelisted internal path.
|
|
99
|
+
|
|
100
|
+
- Wallet: `3GMuabSAATKEXTchSpyP1y5raBS7y6Kx8GShdAbiDLce` (generated fresh; corpus
|
|
101
|
+
pre-check: `intel_score: 0`, `paid_calls: 0`, facilitator footprint `found: false`)
|
|
102
|
+
- Stack: official `@x402/core` client + `@x402/fetch` + `@x402/svm` `ExactSvmScheme`,
|
|
103
|
+
TWZRD via `installTwzrdX402ClientHook` at `onBeforePaymentCreation`
|
|
104
|
+
- Result: `verdict: green_block` · `reason: twzrd_can_spend_false` ·
|
|
105
|
+
`sign_after_abort: false` · `decision_count: 1` · `usdc_spent: 0` — payload
|
|
106
|
+
creation aborted on a live mainnet 402 (`payTo GFpLvo…`, $0.001) before any signing
|
|
107
|
+
|
|
108
|
+
Repro with your own fresh key (no SOL/USDC needed — the block path never funds):
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
node --input-type=module -e "
|
|
112
|
+
import { randomBytes } from 'node:crypto';
|
|
113
|
+
import { writeFileSync } from 'node:fs';
|
|
114
|
+
import { createKeyPairSignerFromPrivateKeyBytes } from '@solana/kit';
|
|
115
|
+
import { base58 } from '@scure/base';
|
|
116
|
+
const seed = randomBytes(32);
|
|
117
|
+
const s = await createKeyPairSignerFromPrivateKeyBytes(seed);
|
|
118
|
+
writeFileSync('fresh-wallet.json', JSON.stringify({ privateKey: base58.encode(seed), address: s.address }), { mode: 0o600 });
|
|
119
|
+
console.log(s.address);
|
|
120
|
+
"
|
|
121
|
+
SVM_KEYPAIR_PATH=./fresh-wallet.json npm run official-dogfood -- --block
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Honest scope: run by the TWZRD team on TWZRD infra, so it is wallet-independence
|
|
125
|
+
proof, **not** an external adoption datapoint — that requires a non-internal
|
|
126
|
+
operator running this same command with their own attribution flags.
|
|
127
|
+
|
|
90
128
|
|
|
91
129
|
## Canonical integration (official x402 client)
|
|
92
130
|
|
|
@@ -134,7 +172,7 @@ import { installTwzrdAutoGate } from "twzrd-x402-gate";
|
|
|
134
172
|
import { wrapFetchWithPayment } from "@x402/fetch"; // or @x402/svm helper
|
|
135
173
|
|
|
136
174
|
// Guard RAW fetch, then hand to a client that still surfaces 402 to the guard layer
|
|
137
|
-
// — OR
|
|
175
|
+
// — OR installTwzrdAutoGate(x402Client) (canonical) / installTwzrdX402ClientHook alias.
|
|
138
176
|
const payingFetch = installTwzrdAutoGate((guarded) =>
|
|
139
177
|
wrapFetchWithPayment(guarded, client),
|
|
140
178
|
);
|
|
@@ -174,10 +212,10 @@ Dogfood (one public live proof path):
|
|
|
174
212
|
## Install
|
|
175
213
|
|
|
176
214
|
```bash
|
|
177
|
-
npm install twzrd-x402-gate@0.8.
|
|
215
|
+
npm install twzrd-x402-gate@0.8.3
|
|
178
216
|
```
|
|
179
217
|
|
|
180
|
-
Current npm truth: `0.8.
|
|
218
|
+
Current npm truth: `0.8.3` (buyer gate + optional seller settle guard + payer-extract hardening).
|
|
181
219
|
Check `npm view twzrd-x402-gate version` if in doubt (do not pin stale **0.5.4** / **0.7.1**).
|
|
182
220
|
|
|
183
221
|
Optional settle guard (resource-server **payer** policy): see **Seller settle guard
|
|
@@ -243,7 +281,7 @@ assertIntentApproved(intentBeingSigned, token, {
|
|
|
243
281
|
|
|
244
282
|
### On the client hook (opt-in)
|
|
245
283
|
|
|
246
|
-
`installTwzrdX402ClientHook` wires the runtime into the official
|
|
284
|
+
`installTwzrdAutoGate(client)` (or alias `installTwzrdX402ClientHook`) wires the runtime into the official
|
|
247
285
|
`onBeforePaymentCreation` seat. Pass `paymentControl` to build the canonical
|
|
248
286
|
intent, run the policy runtime (with the hook's own preflight fed in as remote
|
|
249
287
|
intelligence), and surface a signed, intent-bound `PaymentDecision`:
|
|
@@ -358,6 +396,18 @@ Library: `import { safeFetch } from "twzrd-x402-gate/safe-fetch"`.
|
|
|
358
396
|
|
|
359
397
|
## Quickstart: `installTwzrdAutoGate` (default-on)
|
|
360
398
|
|
|
399
|
+
Canonical entry point (design: `docs/strategy/install-autogate-design.md`). One name, three adapters:
|
|
400
|
+
|
|
401
|
+
| Call | Adapter |
|
|
402
|
+
|------|---------|
|
|
403
|
+
| `installTwzrdAutoGate(payWrap, opts?)` | Fetch: guard raw fetch → pay client |
|
|
404
|
+
| `installTwzrdAutoGate(x402Client, opts?)` | Official x402 `onBeforePaymentCreation` |
|
|
405
|
+
| `installTwzrdAutoGate("mpp", opts)` | MPP `onChallenge` (returns handler) |
|
|
406
|
+
|
|
407
|
+
Aliases: `installTwzrdX402ClientHook`, `createTwzrdMppOnChallenge` remain; docs prefer AutoGate.
|
|
408
|
+
Kill switch: `TWZRD_GATE_ENABLED=false` or `TWZRD_AUTO_GATE=0`. Uninstall x402 installs with `uninstallTwzrdAutoGate(client)`.
|
|
409
|
+
|
|
410
|
+
|
|
361
411
|
`installTwzrdAutoGate` is the one-liner form of "guard the raw fetch, then hand it to your
|
|
362
412
|
x402 client." It takes a `payWrap` function — whatever composes your paying client on top of
|
|
363
413
|
a fetch — and returns a fetch that's already gated: a blocked seller throws before your client
|
|
@@ -568,6 +618,33 @@ const result = await evaluate_x402_resource(url, requirements, {
|
|
|
568
618
|
// result.receiptFeeCaptured — true when fee landed
|
|
569
619
|
```
|
|
570
620
|
|
|
621
|
+
## Fee-payer preference (multi-facilitator `accepts[]`)
|
|
622
|
+
|
|
623
|
+
When a seller lists more than one facilitator in its 402 `accepts[]` (e.g. Dexter
|
|
624
|
+
*and* TWZRD), you can tell the gate which fee payer to settle through. It selects
|
|
625
|
+
the matching entry the seller **already offers** — it never adds, rewrites, or
|
|
626
|
+
forces an entry onto the seller's 402, and falls back to the normal
|
|
627
|
+
Solana-mainnet preference when nothing matches.
|
|
628
|
+
|
|
629
|
+
Opt-in, off by default. Set once via env:
|
|
630
|
+
|
|
631
|
+
```bash
|
|
632
|
+
# prefer TWZRD's facilitator when a seller multi-lists (alias resolves to its feePayer)
|
|
633
|
+
export TWZRD_PREFER_FEE_PAYER=twzrd
|
|
634
|
+
# or any explicit base58 fee payer you want to route to
|
|
635
|
+
export TWZRD_PREFER_FEE_PAYER=4LkEFjJdXARkKx8FBx4LBFa2SvJNmjQpgGDLoJcypZUE
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
or programmatically:
|
|
639
|
+
|
|
640
|
+
```typescript
|
|
641
|
+
import { pickRequirements, TWZRD_FEE_PAYER } from "twzrd-x402-gate";
|
|
642
|
+
|
|
643
|
+
const chosen = pickRequirements(body.accepts, { preferFeePayer: TWZRD_FEE_PAYER });
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
With no preference set, selection is unchanged (first Solana-mainnet entry).
|
|
647
|
+
|
|
571
648
|
## Lower-level APIs
|
|
572
649
|
|
|
573
650
|
### Direct approval call
|
|
@@ -701,8 +778,10 @@ If you're composing `withTwzrdGuard` manually instead, pass the raw (non-paying)
|
|
|
701
778
|
|
|
702
779
|
`GET /v1/intel/trust/{wallet}` is the **paid** ($0.05 USDC) deep-intel surface — not a gate.
|
|
703
780
|
`POST /v1/intel/preflight` is the **free** `ReadinessCard` for the pre-spend decision.
|
|
704
|
-
|
|
705
|
-
|
|
781
|
+
The gate path only ever calls free endpoints — the preflight plus, by default
|
|
782
|
+
(`refuseWashFlagged: true`), the free merchant_card wash check. Paid intel
|
|
783
|
+
(`quickCheck`, `autoReceipt`) is opt-in and never runs implicitly; you decide
|
|
784
|
+
whether to proceed before any USDC leaves your wallet.
|
|
706
785
|
|
|
707
786
|
## License
|
|
708
787
|
|
package/dist/auto-gate.d.ts
CHANGED
|
@@ -1,48 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* installTwzrdAutoGate — canonical default trust checkpoint entry point.
|
|
3
|
+
*
|
|
4
|
+
* Design: docs/strategy/install-autogate-design.md (#1586).
|
|
5
|
+
*
|
|
6
|
+
* One name across three adapters:
|
|
7
|
+
* 1. Fetch / payWrap — guard raw fetch, then hand to x402 payer
|
|
8
|
+
* 2. x402 client — onBeforePaymentCreation (official Path E)
|
|
9
|
+
* 3. MPP — onChallenge via createTwzrdMppOnChallenge
|
|
10
|
+
*
|
|
11
|
+
* Default ON. Kill switch (any):
|
|
12
|
+
* TWZRD_AUTO_GATE=0|false
|
|
13
|
+
* TWZRD_GATE_ENABLED=0|false
|
|
14
|
+
* options.disabled: true
|
|
15
|
+
*/
|
|
1
16
|
import { type TwzrdGuardOptions } from "./with-guard.js";
|
|
17
|
+
import { type InstallX402ClientHookOptions, type X402ClientLike } from "./x402-client-hook.js";
|
|
18
|
+
import { type MppOnChallengeHelpers, type MppOnChallengeOptions, type MppChallenge } from "./mpp-hook.js";
|
|
2
19
|
/**
|
|
3
20
|
* Takes a guarded (pre-pay-checked) fetch and returns the fetch your agent actually
|
|
4
|
-
* calls — i.e. your x402 client composed on top of the guard
|
|
5
|
-
* @x402/svm, PayAI, etc.).
|
|
21
|
+
* calls — i.e. your x402 client composed on top of the guard.
|
|
6
22
|
*/
|
|
7
23
|
export type PayWrap = (guardedFetch: typeof fetch) => typeof fetch;
|
|
8
|
-
export type
|
|
24
|
+
export type TwzrdAutoGateCommonOptions = {
|
|
9
25
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* in README: proxied clients like AgentCash/.fetch resolve 402 internally and
|
|
13
|
-
* return 200, so the guard would never see the block condition).
|
|
14
|
-
* Default: globalThis.fetch.
|
|
26
|
+
* Force-disable the gate. Mirrors TWZRD_AUTO_GATE=0|false and
|
|
27
|
+
* TWZRD_GATE_ENABLED=0|false. Prefer env for deploy kill switch; use this for tests.
|
|
15
28
|
*/
|
|
16
|
-
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type InstallAutoGateFetchOptions = TwzrdGuardOptions & TwzrdAutoGateCommonOptions & {
|
|
17
32
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* use this for tests.
|
|
33
|
+
* RAW (non-paying) fetch that still surfaces HTTP 402.
|
|
34
|
+
* Default: globalThis.fetch.
|
|
21
35
|
*/
|
|
22
|
-
|
|
36
|
+
rawFetch?: typeof fetch;
|
|
23
37
|
};
|
|
38
|
+
/** @deprecated Prefer InstallAutoGateFetchOptions — same type (fetch adapter). */
|
|
39
|
+
export type InstallAutoGateOptions = InstallAutoGateFetchOptions;
|
|
40
|
+
export type InstallAutoGateX402Options = InstallX402ClientHookOptions & TwzrdAutoGateCommonOptions;
|
|
41
|
+
export type InstallAutoGateMppOptions = MppOnChallengeOptions & TwzrdAutoGateCommonOptions;
|
|
42
|
+
/** True when env or options ask to skip the gate entirely. */
|
|
43
|
+
export declare function isTwzrdAutoGateDisabled(options?: {
|
|
44
|
+
disabled?: boolean;
|
|
45
|
+
}): boolean;
|
|
24
46
|
/**
|
|
25
|
-
*
|
|
26
|
-
* THEN hands the guarded fetch to your payment wrapper. This is the one-liner form of
|
|
27
|
-
* the two-step pattern documented in the README:
|
|
28
|
-
*
|
|
29
|
-
* const raw = globalThis.fetch;
|
|
30
|
-
* const gated = withTwzrdGuard(raw);
|
|
31
|
-
* const paying = payWrap(gated);
|
|
32
|
-
*
|
|
33
|
-
* Composing it this way by construction rules out the common mis-wiring of guarding
|
|
34
|
-
* an already-paying fetch (which returns 200 and never gives the guard a 402 to act on).
|
|
47
|
+
* Fetch adapter — guard RAW fetch, then hand to payWrap.
|
|
35
48
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
49
|
+
* @example
|
|
50
|
+
* const payingFetch = installTwzrdAutoGate((g) => wrapFetchWithPayment(g, wallet));
|
|
51
|
+
*/
|
|
52
|
+
export declare function installTwzrdAutoGate(payWrap: PayWrap, options?: InstallAutoGateFetchOptions): typeof fetch;
|
|
53
|
+
/**
|
|
54
|
+
* x402 client adapter — install at onBeforePaymentCreation (before sign).
|
|
39
55
|
*
|
|
40
56
|
* @example
|
|
41
|
-
*
|
|
42
|
-
|
|
57
|
+
* installTwzrdAutoGate(client, { refuseWashFlagged: true });
|
|
58
|
+
*/
|
|
59
|
+
export declare function installTwzrdAutoGate(client: X402ClientLike, options?: InstallAutoGateX402Options): X402ClientLike;
|
|
60
|
+
/**
|
|
61
|
+
* MPP adapter — returns onChallenge for Mppx.create({ onChallenge }).
|
|
43
62
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
63
|
+
* @example
|
|
64
|
+
* onChallenge: installTwzrdAutoGate("mpp", { signer, policy: { maxAmountUsd: "1.00" } })
|
|
65
|
+
*/
|
|
66
|
+
export declare function installTwzrdAutoGate(adapter: "mpp", options: InstallAutoGateMppOptions): (challenge: MppChallenge, helpers: MppOnChallengeHelpers) => Promise<string | undefined>;
|
|
67
|
+
/**
|
|
68
|
+
* Disable a prior installTwzrdAutoGate on an x402 client (soft uninstall).
|
|
69
|
+
* Fetch compositions cannot be uninstalled — rebuild with disabled:true instead.
|
|
70
|
+
* Process-wide kill: TWZRD_GATE_ENABLED=false or TWZRD_AUTO_GATE=0.
|
|
46
71
|
*/
|
|
47
|
-
export declare function
|
|
72
|
+
export declare function uninstallTwzrdAutoGate(client: X402ClientLike): void;
|
|
48
73
|
//# sourceMappingURL=auto-gate.d.ts.map
|
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,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-gate.d.ts","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC;AAEnE,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GACzD,0BAA0B,GAAG;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB,CAAC;AAEJ,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAEjE,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GACnE,0BAA0B,CAAC;AAE7B,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,GAC3D,0BAA0B,CAAC;AAM7B,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAOjF;AAcD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,KAAK,CAAC;AAEhB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,0BAA0B,GACnC,cAAc,CAAC;AAElB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,EACd,OAAO,EAAE,yBAAyB,GACjC,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAiE5F;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CASnE"}
|
package/dist/auto-gate.js
CHANGED
|
@@ -1,34 +1,95 @@
|
|
|
1
|
-
import { withTwzrdGuard } from "./with-guard.js";
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
* THEN hands the guarded fetch to your payment wrapper. This is the one-liner form of
|
|
5
|
-
* the two-step pattern documented in the README:
|
|
6
|
-
*
|
|
7
|
-
* const raw = globalThis.fetch;
|
|
8
|
-
* const gated = withTwzrdGuard(raw);
|
|
9
|
-
* const paying = payWrap(gated);
|
|
10
|
-
*
|
|
11
|
-
* Composing it this way by construction rules out the common mis-wiring of guarding
|
|
12
|
-
* an already-paying fetch (which returns 200 and never gives the guard a 402 to act on).
|
|
2
|
+
* installTwzrdAutoGate — canonical default trust checkpoint entry point.
|
|
13
3
|
*
|
|
14
|
-
*
|
|
15
|
-
* TWZRD_AUTO_GATE=0 (env) or { disabled: true } (per-call), e.g. for a local dev harness
|
|
16
|
-
* that intentionally wants the unguarded fetch.
|
|
4
|
+
* Design: docs/strategy/install-autogate-design.md (#1586).
|
|
17
5
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
6
|
+
* One name across three adapters:
|
|
7
|
+
* 1. Fetch / payWrap — guard raw fetch, then hand to x402 payer
|
|
8
|
+
* 2. x402 client — onBeforePaymentCreation (official Path E)
|
|
9
|
+
* 3. MPP — onChallenge via createTwzrdMppOnChallenge
|
|
21
10
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
11
|
+
* Default ON. Kill switch (any):
|
|
12
|
+
* TWZRD_AUTO_GATE=0|false
|
|
13
|
+
* TWZRD_GATE_ENABLED=0|false
|
|
14
|
+
* options.disabled: true
|
|
15
|
+
*/
|
|
16
|
+
import { withTwzrdGuard } from "./with-guard.js";
|
|
17
|
+
import { installTwzrdX402ClientHook, } from "./x402-client-hook.js";
|
|
18
|
+
import { createTwzrdMppOnChallenge, } from "./mpp-hook.js";
|
|
19
|
+
const clientInstalls = new WeakMap();
|
|
20
|
+
/** True when env or options ask to skip the gate entirely. */
|
|
21
|
+
export function isTwzrdAutoGateDisabled(options) {
|
|
22
|
+
if (options?.disabled === true)
|
|
23
|
+
return true;
|
|
24
|
+
const auto = process.env.TWZRD_AUTO_GATE;
|
|
25
|
+
if (auto === "0" || auto === "false")
|
|
26
|
+
return true;
|
|
27
|
+
const gate = process.env.TWZRD_GATE_ENABLED;
|
|
28
|
+
if (gate === "0" || gate === "false")
|
|
29
|
+
return true;
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
function isPayWrap(x) {
|
|
33
|
+
return typeof x === "function";
|
|
34
|
+
}
|
|
35
|
+
function isX402ClientLike(x) {
|
|
36
|
+
return (!!x &&
|
|
37
|
+
typeof x === "object" &&
|
|
38
|
+
typeof x.onBeforePaymentCreation === "function");
|
|
39
|
+
}
|
|
40
|
+
export function installTwzrdAutoGate(target, options) {
|
|
41
|
+
// ── MPP ──────────────────────────────────────────────────────────────
|
|
42
|
+
if (target === "mpp") {
|
|
43
|
+
const mppOpts = options;
|
|
44
|
+
if (isTwzrdAutoGateDisabled(mppOpts)) {
|
|
45
|
+
return async (_challenge, helpers) => helpers.createCredential();
|
|
46
|
+
}
|
|
47
|
+
return createTwzrdMppOnChallenge(mppOpts);
|
|
48
|
+
}
|
|
49
|
+
// ── x402 client ──────────────────────────────────────────────────────
|
|
50
|
+
if (isX402ClientLike(target)) {
|
|
51
|
+
const x402Opts = options;
|
|
52
|
+
if (isTwzrdAutoGateDisabled(x402Opts)) {
|
|
53
|
+
return target;
|
|
54
|
+
}
|
|
55
|
+
if (clientInstalls.has(target)) {
|
|
56
|
+
console.warn("[twzrd-x402-gate] installTwzrdAutoGate: client already gated; dual install may double-evaluate. Call uninstallTwzrdAutoGate first.");
|
|
57
|
+
}
|
|
58
|
+
const state = { disabled: false };
|
|
59
|
+
clientInstalls.set(target, state);
|
|
60
|
+
// Wrap the registrar so every installed before-payment hook honors uninstall + env kill.
|
|
61
|
+
const originalRegister = target.onBeforePaymentCreation.bind(target);
|
|
62
|
+
target.onBeforePaymentCreation = ((hook) => originalRegister(async (context) => {
|
|
63
|
+
if (state.disabled || isTwzrdAutoGateDisabled()) {
|
|
64
|
+
return undefined; // proceed unguarded
|
|
65
|
+
}
|
|
66
|
+
return hook(context);
|
|
67
|
+
}));
|
|
68
|
+
installTwzrdX402ClientHook(target, x402Opts);
|
|
69
|
+
return target;
|
|
70
|
+
}
|
|
71
|
+
// ── Fetch / payWrap ──────────────────────────────────────────────────
|
|
72
|
+
if (isPayWrap(target)) {
|
|
73
|
+
const fetchOpts = options;
|
|
74
|
+
const raw = fetchOpts?.rawFetch ?? globalThis.fetch;
|
|
75
|
+
if (isTwzrdAutoGateDisabled(fetchOpts)) {
|
|
76
|
+
return target(raw);
|
|
77
|
+
}
|
|
78
|
+
return target(withTwzrdGuard(raw, fetchOpts));
|
|
79
|
+
}
|
|
80
|
+
throw new TypeError('[twzrd-x402-gate] installTwzrdAutoGate: expected a PayWrap function, an x402 client with onBeforePaymentCreation, or the string "mpp"');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Disable a prior installTwzrdAutoGate on an x402 client (soft uninstall).
|
|
84
|
+
* Fetch compositions cannot be uninstalled — rebuild with disabled:true instead.
|
|
85
|
+
* Process-wide kill: TWZRD_GATE_ENABLED=false or TWZRD_AUTO_GATE=0.
|
|
24
86
|
*/
|
|
25
|
-
export function
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return payWrap(guarded);
|
|
87
|
+
export function uninstallTwzrdAutoGate(client) {
|
|
88
|
+
const state = clientInstalls.get(client);
|
|
89
|
+
if (state) {
|
|
90
|
+
state.disabled = true;
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
console.warn("[twzrd-x402-gate] uninstallTwzrdAutoGate: no install state for this client (noop).");
|
|
33
94
|
}
|
|
34
95
|
//# sourceMappingURL=auto-gate.js.map
|
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,OAAO,EAAE,cAAc,EAA0B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-gate.js","sourceRoot":"","sources":["../src/auto-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -52,9 +52,9 @@ export function resolveConfig(overrides) {
|
|
|
52
52
|
if (typeof fetchFn !== "function") {
|
|
53
53
|
throw new Error("[twzrd-x402-gate] fetch is not available; pass config.fetch");
|
|
54
54
|
}
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
55
|
+
// Run attribution (integration + runId). When set, also narrows X-Twzrd-Caller.
|
|
56
|
+
// Seat identity (X-Twzrd-Caller / X-TWZRD-Client) is always stamped in
|
|
57
|
+
// twzrdPreflight even without this pair — see policy.ts fork-1 seat metric.
|
|
58
58
|
let attribution;
|
|
59
59
|
const attrIntegration = overrides?.attribution?.integration ?? process.env.TWZRD_ATTRIBUTION_INTEGRATION;
|
|
60
60
|
const attrRunId = overrides?.attribution?.runId ?? process.env.TWZRD_ATTRIBUTION_RUN_ID;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAuBA,SAAS,mBAAmB,CAAC,GAAuB;IAClD,MAAM,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC;IACtC,OAAO,IAAI,GAAG,CACZ,MAAM;SACH,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAA2B;IACvD,MAAM,SAAS,GAAG,CAChB,SAAS,EAAE,SAAS;QACpB,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAC5B,yBAAyB,CAC1B,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEtB,MAAM,MAAM,GACV,SAAS,EAAE,iBAAiB;QAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,IAAI,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjF,MAAM,cAAc,GAClB,SAAS,EAAE,cAAc,IAAI,IAAI;QAC/B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7E,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAE7D,yEAAyE;IACzE,6EAA6E;IAC7E,MAAM,QAAQ,GACZ,SAAS,EAAE,QAAQ;QACnB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM;YACrC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC,CAAC;IAEzC,4EAA4E;IAC5E,gFAAgF;IAChF,gFAAgF;IAChF,wEAAwE;IACxE,4EAA4E;IAC5E,mEAAmE;IACnE,MAAM,cAAc,GAClB,SAAS,EAAE,cAAc;QACzB,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM;YAC7C,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG,CAAC,CAAC;IAEjD,iFAAiF;IACjF,yEAAyE;IACzE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAC5D,MAAM,iBAAiB,GACrB,SAAS,EAAE,iBAAiB;QAC5B,CAAC,CAAC,aAAa,KAAK,GAAG,IAAI,aAAa,KAAK,OAAO,CAAC,CAAC;IAExD,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,SAAS,EAAE,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7E,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;IACtC,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,EAAE,EAAE,CAAC;QAC7F,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,WAAW,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,6EAA6E;IAC7E,kFAAkF;IAClF,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxF,MAAM,sBAAsB,GAC1B,SAAS,EAAE,sBAAsB;QACjC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IACrD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { CLIENT_VERSION } from "./version.js";
|
|
|
2
2
|
export { createTwzrdGate, defaultGate, type TwzrdGate } from "./gate.js";
|
|
3
3
|
export { resolveConfig, type ResolvedTwzrdGateConfig } from "./config.js";
|
|
4
4
|
export { evaluateReadinessCard, buildPreflightInput, twzrdPreflight, twzrdApprovePayment, type PolicyEvaluateInput, } from "./policy.js";
|
|
5
|
-
export { payToFromRequirements, priceUsdcFromAmountMicro, pickRequirements } from "./payto.js";
|
|
5
|
+
export { payToFromRequirements, priceUsdcFromAmountMicro, pickRequirements, TWZRD_FEE_PAYER } from "./payto.js";
|
|
6
6
|
export { classifyNetwork, decideUnsupportedNetwork, amountBucket, type NetworkClass, type NetworkKind, type UnsupportedNetworkMode, type UnsupportedNetworkDecision, } from "./network.js";
|
|
7
7
|
export type { TwzrdGateDecision } from "./types.js";
|
|
8
8
|
export { fetchMerchantCard, applyWashFlaggedPolicy, type TwzrdMerchantCard, type WashPolicyInput, type WashPolicyResult, } from "./merchant-card.js";
|
|
@@ -10,7 +10,7 @@ export { twzrdOnPaymentRequested } from "./mcp-hook.js";
|
|
|
10
10
|
export { wrapFetchWithTwzrdGate } from "./wrap-fetch.js";
|
|
11
11
|
export { evaluate_x402_resource, type EvaluateX402Options, type EvaluateX402Result, } from "./evaluate.js";
|
|
12
12
|
export { withTwzrdGuard, type TwzrdGuardOptions } from "./with-guard.js";
|
|
13
|
-
export { installTwzrdAutoGate, type PayWrap, type InstallAutoGateOptions, } from "./auto-gate.js";
|
|
13
|
+
export { installTwzrdAutoGate, uninstallTwzrdAutoGate, isTwzrdAutoGateDisabled, type PayWrap, type InstallAutoGateOptions, type InstallAutoGateFetchOptions, type InstallAutoGateX402Options, type InstallAutoGateMppOptions, type TwzrdAutoGateCommonOptions, } from "./auto-gate.js";
|
|
14
14
|
export { safeFetch, runAgentcashFetch, main as safeFetchMain, type SafeFetchOptions, type SafeFetchResult, } from "./safe-fetch.js";
|
|
15
15
|
export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, type X402ClientLike, type X402SelectedRequirements, type BeforePaymentCreationContext, type BeforePaymentCreationResult, type InstallX402ClientHookOptions, type X402PaymentControlOptions, } from "./x402-client-hook.js";
|
|
16
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";
|
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,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,14 +6,14 @@ export { CLIENT_VERSION } from "./version.js";
|
|
|
6
6
|
export { createTwzrdGate, defaultGate } from "./gate.js";
|
|
7
7
|
export { resolveConfig } from "./config.js";
|
|
8
8
|
export { evaluateReadinessCard, buildPreflightInput, twzrdPreflight, twzrdApprovePayment, } from "./policy.js";
|
|
9
|
-
export { payToFromRequirements, priceUsdcFromAmountMicro, pickRequirements } from "./payto.js";
|
|
9
|
+
export { payToFromRequirements, priceUsdcFromAmountMicro, pickRequirements, TWZRD_FEE_PAYER } from "./payto.js";
|
|
10
10
|
export { classifyNetwork, decideUnsupportedNetwork, amountBucket, } from "./network.js";
|
|
11
11
|
export { fetchMerchantCard, applyWashFlaggedPolicy, } from "./merchant-card.js";
|
|
12
12
|
export { twzrdOnPaymentRequested } from "./mcp-hook.js";
|
|
13
13
|
export { wrapFetchWithTwzrdGate } from "./wrap-fetch.js";
|
|
14
14
|
export { evaluate_x402_resource, } from "./evaluate.js";
|
|
15
15
|
export { withTwzrdGuard } from "./with-guard.js";
|
|
16
|
-
export { installTwzrdAutoGate, } from "./auto-gate.js";
|
|
16
|
+
export { installTwzrdAutoGate, uninstallTwzrdAutoGate, isTwzrdAutoGateDisabled, } from "./auto-gate.js";
|
|
17
17
|
export { safeFetch, runAgentcashFetch, main as safeFetchMain, } from "./safe-fetch.js";
|
|
18
18
|
export { installTwzrdX402ClientHook, twzrdBeforePaymentCreation, } from "./x402-client-hook.js";
|
|
19
19
|
export { runGateAdoptionProof, main as adoptionProofMain, ADOPTION_TRANSCRIPT_SCHEMA, ADOPTION_PROOF_SELLER, ADOPTION_PROOF_NETWORK, ADOPTION_PROOF_RESOURCE, } from "./adoption-proof.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,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,qFAAqF;AACrF,uFAAuF;AACvF,qFAAqF;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAChH,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,YAAY,GAKb,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,sBAAsB,GAGvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAA0B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,GAOxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,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"}
|
package/dist/payto.d.ts
CHANGED
|
@@ -4,7 +4,15 @@ import type { X402PaymentRequirements } from "./types.js";
|
|
|
4
4
|
* Prefers the Solana-network entry when multiple networks are listed
|
|
5
5
|
* (e.g. CDP 402 bodies list EVM first, Solana second).
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* TWZRD's own facilitator fee payer (== its GET /supported feePayer). Exported so
|
|
9
|
+
* a caller can pass `preferFeePayer: TWZRD_FEE_PAYER`, or set the env alias
|
|
10
|
+
* `TWZRD_PREFER_FEE_PAYER=twzrd`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TWZRD_FEE_PAYER = "4LkEFjJdXARkKx8FBx4LBFa2SvJNmjQpgGDLoJcypZUE";
|
|
13
|
+
export declare function pickRequirements(accepts?: Array<Record<string, unknown>>, opts?: {
|
|
14
|
+
preferFeePayer?: string;
|
|
15
|
+
}): X402PaymentRequirements;
|
|
8
16
|
export declare function payToFromRequirements(req: X402PaymentRequirements): {
|
|
9
17
|
payTo: string | undefined;
|
|
10
18
|
amountMicro: string | undefined;
|
package/dist/payto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payto.d.ts","sourceRoot":"","sources":["../src/payto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"payto.d.ts","sourceRoot":"","sources":["../src/payto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;GAIG;AACH;;;;GAIG;AACH,eAAO,MAAM,eAAe,iDACoB,CAAC;AAuBjD,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,uBAAuB,CAyBzB;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,uBAAuB,GAAG;IACnE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAIA;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,GAAG,SAAS,CAKpB"}
|
package/dist/payto.js
CHANGED
|
@@ -3,7 +3,32 @@
|
|
|
3
3
|
* Prefers the Solana-network entry when multiple networks are listed
|
|
4
4
|
* (e.g. CDP 402 bodies list EVM first, Solana second).
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* TWZRD's own facilitator fee payer (== its GET /supported feePayer). Exported so
|
|
8
|
+
* a caller can pass `preferFeePayer: TWZRD_FEE_PAYER`, or set the env alias
|
|
9
|
+
* `TWZRD_PREFER_FEE_PAYER=twzrd`.
|
|
10
|
+
*/
|
|
11
|
+
export const TWZRD_FEE_PAYER = "4LkEFjJdXARkKx8FBx4LBFa2SvJNmjQpgGDLoJcypZUE";
|
|
12
|
+
function feePayerOf(e) {
|
|
13
|
+
const extra = e.extra;
|
|
14
|
+
const fp = extra?.feePayer ?? e.feePayer;
|
|
15
|
+
return typeof fp === "string" ? fp : undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the preferred fee payer: explicit option first, then the
|
|
19
|
+
* `TWZRD_PREFER_FEE_PAYER` env var (the literal alias `twzrd` maps to
|
|
20
|
+
* `TWZRD_FEE_PAYER`), else none.
|
|
21
|
+
*/
|
|
22
|
+
function resolvePreferFeePayer(explicit) {
|
|
23
|
+
const raw = explicit ??
|
|
24
|
+
(typeof process !== "undefined"
|
|
25
|
+
? process.env?.TWZRD_PREFER_FEE_PAYER
|
|
26
|
+
: undefined);
|
|
27
|
+
if (!raw)
|
|
28
|
+
return undefined;
|
|
29
|
+
return raw.toLowerCase() === "twzrd" ? TWZRD_FEE_PAYER : raw;
|
|
30
|
+
}
|
|
31
|
+
export function pickRequirements(accepts, opts) {
|
|
7
32
|
const list = accepts ?? [];
|
|
8
33
|
const isSolana = (e) => String(e.network ?? "").toLowerCase().includes("solana");
|
|
9
34
|
// Prefer mainnet: bare "solana", "mainnet" substring, or CAIP-2 with mainnet genesis prefix.
|
|
@@ -11,6 +36,18 @@ export function pickRequirements(accepts) {
|
|
|
11
36
|
const n = String(e.network ?? "").toLowerCase();
|
|
12
37
|
return n === "solana" || n.includes("mainnet") || n.includes("5eykt4");
|
|
13
38
|
};
|
|
39
|
+
// Fee-payer preference (W2): when a seller multi-lists facilitators in accepts[]
|
|
40
|
+
// (e.g. Dexter + TWZRD), route settlement to the preferred fee payer by SELECTING
|
|
41
|
+
// the matching entry the seller already offers. This never adds, rewrites, or
|
|
42
|
+
// forces an accepts entry onto the seller's 402 — if no offered entry matches, it
|
|
43
|
+
// falls through to the normal network preference below. Only applies within
|
|
44
|
+
// Solana mainnet, where the preferred fee payer is valid.
|
|
45
|
+
const prefer = resolvePreferFeePayer(opts?.preferFeePayer);
|
|
46
|
+
if (prefer) {
|
|
47
|
+
const preferred = list.find((e) => isSolana(e) && isMainnet(e) && feePayerOf(e) === prefer);
|
|
48
|
+
if (preferred)
|
|
49
|
+
return preferred;
|
|
50
|
+
}
|
|
14
51
|
const solanaMainnet = list.find((e) => isSolana(e) && isMainnet(e));
|
|
15
52
|
const solanaAny = list.find(isSolana);
|
|
16
53
|
return (solanaMainnet ?? solanaAny ?? list[0] ?? {});
|
package/dist/payto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payto.js","sourceRoot":"","sources":["../src/payto.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAwC;
|
|
1
|
+
{"version":3,"file":"payto.js","sourceRoot":"","sources":["../src/payto.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAC1B,8CAA8C,CAAC;AAEjD,SAAS,UAAU,CAAC,CAA0B;IAC5C,MAAM,KAAK,GAAG,CAAC,CAAC,KAA4C,CAAC;IAC7D,MAAM,EAAE,GAAG,KAAK,EAAE,QAAQ,IAAK,CAA6B,CAAC,QAAQ,CAAC;IACtE,OAAO,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,QAAiB;IAC9C,MAAM,GAAG,GACP,QAAQ;QACR,CAAC,OAAO,OAAO,KAAK,WAAW;YAC7B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,sBAAsB;YACrC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjB,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,OAAO,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAwC,EACxC,IAAkC;IAElC,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,CAAC,CAA0B,EAAE,EAAE,CAC9C,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3D,6FAA6F;IAC7F,MAAM,SAAS,GAAG,CAAC,CAA0B,EAAE,EAAE;QAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,iFAAiF;IACjF,kFAAkF;IAClF,8EAA8E;IAC9E,kFAAkF;IAClF,4EAA4E;IAC5E,0DAA0D;IAC1D,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAC/D,CAAC;QACF,IAAI,SAAS;YAAE,OAAO,SAAoC,CAAC;IAC7D,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,aAAa,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAA4B;IAKhE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;IACtC,MAAM,WAAW,GAAG,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,MAAM,CAAC;IACxD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,WAA+B;IAE/B,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,CAAC,GAAG,SAAS,CAAC;AACvB,CAAC"}
|
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAY1E,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAEnB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,kFAAkF;IAClF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,mBAAmB,CAgCrF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CAYrF;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAY1E,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EAEnB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,kFAAkF;IAClF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,mBAAmB,CAgCrF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB,CAYrF;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAoC7B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CAoJ9B"}
|
package/dist/policy.js
CHANGED
|
@@ -51,13 +51,21 @@ export function buildPreflightInput(context) {
|
|
|
51
51
|
}
|
|
52
52
|
export async function twzrdPreflight(input, config) {
|
|
53
53
|
const cfg = config ?? resolveConfig();
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
|
|
54
|
+
// Seat identity is ALWAYS stamped on preflight (fork-1 metric: gate installs
|
|
55
|
+
// that hit intel). Paid /trust and resource fetch never get these headers.
|
|
56
|
+
// Opt-in attribution (integration+runId) adds correlatable run IDs on top.
|
|
57
|
+
const clientTag = `twzrd-x402-gate/${CLIENT_VERSION}`;
|
|
58
|
+
const headers = {
|
|
59
|
+
"content-type": "application/json",
|
|
60
|
+
"X-TWZRD-Client": clientTag,
|
|
61
|
+
// Maps to preflight_requests.caller_id (intel server). Default seat label.
|
|
62
|
+
"X-Twzrd-Caller": clientTag,
|
|
63
|
+
};
|
|
57
64
|
if (cfg.attribution) {
|
|
58
65
|
headers["X-TWZRD-Integration"] = cfg.attribution.integration;
|
|
59
66
|
headers["X-TWZRD-Run-Id"] = cfg.attribution.runId;
|
|
60
|
-
|
|
67
|
+
// Prefer explicit integration as caller when provided (e.g. partner name).
|
|
68
|
+
headers["X-Twzrd-Caller"] = `${cfg.attribution.integration}@${CLIENT_VERSION}`;
|
|
61
69
|
}
|
|
62
70
|
const resp = await cfg.fetch(`${cfg.intelBase}/v1/intel/preflight`, {
|
|
63
71
|
method: "POST",
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAiBtB;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA0B;IAC9D,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;IAEpC,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAyB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,QAAQ,EAAE,EAAE,CAAC;IAC9I,CAAC;IACD,yEAAyE;IACzE,+EAA+E;IAC/E,wEAAwE;IACxE,mFAAmF;IACnF,yDAAyD;IACzD,IAAI,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QACxD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAyB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IACzI,CAAC;IACD,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAC9B,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,QAAyB;YAClC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;YAC/B,IAAI;YACJ,MAAM,EAAE,eAAe,KAAK,UAAU,iBAAiB,EAAE;SAC1D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAkB;QAClE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QAC/B,IAAI;QACJ,MAAM,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA4B;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IACrD,OAAO;QACL,aAAa,EACX,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,IAAI,uBAAuB;QACxE,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,YAAY,EAAE,OAAO,CAAC,WAAW,IAAI,mBAAmB;QACxD,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAA0B,EAC1B,MAAgC;IAEhC,MAAM,GAAG,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;IACtC
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,eAAe,EACf,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAiBtB;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA0B;IAC9D,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;IAEpC,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAyB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,QAAQ,EAAE,EAAE,CAAC;IAC9I,CAAC;IACD,yEAAyE;IACzE,+EAA+E;IAC/E,wEAAwE;IACxE,mFAAmF;IACnF,yDAAyD;IACzD,IAAI,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QACxD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAyB,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IACzI,CAAC;IACD,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAC9B,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,QAAyB;YAClC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;YAC/B,IAAI;YACJ,MAAM,EAAE,eAAe,KAAK,UAAU,iBAAiB,EAAE;SAC1D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAkB;QAClE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QAC/B,IAAI;QACJ,MAAM,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA4B;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IACrD,OAAO;QACL,aAAa,EACX,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,IAAI,uBAAuB;QACxE,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,YAAY,EAAE,OAAO,CAAC,WAAW,IAAI,mBAAmB;QACxD,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAA0B,EAC1B,MAAgC;IAEhC,MAAM,GAAG,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;IACtC,6EAA6E;IAC7E,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,SAAS,GAAG,mBAAmB,cAAc,EAAE,CAAC;IACtD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,gBAAgB,EAAE,SAAS;QAC3B,2EAA2E;QAC3E,gBAAgB,EAAE,SAAS;KAC5B,CAAC;IACF,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,CAAC,qBAAqB,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC;QAC7D,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;QAClD,2EAA2E;QAC3E,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,IAAI,cAAc,EAAE,CAAC;IACjF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,SAAS,qBAAqB,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC5B,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAET,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;IACzC,wFAAwF;IACxF,8EAA8E;IAC9E,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA4B,EAC5B,MAAgC;IAEhC,MAAM,GAAG,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;IAEtC,gFAAgF;IAChF,8EAA8E;IAC9E,+EAA+E;IAC/E,iFAAiF;IACjF,gFAAgF;IAChF,sBAAsB;IACtB,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,wCAAwC;SACjD,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,mFAAmF;IACnF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC/E,qBAAqB,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY;YAC5C,YAAY,EAAE,YAAY,CACxB,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;gBAC7D,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;gBACnD,CAAC,CAAC,SAAS,CACd;YACD,UAAU,EAAE,GAAG,CAAC,sBAAsB;YACtC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,OAAO,EAAE,OAAO,CAAC,WAAW;SAC7B,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;YAC5C,gBAAgB,EAAE,KAAK;YACvB,YAAY,EAAE,SAAS,CAAC,YAAY;SACrC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,qBAAqB,CAAC;YACnC,IAAI;YACJ,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,cAAc,EAAE,GAAG,CAAC,cAAc;SACnC,CAAC,CAAC;QACH,yEAAyE;QACzE,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;YAC3E,KAAK,GAAG,CAAC,YAAY,CAAC;gBACpB,YAAY,EAAE,MAAM;gBACpB,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACpC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC,CAAC,yBAAyB;gBAC3E,SAAS,EAAE,IAAI,CAAC,sBAAsB,IAAI,IAAI;aAC/C,CAAC,CAAC;QACL,CAAC;QAED,iEAAiE;QACjE,wEAAwE;QACxE,IAAI,WAAW,GAAmB,IAAI,CAAC;QACvC,IAAI,UAA+B,CAAC;QACpC,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC/B,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE7B,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;YAC3E,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE;oBAC5C,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,KAAK,EAAE,GAAG,CAAC,KAAK;iBACjB,CAAC,CAAC;gBACH,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACrD,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,sBAAsB,CAAC;gBAClC,QAAQ;gBACR,MAAM;gBACN,WAAW;gBACX,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;gBACxC,WAAW,EAAE,GAAG,CAAC,WAAW;aAC7B,CAAC,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACrB,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,GAAG,OAAO,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO;YACL,GAAG,MAAM;YACT,QAAQ;YACR,MAAM;YACN,OAAO;YACP,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,WAAW;YACX,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;YACtB,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,MAAM,CAAE,GAAa,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,uEAAuE,GAAG,qEAAqE,CAAC,CAAC;YAC9J,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,sBAAsB,GAAG,GAAG;gBACpC,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,gBAAgB,EAAE,IAAI;gBACtB,gBAAgB,EAAE,IAAI;gBACtB,YAAY,EAAE,OAAO;aACtB,CAAC;QACJ,CAAC;QACD,2EAA2E;QAC3E,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;YACtB,YAAY,EAAE,OAAO;SACtB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -80,16 +80,14 @@ export type TwzrdGateConfig = {
|
|
|
80
80
|
*/
|
|
81
81
|
onWarnUpsell?: (ctx: TwzrdUpsellContext) => void | Promise<void>;
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* X-
|
|
87
|
-
*
|
|
88
|
-
* X-TWZRD-
|
|
89
|
-
*
|
|
90
|
-
* caller-supplied and spoofable
|
|
91
|
-
* in the integrator's own transcript AND is observed server-side from
|
|
92
|
-
* non-internal lineage. No PII, secrets, or payload is added.
|
|
83
|
+
* Optional run attribution (integration + runId). Preflight ALWAYS stamps
|
|
84
|
+
* seat identity (fork-1 metric):
|
|
85
|
+
* X-TWZRD-Client: twzrd-x402-gate/<version>
|
|
86
|
+
* X-Twzrd-Caller: twzrd-x402-gate/<version>
|
|
87
|
+
* When this pair is set, also:
|
|
88
|
+
* X-TWZRD-Integration / X-TWZRD-Run-Id
|
|
89
|
+
* X-Twzrd-Caller: <integration>@<version>
|
|
90
|
+
* runId is caller-supplied and spoofable — pair with server-side observation.
|
|
93
91
|
*/
|
|
94
92
|
attribution?: {
|
|
95
93
|
/** Stable integration label, e.g. "payai-x402-solana-pr38". */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,SAAS,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qFAAqF;IACrF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oGAAoG;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,sIAAsI;IACtI,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9C,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.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.
|
|
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
|
|
3
|
+
"version": "0.8.4",
|
|
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. installTwzrdAutoGate is the canonical default-on entry across fetch payWrap, x402 client (onBeforePaymentCreation), and MPP onChallenge. Fail-closed by default — 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",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"build": "tsc",
|
|
29
29
|
"prepublishOnly": "tsc",
|
|
30
30
|
"typecheck": "tsc --noEmit -p tsconfig.check.json",
|
|
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",
|
|
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/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",
|
|
32
32
|
"pack-smoke": "node scripts/pack-smoke.mjs",
|
|
33
33
|
"safe-fetch": "tsx src/safe-fetch.ts",
|
|
34
34
|
"guard-demo": "tsx examples/agentic-market-gate.ts",
|
|
@@ -93,10 +93,10 @@
|
|
|
93
93
|
"@scure/base": "^1.2.0",
|
|
94
94
|
"@solana/kit": "^5.1.0",
|
|
95
95
|
"@types/node": "^20.11.0",
|
|
96
|
-
"@x402/core": "^2.
|
|
97
|
-
"@x402/fetch": "^2.
|
|
98
|
-
"@x402/svm": "^2.
|
|
99
|
-
"tsx": "^4.
|
|
96
|
+
"@x402/core": "^2.19.0",
|
|
97
|
+
"@x402/fetch": "^2.19.0",
|
|
98
|
+
"@x402/svm": "^2.19.0",
|
|
99
|
+
"tsx": "^4.23.1",
|
|
100
100
|
"typescript": "^5.4.0"
|
|
101
101
|
}
|
|
102
102
|
}
|