@piprail/sdk 2.14.1 → 2.15.0

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.js CHANGED
@@ -32,7 +32,7 @@ import {
32
32
  parseUnits,
33
33
  rejectForeignToken,
34
34
  toInsufficientFundsError
35
- } from "./chunk-NUPCFNC5.js";
35
+ } from "./chunk-3ZWM3DKM.js";
36
36
 
37
37
  // src/drivers/registry.ts
38
38
  var byFamily = /* @__PURE__ */ new Map();
@@ -2382,7 +2382,7 @@ var loaders = {
2382
2382
  solana: async () => {
2383
2383
  let mod;
2384
2384
  try {
2385
- mod = await import("./solana-V2TGLHJ4.js");
2385
+ mod = await import("./solana-MB6G3OA5.js");
2386
2386
  } catch (cause) {
2387
2387
  throw new MissingDriverError(
2388
2388
  `Solana selected, but its packages aren't installed. Run: npm install @solana/web3.js @solana/spl-token bs58`,
@@ -2394,7 +2394,7 @@ var loaders = {
2394
2394
  ton: async () => {
2395
2395
  let mod;
2396
2396
  try {
2397
- mod = await import("./ton-PEBYBNWJ.js");
2397
+ mod = await import("./ton-EJMGM3YI.js");
2398
2398
  } catch (cause) {
2399
2399
  throw new MissingDriverError(
2400
2400
  `TON selected, but its packages aren't installed. Run: npm install @ton/ton @ton/core @ton/crypto`,
@@ -2406,7 +2406,7 @@ var loaders = {
2406
2406
  stellar: async () => {
2407
2407
  let mod;
2408
2408
  try {
2409
- mod = await import("./stellar-J7VE7QP7.js");
2409
+ mod = await import("./stellar-WDWSYOED.js");
2410
2410
  } catch (cause) {
2411
2411
  throw new MissingDriverError(
2412
2412
  `Stellar selected, but its package isn't installed. Run: npm install @stellar/stellar-sdk`,
@@ -2418,7 +2418,7 @@ var loaders = {
2418
2418
  xrpl: async () => {
2419
2419
  let mod;
2420
2420
  try {
2421
- mod = await import("./xrpl-P2D6TS6I.js");
2421
+ mod = await import("./xrpl-Q2UWPCTJ.js");
2422
2422
  } catch (cause) {
2423
2423
  throw new MissingDriverError(
2424
2424
  `XRPL selected, but its package isn't installed. Run: npm install xrpl`,
@@ -2430,7 +2430,7 @@ var loaders = {
2430
2430
  tron: async () => {
2431
2431
  let mod;
2432
2432
  try {
2433
- mod = await import("./tron-ZYJHHROT.js");
2433
+ mod = await import("./tron-VAPVMGJK.js");
2434
2434
  } catch (cause) {
2435
2435
  throw new MissingDriverError(
2436
2436
  `Tron selected, but its package isn't installed. Run: npm install tronweb`,
@@ -2442,7 +2442,7 @@ var loaders = {
2442
2442
  sui: async () => {
2443
2443
  let mod;
2444
2444
  try {
2445
- mod = await import("./sui-GMRQAAJH.js");
2445
+ mod = await import("./sui-GVSFNNJX.js");
2446
2446
  } catch (cause) {
2447
2447
  throw new MissingDriverError(
2448
2448
  `Sui selected, but its package isn't installed. Run: npm install @mysten/sui`,
@@ -2454,7 +2454,7 @@ var loaders = {
2454
2454
  near: async () => {
2455
2455
  let mod;
2456
2456
  try {
2457
- mod = await import("./near-L2OWD7M6.js");
2457
+ mod = await import("./near-YA4Y4IGC.js");
2458
2458
  } catch (cause) {
2459
2459
  throw new MissingDriverError(
2460
2460
  `NEAR selected, but its package isn't installed. Run: npm install near-api-js`,
@@ -2466,7 +2466,7 @@ var loaders = {
2466
2466
  aptos: async () => {
2467
2467
  let mod;
2468
2468
  try {
2469
- mod = await import("./aptos-2FIRTMQX.js");
2469
+ mod = await import("./aptos-J7QGCWNW.js");
2470
2470
  } catch (cause) {
2471
2471
  throw new MissingDriverError(
2472
2472
  `Aptos selected, but its package isn't installed. Run: npm install @aptos-labs/ts-sdk`,
@@ -2478,7 +2478,7 @@ var loaders = {
2478
2478
  algorand: async () => {
2479
2479
  let mod;
2480
2480
  try {
2481
- mod = await import("./algorand-RM7MP4PK.js");
2481
+ mod = await import("./algorand-CSEUTWNW.js");
2482
2482
  } catch (cause) {
2483
2483
  throw new MissingDriverError(
2484
2484
  `Algorand selected, but its package isn't installed. Run: npm install algosdk`,
@@ -5537,17 +5537,20 @@ function formatSpendReport(summary) {
5537
5537
  return `${perAsset} \u2014 grand total: ${grand}`;
5538
5538
  }
5539
5539
  function describeChallenge(challenge) {
5540
- const accepts = Array.isArray(challenge?.accepts) ? challenge.accepts : [];
5541
- const first = accepts[0];
5542
- if (!first) {
5543
- return `${BRAND.name} x402 payment endpoint. Pay with @piprail/sdk (${BRAND.sdkInstall}). Docs: ${BRAND.home}.`;
5544
- }
5545
- const extra = first.extra ?? {};
5546
- const amount = extra.amountFormatted ?? first.amount;
5547
- const token = extra.symbol ?? first.asset;
5548
- const hasExact = accepts.some((a) => a.scheme === "exact");
5549
- const standard = hasExact ? "; or any standard x402 client (an exact rail is offered)" : "";
5550
- return `${BRAND.name} x402 payment endpoint \u2014 pay ${amount} ${token} on ${first.network} to ${first.payTo}. Programmatic: ${BRAND.sdkInstall} then client.fetch(url)${standard}. Docs: ${BRAND.home}.`;
5540
+ const generic = `${BRAND.name} x402 payment endpoint. Pay with @piprail/sdk (${BRAND.sdkInstall}). Docs: ${BRAND.home}.`;
5541
+ try {
5542
+ const accepts = Array.isArray(challenge?.accepts) ? challenge.accepts : [];
5543
+ const first = accepts[0];
5544
+ if (!first) return generic;
5545
+ const extra = first.extra ?? {};
5546
+ const amount = extra.amountFormatted ?? first.amount;
5547
+ const token = extra.symbol ?? first.asset;
5548
+ const hasExact = accepts.some((a) => a?.scheme === "exact");
5549
+ const standard = hasExact ? "; or any standard x402 client (an exact rail is offered)" : "";
5550
+ return `${BRAND.name} x402 payment endpoint \u2014 pay ${amount} ${token} on ${first.network} to ${first.payTo}. Programmatic: ${BRAND.sdkInstall} then client.fetch(url)${standard}. Docs: ${BRAND.home}.`;
5551
+ } catch {
5552
+ return generic;
5553
+ }
5551
5554
  }
5552
5555
 
5553
5556
  // src/agentGuide.ts
@@ -6037,17 +6040,29 @@ function paymentTools(client) {
6037
6040
 
6038
6041
  // src/classify.ts
6039
6042
  function classifyChallenge(challenge, opts) {
6040
- const accepts = Array.isArray(challenge?.accepts) ? challenge.accepts : [];
6041
- const network = opts?.network;
6042
- const schemes = opts?.schemes ?? [];
6043
- const offeredSchemes = [...new Set(accepts.map((a) => a.scheme))];
6044
- const offeredNetworks = [...new Set(accepts.map((a) => a.network))];
6045
- const onClientChain = accepts.some((a) => a.network === network);
6046
- const payableScheme = accepts.some(
6047
- (a) => a.network === network && schemes.includes(a.scheme)
6048
- );
6049
- const verdict = accepts.length === 0 ? "NO_RAIL" : payableScheme ? "PAYABLE_RAIL" : onClientChain ? "UNPAYABLE_SCHEME" : "WRONG_CHAIN";
6050
- return { onClientChain, payableScheme, offeredSchemes, offeredNetworks, verdict };
6043
+ try {
6044
+ const accepts = Array.isArray(challenge?.accepts) ? challenge.accepts : [];
6045
+ const network = opts?.network;
6046
+ const schemes = opts?.schemes ?? [];
6047
+ const offeredSchemes = [
6048
+ ...new Set(accepts.map((a) => a?.scheme).filter((s) => s != null))
6049
+ ];
6050
+ const offeredNetworks = [...new Set(accepts.map((a) => a?.network).filter((n) => n != null))];
6051
+ const onClientChain = accepts.some((a) => a?.network === network);
6052
+ const payableScheme = accepts.some(
6053
+ (a) => a?.network === network && schemes.includes(a?.scheme)
6054
+ );
6055
+ const verdict = accepts.length === 0 ? "NO_RAIL" : payableScheme ? "PAYABLE_RAIL" : onClientChain ? "UNPAYABLE_SCHEME" : "WRONG_CHAIN";
6056
+ return { onClientChain, payableScheme, offeredSchemes, offeredNetworks, verdict };
6057
+ } catch {
6058
+ return {
6059
+ onClientChain: false,
6060
+ payableScheme: false,
6061
+ offeredSchemes: [],
6062
+ offeredNetworks: [],
6063
+ verdict: "NO_RAIL"
6064
+ };
6065
+ }
6051
6066
  }
6052
6067
 
6053
6068
  // src/discovery.ts
@@ -6094,6 +6109,7 @@ function pathOf(url) {
6094
6109
  }
6095
6110
  }
6096
6111
  function buildOpenApi(input) {
6112
+ assertResourceList(input?.resources, "buildOpenApi");
6097
6113
  const paths = {};
6098
6114
  for (const r of input.resources) {
6099
6115
  const path = pathOf(r.url);
@@ -6123,18 +6139,27 @@ function buildOpenApi(input) {
6123
6139
  };
6124
6140
  }
6125
6141
  function buildWellKnownX402(input) {
6142
+ assertResourceList(input?.resources, "buildWellKnownX402");
6126
6143
  return {
6127
6144
  version: 1,
6128
6145
  resources: input.resources.map((r) => r.url),
6129
6146
  ...input.ownershipProofs && input.ownershipProofs.length > 0 ? { ownershipProofs: input.ownershipProofs } : {}
6130
6147
  };
6131
6148
  }
6132
- function buildWellKnownX402Manifest(input) {
6133
- if (!Array.isArray(input?.resources)) {
6134
- throw new InvalidConfigError(
6135
- "buildWellKnownX402Manifest: `resources` must be an array of ResourceDescription."
6136
- );
6149
+ function assertResourceList(resources, fn) {
6150
+ if (!Array.isArray(resources)) {
6151
+ throw new InvalidConfigError(`${fn}: \`resources\` must be an array of ResourceDescription.`);
6137
6152
  }
6153
+ resources.forEach((r, i) => {
6154
+ if (r === null || typeof r !== "object" || typeof r.url !== "string") {
6155
+ throw new InvalidConfigError(
6156
+ `${fn}: resources[${i}] must be a ResourceDescription with a string \`url\`.`
6157
+ );
6158
+ }
6159
+ });
6160
+ }
6161
+ function buildWellKnownX402Manifest(input) {
6162
+ assertResourceList(input?.resources, "buildWellKnownX402Manifest");
6138
6163
  const lastUpdated = typeof input.lastUpdated === "number" && Number.isFinite(input.lastUpdated) ? input.lastUpdated : Math.floor(Date.now() / 1e3);
6139
6164
  return {
6140
6165
  x402Version: 2,
@@ -6684,18 +6709,25 @@ function toInvalidBody(result) {
6684
6709
  return { x402Version: 2, status: "invalid", error: result.error, detail: result.detail };
6685
6710
  }
6686
6711
  function normaliseAccepts(options) {
6687
- if (options.accept && options.accept.length > 0) {
6712
+ if (Array.isArray(options.accept) && options.accept.length > 0) {
6688
6713
  if (options.chain !== void 0 || options.token !== void 0 || options.amount !== void 0) {
6689
- throw new Error(
6714
+ throw new InvalidConfigError(
6690
6715
  "requirePayment: pass EITHER `accept: [...]` (multi-chain) OR `chain`/`token`/`amount` (single) \u2014 not both."
6691
6716
  );
6692
6717
  }
6718
+ options.accept.forEach((a, i) => {
6719
+ if (a === null || typeof a !== "object") {
6720
+ throw new InvalidConfigError(
6721
+ `requirePayment: accept[${i}] must be { chain, token, amount }, got ${a === null ? "null" : typeof a}.`
6722
+ );
6723
+ }
6724
+ });
6693
6725
  return options.accept;
6694
6726
  }
6695
6727
  if (options.chain !== void 0 && options.token !== void 0 && options.amount !== void 0) {
6696
6728
  return [{ chain: options.chain, token: options.token, amount: options.amount }];
6697
6729
  }
6698
- throw new Error(
6730
+ throw new InvalidConfigError(
6699
6731
  "requirePayment: provide either { chain, token, amount } or a non-empty `accept: [{ chain, token, amount }, \u2026]`."
6700
6732
  );
6701
6733
  }
@@ -7467,7 +7499,36 @@ function createPaymentGate(options) {
7467
7499
  await settleTx(idKey, result.kind === "paid");
7468
7500
  return result.kind === "paid" ? echoPaymentIdentifier(result, id) : result;
7469
7501
  }
7470
- return { challenge, verify, verifyObject, describe, landingPage };
7502
+ async function selfTest() {
7503
+ try {
7504
+ const specs = await ready();
7505
+ const warnings = [];
7506
+ const rails = specs.map((s) => {
7507
+ if (!s.symbol) {
7508
+ warnings.push(
7509
+ `${s.asset} on ${s.net.network}: custom token (no built-in symbol) \u2014 double-check the address + decimals.`
7510
+ );
7511
+ }
7512
+ return {
7513
+ network: s.net.network,
7514
+ asset: s.asset,
7515
+ ...s.symbol ? { symbol: s.symbol } : {},
7516
+ decimals: s.decimals,
7517
+ amount: s.amountFormatted,
7518
+ payTo: s.payTo,
7519
+ schemes: [
7520
+ ...s.exact ? ["exact"] : [],
7521
+ ...s.upto ? ["upto"] : [],
7522
+ "onchain-proof"
7523
+ ]
7524
+ };
7525
+ });
7526
+ return { ok: true, rails, warnings };
7527
+ } catch (err) {
7528
+ return { ok: false, rails: [], warnings: [], error: err instanceof Error ? err.message : String(err) };
7529
+ }
7530
+ }
7531
+ return { challenge, verify, verifyObject, describe, landingPage, selfTest };
7471
7532
  }
7472
7533
  function requirePayment(options) {
7473
7534
  if (options.upto) {
@@ -7519,6 +7580,87 @@ function normaliseHeader(value) {
7519
7580
  return value;
7520
7581
  }
7521
7582
 
7583
+ // src/merchant.ts
7584
+ function createPaywall({ token = "USDC", ...rest }) {
7585
+ return createPaymentGate({ token, ...rest });
7586
+ }
7587
+ function createTipJar({ token = "USDC", min, ...rest }) {
7588
+ return createPaymentGate({ token, amount: min, ...rest });
7589
+ }
7590
+
7591
+ // src/adapters.ts
7592
+ function jsonResponse(body, status, headers) {
7593
+ return new Response(JSON.stringify(body), {
7594
+ status,
7595
+ headers: { "content-type": "application/json; charset=utf-8", ...headers ?? {} }
7596
+ });
7597
+ }
7598
+ function withSettlementHeaders(res, receiptHeader) {
7599
+ const headers = new Headers();
7600
+ res.headers.forEach((value, key) => {
7601
+ if (key.toLowerCase() !== "set-cookie") headers.append(key, value);
7602
+ });
7603
+ const src = res.headers;
7604
+ const cookies = typeof src.getSetCookie === "function" ? src.getSetCookie() : (() => {
7605
+ const combined = res.headers.get("set-cookie");
7606
+ return combined ? [combined] : [];
7607
+ })();
7608
+ for (const cookie of cookies) headers.append("set-cookie", cookie);
7609
+ headers.set(HEADER_RESPONSE, receiptHeader);
7610
+ headers.set(HEADER_RESPONSE_V1, receiptHeader);
7611
+ return new Response(res.body, { status: res.status, statusText: res.statusText, headers });
7612
+ }
7613
+ function toFetchHandler(gate, serve) {
7614
+ return async (request, ...rest) => {
7615
+ let result;
7616
+ try {
7617
+ const sig = request.headers.get(HEADER_SIGNATURE) ?? request.headers.get(HEADER_SIGNATURE_V1) ?? void 0;
7618
+ result = await gate.verify(sig);
7619
+ } catch (err) {
7620
+ if (err instanceof SettlementError) {
7621
+ return jsonResponse(
7622
+ {
7623
+ x402Version: 2,
7624
+ error: "settlement_failed",
7625
+ detail: err.message,
7626
+ fallback: "The gasless `exact` settlement failed. This resource also accepts `onchain-proof` \u2014 retry by paying that rail yourself (you broadcast the transfer and pay the gas)."
7627
+ },
7628
+ 502
7629
+ );
7630
+ }
7631
+ throw err;
7632
+ }
7633
+ if (result.kind === "paid") {
7634
+ const res = await serve(request, ...rest);
7635
+ return withSettlementHeaders(res, result.receiptHeader);
7636
+ }
7637
+ return jsonResponse(result.challenge, 402, { [HEADER_REQUIRED]: result.requiredHeader });
7638
+ };
7639
+ }
7640
+ function toWorker(gate, serve) {
7641
+ return { fetch: toFetchHandler(gate, serve) };
7642
+ }
7643
+ function proxyTo(origin) {
7644
+ const base2 = origin.replace(/\/+$/, "");
7645
+ return (request) => {
7646
+ const inUrl = new URL(request.url);
7647
+ const target = base2 + inUrl.pathname + inUrl.search;
7648
+ const headers = new Headers(request.headers);
7649
+ headers.delete(HEADER_SIGNATURE);
7650
+ headers.delete(HEADER_SIGNATURE_V1);
7651
+ const init = {
7652
+ method: request.method,
7653
+ headers,
7654
+ redirect: "manual"
7655
+ };
7656
+ if (request.method !== "GET" && request.method !== "HEAD") {
7657
+ init.body = request.body;
7658
+ init.duplex = "half";
7659
+ }
7660
+ return fetch(target, init);
7661
+ };
7662
+ }
7663
+
7522
7664
  // src/receipts.ts
7523
7665
  var DEFAULT_RETRIES = 5;
7524
7666
  var DEFAULT_TIMEOUT_MS = 1e4;
@@ -8060,6 +8202,8 @@ export {
8060
8202
  createA2APaymentHandler,
8061
8203
  createMcpPaymentTool,
8062
8204
  createPaymentGate,
8205
+ createPaywall,
8206
+ createTipJar,
8063
8207
  decodeBase64Json,
8064
8208
  decorateOutcome,
8065
8209
  deliverReceipt,
@@ -8101,6 +8245,7 @@ export {
8101
8245
  paymentTools,
8102
8246
  pickAccept,
8103
8247
  planAcross,
8248
+ proxyTo,
8104
8249
  rankResources,
8105
8250
  readExactDomain,
8106
8251
  readPaymentIdentifier,
@@ -8118,9 +8263,11 @@ export {
8118
8263
  toA2APaymentFailed,
8119
8264
  toA2APaymentReceipts,
8120
8265
  toA2APaymentRequired,
8266
+ toFetchHandler,
8121
8267
  toInsufficientFundsError,
8122
8268
  toInvalidBody,
8123
8269
  toMcpPaymentRequired,
8124
8270
  toMcpPaymentResponse,
8271
+ toWorker,
8125
8272
  verify402IndexDomain
8126
8273
  };
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- var _chunk57V5DNJTcjs = require('./chunk-57V5DNJT.cjs');
13
+ var _chunk3FR22M3Ocjs = require('./chunk-3FR22M3O.cjs');
14
14
 
15
15
  // src/drivers/near/index.ts
16
16
  var _nearapijs = require('near-api-js');
@@ -61,18 +61,18 @@ async function payNear(params) {
61
61
  return res.hash;
62
62
  } catch (err) {
63
63
  if (isNearRegistrationError(err)) {
64
- throw new (0, _chunk57V5DNJTcjs.RecipientNotReadyError)(
64
+ throw new (0, _chunk3FR22M3Ocjs.RecipientNotReadyError)(
65
65
  `NEAR recipient ${accept.payTo} isn't registered on token ${accept.asset} (NEP-145 storage_deposit) \u2014 register it once (\u22480.00125 NEAR) before it can receive. (NEAR: not registered)`,
66
66
  { cause: err }
67
67
  );
68
68
  }
69
69
  if (isNearAffordability(err)) {
70
- throw new (0, _chunk57V5DNJTcjs.InsufficientFundsError)(
70
+ throw new (0, _chunk3FR22M3Ocjs.InsufficientFundsError)(
71
71
  err instanceof Error ? err.message : "Insufficient NEAR balance for the payment.",
72
72
  { cause: err }
73
73
  );
74
74
  }
75
- throw _nullishCoalesce(_chunk57V5DNJTcjs.toInsufficientFundsError.call(void 0, err), () => ( err));
75
+ throw _nullishCoalesce(_chunk3FR22M3Ocjs.toInsufficientFundsError.call(void 0, err), () => ( err));
76
76
  }
77
77
  }
78
78
  async function payNearNative(params) {
@@ -82,12 +82,12 @@ async function payNearNative(params) {
82
82
  return res.hash;
83
83
  } catch (err) {
84
84
  if (isNearAffordability(err)) {
85
- throw new (0, _chunk57V5DNJTcjs.InsufficientFundsError)(
85
+ throw new (0, _chunk3FR22M3Ocjs.InsufficientFundsError)(
86
86
  err instanceof Error ? err.message : "Insufficient NEAR balance for the payment.",
87
87
  { cause: err }
88
88
  );
89
89
  }
90
- throw _nullishCoalesce(_chunk57V5DNJTcjs.toInsufficientFundsError.call(void 0, err), () => ( err));
90
+ throw _nullishCoalesce(_chunk3FR22M3Ocjs.toInsufficientFundsError.call(void 0, err), () => ( err));
91
91
  }
92
92
  }
93
93
  function isNearRegistrationError(err) {
@@ -109,28 +109,28 @@ var NONCE_BLOCK_MULTIPLIER = 1000000n;
109
109
  async function payExactNear(input) {
110
110
  const { signer, senderId, blockHeight, accessKeyNonce, accept } = input;
111
111
  if (accept.asset === "native") {
112
- throw new (0, _chunk57V5DNJTcjs.UnsupportedSchemeError)(
112
+ throw new (0, _chunk3FR22M3Ocjs.UnsupportedSchemeError)(
113
113
  "NEAR exact is NEP-141-only (an ft_transfer); native NEAR is not exact-payable. Pay via onchain-proof."
114
114
  );
115
115
  }
116
116
  if (!isValidNearAccountId(accept.asset)) {
117
- throw new (0, _chunk57V5DNJTcjs.UnsupportedSchemeError)(`NEAR exact: asset "${accept.asset}" must be a NEP-141 contract account id.`);
117
+ throw new (0, _chunk3FR22M3Ocjs.UnsupportedSchemeError)(`NEAR exact: asset "${accept.asset}" must be a NEP-141 contract account id.`);
118
118
  }
119
119
  if (!isValidNearAccountId(accept.payTo)) {
120
- throw new (0, _chunk57V5DNJTcjs.UnsupportedSchemeError)(`NEAR exact: payTo "${accept.payTo}" is not a valid NEAR account id.`);
120
+ throw new (0, _chunk3FR22M3Ocjs.UnsupportedSchemeError)(`NEAR exact: payTo "${accept.payTo}" is not a valid NEAR account id.`);
121
121
  }
122
122
  if (!isValidNearAccountId(senderId)) {
123
- throw new (0, _chunk57V5DNJTcjs.UnsupportedSchemeError)(`NEAR exact: sender "${senderId}" is not a valid NEAR account id.`);
123
+ throw new (0, _chunk3FR22M3Ocjs.UnsupportedSchemeError)(`NEAR exact: sender "${senderId}" is not a valid NEAR account id.`);
124
124
  }
125
125
  const t = accept.maxTimeoutSeconds;
126
126
  if (!Number.isInteger(t) || t <= 0) {
127
- throw new (0, _chunk57V5DNJTcjs.UnsupportedSchemeError)("NEAR exact: maxTimeoutSeconds must be a positive integer.");
127
+ throw new (0, _chunk3FR22M3Ocjs.UnsupportedSchemeError)("NEAR exact: maxTimeoutSeconds must be a positive integer.");
128
128
  }
129
129
  const timeoutBlocks = BigInt(Math.max(1, Math.ceil(t / ESTIMATED_BLOCK_SECONDS)));
130
130
  const maxBlockHeight = blockHeight + timeoutBlocks;
131
131
  const nonce = accessKeyNonce + 1n;
132
132
  if (nonce >= blockHeight * NONCE_BLOCK_MULTIPLIER) {
133
- throw new (0, _chunk57V5DNJTcjs.UnsupportedSchemeError)(
133
+ throw new (0, _chunk3FR22M3Ocjs.UnsupportedSchemeError)(
134
134
  "NEAR exact: the access-key nonce is at the protocol ceiling for this block height; cannot build a delegate action."
135
135
  );
136
136
  }
@@ -259,7 +259,7 @@ async function verifyAndSettleExactNear(input) {
259
259
  if (/not enough|insufficient|exceeded the prepaid gas|NotEnoughBalance|doesn't have enough|is not registered/i.test(m)) {
260
260
  return fail("tx_reverted", `the ft_transfer would fail on chain: ${shorten(m)}.`);
261
261
  }
262
- throw new (0, _chunk57V5DNJTcjs.SettlementError)(
262
+ throw new (0, _chunk3FR22M3Ocjs.SettlementError)(
263
263
  `NEAR exact settle: the relayer could not submit the delegate (${shorten(m)}). The buyer's signed delegate is still valid \u2014 fund/fix the relayer and the buyer can re-present it.`,
264
264
  { cause: err }
265
265
  );
@@ -408,13 +408,13 @@ function txNotFound(hash) {
408
408
 
409
409
  function assertNearWallet(wallet, network) {
410
410
  if (typeof wallet !== "object" || wallet === null) {
411
- throw new (0, _chunk57V5DNJTcjs.WrongFamilyError)(
411
+ throw new (0, _chunk3FR22M3Ocjs.WrongFamilyError)(
412
412
  `chain ${network} is NEAR; wallet must be { accountId, key } (key = ed25519:\u2026).`
413
413
  );
414
414
  }
415
- _chunk57V5DNJTcjs.assertNoLegacyWalletKey.call(void 0, wallet, "NEAR");
415
+ _chunk3FR22M3Ocjs.assertNoLegacyWalletKey.call(void 0, wallet, "NEAR");
416
416
  if (!("accountId" in wallet) || !("key" in wallet)) {
417
- throw new (0, _chunk57V5DNJTcjs.WrongFamilyError)(
417
+ throw new (0, _chunk3FR22M3Ocjs.WrongFamilyError)(
418
418
  `chain ${network} is NEAR; wallet must be { accountId, key } (key = ed25519:\u2026).`
419
419
  );
420
420
  }
@@ -422,13 +422,13 @@ function assertNearWallet(wallet, network) {
422
422
  }
423
423
  function resolveNearWallet(config) {
424
424
  if (!config.accountId || !config.key) {
425
- throw new (0, _chunk57V5DNJTcjs.WrongFamilyError)("NEAR wallet needs { accountId, key } (key = ed25519:\u2026).");
425
+ throw new (0, _chunk3FR22M3Ocjs.WrongFamilyError)("NEAR wallet needs { accountId, key } (key = ed25519:\u2026).");
426
426
  }
427
427
  let signer;
428
428
  try {
429
429
  signer = _nearapijs.KeyPairSigner.fromSecretKey(config.key);
430
430
  } catch (cause) {
431
- throw new (0, _chunk57V5DNJTcjs.WrongFamilyError)("NEAR wallet { key } is not a valid ed25519:\u2026 secret key.", {
431
+ throw new (0, _chunk3FR22M3Ocjs.WrongFamilyError)("NEAR wallet { key } is not a valid ed25519:\u2026 secret key.", {
432
432
  cause
433
433
  });
434
434
  }
@@ -490,16 +490,16 @@ function makeNearNetwork(preset, rpcUrl) {
490
490
  const info = preset.tokens[token.toUpperCase()];
491
491
  if (!info) {
492
492
  const known = Object.keys(preset.tokens).join(", ") || "(none built in)";
493
- throw new (0, _chunk57V5DNJTcjs.UnknownTokenError)(
493
+ throw new (0, _chunk3FR22M3Ocjs.UnknownTokenError)(
494
494
  `token "${token}" isn't built in for NEAR (known: ${known}). Pass { contractId, decimals } for a custom NEP-141.`
495
495
  );
496
496
  }
497
497
  return { asset: info.contractId, decimals: info.decimals, symbol: info.symbol };
498
498
  }
499
- _chunk57V5DNJTcjs.rejectForeignToken.call(void 0, token, "near", network);
499
+ _chunk3FR22M3Ocjs.rejectForeignToken.call(void 0, token, "near", network);
500
500
  const t = token;
501
501
  if (!t.contractId || typeof t.decimals !== "number") {
502
- throw new (0, _chunk57V5DNJTcjs.WrongFamilyError)(
502
+ throw new (0, _chunk3FR22M3Ocjs.WrongFamilyError)(
503
503
  `chain ${network} is NEAR; a custom token must be { contractId, decimals }.`
504
504
  );
505
505
  }
@@ -518,12 +518,12 @@ function makeNearNetwork(preset, rpcUrl) {
518
518
  },
519
519
  assertValidPayTo(payTo) {
520
520
  if (payTo.startsWith("0x")) {
521
- throw new (0, _chunk57V5DNJTcjs.WrongFamilyError)(
521
+ throw new (0, _chunk3FR22M3Ocjs.WrongFamilyError)(
522
522
  `chain ${network} is NEAR, but payTo "${payTo}" looks like an EVM/Sui 0x address.`
523
523
  );
524
524
  }
525
525
  if (!isValidNearAccountId(payTo)) {
526
- throw new (0, _chunk57V5DNJTcjs.WrongFamilyError)(
526
+ throw new (0, _chunk3FR22M3Ocjs.WrongFamilyError)(
527
527
  `chain ${network} is NEAR, but payTo "${payTo}" is not a valid NEAR account id.`
528
528
  );
529
529
  }
@@ -567,11 +567,11 @@ function makeNearNetwork(preset, rpcUrl) {
567
567
  if (tx && tx.success) return { height: "0" };
568
568
  } catch (e11) {
569
569
  }
570
- throw new (0, _chunk57V5DNJTcjs.ConfirmationTimeoutError)(`NEAR tx ${hash} not confirmed in time.`);
570
+ throw new (0, _chunk3FR22M3Ocjs.ConfirmationTimeoutError)(`NEAR tx ${hash} not confirmed in time.`);
571
571
  },
572
572
  async estimateCost(accept) {
573
573
  if (accept.scheme === "exact") {
574
- return _chunk57V5DNJTcjs.nativeCost.call(void 0, {
574
+ return _chunk3FR22M3Ocjs.nativeCost.call(void 0, {
575
575
  symbol: "NEAR",
576
576
  decimals: NEAR_DECIMALS,
577
577
  fee: 0n,
@@ -579,7 +579,7 @@ function makeNearNetwork(preset, rpcUrl) {
579
579
  detail: "gasless \u2014 the relayer prepays gas + the 1 yocto; the buyer pays 0 NEAR"
580
580
  });
581
581
  }
582
- return _chunk57V5DNJTcjs.nativeCost.call(void 0, {
582
+ return _chunk3FR22M3Ocjs.nativeCost.call(void 0, {
583
583
  symbol: "NEAR",
584
584
  decimals: NEAR_DECIMALS,
585
585
  fee: 1500000000000000000000n,
@@ -701,7 +701,7 @@ function makeNearNetwork(preset, rpcUrl) {
701
701
  try {
702
702
  relayerWallet = resolveNearWallet(relayer._native);
703
703
  } catch (err) {
704
- throw new (0, _chunk57V5DNJTcjs.SettlementError)(
704
+ throw new (0, _chunk3FR22M3Ocjs.SettlementError)(
705
705
  `NEAR exact settle: the relayer wallet is invalid (${err instanceof Error ? err.message : String(err)}).`,
706
706
  { cause: err }
707
707
  );
@@ -10,7 +10,7 @@ import {
10
10
  nativeCost,
11
11
  rejectForeignToken,
12
12
  toInsufficientFundsError
13
- } from "./chunk-NUPCFNC5.js";
13
+ } from "./chunk-3ZWM3DKM.js";
14
14
 
15
15
  // src/drivers/near/index.ts
16
16
  import { JsonRpcProvider, Account, actions as actions2 } from "near-api-js";
@@ -8,7 +8,7 @@ import {
8
8
  nativeCost,
9
9
  rejectForeignToken,
10
10
  toInsufficientFundsError
11
- } from "./chunk-NUPCFNC5.js";
11
+ } from "./chunk-3ZWM3DKM.js";
12
12
 
13
13
  // src/drivers/solana/index.ts
14
14
  import { Connection, PublicKey as PublicKey3 } from "@solana/web3.js";