@bankofai/x402 0.5.9 → 0.6.0-beta.1
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/dist/abi.d.ts +164 -0
- package/dist/abi.d.ts.map +1 -1
- package/dist/abi.js +115 -0
- package/dist/abi.js.map +1 -1
- package/dist/client/x402Client.js +1 -1
- package/dist/client/x402Client.js.map +1 -1
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -1
- package/dist/facilitator/client.d.ts +77 -0
- package/dist/facilitator/client.d.ts.map +1 -0
- package/dist/facilitator/client.js +130 -0
- package/dist/facilitator/client.js.map +1 -0
- package/dist/facilitator/index.d.ts +14 -0
- package/dist/facilitator/index.d.ts.map +1 -0
- package/dist/facilitator/index.js +12 -0
- package/dist/facilitator/index.js.map +1 -0
- package/dist/facilitator/x402Facilitator.d.ts +97 -0
- package/dist/facilitator/x402Facilitator.d.ts.map +1 -0
- package/dist/facilitator/x402Facilitator.js +212 -0
- package/dist/facilitator/x402Facilitator.js.map +1 -0
- package/dist/http/client.d.ts +66 -17
- package/dist/http/client.d.ts.map +1 -1
- package/dist/http/client.js +90 -31
- package/dist/http/client.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/mechanisms/_base/index.d.ts +19 -0
- package/dist/mechanisms/_base/index.d.ts.map +1 -0
- package/dist/mechanisms/_base/index.js +17 -0
- package/dist/mechanisms/_base/index.js.map +1 -0
- package/dist/mechanisms/_exact_base/adapter.d.ts +23 -0
- package/dist/mechanisms/_exact_base/adapter.d.ts.map +1 -0
- package/dist/mechanisms/_exact_base/adapter.js +9 -0
- package/dist/mechanisms/_exact_base/adapter.js.map +1 -0
- package/dist/mechanisms/_exact_base/evmAdapter.d.ts +10 -0
- package/dist/mechanisms/_exact_base/evmAdapter.d.ts.map +1 -0
- package/dist/mechanisms/_exact_base/evmAdapter.js +28 -0
- package/dist/mechanisms/_exact_base/evmAdapter.js.map +1 -0
- package/dist/mechanisms/_exact_base/facilitator.d.ts +70 -0
- package/dist/mechanisms/_exact_base/facilitator.d.ts.map +1 -0
- package/dist/mechanisms/_exact_base/facilitator.js +223 -0
- package/dist/mechanisms/_exact_base/facilitator.js.map +1 -0
- package/dist/mechanisms/_exact_base/index.d.ts +12 -0
- package/dist/mechanisms/_exact_base/index.d.ts.map +1 -0
- package/dist/mechanisms/_exact_base/index.js +10 -0
- package/dist/mechanisms/_exact_base/index.js.map +1 -0
- package/dist/mechanisms/_exact_base/server.d.ts +40 -0
- package/dist/mechanisms/_exact_base/server.d.ts.map +1 -0
- package/dist/mechanisms/_exact_base/server.js +62 -0
- package/dist/mechanisms/_exact_base/server.js.map +1 -0
- package/dist/mechanisms/_exact_base/tronAdapter.d.ts +11 -0
- package/dist/mechanisms/_exact_base/tronAdapter.d.ts.map +1 -0
- package/dist/mechanisms/_exact_base/tronAdapter.js +48 -0
- package/dist/mechanisms/_exact_base/tronAdapter.js.map +1 -0
- package/dist/mechanisms/{nativeExact.d.ts → _exact_base/types.d.ts} +4 -4
- package/dist/mechanisms/_exact_base/types.d.ts.map +1 -0
- package/dist/mechanisms/{nativeExact.js → _exact_base/types.js} +1 -1
- package/dist/mechanisms/_exact_base/types.js.map +1 -0
- package/dist/mechanisms/_exact_permit_base/facilitator.d.ts +116 -0
- package/dist/mechanisms/_exact_permit_base/facilitator.d.ts.map +1 -0
- package/dist/mechanisms/_exact_permit_base/facilitator.js +267 -0
- package/dist/mechanisms/_exact_permit_base/facilitator.js.map +1 -0
- package/dist/mechanisms/_exact_permit_base/index.d.ts +8 -0
- package/dist/mechanisms/_exact_permit_base/index.d.ts.map +1 -0
- package/dist/mechanisms/_exact_permit_base/index.js +7 -0
- package/dist/mechanisms/_exact_permit_base/index.js.map +1 -0
- package/dist/mechanisms/_exact_permit_base/server.d.ts +31 -0
- package/dist/mechanisms/_exact_permit_base/server.d.ts.map +1 -0
- package/dist/mechanisms/_exact_permit_base/server.js +53 -0
- package/dist/mechanisms/_exact_permit_base/server.js.map +1 -0
- package/dist/mechanisms/{nativeExactEvm.d.ts → evm/exact/client.d.ts} +2 -2
- package/dist/mechanisms/evm/exact/client.d.ts.map +1 -0
- package/dist/mechanisms/{nativeExactEvm.js → evm/exact/client.js} +4 -4
- package/dist/mechanisms/evm/exact/client.js.map +1 -0
- package/dist/mechanisms/evm/exact/facilitator.d.ts +19 -0
- package/dist/mechanisms/evm/exact/facilitator.d.ts.map +1 -0
- package/dist/mechanisms/evm/exact/facilitator.js +34 -0
- package/dist/mechanisms/evm/exact/facilitator.js.map +1 -0
- package/dist/mechanisms/evm/exact/index.d.ts +4 -0
- package/dist/mechanisms/evm/exact/index.d.ts.map +1 -0
- package/dist/mechanisms/evm/exact/index.js +4 -0
- package/dist/mechanisms/evm/exact/index.js.map +1 -0
- package/dist/mechanisms/evm/exact/server.d.ts +19 -0
- package/dist/mechanisms/evm/exact/server.d.ts.map +1 -0
- package/dist/mechanisms/evm/exact/server.js +23 -0
- package/dist/mechanisms/evm/exact/server.js.map +1 -0
- package/dist/mechanisms/{exactEvm.d.ts → evm/exact_permit/client.d.ts} +2 -2
- package/dist/mechanisms/evm/exact_permit/client.d.ts.map +1 -0
- package/dist/mechanisms/{exactEvm.js → evm/exact_permit/client.js} +2 -2
- package/dist/mechanisms/evm/exact_permit/client.js.map +1 -0
- package/dist/mechanisms/evm/exact_permit/facilitator.d.ts +22 -0
- package/dist/mechanisms/evm/exact_permit/facilitator.d.ts.map +1 -0
- package/dist/mechanisms/evm/exact_permit/facilitator.js +53 -0
- package/dist/mechanisms/evm/exact_permit/facilitator.js.map +1 -0
- package/dist/mechanisms/evm/exact_permit/index.d.ts +4 -0
- package/dist/mechanisms/evm/exact_permit/index.d.ts.map +1 -0
- package/dist/mechanisms/evm/exact_permit/index.js +4 -0
- package/dist/mechanisms/evm/exact_permit/index.js.map +1 -0
- package/dist/mechanisms/evm/exact_permit/server.d.ts +11 -0
- package/dist/mechanisms/evm/exact_permit/server.d.ts.map +1 -0
- package/dist/mechanisms/evm/exact_permit/server.js +16 -0
- package/dist/mechanisms/evm/exact_permit/server.js.map +1 -0
- package/dist/mechanisms/index.d.ts +27 -7
- package/dist/mechanisms/index.d.ts.map +1 -1
- package/dist/mechanisms/index.js +27 -11
- package/dist/mechanisms/index.js.map +1 -1
- package/dist/mechanisms/{nativeExactTron.d.ts → tron/exact/client.d.ts} +2 -2
- package/dist/mechanisms/tron/exact/client.d.ts.map +1 -0
- package/dist/mechanisms/{nativeExactTron.js → tron/exact/client.js} +4 -4
- package/dist/mechanisms/tron/exact/client.js.map +1 -0
- package/dist/mechanisms/tron/exact/facilitator.d.ts +19 -0
- package/dist/mechanisms/tron/exact/facilitator.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact/facilitator.js +46 -0
- package/dist/mechanisms/tron/exact/facilitator.js.map +1 -0
- package/dist/mechanisms/tron/exact/index.d.ts +4 -0
- package/dist/mechanisms/tron/exact/index.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact/index.js +4 -0
- package/dist/mechanisms/tron/exact/index.js.map +1 -0
- package/dist/mechanisms/tron/exact/server.d.ts +18 -0
- package/dist/mechanisms/tron/exact/server.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact/server.js +22 -0
- package/dist/mechanisms/tron/exact/server.js.map +1 -0
- package/dist/mechanisms/{exactGasfree.d.ts → tron/exact_gasfree/client.d.ts} +3 -3
- package/dist/mechanisms/tron/exact_gasfree/client.d.ts.map +1 -0
- package/dist/mechanisms/{exactGasfree.js → tron/exact_gasfree/client.js} +4 -4
- package/dist/mechanisms/tron/exact_gasfree/client.js.map +1 -0
- package/dist/mechanisms/tron/exact_gasfree/facilitator.d.ts +29 -0
- package/dist/mechanisms/tron/exact_gasfree/facilitator.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact_gasfree/facilitator.js +209 -0
- package/dist/mechanisms/tron/exact_gasfree/facilitator.js.map +1 -0
- package/dist/mechanisms/tron/exact_gasfree/index.d.ts +5 -0
- package/dist/mechanisms/tron/exact_gasfree/index.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact_gasfree/index.js +4 -0
- package/dist/mechanisms/tron/exact_gasfree/index.js.map +1 -0
- package/dist/mechanisms/tron/exact_gasfree/server.d.ts +23 -0
- package/dist/mechanisms/tron/exact_gasfree/server.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact_gasfree/server.js +43 -0
- package/dist/mechanisms/tron/exact_gasfree/server.js.map +1 -0
- package/dist/mechanisms/{exact.d.ts → tron/exact_permit/client.d.ts} +2 -2
- package/dist/mechanisms/tron/exact_permit/client.d.ts.map +1 -0
- package/dist/mechanisms/{exact.js → tron/exact_permit/client.js} +2 -2
- package/dist/mechanisms/tron/exact_permit/client.js.map +1 -0
- package/dist/mechanisms/tron/exact_permit/facilitator.d.ts +25 -0
- package/dist/mechanisms/tron/exact_permit/facilitator.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact_permit/facilitator.js +95 -0
- package/dist/mechanisms/tron/exact_permit/facilitator.js.map +1 -0
- package/dist/mechanisms/tron/exact_permit/index.d.ts +4 -0
- package/dist/mechanisms/tron/exact_permit/index.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact_permit/index.js +4 -0
- package/dist/mechanisms/tron/exact_permit/index.js.map +1 -0
- package/dist/mechanisms/tron/exact_permit/server.d.ts +11 -0
- package/dist/mechanisms/tron/exact_permit/server.d.ts.map +1 -0
- package/dist/mechanisms/tron/exact_permit/server.js +22 -0
- package/dist/mechanisms/tron/exact_permit/server.js.map +1 -0
- package/dist/middleware/core.d.ts +87 -0
- package/dist/middleware/core.d.ts.map +1 -0
- package/dist/middleware/core.js +202 -0
- package/dist/middleware/core.js.map +1 -0
- package/dist/middleware/express.d.ts +40 -0
- package/dist/middleware/express.d.ts.map +1 -0
- package/dist/middleware/express.js +83 -0
- package/dist/middleware/express.js.map +1 -0
- package/dist/middleware/hono.d.ts +43 -0
- package/dist/middleware/hono.d.ts.map +1 -0
- package/dist/middleware/hono.js +72 -0
- package/dist/middleware/hono.js.map +1 -0
- package/dist/middleware/index.d.ts +12 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +11 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/types.d.ts +78 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +12 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/x402Server.d.ts +115 -0
- package/dist/server/x402Server.d.ts.map +1 -0
- package/dist/server/x402Server.js +318 -0
- package/dist/server/x402Server.js.map +1 -0
- package/dist/signers/facilitator/base.d.ts +67 -0
- package/dist/signers/facilitator/base.d.ts.map +1 -0
- package/dist/signers/facilitator/base.js +11 -0
- package/dist/signers/facilitator/base.js.map +1 -0
- package/dist/signers/facilitator/evmSigner.d.ts +28 -0
- package/dist/signers/facilitator/evmSigner.d.ts.map +1 -0
- package/dist/signers/facilitator/evmSigner.js +148 -0
- package/dist/signers/facilitator/evmSigner.js.map +1 -0
- package/dist/signers/facilitator/tronSigner.d.ts +92 -0
- package/dist/signers/facilitator/tronSigner.d.ts.map +1 -0
- package/dist/signers/facilitator/tronSigner.js +287 -0
- package/dist/signers/facilitator/tronSigner.js.map +1 -0
- package/dist/signers/index.d.ts +4 -0
- package/dist/signers/index.d.ts.map +1 -1
- package/dist/signers/index.js +4 -0
- package/dist/signers/index.js.map +1 -1
- package/dist/tokens.d.ts +29 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +44 -0
- package/dist/tokens.js.map +1 -1
- package/dist/utils/encoding.d.ts +7 -0
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +15 -0
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/gasfree.d.ts +6 -0
- package/dist/utils/gasfree.d.ts.map +1 -1
- package/dist/utils/gasfree.js +10 -0
- package/dist/utils/gasfree.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/tx_verification.d.ts +113 -0
- package/dist/utils/tx_verification.d.ts.map +1 -0
- package/dist/utils/tx_verification.js +98 -0
- package/dist/utils/tx_verification.js.map +1 -0
- package/package.json +22 -9
- package/dist/mechanisms/exact.d.ts.map +0 -1
- package/dist/mechanisms/exact.js.map +0 -1
- package/dist/mechanisms/exactEvm.d.ts.map +0 -1
- package/dist/mechanisms/exactEvm.js.map +0 -1
- package/dist/mechanisms/exactGasfree.d.ts.map +0 -1
- package/dist/mechanisms/exactGasfree.js.map +0 -1
- package/dist/mechanisms/nativeExact.d.ts.map +0 -1
- package/dist/mechanisms/nativeExact.js.map +0 -1
- package/dist/mechanisms/nativeExactEvm.d.ts.map +0 -1
- package/dist/mechanisms/nativeExactEvm.js.map +0 -1
- package/dist/mechanisms/nativeExactTron.d.ts.map +0 -1
- package/dist/mechanisms/nativeExactTron.js.map +0 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* X402Facilitator — TypeScript port of `bankofai.x402.facilitator.X402Facilitator`.
|
|
3
|
+
*
|
|
4
|
+
* The core in-process payment processor for an x402 facilitator service.
|
|
5
|
+
* Manages a registry of {@link FacilitatorMechanism}s keyed by `(network, scheme)`
|
|
6
|
+
* and routes verify / settle / feeQuote calls to the right implementation.
|
|
7
|
+
*
|
|
8
|
+
* This is the *engine* — wrap it with an HTTP server (Hono / Express / Fastify)
|
|
9
|
+
* to expose `/verify`, `/settle`, `/supported`, `/fee/quote` endpoints.
|
|
10
|
+
*/
|
|
11
|
+
import type { FeeQuoteResponse, PaymentPayload, PaymentRequirements, SettleResponse, SupportedResponse, VerifyResponse } from '../types/index.js';
|
|
12
|
+
/**
|
|
13
|
+
* Server-side mechanism interface for the facilitator.
|
|
14
|
+
*
|
|
15
|
+
* One per `(network, scheme)` pair. Implementations live in the chain-specific
|
|
16
|
+
* mechanism packages (TRON / EVM / etc.) — this interface keeps the facilitator
|
|
17
|
+
* core agnostic of any particular chain.
|
|
18
|
+
*/
|
|
19
|
+
export interface FacilitatorMechanism {
|
|
20
|
+
/** Scheme name this mechanism handles (e.g. `"exact"`, `"exact_permit"`). */
|
|
21
|
+
scheme(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Optional fee quote for a single requirement. Return `null` when this
|
|
24
|
+
* mechanism cannot quote the requirement (e.g. token not in registry).
|
|
25
|
+
*/
|
|
26
|
+
feeQuote(accept: PaymentRequirements, context?: Record<string, unknown>): Promise<FeeQuoteResponse | null>;
|
|
27
|
+
/** Off-chain signature / replay / timing verification. */
|
|
28
|
+
verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;
|
|
29
|
+
/** On-chain settlement. */
|
|
30
|
+
settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
|
|
31
|
+
}
|
|
32
|
+
/** Optional logger interface for observability hooks. */
|
|
33
|
+
export interface FacilitatorLogger {
|
|
34
|
+
warn(msg: string, meta?: Record<string, unknown>): void;
|
|
35
|
+
error(msg: string, meta?: Record<string, unknown>): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* In-process payment processor. Mirrors the Python `X402Facilitator` 1:1.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* const facilitator = new X402Facilitator()
|
|
43
|
+
* .register(['tron:nile'], tronExactMechanism)
|
|
44
|
+
* .register(['eip155:97'], bscExactPermitMechanism);
|
|
45
|
+
*
|
|
46
|
+
* const verifyResult = await facilitator.verify(payload, requirements);
|
|
47
|
+
* if (verifyResult.isValid) {
|
|
48
|
+
* const settleResult = await facilitator.settle(payload, requirements);
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare class X402Facilitator {
|
|
53
|
+
/** network → scheme → mechanism */
|
|
54
|
+
private readonly mechanisms;
|
|
55
|
+
private readonly logger;
|
|
56
|
+
constructor(opts?: {
|
|
57
|
+
logger?: FacilitatorLogger;
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Register a mechanism for a list of networks. Returns `this` for chaining.
|
|
61
|
+
*/
|
|
62
|
+
register(networks: string[], mechanism: FacilitatorMechanism): this;
|
|
63
|
+
/** Snapshot of registered `(x402Version, scheme, network)` triples. */
|
|
64
|
+
supported(): SupportedResponse;
|
|
65
|
+
/**
|
|
66
|
+
* Fee quotes for a list of requirements. Unsupported `(network, scheme)` /
|
|
67
|
+
* mechanisms returning `null` are silently skipped — the result list may be
|
|
68
|
+
* shorter than the input. Per-mechanism exceptions surface as a thrown
|
|
69
|
+
* `Error` (caller decides whether to 4xx or 5xx the HTTP request).
|
|
70
|
+
*/
|
|
71
|
+
feeQuote(accepts: PaymentRequirements[], context?: Record<string, unknown>): Promise<FeeQuoteResponse[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Verify a payment payload off-chain. Always returns a {@link VerifyResponse};
|
|
74
|
+
* mechanism exceptions become `isValid: false` with the message as
|
|
75
|
+
* `invalidReason` and a logger.error entry.
|
|
76
|
+
*/
|
|
77
|
+
verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;
|
|
78
|
+
/**
|
|
79
|
+
* Execute on-chain settlement. Always returns a {@link SettleResponse};
|
|
80
|
+
* exceptions become `success: false` with `errorReason` set.
|
|
81
|
+
*/
|
|
82
|
+
settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
|
|
83
|
+
private findMechanism;
|
|
84
|
+
/**
|
|
85
|
+
* Strict variant — throws if any EVM address fails checksum. Used in verify /
|
|
86
|
+
* settle so the failure message ends up in the response.
|
|
87
|
+
*/
|
|
88
|
+
private normalizeEvmRequirements;
|
|
89
|
+
/**
|
|
90
|
+
* Lenient variant for `feeQuote` — invalid-EVM-input requirements are simply
|
|
91
|
+
* skipped (returning the original so they can be filtered out by mechanism
|
|
92
|
+
* lookup miss).
|
|
93
|
+
*/
|
|
94
|
+
private tryNormalizeEvmRequirements;
|
|
95
|
+
private checksumAddressStrict;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=x402Facilitator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x402Facilitator.d.ts","sourceRoot":"","sources":["../../src/facilitator/x402Facilitator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,MAAM,IAAI,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CACN,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpC,0DAA0D;IAC1D,MAAM,CACJ,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,2BAA2B;IAC3B,MAAM,CACJ,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1D;AAOD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAe;IAC1B,mCAAmC;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwD;IAEnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAA;KAAE;IAIjD;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAanE,uEAAuE;IACvE,SAAS,IAAI,iBAAiB;IAU9B;;;;;OAKG;IACG,QAAQ,CACZ,OAAO,EAAE,mBAAmB,EAAE,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAuB9B;;;;OAIG;IACG,MAAM,CACV,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;IA0B1B;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;IAmC1B,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAyBhC;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,qBAAqB;CAM9B"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* X402Facilitator — TypeScript port of `bankofai.x402.facilitator.X402Facilitator`.
|
|
3
|
+
*
|
|
4
|
+
* The core in-process payment processor for an x402 facilitator service.
|
|
5
|
+
* Manages a registry of {@link FacilitatorMechanism}s keyed by `(network, scheme)`
|
|
6
|
+
* and routes verify / settle / feeQuote calls to the right implementation.
|
|
7
|
+
*
|
|
8
|
+
* This is the *engine* — wrap it with an HTTP server (Hono / Express / Fastify)
|
|
9
|
+
* to expose `/verify`, `/settle`, `/supported`, `/fee/quote` endpoints.
|
|
10
|
+
*/
|
|
11
|
+
import { getAddress, isAddress } from 'viem';
|
|
12
|
+
const consoleLogger = {
|
|
13
|
+
warn: (msg, meta) => console.warn(`[X402Facilitator] ${msg}`, meta ?? ''),
|
|
14
|
+
error: (msg, meta) => console.error(`[X402Facilitator] ${msg}`, meta ?? ''),
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* In-process payment processor. Mirrors the Python `X402Facilitator` 1:1.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const facilitator = new X402Facilitator()
|
|
22
|
+
* .register(['tron:nile'], tronExactMechanism)
|
|
23
|
+
* .register(['eip155:97'], bscExactPermitMechanism);
|
|
24
|
+
*
|
|
25
|
+
* const verifyResult = await facilitator.verify(payload, requirements);
|
|
26
|
+
* if (verifyResult.isValid) {
|
|
27
|
+
* const settleResult = await facilitator.settle(payload, requirements);
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export class X402Facilitator {
|
|
32
|
+
/** network → scheme → mechanism */
|
|
33
|
+
mechanisms = new Map();
|
|
34
|
+
logger;
|
|
35
|
+
constructor(opts) {
|
|
36
|
+
this.logger = opts?.logger ?? consoleLogger;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Register a mechanism for a list of networks. Returns `this` for chaining.
|
|
40
|
+
*/
|
|
41
|
+
register(networks, mechanism) {
|
|
42
|
+
const scheme = mechanism.scheme();
|
|
43
|
+
for (const network of networks) {
|
|
44
|
+
let bucket = this.mechanisms.get(network);
|
|
45
|
+
if (!bucket) {
|
|
46
|
+
bucket = new Map();
|
|
47
|
+
this.mechanisms.set(network, bucket);
|
|
48
|
+
}
|
|
49
|
+
bucket.set(scheme, mechanism);
|
|
50
|
+
}
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/** Snapshot of registered `(x402Version, scheme, network)` triples. */
|
|
54
|
+
supported() {
|
|
55
|
+
const kinds = [];
|
|
56
|
+
for (const [network, schemes] of this.mechanisms) {
|
|
57
|
+
for (const scheme of schemes.keys()) {
|
|
58
|
+
kinds.push({ x402Version: 2, scheme, network });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return { kinds };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Fee quotes for a list of requirements. Unsupported `(network, scheme)` /
|
|
65
|
+
* mechanisms returning `null` are silently skipped — the result list may be
|
|
66
|
+
* shorter than the input. Per-mechanism exceptions surface as a thrown
|
|
67
|
+
* `Error` (caller decides whether to 4xx or 5xx the HTTP request).
|
|
68
|
+
*/
|
|
69
|
+
async feeQuote(accepts, context) {
|
|
70
|
+
const results = [];
|
|
71
|
+
for (const accept of accepts) {
|
|
72
|
+
const normalized = this.tryNormalizeEvmRequirements(accept);
|
|
73
|
+
const mechanism = this.findMechanism(normalized.network, normalized.scheme);
|
|
74
|
+
if (!mechanism) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const quote = await mechanism.feeQuote(normalized, context);
|
|
79
|
+
if (quote !== null) {
|
|
80
|
+
results.push(quote);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
throw new Error(`Fee quote failed for ${normalized.network}/${normalized.scheme}: ${err.message}`, { cause: err });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return results;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Verify a payment payload off-chain. Always returns a {@link VerifyResponse};
|
|
91
|
+
* mechanism exceptions become `isValid: false` with the message as
|
|
92
|
+
* `invalidReason` and a logger.error entry.
|
|
93
|
+
*/
|
|
94
|
+
async verify(payload, requirements) {
|
|
95
|
+
const mechanism = this.findMechanism(requirements.network, requirements.scheme);
|
|
96
|
+
if (!mechanism) {
|
|
97
|
+
return {
|
|
98
|
+
isValid: false,
|
|
99
|
+
invalidReason: `unsupported_network_scheme: ${requirements.network}/${requirements.scheme}`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
let normalized;
|
|
103
|
+
try {
|
|
104
|
+
normalized = this.normalizeEvmRequirements(requirements);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
return { isValid: false, invalidReason: err.message };
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
return await mechanism.verify(payload, normalized);
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
this.logger.error('verify failed', {
|
|
114
|
+
network: normalized.network,
|
|
115
|
+
scheme: normalized.scheme,
|
|
116
|
+
error: err.message,
|
|
117
|
+
});
|
|
118
|
+
return { isValid: false, invalidReason: err.message };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Execute on-chain settlement. Always returns a {@link SettleResponse};
|
|
123
|
+
* exceptions become `success: false` with `errorReason` set.
|
|
124
|
+
*/
|
|
125
|
+
async settle(payload, requirements) {
|
|
126
|
+
const mechanism = this.findMechanism(requirements.network, requirements.scheme);
|
|
127
|
+
if (!mechanism) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
network: requirements.network,
|
|
131
|
+
errorReason: `unsupported_network_scheme: ${requirements.network}/${requirements.scheme}`,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
let normalized;
|
|
135
|
+
try {
|
|
136
|
+
normalized = this.normalizeEvmRequirements(requirements);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
network: requirements.network,
|
|
142
|
+
errorReason: err.message,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
return await mechanism.settle(payload, normalized);
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
this.logger.error('settle failed', {
|
|
150
|
+
network: normalized.network,
|
|
151
|
+
scheme: normalized.scheme,
|
|
152
|
+
error: err.message,
|
|
153
|
+
});
|
|
154
|
+
return {
|
|
155
|
+
success: false,
|
|
156
|
+
network: normalized.network,
|
|
157
|
+
errorReason: err.message,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
findMechanism(network, scheme) {
|
|
162
|
+
return this.mechanisms.get(network)?.get(scheme) ?? null;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Strict variant — throws if any EVM address fails checksum. Used in verify /
|
|
166
|
+
* settle so the failure message ends up in the response.
|
|
167
|
+
*/
|
|
168
|
+
normalizeEvmRequirements(reqs) {
|
|
169
|
+
if (!reqs.network.startsWith('eip155:')) {
|
|
170
|
+
return reqs;
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
...reqs,
|
|
174
|
+
asset: this.checksumAddressStrict(reqs.asset, 'asset'),
|
|
175
|
+
payTo: this.checksumAddressStrict(reqs.payTo, 'payTo'),
|
|
176
|
+
extra: reqs.extra
|
|
177
|
+
? {
|
|
178
|
+
...reqs.extra,
|
|
179
|
+
fee: reqs.extra.fee
|
|
180
|
+
? {
|
|
181
|
+
...reqs.extra.fee,
|
|
182
|
+
feeTo: this.checksumAddressStrict(reqs.extra.fee.feeTo, 'extra.fee.feeTo'),
|
|
183
|
+
caller: reqs.extra.fee.caller
|
|
184
|
+
? this.checksumAddressStrict(reqs.extra.fee.caller, 'extra.fee.caller')
|
|
185
|
+
: reqs.extra.fee.caller,
|
|
186
|
+
}
|
|
187
|
+
: reqs.extra.fee,
|
|
188
|
+
}
|
|
189
|
+
: reqs.extra,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Lenient variant for `feeQuote` — invalid-EVM-input requirements are simply
|
|
194
|
+
* skipped (returning the original so they can be filtered out by mechanism
|
|
195
|
+
* lookup miss).
|
|
196
|
+
*/
|
|
197
|
+
tryNormalizeEvmRequirements(reqs) {
|
|
198
|
+
try {
|
|
199
|
+
return this.normalizeEvmRequirements(reqs);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return reqs;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
checksumAddressStrict(address, fieldName) {
|
|
206
|
+
if (!isAddress(address, { strict: false })) {
|
|
207
|
+
throw new Error(`Invalid EVM address for ${fieldName}: ${address}`);
|
|
208
|
+
}
|
|
209
|
+
return getAddress(address);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=x402Facilitator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x402Facilitator.js","sourceRoot":"","sources":["../../src/facilitator/x402Facilitator.ts"],"names":[],"mappings":"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"}
|
package/dist/http/client.d.ts
CHANGED
|
@@ -1,33 +1,82 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* X402FetchClient
|
|
2
|
+
* X402FetchClient — Fetch-based HTTP client with automatic 402 payment handling.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `bankofai.x402.clients.X402HttpClient` on the Python side. Wraps the
|
|
5
|
+
* global `fetch` (configurable for tests) so agent code can call any URL and
|
|
6
|
+
* have 402 challenges silently handled — challenge → sign → retry → return
|
|
7
|
+
* the final 200 response, with the settled payment receipt parseable via
|
|
8
|
+
* {@link parsePaymentResponseHeader}.
|
|
3
9
|
*/
|
|
4
|
-
import {
|
|
10
|
+
import { type PaymentRequirementsSelector, type SettleResponse, X402Client } from '../index.js';
|
|
11
|
+
/** Wire-format header names. */
|
|
12
|
+
export declare const PAYMENT_SIGNATURE_HEADER = "PAYMENT-SIGNATURE";
|
|
13
|
+
export declare const PAYMENT_REQUIRED_HEADER = "PAYMENT-REQUIRED";
|
|
14
|
+
export declare const PAYMENT_RESPONSE_HEADER = "PAYMENT-RESPONSE";
|
|
15
|
+
/** Constructor options for {@link X402FetchClient}. */
|
|
16
|
+
export interface X402FetchClientOptions {
|
|
17
|
+
/** Custom payment requirements selector (defaults to library default). */
|
|
18
|
+
selector?: PaymentRequirementsSelector;
|
|
19
|
+
/** Custom fetch implementation (defaults to global `fetch`). Useful for tests. */
|
|
20
|
+
fetchImpl?: typeof fetch;
|
|
21
|
+
}
|
|
5
22
|
/**
|
|
6
|
-
* Fetch-based HTTP client with automatic 402 payment handling
|
|
23
|
+
* Fetch-based HTTP client with automatic 402 payment handling.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const x402Client = new X402Client(...).register(mechanism);
|
|
28
|
+
* const httpClient = new X402FetchClient(x402Client);
|
|
29
|
+
*
|
|
30
|
+
* const res = await httpClient.get('https://api.example.com/llm');
|
|
31
|
+
* if (res.ok) {
|
|
32
|
+
* const settled = parsePaymentResponseHeader(res);
|
|
33
|
+
* console.log('paid via tx', settled?.transaction);
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
7
36
|
*/
|
|
8
37
|
export declare class X402FetchClient {
|
|
9
|
-
private x402Client;
|
|
10
|
-
private selector?;
|
|
11
|
-
|
|
38
|
+
private readonly x402Client;
|
|
39
|
+
private readonly selector?;
|
|
40
|
+
private readonly fetchImpl;
|
|
41
|
+
constructor(x402Client: X402Client, selectorOrOptions?: PaymentRequirementsSelector | X402FetchClientOptions);
|
|
12
42
|
/**
|
|
13
|
-
*
|
|
43
|
+
* Issue a request with automatic 402 → pay → retry handling.
|
|
44
|
+
*
|
|
45
|
+
* If the server returns a non-402 status, the response is passed through.
|
|
46
|
+
* If the 402 cannot be parsed (no PAYMENT-REQUIRED header and no parseable
|
|
47
|
+
* body), the original 402 is returned to the caller for inspection.
|
|
14
48
|
*/
|
|
15
49
|
request(url: string, init?: RequestInit): Promise<Response>;
|
|
16
|
-
/**
|
|
17
|
-
* GET request with payment handling
|
|
18
|
-
*/
|
|
50
|
+
/** GET shorthand. */
|
|
19
51
|
get(url: string, init?: RequestInit): Promise<Response>;
|
|
20
|
-
/**
|
|
21
|
-
* POST request with payment handling
|
|
22
|
-
*/
|
|
52
|
+
/** POST shorthand. */
|
|
23
53
|
post(url: string, body?: RequestInit['body'], init?: RequestInit): Promise<Response>;
|
|
54
|
+
/** PUT shorthand. */
|
|
55
|
+
put(url: string, body?: RequestInit['body'], init?: RequestInit): Promise<Response>;
|
|
56
|
+
/** PATCH shorthand. */
|
|
57
|
+
patch(url: string, body?: RequestInit['body'], init?: RequestInit): Promise<Response>;
|
|
58
|
+
/** DELETE shorthand. */
|
|
59
|
+
delete(url: string, init?: RequestInit): Promise<Response>;
|
|
24
60
|
/**
|
|
25
|
-
*
|
|
61
|
+
* Try to parse a `PaymentRequired` from the 402 response.
|
|
62
|
+
*
|
|
63
|
+
* Order:
|
|
64
|
+
* 1. `PAYMENT-REQUIRED` header (base64 JSON).
|
|
65
|
+
* 2. JSON body fallback when header is missing or undecodable.
|
|
66
|
+
*
|
|
67
|
+
* Returns `null` if neither path yields a recognizable shape.
|
|
26
68
|
*/
|
|
27
69
|
private parsePaymentRequired;
|
|
28
|
-
/**
|
|
29
|
-
* Retry request with payment payload
|
|
30
|
-
*/
|
|
70
|
+
/** Re-issue the original request with the encoded payment payload header. */
|
|
31
71
|
private retryWithPayment;
|
|
32
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Pull the {@link SettleResponse} out of a 200 response's PAYMENT-RESPONSE header.
|
|
75
|
+
*
|
|
76
|
+
* Servers attach this on success so the client can record the settlement tx
|
|
77
|
+
* hash / network without making a separate facilitator call.
|
|
78
|
+
*
|
|
79
|
+
* @returns The decoded settle response, or `null` if the header is absent or malformed.
|
|
80
|
+
*/
|
|
81
|
+
export declare function parsePaymentResponseHeader(response: Response): SettleResponse | null;
|
|
33
82
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,UAAU,EAGX,MAAM,aAAa,CAAC;AAErB,gCAAgC;AAChC,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,2BAA2B,CAAC;IACvC,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAGvC,UAAU,EAAE,UAAU,EACtB,iBAAiB,CAAC,EAAE,2BAA2B,GAAG,sBAAsB;IAY1E;;;;;;OAMG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqBjE,qBAAqB;IACf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI7D,sBAAsB;IAChB,IAAI,CACR,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC;IAIpB,qBAAqB;IACf,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC;IAIpB,uBAAuB;IACjB,KAAK,CACT,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC;IAIpB,wBAAwB;IAClB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIhE;;;;;;;;OAQG;YACW,oBAAoB;IAsBlC,6EAA6E;YAC/D,gBAAgB;CAU/B;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAG,IAAI,CAUpF"}
|
package/dist/http/client.js
CHANGED
|
@@ -1,26 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* X402FetchClient
|
|
2
|
+
* X402FetchClient — Fetch-based HTTP client with automatic 402 payment handling.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `bankofai.x402.clients.X402HttpClient` on the Python side. Wraps the
|
|
5
|
+
* global `fetch` (configurable for tests) so agent code can call any URL and
|
|
6
|
+
* have 402 challenges silently handled — challenge → sign → retry → return
|
|
7
|
+
* the final 200 response, with the settled payment receipt parseable via
|
|
8
|
+
* {@link parsePaymentResponseHeader}.
|
|
3
9
|
*/
|
|
4
|
-
import {
|
|
5
|
-
/**
|
|
6
|
-
const PAYMENT_SIGNATURE_HEADER = 'PAYMENT-SIGNATURE';
|
|
7
|
-
const PAYMENT_REQUIRED_HEADER = 'PAYMENT-REQUIRED';
|
|
8
|
-
const PAYMENT_RESPONSE_HEADER = 'PAYMENT-RESPONSE';
|
|
10
|
+
import { decodePaymentPayload, encodePaymentPayload, } from '../index.js';
|
|
11
|
+
/** Wire-format header names. */
|
|
12
|
+
export const PAYMENT_SIGNATURE_HEADER = 'PAYMENT-SIGNATURE';
|
|
13
|
+
export const PAYMENT_REQUIRED_HEADER = 'PAYMENT-REQUIRED';
|
|
14
|
+
export const PAYMENT_RESPONSE_HEADER = 'PAYMENT-RESPONSE';
|
|
9
15
|
/**
|
|
10
|
-
* Fetch-based HTTP client with automatic 402 payment handling
|
|
16
|
+
* Fetch-based HTTP client with automatic 402 payment handling.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const x402Client = new X402Client(...).register(mechanism);
|
|
21
|
+
* const httpClient = new X402FetchClient(x402Client);
|
|
22
|
+
*
|
|
23
|
+
* const res = await httpClient.get('https://api.example.com/llm');
|
|
24
|
+
* if (res.ok) {
|
|
25
|
+
* const settled = parsePaymentResponseHeader(res);
|
|
26
|
+
* console.log('paid via tx', settled?.transaction);
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
11
29
|
*/
|
|
12
30
|
export class X402FetchClient {
|
|
13
31
|
x402Client;
|
|
14
32
|
selector;
|
|
15
|
-
|
|
33
|
+
fetchImpl;
|
|
34
|
+
constructor(x402Client, selectorOrOptions) {
|
|
16
35
|
this.x402Client = x402Client;
|
|
17
|
-
|
|
36
|
+
if (typeof selectorOrOptions === 'function') {
|
|
37
|
+
this.selector = selectorOrOptions;
|
|
38
|
+
this.fetchImpl = fetch;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.selector = selectorOrOptions?.selector;
|
|
42
|
+
this.fetchImpl = selectorOrOptions?.fetchImpl ?? fetch;
|
|
43
|
+
}
|
|
18
44
|
}
|
|
19
45
|
/**
|
|
20
|
-
*
|
|
46
|
+
* Issue a request with automatic 402 → pay → retry handling.
|
|
47
|
+
*
|
|
48
|
+
* If the server returns a non-402 status, the response is passed through.
|
|
49
|
+
* If the 402 cannot be parsed (no PAYMENT-REQUIRED header and no parseable
|
|
50
|
+
* body), the original 402 is returned to the caller for inspection.
|
|
21
51
|
*/
|
|
22
52
|
async request(url, init) {
|
|
23
|
-
const response = await
|
|
53
|
+
const response = await this.fetchImpl(url, init);
|
|
24
54
|
if (response.status !== 402) {
|
|
25
55
|
return response;
|
|
26
56
|
}
|
|
@@ -31,20 +61,34 @@ export class X402FetchClient {
|
|
|
31
61
|
const paymentPayload = await this.x402Client.handlePayment(paymentRequired.accepts, url, paymentRequired.extensions, this.selector);
|
|
32
62
|
return this.retryWithPayment(url, init, paymentPayload);
|
|
33
63
|
}
|
|
34
|
-
/**
|
|
35
|
-
* GET request with payment handling
|
|
36
|
-
*/
|
|
64
|
+
/** GET shorthand. */
|
|
37
65
|
async get(url, init) {
|
|
38
66
|
return this.request(url, { ...init, method: 'GET' });
|
|
39
67
|
}
|
|
40
|
-
/**
|
|
41
|
-
* POST request with payment handling
|
|
42
|
-
*/
|
|
68
|
+
/** POST shorthand. */
|
|
43
69
|
async post(url, body, init) {
|
|
44
70
|
return this.request(url, { ...init, method: 'POST', body });
|
|
45
71
|
}
|
|
72
|
+
/** PUT shorthand. */
|
|
73
|
+
async put(url, body, init) {
|
|
74
|
+
return this.request(url, { ...init, method: 'PUT', body });
|
|
75
|
+
}
|
|
76
|
+
/** PATCH shorthand. */
|
|
77
|
+
async patch(url, body, init) {
|
|
78
|
+
return this.request(url, { ...init, method: 'PATCH', body });
|
|
79
|
+
}
|
|
80
|
+
/** DELETE shorthand. */
|
|
81
|
+
async delete(url, init) {
|
|
82
|
+
return this.request(url, { ...init, method: 'DELETE' });
|
|
83
|
+
}
|
|
46
84
|
/**
|
|
47
|
-
*
|
|
85
|
+
* Try to parse a `PaymentRequired` from the 402 response.
|
|
86
|
+
*
|
|
87
|
+
* Order:
|
|
88
|
+
* 1. `PAYMENT-REQUIRED` header (base64 JSON).
|
|
89
|
+
* 2. JSON body fallback when header is missing or undecodable.
|
|
90
|
+
*
|
|
91
|
+
* Returns `null` if neither path yields a recognizable shape.
|
|
48
92
|
*/
|
|
49
93
|
async parsePaymentRequired(response) {
|
|
50
94
|
const headerValue = response.headers.get(PAYMENT_REQUIRED_HEADER);
|
|
@@ -53,31 +97,46 @@ export class X402FetchClient {
|
|
|
53
97
|
return decodePaymentPayload(headerValue);
|
|
54
98
|
}
|
|
55
99
|
catch {
|
|
56
|
-
//
|
|
100
|
+
// Header malformed — fall through to body.
|
|
57
101
|
}
|
|
58
102
|
}
|
|
59
103
|
try {
|
|
60
|
-
const body = await response.json();
|
|
61
|
-
if (
|
|
104
|
+
const body = (await response.clone().json());
|
|
105
|
+
if (Array.isArray(body.accepts)) {
|
|
62
106
|
return body;
|
|
63
107
|
}
|
|
64
108
|
}
|
|
65
109
|
catch {
|
|
66
|
-
//
|
|
110
|
+
// Body not parseable — give up.
|
|
67
111
|
}
|
|
68
112
|
return null;
|
|
69
113
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Retry request with payment payload
|
|
72
|
-
*/
|
|
114
|
+
/** Re-issue the original request with the encoded payment payload header. */
|
|
73
115
|
async retryWithPayment(url, init, paymentPayload) {
|
|
74
|
-
const
|
|
116
|
+
const encoded = encodePaymentPayload(paymentPayload);
|
|
75
117
|
const headers = new Headers(init?.headers);
|
|
76
|
-
headers.set(PAYMENT_SIGNATURE_HEADER,
|
|
77
|
-
return
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
118
|
+
headers.set(PAYMENT_SIGNATURE_HEADER, encoded);
|
|
119
|
+
return this.fetchImpl(url, { ...init, headers });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Pull the {@link SettleResponse} out of a 200 response's PAYMENT-RESPONSE header.
|
|
124
|
+
*
|
|
125
|
+
* Servers attach this on success so the client can record the settlement tx
|
|
126
|
+
* hash / network without making a separate facilitator call.
|
|
127
|
+
*
|
|
128
|
+
* @returns The decoded settle response, or `null` if the header is absent or malformed.
|
|
129
|
+
*/
|
|
130
|
+
export function parsePaymentResponseHeader(response) {
|
|
131
|
+
const headerValue = response.headers.get(PAYMENT_RESPONSE_HEADER);
|
|
132
|
+
if (!headerValue) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
return decodePaymentPayload(headerValue);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return null;
|
|
81
140
|
}
|
|
82
141
|
}
|
|
83
142
|
//# sourceMappingURL=client.js.map
|
package/dist/http/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,9 +12,16 @@ export * from './errors.js';
|
|
|
12
12
|
export * from './tokens.js';
|
|
13
13
|
export * from './address.js';
|
|
14
14
|
export * from './http/client.js';
|
|
15
|
+
export * from './facilitator/index.js';
|
|
16
|
+
export * from './server/index.js';
|
|
17
|
+
export * from './middleware/index.js';
|
|
15
18
|
export * from './mechanisms/index.js';
|
|
16
|
-
export * from './mechanisms/
|
|
19
|
+
export * from './mechanisms/evm/exact_permit/index.js';
|
|
17
20
|
export * from './signers/signer.js';
|
|
18
21
|
export * from './signers/evmSigner.js';
|
|
19
22
|
export type { TronWeb, TypedDataDomain, TypedDataField, TronNetwork, TRON_CHAIN_IDS } from './signers/types.js';
|
|
23
|
+
export { FacilitatorSigner } from './signers/facilitator/base.js';
|
|
24
|
+
export type { FacilitatorTypedDataDomain, FacilitatorTypedDataTypes, FacilitatorTransactionReceipt, } from './signers/index.js';
|
|
25
|
+
export { TronFacilitatorSigner } from './signers/facilitator/tronSigner.js';
|
|
26
|
+
export { EvmFacilitatorSigner } from './signers/facilitator/evmSigner.js';
|
|
20
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGhH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC"}
|