@dexterai/x402 1.8.0 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -193,12 +193,12 @@ var FacilitatorClient = class {
193
193
  const kind = supported.kinds.find(
194
194
  (k) => k.x402Version === 2 && k.scheme === "exact" && k.network === network
195
195
  );
196
- if (!kind?.extra?.feePayer) {
196
+ if (!kind) {
197
197
  throw new Error(
198
- `Facilitator does not support network "${network}" with scheme "exact", or feePayer not provided`
198
+ `Facilitator does not support network "${network}" with scheme "exact"`
199
199
  );
200
200
  }
201
- return kind.extra.feePayer;
201
+ return kind.extra?.feePayer;
202
202
  }
203
203
  /**
204
204
  * Get extra data for a network (feePayer, decimals, EIP-712 data, etc.)
@@ -324,15 +324,15 @@ function createX402Server(config) {
324
324
  if (!cachedExtra) {
325
325
  cachedExtra = await facilitator.getNetworkExtra(network);
326
326
  }
327
- if (!cachedExtra?.feePayer) {
327
+ const isSvm = network.startsWith("solana:");
328
+ if (isSvm && !cachedExtra?.feePayer) {
328
329
  throw new Error(`Facilitator does not provide feePayer for network "${network}"`);
329
330
  }
330
331
  return {
331
- feePayer: cachedExtra.feePayer,
332
- decimals: cachedExtra.decimals ?? asset.decimals,
333
- // Include any additional EIP-712 data for EVM chains
334
- name: cachedExtra.name,
335
- version: cachedExtra.version
332
+ ...cachedExtra?.feePayer ? { feePayer: cachedExtra.feePayer } : {},
333
+ decimals: cachedExtra?.decimals ?? asset.decimals,
334
+ name: cachedExtra?.name,
335
+ version: cachedExtra?.version
336
336
  };
337
337
  }
338
338
  async function buildPaymentAccept(resolvedPayTo, options) {
@@ -470,6 +470,14 @@ function x402Middleware(config) {
470
470
  const servers = /* @__PURE__ */ new Map();
471
471
  for (const net of configuredNetworks) {
472
472
  const netPayTo = resolvePayToForNetwork(payTo, net);
473
+ if (typeof netPayTo === "function" && netPayTo._stripeNetwork) {
474
+ const stripeNet = netPayTo._stripeNetwork;
475
+ if (net !== stripeNet) {
476
+ throw new Error(
477
+ `stripePayTo is configured for "${stripeNet}" but middleware includes network "${net}". Stripe only supports Base deposit addresses. Use a static payTo for other chains.`
478
+ );
479
+ }
480
+ }
473
481
  servers.set(net, createX402Server({
474
482
  payTo: netPayTo,
475
483
  network: net,
@@ -596,6 +604,9 @@ function x402Middleware(config) {
596
604
  }
597
605
 
598
606
  // src/server/browser-support.ts
607
+ function esc(s) {
608
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
609
+ }
599
610
  var USDC_ICON_SVG = `<svg width="18" height="18" viewBox="0 0 2000 2000" xmlns="http://www.w3.org/2000/svg"><path d="M1000 2000c554.17 0 1000-445.83 1000-1000S1554.17 0 1000 0 0 445.83 0 1000s445.83 1000 1000 1000z" fill="#2775ca"/><path d="M1275 1158.33c0-145.83-87.5-195.83-262.5-216.66-125-16.67-150-50-150-108.34s41.67-95.83 125-95.83c75 0 116.67 25 137.5 87.5 4.17 12.5 16.67 20.83 29.17 20.83h66.66c16.67 0 29.17-12.5 29.17-29.16v-4.17c-16.67-91.67-91.67-162.5-187.5-170.83v-100c0-16.67-12.5-29.17-33.33-33.34h-62.5c-16.67 0-29.17 12.5-33.34 33.34v95.83c-125 16.67-204.16 100-204.16 204.17 0 137.5 83.33 191.66 258.33 212.5 116.67 20.83 154.17 45.83 154.17 112.5s-58.34 112.5-137.5 112.5c-108.34 0-145.84-45.84-158.34-108.34-4.16-16.66-16.66-25-29.16-25h-70.84c-16.66 0-29.16 12.5-29.16 29.17v4.17c16.66 104.16 83.33 179.16 220.83 200v100c0 16.66 12.5 29.16 33.33 33.33h62.5c16.67 0 29.17-12.5 33.34-33.33v-100c125-20.84 208.33-108.34 208.33-220.84z" fill="#fff"/><path d="M787.5 1595.83c-325-116.66-491.67-479.16-370.83-800 62.5-175 200-308.33 370.83-370.83 16.67-8.33 25-20.83 25-41.67V325c0-16.67-8.33-29.17-25-33.33-4.17 0-12.5 0-16.67 4.16-395.83 125-612.5 545.84-487.5 941.67 75 233.33 254.17 412.5 487.5 487.5 16.67 8.33 33.34 0 37.5-16.67 4.17-4.16 4.17-8.33 4.17-16.66v-58.34c0-12.5-12.5-29.16-25-37.5zM1229.17 295.83c-16.67-8.33-33.34 0-37.5 16.67-4.17 4.17-4.17 8.33-4.17 16.67v58.33c0 16.67 12.5 33.33 25 41.67 325 116.66 491.67 479.16 370.83 800-62.5 175-200 308.33-370.83 370.83-16.67 8.33-25 20.83-25 41.67V1700c0 16.67 8.33 29.17 25 33.33 4.17 0 12.5 0 16.67-4.16 395.83-125 612.5-545.84 487.5-941.67-75-237.5-258.34-416.67-487.5-491.67z" fill="#fff"/></svg>`;
600
611
  var DEXTER_CREST_SVG = `<svg width="36" height="36" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg"><g><path fill="#F2681A" d="m324.93,313.11c-115.5,0-231,0-350,0l350,0z"/><path fill="#FDFAF5" d="m230.43,50.62c1.1.85 2.19 1.7 3.32 2.57 6.02 4.8 11.77 9.88 17.46 15.07.92.84.92.84 1.86 1.69 1.82 1.69 3.59 3.42 5.35 5.16.61.56 1.22 1.13 1.84 1.71 5.66 5.76 6.18 10.43 6.13 18.3.02 1.16.04 2.32.06 3.52.06 3.83.06 7.65.07 11.48.02 2.68.05 5.35.08 8.03.05 5.6.09 11.21.1 16.81.02 7.15.09 14.31.17 21.46.06 5.53.1 11.05.13 16.58.02 2.64.04 5.27.07 7.91.18 17.58.12 32.82-11.24 47.32-7.35 7.27-16.54 12.06-25.42 17.22-1.97 1.16-3.94 2.33-5.91 3.49-7.16 4.24-14.34 8.44-21.53 12.62-4.8 2.79-9.59 5.6-14.38 8.42-1.25.73-2.5 1.47-3.79 2.23-2.32 1.36-4.64 2.73-6.96 4.1-27.47 16.09-27.47 16.09-42.16 12.93-8.06-2.28-14.94-5.82-22.16-10.02-1.17-.67-2.34-1.34-3.54-2.04-24.55-14.25-43.58-27.03-51.9-55.58-1.07-4.58-1.54-8.92-1.52-13.61.28-9.5.28-9.5-3.3-17.97-1.81-1.49-3.68-2.92-5.59-4.28-9.19-7.06-12.7-20.03-14.18-31.06-.54-5.77-.55-11.56-.6-17.35-.03-1.32-.07-2.63-.1-3.99-.01-1.26-.02-2.53-.03-3.83-.02-1.15-.03-2.29-.05-3.47.72-4.02 1.94-5.36 5.21-7.74 2.89-.53 2.89-.53 6.07-.46 1.71.02 1.71.02 3.46.05 1.19.04 2.37.08 3.59.12 1.2.02 2.41.04 3.65.06 2.97.05 5.93.13 8.9.23.14-1.35.29-2.7.43-4.08.63-5 1.78-9.74 3.14-14.58.22-.79.43-1.59.66-2.4.53-1.92 1.06-3.84 1.6-5.76-1.55-.45-1.55-.45-3.13-.9-9.52-3.52-17.1-10.95-21.37-20.1-3.81-9.26-3.87-20.34-.29-29.68 6.49-13.99 16.36-23.23 30.66-29.01 49.81-17.69 115.79 8.35 155.13 38.85z"/><path fill="#F2671A" d="m142.93,22.62c.86.19 1.73.39 2.62.59 36.12 8.21 68.79 24.98 95.38 50.75 1.02.98 2.03 1.97 3.08 2.98 10.84 10.66 10.84 10.66 11.05 14.62-2.06 3.55-5.44 4.18-9.17 5.3-.79.25-1.59.49-2.41.75-28.13 8.43-60.95 6.37-87.13-7.16-.86-.49-1.71-.97-2.6-1.48-7.37-4.05-12.59-3.36-20.59-1.54-22.76 4-48.47 1.53-68.69-9.74-4.88-3.88-8.23-8.29-10.21-14.22-.93-10.38-.67-18.44 5.83-26.83 19.57-23.38 55.99-20.36 82.83-14z"/><path fill="#F16619" d="m44.93,129.12c27.36-.03 54.72-.05 82.08-.06 12.7-.01 25.41-.01 38.11-.03 11.07-.01 22.14-.02 33.2-.02 5.86 0 11.73-.01 17.59-.01 5.51-.01 11.03-.01 16.54-.01 2.03 0 4.06 0 6.09-.01 2.76-.01 5.52 0 8.28 0 .81 0 1.63-.01 2.47-.01 5.51.02 5.51.02 6.81 1.32.22 3.43.22 3.43 0 7-2.75 2.75-3.42 2.66-7.15 2.82-1.41.07-1.41.07-2.85.14-1.47.05-1.47.05-2.98.11-1.49.07-1.49.07-3 .14-2.45.11-4.9.21-7.35.3-.2 1.3-.4 2.59-.6 3.93-2.57 16.08-5.93 29.89-18.89 40.86-10.35 7.28-21.87 8.49-34.17 7.71-13.11-2.33-22.52-9.19-30.33-19.83-4.49-7.64-4.8-17.05-5.83-25.67-4.24.39-8.47.77-12.83 1.17-.28 1.84-.28 1.84-.56 3.71-2.32 14.39-5.63 23.35-16.95 33.11-2.32 1.67-2.32 1.67-4.65 1.67 4 4.67 9.06 6.59 14.87 8.24 3.79 1.09 3.79 1.09 6.12 3.43-.65 5.31-.65 5.31-2.33 7-8.42-.27-15.13-2.29-22.17-7-1.09-1.21-2.17-2.43-3.25-3.65-2.72-2.81-4.45-3.84-8.36-4.16-1.67-.02-3.34-.02-5.01.01-1.77-.04-3.54-.09-5.3-.15-1.27-.04-1.27-.04-2.56-.08-9.26-.54-17.6-4.56-24.51-10.64-9.58-11.11-11.03-22.56-10.72-36.82.02-1.4.03-2.8.05-4.24.04-3.42.1-6.85.17-10.27z"/><path fill="#F26117" d="m172.68,203.08c7.27.09 13.23 1.97 18.87 6.65 2.88 3.07 3.86 5.12 4.25 9.32-.12 1.01-.24 2.02-.36 3.06-2.55.95-2.55.95-5.83 1.17-3.28-2.84-3.28-2.84-5.83-5.83-.36.58-.71 1.16-1.08 1.75-7.6 11.29-20.06 17.74-33.05 21.09-20.36 3.1-36.81-1.66-53.37-13.73-2.33-2.11-2.33-2.11-4.67-5.61.42-3.45.99-4.49 3.5-7 4.07.37 5.95 2.13 8.75 4.96 9.81 8.93 22.53 11.87 35.51 11.69 11.74-1.05 22.38-5.85 31.57-13.15 2.06-2.45 2.06-2.45 3.5-4.67-1.66.07-1.66.07-3.35.15-3.65-.15-3.65-.15-5.98-2.48.75-6.18 1.46-7.19 7.58-7.36z"/></g></svg>`;
601
612
  var DEXTER_STYLES = `
@@ -855,22 +866,22 @@ function generatePaywallHtml(paymentRequiredHeader, requestUrl, method, config,
855
866
  } catch {
856
867
  }
857
868
  const chainName = network.includes("solana") ? "Solana" : network.includes("eip155") ? "Base" : "";
858
- const endpointSection = config.showEndpoint ? `<div class="endpoint"><code>${method} ${requestUrl}</code></div>` : "";
869
+ const endpointSection = config.showEndpoint ? `<div class="endpoint"><code>${esc(method)} ${esc(requestUrl)}</code></div>` : "";
859
870
  return `<!DOCTYPE html>
860
871
  <html lang="en">
861
872
  <head>
862
873
  <meta charset="utf-8">
863
874
  <meta name="viewport" content="width=device-width,initial-scale=1">
864
- <title>${config.title} \u2014 ${price} USDC</title>
875
+ <title>${esc(config.title)} \u2014 ${esc(price)} USDC</title>
865
876
  <style>${DEXTER_STYLES}${PAY_BUTTON_STYLES}</style>
866
877
  </head>
867
878
  <body>
868
879
  <div class="card">
869
880
  <div class="crest">${DEXTER_CREST_SVG}</div>
870
- <h1>${config.title}</h1>
871
- <p class="desc">${description}</p>
872
- <div class="price">${USDC_ICON_SVG}<span id="price-value">${price}</span></div>
873
- <div class="chain">${chainName}${chainName ? " network" : ""}</div>
881
+ <h1>${esc(config.title)}</h1>
882
+ <p class="desc">${esc(description)}</p>
883
+ <div class="price">${USDC_ICON_SVG}<span id="price-value">${esc(price)}</span></div>
884
+ <div class="chain">${esc(chainName)}${chainName ? " network" : ""}</div>
874
885
  ${endpointSection}
875
886
 
876
887
  <div id="pay-section" class="pay-section" style="display:none">
@@ -1004,11 +1015,15 @@ function x402AccessPass(config) {
1004
1015
  facilitatorUrl,
1005
1016
  tiers: tierPrices,
1006
1017
  ratePerHour,
1007
- secret = import_crypto.default.randomBytes(32),
1018
+ secret: explicitSecret,
1008
1019
  issuer = "x402-access-pass",
1009
1020
  verbose = false,
1010
1021
  description
1011
1022
  } = config;
1023
+ const secret = explicitSecret ?? import_crypto.default.randomBytes(32);
1024
+ if (!explicitSecret) {
1025
+ console.warn("[x402:access-pass] No secret provided \u2014 access passes will be invalidated on server restart. Set `secret` for production use.");
1026
+ }
1012
1027
  if (!tierPrices && !ratePerHour) {
1013
1028
  throw new Error("x402AccessPass: at least one of `tiers` or `ratePerHour` is required");
1014
1029
  }
@@ -2042,6 +2057,7 @@ function stripePayTo(secretKeyOrConfig) {
2042
2057
  network: caip2Network,
2043
2058
  facilitatorUrl: "https://x402.dexter.cash"
2044
2059
  };
2060
+ provider._stripeNetwork = caip2Network;
2045
2061
  return provider;
2046
2062
  }
2047
2063
  // Annotate the CommonJS export names for ESM import in node: