@piprail/sdk 2.7.0 → 2.8.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/CHANGELOG.md +34 -0
- package/dist/{algorand-TMA62DN2.cjs → algorand-EKD34T4Q.cjs} +32 -32
- package/dist/{algorand-WB6PBJU4.js → algorand-WJL6VRXW.js} +1 -1
- package/dist/{aptos-JQMZNTMD.cjs → aptos-CVHLVMAF.cjs} +31 -31
- package/dist/{aptos-QAAXIUY3.js → aptos-WMPFEASY.js} +1 -1
- package/dist/{chunk-JG6KRAW6.cjs → chunk-VPENSVOI.cjs} +8 -0
- package/dist/{chunk-7XK22JSQ.js → chunk-W3HOMXOF.js} +8 -0
- package/dist/index.cjs +106 -101
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +16 -11
- package/dist/{near-H5AQ253I.cjs → near-NYFMX2KA.cjs} +26 -26
- package/dist/{near-OTPQD6BI.js → near-QV4IOZNX.js} +1 -1
- package/dist/{solana-M3VOHCMO.cjs → solana-L342QCSV.cjs} +64 -33
- package/dist/{solana-3FMCWSEE.js → solana-Z34OWXMO.js} +33 -2
- package/dist/{stellar-U5NCRIOJ.js → stellar-PWC4LETJ.js} +1 -1
- package/dist/{stellar-FW6C6FBE.cjs → stellar-YEXRVR3W.cjs} +20 -20
- package/dist/{sui-47C2KEZI.cjs → sui-EFRSCDWN.cjs} +16 -16
- package/dist/{sui-Y53M4GUM.js → sui-VEOGHBYE.js} +1 -1
- package/dist/{ton-MMPKWT6N.cjs → ton-LZKJWYHV.cjs} +25 -21
- package/dist/{ton-5ZPT5PSP.js → ton-N7KSPSAR.js} +11 -7
- package/dist/{tron-JOT4STIG.cjs → tron-DQU4WTGQ.cjs} +24 -24
- package/dist/{tron-WYS4X2I5.js → tron-WKDUQVZR.js} +1 -1
- package/dist/{xrpl-2MZEOIFY.js → xrpl-6B4IYRWI.js} +1 -1
- package/dist/{xrpl-PECT4IMX.cjs → xrpl-K3U3SBF4.cjs} +20 -20
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
var
|
|
27
|
+
var _chunkVPENSVOIcjs = require('./chunk-VPENSVOI.cjs');
|
|
28
28
|
|
|
29
29
|
// src/drivers/registry.ts
|
|
30
30
|
var byFamily = /* @__PURE__ */ new Map();
|
|
@@ -53,13 +53,13 @@ function resolveNetwork(opts) {
|
|
|
53
53
|
const family = familyForChain(opts.chain);
|
|
54
54
|
const driver = byFamily.get(family);
|
|
55
55
|
if (!driver) {
|
|
56
|
-
throw new (0,
|
|
56
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedNetworkError)(
|
|
57
57
|
`No driver registered for the "${family}" family \u2014 it may not be mounted yet (use the async resolveNetwork()).`
|
|
58
58
|
);
|
|
59
59
|
}
|
|
60
60
|
const net = driver.resolve(opts);
|
|
61
61
|
if (!net) {
|
|
62
|
-
throw new (0,
|
|
62
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedNetworkError)(
|
|
63
63
|
`The ${family} driver didn't recognise this chain input.`
|
|
64
64
|
);
|
|
65
65
|
}
|
|
@@ -320,12 +320,12 @@ function resolveChain(input, rpcUrlOverride) {
|
|
|
320
320
|
|
|
321
321
|
var _accounts = require('viem/accounts');
|
|
322
322
|
function createWalletAdapter(config, resolved) {
|
|
323
|
-
|
|
323
|
+
_chunkVPENSVOIcjs.assertNoLegacyWalletKey.call(void 0, config, "EVM");
|
|
324
324
|
if ("key" in config) {
|
|
325
325
|
const key = config.key;
|
|
326
326
|
if (typeof key !== "string" || !/^0x[0-9a-fA-F]{64}$/.test(key)) {
|
|
327
327
|
const hint = typeof key === "string" && !key.startsWith("0x") ? " (got a non-0x string \u2014 a base58/seed key belongs to another family; pass { key } as the EVM chain's 0x\u2026 hex secret)." : " (expected 0x followed by 64 hex characters).";
|
|
328
|
-
throw new (0,
|
|
328
|
+
throw new (0, _chunkVPENSVOIcjs.WrongFamilyError)(
|
|
329
329
|
`chain is EVM; the wallet { key } is not a valid 0x\u2026 32-byte hex private key${hint}`
|
|
330
330
|
);
|
|
331
331
|
}
|
|
@@ -333,7 +333,7 @@ function createWalletAdapter(config, resolved) {
|
|
|
333
333
|
try {
|
|
334
334
|
account = _accounts.privateKeyToAccount.call(void 0, key);
|
|
335
335
|
} catch (err) {
|
|
336
|
-
throw new (0,
|
|
336
|
+
throw new (0, _chunkVPENSVOIcjs.WrongFamilyError)(
|
|
337
337
|
`chain is EVM; the wallet { key } is not a valid 0x\u2026 32-byte hex private key: ${err instanceof Error ? err.message : String(err)}.`
|
|
338
338
|
);
|
|
339
339
|
}
|
|
@@ -343,12 +343,12 @@ function createWalletAdapter(config, resolved) {
|
|
|
343
343
|
}
|
|
344
344
|
const wc = config.walletClient;
|
|
345
345
|
if (!wc.account) {
|
|
346
|
-
throw new (0,
|
|
346
|
+
throw new (0, _chunkVPENSVOIcjs.WrongFamilyError)(
|
|
347
347
|
"chain is EVM; the provided walletClient has no attached account. Use `createWalletClient({ account, chain, transport })`, or pass { key }."
|
|
348
348
|
);
|
|
349
349
|
}
|
|
350
350
|
if (wc.chain && wc.chain.id !== resolved.chainId) {
|
|
351
|
-
throw new (0,
|
|
351
|
+
throw new (0, _chunkVPENSVOIcjs.WrongChainError)(
|
|
352
352
|
`PipRailClient: walletClient is on chain ${wc.chain.id} but the SDK was configured with chain ${resolved.chainId}. They must match.`
|
|
353
353
|
);
|
|
354
354
|
}
|
|
@@ -678,7 +678,7 @@ async function payExactEvm(input) {
|
|
|
678
678
|
code = void 0;
|
|
679
679
|
}
|
|
680
680
|
if (code && code !== "0x") {
|
|
681
|
-
throw new (0,
|
|
681
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedSchemeError)(
|
|
682
682
|
`exact buyer rail requires an EOA signer; ${account.address} is a contract / EIP-1271 / EIP-7702-delegated account (no recoverable ECDSA signature). Pay via onchain-proof.`
|
|
683
683
|
);
|
|
684
684
|
}
|
|
@@ -688,13 +688,13 @@ async function payExactEvm(input) {
|
|
|
688
688
|
domain = await readExactDomain(publicClient, accept.asset);
|
|
689
689
|
}
|
|
690
690
|
if (!domain) {
|
|
691
|
-
throw new (0,
|
|
691
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedSchemeError)(
|
|
692
692
|
`exact: couldn't derive the EIP-712 domain for ${accept.asset} on ${accept.network}. Either it isn't an EIP-3009 token (USDT needs Permit2; native/plain ERC-20 aren't exact-payable) \u2014 pay via onchain-proof \u2014 OR your RPC couldn't read it (transient): if the gate advertised eip3009, pass a reliable rpcUrl and retry.`
|
|
693
693
|
);
|
|
694
694
|
}
|
|
695
695
|
const g = globalThis.crypto;
|
|
696
696
|
if (!_optionalChain([g, 'optionalAccess', _5 => _5.getRandomValues])) {
|
|
697
|
-
throw new (0,
|
|
697
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedSchemeError)(
|
|
698
698
|
"this runtime lacks Web Crypto (globalThis.crypto.getRandomValues); the exact rail needs a CSPRNG nonce."
|
|
699
699
|
);
|
|
700
700
|
}
|
|
@@ -951,7 +951,7 @@ async function verifyAndSettleExactEvm(input) {
|
|
|
951
951
|
args: writeArgs
|
|
952
952
|
});
|
|
953
953
|
} catch (err) {
|
|
954
|
-
throw new (0,
|
|
954
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
955
955
|
`exact settle: the merchant relayer failed to broadcast transferWithAuthorization (${shorten(err instanceof Error ? err.message : String(err))}). The payer's authorization is still valid and unused \u2014 fund/fix the relayer and the payer can retry.`,
|
|
956
956
|
{ cause: err }
|
|
957
957
|
);
|
|
@@ -963,7 +963,7 @@ async function verifyAndSettleExactEvm(input) {
|
|
|
963
963
|
return { ok: false, error: "tx_reverted", detail: `Settlement tx ${txHash} reverted on-chain.` };
|
|
964
964
|
}
|
|
965
965
|
} catch (err) {
|
|
966
|
-
throw new (0,
|
|
966
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
967
967
|
`exact settle: broadcast ${txHash} but couldn't confirm it (${shorten(err instanceof Error ? err.message : String(err))}).`,
|
|
968
968
|
{ cause: err }
|
|
969
969
|
);
|
|
@@ -1094,7 +1094,7 @@ function shorten2(msg) {
|
|
|
1094
1094
|
function randomPermit2Nonce() {
|
|
1095
1095
|
const g = globalThis.crypto;
|
|
1096
1096
|
if (!_optionalChain([g, 'optionalAccess', _8 => _8.getRandomValues])) {
|
|
1097
|
-
throw new (0,
|
|
1097
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedSchemeError)(
|
|
1098
1098
|
"this runtime lacks Web Crypto (globalThis.crypto.getRandomValues); the permit2 rail needs a CSPRNG nonce."
|
|
1099
1099
|
);
|
|
1100
1100
|
}
|
|
@@ -1113,7 +1113,7 @@ async function ensurePermit2Allowance(input) {
|
|
|
1113
1113
|
args: [account.address, PERMIT2_ADDRESS]
|
|
1114
1114
|
});
|
|
1115
1115
|
} catch (err) {
|
|
1116
|
-
throw new (0,
|
|
1116
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedSchemeError)(
|
|
1117
1117
|
`permit2: couldn't read the Permit2 allowance for ${token} (${shorten2(err instanceof Error ? err.message : String(err))}).`
|
|
1118
1118
|
);
|
|
1119
1119
|
}
|
|
@@ -1130,7 +1130,7 @@ async function ensurePermit2Allowance(input) {
|
|
|
1130
1130
|
await publicClient.waitForTransactionReceipt({ hash, confirmations: 1 });
|
|
1131
1131
|
return hash;
|
|
1132
1132
|
} catch (err) {
|
|
1133
|
-
throw _nullishCoalesce(
|
|
1133
|
+
throw _nullishCoalesce(_chunkVPENSVOIcjs.toInsufficientFundsError.call(void 0, err), () => ( new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
1134
1134
|
`permit2: the one-time Permit2 approval for ${token} failed to broadcast (${shorten2(err instanceof Error ? err.message : String(err))}).`,
|
|
1135
1135
|
{ cause: err }
|
|
1136
1136
|
)));
|
|
@@ -1145,7 +1145,7 @@ async function payPermit2Evm(input) {
|
|
|
1145
1145
|
code = void 0;
|
|
1146
1146
|
}
|
|
1147
1147
|
if (code && code !== "0x") {
|
|
1148
|
-
throw new (0,
|
|
1148
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedSchemeError)(
|
|
1149
1149
|
`permit2 buyer rail requires an EOA signer; ${account.address} is a contract / EIP-1271 / EIP-7702-delegated account. Pay via onchain-proof.`
|
|
1150
1150
|
);
|
|
1151
1151
|
}
|
|
@@ -1320,7 +1320,7 @@ async function verifyAndSettlePermit2Evm(input) {
|
|
|
1320
1320
|
args: settleArgs
|
|
1321
1321
|
});
|
|
1322
1322
|
} catch (err) {
|
|
1323
|
-
throw new (0,
|
|
1323
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
1324
1324
|
`permit2 settle: the merchant relayer failed to broadcast the proxy settle (${shorten2(err instanceof Error ? err.message : String(err))}). The payer's signature is still valid and its nonce unused \u2014 fund/fix the relayer and the payer can retry.`,
|
|
1325
1325
|
{ cause: err }
|
|
1326
1326
|
);
|
|
@@ -1332,7 +1332,7 @@ async function verifyAndSettlePermit2Evm(input) {
|
|
|
1332
1332
|
return { ok: false, error: "tx_reverted", detail: `Settlement tx ${txHash} reverted on-chain.` };
|
|
1333
1333
|
}
|
|
1334
1334
|
} catch (err) {
|
|
1335
|
-
throw new (0,
|
|
1335
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
1336
1336
|
`permit2 settle: broadcast ${txHash} but couldn't confirm it (${shorten2(err instanceof Error ? err.message : String(err))}).`,
|
|
1337
1337
|
{ cause: err }
|
|
1338
1338
|
);
|
|
@@ -1584,15 +1584,15 @@ function makeEvmNetwork(resolved) {
|
|
|
1584
1584
|
const info = resolved.tokens[token.toUpperCase()];
|
|
1585
1585
|
if (!info) {
|
|
1586
1586
|
const known = Object.keys(resolved.tokens).join(", ") || "(none built in)";
|
|
1587
|
-
throw new (0,
|
|
1587
|
+
throw new (0, _chunkVPENSVOIcjs.UnknownTokenError)(
|
|
1588
1588
|
`token "${token}" isn't built in for ${resolved.chain.name} (known: ${known}). Pass { address, decimals } instead, or use 'native'.`
|
|
1589
1589
|
);
|
|
1590
1590
|
}
|
|
1591
1591
|
return { asset: info.address, decimals: info.decimals, symbol: info.symbol };
|
|
1592
1592
|
}
|
|
1593
|
-
|
|
1593
|
+
_chunkVPENSVOIcjs.rejectForeignToken.call(void 0, token, "evm", network);
|
|
1594
1594
|
if (!("address" in token)) {
|
|
1595
|
-
throw new (0,
|
|
1595
|
+
throw new (0, _chunkVPENSVOIcjs.WrongFamilyError)(
|
|
1596
1596
|
`chain ${network} is EVM; a custom token must be { address, decimals }.`
|
|
1597
1597
|
);
|
|
1598
1598
|
}
|
|
@@ -1624,20 +1624,20 @@ function makeEvmNetwork(resolved) {
|
|
|
1624
1624
|
},
|
|
1625
1625
|
assertValidPayTo(payTo) {
|
|
1626
1626
|
if (!_viem.isAddress.call(void 0, payTo)) {
|
|
1627
|
-
throw new (0,
|
|
1627
|
+
throw new (0, _chunkVPENSVOIcjs.WrongFamilyError)(
|
|
1628
1628
|
`chain ${network} is EVM, but payTo "${payTo}" is not a valid 0x address.`
|
|
1629
1629
|
);
|
|
1630
1630
|
}
|
|
1631
1631
|
},
|
|
1632
1632
|
bindWallet(wallet) {
|
|
1633
1633
|
if (typeof wallet !== "object" || wallet === null) {
|
|
1634
|
-
throw new (0,
|
|
1634
|
+
throw new (0, _chunkVPENSVOIcjs.WrongFamilyError)(
|
|
1635
1635
|
`chain ${network} is EVM; wallet must be { key } (0x\u2026 hex) or { walletClient }.`
|
|
1636
1636
|
);
|
|
1637
1637
|
}
|
|
1638
|
-
|
|
1638
|
+
_chunkVPENSVOIcjs.assertNoLegacyWalletKey.call(void 0, wallet, "EVM");
|
|
1639
1639
|
if (!("key" in wallet) && !("walletClient" in wallet)) {
|
|
1640
|
-
throw new (0,
|
|
1640
|
+
throw new (0, _chunkVPENSVOIcjs.WrongFamilyError)(
|
|
1641
1641
|
`chain ${network} is EVM; wallet must be { key } (0x\u2026 hex) or { walletClient }.`
|
|
1642
1642
|
);
|
|
1643
1643
|
}
|
|
@@ -1654,12 +1654,12 @@ function makeEvmNetwork(resolved) {
|
|
|
1654
1654
|
});
|
|
1655
1655
|
} catch (err) {
|
|
1656
1656
|
if (isViemInsufficientFunds(err)) {
|
|
1657
|
-
throw new (0,
|
|
1657
|
+
throw new (0, _chunkVPENSVOIcjs.InsufficientFundsError)(
|
|
1658
1658
|
err instanceof Error ? err.message : "Insufficient funds for payment.",
|
|
1659
1659
|
{ cause: err }
|
|
1660
1660
|
);
|
|
1661
1661
|
}
|
|
1662
|
-
throw _nullishCoalesce(
|
|
1662
|
+
throw _nullishCoalesce(_chunkVPENSVOIcjs.toInsufficientFundsError.call(void 0, err), () => ( err));
|
|
1663
1663
|
}
|
|
1664
1664
|
},
|
|
1665
1665
|
async confirm(ref, minConfirmations) {
|
|
@@ -1670,7 +1670,7 @@ function makeEvmNetwork(resolved) {
|
|
|
1670
1670
|
});
|
|
1671
1671
|
return { height: receipt.blockNumber.toString() };
|
|
1672
1672
|
} catch (err) {
|
|
1673
|
-
throw new (0,
|
|
1673
|
+
throw new (0, _chunkVPENSVOIcjs.ConfirmationTimeoutError)(
|
|
1674
1674
|
`EVM tx ${ref} did not reach ${minConfirmations} confirmation(s) in time.`,
|
|
1675
1675
|
{ cause: err }
|
|
1676
1676
|
);
|
|
@@ -1680,7 +1680,7 @@ function makeEvmNetwork(resolved) {
|
|
|
1680
1680
|
const { decimals, symbol } = resolved.chain.nativeCurrency;
|
|
1681
1681
|
if (accept.scheme === "exact") {
|
|
1682
1682
|
const permit2 = accept.extra.assetTransferMethod === "permit2";
|
|
1683
|
-
return
|
|
1683
|
+
return _chunkVPENSVOIcjs.nativeCost.call(void 0, {
|
|
1684
1684
|
symbol,
|
|
1685
1685
|
decimals,
|
|
1686
1686
|
fee: 0n,
|
|
@@ -1691,7 +1691,7 @@ function makeEvmNetwork(resolved) {
|
|
|
1691
1691
|
const gasLimit = accept.asset === "native" ? 21000n : 65000n;
|
|
1692
1692
|
try {
|
|
1693
1693
|
const gasPrice = await publicClient.getGasPrice();
|
|
1694
|
-
return
|
|
1694
|
+
return _chunkVPENSVOIcjs.nativeCost.call(void 0, {
|
|
1695
1695
|
symbol,
|
|
1696
1696
|
decimals,
|
|
1697
1697
|
fee: gasPrice * gasLimit,
|
|
@@ -1700,7 +1700,7 @@ function makeEvmNetwork(resolved) {
|
|
|
1700
1700
|
});
|
|
1701
1701
|
} catch (e20) {
|
|
1702
1702
|
const gasPrice = 5000000000n;
|
|
1703
|
-
return
|
|
1703
|
+
return _chunkVPENSVOIcjs.nativeCost.call(void 0, {
|
|
1704
1704
|
symbol,
|
|
1705
1705
|
decimals,
|
|
1706
1706
|
fee: gasPrice * gasLimit,
|
|
@@ -1840,9 +1840,9 @@ var loaders = {
|
|
|
1840
1840
|
solana: async () => {
|
|
1841
1841
|
let mod;
|
|
1842
1842
|
try {
|
|
1843
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./solana-
|
|
1843
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./solana-L342QCSV.cjs")));
|
|
1844
1844
|
} catch (cause) {
|
|
1845
|
-
throw new (0,
|
|
1845
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1846
1846
|
`Solana selected, but its packages aren't installed. Run: npm install @solana/web3.js @solana/spl-token bs58`,
|
|
1847
1847
|
{ cause }
|
|
1848
1848
|
);
|
|
@@ -1852,9 +1852,9 @@ var loaders = {
|
|
|
1852
1852
|
ton: async () => {
|
|
1853
1853
|
let mod;
|
|
1854
1854
|
try {
|
|
1855
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./ton-
|
|
1855
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./ton-LZKJWYHV.cjs")));
|
|
1856
1856
|
} catch (cause) {
|
|
1857
|
-
throw new (0,
|
|
1857
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1858
1858
|
`TON selected, but its packages aren't installed. Run: npm install @ton/ton @ton/core @ton/crypto`,
|
|
1859
1859
|
{ cause }
|
|
1860
1860
|
);
|
|
@@ -1864,9 +1864,9 @@ var loaders = {
|
|
|
1864
1864
|
stellar: async () => {
|
|
1865
1865
|
let mod;
|
|
1866
1866
|
try {
|
|
1867
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./stellar-
|
|
1867
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./stellar-YEXRVR3W.cjs")));
|
|
1868
1868
|
} catch (cause) {
|
|
1869
|
-
throw new (0,
|
|
1869
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1870
1870
|
`Stellar selected, but its package isn't installed. Run: npm install @stellar/stellar-sdk`,
|
|
1871
1871
|
{ cause }
|
|
1872
1872
|
);
|
|
@@ -1876,9 +1876,9 @@ var loaders = {
|
|
|
1876
1876
|
xrpl: async () => {
|
|
1877
1877
|
let mod;
|
|
1878
1878
|
try {
|
|
1879
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./xrpl-
|
|
1879
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./xrpl-K3U3SBF4.cjs")));
|
|
1880
1880
|
} catch (cause) {
|
|
1881
|
-
throw new (0,
|
|
1881
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1882
1882
|
`XRPL selected, but its package isn't installed. Run: npm install xrpl`,
|
|
1883
1883
|
{ cause }
|
|
1884
1884
|
);
|
|
@@ -1888,9 +1888,9 @@ var loaders = {
|
|
|
1888
1888
|
tron: async () => {
|
|
1889
1889
|
let mod;
|
|
1890
1890
|
try {
|
|
1891
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./tron-
|
|
1891
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./tron-DQU4WTGQ.cjs")));
|
|
1892
1892
|
} catch (cause) {
|
|
1893
|
-
throw new (0,
|
|
1893
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1894
1894
|
`Tron selected, but its package isn't installed. Run: npm install tronweb`,
|
|
1895
1895
|
{ cause }
|
|
1896
1896
|
);
|
|
@@ -1900,9 +1900,9 @@ var loaders = {
|
|
|
1900
1900
|
sui: async () => {
|
|
1901
1901
|
let mod;
|
|
1902
1902
|
try {
|
|
1903
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./sui-
|
|
1903
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./sui-EFRSCDWN.cjs")));
|
|
1904
1904
|
} catch (cause) {
|
|
1905
|
-
throw new (0,
|
|
1905
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1906
1906
|
`Sui selected, but its package isn't installed. Run: npm install @mysten/sui`,
|
|
1907
1907
|
{ cause }
|
|
1908
1908
|
);
|
|
@@ -1912,9 +1912,9 @@ var loaders = {
|
|
|
1912
1912
|
near: async () => {
|
|
1913
1913
|
let mod;
|
|
1914
1914
|
try {
|
|
1915
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./near-
|
|
1915
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./near-NYFMX2KA.cjs")));
|
|
1916
1916
|
} catch (cause) {
|
|
1917
|
-
throw new (0,
|
|
1917
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1918
1918
|
`NEAR selected, but its package isn't installed. Run: npm install near-api-js`,
|
|
1919
1919
|
{ cause }
|
|
1920
1920
|
);
|
|
@@ -1924,9 +1924,9 @@ var loaders = {
|
|
|
1924
1924
|
aptos: async () => {
|
|
1925
1925
|
let mod;
|
|
1926
1926
|
try {
|
|
1927
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./aptos-
|
|
1927
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./aptos-CVHLVMAF.cjs")));
|
|
1928
1928
|
} catch (cause) {
|
|
1929
|
-
throw new (0,
|
|
1929
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1930
1930
|
`Aptos selected, but its package isn't installed. Run: npm install @aptos-labs/ts-sdk`,
|
|
1931
1931
|
{ cause }
|
|
1932
1932
|
);
|
|
@@ -1936,9 +1936,9 @@ var loaders = {
|
|
|
1936
1936
|
algorand: async () => {
|
|
1937
1937
|
let mod;
|
|
1938
1938
|
try {
|
|
1939
|
-
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./algorand-
|
|
1939
|
+
mod = await Promise.resolve().then(() => _interopRequireWildcard(require("./algorand-EKD34T4Q.cjs")));
|
|
1940
1940
|
} catch (cause) {
|
|
1941
|
-
throw new (0,
|
|
1941
|
+
throw new (0, _chunkVPENSVOIcjs.MissingDriverError)(
|
|
1942
1942
|
`Algorand selected, but its package isn't installed. Run: npm install algosdk`,
|
|
1943
1943
|
{ cause }
|
|
1944
1944
|
);
|
|
@@ -2027,7 +2027,7 @@ var SLUG_TO_CAIP2 = {
|
|
|
2027
2027
|
bsc: "eip155:56",
|
|
2028
2028
|
// non-EVM families — values mirror each driver's bound caip2 exactly
|
|
2029
2029
|
solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
|
|
2030
|
-
ton: "
|
|
2030
|
+
ton: "tvm:-239",
|
|
2031
2031
|
tron: "tron:mainnet",
|
|
2032
2032
|
near: "near:mainnet",
|
|
2033
2033
|
sui: "sui:mainnet",
|
|
@@ -2036,7 +2036,12 @@ var SLUG_TO_CAIP2 = {
|
|
|
2036
2036
|
stellar: "stellar:pubnet",
|
|
2037
2037
|
xrpl: "xrpl:0"
|
|
2038
2038
|
};
|
|
2039
|
+
var LEGACY_CAIP2_ALIAS = {
|
|
2040
|
+
"ton:-239": "tvm:-239"
|
|
2041
|
+
};
|
|
2039
2042
|
function normalizeNetwork(network) {
|
|
2043
|
+
const legacy = LEGACY_CAIP2_ALIAS[network];
|
|
2044
|
+
if (legacy) return legacy;
|
|
2040
2045
|
if (network.includes(":")) return network;
|
|
2041
2046
|
return _nullishCoalesce(SLUG_TO_CAIP2[network.toLowerCase()], () => ( network));
|
|
2042
2047
|
}
|
|
@@ -2643,7 +2648,7 @@ function evaluatePolicy(intent, policy, spentForAssetBase, ctx) {
|
|
|
2643
2648
|
}
|
|
2644
2649
|
}
|
|
2645
2650
|
if (policy.maxAmount !== void 0) {
|
|
2646
|
-
const cap =
|
|
2651
|
+
const cap = _chunkVPENSVOIcjs.floorUnits.call(void 0, policy.maxAmount, intent.decimals);
|
|
2647
2652
|
if (intent.amountBase > cap) {
|
|
2648
2653
|
return deny(
|
|
2649
2654
|
"MAX_AMOUNT",
|
|
@@ -2652,7 +2657,7 @@ function evaluatePolicy(intent, policy, spentForAssetBase, ctx) {
|
|
|
2652
2657
|
}
|
|
2653
2658
|
}
|
|
2654
2659
|
if (policy.maxTotal !== void 0) {
|
|
2655
|
-
const cap =
|
|
2660
|
+
const cap = _chunkVPENSVOIcjs.floorUnits.call(void 0, policy.maxTotal, intent.decimals);
|
|
2656
2661
|
if (spentForAssetBase + intent.amountBase > cap) {
|
|
2657
2662
|
return deny(
|
|
2658
2663
|
"MAX_TOTAL",
|
|
@@ -2661,7 +2666,7 @@ function evaluatePolicy(intent, policy, spentForAssetBase, ctx) {
|
|
|
2661
2666
|
}
|
|
2662
2667
|
}
|
|
2663
2668
|
if (ctx && policy.windowTotal !== void 0 && policy.windowSeconds !== void 0) {
|
|
2664
|
-
const cap =
|
|
2669
|
+
const cap = _chunkVPENSVOIcjs.floorUnits.call(void 0, policy.windowTotal, intent.decimals);
|
|
2665
2670
|
if (ctx.spentInWindowBase + intent.amountBase > cap) {
|
|
2666
2671
|
return deny(
|
|
2667
2672
|
"WINDOW_TOTAL",
|
|
@@ -2750,7 +2755,7 @@ var SpendLedger = (_class = class {constructor() { _class.prototype.__init.call(
|
|
|
2750
2755
|
symbol: b.symbol,
|
|
2751
2756
|
decimals: b.decimals,
|
|
2752
2757
|
totalBase: b.total.toString(),
|
|
2753
|
-
totalFormatted:
|
|
2758
|
+
totalFormatted: _chunkVPENSVOIcjs.formatUnits.call(void 0, b.total, b.decimals),
|
|
2754
2759
|
count: b.count
|
|
2755
2760
|
})),
|
|
2756
2761
|
records: [...this.records]
|
|
@@ -2967,13 +2972,13 @@ var PipRailClient = (_class2 = class {
|
|
|
2967
2972
|
spentBase: b.totalBase.toString()
|
|
2968
2973
|
};
|
|
2969
2974
|
if (maxTotal === void 0) return base2;
|
|
2970
|
-
const capBase =
|
|
2975
|
+
const capBase = _chunkVPENSVOIcjs.floorUnits.call(void 0, maxTotal, b.decimals);
|
|
2971
2976
|
const remainingBase = capBase > b.totalBase ? capBase - b.totalBase : 0n;
|
|
2972
2977
|
return {
|
|
2973
2978
|
...base2,
|
|
2974
2979
|
capBase: capBase.toString(),
|
|
2975
2980
|
remainingBase: remainingBase.toString(),
|
|
2976
|
-
remainingFormatted:
|
|
2981
|
+
remainingFormatted: _chunkVPENSVOIcjs.formatUnits.call(void 0, remainingBase, b.decimals)
|
|
2977
2982
|
};
|
|
2978
2983
|
});
|
|
2979
2984
|
}
|
|
@@ -3013,11 +3018,11 @@ var PipRailClient = (_class2 = class {
|
|
|
3013
3018
|
if (res.status !== 402) return null;
|
|
3014
3019
|
const challenge = await parseChallenge(res);
|
|
3015
3020
|
if (!challenge) {
|
|
3016
|
-
throw new (0,
|
|
3021
|
+
throw new (0, _chunkVPENSVOIcjs.InvalidEnvelopeError)("402 response did not include a parseable x402 challenge.");
|
|
3017
3022
|
}
|
|
3018
3023
|
const { net, wallet } = await this.ensure();
|
|
3019
3024
|
if (!wallet) {
|
|
3020
|
-
throw new (0,
|
|
3025
|
+
throw new (0, _chunkVPENSVOIcjs.WalletRequiredError)(
|
|
3021
3026
|
"planPayment needs a wallet (it checks YOUR balance, gas, and recipient-readiness). This client is read-only \u2014 construct it with a `wallet` to plan or pay."
|
|
3022
3027
|
);
|
|
3023
3028
|
}
|
|
@@ -3192,7 +3197,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3192
3197
|
async fetch(url, init) {
|
|
3193
3198
|
const body = _optionalChain([init, 'optionalAccess', _31 => _31.body]);
|
|
3194
3199
|
if (body !== void 0 && body !== null && !isReplayableBodyInit(body)) {
|
|
3195
|
-
throw new (0,
|
|
3200
|
+
throw new (0, _chunkVPENSVOIcjs.NonReplayableBodyError)(
|
|
3196
3201
|
"fetch(): init.body is not replayable. Pass a string, FormData, URLSearchParams, ArrayBuffer, or Blob \u2014 not a ReadableStream."
|
|
3197
3202
|
);
|
|
3198
3203
|
}
|
|
@@ -3202,7 +3207,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3202
3207
|
const resolved = await this.resolveChallenge(url, firstResponse, schemes);
|
|
3203
3208
|
const { net, wallet, challenge } = resolved;
|
|
3204
3209
|
if (!wallet) {
|
|
3205
|
-
throw new (0,
|
|
3210
|
+
throw new (0, _chunkVPENSVOIcjs.WalletRequiredError)(
|
|
3206
3211
|
"Paying a 402 needs a wallet to sign + settle. This client is read-only \u2014 construct it with a `wallet` to pay (quote/discover/register still work without one)."
|
|
3207
3212
|
);
|
|
3208
3213
|
}
|
|
@@ -3214,7 +3219,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3214
3219
|
if (!plan.best) {
|
|
3215
3220
|
const reason = _nullishCoalesce(plan.fundingHint, () => ( "No rail is settleable for this payment."));
|
|
3216
3221
|
this.safeEmit({ kind: "payment-failed", reason });
|
|
3217
|
-
throw new (0,
|
|
3222
|
+
throw new (0, _chunkVPENSVOIcjs.PaymentDeclinedError)(reason);
|
|
3218
3223
|
}
|
|
3219
3224
|
accept = plan.best.accept;
|
|
3220
3225
|
quote = plan.best.quote;
|
|
@@ -3238,7 +3243,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3238
3243
|
async resolveChallenge(url, response, schemes) {
|
|
3239
3244
|
const challenge = await parseChallenge(response);
|
|
3240
3245
|
if (!challenge) {
|
|
3241
|
-
throw new (0,
|
|
3246
|
+
throw new (0, _chunkVPENSVOIcjs.InvalidEnvelopeError)(
|
|
3242
3247
|
"402 response did not include a parseable x402 challenge."
|
|
3243
3248
|
);
|
|
3244
3249
|
}
|
|
@@ -3249,7 +3254,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3249
3254
|
(a) => a.scheme === "exact" && this.supportsNetwork(net, a.network)
|
|
3250
3255
|
);
|
|
3251
3256
|
if (schemes.includes("exact") && exactOnNet && typeof net.payExact !== "function") {
|
|
3252
|
-
throw new (0,
|
|
3257
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedSchemeError)(
|
|
3253
3258
|
`This 402 offers a standard 'exact' rail on ${net.network}, but the ${net.family} family can't pay 'exact' (supported on EVM, Solana, Algorand + NEAR today), and no 'onchain-proof' rail was offered.`
|
|
3254
3259
|
);
|
|
3255
3260
|
}
|
|
@@ -3258,13 +3263,13 @@ var PipRailClient = (_class2 = class {
|
|
|
3258
3263
|
(a) => a.scheme === "exact" && this.supportsNetwork(net, a.network) && net.describeAsset(a.asset) != null
|
|
3259
3264
|
);
|
|
3260
3265
|
if (payable) {
|
|
3261
|
-
throw new (0,
|
|
3266
|
+
throw new (0, _chunkVPENSVOIcjs.NoCompatibleAcceptError)(
|
|
3262
3267
|
`This 402 is payable only via the standard 'exact' rail on ${net.network}, which is OFF by default. Enable it: new PipRailClient({ \u2026, schemes: ['onchain-proof', 'exact'] }) or per call fetch(url, { schemes: ['exact'] }) (MCP: PIPRAIL_SCHEMES=onchain-proof,exact).`
|
|
3263
3268
|
);
|
|
3264
3269
|
}
|
|
3265
3270
|
}
|
|
3266
3271
|
const networks = [...new Set(challenge.accepts.map((a) => a.network))].join(", ");
|
|
3267
|
-
throw new (0,
|
|
3272
|
+
throw new (0, _chunkVPENSVOIcjs.NoCompatibleAcceptError)(
|
|
3268
3273
|
`No accepts[] entry payable by this client on ${net.network} (schemes: ${schemes.join(", ")}; challenge offered: ${networks || "none"}).`
|
|
3269
3274
|
);
|
|
3270
3275
|
}
|
|
@@ -3377,21 +3382,21 @@ var PipRailClient = (_class2 = class {
|
|
|
3377
3382
|
if (isExact) {
|
|
3378
3383
|
if (tokenKnown && bal.token < amount) {
|
|
3379
3384
|
blockers.push("INSUFFICIENT_TOKEN");
|
|
3380
|
-
shortfall.token =
|
|
3385
|
+
shortfall.token = _chunkVPENSVOIcjs.formatUnits.call(void 0, amount - bal.token, quote.decimals);
|
|
3381
3386
|
}
|
|
3382
3387
|
} else if (isNative) {
|
|
3383
3388
|
if (nativeKnown && bal.native < amount + fee) {
|
|
3384
3389
|
blockers.push("INSUFFICIENT_TOKEN");
|
|
3385
|
-
shortfall.token =
|
|
3390
|
+
shortfall.token = _chunkVPENSVOIcjs.formatUnits.call(void 0, amount + fee - bal.native, quote.decimals);
|
|
3386
3391
|
}
|
|
3387
3392
|
} else {
|
|
3388
3393
|
if (tokenKnown && bal.token < amount) {
|
|
3389
3394
|
blockers.push("INSUFFICIENT_TOKEN");
|
|
3390
|
-
shortfall.token =
|
|
3395
|
+
shortfall.token = _chunkVPENSVOIcjs.formatUnits.call(void 0, amount - bal.token, quote.decimals);
|
|
3391
3396
|
}
|
|
3392
3397
|
if (nativeKnown && bal.native < fee) {
|
|
3393
3398
|
blockers.push("INSUFFICIENT_GAS");
|
|
3394
|
-
shortfall.native =
|
|
3399
|
+
shortfall.native = _chunkVPENSVOIcjs.formatUnits.call(void 0, fee - bal.native, cost.feeDecimals);
|
|
3395
3400
|
} else if (nativeKnown && fee > 0n && bal.native < fee * 3n / 2n) {
|
|
3396
3401
|
warnings.push("THIN_GAS_MARGIN");
|
|
3397
3402
|
}
|
|
@@ -3416,8 +3421,8 @@ var PipRailClient = (_class2 = class {
|
|
|
3416
3421
|
blockers,
|
|
3417
3422
|
warnings,
|
|
3418
3423
|
balance: {
|
|
3419
|
-
token: bal.token != null ?
|
|
3420
|
-
native: bal.native != null ?
|
|
3424
|
+
token: bal.token != null ? _chunkVPENSVOIcjs.formatUnits.call(void 0, bal.token, quote.decimals) : null,
|
|
3425
|
+
native: bal.native != null ? _chunkVPENSVOIcjs.formatUnits.call(void 0, bal.native, cost.feeDecimals) : null
|
|
3421
3426
|
},
|
|
3422
3427
|
need: { token: quote.amountFormatted, native: cost.feeFormatted },
|
|
3423
3428
|
...shortfall.token || shortfall.native ? { shortfall } : {},
|
|
@@ -3428,12 +3433,12 @@ var PipRailClient = (_class2 = class {
|
|
|
3428
3433
|
* driver's describeAsset) + the policy verdict + a symbol-mismatch flag. */
|
|
3429
3434
|
buildQuote(net, accept, url, description) {
|
|
3430
3435
|
if (typeof accept.amount !== "string" || !/^\d+$/.test(accept.amount)) {
|
|
3431
|
-
throw new (0,
|
|
3436
|
+
throw new (0, _chunkVPENSVOIcjs.InvalidEnvelopeError)(
|
|
3432
3437
|
`challenge amount "${String(accept.amount)}" is not a base-unit integer string.`
|
|
3433
3438
|
);
|
|
3434
3439
|
}
|
|
3435
3440
|
if (typeof accept.asset !== "string" || accept.asset.length === 0) {
|
|
3436
|
-
throw new (0,
|
|
3441
|
+
throw new (0, _chunkVPENSVOIcjs.InvalidEnvelopeError)(
|
|
3437
3442
|
`challenge on ${accept.network} states no (string) asset \u2014 refusing to price it.`
|
|
3438
3443
|
);
|
|
3439
3444
|
}
|
|
@@ -3441,12 +3446,12 @@ var PipRailClient = (_class2 = class {
|
|
|
3441
3446
|
const described = net.describeAsset(accept.asset);
|
|
3442
3447
|
const decimals = _nullishCoalesce(_optionalChain([described, 'optionalAccess', _34 => _34.decimals]), () => ( _optionalChain([accept, 'access', _35 => _35.extra, 'optionalAccess', _36 => _36.decimals])));
|
|
3443
3448
|
if (typeof decimals !== "number" || !Number.isInteger(decimals) || decimals < 0) {
|
|
3444
|
-
throw new (0,
|
|
3449
|
+
throw new (0, _chunkVPENSVOIcjs.InvalidEnvelopeError)(
|
|
3445
3450
|
`challenge for ${accept.asset} on ${accept.network} states no valid decimals and the SDK doesn't recognise the token \u2014 refusing to price it.`
|
|
3446
3451
|
);
|
|
3447
3452
|
}
|
|
3448
3453
|
const symbol = _nullishCoalesce(_optionalChain([described, 'optionalAccess', _37 => _37.symbol]), () => ( _optionalChain([accept, 'access', _38 => _38.extra, 'optionalAccess', _39 => _39.symbol])));
|
|
3449
|
-
const amountFormatted =
|
|
3454
|
+
const amountFormatted = _chunkVPENSVOIcjs.formatUnits.call(void 0, amountBase, decimals);
|
|
3450
3455
|
const intent = {
|
|
3451
3456
|
host: hostOf2(url),
|
|
3452
3457
|
chain: this.opts.chain,
|
|
@@ -3507,7 +3512,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3507
3512
|
const reason = `Payment refused by policy: ${_nullishCoalesce(quote.policyReason, () => ( "not allowed"))}`;
|
|
3508
3513
|
const reasonCode = reasonCodeForPolicy(quote.policyCode);
|
|
3509
3514
|
this.safeEmit({ kind: "payment-failed", reason, code: reasonCode });
|
|
3510
|
-
throw new (0,
|
|
3515
|
+
throw new (0, _chunkVPENSVOIcjs.PaymentDeclinedError)(reason, { reasonCode });
|
|
3511
3516
|
}
|
|
3512
3517
|
const hook = this.opts.onBeforePay;
|
|
3513
3518
|
if (!hook) return;
|
|
@@ -3517,12 +3522,12 @@ var PipRailClient = (_class2 = class {
|
|
|
3517
3522
|
} catch (err) {
|
|
3518
3523
|
const reason = "onBeforePay threw \u2014 refusing to pay.";
|
|
3519
3524
|
this.safeEmit({ kind: "payment-failed", reason, code: "APPROVAL" });
|
|
3520
|
-
throw new (0,
|
|
3525
|
+
throw new (0, _chunkVPENSVOIcjs.PaymentDeclinedError)(reason, { cause: err, reasonCode: "APPROVAL" });
|
|
3521
3526
|
}
|
|
3522
3527
|
if (!approved) {
|
|
3523
3528
|
const reason = `onBeforePay declined ${quote.amountFormatted} ${_nullishCoalesce(quote.symbol, () => ( ""))}`.trimEnd() + ` on ${quote.network}.`;
|
|
3524
3529
|
this.safeEmit({ kind: "payment-failed", reason, code: "APPROVAL" });
|
|
3525
|
-
throw new (0,
|
|
3530
|
+
throw new (0, _chunkVPENSVOIcjs.PaymentDeclinedError)(reason, { reasonCode: "APPROVAL" });
|
|
3526
3531
|
}
|
|
3527
3532
|
}
|
|
3528
3533
|
/** Record a settled payment in the ledger (true decimals for the running total). */
|
|
@@ -3544,7 +3549,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3544
3549
|
}
|
|
3545
3550
|
async payAndConfirm(net, wallet, accept) {
|
|
3546
3551
|
if (!this.supportsNetwork(net, accept.network)) {
|
|
3547
|
-
throw new (0,
|
|
3552
|
+
throw new (0, _chunkVPENSVOIcjs.WrongChainError)(
|
|
3548
3553
|
`Challenge expects ${accept.network} but client is on ${net.network}.`
|
|
3549
3554
|
);
|
|
3550
3555
|
}
|
|
@@ -3597,7 +3602,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3597
3602
|
});
|
|
3598
3603
|
} catch (err) {
|
|
3599
3604
|
if (timeoutController.signal.aborted) {
|
|
3600
|
-
throw new (0,
|
|
3605
|
+
throw new (0, _chunkVPENSVOIcjs.PaymentTimeoutError)(
|
|
3601
3606
|
`Server did not respond within ${this.retryTimeoutMs}ms after broadcasting payment ${ref}. Re-verify or re-submit ref=${ref} \u2014 do NOT re-pay.`,
|
|
3602
3607
|
{ cause: err, ref }
|
|
3603
3608
|
);
|
|
@@ -3620,7 +3625,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3620
3625
|
reason: `server returned 402 after broadcasting payment ${ref}${unconfirmedNote} (${why})`,
|
|
3621
3626
|
...lastReason ? { code: lastReason.error, detail: lastReason.detail } : {}
|
|
3622
3627
|
});
|
|
3623
|
-
throw new (0,
|
|
3628
|
+
throw new (0, _chunkVPENSVOIcjs.MaxRetriesExceededError)(
|
|
3624
3629
|
`Server still returned 402 after ${attempts} attempt(s) with on-chain proof ref=${ref}${unconfirmedNote}. Last server rejection: ${why}. Re-verify or re-submit ref=${ref} before retrying \u2014 never re-pay (it would double-spend).`,
|
|
3625
3630
|
{ ref }
|
|
3626
3631
|
);
|
|
@@ -3644,7 +3649,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3644
3649
|
*/
|
|
3645
3650
|
async payExactRail(net, wallet, accept, url, init, quote) {
|
|
3646
3651
|
if (!net.payExact) {
|
|
3647
|
-
throw new (0,
|
|
3652
|
+
throw new (0, _chunkVPENSVOIcjs.UnsupportedSchemeError)(
|
|
3648
3653
|
`the ${net.family} family can't pay a standard 'exact' rail (supported on EVM, Solana, Algorand + NEAR today).`
|
|
3649
3654
|
);
|
|
3650
3655
|
}
|
|
@@ -3654,7 +3659,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3654
3659
|
headers.set(HEADER_SIGNATURE, buildExactSignatureHeader({ accepted, payload }));
|
|
3655
3660
|
const rejectDefinitive = (why2) => {
|
|
3656
3661
|
this.safeEmit({ kind: "payment-failed", reason: `exact: facilitator rejected nonce=${nonce} (${why2})`, code: why2 });
|
|
3657
|
-
throw new (0,
|
|
3662
|
+
throw new (0, _chunkVPENSVOIcjs.MaxRetriesExceededError)(
|
|
3658
3663
|
`exact: the facilitator rejected the payment (${why2}). Fix the cause, then re-present the SAME signed authorization (nonce=${nonce}) \u2014 do NOT re-sign a fresh nonce. ref=${nonce}.`,
|
|
3659
3664
|
{ ref: nonce }
|
|
3660
3665
|
);
|
|
@@ -3677,7 +3682,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3677
3682
|
try {
|
|
3678
3683
|
response = await fetch(url, { ..._nullishCoalesce(init, () => ( {})), headers, signal });
|
|
3679
3684
|
} catch (err) {
|
|
3680
|
-
throw new (0,
|
|
3685
|
+
throw new (0, _chunkVPENSVOIcjs.PaymentTimeoutError)(
|
|
3681
3686
|
`exact: no response after submitting the authorization (nonce=${nonce}) to ${hostOf2(url)}. The facilitator may have already settled it \u2014 verify on-chain with authorizationState(${payerFrom}, ${nonce}) before re-presenting; do NOT re-pay.`,
|
|
3682
3687
|
{ cause: err, ref: nonce }
|
|
3683
3688
|
);
|
|
@@ -3711,7 +3716,7 @@ var PipRailClient = (_class2 = class {
|
|
|
3711
3716
|
reason: `exact: 402 after submitting authorization nonce=${nonce} (${why})`,
|
|
3712
3717
|
...lastReason ? { code: lastReason.error, detail: lastReason.detail } : {}
|
|
3713
3718
|
});
|
|
3714
|
-
throw new (0,
|
|
3719
|
+
throw new (0, _chunkVPENSVOIcjs.MaxRetriesExceededError)(
|
|
3715
3720
|
`exact: server still returned 402 after submitting the signed authorization (nonce=${nonce}). Last rejection: ${why}. Re-present the SAME authorization \u2014 do NOT re-sign a fresh nonce; verify authorizationState(${payerFrom}, ${nonce}) first. ref=${nonce}.`,
|
|
3716
3721
|
{ ref: nonce }
|
|
3717
3722
|
);
|
|
@@ -3824,7 +3829,7 @@ async function fetchAcross(clients, url, init) {
|
|
|
3824
3829
|
const best = rankAcross(live.map((p) => p.plan)).find((o) => o.state === "payable");
|
|
3825
3830
|
if (!best) {
|
|
3826
3831
|
const hint = mergeDeclineHint(live.map((p) => p.plan));
|
|
3827
|
-
throw new (0,
|
|
3832
|
+
throw new (0, _chunkVPENSVOIcjs.PaymentDeclinedError)(hint || "No funded chain can settle this payment right now.");
|
|
3828
3833
|
}
|
|
3829
3834
|
const owner = live.find((p) => p.plan.options.includes(best)).client;
|
|
3830
3835
|
return owner.fetch(url, { ..._nullishCoalesce(init, () => ( {})), autoRoute: true });
|
|
@@ -4144,7 +4149,7 @@ function summarizePlan(plan) {
|
|
|
4144
4149
|
return `NOT payable: ${_nullishCoalesce(plan.fundingHint, () => ( `no settleable rail on ${plan.network}`))}`;
|
|
4145
4150
|
}
|
|
4146
4151
|
function explainDecline(err) {
|
|
4147
|
-
if (!(err instanceof
|
|
4152
|
+
if (!(err instanceof _chunkVPENSVOIcjs.PipRailError)) {
|
|
4148
4153
|
return `Payment failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
4149
4154
|
}
|
|
4150
4155
|
switch (err.code) {
|
|
@@ -4282,14 +4287,14 @@ async function readBody(res) {
|
|
|
4282
4287
|
}
|
|
4283
4288
|
}
|
|
4284
4289
|
function toToolError(err) {
|
|
4285
|
-
if (!(err instanceof
|
|
4290
|
+
if (!(err instanceof _chunkVPENSVOIcjs.PipRailError)) throw err;
|
|
4286
4291
|
const out = {
|
|
4287
4292
|
ok: false,
|
|
4288
4293
|
code: err.code,
|
|
4289
4294
|
reason: err.message,
|
|
4290
4295
|
explain: explainDecline(err)
|
|
4291
4296
|
};
|
|
4292
|
-
if (err instanceof
|
|
4297
|
+
if (err instanceof _chunkVPENSVOIcjs.PaymentDeclinedError) {
|
|
4293
4298
|
out.declined = true;
|
|
4294
4299
|
if (err.reasonCode) out.reasonCode = err.reasonCode;
|
|
4295
4300
|
}
|
|
@@ -4503,14 +4508,14 @@ function paymentTools(client) {
|
|
|
4503
4508
|
receipt: parseReceipt(res)
|
|
4504
4509
|
};
|
|
4505
4510
|
} catch (err) {
|
|
4506
|
-
if (err instanceof
|
|
4511
|
+
if (err instanceof _chunkVPENSVOIcjs.PipRailError) {
|
|
4507
4512
|
const out = {
|
|
4508
4513
|
ok: false,
|
|
4509
4514
|
code: err.code,
|
|
4510
4515
|
reason: err.message,
|
|
4511
4516
|
explain: explainDecline(err)
|
|
4512
4517
|
};
|
|
4513
|
-
if (err instanceof
|
|
4518
|
+
if (err instanceof _chunkVPENSVOIcjs.PaymentDeclinedError) {
|
|
4514
4519
|
out.declined = true;
|
|
4515
4520
|
if (err.reasonCode) out.reasonCode = err.reasonCode;
|
|
4516
4521
|
}
|
|
@@ -4864,13 +4869,13 @@ async function settleViaFacilitator(input) {
|
|
|
4864
4869
|
try {
|
|
4865
4870
|
verify = await post(`${base2}/verify`, body, auth);
|
|
4866
4871
|
} catch (err) {
|
|
4867
|
-
throw new (0,
|
|
4872
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
4868
4873
|
`exact settle (facilitator ${base2}): /verify request failed (${err instanceof Error ? err.message : String(err)}).`,
|
|
4869
4874
|
{ cause: err }
|
|
4870
4875
|
);
|
|
4871
4876
|
}
|
|
4872
4877
|
if (verify.status !== 200) {
|
|
4873
|
-
throw new (0,
|
|
4878
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
4874
4879
|
`exact settle (facilitator ${base2}): /verify returned HTTP ${verify.status} (transport/auth error).`
|
|
4875
4880
|
);
|
|
4876
4881
|
}
|
|
@@ -4886,13 +4891,13 @@ async function settleViaFacilitator(input) {
|
|
|
4886
4891
|
try {
|
|
4887
4892
|
settle = await post(`${base2}/settle`, body, auth);
|
|
4888
4893
|
} catch (err) {
|
|
4889
|
-
throw new (0,
|
|
4894
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
4890
4895
|
`exact settle (facilitator ${base2}): /settle request failed (${err instanceof Error ? err.message : String(err)}).`,
|
|
4891
4896
|
{ cause: err }
|
|
4892
4897
|
);
|
|
4893
4898
|
}
|
|
4894
4899
|
if (settle.status !== 200) {
|
|
4895
|
-
throw new (0,
|
|
4900
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
4896
4901
|
`exact settle (facilitator ${base2}): /settle returned HTTP ${settle.status} (transport/auth error).`
|
|
4897
4902
|
);
|
|
4898
4903
|
}
|
|
@@ -5285,7 +5290,7 @@ function createPaymentGate(options) {
|
|
|
5285
5290
|
}
|
|
5286
5291
|
net.assertValidPayTo(payTo);
|
|
5287
5292
|
const { asset, decimals, symbol } = net.resolveToken(a.token);
|
|
5288
|
-
const amountBase =
|
|
5293
|
+
const amountBase = _chunkVPENSVOIcjs.parseUnits.call(void 0, a.amount, decimals);
|
|
5289
5294
|
const spec = { net, asset, decimals, symbol, amountBase, amountFormatted: a.amount, payTo };
|
|
5290
5295
|
if (exactOption) {
|
|
5291
5296
|
const outcome = await resolveExactRail(net, asset);
|
|
@@ -5511,7 +5516,7 @@ function createPaymentGate(options) {
|
|
|
5511
5516
|
function enrichReceipt(spec, receipt) {
|
|
5512
5517
|
let amountFormatted = receipt.amount;
|
|
5513
5518
|
try {
|
|
5514
|
-
amountFormatted =
|
|
5519
|
+
amountFormatted = _chunkVPENSVOIcjs.formatUnits.call(void 0, BigInt(receipt.amount), spec.decimals);
|
|
5515
5520
|
} catch (e36) {
|
|
5516
5521
|
}
|
|
5517
5522
|
return {
|
|
@@ -5695,7 +5700,7 @@ function createPaymentGate(options) {
|
|
|
5695
5700
|
const ftMethod = accept.extra.assetTransferMethod;
|
|
5696
5701
|
const needsFeePayer = ftMethod === "svm" || ftMethod === "algorand" || ftMethod === "aptos" || ftMethod === "near";
|
|
5697
5702
|
if (needsFeePayer && !accept.extra.feePayer) {
|
|
5698
|
-
throw new (0,
|
|
5703
|
+
throw new (0, _chunkVPENSVOIcjs.SettlementError)(
|
|
5699
5704
|
`exact settle: the ${ftMethod} facilitator rail is missing extra.feePayer (the gas sponsor) \u2014 cannot settle.`
|
|
5700
5705
|
);
|
|
5701
5706
|
}
|
|
@@ -5760,7 +5765,7 @@ function requirePayment(options) {
|
|
|
5760
5765
|
try {
|
|
5761
5766
|
result = await gate.verify(_nullishCoalesce(req.headers[HEADER_SIGNATURE], () => ( req.headers[HEADER_SIGNATURE_V1])));
|
|
5762
5767
|
} catch (err) {
|
|
5763
|
-
if (err instanceof
|
|
5768
|
+
if (err instanceof _chunkVPENSVOIcjs.SettlementError) {
|
|
5764
5769
|
res.status(502);
|
|
5765
5770
|
res.json({
|
|
5766
5771
|
x402Version: 2,
|
|
@@ -5998,4 +6003,4 @@ async function deliverReceipt(receipt, options) {
|
|
|
5998
6003
|
|
|
5999
6004
|
|
|
6000
6005
|
|
|
6001
|
-
exports.BRAND = BRAND; exports.CHAINS = CHAINS; exports.ConfirmationTimeoutError =
|
|
6006
|
+
exports.BRAND = BRAND; exports.CHAINS = CHAINS; exports.ConfirmationTimeoutError = _chunkVPENSVOIcjs.ConfirmationTimeoutError; exports.DIRECTORY_INFO = DIRECTORY_INFO; exports.EIP3009_TYPES = EIP3009_TYPES; exports.EXACT_NETWORK_SLUGS = EXACT_NETWORK_SLUGS; exports.GENERATOR = GENERATOR; exports.HEADER_REQUIRED = HEADER_REQUIRED; exports.HEADER_RESPONSE = HEADER_RESPONSE; exports.HEADER_RESPONSE_V1 = HEADER_RESPONSE_V1; exports.HEADER_SIGNATURE = HEADER_SIGNATURE; exports.HEADER_SIGNATURE_V1 = HEADER_SIGNATURE_V1; exports.InsufficientFundsError = _chunkVPENSVOIcjs.InsufficientFundsError; exports.InvalidEnvelopeError = _chunkVPENSVOIcjs.InvalidEnvelopeError; exports.KNOWN_FACILITATORS = KNOWN_FACILITATORS; exports.MaxRetriesExceededError = _chunkVPENSVOIcjs.MaxRetriesExceededError; exports.MissingDriverError = _chunkVPENSVOIcjs.MissingDriverError; exports.MultiChainPayer = MultiChainPayer; exports.NoCompatibleAcceptError = _chunkVPENSVOIcjs.NoCompatibleAcceptError; exports.NonReplayableBodyError = _chunkVPENSVOIcjs.NonReplayableBodyError; exports.PERMIT2_ADDRESS = PERMIT2_ADDRESS; exports.PERMIT2_PROXY_CHAIN_IDS = PERMIT2_PROXY_CHAIN_IDS; exports.PERMIT2_WITNESS_TYPES = PERMIT2_WITNESS_TYPES; exports.PIPRAIL_AGENT_GUIDE = PIPRAIL_AGENT_GUIDE; exports.POWERED_BY = POWERED_BY; exports.PaymentDeclinedError = _chunkVPENSVOIcjs.PaymentDeclinedError; exports.PaymentTimeoutError = _chunkVPENSVOIcjs.PaymentTimeoutError; exports.PipRailClient = PipRailClient; exports.PipRailError = _chunkVPENSVOIcjs.PipRailError; exports.REGISTER_ATTRIBUTION = REGISTER_ATTRIBUTION; exports.RecipientNotReadyError = _chunkVPENSVOIcjs.RecipientNotReadyError; exports.SettlementError = _chunkVPENSVOIcjs.SettlementError; exports.UnknownTokenError = _chunkVPENSVOIcjs.UnknownTokenError; exports.UnsupportedNetworkError = _chunkVPENSVOIcjs.UnsupportedNetworkError; exports.UnsupportedSchemeError = _chunkVPENSVOIcjs.UnsupportedSchemeError; exports.WalletRequiredError = _chunkVPENSVOIcjs.WalletRequiredError; exports.WrongChainError = _chunkVPENSVOIcjs.WrongChainError; exports.WrongFamilyError = _chunkVPENSVOIcjs.WrongFamilyError; exports.X402_EXACT_PERMIT2_PROXY = X402_EXACT_PERMIT2_PROXY; exports.agentGuide = agentGuide; exports.appendAttribution = appendAttribution; exports.appendKeywords = appendKeywords; exports.buildBazaarExtension = buildBazaarExtension; exports.buildChallengeHeader = buildChallengeHeader; exports.buildEndpointInfo = buildEndpointInfo; exports.buildExactAuthorization = buildExactAuthorization; exports.buildExactSignatureHeader = buildExactSignatureHeader; exports.buildOpenApi = buildOpenApi; exports.buildReceiptHeader = buildReceiptHeader; exports.buildSelfDescription = buildSelfDescription; exports.buildSignatureHeader = buildSignatureHeader; exports.buildWellKnownX402 = buildWellKnownX402; exports.buildX402DnsTxt = buildX402DnsTxt; exports.chainIdForExactNetwork = chainIdForExactNetwork; exports.claim402IndexDomain = claim402IndexDomain; exports.classifyChallenge = classifyChallenge; exports.createPaymentGate = createPaymentGate; exports.decorateOutcome = decorateOutcome; exports.deliverReceipt = deliverReceipt; exports.describeChallenge = describeChallenge; exports.discoveryHeaders = discoveryHeaders; exports.eip3009Abi = eip3009Abi; exports.encodeXPaymentHeader = encodeXPaymentHeader; exports.evaluatePolicy = evaluatePolicy; exports.explainDecline = explainDecline; exports.facilitatorCoverage = facilitatorCoverage; exports.fetchAcross = fetchAcross; exports.firstKeylessFacilitator = firstKeylessFacilitator; exports.formatSpendReport = formatSpendReport; exports.getDirectoryInfo = getDirectoryInfo; exports.isPermit2ProxyChain = isPermit2ProxyChain; exports.knownFacilitatorsFor = knownFacilitatorsFor; exports.normalizeNetwork = normalizeNetwork; exports.parseChallenge = parseChallenge; exports.parseExactPaymentHeader = parseExactPaymentHeader; exports.parseExactRequirements = parseExactRequirements; exports.parseFacilitatorSupported = parseFacilitatorSupported; exports.parseReceipt = parseReceipt; exports.parseSettleResponse = parseSettleResponse; exports.parseSignatureHeader = parseSignatureHeader; exports.paymentTools = paymentTools; exports.pickAccept = pickAccept; exports.planAcross = planAcross; exports.rankResources = rankResources; exports.readExactDomain = readExactDomain; exports.register402Index = register402Index; exports.registerDriver = registerDriver; exports.registerX402Scan = registerX402Scan; exports.renderLandingPage = renderLandingPage; exports.requirePayment = requirePayment; exports.resolveChain = resolveChain; exports.scoreResource = scoreResource; exports.searchOpenIndexes = searchOpenIndexes; exports.settleViaFacilitator = settleViaFacilitator; exports.summarizePlan = summarizePlan; exports.toInsufficientFundsError = _chunkVPENSVOIcjs.toInsufficientFundsError; exports.toInvalidBody = toInvalidBody; exports.verify402IndexDomain = verify402IndexDomain;
|