@piprail/sdk 1.25.0 → 2.0.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 +20 -0
- package/README.md +4 -4
- package/dist/{algorand-677ILBQS.js → algorand-RJ4DRWHV.js} +10 -18
- package/dist/{algorand-ZJ53VCTN.cjs → algorand-RUDF55XY.cjs} +23 -31
- package/dist/{aptos-XIIHPAOO.cjs → aptos-PESRG2EQ.cjs} +22 -30
- package/dist/{aptos-3TSKTI4D.js → aptos-SMEQXIYJ.js} +10 -18
- package/dist/{chunk-L6WQRHEZ.js → chunk-47VEOHZN.js} +13 -0
- package/dist/{chunk-U35MG4TF.cjs → chunk-DKQXW454.cjs} +14 -1
- package/dist/index.cjs +108 -100
- package/dist/index.d.cts +31 -32
- package/dist/index.d.ts +31 -32
- package/dist/index.js +27 -19
- package/dist/{near-TWA4PYOD.js → near-CHE7B2CY.js} +10 -18
- package/dist/{near-MG256A3E.cjs → near-VWBV3SUW.cjs} +24 -32
- package/dist/{solana-KWNRY5NR.js → solana-DTO2R3AT.js} +7 -10
- package/dist/{solana-UEMHFQH5.cjs → solana-OIHRPGX2.cjs} +33 -36
- package/dist/{stellar-SCRRPCEA.cjs → stellar-AF7PYMMF.cjs} +27 -37
- package/dist/{stellar-YB7JXKK4.js → stellar-T5VONOEO.js} +11 -21
- package/dist/{sui-LFT65OGU.cjs → sui-3TF5XVRT.cjs} +23 -31
- package/dist/{sui-IODKU2MA.js → sui-J53NYMVL.js} +10 -18
- package/dist/{ton-QN5GTOCS.js → ton-CPK57L2O.js} +9 -12
- package/dist/{ton-RAYJFKJC.cjs → ton-ZEI7YUK7.cjs} +20 -23
- package/dist/{tron-KX4VWS7V.cjs → tron-5B3Q4SMF.cjs} +30 -38
- package/dist/{tron-QSNCDYRB.js → tron-LZRCDRZC.js} +11 -19
- package/dist/{xrpl-ECHK3GIX.js → xrpl-AH4FFC2C.js} +11 -19
- package/dist/{xrpl-GXUFDXHU.cjs → xrpl-BL4QXOVN.cjs} +27 -35
- package/package.json +1 -1
|
@@ -5,10 +5,11 @@ import {
|
|
|
5
5
|
ConfirmationTimeoutError,
|
|
6
6
|
UnknownTokenError,
|
|
7
7
|
WrongFamilyError,
|
|
8
|
+
assertNoLegacyWalletKey,
|
|
8
9
|
nativeCost,
|
|
9
10
|
rejectForeignToken,
|
|
10
11
|
toInsufficientFundsError
|
|
11
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-47VEOHZN.js";
|
|
12
13
|
|
|
13
14
|
// src/drivers/ton/index.ts
|
|
14
15
|
import { Address as Address2 } from "@ton/core";
|
|
@@ -203,17 +204,13 @@ import { WalletContractV4, WalletContractV5R1 } from "@ton/ton";
|
|
|
203
204
|
function assertTonWallet(wallet, network) {
|
|
204
205
|
if (typeof wallet !== "object" || wallet === null) {
|
|
205
206
|
throw new WrongFamilyError(
|
|
206
|
-
`chain ${network} is TON; wallet must be {
|
|
207
|
+
`chain ${network} is TON; wallet must be { key } (24-word mnemonic) or { keyPair }.`
|
|
207
208
|
);
|
|
208
209
|
}
|
|
209
|
-
|
|
210
|
+
assertNoLegacyWalletKey(wallet, "TON");
|
|
211
|
+
if (!("key" in wallet) && !("keyPair" in wallet)) {
|
|
210
212
|
throw new WrongFamilyError(
|
|
211
|
-
`chain ${network} is TON;
|
|
212
|
-
);
|
|
213
|
-
}
|
|
214
|
-
if (!("mnemonic" in wallet) && !("keyPair" in wallet)) {
|
|
215
|
-
throw new WrongFamilyError(
|
|
216
|
-
`chain ${network} is TON; wallet must be { mnemonic } (24 words) or { keyPair }.`
|
|
213
|
+
`chain ${network} is TON; wallet must be { key } (24-word mnemonic) or { keyPair }.`
|
|
217
214
|
);
|
|
218
215
|
}
|
|
219
216
|
return wallet;
|
|
@@ -221,13 +218,13 @@ function assertTonWallet(wallet, network) {
|
|
|
221
218
|
async function resolveTonWallet(config) {
|
|
222
219
|
const version = config.version ?? "v4";
|
|
223
220
|
let keyPair;
|
|
224
|
-
if (config.
|
|
225
|
-
const words = Array.isArray(config.
|
|
221
|
+
if (config.key) {
|
|
222
|
+
const words = Array.isArray(config.key) ? config.key : config.key.trim().split(/\s+/);
|
|
226
223
|
keyPair = await mnemonicToWalletKey(words);
|
|
227
224
|
} else if (config.keyPair) {
|
|
228
225
|
keyPair = config.keyPair;
|
|
229
226
|
} else {
|
|
230
|
-
throw new WrongFamilyError("TON wallet needs {
|
|
227
|
+
throw new WrongFamilyError("TON wallet needs { key } (24-word mnemonic) or { keyPair }.");
|
|
231
228
|
}
|
|
232
229
|
const contract = version === "v5r1" ? WalletContractV5R1.create({ workchain: 0, publicKey: keyPair.publicKey }) : WalletContractV4.create({ workchain: 0, publicKey: keyPair.publicKey });
|
|
233
230
|
return { keyPair, contract };
|
|
@@ -8,7 +8,8 @@ var _chunkCQREG5LEcjs = require('./chunk-CQREG5LE.cjs');
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
|
|
12
|
+
var _chunkDKQXW454cjs = require('./chunk-DKQXW454.cjs');
|
|
12
13
|
|
|
13
14
|
// src/drivers/ton/index.ts
|
|
14
15
|
var _core = require('@ton/core');
|
|
@@ -74,7 +75,7 @@ async function waitForSeqno(opened, from, { tries = 30, intervalMs = 2e3 } = {})
|
|
|
74
75
|
}
|
|
75
76
|
if (current > from) return;
|
|
76
77
|
}
|
|
77
|
-
throw new (0,
|
|
78
|
+
throw new (0, _chunkDKQXW454cjs.ConfirmationTimeoutError)(
|
|
78
79
|
`TON wallet seqno did not advance past ${from} \u2014 the payment may not have been accepted.`
|
|
79
80
|
);
|
|
80
81
|
}
|
|
@@ -202,18 +203,14 @@ var _crypto = require('@ton/crypto');
|
|
|
202
203
|
|
|
203
204
|
function assertTonWallet(wallet, network) {
|
|
204
205
|
if (typeof wallet !== "object" || wallet === null) {
|
|
205
|
-
throw new (0,
|
|
206
|
-
`chain ${network} is TON; wallet must be {
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
if ("privateKey" in wallet || "walletClient" in wallet) {
|
|
210
|
-
throw new (0, _chunkU35MG4TFcjs.WrongFamilyError)(
|
|
211
|
-
`chain ${network} is TON; an EVM wallet can't be used \u2014 pass { mnemonic } (24 words) or { keyPair }.`
|
|
206
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
207
|
+
`chain ${network} is TON; wallet must be { key } (24-word mnemonic) or { keyPair }.`
|
|
212
208
|
);
|
|
213
209
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
210
|
+
_chunkDKQXW454cjs.assertNoLegacyWalletKey.call(void 0, wallet, "TON");
|
|
211
|
+
if (!("key" in wallet) && !("keyPair" in wallet)) {
|
|
212
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
213
|
+
`chain ${network} is TON; wallet must be { key } (24-word mnemonic) or { keyPair }.`
|
|
217
214
|
);
|
|
218
215
|
}
|
|
219
216
|
return wallet;
|
|
@@ -221,13 +218,13 @@ function assertTonWallet(wallet, network) {
|
|
|
221
218
|
async function resolveTonWallet(config) {
|
|
222
219
|
const version = _nullishCoalesce(config.version, () => ( "v4"));
|
|
223
220
|
let keyPair;
|
|
224
|
-
if (config.
|
|
225
|
-
const words = Array.isArray(config.
|
|
221
|
+
if (config.key) {
|
|
222
|
+
const words = Array.isArray(config.key) ? config.key : config.key.trim().split(/\s+/);
|
|
226
223
|
keyPair = await _crypto.mnemonicToWalletKey.call(void 0, words);
|
|
227
224
|
} else if (config.keyPair) {
|
|
228
225
|
keyPair = config.keyPair;
|
|
229
226
|
} else {
|
|
230
|
-
throw new (0,
|
|
227
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)("TON wallet needs { key } (24-word mnemonic) or { keyPair }.");
|
|
231
228
|
}
|
|
232
229
|
const contract = version === "v5r1" ? _ton.WalletContractV5R1.create({ workchain: 0, publicKey: keyPair.publicKey }) : _ton.WalletContractV4.create({ workchain: 0, publicKey: keyPair.publicKey });
|
|
233
230
|
return { keyPair, contract };
|
|
@@ -270,15 +267,15 @@ function makeTonNetwork(preset, rpcUrl) {
|
|
|
270
267
|
const info = preset.tokens[token.toUpperCase()];
|
|
271
268
|
if (!info) {
|
|
272
269
|
const known = Object.keys(preset.tokens).join(", ") || "(none built in)";
|
|
273
|
-
throw new (0,
|
|
270
|
+
throw new (0, _chunkDKQXW454cjs.UnknownTokenError)(
|
|
274
271
|
`token "${token}" isn't built in for TON (known: ${known}). Note: native USDC doesn't exist on TON. Pass { master, decimals } for a custom jetton, or use 'native'.`
|
|
275
272
|
);
|
|
276
273
|
}
|
|
277
274
|
return { asset: info.master, decimals: info.decimals, symbol: info.symbol };
|
|
278
275
|
}
|
|
279
|
-
|
|
276
|
+
_chunkDKQXW454cjs.rejectForeignToken.call(void 0, token, "ton", network);
|
|
280
277
|
if (!("master" in token)) {
|
|
281
|
-
throw new (0,
|
|
278
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
282
279
|
`chain ${network} is TON; a custom token must be { master, decimals }.`
|
|
283
280
|
);
|
|
284
281
|
}
|
|
@@ -297,14 +294,14 @@ function makeTonNetwork(preset, rpcUrl) {
|
|
|
297
294
|
},
|
|
298
295
|
assertValidPayTo(payTo) {
|
|
299
296
|
if (payTo.startsWith("0x")) {
|
|
300
|
-
throw new (0,
|
|
297
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
301
298
|
`chain ${network} is TON, but payTo "${payTo}" looks like an EVM address.`
|
|
302
299
|
);
|
|
303
300
|
}
|
|
304
301
|
try {
|
|
305
302
|
_core.Address.parse(payTo);
|
|
306
303
|
} catch (e6) {
|
|
307
|
-
throw new (0,
|
|
304
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
308
305
|
`chain ${network} is TON, but payTo "${payTo}" is not a valid TON address.`
|
|
309
306
|
);
|
|
310
307
|
}
|
|
@@ -320,7 +317,7 @@ function makeTonNetwork(preset, rpcUrl) {
|
|
|
320
317
|
const watch = await watchAccountFor(accept);
|
|
321
318
|
return encodeRef(watch, accept.extra.nonce);
|
|
322
319
|
} catch (err) {
|
|
323
|
-
throw _nullishCoalesce(
|
|
320
|
+
throw _nullishCoalesce(_chunkDKQXW454cjs.toInsufficientFundsError.call(void 0, err), () => ( err));
|
|
324
321
|
}
|
|
325
322
|
},
|
|
326
323
|
async confirm(ref) {
|
|
@@ -339,12 +336,12 @@ function makeTonNetwork(preset, rpcUrl) {
|
|
|
339
336
|
if (inc && inc.comment === nonce) return { height: tx.lt.toString() };
|
|
340
337
|
}
|
|
341
338
|
}
|
|
342
|
-
throw new (0,
|
|
339
|
+
throw new (0, _chunkDKQXW454cjs.ConfirmationTimeoutError)(`TON payment for nonce ${nonce} did not settle in time.`);
|
|
343
340
|
},
|
|
344
341
|
async estimateCost(accept) {
|
|
345
342
|
const fee = accept.asset === "native" ? 10000000n : 50000000n;
|
|
346
343
|
const detail = accept.asset === "native" ? "~0.01 TON network fee" : "~0.05 TON attached for the jetton transfer (leftover refunded)";
|
|
347
|
-
return
|
|
344
|
+
return _chunkDKQXW454cjs.nativeCost.call(void 0, { symbol: "TON", decimals: TON_DECIMALS, fee, basis: "heuristic", detail });
|
|
348
345
|
},
|
|
349
346
|
async balanceOf(wallet, asset) {
|
|
350
347
|
let owner;
|
|
@@ -9,7 +9,8 @@ var _chunkCQREG5LEcjs = require('./chunk-CQREG5LE.cjs');
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
var _chunkDKQXW454cjs = require('./chunk-DKQXW454.cjs');
|
|
13
14
|
|
|
14
15
|
// src/drivers/tron/index.ts
|
|
15
16
|
var _tronweb = require('tronweb');
|
|
@@ -61,7 +62,7 @@ async function payTron(params) {
|
|
|
61
62
|
return _nullishCoalesce(_nullishCoalesce(broadcast.txid, () => ( _optionalChain([broadcast, 'access', _7 => _7.transaction, 'optionalAccess', _8 => _8.txID]))), () => ( signed.txID));
|
|
62
63
|
}
|
|
63
64
|
if (isTronAffordability(broadcast.code, broadcast.message)) {
|
|
64
|
-
throw new (0,
|
|
65
|
+
throw new (0, _chunkDKQXW454cjs.InsufficientFundsError)(
|
|
65
66
|
`Tron payment rejected (${_nullishCoalesce(broadcast.code, () => ( "broadcast"))}): not enough TRX for energy/bandwidth, or insufficient token balance.`
|
|
66
67
|
);
|
|
67
68
|
}
|
|
@@ -69,8 +70,8 @@ async function payTron(params) {
|
|
|
69
70
|
`Tron broadcast failed: ${_nullishCoalesce(broadcast.code, () => ( ""))} ${decodeMaybeHex(broadcast.message)}`.trim()
|
|
70
71
|
);
|
|
71
72
|
} catch (err) {
|
|
72
|
-
if (err instanceof
|
|
73
|
-
throw _nullishCoalesce(
|
|
73
|
+
if (err instanceof _chunkDKQXW454cjs.InsufficientFundsError) throw err;
|
|
74
|
+
throw _nullishCoalesce(_chunkDKQXW454cjs.toInsufficientFundsError.call(void 0, err), () => ( err));
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
async function payTronNative(params) {
|
|
@@ -83,7 +84,7 @@ async function payTronNative(params) {
|
|
|
83
84
|
return _nullishCoalesce(_nullishCoalesce(broadcast.txid, () => ( _optionalChain([broadcast, 'access', _11 => _11.transaction, 'optionalAccess', _12 => _12.txID]))), () => ( signed.txID));
|
|
84
85
|
}
|
|
85
86
|
if (isTronAffordability(broadcast.code, broadcast.message)) {
|
|
86
|
-
throw new (0,
|
|
87
|
+
throw new (0, _chunkDKQXW454cjs.InsufficientFundsError)(
|
|
87
88
|
`Tron TRX payment rejected (${_nullishCoalesce(broadcast.code, () => ( "broadcast"))}): not enough TRX for the amount plus bandwidth (and the ~1 TRX account-creation fee if the recipient is new).`
|
|
88
89
|
);
|
|
89
90
|
}
|
|
@@ -91,8 +92,8 @@ async function payTronNative(params) {
|
|
|
91
92
|
`Tron TRX broadcast failed: ${_nullishCoalesce(broadcast.code, () => ( ""))} ${decodeMaybeHex(broadcast.message)}`.trim()
|
|
92
93
|
);
|
|
93
94
|
} catch (err) {
|
|
94
|
-
if (err instanceof
|
|
95
|
-
throw _nullishCoalesce(
|
|
95
|
+
if (err instanceof _chunkDKQXW454cjs.InsufficientFundsError) throw err;
|
|
96
|
+
throw _nullishCoalesce(_chunkDKQXW454cjs.toInsufficientFundsError.call(void 0, err), () => ( err));
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
99
|
function decodeMaybeHex(message) {
|
|
@@ -263,35 +264,26 @@ function txNotFound(txid) {
|
|
|
263
264
|
// src/drivers/tron/wallet.ts
|
|
264
265
|
function assertTronWallet(wallet, network) {
|
|
265
266
|
if (typeof wallet !== "object" || wallet === null) {
|
|
266
|
-
throw new (0,
|
|
267
|
-
`chain ${network} is Tron; wallet must be {
|
|
268
|
-
);
|
|
269
|
-
}
|
|
270
|
-
if ("walletClient" in wallet) {
|
|
271
|
-
throw new (0, _chunkU35MG4TFcjs.WrongFamilyError)(
|
|
272
|
-
`chain ${network} is Tron; a viem { walletClient } can't be used \u2014 pass { privateKey } (32-byte hex).`
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
if ("secretKey" in wallet || "signer" in wallet || "mnemonic" in wallet || "keyPair" in wallet || "secret" in wallet || "keypair" in wallet || "seed" in wallet) {
|
|
276
|
-
throw new (0, _chunkU35MG4TFcjs.WrongFamilyError)(
|
|
277
|
-
`chain ${network} is Tron; that looks like a Solana/TON/Stellar/XRPL wallet \u2014 pass { privateKey } (32-byte hex).`
|
|
267
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
268
|
+
`chain ${network} is Tron; wallet must be { key } (32-byte hex).`
|
|
278
269
|
);
|
|
279
270
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
271
|
+
_chunkDKQXW454cjs.assertNoLegacyWalletKey.call(void 0, wallet, "Tron");
|
|
272
|
+
if (!("key" in wallet)) {
|
|
273
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
274
|
+
`chain ${network} is Tron; wallet must be { key } (32-byte hex).`
|
|
283
275
|
);
|
|
284
276
|
}
|
|
285
277
|
return wallet;
|
|
286
278
|
}
|
|
287
279
|
function resolveTronPrivateKey(config) {
|
|
288
|
-
if (!config.
|
|
289
|
-
throw new (0,
|
|
280
|
+
if (!config.key) {
|
|
281
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)("Tron wallet needs { key } (32-byte hex).");
|
|
290
282
|
}
|
|
291
|
-
const hex = config.
|
|
283
|
+
const hex = config.key.replace(/^0x/i, "").toLowerCase();
|
|
292
284
|
if (!/^[0-9a-f]{64}$/.test(hex)) {
|
|
293
|
-
throw new (0,
|
|
294
|
-
"Tron wallet {
|
|
285
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
286
|
+
"Tron wallet { key } must be a 32-byte hex string (64 hex chars)."
|
|
295
287
|
);
|
|
296
288
|
}
|
|
297
289
|
return hex;
|
|
@@ -340,21 +332,21 @@ function makeTronNetwork(preset, rpcUrl) {
|
|
|
340
332
|
const info = preset.tokens[token.toUpperCase()];
|
|
341
333
|
if (!info) {
|
|
342
334
|
const known = Object.keys(preset.tokens).join(", ") || "(none built in)";
|
|
343
|
-
throw new (0,
|
|
335
|
+
throw new (0, _chunkDKQXW454cjs.UnknownTokenError)(
|
|
344
336
|
`token "${token}" isn't built in for Tron (known: ${known}). Note: native USDC doesn't exist on Tron. Pass { address, decimals } for a custom TRC-20.`
|
|
345
337
|
);
|
|
346
338
|
}
|
|
347
339
|
return { asset: info.address, decimals: info.decimals, symbol: info.symbol };
|
|
348
340
|
}
|
|
349
|
-
|
|
341
|
+
_chunkDKQXW454cjs.rejectForeignToken.call(void 0, token, "tron", network);
|
|
350
342
|
if (!("address" in token)) {
|
|
351
|
-
throw new (0,
|
|
343
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
352
344
|
`chain ${network} is Tron; a custom token must be { address, decimals } (Base58 T\u2026 contract).`
|
|
353
345
|
);
|
|
354
346
|
}
|
|
355
347
|
const t = token;
|
|
356
348
|
if (t.address.startsWith("0x") || !tronWeb.isAddress(t.address)) {
|
|
357
|
-
throw new (0,
|
|
349
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
358
350
|
`chain ${network} is Tron, but token address "${t.address}" is not a valid Tron contract (T\u2026).`
|
|
359
351
|
);
|
|
360
352
|
}
|
|
@@ -373,12 +365,12 @@ function makeTronNetwork(preset, rpcUrl) {
|
|
|
373
365
|
},
|
|
374
366
|
assertValidPayTo(payTo) {
|
|
375
367
|
if (payTo.startsWith("0x")) {
|
|
376
|
-
throw new (0,
|
|
368
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
377
369
|
`chain ${network} is Tron, but payTo "${payTo}" looks like an EVM address.`
|
|
378
370
|
);
|
|
379
371
|
}
|
|
380
372
|
if (!tronWeb.isAddress(payTo)) {
|
|
381
|
-
throw new (0,
|
|
373
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
382
374
|
`chain ${network} is Tron, but payTo "${payTo}" is not a valid Tron address (T\u2026).`
|
|
383
375
|
);
|
|
384
376
|
}
|
|
@@ -390,7 +382,7 @@ function makeTronNetwork(preset, rpcUrl) {
|
|
|
390
382
|
const privateKey = resolveTronPrivateKey(wallet._native);
|
|
391
383
|
const from = tronWeb.address.fromPrivateKey(privateKey);
|
|
392
384
|
if (!from) {
|
|
393
|
-
throw new (0,
|
|
385
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)("Tron wallet { key } could not derive an address.");
|
|
394
386
|
}
|
|
395
387
|
if (accept.asset === "native") {
|
|
396
388
|
return payTronNative({ client: tronWeb, from, privateKey, accept });
|
|
@@ -413,11 +405,11 @@ function makeTronNetwork(preset, rpcUrl) {
|
|
|
413
405
|
}
|
|
414
406
|
await _chunkCQREG5LEcjs.delay.call(void 0, 2500);
|
|
415
407
|
}
|
|
416
|
-
throw new (0,
|
|
408
|
+
throw new (0, _chunkDKQXW454cjs.ConfirmationTimeoutError)(`Tron tx ${txid} did not solidify in time.`);
|
|
417
409
|
},
|
|
418
410
|
async estimateCost(accept, opts) {
|
|
419
411
|
if (accept.asset === "native") {
|
|
420
|
-
return
|
|
412
|
+
return _chunkDKQXW454cjs.nativeCost.call(void 0, {
|
|
421
413
|
symbol: "TRX",
|
|
422
414
|
decimals: TRX_DECIMALS,
|
|
423
415
|
fee: 1300000n,
|
|
@@ -441,7 +433,7 @@ function makeTronNetwork(preset, rpcUrl) {
|
|
|
441
433
|
);
|
|
442
434
|
const energy = BigInt(_nullishCoalesce(r.energy_used, () => ( 0)));
|
|
443
435
|
if (energy > 0n) {
|
|
444
|
-
return
|
|
436
|
+
return _chunkDKQXW454cjs.nativeCost.call(void 0, {
|
|
445
437
|
symbol: "TRX",
|
|
446
438
|
decimals: TRX_DECIMALS,
|
|
447
439
|
fee: energy * ENERGY_PRICE + BANDWIDTH_SUN,
|
|
@@ -452,7 +444,7 @@ function makeTronNetwork(preset, rpcUrl) {
|
|
|
452
444
|
} catch (e8) {
|
|
453
445
|
}
|
|
454
446
|
}
|
|
455
|
-
return
|
|
447
|
+
return _chunkDKQXW454cjs.nativeCost.call(void 0, {
|
|
456
448
|
symbol: "TRX",
|
|
457
449
|
decimals: TRX_DECIMALS,
|
|
458
450
|
fee: 30000n * ENERGY_PRICE + BANDWIDTH_SUN,
|
|
@@ -6,10 +6,11 @@ import {
|
|
|
6
6
|
InsufficientFundsError,
|
|
7
7
|
UnknownTokenError,
|
|
8
8
|
WrongFamilyError,
|
|
9
|
+
assertNoLegacyWalletKey,
|
|
9
10
|
nativeCost,
|
|
10
11
|
rejectForeignToken,
|
|
11
12
|
toInsufficientFundsError
|
|
12
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-47VEOHZN.js";
|
|
13
14
|
|
|
14
15
|
// src/drivers/tron/index.ts
|
|
15
16
|
import { TronWeb } from "tronweb";
|
|
@@ -264,34 +265,25 @@ function txNotFound(txid) {
|
|
|
264
265
|
function assertTronWallet(wallet, network) {
|
|
265
266
|
if (typeof wallet !== "object" || wallet === null) {
|
|
266
267
|
throw new WrongFamilyError(
|
|
267
|
-
`chain ${network} is Tron; wallet must be {
|
|
268
|
+
`chain ${network} is Tron; wallet must be { key } (32-byte hex).`
|
|
268
269
|
);
|
|
269
270
|
}
|
|
270
|
-
|
|
271
|
+
assertNoLegacyWalletKey(wallet, "Tron");
|
|
272
|
+
if (!("key" in wallet)) {
|
|
271
273
|
throw new WrongFamilyError(
|
|
272
|
-
`chain ${network} is Tron;
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
if ("secretKey" in wallet || "signer" in wallet || "mnemonic" in wallet || "keyPair" in wallet || "secret" in wallet || "keypair" in wallet || "seed" in wallet) {
|
|
276
|
-
throw new WrongFamilyError(
|
|
277
|
-
`chain ${network} is Tron; that looks like a Solana/TON/Stellar/XRPL wallet \u2014 pass { privateKey } (32-byte hex).`
|
|
278
|
-
);
|
|
279
|
-
}
|
|
280
|
-
if (!("privateKey" in wallet)) {
|
|
281
|
-
throw new WrongFamilyError(
|
|
282
|
-
`chain ${network} is Tron; wallet must be { privateKey } (32-byte hex).`
|
|
274
|
+
`chain ${network} is Tron; wallet must be { key } (32-byte hex).`
|
|
283
275
|
);
|
|
284
276
|
}
|
|
285
277
|
return wallet;
|
|
286
278
|
}
|
|
287
279
|
function resolveTronPrivateKey(config) {
|
|
288
|
-
if (!config.
|
|
289
|
-
throw new WrongFamilyError("Tron wallet needs {
|
|
280
|
+
if (!config.key) {
|
|
281
|
+
throw new WrongFamilyError("Tron wallet needs { key } (32-byte hex).");
|
|
290
282
|
}
|
|
291
|
-
const hex = config.
|
|
283
|
+
const hex = config.key.replace(/^0x/i, "").toLowerCase();
|
|
292
284
|
if (!/^[0-9a-f]{64}$/.test(hex)) {
|
|
293
285
|
throw new WrongFamilyError(
|
|
294
|
-
"Tron wallet {
|
|
286
|
+
"Tron wallet { key } must be a 32-byte hex string (64 hex chars)."
|
|
295
287
|
);
|
|
296
288
|
}
|
|
297
289
|
return hex;
|
|
@@ -390,7 +382,7 @@ function makeTronNetwork(preset, rpcUrl) {
|
|
|
390
382
|
const privateKey = resolveTronPrivateKey(wallet._native);
|
|
391
383
|
const from = tronWeb.address.fromPrivateKey(privateKey);
|
|
392
384
|
if (!from) {
|
|
393
|
-
throw new WrongFamilyError("Tron wallet {
|
|
385
|
+
throw new WrongFamilyError("Tron wallet { key } could not derive an address.");
|
|
394
386
|
}
|
|
395
387
|
if (accept.asset === "native") {
|
|
396
388
|
return payTronNative({ client: tronWeb, from, privateKey, accept });
|
|
@@ -7,12 +7,13 @@ import {
|
|
|
7
7
|
RecipientNotReadyError,
|
|
8
8
|
UnknownTokenError,
|
|
9
9
|
WrongFamilyError,
|
|
10
|
+
assertNoLegacyWalletKey,
|
|
10
11
|
floorUnits,
|
|
11
12
|
nativeCost,
|
|
12
13
|
parseUnits,
|
|
13
14
|
rejectForeignToken,
|
|
14
15
|
toInsufficientFundsError
|
|
15
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-47VEOHZN.js";
|
|
16
17
|
|
|
17
18
|
// src/drivers/xrpl/index.ts
|
|
18
19
|
import { isValidClassicAddress } from "xrpl";
|
|
@@ -254,35 +255,26 @@ import { Wallet, isValidSecret } from "xrpl";
|
|
|
254
255
|
function assertXrplWallet(wallet, network) {
|
|
255
256
|
if (typeof wallet !== "object" || wallet === null) {
|
|
256
257
|
throw new WrongFamilyError(
|
|
257
|
-
`chain ${network} is XRPL; wallet must be {
|
|
258
|
+
`chain ${network} is XRPL; wallet must be { key } (s\u2026 seed) or { wallet }.`
|
|
258
259
|
);
|
|
259
260
|
}
|
|
260
|
-
|
|
261
|
+
assertNoLegacyWalletKey(wallet, "XRPL");
|
|
262
|
+
if (!("key" in wallet) && !("wallet" in wallet)) {
|
|
261
263
|
throw new WrongFamilyError(
|
|
262
|
-
`chain ${network} is XRPL;
|
|
263
|
-
);
|
|
264
|
-
}
|
|
265
|
-
if ("secretKey" in wallet || "signer" in wallet || "mnemonic" in wallet || "keyPair" in wallet || "secret" in wallet || "keypair" in wallet) {
|
|
266
|
-
throw new WrongFamilyError(
|
|
267
|
-
`chain ${network} is XRPL; that looks like a Solana/TON/Stellar wallet \u2014 pass { seed } (s\u2026 seed) or { wallet }.`
|
|
268
|
-
);
|
|
269
|
-
}
|
|
270
|
-
if (!("seed" in wallet) && !("wallet" in wallet)) {
|
|
271
|
-
throw new WrongFamilyError(
|
|
272
|
-
`chain ${network} is XRPL; wallet must be { seed } (s\u2026 seed) or { wallet }.`
|
|
264
|
+
`chain ${network} is XRPL; wallet must be { key } (s\u2026 seed) or { wallet }.`
|
|
273
265
|
);
|
|
274
266
|
}
|
|
275
267
|
return wallet;
|
|
276
268
|
}
|
|
277
269
|
function resolveXrplWallet(config) {
|
|
278
270
|
if (config.wallet) return config.wallet;
|
|
279
|
-
if (config.
|
|
280
|
-
if (!isValidSecret(config.
|
|
281
|
-
throw new WrongFamilyError("XRPL wallet {
|
|
271
|
+
if (config.key) {
|
|
272
|
+
if (!isValidSecret(config.key)) {
|
|
273
|
+
throw new WrongFamilyError("XRPL wallet { key } is not a valid s\u2026 secret seed.");
|
|
282
274
|
}
|
|
283
|
-
return Wallet.fromSeed(config.
|
|
275
|
+
return Wallet.fromSeed(config.key);
|
|
284
276
|
}
|
|
285
|
-
throw new WrongFamilyError("XRPL wallet needs {
|
|
277
|
+
throw new WrongFamilyError("XRPL wallet needs { key } (s\u2026 seed) or { wallet }.");
|
|
286
278
|
}
|
|
287
279
|
|
|
288
280
|
// src/drivers/xrpl/index.ts
|
|
@@ -12,7 +12,8 @@ var _chunkCQREG5LEcjs = require('./chunk-CQREG5LE.cjs');
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
var _chunkDKQXW454cjs = require('./chunk-DKQXW454.cjs');
|
|
16
17
|
|
|
17
18
|
// src/drivers/xrpl/index.ts
|
|
18
19
|
var _xrpl = require('xrpl');
|
|
@@ -94,17 +95,17 @@ async function payXrpl(params) {
|
|
|
94
95
|
const code = res.engine_result;
|
|
95
96
|
if (code.startsWith("tes")) return _nullishCoalesce(_optionalChain([res, 'access', _ => _.tx_json, 'optionalAccess', _2 => _2.hash]), () => ( signed.hash));
|
|
96
97
|
const recipientMsg = recipientNotReadyMessage(code);
|
|
97
|
-
if (recipientMsg) throw new (0,
|
|
98
|
+
if (recipientMsg) throw new (0, _chunkDKQXW454cjs.RecipientNotReadyError)(recipientMsg, { cause: makeEngineError(res) });
|
|
98
99
|
if (isAffordabilityCode(code)) {
|
|
99
|
-
throw new (0,
|
|
100
|
+
throw new (0, _chunkDKQXW454cjs.InsufficientFundsError)(
|
|
100
101
|
`XRPL payment rejected: the sender can't cover it \u2014 balance or the 1 XRP base reserve. (XRPL: ${code})`,
|
|
101
102
|
{ cause: makeEngineError(res) }
|
|
102
103
|
);
|
|
103
104
|
}
|
|
104
105
|
throw makeEngineError(res);
|
|
105
106
|
} catch (err) {
|
|
106
|
-
if (err instanceof
|
|
107
|
-
throw _nullishCoalesce(
|
|
107
|
+
if (err instanceof _chunkDKQXW454cjs.InsufficientFundsError || err instanceof _chunkDKQXW454cjs.RecipientNotReadyError) throw err;
|
|
108
|
+
throw _nullishCoalesce(_chunkDKQXW454cjs.toInsufficientFundsError.call(void 0, err), () => ( err));
|
|
108
109
|
}
|
|
109
110
|
}
|
|
110
111
|
function amountForAccept(accept) {
|
|
@@ -229,7 +230,7 @@ function deliveredBaseUnits(delivered, want, decimals) {
|
|
|
229
230
|
return null;
|
|
230
231
|
}
|
|
231
232
|
try {
|
|
232
|
-
return
|
|
233
|
+
return _chunkDKQXW454cjs.floorUnits.call(void 0, delivered.value, decimals);
|
|
233
234
|
} catch (e3) {
|
|
234
235
|
return null;
|
|
235
236
|
}
|
|
@@ -253,36 +254,27 @@ function rpcFailed(nonce) {
|
|
|
253
254
|
|
|
254
255
|
function assertXrplWallet(wallet, network) {
|
|
255
256
|
if (typeof wallet !== "object" || wallet === null) {
|
|
256
|
-
throw new (0,
|
|
257
|
-
`chain ${network} is XRPL; wallet must be {
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
if ("privateKey" in wallet || "walletClient" in wallet) {
|
|
261
|
-
throw new (0, _chunkU35MG4TFcjs.WrongFamilyError)(
|
|
262
|
-
`chain ${network} is XRPL; an EVM wallet can't be used \u2014 pass { seed } (s\u2026 seed) or { wallet }.`
|
|
263
|
-
);
|
|
264
|
-
}
|
|
265
|
-
if ("secretKey" in wallet || "signer" in wallet || "mnemonic" in wallet || "keyPair" in wallet || "secret" in wallet || "keypair" in wallet) {
|
|
266
|
-
throw new (0, _chunkU35MG4TFcjs.WrongFamilyError)(
|
|
267
|
-
`chain ${network} is XRPL; that looks like a Solana/TON/Stellar wallet \u2014 pass { seed } (s\u2026 seed) or { wallet }.`
|
|
257
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
258
|
+
`chain ${network} is XRPL; wallet must be { key } (s\u2026 seed) or { wallet }.`
|
|
268
259
|
);
|
|
269
260
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
261
|
+
_chunkDKQXW454cjs.assertNoLegacyWalletKey.call(void 0, wallet, "XRPL");
|
|
262
|
+
if (!("key" in wallet) && !("wallet" in wallet)) {
|
|
263
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
264
|
+
`chain ${network} is XRPL; wallet must be { key } (s\u2026 seed) or { wallet }.`
|
|
273
265
|
);
|
|
274
266
|
}
|
|
275
267
|
return wallet;
|
|
276
268
|
}
|
|
277
269
|
function resolveXrplWallet(config) {
|
|
278
270
|
if (config.wallet) return config.wallet;
|
|
279
|
-
if (config.
|
|
280
|
-
if (!_xrpl.isValidSecret.call(void 0, config.
|
|
281
|
-
throw new (0,
|
|
271
|
+
if (config.key) {
|
|
272
|
+
if (!_xrpl.isValidSecret.call(void 0, config.key)) {
|
|
273
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)("XRPL wallet { key } is not a valid s\u2026 secret seed.");
|
|
282
274
|
}
|
|
283
|
-
return _xrpl.Wallet.fromSeed(config.
|
|
275
|
+
return _xrpl.Wallet.fromSeed(config.key);
|
|
284
276
|
}
|
|
285
|
-
throw new (0,
|
|
277
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)("XRPL wallet needs { key } (s\u2026 seed) or { wallet }.");
|
|
286
278
|
}
|
|
287
279
|
|
|
288
280
|
// src/drivers/xrpl/index.ts
|
|
@@ -357,7 +349,7 @@ function makeXrplNetwork(preset, rpcUrl) {
|
|
|
357
349
|
const info = preset.tokens[token.toUpperCase()];
|
|
358
350
|
if (!info) {
|
|
359
351
|
const known = Object.keys(preset.tokens).join(", ") || "(none built in)";
|
|
360
|
-
throw new (0,
|
|
352
|
+
throw new (0, _chunkDKQXW454cjs.UnknownTokenError)(
|
|
361
353
|
`token "${token}" isn't built in for XRPL (known: ${known}). Pass { issuer, currencyHex, decimals } for a custom IOU, or use 'native'.`
|
|
362
354
|
);
|
|
363
355
|
}
|
|
@@ -367,10 +359,10 @@ function makeXrplNetwork(preset, rpcUrl) {
|
|
|
367
359
|
symbol: info.symbol
|
|
368
360
|
};
|
|
369
361
|
}
|
|
370
|
-
|
|
362
|
+
_chunkDKQXW454cjs.rejectForeignToken.call(void 0, token, "xrpl", network);
|
|
371
363
|
const t = token;
|
|
372
364
|
if (!t.issuer || !t.currencyHex || typeof t.decimals !== "number") {
|
|
373
|
-
throw new (0,
|
|
365
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
374
366
|
`chain ${network} is XRPL; a custom token must be { issuer, currencyHex, decimals }.`
|
|
375
367
|
);
|
|
376
368
|
}
|
|
@@ -391,12 +383,12 @@ function makeXrplNetwork(preset, rpcUrl) {
|
|
|
391
383
|
},
|
|
392
384
|
assertValidPayTo(payTo) {
|
|
393
385
|
if (payTo.startsWith("0x")) {
|
|
394
|
-
throw new (0,
|
|
386
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
395
387
|
`chain ${network} is XRPL, but payTo "${payTo}" looks like an EVM address.`
|
|
396
388
|
);
|
|
397
389
|
}
|
|
398
390
|
if (!_xrpl.isValidClassicAddress.call(void 0, payTo)) {
|
|
399
|
-
throw new (0,
|
|
391
|
+
throw new (0, _chunkDKQXW454cjs.WrongFamilyError)(
|
|
400
392
|
`chain ${network} is XRPL, but payTo "${payTo}" is not a valid XRPL account (r\u2026).`
|
|
401
393
|
);
|
|
402
394
|
}
|
|
@@ -419,14 +411,14 @@ function makeXrplNetwork(preset, rpcUrl) {
|
|
|
419
411
|
}
|
|
420
412
|
await _chunkCQREG5LEcjs.delay.call(void 0, 1500);
|
|
421
413
|
}
|
|
422
|
-
throw new (0,
|
|
414
|
+
throw new (0, _chunkDKQXW454cjs.ConfirmationTimeoutError)(`XRPL tx ${ref} not validated on-ledger in time.`);
|
|
423
415
|
},
|
|
424
416
|
async estimateCost() {
|
|
425
417
|
try {
|
|
426
418
|
const drops = await payClient.feeDrops();
|
|
427
419
|
const n = Number(drops);
|
|
428
420
|
const fee = BigInt(Number.isFinite(n) && n > 12 ? Math.ceil(n) : 12);
|
|
429
|
-
return
|
|
421
|
+
return _chunkDKQXW454cjs.nativeCost.call(void 0, {
|
|
430
422
|
symbol: XRP_SYMBOL,
|
|
431
423
|
decimals: XRP_DECIMALS,
|
|
432
424
|
fee,
|
|
@@ -434,7 +426,7 @@ function makeXrplNetwork(preset, rpcUrl) {
|
|
|
434
426
|
detail: `network fee ${fee} drops`
|
|
435
427
|
});
|
|
436
428
|
} catch (e5) {
|
|
437
|
-
return
|
|
429
|
+
return _chunkDKQXW454cjs.nativeCost.call(void 0, {
|
|
438
430
|
symbol: XRP_SYMBOL,
|
|
439
431
|
decimals: XRP_DECIMALS,
|
|
440
432
|
fee: 12n,
|
|
@@ -471,7 +463,7 @@ function makeXrplNetwork(preset, rpcUrl) {
|
|
|
471
463
|
const line = r.lines.find(
|
|
472
464
|
(l) => l.currency.toUpperCase() === (_nullishCoalesce(currencyHex, () => ( ""))).toUpperCase() && l.account === issuer
|
|
473
465
|
);
|
|
474
|
-
token = line ?
|
|
466
|
+
token = line ? _chunkDKQXW454cjs.parseUnits.call(void 0, line.balance, XRP_DECIMALS) : 0n;
|
|
475
467
|
} catch (e) {
|
|
476
468
|
token = isXrplActNotFound(e) ? 0n : null;
|
|
477
469
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@piprail/sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Accept x402 crypto payments across 29 chains — every major EVM chain plus Solana, TON, Tron, NEAR, Sui, Aptos, Algorand, Stellar & XRPL — in a couple of lines. No backend, no database, no fee; payments settle straight to your wallet.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|