paygate 5.1.0 → 5.3.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # paygate
2
2
 
3
- Create agent-payable offers with HTTP 402 and USDC settlement. PayGate handles the x402 challenge, calls the ArisPay facilitator, and lets your handler run only after payment settles.
3
+ Create agent-payable offers with HTTP 402 and USDC settlement. PayGate handles the x402 challenge, calls the [ArisPay facilitator](https://facilitator.arispay.app), and lets your handler run only after payment settles.
4
4
 
5
5
  API endpoint offers are live today. Use the hosted proxy for zero-code acceptance, or install this package when you want the 402 flow on your own domain.
6
6
 
@@ -129,6 +129,26 @@ The agent-side [`payagent`](https://www.npmjs.com/package/payagent) CLI and SDK
129
129
  | `facilitatorUrl` | No | Manifest value | Compatibility override. In v3, merchant capabilities are authoritative. |
130
130
  | `timeout` | No | `30000` | ArisPay/facilitator call timeout in ms. |
131
131
  | `cacheTtlMs` | No | `300000` | Merchant capability cache TTL. |
132
+ | `selfSettle` | No | — | `{ privateKey, rpcUrl? }`. Submit settlements from your own funded key: verification runs against the facilitator (free), then the SDK submits the EIP-3009 `transferWithAuthorization` itself. You pay chain gas (~$0.001/settle on Base) and nobody else — no facilitator fee, no subsidy that ends. The key is any funded EOA; it pays gas only and never receives or holds customer funds. Replay protection is on-chain (the EIP-3009 nonce). Defaults to public Base RPCs; set `rpcUrl` for other networks or your own provider. |
133
+
134
+ ### Self-settle
135
+
136
+ ```ts
137
+ const pw = paygate({
138
+ merchantId: "m_123",
139
+ selfSettle: { privateKey: process.env.SETTLE_KEY! }, // funded with a few $ of Base ETH
140
+ });
141
+ ```
142
+
143
+ Requires the optional peer dependency `ethers` (v6): `npm install ethers`. The
144
+ facilitator path never loads it.
145
+
146
+ Verified end-to-end against Circle's real USDC on Base Sepolia (2026-07-19): a
147
+ signed EIP-3009 authorization settled on-chain via `submitSelfSettle` — 0.01
148
+ USDC transferred, gas paid by the self-settle key — tx
149
+ [`0xe151fe05…dda4cb0`](https://sepolia.basescan.org/tx/0xe151fe058f2e03f74f7a6ec4bea95224515592bf3bee8f689b37caf04dda4cb0)
150
+ (`AuthorizationUsed` + `Transfer` events). This confirms Circle USDC accepts the
151
+ 9-arg split-signature `transferWithAuthorization` form the SDK submits.
132
152
 
133
153
  ### Compatibility mode
134
154
 
@@ -138,6 +158,10 @@ Older code that passes `wallet` and `network` still works through a v2 shim, but
138
158
 
139
159
  PayGate currently settles USDC on EVM networks advertised by your merchant capability manifest. Base mainnet (`eip155:8453`) is the recommended production network.
140
160
 
161
+ ## Facilitator
162
+
163
+ PayGate settles through [**facilitator.arispay.app**](https://facilitator.arispay.app) by default — an open x402 facilitator, live on Base mainnet, settling USDC and EURC. No facilitator fee and no gas subsidy: the seller pays chain gas and nobody else (self-settle with your own key, or the default relayer path). The live policy is machine-readable at [`/supported`](https://facilitator.arispay.app/supported); the discovery document is at [`/facilitator`](https://facilitator.arispay.app/facilitator). Point `facilitatorUrl` elsewhere if you run your own.
164
+
141
165
  ## License
142
166
 
143
167
  MIT
package/dist/core.d.ts CHANGED
@@ -13,6 +13,7 @@
13
13
  export declare const DEFAULT_FACILITATOR = "https://facilitator.arispay.app";
14
14
  export declare const DEFAULT_API_URL = "https://api.arispay.app";
15
15
  export declare const CAPABILITY_CACHE_TTL_MS: number;
16
+ export type PaygateCurrency = "USD" | "EUR";
16
17
  /**
17
18
  * Build the response headers for an x402 402 challenge in the canonical
18
19
  * wire format observed across Bazaar-listed endpoints.
@@ -64,12 +65,39 @@ export interface PaygateConfig {
64
65
  */
65
66
  network?: string;
66
67
  /**
67
- * USDC contract address. Auto-derived from network if omitted.
68
- * Ignored in the v3 path (merchant manifest is authoritative).
68
+ * Settlement currency. Default `"USD"` (USDC). `"EUR"` settles in Circle
69
+ * EURC; `priceCents` then means integer EUR cents (the cents 6-decimals
70
+ * conversion factor is the same 10^4 for both assets).
71
+ *
72
+ * v2-shim path: resolves the EURC address for the network (Base mainnet +
73
+ * Base Sepolia known; other networks need an explicit `asset`).
74
+ * v3 path: selects the merchant-manifest rail whose `assetName` matches
75
+ * (`EURC` for EUR); errors clearly if the merchant has no EUR rail.
76
+ */
77
+ currency?: PaygateCurrency;
78
+ /**
79
+ * Settlement token contract address. Auto-derived from `network` +
80
+ * `currency` if omitted. Ignored in the v3 path (merchant manifest is
81
+ * authoritative).
69
82
  */
70
83
  asset?: string;
71
84
  /** Override the default facilitator URL. */
72
85
  facilitatorUrl?: string;
86
+ /**
87
+ * Self-settle: submit the settlement transaction from your own funded key
88
+ * instead of the facilitator's relayer. You pay chain gas (~$0.001 per
89
+ * settle on Base) and nobody else — the never-sponsor / never-charge
90
+ * policy's direct-payout path. Verification still runs against the
91
+ * facilitator (free — no chain writes). Replay protection is on-chain:
92
+ * EIP-3009 consumes the authorization nonce, so a duplicate submit
93
+ * reverts.
94
+ */
95
+ selfSettle?: {
96
+ /** 0x-hex private key of any funded EOA. Pays gas only; never receives or holds customer funds. */
97
+ privateKey: string;
98
+ /** JSON-RPC URL for the settlement network. Defaults to the public Base RPCs for `eip155:8453` / `eip155:84532`. */
99
+ rpcUrl?: string;
100
+ };
73
101
  /** Override the default apps/api URL (for staging / self-hosted). */
74
102
  apiUrl?: string;
75
103
  /** Facilitator call timeout in ms. Default 30s. */
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/core.js CHANGED
@@ -11,21 +11,37 @@
11
11
  * See docs/paygate-v2.md §7.
12
12
  */
13
13
  // ── Default facilitator ─────────────────────────────
14
- export const DEFAULT_FACILITATOR = 'https://facilitator.arispay.app';
15
- export const DEFAULT_API_URL = 'https://api.arispay.app';
14
+ export const DEFAULT_FACILITATOR = "https://facilitator.arispay.app";
15
+ export const DEFAULT_API_URL = "https://api.arispay.app";
16
16
  export const CAPABILITY_CACHE_TTL_MS = 5 * 60 * 1000;
17
17
  // ── Known USDC addresses per network ───────────────
18
+ // Canonical source is `@arispay/x402-core` (USDC_BASE_MAINNET, etc.).
19
+ // This duplicate is intentional: `paygate` is a published, standalone npm
20
+ // package with `ethers` as its only runtime dep (see paygate CLAUDE.md). It
21
+ // must NOT take a workspace dep on the private `@arispay/x402-core` package
22
+ // — npm consumers wouldn't resolve it. Keep these four values in sync with
23
+ // packages/x402-core/src/constants.ts by hand. Do not "DRY" by importing —
24
+ // see P2-4 blocker discussion.
18
25
  const USDC_ADDRESSES = {
19
- 'eip155:84532': '0x036CbD53842c5426634e7929541eC2318f3dCF7e', // Base Sepolia
20
- 'eip155:8453': '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // Base Mainnet
21
- 'eip155:1': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // Ethereum
22
- 'eip155:137': '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', // Polygon
26
+ "eip155:84532": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", // Base Sepolia
27
+ "eip155:8453": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // Base Mainnet
28
+ "eip155:1": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // Ethereum
29
+ "eip155:137": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359", // Polygon
30
+ };
31
+ // Circle EURC — the EUR settlement asset (`currency: "EUR"`). Entries exist
32
+ // only for networks where the address + EIP-712 domain were verified
33
+ // on-chain (eth_call name()/version(), 2026-06-11). Same FiatToken family
34
+ // as USDC → EIP-3009 supported, 6 decimals, domain name "EURC" version "2"
35
+ // on both networks. EUR on other networks requires an explicit `asset`.
36
+ const EURC_ADDRESSES = {
37
+ "eip155:84532": "0x808456652fdb597867f38412077A9182bf77359F", // Base Sepolia
38
+ "eip155:8453": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42", // Base Mainnet
23
39
  };
24
40
  const NETWORK_ALIASES = {
25
- 'base-sepolia': 'eip155:84532',
26
- 'base': 'eip155:8453',
27
- 'ethereum': 'eip155:1',
28
- 'polygon': 'eip155:137',
41
+ "base-sepolia": "eip155:84532",
42
+ base: "eip155:8453",
43
+ ethereum: "eip155:1",
44
+ polygon: "eip155:137",
29
45
  };
30
46
  function normalizeNetwork(network) {
31
47
  return NETWORK_ALIASES[network] ?? network;
@@ -57,23 +73,31 @@ function normalizeNetwork(network) {
57
73
  * Exported for tests; consumers should not rely on this signature.
58
74
  */
59
75
  export function buildChallengeHeaders(challengeBody, accepts) {
60
- const canonical = Buffer.from(JSON.stringify(challengeBody), 'utf8').toString('base64');
76
+ const canonical = Buffer.from(JSON.stringify(challengeBody), "utf8").toString("base64");
61
77
  const legacy = JSON.stringify({ x402Version: 2, accepts })
62
- .replace(/[\r\n\0]/g, ' ')
63
- .replace(/[^\x20-\x7E]/g, '?');
78
+ .replace(/[\r\n\0]/g, " ")
79
+ .replace(/[^\x20-\x7E]/g, "?");
64
80
  return {
65
- 'payment-required': canonical,
66
- 'X-Payment-Requirements': legacy,
67
- 'WWW-Authenticate': 'x402',
68
- 'Access-Control-Expose-Headers': 'payment-required, x-payment-response, www-authenticate',
81
+ "payment-required": canonical,
82
+ "X-Payment-Requirements": legacy,
83
+ "WWW-Authenticate": "x402",
84
+ "Access-Control-Expose-Headers": "payment-required, x-payment-response, www-authenticate",
69
85
  };
70
86
  }
71
87
  const USDC_DOMAIN_NAMES = {
72
- 'eip155:84532': 'USDC',
73
- 'eip155:8453': 'USD Coin',
74
- 'eip155:1': 'USD Coin',
75
- 'eip155:137': 'USD Coin',
88
+ "eip155:84532": "USDC",
89
+ "eip155:8453": "USD Coin",
90
+ "eip155:1": "USD Coin",
91
+ "eip155:137": "USD Coin",
76
92
  };
93
+ // EURC's EIP-712 domain name is "EURC" on every verified network.
94
+ const EURC_DOMAIN_NAME = "EURC";
95
+ /** EIP-712 domain name for the selected currency's asset on a network. */
96
+ function domainNameFor(currency, network) {
97
+ if (currency === "EUR")
98
+ return EURC_DOMAIN_NAME;
99
+ return USDC_DOMAIN_NAMES[network] ?? "USD Coin";
100
+ }
77
101
  const DEFAULT_DISCOVERY_LIMIT = {
78
102
  maxProbes: 10,
79
103
  windowMs: 60_000,
@@ -101,13 +125,15 @@ function warnV2Shim() {
101
125
  return;
102
126
  v2ShimWarned = true;
103
127
  // eslint-disable-next-line no-console
104
- console.warn('[paygate] v2 config detected (`wallet` + `network`). Pass `merchantId` instead; v2 will be removed in v4. See https://paygate.arispay.app/docs#v3-migration');
128
+ console.warn("[paygate] v2 config detected (`wallet` + `network`). Pass `merchantId` instead; v2 will be removed in v4. See https://paygate.arispay.app/docs#v3-migration");
105
129
  }
106
130
  async function fetchMerchantConfig(config) {
107
131
  if (!config.merchantId) {
108
- throw new Error('paygate: merchantId is required for v3 flow');
132
+ throw new Error("paygate: merchantId is required for v3 flow");
109
133
  }
110
- const cached = capabilityCache.get(config.merchantId);
134
+ const currency = config.currency ?? "USD";
135
+ const cacheKey = `${config.merchantId}:${currency}`;
136
+ const cached = capabilityCache.get(cacheKey);
111
137
  const cacheTtl = config.cacheTtlMs ?? CAPABILITY_CACHE_TTL_MS;
112
138
  if (cached && Date.now() - cached.fetchedAt < cacheTtl) {
113
139
  return cached;
@@ -128,7 +154,7 @@ async function fetchMerchantConfig(config) {
128
154
  throw new Error(`paygate: failed to fetch merchant capabilities: ${err instanceof Error ? err.message : String(err)}`);
129
155
  }
130
156
  if (res.status === 404) {
131
- capabilityCache.delete(config.merchantId);
157
+ capabilityCache.delete(cacheKey);
132
158
  throw new Error(`paygate: merchantId "${config.merchantId}" not found at ${apiUrl}`);
133
159
  }
134
160
  if (res.status >= 500 && cached) {
@@ -138,20 +164,34 @@ async function fetchMerchantConfig(config) {
138
164
  throw new Error(`paygate: capability fetch failed HTTP ${res.status}`);
139
165
  }
140
166
  const manifest = (await res.json());
141
- const rail = manifest.rails?.[0];
167
+ const wantedAssetName = currency === "EUR" ? "EURC" : "USDC";
168
+ // Prefer the rail matching the requested currency; USD callers keep the
169
+ // historical rails[0] fallback so pre-EUR manifests behave identically.
170
+ const rail = manifest.rails?.find((r) => r.assetName === wantedAssetName) ??
171
+ (currency === "USD" ? manifest.rails?.[0] : undefined);
142
172
  if (!rail) {
143
- throw new Error(`paygate: merchant "${config.merchantId}" has no active payout rail — add a PayoutMethod in the dashboard`);
173
+ throw new Error(currency === "EUR"
174
+ ? `paygate: merchant "${config.merchantId}" has no EUR (EURC) payout rail — add one in the dashboard or use currency: "USD"`
175
+ : `paygate: merchant "${config.merchantId}" has no active payout rail — add a PayoutMethod in the dashboard`);
176
+ }
177
+ // v3 manifests must specify an HTTPS facilitator per rail. The SDK no longer
178
+ // silently falls back to the production default, which would hide
179
+ // misconfiguration and let a rogue facilitator claim successful settlement (L7).
180
+ const facilitator = rail.facilitator;
181
+ if (!facilitator || !facilitator.startsWith("https://")) {
182
+ throw new Error(`paygate: merchant "${config.merchantId}" rail has invalid facilitator URL`);
144
183
  }
145
184
  const resolved = {
146
185
  network: rail.network,
147
186
  asset: rail.asset,
187
+ domainName: domainNameFor(currency, rail.network),
148
188
  payTo: rail.payTo,
149
- facilitator: rail.facilitator ?? DEFAULT_FACILITATOR,
150
- trustMinTier: manifest.trust?.minTier ?? 'any',
189
+ facilitator,
190
+ trustMinTier: manifest.trust?.minTier ?? "any",
151
191
  slug: manifest.merchant.slug,
152
192
  fetchedAt: Date.now(),
153
193
  };
154
- capabilityCache.set(config.merchantId, resolved);
194
+ capabilityCache.set(cacheKey, resolved);
155
195
  return resolved;
156
196
  }
157
197
  /**
@@ -162,23 +202,26 @@ async function fetchMerchantConfig(config) {
162
202
  function resolveV2Shim(config) {
163
203
  warnV2Shim();
164
204
  if (!config.wallet) {
165
- throw new Error('paygate: wallet is required in v2-shim mode');
205
+ throw new Error("paygate: wallet is required in v2-shim mode");
166
206
  }
167
207
  if (!config.network) {
168
- throw new Error('paygate: network is required in v2-shim mode');
208
+ throw new Error("paygate: network is required in v2-shim mode");
169
209
  }
210
+ const currency = config.currency ?? "USD";
170
211
  const network = normalizeNetwork(config.network);
171
- const asset = config.asset ?? USDC_ADDRESSES[network];
212
+ const knownAddresses = currency === "EUR" ? EURC_ADDRESSES : USDC_ADDRESSES;
213
+ const asset = config.asset ?? knownAddresses[network];
172
214
  if (!asset) {
173
- throw new Error(`paygate: unsupported network ${network} — no known USDC address`);
215
+ throw new Error(`paygate: unsupported network ${network} — no known ${currency === "EUR" ? "EURC" : "USDC"} address (pass \`asset\` explicitly)`);
174
216
  }
175
217
  return {
176
218
  network,
177
219
  asset,
220
+ domainName: domainNameFor(currency, network),
178
221
  payTo: config.wallet,
179
222
  facilitator: config.facilitatorUrl ?? DEFAULT_FACILITATOR,
180
- trustMinTier: 'any',
181
- slug: 'v2-shim',
223
+ trustMinTier: "any",
224
+ slug: "v2-shim",
182
225
  fetchedAt: Date.now(),
183
226
  };
184
227
  }
@@ -186,7 +229,7 @@ function resolveV2Shim(config) {
186
229
  async function resolvePriceCents(routePrice, request) {
187
230
  const v3 = routePrice.priceCents;
188
231
  if (v3 !== undefined) {
189
- const cents = typeof v3 === 'function' ? await v3(request) : v3;
232
+ const cents = typeof v3 === "function" ? await v3(request) : v3;
190
233
  if (!Number.isInteger(cents) || cents < 1) {
191
234
  throw new Error(`paygate: priceCents must be a positive integer. Got ${JSON.stringify(cents)}. If you meant $0.10, use priceCents: 10.`);
192
235
  }
@@ -195,17 +238,78 @@ async function resolvePriceCents(routePrice, request) {
195
238
  const v2 = routePrice.price;
196
239
  if (v2 !== undefined) {
197
240
  warnV2Shim();
198
- const dollars = typeof v2 === 'function' ? await v2(request) : v2;
199
- if (typeof dollars !== 'number' || dollars <= 0) {
200
- throw new Error('paygate: price must be a positive number');
241
+ const dollars = typeof v2 === "function" ? await v2(request) : v2;
242
+ if (typeof dollars !== "number" || dollars <= 0) {
243
+ throw new Error("paygate: price must be a positive number");
201
244
  }
202
245
  return Math.round(dollars * 100);
203
246
  }
204
- throw new Error('paygate: RoutePrice requires `priceCents` (preferred) or `price` (v2 compat)');
247
+ throw new Error("paygate: RoutePrice requires `priceCents` (preferred) or `price` (v2 compat)");
248
+ }
249
+ // ── Self-settle (seller-submitted settlement) ──────────────────────────
250
+ // EIP-3009 transferWithAuthorization, split-signature form — present on
251
+ // USDC and EURC, the assets the default facilitator stands behind.
252
+ const EIP3009_ABI = [
253
+ "function transferWithAuthorization(address from, address to, uint256 value, uint256 validAfter, uint256 validBefore, bytes32 nonce, uint8 v, bytes32 r, bytes32 s)",
254
+ ];
255
+ const DEFAULT_RPC_BY_NETWORK = {
256
+ "eip155:8453": "https://mainnet.base.org",
257
+ "eip155:84532": "https://sepolia.base.org",
258
+ base: "https://mainnet.base.org",
259
+ "base-sepolia": "https://sepolia.base.org",
260
+ };
261
+ async function submitSelfSettle(selfSettle, paymentPayload, accept, timeoutMs) {
262
+ const rpcUrl = selfSettle.rpcUrl ?? DEFAULT_RPC_BY_NETWORK[accept.network];
263
+ if (!rpcUrl) {
264
+ return {
265
+ success: false,
266
+ errorReason: "SELF_SETTLE_CONFIG",
267
+ errorMessage: `paygate: no default RPC for network "${accept.network}" — set selfSettle.rpcUrl`,
268
+ };
269
+ }
270
+ // `ethers` is an optional peer dependency — only self-settle needs it, so
271
+ // the facilitator path never pulls it. Surface a clear install hint rather
272
+ // than a raw MODULE_NOT_FOUND if a self-settle merchant hasn't installed it.
273
+ let ethers;
274
+ try {
275
+ ethers = await import("ethers");
276
+ }
277
+ catch {
278
+ return {
279
+ success: false,
280
+ errorReason: "SELF_SETTLE_CONFIG",
281
+ errorMessage: "paygate: self-settle requires the optional peer dependency `ethers` — run `npm install ethers`",
282
+ };
283
+ }
284
+ try {
285
+ const { JsonRpcProvider, Wallet, Contract, Signature } = ethers;
286
+ const provider = new JsonRpcProvider(rpcUrl);
287
+ const wallet = new Wallet(selfSettle.privateKey, provider);
288
+ const token = new Contract(accept.asset, EIP3009_ABI, wallet);
289
+ const auth = paymentPayload.payload.authorization;
290
+ const sig = Signature.from(paymentPayload.payload.signature);
291
+ const tx = await token.transferWithAuthorization(auth.from, auth.to, auth.value, auth.validAfter, auth.validBefore, auth.nonce, sig.v, sig.r, sig.s);
292
+ const receipt = await tx.wait(1, timeoutMs);
293
+ if (!receipt || receipt.status !== 1) {
294
+ return {
295
+ success: false,
296
+ errorReason: "SETTLEMENT_REVERTED",
297
+ errorMessage: "paygate: self-settle transaction reverted",
298
+ };
299
+ }
300
+ return { success: true, transaction: receipt.hash, payer: auth.from };
301
+ }
302
+ catch (err) {
303
+ return {
304
+ success: false,
305
+ errorReason: "SELF_SETTLE_ERROR",
306
+ errorMessage: err instanceof Error ? err.message : "paygate: self-settle failed",
307
+ };
308
+ }
205
309
  }
206
310
  function decodePaymentHeader(header) {
207
311
  try {
208
- const decoded = Buffer.from(header, 'base64').toString('utf8');
312
+ const decoded = Buffer.from(header, "base64").toString("utf8");
209
313
  return JSON.parse(decoded);
210
314
  }
211
315
  catch {
@@ -217,9 +321,7 @@ export async function handlePaywall(config, routePrice, resourceUrl, paymentHead
217
321
  // Resolve the merchant: v3 fetch vs v2 shim
218
322
  let resolved;
219
323
  try {
220
- resolved = config.merchantId
221
- ? await fetchMerchantConfig(config)
222
- : resolveV2Shim(config);
324
+ resolved = config.merchantId ? await fetchMerchantConfig(config) : resolveV2Shim(config);
223
325
  }
224
326
  catch (err) {
225
327
  return {
@@ -227,8 +329,8 @@ export async function handlePaywall(config, routePrice, resourceUrl, paymentHead
227
329
  error: {
228
330
  statusCode: 500,
229
331
  body: {
230
- error: err instanceof Error ? err.message : 'paygate: configuration error',
231
- code: 'PAYGATE_CONFIG',
332
+ error: err instanceof Error ? err.message : "paygate: configuration error",
333
+ code: "PAYGATE_CONFIG",
232
334
  },
233
335
  },
234
336
  };
@@ -244,27 +346,26 @@ export async function handlePaywall(config, routePrice, resourceUrl, paymentHead
244
346
  error: {
245
347
  statusCode: 429,
246
348
  body: {
247
- error: 'Too many discovery requests. Try again later.',
248
- code: 'DISCOVERY_RATE_LIMITED',
349
+ error: "Too many discovery requests. Try again later.",
350
+ code: "DISCOVERY_RATE_LIMITED",
249
351
  },
250
352
  },
251
353
  };
252
354
  }
253
355
  }
254
- const domainName = USDC_DOMAIN_NAMES[resolved.network] ?? 'USD Coin';
255
356
  const accepts = [
256
357
  {
257
- scheme: 'exact',
358
+ scheme: "exact",
258
359
  network: resolved.network,
259
360
  amount: priceBaseUnits,
260
361
  resource: resourceUrl,
261
362
  asset: resolved.asset,
262
363
  payTo: resolved.payTo,
263
- extra: { name: domainName, version: '2' },
364
+ extra: { name: resolved.domainName, version: "2" },
264
365
  },
265
366
  ];
266
367
  const challengeBody = {
267
- error: 'Payment Required',
368
+ error: "Payment Required",
268
369
  x402Version: 2,
269
370
  accepts,
270
371
  facilitator: resolved.facilitator,
@@ -290,41 +391,90 @@ export async function handlePaywall(config, routePrice, resourceUrl, paymentHead
290
391
  paid: false,
291
392
  error: {
292
393
  statusCode: 400,
293
- body: { error: 'Invalid X-Payment header', code: 'INVALID_PAYMENT' },
394
+ body: { error: "Invalid X-Payment header", code: "INVALID_PAYMENT" },
294
395
  },
295
396
  };
296
397
  }
297
398
  // Settle via facilitator
298
- const domainName = USDC_DOMAIN_NAMES[resolved.network] ?? 'USD Coin';
299
399
  const accept = {
300
- scheme: 'exact',
400
+ scheme: "exact",
301
401
  network: resolved.network,
302
402
  amount: priceBaseUnits,
303
403
  resource: resourceUrl,
304
404
  asset: resolved.asset,
305
405
  payTo: resolved.payTo,
306
- extra: { name: domainName, version: '2' },
406
+ extra: { name: resolved.domainName, version: "2" },
307
407
  };
308
408
  try {
309
- const res = await fetch(`${resolved.facilitator}/settle`, {
310
- method: 'POST',
311
- headers: { 'Content-Type': 'application/json' },
312
- body: JSON.stringify({
313
- x402Version: 2,
314
- paymentPayload,
315
- paymentRequirements: accept,
316
- }),
317
- signal: AbortSignal.timeout(config.timeout ?? 30_000),
318
- });
319
- const settlement = (await res.json());
409
+ let settlement;
410
+ if (config.selfSettle) {
411
+ // Verify via the facilitator (free — no chain writes), then submit
412
+ // the settlement from the seller's own key: gas is the seller's,
413
+ // per the never-sponsor / never-charge policy.
414
+ const verifyRes = await fetch(`${resolved.facilitator}/verify`, {
415
+ method: "POST",
416
+ headers: { "Content-Type": "application/json" },
417
+ body: JSON.stringify({
418
+ x402Version: 2,
419
+ paymentPayload,
420
+ paymentRequirements: accept,
421
+ }),
422
+ signal: AbortSignal.timeout(config.timeout ?? 30_000),
423
+ });
424
+ const verdict = (await verifyRes.json());
425
+ if (!verdict.isValid) {
426
+ return {
427
+ paid: false,
428
+ error: {
429
+ statusCode: 402,
430
+ body: {
431
+ error: verdict.invalidReason || "Payment verification failed",
432
+ code: verdict.invalidReason || "VERIFICATION_FAILED",
433
+ },
434
+ },
435
+ };
436
+ }
437
+ settlement = await submitSelfSettle(config.selfSettle, paymentPayload, accept, config.timeout ?? 30_000);
438
+ }
439
+ else {
440
+ const res = await fetch(`${resolved.facilitator}/settle`, {
441
+ method: "POST",
442
+ headers: { "Content-Type": "application/json" },
443
+ body: JSON.stringify({
444
+ x402Version: 2,
445
+ paymentPayload,
446
+ paymentRequirements: accept,
447
+ }),
448
+ signal: AbortSignal.timeout(config.timeout ?? 30_000),
449
+ });
450
+ settlement = (await res.json());
451
+ }
320
452
  if (!settlement.success) {
321
453
  return {
322
454
  paid: false,
323
455
  error: {
324
456
  statusCode: 402,
325
457
  body: {
326
- error: settlement.errorMessage || settlement.errorReason || 'Payment settlement failed',
327
- code: settlement.errorReason || 'SETTLEMENT_FAILED',
458
+ error: settlement.errorMessage || settlement.errorReason || "Payment settlement failed",
459
+ code: settlement.errorReason || "SETTLEMENT_FAILED",
460
+ },
461
+ },
462
+ };
463
+ }
464
+ // Validate the successful settlement before trusting it (L7). Require a
465
+ // non-empty transaction hash and, when the facilitator reports a payer,
466
+ // ensure it matches the address that signed the authorization.
467
+ const expectedPayer = paymentPayload.payload.authorization.from;
468
+ if (typeof settlement.transaction !== "string" ||
469
+ settlement.transaction.length === 0 ||
470
+ (settlement.payer && settlement.payer.toLowerCase() !== expectedPayer.toLowerCase())) {
471
+ return {
472
+ paid: false,
473
+ error: {
474
+ statusCode: 502,
475
+ body: {
476
+ error: "Facilitator returned an invalid settlement",
477
+ code: "INVALID_SETTLEMENT",
328
478
  },
329
479
  },
330
480
  };
@@ -335,18 +485,18 @@ export async function handlePaywall(config, routePrice, resourceUrl, paymentHead
335
485
  receipt: {
336
486
  paid: true,
337
487
  txHash: settlement.transaction,
338
- trustTier: 'any', // SDK path has no tier check in v1
488
+ trustTier: "any", // SDK path has no tier check in v1
339
489
  merchant: resolved.slug,
340
490
  },
341
491
  };
342
492
  }
343
493
  catch (err) {
344
- const message = err instanceof Error ? err.message : 'Facilitator unreachable';
494
+ const message = err instanceof Error ? err.message : "Facilitator unreachable";
345
495
  return {
346
496
  paid: false,
347
497
  error: {
348
498
  statusCode: 502,
349
- body: { error: `Facilitator error: ${message}`, code: 'FACILITATOR_ERROR' },
499
+ body: { error: `Facilitator error: ${message}`, code: "FACILITATOR_ERROR" },
350
500
  },
351
501
  };
352
502
  }
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}