@relai-fi/x402 0.5.11 → 0.5.13

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/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { DynamicPrice, PaymentInfo, ProtectOptions, default as Relai, RelaiIntegritasFlow, RelaiIntegritasOptions, RelaiServerConfig, SettleResult, StripePayTo, default, stripePayTo } from './server.cjs';
2
- export { RelayWebSocketFactory, RelayWebSocketLike, X402Client, X402ClientConfig, X402FetchInit, X402IntegritasConfig, X402IntegritasFlow, X402RelayWsConfig, X402RelayWsError, X402RelayWsResponse, X402RequestOptions, default as createX402Client } from './client.cjs';
2
+ export { RelayWebSocketFactory, RelayWebSocketLike, X402Client, X402ClientConfig, X402FetchInit, X402IntegritasConfig, X402IntegritasFlow, X402NetworkSelectionMode, X402RelayWsConfig, X402RelayWsError, X402RelayWsResponse, X402RequestOptions, default as createX402Client } from './client.cjs';
3
3
  export { A as AcceptsExtra, B as BASE_MAINNET_NETWORK, C as CAIP2_TO_NETWORK, b as CHAIN_IDS, E as EXPLORER_TX_URL, l as EvmWallet, N as NETWORK_CAIP2, e as NETWORK_LABELS, d as NETWORK_TOKENS, c as NetworkToken, P as PaymentAccept, o as PaymentRequired, R as RELAI_FACILITATOR_URL, h as RELAI_NETWORKS, a as RelaiNetwork, m as ResourceInfo, S as SOLANA_MAINNET_NETWORK, k as SolanaWallet, U as USDC_ADDRESSES, g as USDC_BASE, f as USDC_SOLANA, W as WalletSet, j as isEvm, i as isSolana, n as normalizeNetwork, r as resolveToken } from './types-CWtUxi3l.cjs';
4
4
  export { NETWORK_V1_TO_V2, NETWORK_V2_TO_V1, convertPayloadToVersion, convertV1ToV2, convertV2ToV1, detectPayloadVersion, formatUsd, fromAtomicUnits, isEvmNetwork, isSolanaNetwork, networkV1ToV2, networkV2ToV1, normalizePaymentHeader, toAtomicUnits } from './utils/index.cjs';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { DynamicPrice, PaymentInfo, ProtectOptions, default as Relai, RelaiIntegritasFlow, RelaiIntegritasOptions, RelaiServerConfig, SettleResult, StripePayTo, default, stripePayTo } from './server.js';
2
- export { RelayWebSocketFactory, RelayWebSocketLike, X402Client, X402ClientConfig, X402FetchInit, X402IntegritasConfig, X402IntegritasFlow, X402RelayWsConfig, X402RelayWsError, X402RelayWsResponse, X402RequestOptions, default as createX402Client } from './client.js';
2
+ export { RelayWebSocketFactory, RelayWebSocketLike, X402Client, X402ClientConfig, X402FetchInit, X402IntegritasConfig, X402IntegritasFlow, X402NetworkSelectionMode, X402RelayWsConfig, X402RelayWsError, X402RelayWsResponse, X402RequestOptions, default as createX402Client } from './client.js';
3
3
  export { A as AcceptsExtra, B as BASE_MAINNET_NETWORK, C as CAIP2_TO_NETWORK, b as CHAIN_IDS, E as EXPLORER_TX_URL, l as EvmWallet, N as NETWORK_CAIP2, e as NETWORK_LABELS, d as NETWORK_TOKENS, c as NetworkToken, P as PaymentAccept, o as PaymentRequired, R as RELAI_FACILITATOR_URL, h as RELAI_NETWORKS, a as RelaiNetwork, m as ResourceInfo, S as SOLANA_MAINNET_NETWORK, k as SolanaWallet, U as USDC_ADDRESSES, g as USDC_BASE, f as USDC_SOLANA, W as WalletSet, j as isEvm, i as isSolana, n as normalizeNetwork, r as resolveToken } from './types-CWtUxi3l.js';
4
4
  export { NETWORK_V1_TO_V2, NETWORK_V2_TO_V1, convertPayloadToVersion, convertV1ToV2, convertV2ToV1, detectPayloadVersion, formatUsd, fromAtomicUnits, isEvmNetwork, isSolanaNetwork, networkV1ToV2, networkV2ToV1, normalizePaymentHeader, toAtomicUnits } from './utils/index.js';
package/dist/index.js CHANGED
@@ -137,6 +137,14 @@ var NETWORK_TOKENS = {
137
137
  decimals: 6,
138
138
  domainVersion: "2",
139
139
  isStableUsd: true
140
+ },
141
+ {
142
+ address: "0xB6BB22f4D1e58E9E43eFa2ec7F572D215B3CF08a",
143
+ symbol: "BBRL",
144
+ name: "Braza BRL",
145
+ decimals: 18,
146
+ domainVersion: "2",
147
+ isStableUsd: false
140
148
  }
141
149
  ],
142
150
  "ethereum": [
@@ -235,7 +243,8 @@ var USD_PRICE_CACHE_TTL_MS = 60 * 1e3;
235
243
  var usdPriceCache = /* @__PURE__ */ new Map();
236
244
  var COINGECKO_ID_BY_SYMBOL = {
237
245
  WETH: "ethereum",
238
- WBTC: "bitcoin"
246
+ WBTC: "bitcoin",
247
+ BBRL: "braza-brl"
239
248
  };
240
249
  function isStableUsdToken(token) {
241
250
  if (token.isStableUsd === true) return true;
@@ -648,6 +657,7 @@ function createX402Client(config) {
648
657
  facilitatorUrl = RELAI_FACILITATOR_URL,
649
658
  relayWs,
650
659
  preferredNetwork,
660
+ networkSelectionMode = "prefer_then_any",
651
661
  solanaRpcUrl = "https://api.mainnet-beta.solana.com",
652
662
  evmRpcUrls = {},
653
663
  maxAmountAtomic,
@@ -1084,23 +1094,45 @@ function createX402Client(config) {
1084
1094
  headers
1085
1095
  });
1086
1096
  }
1097
+ function selectAcceptForWallet(a) {
1098
+ const net = a.network || "";
1099
+ if (isSolana(net) && hasSolanaWallet) {
1100
+ return { accept: a, chain: "solana" };
1101
+ }
1102
+ if (isEvm(net) && effectiveWallets.evm) {
1103
+ return { accept: a, chain: "evm" };
1104
+ }
1105
+ return null;
1106
+ }
1107
+ function buildNoWalletError(accepts, isWs) {
1108
+ const networks = accepts.map((a) => a.network).join(", ");
1109
+ if (preferredNetwork && networkSelectionMode === "strict_preferred") {
1110
+ const preferredCaip2 = NETWORK_CAIP2[preferredNetwork];
1111
+ return `[relai-x402] Preferred network ${preferredNetwork} (${preferredCaip2}) is required, but no compatible wallet is connected. Available networks: ${networks}`;
1112
+ }
1113
+ return `[relai-x402] No wallet available for${isWs ? " WS" : ""} networks: ${networks}`;
1114
+ }
1087
1115
  function selectAccept(accepts) {
1088
1116
  if (preferredNetwork) {
1089
1117
  const caip2 = NETWORK_CAIP2[preferredNetwork];
1090
1118
  for (const a of accepts) {
1091
1119
  const net = a.network || "";
1092
1120
  if (net === preferredNetwork || net === caip2) {
1093
- const chain = isSolana(net) ? "solana" : "evm";
1094
- if (chain === "solana" && hasSolanaWallet || chain === "evm" && effectiveWallets.evm) {
1095
- return { accept: a, chain };
1121
+ const selected = selectAcceptForWallet(a);
1122
+ if (selected) {
1123
+ return selected;
1096
1124
  }
1097
1125
  }
1098
1126
  }
1127
+ if (networkSelectionMode === "strict_preferred") {
1128
+ return null;
1129
+ }
1099
1130
  }
1100
1131
  for (const a of accepts) {
1101
- const net = a.network || "";
1102
- if (isSolana(net) && hasSolanaWallet) return { accept: a, chain: "solana" };
1103
- if (isEvm(net) && effectiveWallets.evm) return { accept: a, chain: "evm" };
1132
+ const selected = selectAcceptForWallet(a);
1133
+ if (selected) {
1134
+ return selected;
1135
+ }
1104
1136
  }
1105
1137
  return null;
1106
1138
  }
@@ -1424,8 +1456,7 @@ function createX402Client(config) {
1424
1456
  }
1425
1457
  const wsSelected = selectAccept(wsAccepts);
1426
1458
  if (!wsSelected) {
1427
- const networks = wsAccepts.map((a) => a.network).join(", ");
1428
- throw new Error(`[relai-x402] No wallet available for WS networks: ${networks}`);
1459
+ throw new Error(buildNoWalletError(wsAccepts, true));
1429
1460
  }
1430
1461
  const { accept: accept2, chain: chain2 } = wsSelected;
1431
1462
  const amount2 = accept2.amount || accept2.maxAmountRequired;
@@ -1497,8 +1528,7 @@ function createX402Client(config) {
1497
1528
  if (!accepts.length) throw new Error("[relai-x402] No payment options in 402 response");
1498
1529
  const selected = selectAccept(accepts);
1499
1530
  if (!selected) {
1500
- const networks = accepts.map((a) => a.network).join(", ");
1501
- throw new Error(`[relai-x402] No wallet available for networks: ${networks}`);
1531
+ throw new Error(buildNoWalletError(accepts, false));
1502
1532
  }
1503
1533
  const { accept, chain } = selected;
1504
1534
  const amount = accept.amount || accept.maxAmountRequired;