@swapkit/toolboxes 4.28.4 → 5.1.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.
Files changed (58) hide show
  1. package/CHANGELOG.md +17 -20
  2. package/dist/chunk-55jkfkar.js +2 -0
  3. package/dist/{chunk-ap5mzmjf.js → chunk-v9dcj9m7.js} +1 -1
  4. package/dist/src/aptos/index.js +1 -1
  5. package/dist/src/cosmos/index.js +1 -1
  6. package/dist/src/evm/index.js +1 -1
  7. package/dist/src/hypercore/index.js +1 -1
  8. package/dist/src/index.js +1 -1
  9. package/dist/src/near/index.js +1 -1
  10. package/dist/src/ripple/index.js +1 -1
  11. package/dist/src/solana/index.js +1 -1
  12. package/dist/src/stellar/index.js +1 -1
  13. package/dist/src/ton/index.js +1 -1
  14. package/dist/src/tron/index.js +1 -1
  15. package/dist/src/utxo/index.js +1 -1
  16. package/dist/types/aptos/toolbox.d.ts +5 -5
  17. package/dist/types/aptos/types.d.ts +4 -0
  18. package/dist/types/cosmos/thorchainUtils/messages.d.ts +30 -6
  19. package/dist/types/cosmos/thorchainUtils/registry.d.ts +72 -2
  20. package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts +6 -1
  21. package/dist/types/cosmos/toolbox/cosmos.d.ts +9 -11
  22. package/dist/types/cosmos/toolbox/thorchain.d.ts +83 -14
  23. package/dist/types/cosmos/types.d.ts +69 -3
  24. package/dist/types/cosmos/util.d.ts +150 -6
  25. package/dist/types/hypercore/__tests__/fixtures.d.ts +40 -0
  26. package/dist/types/hypercore/helpers.d.ts +12 -1
  27. package/dist/types/hypercore/index.d.ts +1 -0
  28. package/dist/types/hypercore/payin.d.ts +16 -0
  29. package/dist/types/hypercore/signing.d.ts +91 -0
  30. package/dist/types/hypercore/toolbox.d.ts +69 -6
  31. package/dist/types/hypercore/types.d.ts +25 -5
  32. package/dist/types/ripple/index.d.ts +5 -1
  33. package/dist/types/solana/index.d.ts +2 -0
  34. package/dist/types/solana/toolbox.d.ts +1 -1
  35. package/dist/types/ton/toolbox.d.ts +2 -0
  36. package/dist/types/tron/toolbox.d.ts +1 -1
  37. package/dist/types/tron/types.d.ts +2 -0
  38. package/package.json +22 -96
  39. package/dist/chunk-btth5bse.js +0 -1
  40. package/dist/chunk-z61r1327.js +0 -2
  41. package/dist/src/aleo/index.cjs +0 -1
  42. package/dist/src/aptos/index.cjs +0 -1
  43. package/dist/src/cardano/index.cjs +0 -1
  44. package/dist/src/cosmos/index.cjs +0 -1
  45. package/dist/src/evm/index.cjs +0 -1
  46. package/dist/src/hypercore/index.cjs +0 -1
  47. package/dist/src/index.cjs +0 -1
  48. package/dist/src/near/index.cjs +0 -1
  49. package/dist/src/radix/index.cjs +0 -1
  50. package/dist/src/ripple/index.cjs +0 -1
  51. package/dist/src/solana/index.cjs +0 -1
  52. package/dist/src/starknet/index.cjs +0 -1
  53. package/dist/src/stellar/index.cjs +0 -1
  54. package/dist/src/substrate/index.cjs +0 -1
  55. package/dist/src/sui/index.cjs +0 -1
  56. package/dist/src/ton/index.cjs +0 -1
  57. package/dist/src/tron/index.cjs +0 -1
  58. package/dist/src/utxo/index.cjs +0 -1
@@ -1 +1 @@
1
- import{fa as qE}from"../../chunk-nvfkjbyq.js";import{ga as X}from"../../chunk-xbdjxeqd.js";import{derivationPathToString as VE,SwapKitError as bE}from"@swapkit/helpers";function y(x){return x.length>=2&&x.length<=64&&/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/.test(x)}async function l(x){let{KeyPair:M}=await import("@near-js/crypto"),R=x.index||0,T=x.derivationPath?VE(x.derivationPath.slice(0,3)):`m/44'/397'/${R}'`,{parseSeedPhrase:J}=await import("near-seed-phrase"),{secretKey:z}=J(x.phrase,T),w=M.fromString(z);return NE(w)}async function OE(x){let{KeyPair:M}=await import("@near-js/crypto"),R=M.fromString(x);return NE(R)}async function NE(x){let{KeyPairSigner:M}=await import("@near-js/signers");class R extends M{#E;constructor(T){super(T);this.#E=T}getAddress(){let T=this.#E.getPublicKey(),J=Buffer.from(T.data).toString("hex");return Promise.resolve(J)}}return new R(x)}async function g(x,M){let T=(await x.query({account_id:M,finality:"final",request_type:"view_access_key_list"})).keys.find((S)=>S.access_key.permission==="FullAccess");if(!T)throw new bE("toolbox_near_no_public_key_found");let{PublicKey:J}=await import("@near-js/crypto"),z=J.fromString(T.public_key);return{nonce:T.access_key.nonce||0,publicKey:z}}var $={ACCESS_KEY_ADDITION:"5",ACCESS_KEY_DELETION:"5",ACCOUNT_CREATION:"30",CONTRACT_CALL:"150",CONTRACT_DEPLOYMENT:"200",SIMPLE_TRANSFER:"1",STAKE:"10",STORAGE_DEPOSIT:"150",TOKEN_TRANSFER:"150"};function _E(x){return"recipient"in x&&"amount"in x&&!("contractId"in x)}function CE(x){return"contractId"in x&&"methodName"in x}function xE(x){return"actions"in x}function LE(x){return"newAccountId"in x}function ME(x){return"contractCode"in x}function RE(x){return"customEstimator"in x}function TE(x){let M=0;for(let R of x)switch(R.enum){case"transfer":M+=Number($.SIMPLE_TRANSFER);break;case"functionCall":M+=Number($.CONTRACT_CALL);break;case"createAccount":M+=Number($.ACCOUNT_CREATION);break;case"deployContract":M+=Number($.CONTRACT_DEPLOYMENT);break;case"addKey":M+=Number($.ACCESS_KEY_ADDITION);break;case"deleteKey":M+=Number($.ACCESS_KEY_DELETION);break;case"stake":M+=Number($.STAKE);break;default:M+=Number($.CONTRACT_CALL)}return M.toString()}function YE(x){if(x==="ft_transfer"||x==="ft_transfer_call")return $.TOKEN_TRANSFER;if(x==="storage_deposit")return $.STORAGE_DEPOSIT;return $.CONTRACT_CALL}function uE(x){return(BigInt(x)*BigInt(1000000000000)).toString()}function lE(x){return(BigInt(x)/BigInt(1000000000000)).toString()}async function QE({account:x,contractId:M,viewMethods:R,changeMethods:T}){let{Contract:J}=await import("@near-js/accounts");return new J(x,M,{changeMethods:T,useLocalViewExecution:!0,viewMethods:R})}import{AssetValue as WE,Chain as G,getRPCUrl as KE,SwapKitError as Q}from"@swapkit/helpers";import{match as XE,P as ZE}from"ts-pattern";var $E=1250000000000000000000n,JE=150000000000000n,yE=150000000000000n,SE=250000000000000n,PE=250000000000000n,hE=500n,p=10000n;function tE(x){let M;async function R(){if(M)return M;return M=await XE(x).with({phrase:ZE.string},async(E)=>{return await l(E)}).with({signer:ZE.any},({signer:E})=>E).otherwise(()=>{return}),M}async function T(){let{JsonRpcProvider:E}=await import("@near-js/providers"),O=await KE(G.Near);return new E({url:O})}async function J(E){let{Account:O}=await import("@near-js/accounts"),N=await T(),_=await R(),C=E||await z();return new O(C,N,_)}async function z(){let E=await R();if(!E)throw new Q("toolbox_near_no_signer");return await E.getAddress()}async function w(E,O){return(O||await T()).callFunction(E.contractId,"storage_balance_of",{account_id:E.accountId},{finality:"final"})}async function S(E,O){try{let N=await O.callFunction(E,"storage_balance_bounds",{},{finality:"final"});return N?.min?BigInt(N.min):$E}catch{return $E}}function P(E){return(E*(p+hE)+p-1n)/p}function d(E,O){return BigInt(E)*BigInt(O.runtime_config.storage_amount_per_byte)}function n(E,O){if(E<=0n)throw new Q({errorKey:"toolbox_sweep_amount_too_low",info:O});return E}async function h(E){return await(E||await T()).experimental_protocolConfig({finality:"final"})}async function UE(E,O,N){let C=await(N||await T()).callFunction(E,"ft_balance_of",{account_id:O},{finality:"final"});return BigInt(C||"0")}async function jE(E){if(!await R())throw new Q("toolbox_near_no_signer");let{assetValue:N,recipient:_,memo:C,sweep:L}=E,Y=await z(),W=await o({assetValue:N,memo:C,recipient:_,sender:Y,sweep:L});return r(W)}async function zE({assetValue:E,attachedDeposit:O,memo:N,provider:_,recipient:C,sender:L,sweep:Y}){let W=E.address;if(!W)throw new Q("toolbox_near_missing_contract_address");let Z=await w({accountId:C,contractId:W},_),q=Z?0n:await S(W,_),U=Z?SE:yE,B=BigInt(O||"1"),F=E.getBaseValue("bigint");if(Y){let[I,f,H,V]=await Promise.all([UE(W,L,_),_.viewAccount(L,{finality:"final"}),h(_),u(_)]);F=n(I,{asset:E.toString(),balance:I.toString()});let b=d(f.storage_usage,H),A=f.amount-b,K=q,EE=(U+(Z?0n:JE))*P(V)+K+B;if(A<EE)throw new Q("toolbox_sweep_amount_too_low",{asset:E.toString(),availableNear:A.toString(),reason:"Insufficient NEAR to cover token transfer gas and storage deposit",requiredNear:EE.toString()})}let j=[];if(!Z)j.push(await k({args:{account_id:C},attachedDeposit:q.toString(),gas:JE.toString(),methodName:"storage_deposit"}));return j.push(await k({args:{amount:F.toString(),memo:N||null,receiver_id:C},attachedDeposit:B.toString(),gas:U.toString(),methodName:"ft_transfer"})),c({actions:j,receiverId:W,sender:L})}async function BE({assetValue:E,attachedDeposit:O,memo:N,provider:_,recipient:C,sender:L,sweep:Y}){let{publicKey:W,nonce:Z}=await g(_,L),q=E.getBaseValue("bigint");if(Y){let[H,V]=await Promise.all([_.viewAccount(L,{finality:"final"}),h(_)]),b=await a({assetValue:E,memo:N,recipient:C,sweep:Y},V),A=d(H.storage_usage,V),K=0n;if(N&&O){let e=await u(_);K=PE*P(e)+BigInt(O)}q=n(H.amount-b.getBaseValue("bigint")-A-K,{asset:E.toString(),balance:H.amount.toString(),fee:b.getBaseValue("bigint").toString(),storageStakeReserve:A.toString()})}let{actionCreators:U,createTransaction:B}=await import("@near-js/transactions"),{baseDecode:F}=await import("@near-js/utils"),j=[U.transfer(q)];if(N&&O)j.push(U.functionCall("memo",{memo:N},BigInt("250000000000000"),BigInt(O)));let I=await _.block({finality:"final"}),f=F(I.header.hash);return B(L,W,C,Z+1,j,f)}async function o({recipient:E,assetValue:O,memo:N,attachedDeposit:_,sender:C,functionCall:L,sweep:Y}){if(!y(E))throw new Q("toolbox_near_invalid_address",{recipient:E});if(!y(C))throw new Q("toolbox_near_invalid_address",{sender:C});if(L)return i({...L,sender:C});if(Y&&!await R())throw new Q("toolbox_near_no_signer");let W=await T(),Z={assetValue:O,attachedDeposit:_,memo:N,provider:W,recipient:E,sender:C,sweep:Y};return O.isGasAsset?BE(Z):zE(Z)}function FE(E){let O=E.encode();return Buffer.from(O).toString("base64")}async function i({args:E,attachedDeposit:O,contractId:N,gas:_,methodName:C,sender:L}){let Y=await k({args:E,attachedDeposit:O,gas:_,methodName:C});return c({actions:[Y],receiverId:N,sender:L})}async function c({actions:E,receiverId:O,sender:N}){let _=await T(),{publicKey:C,nonce:L}=await g(_,N),{createTransaction:Y}=await import("@near-js/transactions"),{baseDecode:W}=await import("@near-js/utils"),Z=await _.block({finality:"final"}),q=W(Z.header.hash);return Y(N,C,O,L+1,E,q)}async function k(E){let{actionCreators:O}=await import("@near-js/transactions");return O.functionCall(E.methodName,Buffer.from(JSON.stringify(E.args)),BigInt(E.gas),BigInt(E.attachedDeposit))}async function s(E){let O=await R();if(!O)throw new Q("toolbox_near_no_signer");await IE(E);let[N,_]=await O.signTransaction(E);return _}async function IE(E){let O=E.publicKey;if(O.toString?.().startsWith("ed25519:")||O.toString?.().startsWith("secp256k1:"))return;let{KeyType:N,PublicKey:_}=await import("@near-js/crypto"),C=O.data||O.ed25519Key?.data,L=O.secp256k1Key?.data;if(C){E.publicKey=new _({data:Uint8Array.from(C),keyType:N.ED25519});return}if(L)E.publicKey=new _({data:Uint8Array.from(L),keyType:N.SECP256K1})}function m(E){if(typeof E==="string")return E;if(Array.isArray(E))return E.map(m).find(Boolean);if(!(E&&typeof E==="object"))return;let O=E;return O.transaction?.hash||O.transaction_outcome?.id}function v(E){return E instanceof Error?E.message:String(E)}async function t(E){let N=await(await T()).sendTransaction(E),_=m(N);if(!_)throw new Q("toolbox_near_transfer_failed",{result:N});return _}async function r(E){let O=await R();if(!O)throw new Q("toolbox_near_no_signer");let N;try{N=await s(E)}catch(_){let C;try{C=O.signAndSendTransaction?await O.signAndSendTransaction({actions:E.actions,receiverId:E.receiverId,signerId:E.signerId}):await O.signAndSendTransactions?.({transactions:[E]})}catch(Y){throw new Q({errorKey:"toolbox_near_sign_transaction_failed",info:{directSignError:v(_),signAndSendError:v(Y)}},Y)}let L=m(C);if(L)return L;throw _}return t(N)}async function a(E,O){let N=await R();if("assetValue"in E){if(E.sweep&&!N)throw new Q("toolbox_near_no_signer");try{let[C,L]=await Promise.all([u(),O?Promise.resolve(O):h()]),{runtime_config:Y}=L,{execution:W,send_sir:Z}=Y.transaction_costs.action_receipt_creation_config,{execution:q,send_sir:U}=Y.transaction_costs.action_creation_config.transfer_cost,B=BigInt(U)+BigInt(q),F=BigInt(Z)+BigInt(W),j=B+F,I=E.sweep?P(C):C,f=j*I;return WE.from({chain:G.Near,value:f})}catch(C){throw new Q({errorKey:"toolbox_fee_estimation_failed",info:{chain:G.Near,message:v(C)}},C)}}let _=N?await J():void 0;return D(E,_)}async function u(E){let N=await(E||await T()).gasPrice(null);return BigInt(N.gas_price)}async function fE(E,O,N){if(!await R())throw new Q("toolbox_near_no_signer");let C=await J(),{formatNearAmount:L}=await import("@near-js/utils"),{PublicKey:Y}=await import("@near-js/crypto"),W=L(N)||"0";return(await C.createAccount(E,Y.fromString(O),BigInt(W))).transaction.hash}async function HE(E){let O=await R();try{if(!O)throw new Q("toolbox_near_no_signer");let{actionCreators:N}=await import("@near-js/transactions"),{contractId:_,methodName:C,args:L,deposit:Y}=E,W=await J(),Z=await D({args:L||{},contractId:_,methodName:C}),q=N.functionCall(C,L||{},Z.getBaseValue("bigint"),BigInt(Y||"1"));return(await W.signAndSendTransaction({actions:[q],receiverId:_})).transaction_outcome.id}catch(N){throw new Q("toolbox_near_transfer_failed",{error:N})}}async function AE(E){let O=await J();return QE({account:O,changeMethods:E.changeMethods,contractId:E.contractId,viewMethods:E.viewMethods})}async function GE(E){if(!await R())throw new Q("toolbox_near_no_signer");if(E.actions.length===0)throw new Q("toolbox_near_empty_batch");return(await(await J()).signAndSendTransaction({actions:E.actions,receiverId:E.receiverId})).transaction.hash}async function D(E,O){let N=await XE(E).when(_E,()=>$.SIMPLE_TRANSFER).when(CE,(C)=>YE(C.methodName)).when(xE,(C)=>TE(C.actions)).when(LE,()=>$.ACCOUNT_CREATION).when(ME,()=>$.CONTRACT_DEPLOYMENT).when(RE,(C)=>{if(!O)throw new Q("toolbox_near_no_account");return C.customEstimator(O)}).otherwise(()=>{throw new Q("toolbox_near_invalid_gas_params")}),_=BigInt(N)*BigInt(1000000000000);return WE.from({chain:G.Near,value:_})}function wE(E,O){return console.warn("NEAR toolbox: estimateGas is deprecated, use estimateGasLimit instead"),D(E,O)}async function kE(){let E=await T();try{return(await E.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}async function DE(){let E=await R();return E?(await E.getPublicKey()).toString():""}return{broadcastTransaction:t,callFunction:HE,createAction:k,createContract:AE,createContractFunctionCall:i,createSubAccount:fE,createTransaction:o,estimateGas:wE,estimateGasLimit:D,estimateTransactionFee:a,executeBatchTransaction:GE,getAddress:z,getBalance:qE(G.Near),getGasPrice:kE,getNearProvider:T,getPublicKey:DE,getSignerFromPhrase:l,getSignerFromPrivateKey:OE,serializeTransaction:FE,signAndBroadcastTransaction:r,signTransaction:s,transfer:jE,validateAddress:y}}export{y as validateNearAddress,uE as tgasToGas,_E as isSimpleTransfer,RE as isCustomEstimator,ME as isContractDeployment,CE as isContractCall,xE as isBatchTransaction,LE as isAccountCreation,tE as getNearToolbox,OE as getNearSignerFromPrivateKey,l as getNearSignerFromPhrase,g as getFullAccessPublicKey,YE as getContractMethodGas,lE as gasToTGas,TE as estimateBatchGas,QE as createNearContract,$ as GAS_COSTS};
1
+ import{fa as qE}from"../../chunk-nvfkjbyq.js";import{ga as X}from"../../chunk-xbdjxeqd.js";import{derivationPathToString as VE,SwapKitError as bE}from"@swapkit/helpers";function y(x){return x.length>=2&&x.length<=64&&/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/.test(x)}async function l(x){let{KeyPair:M}=await import("@near-js/crypto"),R=x.index||0,T=x.derivationPath?VE(x.derivationPath.slice(0,3)):`m/44'/397'/${R}'`,{parseSeedPhrase:J}=await import("near-seed-phrase"),{secretKey:U}=J(x.phrase,T),w=M.fromString(U);return NE(w)}async function OE(x){let{KeyPair:M}=await import("@near-js/crypto"),R=M.fromString(x);return NE(R)}async function NE(x){let{KeyPairSigner:M}=await import("@near-js/signers");class R extends M{#E;constructor(T){super(T);this.#E=T}getAddress(){let T=this.#E.getPublicKey(),J=Buffer.from(T.data).toString("hex");return Promise.resolve(J)}}return new R(x)}async function g(x,M){let T=(await x.query({account_id:M,finality:"final",request_type:"view_access_key_list"})).keys.find((S)=>S.access_key.permission==="FullAccess");if(!T)throw new bE("toolbox_near_no_public_key_found");let{PublicKey:J}=await import("@near-js/crypto"),U=J.fromString(T.public_key);return{nonce:T.access_key.nonce||0,publicKey:U}}var $={ACCESS_KEY_ADDITION:"5",ACCESS_KEY_DELETION:"5",ACCOUNT_CREATION:"30",CONTRACT_CALL:"150",CONTRACT_DEPLOYMENT:"200",SIMPLE_TRANSFER:"1",STAKE:"10",STORAGE_DEPOSIT:"150",TOKEN_TRANSFER:"150"};function _E(x){return"recipient"in x&&"amount"in x&&!("contractId"in x)}function CE(x){return"contractId"in x&&"methodName"in x}function xE(x){return"actions"in x}function LE(x){return"newAccountId"in x}function ME(x){return"contractCode"in x}function RE(x){return"customEstimator"in x}function TE(x){let M=0;for(let R of x)switch(R.enum){case"transfer":M+=Number($.SIMPLE_TRANSFER);break;case"functionCall":M+=Number($.CONTRACT_CALL);break;case"createAccount":M+=Number($.ACCOUNT_CREATION);break;case"deployContract":M+=Number($.CONTRACT_DEPLOYMENT);break;case"addKey":M+=Number($.ACCESS_KEY_ADDITION);break;case"deleteKey":M+=Number($.ACCESS_KEY_DELETION);break;case"stake":M+=Number($.STAKE);break;default:M+=Number($.CONTRACT_CALL)}return M.toString()}function YE(x){if(x==="ft_transfer"||x==="ft_transfer_call")return $.TOKEN_TRANSFER;if(x==="storage_deposit")return $.STORAGE_DEPOSIT;return $.CONTRACT_CALL}function uE(x){return(BigInt(x)*BigInt(1000000000000)).toString()}function lE(x){return(BigInt(x)/BigInt(1000000000000)).toString()}async function QE({account:x,contractId:M,viewMethods:R,changeMethods:T}){let{Contract:J}=await import("@near-js/accounts");return new J(x,M,{changeMethods:T,useLocalViewExecution:!0,viewMethods:R})}import{AssetValue as WE,Chain as G,getRPCUrl as KE,SwapKitError as Q}from"@swapkit/helpers";import{match as XE,P as ZE}from"ts-pattern";var $E=1250000000000000000000n,JE=150000000000000n,yE=150000000000000n,SE=250000000000000n,PE=250000000000000n,hE=500n,p=10000n;function tE(x){let M;async function R(){if(M)return M;return M=await XE(x).with({phrase:ZE.string},async(E)=>{return await l(E)}).with({signer:ZE.any},({signer:E})=>E).otherwise(()=>{return}),M}async function T(){let{JsonRpcProvider:E}=await import("@near-js/providers"),O=await KE(G.Near);return new E({url:O})}async function J(E){let{Account:O}=await import("@near-js/accounts"),N=await T(),_=await R(),C=E||await U();return new O(C,N,_)}async function U(){let E=await R();if(!E)throw new Q("toolbox_near_no_signer");return await E.getAddress()}async function w(E,O){return(O||await T()).callFunction(E.contractId,"storage_balance_of",{account_id:E.accountId},{finality:"final"})}async function S(E,O){try{let N=await O.callFunction(E,"storage_balance_bounds",{},{finality:"final"});return N?.min?BigInt(N.min):$E}catch{return $E}}function P(E){return(E*(p+hE)+p-1n)/p}function d(E,O){return BigInt(E)*BigInt(O.runtime_config.storage_amount_per_byte)}function n(E,O){if(E<=0n)throw new Q({errorKey:"toolbox_sweep_amount_too_low",info:O});return E}async function h(E){return await(E||await T()).experimental_protocolConfig({finality:"final"})}async function UE(E,O,N){let C=await(N||await T()).callFunction(E,"ft_balance_of",{account_id:O},{finality:"final"});return BigInt(C||"0")}async function jE(E){if(!await R())throw new Q("toolbox_near_no_signer");let{assetValue:N,recipient:_,memo:C,sweep:L}=E,Y=await U(),W=await o({assetValue:N,memo:C,recipient:_,sender:Y,sweep:L});return r(W)}async function zE({assetValue:E,attachedDeposit:O,memo:N,provider:_,recipient:C,sender:L,sweep:Y}){let W=E.address;if(!W)throw new Q("toolbox_near_missing_contract_address");let Z=await w({accountId:C,contractId:W},_),q=Z?0n:await S(W,_),j=Z?SE:yE,z=BigInt(O||"1"),I=E.getBaseValue("bigint");if(Y){let[F,f,H,V]=await Promise.all([UE(W,L,_),_.viewAccount(L,{finality:"final"}),h(_),u(_)]);I=n(F,{asset:E.toString(),balance:F.toString()});let b=d(f.storage_usage,H),A=f.amount-b,K=q,EE=(j+(Z?0n:JE))*P(V)+K+z;if(A<EE)throw new Q("toolbox_sweep_amount_too_low",{asset:E.toString(),availableNear:A.toString(),reason:"Insufficient NEAR to cover token transfer gas and storage deposit",requiredNear:EE.toString()})}let B=[];if(!Z)B.push(await k({args:{account_id:C},attachedDeposit:q.toString(),gas:JE.toString(),methodName:"storage_deposit"}));return B.push(await k({args:{amount:I.toString(),memo:N||null,receiver_id:C},attachedDeposit:z.toString(),gas:j.toString(),methodName:"ft_transfer"})),c({actions:B,receiverId:W,sender:L})}async function BE({assetValue:E,attachedDeposit:O,memo:N,provider:_,recipient:C,sender:L,sweep:Y}){let W=E.getBaseValue("bigint");if(Y){let[H,V]=await Promise.all([_.viewAccount(L,{finality:"final"}),h(_)]),b=await a({assetValue:E,memo:N,recipient:C,sweep:Y},V),A=d(H.storage_usage,V),K=0n;if(N&&O){let e=await u(_);K=PE*P(e)+BigInt(O)}W=n(H.amount-b.getBaseValue("bigint")-A-K,{asset:E.toString(),balance:H.amount.toString(),fee:b.getBaseValue("bigint").toString(),storageStakeReserve:A.toString()})}let[{publicKey:Z,nonce:q},j,{actionCreators:z,createTransaction:I},{baseDecode:B}]=await Promise.all([g(_,L),_.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),F=[z.transfer(W)];if(N&&O)F.push(z.functionCall("memo",{memo:N},BigInt("250000000000000"),BigInt(O)));let f=B(j.header.hash);return I(L,Z,C,q+1,F,f)}async function o({recipient:E,assetValue:O,memo:N,attachedDeposit:_,sender:C,functionCall:L,sweep:Y}){if(!y(E))throw new Q("toolbox_near_invalid_address",{recipient:E});if(!y(C))throw new Q("toolbox_near_invalid_address",{sender:C});if(L)return i({...L,sender:C});if(Y&&!await R())throw new Q("toolbox_near_no_signer");let W=await T(),Z={assetValue:O,attachedDeposit:_,memo:N,provider:W,recipient:E,sender:C,sweep:Y};return O.isGasAsset?BE(Z):zE(Z)}function FE(E){let O=E.encode();return Buffer.from(O).toString("base64")}async function i({args:E,attachedDeposit:O,contractId:N,gas:_,methodName:C,sender:L}){let Y=await k({args:E,attachedDeposit:O,gas:_,methodName:C});return c({actions:[Y],receiverId:N,sender:L})}async function c({actions:E,receiverId:O,sender:N}){let _=await T(),[{publicKey:C,nonce:L},Y,{createTransaction:W},{baseDecode:Z}]=await Promise.all([g(_,N),_.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),q=Z(Y.header.hash);return W(N,C,O,L+1,E,q)}async function k(E){let{actionCreators:O}=await import("@near-js/transactions");return O.functionCall(E.methodName,Buffer.from(JSON.stringify(E.args)),BigInt(E.gas),BigInt(E.attachedDeposit))}async function s(E){let O=await R();if(!O)throw new Q("toolbox_near_no_signer");await IE(E);let[N,_]=await O.signTransaction(E);return _}async function IE(E){let O=E.publicKey;if(O.toString?.().startsWith("ed25519:")||O.toString?.().startsWith("secp256k1:"))return;let{KeyType:N,PublicKey:_}=await import("@near-js/crypto"),C=O.data||O.ed25519Key?.data,L=O.secp256k1Key?.data;if(C){E.publicKey=new _({data:Uint8Array.from(C),keyType:N.ED25519});return}if(L)E.publicKey=new _({data:Uint8Array.from(L),keyType:N.SECP256K1})}function m(E){if(typeof E==="string")return E;if(Array.isArray(E))return E.map(m).find(Boolean);if(!(E&&typeof E==="object"))return;let O=E;return O.transaction?.hash||O.transaction_outcome?.id}function v(E){return E instanceof Error?E.message:String(E)}async function t(E){let N=await(await T()).sendTransaction(E),_=m(N);if(!_)throw new Q("toolbox_near_transfer_failed",{result:N});return _}async function r(E){let O=await R();if(!O)throw new Q("toolbox_near_no_signer");let N;try{N=await s(E)}catch(_){let C;try{C=O.signAndSendTransaction?await O.signAndSendTransaction({actions:E.actions,receiverId:E.receiverId,signerId:E.signerId}):await O.signAndSendTransactions?.({transactions:[E]})}catch(Y){throw new Q({errorKey:"toolbox_near_sign_transaction_failed",info:{directSignError:v(_),signAndSendError:v(Y)}},Y)}let L=m(C);if(L)return L;throw _}return t(N)}async function a(E,O){let N=await R();if("assetValue"in E){if(E.sweep&&!N)throw new Q("toolbox_near_no_signer");try{let[C,L]=await Promise.all([u(),O?Promise.resolve(O):h()]),{runtime_config:Y}=L,{execution:W,send_sir:Z}=Y.transaction_costs.action_receipt_creation_config,{execution:q,send_sir:j}=Y.transaction_costs.action_creation_config.transfer_cost,z=BigInt(j)+BigInt(q),I=BigInt(Z)+BigInt(W),B=z+I,F=E.sweep?P(C):C,f=B*F;return WE.from({chain:G.Near,value:f})}catch(C){throw new Q({errorKey:"toolbox_fee_estimation_failed",info:{chain:G.Near,message:v(C)}},C)}}let _=N?await J():void 0;return D(E,_)}async function u(E){let N=await(E||await T()).gasPrice(null);return BigInt(N.gas_price)}async function fE(E,O,N){if(!await R())throw new Q("toolbox_near_no_signer");let C=await J(),{formatNearAmount:L}=await import("@near-js/utils"),{PublicKey:Y}=await import("@near-js/crypto"),W=L(N)||"0";return(await C.createAccount(E,Y.fromString(O),BigInt(W))).transaction.hash}async function HE(E){let O=await R();try{if(!O)throw new Q("toolbox_near_no_signer");let{actionCreators:N}=await import("@near-js/transactions"),{contractId:_,methodName:C,args:L,deposit:Y}=E,W=await J(),Z=await D({args:L||{},contractId:_,methodName:C}),q=N.functionCall(C,L||{},Z.getBaseValue("bigint"),BigInt(Y||"1"));return(await W.signAndSendTransaction({actions:[q],receiverId:_})).transaction_outcome.id}catch(N){throw new Q("toolbox_near_transfer_failed",{error:N})}}async function AE(E){let O=await J();return QE({account:O,changeMethods:E.changeMethods,contractId:E.contractId,viewMethods:E.viewMethods})}async function GE(E){if(!await R())throw new Q("toolbox_near_no_signer");if(E.actions.length===0)throw new Q("toolbox_near_empty_batch");return(await(await J()).signAndSendTransaction({actions:E.actions,receiverId:E.receiverId})).transaction.hash}async function D(E,O){let N=await XE(E).when(_E,()=>$.SIMPLE_TRANSFER).when(CE,(C)=>YE(C.methodName)).when(xE,(C)=>TE(C.actions)).when(LE,()=>$.ACCOUNT_CREATION).when(ME,()=>$.CONTRACT_DEPLOYMENT).when(RE,(C)=>{if(!O)throw new Q("toolbox_near_no_account");return C.customEstimator(O)}).otherwise(()=>{throw new Q("toolbox_near_invalid_gas_params")}),_=BigInt(N)*BigInt(1000000000000);return WE.from({chain:G.Near,value:_})}function wE(E,O){return console.warn("NEAR toolbox: estimateGas is deprecated, use estimateGasLimit instead"),D(E,O)}async function kE(){let E=await T();try{return(await E.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}async function DE(){let E=await R();return E?(await E.getPublicKey()).toString():""}return{broadcastTransaction:t,callFunction:HE,createAction:k,createContract:AE,createContractFunctionCall:i,createSubAccount:fE,createTransaction:o,estimateGas:wE,estimateGasLimit:D,estimateTransactionFee:a,executeBatchTransaction:GE,getAddress:U,getBalance:qE(G.Near),getGasPrice:kE,getNearProvider:T,getPublicKey:DE,getSignerFromPhrase:l,getSignerFromPrivateKey:OE,serializeTransaction:FE,signAndBroadcastTransaction:r,signTransaction:s,transfer:jE,validateAddress:y}}export{y as validateNearAddress,uE as tgasToGas,_E as isSimpleTransfer,RE as isCustomEstimator,ME as isContractDeployment,CE as isContractCall,xE as isBatchTransaction,LE as isAccountCreation,tE as getNearToolbox,OE as getNearSignerFromPrivateKey,l as getNearSignerFromPhrase,g as getFullAccessPublicKey,YE as getContractMethodGas,lE as gasToTGas,TE as estimateBatchGas,QE as createNearContract,$ as GAS_COSTS};
@@ -1 +1 @@
1
- import{ga as y}from"../../chunk-xbdjxeqd.js";import{AssetValue as b,Chain as X,getChainConfig as K,getRPCUrl as f5,SwapKitError as v}from"@swapkit/helpers";import{isValidClassicAddress as U5,isValidXAddress as m5}from"ripple-address-codec";import{match as T,P as V}from"ts-pattern";import{SwapKitError as s}from"@swapkit/helpers";function P(f){return/^[0-9A-Fa-f]{40}$/.test(f)}function N(f){if(P(f))return f.toUpperCase();if(f.length<=3){let W=Buffer.from(f.padEnd(3,"\x00")).toString("hex");return`00${"0".repeat(22)}${W}${"0".repeat(10)}`.toUpperCase()}let G=Buffer.from(f).toString("hex").toUpperCase();if(G.length>40)throw new s({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:f,reason:"Currency exceeds maximum length (20 bytes)"}});return G.padEnd(40,"0")}function q5(f){if(!P(f))return f;if(f.toUpperCase().startsWith("00")){let G=f.slice(24,30);try{let W=Buffer.from(G,"hex").toString("ascii").replace(/\0/g,"");if(/^[A-Za-z0-9?!@#$%^&*<>(){}[\]|]+$/.test(W)&&W.length>0)return W}catch{}return f.toUpperCase()}try{let G=f.replace(/0+$/,""),W=G.length%2===0?G:`${G}0`,Z=Buffer.from(W,"hex").toString("utf8");if(/^[\x20-\x7E]+$/.test(Z))return Z}catch{}return f.toUpperCase()}function F(f){if(P(f))return f.toUpperCase();if(f.length<=3)return f;return N(f)}import{RequestClient as r,warnOnce as e}from"@swapkit/helpers";var I=[{currency:"USD",decimals:15,domain:"circle.com",issuer:"rcEGREd8NmkKRE8GE424sksyt1tJVFZwu",name:"Circle USDC",verified:!0},{currency:"RLUSD",decimals:15,domain:"ripple.com",issuer:"rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De",name:"Ripple USD",verified:!0},{currency:"USD",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp USD",verified:!0},{currency:"BTC",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp BTC",verified:!0},{currency:"EUR",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp EUR",verified:!0},{currency:"USD",decimals:15,domain:"gatehub.net",issuer:"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",name:"GateHub USD",verified:!0},{currency:"EUR",decimals:15,domain:"gatehub.net",issuer:"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",name:"GateHub EUR",verified:!0},{currency:"BTC",decimals:15,domain:"gatehub.net",issuer:"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL",name:"GateHub BTC",verified:!0},{currency:"ETH",decimals:15,domain:"gatehub.net",issuer:"rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h",name:"GateHub ETH",verified:!0},{currency:"SOLO",decimals:15,domain:"sologenic.com",issuer:"rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz",name:"Sologenic",verified:!0}];async function B5(f,G){let W=F(f),Z=I.find((M)=>F(M.currency)===W&&M.issuer===G);if(Z)return Z;try{let M=await r.get(`https://api.xrplmeta.org/token/${f}:${G}`);if(M)return{currency:f,decimals:15,description:M.desc,domain:M.domain,icon:M.icon,issuer:G,name:M.name,verified:M.self_assessment?.is_regulated||M.self_assessment?.is_licensed}}catch(M){e({condition:!0,id:`xrpl_token_lookup_${f}_${G}`,warning:`Failed to fetch XRPL token info for ${f}:${G}: ${M}`})}return{currency:f,decimals:15,issuer:G,verified:!1}}function J5(f){return I.filter((G)=>G.issuer===f)}function Y5(f,G){let W=F(f);return I.some((Z)=>F(Z.currency)===W&&Z.issuer===G)}var G5={ACCOUNT_NOT_FOUND:19};function h(f){if(typeof f!=="object"||f===null||!("data"in f))return!1;let{data:G}=f;return typeof G==="object"&&G!==null&&"error_code"in G&&G.error_code===G5.ACCOUNT_NOT_FOUND}var E={tecFROZEN:"tecFROZEN",tecNO_AUTH:"tecNO_AUTH",tecNO_DST:"tecNO_DST",tecNO_LINE:"tecNO_LINE",tecPATH_DRY:"tecPATH_DRY",tecUNFUNDED_OFFER:"tecUNFUNDED_OFFER"};function u(f){let G=f.match(/^XRP\.([A-Fa-f0-9]{40}|[\x20-\x7E]{1,20})-([a-zA-Z0-9]{25,34})$/);if(!G?.[1]||!G?.[2])return null;if(!R(G[2]))return null;return{currency:G[1],issuer:G[2]}}function z5(f,G){return`${X.Ripple}.${f}-${G}`}async function g(f){if(f.isGasAsset){let{xrpToDrops:W}=await import("xrpl");return W(f.getValue("string"))}let G=u(f.toString());if(!G)throw new v({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:f.toString()}});return{currency:G.currency,issuer:G.issuer,value:f.getValue("string")}}function x(f){let G,W=()=>{return G??=import("xrpl").then(({Wallet:Z})=>Z.fromMnemonic(f)),G};return{getAddress:async()=>(await W()).address,signTransaction:async(Z)=>(await W()).sign(Z)}}function R(f){return U5(f)||m5(f)}function D5(f={}){let G;async function W(){if(G)return G;return G=await T(f).with({phrase:V.string},({phrase:U})=>x(U)).with({signer:V.any},({signer:U})=>U).otherwise(()=>{return}),G}let Z;async function M(){let U=await f5(X.Ripple);if(!U)throw new v({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:X.Ripple}});let{Client:m}=await import("xrpl"),$=new m(U);return await $.connect(),$}async function Q(){if(Z){let U=await Z.catch(()=>null);if(U?.isConnected())return U}return Z=M(),Z}async function p(U){let m=await U.request({command:"server_state"}),$=m.result.state.validated_ledger??m.result.state.closed_ledger;if(!$||!Number.isSafeInteger($.reserve_base)||$.reserve_base<0||!Number.isSafeInteger($.reserve_inc)||$.reserve_inc<0)throw new v({errorKey:"toolbox_ripple_get_balance_error",info:{reason:"XRPL reserve data is unavailable or invalid"}});return{baseReserveDrops:BigInt($.reserve_base),ownerReserveDrops:BigInt($.reserve_inc)}}let D=async()=>{let U=await W();if(!U)throw new v({errorKey:"toolbox_ripple_signer_not_found"});return U.getAddress()},o=async(U)=>{let m=U||await D(),{baseDecimal:$}=K(X.Ripple),j=await Q();try{let[z,q]=await Promise.all([j.request({account:m,command:"account_info"}),j.request({account:m,command:"account_lines"})]),Y=z.result.account_data.Balance,B=[b.from({chain:X.Ripple,fromBaseDecimal:$,value:Y})];for(let J of q.result.lines){let _=z5(J.currency,J.account);if(Number.parseFloat(J.balance)!==0)B.push(b.from({asset:_,asyncTokenLookup:!1,value:J.balance}))}return B}catch(z){if(h(z))return[b.from({chain:X.Ripple,value:0})];throw new v({errorKey:"toolbox_ripple_get_balance_error",info:{address:m,error:z}})}},w=async()=>{let{baseDecimal:U}=K(X.Ripple),j=(await(await Q()).request({command:"fee"})).result.drops.open_ledger_fee;return b.from({chain:X.Ripple,fromBaseDecimal:U,value:j})};async function A(U){let m=U||await D(),$=await Q();try{return(await $.request({account:m,command:"account_lines"})).result.lines.map((z)=>({account:z.account,authorized:z.authorized??!1,balance:z.balance,currency:z.currency,freeze:z.freeze??!1,freezePeer:z.freeze_peer??!1,limit:z.limit,limitPeer:z.limit_peer,noRipple:z.no_ripple??!1,noRipplePeer:z.no_ripple_peer??!1,peerAuthorized:z.peer_authorized??!1,qualityIn:z.quality_in??0,qualityOut:z.quality_out??0}))}catch(j){if(h(j))return[];throw new v({errorKey:"toolbox_ripple_get_trust_lines_error",info:{address:m,error:j}})}}async function c({address:U,currency:m,issuer:$}){let j=await A(U),z=N(m);return j.some((q)=>{return N(q.currency)===z&&q.account===$})}async function S({currency:U,issuer:m,limit:$,sender:j}){let z=j||await D();if(!R(m))throw new v({errorKey:"core_transaction_invalid_recipient_address",info:{address:m}});let q=Number.parseFloat($);if(Number.isNaN(q)||q<0)throw new v({errorKey:"toolbox_ripple_invalid_trust_line_limit",info:{limit:$}});let Y=await Q(),B={Account:z,LimitAmount:{currency:U,issuer:m,value:$},TransactionType:"TrustSet"};return Y.autofill(B)}async function d(U,m){let[$,j,z]=await Promise.all([U.request({account:m,command:"account_info"}),p(U),w()]),{Balance:q,OwnerCount:Y}=$.result.account_data,B=z.getBaseValue("bigint"),J=BigInt(q)-j.baseReserveDrops-BigInt(Y)*j.ownerReserveDrops-B;if(J<=0n)throw new v({errorKey:"toolbox_sweep_amount_too_low",info:{asset:X.Ripple,balance:q,baseReserve:j.baseReserveDrops.toString(),fee:B.toString(),ownerCount:Y,ownerReserve:j.ownerReserveDrops.toString()}});let{baseDecimal:_}=K(X.Ripple),O=b.from({chain:X.Ripple,fromBaseDecimal:_,value:J.toString()});return{amount:await g(O),fee:B.toString()}}async function i(U,m){let $=u(U.toString());if(!$)throw new v({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:U.toString()}});let j=await Q(),z="0",q;while(!0){let Y=await j.request({account:m,command:"account_lines",peer:$.issuer,...q!==void 0&&{marker:q}}),B=Y.result.lines.find((_)=>_.account===$.issuer&&N(_.currency)===N($.currency));if(B){z=B.balance;break}let J=Y.result.marker;if(J===void 0||J===null)break;q=J}if(!Number.isFinite(Number(z))||Number(z)<=0)throw new v({errorKey:"toolbox_sweep_amount_too_low",info:{asset:U.toString(),balance:z}});return{currency:$.currency,issuer:$.issuer,value:z}}async function C({assetValue:U,recipient:m,memo:$,sender:j,sweep:z,destinationTag:q,extendBySeconds:Y=150}){if(!R(m))throw new v({errorKey:"core_transaction_invalid_recipient_address"});let B=j||await D();if(U.chain!==X.Ripple)throw new v({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:U.toString()}});let J=z&&U.isGasAsset?await d(await Q(),B):void 0,_=J?J.amount:z?await i(U,B):await g(U),O={Account:B,Amount:_,Destination:m,TransactionType:"Payment",...J&&{Fee:J.fee},...q!==void 0&&{DestinationTag:q}};if($)O.Memos=[{Memo:{MemoData:Buffer.from($).toString("hex")}}];let H=await(await Q()).autofill(O);if(H.LastLedgerSequence&&Y>0)H.LastLedgerSequence+=Math.ceil(Y/4);return H}async function k(U){let m=await W();if(!m)throw new v({errorKey:"toolbox_ripple_signer_not_found"});return m.signTransaction(U)}async function L(U){let $=await(await Q()).submitAndWait(U),{result:j}=$;if(j.validated)return j.hash;let z=j.meta?.TransactionResult,q=T(z).with(E.tecNO_LINE,()=>"No trust line exists for this token").with(E.tecPATH_DRY,()=>"Payment path could not deliver funds").with(E.tecFROZEN,()=>"Token is frozen").otherwise(()=>{return});throw new v({errorKey:"toolbox_ripple_broadcast_error",info:{chain:X.Ripple,...q?{reason:q}:{txResult:z}}})}let l=async(U)=>{try{let m=await k(U);return L(m.tx_blob)}catch(m){if(m instanceof v)throw m;throw new v({errorKey:"toolbox_ripple_broadcast_error",info:{chain:X.Ripple,error:m}})}};async function n({assetValue:U,memo:m,recipient:$,sweep:j}){let z=await W();if(!z)throw new v({errorKey:"toolbox_ripple_signer_not_found"});let q=await z.getAddress(),Y=await C({assetValue:U,memo:m,recipient:$,sender:q,sweep:j}),B=await k(Y);return L(B.tx_blob)}async function t(U){let m=await W();if(!m)throw new v({errorKey:"toolbox_ripple_signer_not_found"});let $=await m.getAddress(),j=await S({...U,sender:$}),z=await k(j);return L(z.tx_blob)}function a(){let U=Z;if(Z=null,U)U.then((m)=>{if(m?.isConnected())return m.disconnect();return}).catch((m)=>{console.warn("XRPL Cleanup failed silently:",m)})}return{broadcastTransaction:L,createSigner:x,createTransaction:C,disconnect:a,estimateTransactionFee:w,getAddress:D,getBalance:o,getTrustLines:A,hasTrustLine:c,setTrustLine:S,setTrustLineAndBroadcast:t,signAndBroadcastTransaction:l,signTransaction:k,transfer:n,validateAddress:R}}export{R as validateRippleAddress,u as parseXrplTokenIdentifier,F as normalizeCurrency,Y5 as isKnownToken,P as isHexCurrency,q5 as hexToCurrency,B5 as getXrplTokenInfo,D5 as getRippleToolbox,J5 as getKnownTokensByIssuer,z5 as formatXrplTokenIdentifier,N as currencyToHex,E as XRPL_TOKEN_ERROR_CODES,I as XRPL_KNOWN_TOKENS};
1
+ import{ga as A}from"../../chunk-xbdjxeqd.js";import{AssetValue as R,Chain as _,getChainConfig as y,getRPCUrl as $5,SwapKitError as J}from"@swapkit/helpers";import{isValidClassicAddress as W5,isValidXAddress as w}from"ripple-address-codec";import{match as g,P as x}from"ts-pattern";import{SwapKitError as G5}from"@swapkit/helpers";function L(U){return/^[0-9A-Fa-f]{40}$/.test(U)}function D(U){if(L(U))return U.toUpperCase();if(U.length<=3){let f=Buffer.from(U.padEnd(3,"\x00")).toString("hex");return`00${"0".repeat(22)}${f}${"0".repeat(10)}`.toUpperCase()}let m=Buffer.from(U).toString("hex").toUpperCase();if(m.length>40)throw new G5({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:U,reason:"Currency exceeds maximum length (20 bytes)"}});return m.padEnd(40,"0")}function Y5(U){if(!L(U))return U;if(U.toUpperCase().startsWith("00")){let m=U.slice(24,30);try{let f=Buffer.from(m,"hex").toString("ascii").replace(/\0/g,"");if(/^[A-Za-z0-9?!@#$%^&*<>(){}[\]|]+$/.test(f)&&f.length>0)return f}catch{}return U.toUpperCase()}try{let m=U.replace(/0+$/,""),f=m.length%2===0?m:`${m}0`,j=Buffer.from(f,"hex").toString("utf8");if(/^[\x20-\x7E]+$/.test(j))return j}catch{}return U.toUpperCase()}function k(U){if(L(U))return U.toUpperCase();if(U.length<=3)return U;return D(U)}import{RequestClient as m5,warnOnce as z5}from"@swapkit/helpers";var E=[{currency:"USD",decimals:15,domain:"circle.com",issuer:"rcEGREd8NmkKRE8GE424sksyt1tJVFZwu",name:"Circle USDC",verified:!0},{currency:"RLUSD",decimals:15,domain:"ripple.com",issuer:"rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De",name:"Ripple USD",verified:!0},{currency:"USD",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp USD",verified:!0},{currency:"BTC",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp BTC",verified:!0},{currency:"EUR",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp EUR",verified:!0},{currency:"USD",decimals:15,domain:"gatehub.net",issuer:"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",name:"GateHub USD",verified:!0},{currency:"EUR",decimals:15,domain:"gatehub.net",issuer:"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",name:"GateHub EUR",verified:!0},{currency:"BTC",decimals:15,domain:"gatehub.net",issuer:"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL",name:"GateHub BTC",verified:!0},{currency:"ETH",decimals:15,domain:"gatehub.net",issuer:"rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h",name:"GateHub ETH",verified:!0},{currency:"SOLO",decimals:15,domain:"sologenic.com",issuer:"rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz",name:"Sologenic",verified:!0}];async function _5(U,m){let f=k(U),j=E.find((Q)=>k(Q.currency)===f&&Q.issuer===m);if(j)return j;try{let Q=await m5.get(`https://api.xrplmeta.org/token/${U}:${m}`);if(Q)return{currency:U,decimals:15,description:Q.desc,domain:Q.domain,icon:Q.icon,issuer:m,name:Q.name,verified:Q.self_assessment?.is_regulated||Q.self_assessment?.is_licensed}}catch(Q){z5({condition:!0,id:`xrpl_token_lookup_${U}_${m}`,warning:`Failed to fetch XRPL token info for ${U}:${m}: ${Q}`})}return{currency:U,decimals:15,issuer:m,verified:!1}}function N5(U){return E.filter((m)=>m.issuer===U)}function X5(U,m){let f=k(U);return E.some((j)=>k(j.currency)===f&&j.issuer===m)}var Z5={ACCOUNT_NOT_FOUND:19};function p(U){if(typeof U!=="object"||U===null||!("data"in U))return!1;let{data:m}=U;return typeof m==="object"&&m!==null&&"error_code"in m&&m.error_code===Z5.ACCOUNT_NOT_FOUND}var C={tecFROZEN:"tecFROZEN",tecNO_AUTH:"tecNO_AUTH",tecNO_DST:"tecNO_DST",tecNO_LINE:"tecNO_LINE",tecPATH_DRY:"tecPATH_DRY",tecUNFUNDED_OFFER:"tecUNFUNDED_OFFER"};function c(U){let m=U.match(/^XRP\.([A-Fa-f0-9]{40}|[\x20-\x7E]{1,20})-([a-zA-Z0-9]{25,34})$/);if(!m?.[1]||!m?.[2])return null;if(!P(m[2]))return null;return{currency:m[1],issuer:m[2]}}function f5(U,m){return`${_.Ripple}.${U}-${m}`}async function u(U){if(U.isGasAsset){let{xrpToDrops:f}=await import("xrpl");return f(U.getValue("string"))}let m=c(U.toString());if(!m)throw new J({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:U.toString()}});return{currency:m.currency,issuer:m.issuer,value:U.getValue("string")}}function j5({fee:U,lastLedgerSequence:m,sequence:f,transaction:j}){return f!==void 0&&U!==void 0&&m!==void 0&&!w(j.Account)&&!w(j.Destination)}function o(U){let m,f=()=>{return m??=import("xrpl").then(({Wallet:j})=>j.fromMnemonic(U)),m};return{getAddress:async()=>(await f()).address,signTransaction:async(j)=>(await f()).sign(j)}}function P(U){return W5(U)||w(U)}function O5(U={}){let m;async function f(){if(m)return m;return m=await g(U).with({phrase:x.string},({phrase:G})=>o(G)).with({signer:x.any},({signer:G})=>G).otherwise(()=>{return}),m}let j;async function Q(){let G=await $5(_.Ripple);if(!G)throw new J({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:_.Ripple}});let{Client:z}=await import("xrpl"),W=new z(G);return await W.connect(),W}async function X(){if(j){let G=await j.catch(()=>null);if(G?.isConnected())return G}return j=Q(),j}async function d(G){let z=await G.request({command:"server_state"}),W=z.result.state.validated_ledger??z.result.state.closed_ledger;if(!W||!Number.isSafeInteger(W.reserve_base)||W.reserve_base<0||!Number.isSafeInteger(W.reserve_inc)||W.reserve_inc<0)throw new J({errorKey:"toolbox_ripple_get_balance_error",info:{reason:"XRPL reserve data is unavailable or invalid"}});return{baseReserveDrops:BigInt(W.reserve_base),ownerReserveDrops:BigInt(W.reserve_inc)}}let b=async()=>{let G=await f();if(!G)throw new J({errorKey:"toolbox_ripple_signer_not_found"});return G.getAddress()},i=async(G)=>{let z=G||await b(),{baseDecimal:W}=y(_.Ripple),Z=await X();try{let[$,v]=await Promise.all([Z.request({account:z,command:"account_info"}),Z.request({account:z,command:"account_lines"})]),B=$.result.account_data.Balance,Y=[R.from({chain:_.Ripple,fromBaseDecimal:W,value:B})];for(let M of v.result.lines){let N=f5(M.currency,M.account);if(Number.parseFloat(M.balance)!==0)Y.push(R.from({asset:N,asyncTokenLookup:!1,value:M.balance}))}return Y}catch($){if(p($))return[R.from({chain:_.Ripple,value:0})];throw new J({errorKey:"toolbox_ripple_get_balance_error",info:{address:z,error:$}})}},T=async()=>{let{baseDecimal:G}=y(_.Ripple),Z=(await(await X()).request({command:"fee"})).result.drops.open_ledger_fee;return R.from({chain:_.Ripple,fromBaseDecimal:G,value:Z})};async function V(G){let z=G||await b(),W=await X();try{return(await W.request({account:z,command:"account_lines"})).result.lines.map(($)=>({account:$.account,authorized:$.authorized??!1,balance:$.balance,currency:$.currency,freeze:$.freeze??!1,freezePeer:$.freeze_peer??!1,limit:$.limit,limitPeer:$.limit_peer,noRipple:$.no_ripple??!1,noRipplePeer:$.no_ripple_peer??!1,peerAuthorized:$.peer_authorized??!1,qualityIn:$.quality_in??0,qualityOut:$.quality_out??0}))}catch(Z){if(p(Z))return[];throw new J({errorKey:"toolbox_ripple_get_trust_lines_error",info:{address:z,error:Z}})}}async function l({address:G,currency:z,issuer:W}){let Z=await V(G),$=D(z);return Z.some((v)=>{return D(v.currency)===$&&v.account===W})}async function S({currency:G,issuer:z,limit:W,sender:Z}){let $=Z||await b();if(!P(z))throw new J({errorKey:"core_transaction_invalid_recipient_address",info:{address:z}});let v=Number.parseFloat(W);if(Number.isNaN(v)||v<0)throw new J({errorKey:"toolbox_ripple_invalid_trust_line_limit",info:{limit:W}});let B=await X(),Y={Account:$,LimitAmount:{currency:G,issuer:z,value:W},TransactionType:"TrustSet"};return B.autofill(Y)}async function t(G,z){let[W,Z,$]=await Promise.all([G.request({account:z,command:"account_info"}),d(G),T()]),{Balance:v,OwnerCount:B}=W.result.account_data,Y=$.getBaseValue("bigint"),M=BigInt(v)-Z.baseReserveDrops-BigInt(B)*Z.ownerReserveDrops-Y;if(M<=0n)throw new J({errorKey:"toolbox_sweep_amount_too_low",info:{asset:_.Ripple,balance:v,baseReserve:Z.baseReserveDrops.toString(),fee:Y.toString(),ownerCount:B,ownerReserve:Z.ownerReserveDrops.toString()}});let{baseDecimal:N}=y(_.Ripple),F=R.from({chain:_.Ripple,fromBaseDecimal:N,value:M.toString()});return{amount:await u(F),fee:Y.toString()}}async function n(G,z){let W=c(G.toString());if(!W)throw new J({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:G.toString()}});let Z=await X(),$="0",v;while(!0){let B=await Z.request({account:z,command:"account_lines",peer:W.issuer,...v!==void 0&&{marker:v}}),Y=B.result.lines.find((N)=>N.account===W.issuer&&D(N.currency)===D(W.currency));if(Y){$=Y.balance;break}let M=B.result.marker;if(M===void 0||M===null)break;v=M}if(!Number.isFinite(Number($))||Number($)<=0)throw new J({errorKey:"toolbox_sweep_amount_too_low",info:{asset:G.toString(),balance:$}});return{currency:W.currency,issuer:W.issuer,value:$}}async function h({assetValue:G,recipient:z,memo:W,sender:Z,sweep:$,destinationTag:v,extendBySeconds:B=150,sequence:Y,fee:M,lastLedgerSequence:N}){if(!P(z))throw new J({errorKey:"core_transaction_invalid_recipient_address"});let F=Z||await b();if(G.chain!==_.Ripple)throw new J({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:G.toString()}});let q=$&&G.isGasAsset?await t(await X(),F):void 0,U5=q?q.amount:$?await n(G,F):await u(G),I={Account:F,Amount:U5,Destination:z,TransactionType:"Payment",...q&&{Fee:q.fee},...v!==void 0&&{DestinationTag:v},...Y!==void 0&&{Sequence:Y},...M!==void 0&&{Fee:M},...N!==void 0&&{LastLedgerSequence:N}};if(W)I.Memos=[{Memo:{MemoData:Buffer.from(W).toString("hex")}}];if(j5({fee:M,lastLedgerSequence:N,sequence:Y,transaction:I}))return I;let K=await(await X()).autofill(I);if(N===void 0&&K.LastLedgerSequence&&B>0)K.LastLedgerSequence+=Math.ceil(B/4);return K}async function O(G){let z=await f();if(!z)throw new J({errorKey:"toolbox_ripple_signer_not_found"});return z.signTransaction(G)}async function H(G){let W=await(await X()).submitAndWait(G),{result:Z}=W;if(Z.validated)return Z.hash;let $=Z.meta?.TransactionResult,v=g($).with(C.tecNO_LINE,()=>"No trust line exists for this token").with(C.tecPATH_DRY,()=>"Payment path could not deliver funds").with(C.tecFROZEN,()=>"Token is frozen").otherwise(()=>{return});throw new J({errorKey:"toolbox_ripple_broadcast_error",info:{chain:_.Ripple,...v?{reason:v}:{txResult:$}}})}let a=async(G)=>{try{let z=await O(G);return H(z.tx_blob)}catch(z){if(z instanceof J)throw z;throw new J({errorKey:"toolbox_ripple_broadcast_error",info:{chain:_.Ripple,error:z}})}};async function s({assetValue:G,memo:z,recipient:W,sweep:Z}){let $=await f();if(!$)throw new J({errorKey:"toolbox_ripple_signer_not_found"});let v=await $.getAddress(),B=await h({assetValue:G,memo:z,recipient:W,sender:v,sweep:Z}),Y=await O(B);return H(Y.tx_blob)}async function r(G){let z=await f();if(!z)throw new J({errorKey:"toolbox_ripple_signer_not_found"});let W=await z.getAddress(),Z=await S({...G,sender:W}),$=await O(Z);return H($.tx_blob)}function e(){let G=j;if(j=null,G)G.then((z)=>{if(z?.isConnected())return z.disconnect();return}).catch((z)=>{console.warn("XRPL Cleanup failed silently:",z)})}return{broadcastTransaction:H,createSigner:o,createTransaction:h,disconnect:e,estimateTransactionFee:T,getAddress:b,getBalance:i,getTrustLines:V,hasTrustLine:l,setTrustLine:S,setTrustLineAndBroadcast:r,signAndBroadcastTransaction:a,signTransaction:O,transfer:s,validateAddress:P}}export{P as validateRippleAddress,c as parseXrplTokenIdentifier,k as normalizeCurrency,X5 as isKnownToken,L as isHexCurrency,Y5 as hexToCurrency,_5 as getXrplTokenInfo,O5 as getRippleToolbox,N5 as getKnownTokensByIssuer,f5 as formatXrplTokenIdentifier,D as currencyToHex,C as XRPL_TOKEN_ERROR_CODES,E as XRPL_KNOWN_TOKENS};
@@ -1 +1 @@
1
- import{fa as w}from"../../chunk-nvfkjbyq.js";import{ga as z}from"../../chunk-xbdjxeqd.js";import{PublicKey as Q}from"@solana/web3.js";import{AssetValue as $,Chain as N,DerivationPath as h,derivationPathToString as v,getChainConfig as K,getRPCUrl as A,NetworkDerivationPath as k,SwapKitError as U,updateDerivationPath as C}from"@swapkit/helpers";import{match as u,P as E}from"ts-pattern";async function m(T){let x=$.from({address:T,chain:N.Solana});if(x.symbol!=="UNKNOWN")return{decimals:x.decimal||0,id:T,logoURI:x.getIconUrl(),name:x.symbol,symbol:x.ticker};let l=`https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(T)}`;try{let f=await fetch(l);if(!f.ok)return null;let O=await f.json();if(!Array.isArray(O)||O.length===0)return null;return O.find((G)=>G.id===T)||null}catch{return null}}async function d(T){let x=await J(),{PublicKey:l}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:f}=await import("@solana/spl-token"),O=new l(T),{baseDecimal:j}=K(N.Solana),G=await x.getBalance(O),R=[$.from({chain:N.Solana,fromBaseDecimal:j,value:G||0})],W=await x.getParsedTokenAccountsByOwner(O,{programId:f});for(let{account:q}of W.value){let y=q.data.parsed.info,Z=y.mint,X=y.tokenAmount.amount;if(Number(X)===0)continue;let B=await m(Z),F=B?.symbol||"UNKNOWN",Y=B?.decimals||y.tokenAmount.decimals;R.push($.from({asset:`${N.Solana}.${F}-${Z}`,fromBaseDecimal:Y,value:X}))}return R}function V(T){try{let x=new Q(T);return Q.isOnCurve(x.toBytes())}catch{return!1}}function n(T){let x=T&&"index"in T?T.index||0:0,l=v(T&&"derivationPath"in T&&T.derivationPath?T.derivationPath:C(k[N.Solana],{index:x})),f;async function O(){if(f)return f;return f=await u(T).with({phrase:E.string},({phrase:G})=>H({derivationPath:l,phrase:G})).with({signer:E.any},({signer:G})=>G).otherwise(()=>{return}),f}async function j(){let G=await O();return G?.publicKey?I(G.publicKey):""}return{broadcastTransaction:b(J),createKeysForPath:H,createTransaction:S(J),createTransactionFromInstructions:r,estimateTransactionFee:a(J),getAddress:j,getAddressFromPubKey:I,getBalance:w(N.Solana),getBalanceFromRPC:d,getConnection:J,getPubkeyFromAddress:(G)=>new Q(G),signAndBroadcastTransaction:async(G)=>{let R=await L(J,O)(G);return b(J)(R)},signTransaction:L(J,O),transfer:c(J,O),validateAddress:V}}function a(T){return async({recipient:x,assetValue:l,memo:f,isProgramDerivedAddress:O,sender:j})=>{let G=await T(),R=await S(T)({assetValue:l,isProgramDerivedAddress:O,memo:f,recipient:x,sender:j}),W=await D(G,R),{baseDecimal:q}=K(N.Solana);return $.from({chain:N.Solana,fromBaseDecimal:q,value:W})}}async function D(T,x){let l=await T.getFeeForMessage(x.compileMessage());if(l.value===null)throw new U("toolbox_fee_estimation_failed","Could not estimate Solana fee.");return l.value}async function J(){let{Connection:T}=await import("@solana/web3.js"),x=await A(N.Solana);return new T(x,{commitment:"confirmed",fetchMiddleware:(l,f,O)=>{let j={};for(let[G,R]of Object.entries(f?.headers??{})){let W=G.toLowerCase();if(W!=="pragma"&&W!=="solana-client")j[G]=R}O(l,{...f,headers:j})}})}function g(T){return async({assetValue:x,recipient:l,sender:f,isProgramDerivedAddress:O,sweep:j})=>{let G=await T(),R=new Q(f);if(x.isGasAsset){let{Transaction:W,SystemProgram:q}=await import("@solana/web3.js");return new W().add(q.transfer({fromPubkey:R,lamports:j?0:x.getBaseValue("number"),toPubkey:new Q(l)}))}if(x.address)return o({amount:j?0:x.getBaseValue("number"),connection:G,decimals:x.decimal,from:R,isProgramDerivedAddress:O,recipient:l,sweep:j,tokenAddress:x.address});return}}async function o({tokenAddress:T,recipient:x,from:l,connection:f,amount:O,decimals:j,isProgramDerivedAddress:G,sweep:R}){let{getAssociatedTokenAddress:W,getAccount:q,createAssociatedTokenAccountInstruction:y,createTransferCheckedInstruction:Z}=await import("@solana/spl-token"),{Transaction:X}=await import("@solana/web3.js"),B=new X,F=new Q(T),Y=await W(F,l),_=new Q(x),M=await W(F,_,G),p=!1;try{await q(f,M),p=!0}catch{}if(!p)B.add(y(l,M,_,F));let P=R?BigInt((await f.getTokenAccountBalance(Y)).value.amount):O;if(R&&P<=0n)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{asset:T,balance:P.toString()}});return B.add(Z(Y,F,M,l,P,j)),B}function S(T){return async({recipient:x,assetValue:l,memo:f,isProgramDerivedAddress:O,sender:j,sweep:G})=>{let{createMemoInstruction:R}=await import("@solana/spl-memo"),W=new Q(j);if(!(O||V(x)))throw new U("core_transaction_invalid_recipient_address");let q=await T(),y=await g(T)({assetValue:l,isProgramDerivedAddress:O,recipient:x,sender:j,sweep:G});if(!y)throw new U("core_transaction_invalid_sender_address");if(f)y.add(R(f));let Z=await q.getLatestBlockhash();if(y.recentBlockhash=Z.blockhash,y.feePayer=W,G&&l.isGasAsset){let[X,B,F]=await Promise.all([q.getBalance(W),D(q,y),q.getMinimumBalanceForRentExemption(0)]),Y=X-B-F;if(Y<=0)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{balance:X,fee:B,rentReserve:F}});let{SystemProgram:_}=await import("@solana/web3.js");y.instructions[0]=_.transfer({fromPubkey:W,lamports:Y,toPubkey:new Q(x)})}return y}}async function r({instructions:T}){let{Transaction:x}=await import("@solana/web3.js"),l=new x().add(...T);if(!l)throw new U("core_transaction_invalid_sender_address");return l}function c(T,x){return async({recipient:l,assetValue:f,memo:O,isProgramDerivedAddress:j,sweep:G})=>{let R=await x();if(!R)throw new U("core_transaction_invalid_sender_address");let W=R.publicKey?.toString()??(await R.connect()).publicKey.toString(),q=await S(T)({assetValue:f,isProgramDerivedAddress:j,memo:O,recipient:l,sender:W,sweep:G});if("signTransaction"in R){let y=await R.signTransaction(q);return b(T)(y)}return q.sign(R),b(T)(q)}}function b(T){return async(x)=>{return(await T()).sendRawTransaction(x.serialize())}}function L(T,x){return async(l)=>{let f=await x();if(!f)throw new U("toolbox_solana_no_signer");let{VersionedTransaction:O}=await import("@solana/web3.js");if(!(l instanceof O)){let G=await(await T()).getLatestBlockhash();l.recentBlockhash=G.blockhash,l.feePayer=f.publicKey||void 0}if("connect"in f)return await f.signTransaction(l);return l.sign([f]),l}}async function H({phrase:T,derivationPath:x=h.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:f}=await import("@scure/bip39"),{Keypair:O}=await import("@solana/web3.js"),j=f(T),G=l.fromMasterSeed(j);return O.fromSeed(G.derive(x,!0).privateKey)}function I(T){return T.toString()}export{V as validateSolanaAddress,n as getSolanaToolbox,m as fetchTokenMetaData,H as createKeysForPath};
1
+ import{fa as v}from"../../chunk-nvfkjbyq.js";import{ga as X}from"../../chunk-xbdjxeqd.js";import{PublicKey as H}from"@solana/web3.js";import{AssetValue as T,Chain as E,DerivationPath as C,derivationPathToString as h,getChainConfig as b,getRPCUrl as P,NetworkDerivationPath as u,SwapKitError as x,updateDerivationPath as l}from"@swapkit/helpers";import{match as p,P as D}from"ts-pattern";async function m(j){let q=T.from({address:j,chain:E.Solana});if(q.symbol!=="UNKNOWN")return{decimals:q.decimal||0,id:j,logoURI:q.getIconUrl(),name:q.symbol,symbol:q.ticker};let z=`https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(j)}`;try{let F=await fetch(z);if(!F.ok)return null;let J=await F.json();if(!Array.isArray(J)||J.length===0)return null;return J.find((G)=>G.id===j)||null}catch{return null}}async function d(j){let q=await M(),{PublicKey:z}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:F}=await import("@solana/spl-token"),J=new z(j),{baseDecimal:Q}=b(E.Solana),G=await q.getBalance(J),N=[T.from({chain:E.Solana,fromBaseDecimal:Q,value:G||0})],U=await q.getParsedTokenAccountsByOwner(J,{programId:F});for(let{account:W}of U.value){let _=W.data.parsed.info,R=_.mint,Y=_.tokenAmount.amount;if(Number(Y)===0)continue;let Z=await m(R),$=Z?.symbol||"UNKNOWN",B=Z?.decimals||_.tokenAmount.decimals;N.push(T.from({asset:`${E.Solana}.${$}-${R}`,fromBaseDecimal:B,value:Y}))}return N}function k(j){try{let q=new H(j);return H.isOnCurve(q.toBytes())}catch{return!1}}function e(j){let q=j&&"index"in j?j.index||0:0,z=h(j&&"derivationPath"in j&&j.derivationPath?j.derivationPath:l(u[E.Solana],{index:q})),F;async function J(){if(F)return F;return F=await p(j).with({phrase:D.string},({phrase:G})=>K({derivationPath:z,phrase:G})).with({signer:D.any},({signer:G})=>G).otherwise(()=>{return}),F}async function Q(){let G=await J();return G?.publicKey?f(G.publicKey):""}return{broadcastTransaction:w(M),createKeysForPath:K,createTransaction:V(M),createTransactionFromInstructions:s,estimateTransactionFee:g(M),getAddress:Q,getAddressFromPubKey:f,getBalance:v(E.Solana),getBalanceFromRPC:d,getConnection:M,getPubkeyFromAddress:(G)=>new H(G),signAndBroadcastTransaction:async(G)=>{let N=await A(M,J)(G);return w(M)(N)},signTransaction:A(M,J),transfer:o(M,J),validateAddress:k}}function g(j){return async({recipient:q,assetValue:z,memo:F,isProgramDerivedAddress:J,sender:Q})=>{let G=await j(),N=await V(j)({assetValue:z,isProgramDerivedAddress:J,memo:F,recipient:q,sender:Q}),U=await y(G,N),{baseDecimal:W}=b(E.Solana);return T.from({chain:E.Solana,fromBaseDecimal:W,value:U})}}async function y(j,q){let z=await j.getFeeForMessage(q.compileMessage());if(z.value===null)throw new x("toolbox_fee_estimation_failed","Could not estimate Solana fee.");return z.value}async function M(){let{Connection:j}=await import("@solana/web3.js"),q=await P(E.Solana);return new j(q,{commitment:"confirmed",fetchMiddleware:(z,F,J)=>{let Q={};for(let[G,N]of Object.entries(F?.headers??{})){let U=G.toLowerCase();if(U!=="pragma"&&U!=="solana-client")Q[G]=N}J(z,{...F,headers:Q})}})}function c(j){return async({assetValue:q,recipient:z,sender:F,isProgramDerivedAddress:J,sweep:Q})=>{let G=new H(F);if(q.isGasAsset){let{Transaction:N,SystemProgram:U}=await import("@solana/web3.js");return new N().add(U.transfer({fromPubkey:G,lamports:Q?0:q.getBaseValue("number"),toPubkey:new H(z)}))}if(q.address){let N=await j();return a({amount:Q?0:q.getBaseValue("number"),connection:N,decimals:q.decimal,from:G,isProgramDerivedAddress:J,recipient:z,sweep:Q,tokenAddress:q.address})}return}}async function a({tokenAddress:j,recipient:q,from:z,connection:F,amount:J,decimals:Q,isProgramDerivedAddress:G,sweep:N}){let{getAssociatedTokenAddress:U,getAccount:W,createAssociatedTokenAccountInstruction:_,createTransferCheckedInstruction:R}=await import("@solana/spl-token"),{Transaction:Y}=await import("@solana/web3.js"),Z=new Y,$=new H(j),B=await U($,z),O=new H(q),L=await U($,O,G),I=!1;try{await W(F,L),I=!0}catch{}if(!I)Z.add(_(z,L,O,$));let S=N?BigInt((await F.getTokenAccountBalance(B)).value.amount):J;if(N&&S<=0n)throw new x({errorKey:"toolbox_sweep_amount_too_low",info:{asset:j,balance:S.toString()}});return Z.add(R(B,$,L,z,S,Q)),Z}function V(j){return async({recipient:q,assetValue:z,memo:F,isProgramDerivedAddress:J,sender:Q,recentBlockhash:G,sweep:N})=>{let{createMemoInstruction:U}=await import("@solana/spl-memo"),W=new H(Q);if(!(J||k(q)))throw new x("core_transaction_invalid_recipient_address");let _,R=()=>_??=j(),Y=await c(R)({assetValue:z,isProgramDerivedAddress:J,recipient:q,sender:Q,sweep:N});if(!Y)throw new x("core_transaction_invalid_sender_address");if(F)Y.add(U(F));if(Y.recentBlockhash=G??(await(await R()).getLatestBlockhash()).blockhash,Y.feePayer=W,N&&z.isGasAsset){let Z=await R(),[$,B,O]=await Promise.all([Z.getBalance(W),y(Z,Y),Z.getMinimumBalanceForRentExemption(0)]),L=$-B-O;if(L<=0)throw new x({errorKey:"toolbox_sweep_amount_too_low",info:{balance:$,fee:B,rentReserve:O}});let{SystemProgram:I}=await import("@solana/web3.js");Y.instructions[0]=I.transfer({fromPubkey:W,lamports:L,toPubkey:new H(q)})}return Y}}async function s({instructions:j}){let{Transaction:q}=await import("@solana/web3.js"),z=new q().add(...j);if(!z)throw new x("core_transaction_invalid_sender_address");return z}function o(j,q){return async({recipient:z,assetValue:F,memo:J,isProgramDerivedAddress:Q,sweep:G})=>{let N=await q();if(!N)throw new x("core_transaction_invalid_sender_address");let U=N.publicKey?.toString()??(await N.connect()).publicKey.toString(),W=await V(j)({assetValue:F,isProgramDerivedAddress:Q,memo:J,recipient:z,sender:U,sweep:G});if("signTransaction"in N){let _=await N.signTransaction(W);return w(j)(_)}return W.sign(N),w(j)(W)}}function w(j){return async(q)=>{return(await j()).sendRawTransaction(q.serialize())}}function A(j,q){return async(z)=>{let F=await q();if(!F)throw new x("toolbox_solana_no_signer");let{VersionedTransaction:J}=await import("@solana/web3.js");if(!(z instanceof J)){let G=await(await j()).getLatestBlockhash();z.recentBlockhash=G.blockhash,z.feePayer=F.publicKey||void 0}if("connect"in F)return await F.signTransaction(z);return z.sign([F]),z}}async function K({phrase:j,derivationPath:q=C.SOL}){let{HDKey:z}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:F}=await import("@scure/bip39"),{Keypair:J}=await import("@solana/web3.js"),Q=F(j),G=z.fromMasterSeed(Q);return J.fromSeed(G.derive(q,!0).privateKey)}function f(j){return j.toString()}export{k as validateSolanaAddress,e as getSolanaToolbox,m as fetchTokenMetaData,K as createKeysForPath};
@@ -1 +1 @@
1
- import{ga as N}from"../../chunk-xbdjxeqd.js";import{AssetValue as U,Chain as M,derivationPathToString as jP,getChainConfig as A,getRPCUrl as l,NetworkDerivationPath as qP,SKConfig as GP,SwapKitError as W}from"@swapkit/helpers";import{match as JP,P as QP}from"ts-pattern";var XP=/^G[A-Z2-7]{55}$/,YP=/^[A-Za-z0-9]{1,12}$/,i=2,ZP=600000,R;async function u(P){if(R&&Date.now()-R.timestamp<ZP)return R.value;let Z=(await P.ledgers().order("desc").limit(1).call()).records[0]?.base_reserve_in_stroops;if(Z===void 0)throw new W({errorKey:"toolbox_stellar_balance_error",info:{reason:"base_reserve_unavailable"}});return R={timestamp:Date.now(),value:Z},Z}function S(P){return U.from({chain:M.Stellar,value:P}).getBaseValue("bigint")}function $P(P){let{baseDecimal:J}=A(M.Stellar);return U.from({chain:M.Stellar,fromBaseDecimal:J,value:P}).getValue("string")}function o({balance:P,baseReserveInStroops:J,numSponsored:Z,numSponsoring:f,sellingLiabilities:_,subentryCount:x}){let $=S(P),k=S(_),B=i+x+f-Z,z=BigInt(B)*BigInt(J),I=$-z-k;return I>0n?I:0n}function MP({account:P,assetValue:J,baseReserveInStroops:Z,fee:f}){let _=P.balances.find((k)=>k.asset_type==="native"),$=(_?o({balance:_.balance,baseReserveInStroops:Z,numSponsored:P.num_sponsored,numSponsoring:P.num_sponsoring,sellingLiabilities:_.selling_liabilities,subentryCount:P.subentry_count}):0n)-BigInt(f);if($<=0n)throw new W({errorKey:"toolbox_sweep_amount_too_low",info:{asset:J.toString(),reason:"spendable balance does not cover the transaction fee"}});return $}function WP({baseReserveInStroops:P,sweepAmountInStroops:J}){if(J===void 0||P===void 0)return;let Z=BigInt(i)*BigInt(P);if(J<Z)throw new W({errorKey:"toolbox_sweep_amount_too_low",info:{amountInStroops:J,minimumStartingBalanceInStroops:Z,reason:"starting balance is below the Stellar account minimum"}})}function FP({account:P,assetCode:J,assetValue:Z,issuer:f,sweep:_}){if(!_)return Z.getValue("string");let x=P.balances.find(($)=>("asset_code"in $)&&$.asset_code===J&&$.asset_issuer===f)?.balance??"0";if(S(x)<=0n)throw new W({errorKey:"toolbox_sweep_amount_too_low",info:{asset:Z.toString(),balance:x,reason:"trust-line balance is not positive"}});return x}function LP(P){if(!P)return;if(new TextEncoder().encode(P).length>28)throw new W("helpers_invalid_memo_type")}function V(P){if(!P||typeof P!=="string"||!P.startsWith("G")||P.length!==56)return!1;return XP.test(P)}function v(P){if(typeof P!=="object"||P===null)return;let J="response"in P?P.response:void 0;return typeof J?.status==="number"?J.status:void 0}function xP(P){return v(P)===504}function DP(P){return P.hash?.().toString("hex")}function fP(P){return[...new Set([P,...GP.get("rpcUrls")[M.Stellar]])].filter(Boolean)}async function n(P){if(!V(P))return!1;try{let{StrKey:J}=await import("@stellar/stellar-sdk");return J.isValidEd25519PublicKey(P)}catch{return!1}}async function c(P){let{address:J,ticker:Z}=P,f=J?await n(J):!1;if(P.chain!==M.Stellar||P.isGasAsset||!YP.test(Z)||!J||!f)throw new W({errorKey:"helpers_invalid_asset_identifier",info:{identifier:P.toString()}});return{assetCode:Z,issuer:J}}function _P(P={}){let J,Z=P.derivationPath||qP[M.Stellar],f=jP(Z.slice(0,3));async function _({phrase:q,path:j}){let{HDKey:X}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:G}=await import("@scure/bip39"),{Keypair:Q}=await import("@stellar/stellar-sdk"),Y=G(q),L=X.fromMasterSeed(Y).derive(j,!0);return Q.fromRawEd25519Seed(Buffer.from(L.privateKey))}async function x(){if(J)return J;let q=JP(P).with({phrase:QP.string},({phrase:j})=>j).otherwise(()=>{return});if(!q)throw new W("toolbox_stellar_no_signer");return J=await _({path:f,phrase:q}),J}async function $(q){let{Horizon:j}=await import("@stellar/stellar-sdk"),X=q||await l(M.Stellar);return new j.Server(X)}async function k(q,j){for(let X of j)try{return(await(await $(X)).transactions().transaction(q).call()).hash||q}catch{}return}async function B(q,j){let X=await l(M.Stellar),G=fP(X),Q=DP(q),Y;for(let F of G)try{let L=await $(F),{hash:D}=await L.submitTransaction(q);return D}catch(L){if(Y=L,!xP(L))break;let D=Q?await k(Q,G):void 0;if(D)return D}throw new W(j,Y)}async function z(){try{return(await x()).publicKey()}catch{return""}}async function I(q){let j=q||await z();if(!j)throw new W("toolbox_stellar_account_not_found");let X=await $(),[G,Q]=await Promise.allSettled([X.loadAccount(j),u(X)]);if(G.status==="rejected"){let Y=G.reason;if(v(Y)===404)return[U.from({chain:M.Stellar,value:0})];throw Y}if(Q.status==="rejected")throw Q.reason;return G.value.balances.map((Y)=>{if(Y.asset_type==="native"){let D=o({balance:Y.balance,baseReserveInStroops:Q.value,numSponsored:G.value.num_sponsored,numSponsoring:G.value.num_sponsoring,sellingLiabilities:Y.selling_liabilities,subentryCount:G.value.subentry_count}),{baseDecimal:H}=A(M.Stellar);return U.from({chain:M.Stellar,fromBaseDecimal:H,value:D})}let F="asset_code"in Y?Y.asset_code:"",L="asset_issuer"in Y?Y.asset_issuer:"";return U.from({asset:`${M.Stellar}.${F}-${L}`,asyncTokenLookup:!1,value:Y.balance})})}async function t({address:q,assetValue:j}){if(j.chain!==M.Stellar)throw new W({errorKey:"toolbox_stellar_trustline_asset_invalid",info:{asset:j.toString()}});if(j.isGasAsset)return!0;if(!j.address)throw new W({errorKey:"toolbox_stellar_trustline_asset_invalid",info:{asset:j.toString(),reason:"missing issuer"}});let X=await $(),G;try{G=await X.loadAccount(q)}catch(Q){if(v(Q)===404)return!1;throw Q}return G.balances.some((Q)=>("asset_code"in Q)&&Q.asset_code===j.ticker&&Q.asset_issuer===j.address)}async function b({recipient:q,assetValue:j,memo:X,sender:G,sweep:Q}){if(LP(X),!await n(q))throw new W("core_transaction_invalid_recipient_address");let F=G||await z();if(!F)throw new W("toolbox_stellar_no_signer");let{Asset:L,Memo:D,Networks:H,Operation:O,TransactionBuilder:h}=await import("@stellar/stellar-sdk"),K=await $(),y=await K.fetchBaseFee(),w=await K.loadAccount(F),g=Q&&j.isGasAsset?await u(K):void 0,C=new h(w,{fee:String(y),networkPassphrase:H.PUBLIC});if(j.isGasAsset){let E=Q&&g!==void 0?MP({account:w,assetValue:j,baseReserveInStroops:g,fee:y}):void 0,T=E===void 0?j.getValue("string"):$P(E);try{await K.loadAccount(q),C.addOperation(O.payment({amount:T,asset:L.native(),destination:q}))}catch{WP({baseReserveInStroops:g,sweepAmountInStroops:E}),C.addOperation(O.createAccount({destination:q,startingBalance:T}))}}else{let{assetCode:E,issuer:T}=await c(j),PP=FP({account:w,assetCode:E,assetValue:j,issuer:T,sweep:Q});C.addOperation(O.payment({amount:PP,asset:new L(E,T),destination:q}))}if(X)C.addMemo(D.text(X));return C.setTimeout(30).build()}async function m({assetValue:q,limit:j,sender:X}){let G=X||await z();if(!G)throw new W("toolbox_stellar_no_signer");let{Asset:Q,Networks:Y,Operation:F,TransactionBuilder:L}=await import("@stellar/stellar-sdk"),{assetCode:D,issuer:H}=await c(q),O=await $(),[h,K]=await Promise.all([O.fetchBaseFee(),O.loadAccount(G)]),y=new Q(D,H),w=j!==void 0?F.changeTrust({asset:y,limit:j}):F.changeTrust({asset:y});return new L(K,{fee:String(h),networkPassphrase:Y.PUBLIC}).addOperation(w).setTimeout(30).build()}async function p(q){let{TransactionBuilder:j,Networks:X}=await import("@stellar/stellar-sdk"),G=await x(),Q=j.fromXDR(q.toXDR(),X.PUBLIC);return Q.sign(G),Q}function d(q){return B(q,"toolbox_stellar_broadcast_error")}async function r({recipient:q,assetValue:j,memo:X,sweep:G}){let Q=await x(),Y=Q.publicKey(),F=await b({assetValue:j,memo:X,recipient:q,sender:Y,sweep:G});return F.sign(Q),B(F,"toolbox_stellar_transaction_failed")}async function a({assetValue:q,limit:j}){let X=await x(),G=await m({assetValue:q,limit:j,sender:X.publicKey()});return G.sign(X),B(G,"toolbox_stellar_transaction_failed")}async function s(q){let j=await p(q);return d(j)}async function e(){let{baseDecimal:q}=A(M.Stellar);try{let G=(await(await $()).feeStats()).fee_charged.p50;return U.from({chain:M.Stellar,fromBaseDecimal:q,value:G})}catch{return U.from({chain:M.Stellar,fromBaseDecimal:q,value:"100"})}}return{broadcastTransaction:d,createTransaction:b,createTrustline:a,createTrustlineTransaction:m,estimateTransactionFee:e,getAddress:z,getBalance:I,hasTrustline:t,signAndBroadcastTransaction:s,signTransaction:p,transfer:r,validateAddress:V}}export{V as validateStellarAddress,_P as getStellarToolbox};
1
+ import{ga as N}from"../../chunk-xbdjxeqd.js";import{AssetValue as U,Chain as M,derivationPathToString as jP,getChainConfig as A,getRPCUrl as l,NetworkDerivationPath as qP,SKConfig as GP,SwapKitError as W}from"@swapkit/helpers";import{match as JP,P as QP}from"ts-pattern";var XP=/^G[A-Z2-7]{55}$/,YP=/^[A-Za-z0-9]{1,12}$/,i=2,ZP=600000,R;async function u(P){if(R&&Date.now()-R.timestamp<ZP)return R.value;let Z=(await P.ledgers().order("desc").limit(1).call()).records[0]?.base_reserve_in_stroops;if(Z===void 0)throw new W({errorKey:"toolbox_stellar_balance_error",info:{reason:"base_reserve_unavailable"}});return R={timestamp:Date.now(),value:Z},Z}function S(P){return U.from({chain:M.Stellar,value:P}).getBaseValue("bigint")}function $P(P){let{baseDecimal:J}=A(M.Stellar);return U.from({chain:M.Stellar,fromBaseDecimal:J,value:P}).getValue("string")}function o({balance:P,baseReserveInStroops:J,numSponsored:Z,numSponsoring:f,sellingLiabilities:_,subentryCount:x}){let $=S(P),k=S(_),B=i+x+f-Z,z=BigInt(B)*BigInt(J),I=$-z-k;return I>0n?I:0n}function MP({account:P,assetValue:J,baseReserveInStroops:Z,fee:f}){let _=P.balances.find((k)=>k.asset_type==="native"),$=(_?o({balance:_.balance,baseReserveInStroops:Z,numSponsored:P.num_sponsored,numSponsoring:P.num_sponsoring,sellingLiabilities:_.selling_liabilities,subentryCount:P.subentry_count}):0n)-BigInt(f);if($<=0n)throw new W({errorKey:"toolbox_sweep_amount_too_low",info:{asset:J.toString(),reason:"spendable balance does not cover the transaction fee"}});return $}function WP({baseReserveInStroops:P,sweepAmountInStroops:J}){if(J===void 0||P===void 0)return;let Z=BigInt(i)*BigInt(P);if(J<Z)throw new W({errorKey:"toolbox_sweep_amount_too_low",info:{amountInStroops:J,minimumStartingBalanceInStroops:Z,reason:"starting balance is below the Stellar account minimum"}})}function FP({account:P,assetCode:J,assetValue:Z,issuer:f,sweep:_}){if(!_)return Z.getValue("string");let x=P.balances.find(($)=>("asset_code"in $)&&$.asset_code===J&&$.asset_issuer===f)?.balance??"0";if(S(x)<=0n)throw new W({errorKey:"toolbox_sweep_amount_too_low",info:{asset:Z.toString(),balance:x,reason:"trust-line balance is not positive"}});return x}function LP(P){if(!P)return;if(new TextEncoder().encode(P).length>28)throw new W("helpers_invalid_memo_type")}function V(P){if(!P||typeof P!=="string"||!P.startsWith("G")||P.length!==56)return!1;return XP.test(P)}function v(P){if(typeof P!=="object"||P===null)return;let J="response"in P?P.response:void 0;return typeof J?.status==="number"?J.status:void 0}function xP(P){return v(P)===504}function DP(P){return P.hash?.().toString("hex")}function fP(P){return[...new Set([P,...GP.get("rpcUrls")[M.Stellar]])].filter(Boolean)}async function n(P){if(!V(P))return!1;try{let{StrKey:J}=await import("@stellar/stellar-sdk");return J.isValidEd25519PublicKey(P)}catch{return!1}}async function c(P){let{address:J,ticker:Z}=P,f=J?await n(J):!1;if(P.chain!==M.Stellar||P.isGasAsset||!YP.test(Z)||!J||!f)throw new W({errorKey:"helpers_invalid_asset_identifier",info:{identifier:P.toString()}});return{assetCode:Z,issuer:J}}function _P(P={}){let J,Z=P.derivationPath||qP[M.Stellar],f=jP(Z.slice(0,3));async function _({phrase:q,path:j}){let{HDKey:X}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:G}=await import("@scure/bip39"),{Keypair:Q}=await import("@stellar/stellar-sdk"),Y=G(q),L=X.fromMasterSeed(Y).derive(j,!0);return Q.fromRawEd25519Seed(Buffer.from(L.privateKey))}async function x(){if(J)return J;let q=JP(P).with({phrase:QP.string},({phrase:j})=>j).otherwise(()=>{return});if(!q)throw new W("toolbox_stellar_no_signer");return J=await _({path:f,phrase:q}),J}async function $(q){let{Horizon:j}=await import("@stellar/stellar-sdk"),X=q||await l(M.Stellar);return new j.Server(X)}async function k(q,j){for(let X of j)try{return(await(await $(X)).transactions().transaction(q).call()).hash||q}catch{}return}async function B(q,j){let X=await l(M.Stellar),G=fP(X),Q=DP(q),Y;for(let F of G)try{let L=await $(F),{hash:D}=await L.submitTransaction(q);return D}catch(L){if(Y=L,!xP(L))break;let D=Q?await k(Q,G):void 0;if(D)return D}throw new W(j,Y)}async function z(){try{return(await x()).publicKey()}catch{return""}}async function I(q){let j=q||await z();if(!j)throw new W("toolbox_stellar_account_not_found");let X=await $(),[G,Q]=await Promise.allSettled([X.loadAccount(j),u(X)]);if(G.status==="rejected"){let Y=G.reason;if(v(Y)===404)return[U.from({chain:M.Stellar,value:0})];throw Y}if(Q.status==="rejected")throw Q.reason;return G.value.balances.map((Y)=>{if(Y.asset_type==="native"){let D=o({balance:Y.balance,baseReserveInStroops:Q.value,numSponsored:G.value.num_sponsored,numSponsoring:G.value.num_sponsoring,sellingLiabilities:Y.selling_liabilities,subentryCount:G.value.subentry_count}),{baseDecimal:H}=A(M.Stellar);return U.from({chain:M.Stellar,fromBaseDecimal:H,value:D})}let F="asset_code"in Y?Y.asset_code:"",L="asset_issuer"in Y?Y.asset_issuer:"";return U.from({asset:`${M.Stellar}.${F}-${L}`,asyncTokenLookup:!1,value:Y.balance})})}async function t({address:q,assetValue:j}){if(j.chain!==M.Stellar)throw new W({errorKey:"toolbox_stellar_trustline_asset_invalid",info:{asset:j.toString()}});if(j.isGasAsset)return!0;if(!j.address)throw new W({errorKey:"toolbox_stellar_trustline_asset_invalid",info:{asset:j.toString(),reason:"missing issuer"}});let X=await $(),G;try{G=await X.loadAccount(q)}catch(Q){if(v(Q)===404)return!1;throw Q}return G.balances.some((Q)=>("asset_code"in Q)&&Q.asset_code===j.ticker&&Q.asset_issuer===j.address)}async function b({recipient:q,assetValue:j,memo:X,sender:G,sweep:Q}){if(LP(X),!await n(q))throw new W("core_transaction_invalid_recipient_address");let F=G||await z();if(!F)throw new W("toolbox_stellar_no_signer");let{Asset:L,Memo:D,Networks:H,Operation:O,TransactionBuilder:h}=await import("@stellar/stellar-sdk"),K=await $(),[y,w,g]=await Promise.all([K.fetchBaseFee(),K.loadAccount(F),Q&&j.isGasAsset?u(K):Promise.resolve(void 0)]),C=new h(w,{fee:String(y),networkPassphrase:H.PUBLIC});if(j.isGasAsset){let E=Q&&g!==void 0?MP({account:w,assetValue:j,baseReserveInStroops:g,fee:y}):void 0,T=E===void 0?j.getValue("string"):$P(E);try{await K.loadAccount(q),C.addOperation(O.payment({amount:T,asset:L.native(),destination:q}))}catch{WP({baseReserveInStroops:g,sweepAmountInStroops:E}),C.addOperation(O.createAccount({destination:q,startingBalance:T}))}}else{let{assetCode:E,issuer:T}=await c(j),PP=FP({account:w,assetCode:E,assetValue:j,issuer:T,sweep:Q});C.addOperation(O.payment({amount:PP,asset:new L(E,T),destination:q}))}if(X)C.addMemo(D.text(X));return C.setTimeout(30).build()}async function m({assetValue:q,limit:j,sender:X}){let G=X||await z();if(!G)throw new W("toolbox_stellar_no_signer");let{Asset:Q,Networks:Y,Operation:F,TransactionBuilder:L}=await import("@stellar/stellar-sdk"),{assetCode:D,issuer:H}=await c(q),O=await $(),[h,K]=await Promise.all([O.fetchBaseFee(),O.loadAccount(G)]),y=new Q(D,H),w=j!==void 0?F.changeTrust({asset:y,limit:j}):F.changeTrust({asset:y});return new L(K,{fee:String(h),networkPassphrase:Y.PUBLIC}).addOperation(w).setTimeout(30).build()}async function p(q){let{TransactionBuilder:j,Networks:X}=await import("@stellar/stellar-sdk"),G=await x(),Q=j.fromXDR(q.toXDR(),X.PUBLIC);return Q.sign(G),Q}function d(q){return B(q,"toolbox_stellar_broadcast_error")}async function r({recipient:q,assetValue:j,memo:X,sweep:G}){let Q=await x(),Y=Q.publicKey(),F=await b({assetValue:j,memo:X,recipient:q,sender:Y,sweep:G});return F.sign(Q),B(F,"toolbox_stellar_transaction_failed")}async function a({assetValue:q,limit:j}){let X=await x(),G=await m({assetValue:q,limit:j,sender:X.publicKey()});return G.sign(X),B(G,"toolbox_stellar_transaction_failed")}async function s(q){let j=await p(q);return d(j)}async function e(){let{baseDecimal:q}=A(M.Stellar);try{let G=(await(await $()).feeStats()).fee_charged.p50;return U.from({chain:M.Stellar,fromBaseDecimal:q,value:G})}catch{return U.from({chain:M.Stellar,fromBaseDecimal:q,value:"100"})}}return{broadcastTransaction:d,createTransaction:b,createTrustline:a,createTrustlineTransaction:m,estimateTransactionFee:e,getAddress:z,getBalance:I,hasTrustline:t,signAndBroadcastTransaction:s,signTransaction:p,transfer:r,validateAddress:V}}export{V as validateStellarAddress,_P as getStellarToolbox};
@@ -1 +1 @@
1
- import{fa as m}from"../../chunk-nvfkjbyq.js";import{ga as B}from"../../chunk-xbdjxeqd.js";import{AssetValue as t,Chain as F,getChainConfig as e,SKConfig as QQ,SwapKitError as v,SwapKitNumber as XQ}from"@swapkit/helpers";import{Address as q,beginCell as h,Cell as u,external as YQ,internal as ZQ,loadStateInit as $Q,SendMode as D,storeMessage as zQ,toNano as c}from"@ton/core";import{match as w,P as M}from"ts-pattern";var GQ=260734629,HQ=c("0.01"),qQ=c("0.05"),A=D.PAY_GAS_SEPARATELY+D.IGNORE_ERRORS,vQ=D.CARRY_ALL_REMAINING_BALANCE+D.IGNORE_ERRORS,kQ=60000,N,p=0;async function xQ(){let H=Date.now();if(N&&H-p<kQ)return N;let{getHttpEndpoint:U}=await import("@orbs-network/ton-access");return N=await U(),p=H,N}async function IQ(){let[H]=QQ.get("rpcUrls")[F.Ton]??[];if(H)return H;return await xQ()}function OQ(H={}){let U,P,O;async function k(){if(!U){let{TonClient:Q}=await import("@ton/ton"),X=H.provider??await IQ();U=new Q({endpoint:X})}return U}async function j(){return(await K()).address.toString()}async function V(){if(O)return O;return O=await w(H).with({phrase:M.string},async({phrase:Q})=>{let{mnemonicToWalletKey:X}=await import("@ton/crypto");return X(Q.split(" "))}).with({signer:M.any},({signer:Q})=>Q).otherwise(()=>{return}),O}async function K(Q){if(!P||Q){let X=await V(),Y=await k(),$=Q||X;if(!$)throw new v("core_wallet_connection_not_found");let{WalletContractV4:Z}=await import("@ton/ton"),z=Z.create({publicKey:$.publicKey,workchain:0});P=Y.open(z)}return P}let g=m(F.Ton);async function i({assetValue:Q,recipient:X,memo:Y,sender:$,sweep:Z}){if(Q.isGasAsset){if(Z){let s=$||await j(),S=await(await k()).getBalance(q.parse(s));if(S<=0n)throw new v("toolbox_sweep_amount_too_low",{asset:Q.toString(),balance:S.toString()})}let a=Y?C(Y).toBoc().toString("base64"):void 0;return[{address:X,amount:Q.getBaseValue("string"),payload:a}]}let z=Q.address;if(!z)throw new v({errorKey:"core_swap_contract_not_found",info:{asset:Q.toString()}});let G=$??await j(),x=await f({jettonMasterAddress:z,ownerAddress:G}),I=q.parse(X),J=q.parse(G),L=Z?await r(x):Q.getBaseValue("bigint");if(Z&&L<=0n)throw new v("toolbox_sweep_amount_too_low",{asset:Q.toString(),balance:L.toString()});let R=Y?C(Y):void 0,y=n({destinationAddress:I,forwardPayload:R,jettonAmount:L,responseAddress:J});return[{address:x.toString(),amount:qQ.toString(),payload:y.toBoc().toString("base64")}]}async function _({sender:Q,sweep:X,...Y}){let $=X&&Y.assetValue.isGasAsset?vQ:A;return{messages:await i({...Y,sender:Q,sweep:X}),sendMode:$}}function l(Q){if(!Array.isArray(Q))return Q;let[X]=Q;return{messages:Q.map(({sendMode:$,...Z})=>Z),sendMode:X?.sendMode??A}}function W(Q){return Q.map((X)=>{let Y=X.payload?u.fromBase64(X.payload):void 0,$=X.stateInit?$Q(u.fromBase64(X.stateInit).asSlice()):void 0,Z=q.parse(X.address),z=q.isFriendly(X.address)?q.parseFriendly(X.address).isBounceable:!0;return ZQ({body:Y,bounce:z,init:$,to:Z,value:BigInt(X.amount)})})}async function T(Q){let X=await V(),Y=await K();if(!Y||!X)throw new v("core_wallet_connection_not_found");let $=await k(),{state:Z}=await $.getContractState(Y.address),z=Z==="active",G=z?await Y.getSeqno():0,{messages:x,sendMode:I}=l(Q),J=Y.createTransfer({messages:W(x),secretKey:X.secretKey,sendMode:I,seqno:G}),L=YQ({body:J,init:z?void 0:Y.init,to:Y.address});return h().store(zQ(L)).endCell()}async function b(Q){return await(await k()).sendFile(Q.toBoc()),Q.hash().toString("hex")}async function E(Q){let X=await T(Q);return b(X)}async function d({assetValue:Q,recipient:X,memo:Y,sweep:$}){let Z=await _({assetValue:Q,memo:Y,recipient:X,sweep:$});return E(Z)}async function o({sender:Q,...X}){let{baseDecimal:Y}=e(F.Ton),$=await w(Q).with(M.string,(G)=>{return q.parseFriendly(G).address}).otherwise(async()=>{return(await K()).address});if(!$)throw new v("toolbox_fee_estimation_failed",{chain:F.Ton});let Z=t.from({chain:F.Ton,value:"0.01"}),z=await k();try{let G=await _({sender:Q,...X}),x=await V(),I=await K();if(!I||!x)return Z;let J=await I.getSeqno(),L=I.createTransfer({messages:W(G.messages),secretKey:x.secretKey,sendMode:G.sendMode,seqno:J}),{source_fees:R}=await z.estimateExternalMessageFee($,{body:L,ignoreSignature:!0,initCode:null,initData:null}),y=R.in_fwd_fee+R.storage_fee+R.gas_fee+R.fwd_fee;return Z.set(XQ.fromBigInt(BigInt(y),Y))}catch{return Z}}async function f({jettonMasterAddress:Q,ownerAddress:X}){try{let Y=await k(),$=q.parse(Q),Z=q.parse(X),{JettonMaster:z}=await import("@ton/ton");return await Y.open(z.create($)).getWalletAddress(Z)}catch{throw new v({errorKey:"core_swap_contract_not_found",info:{jettonMasterAddress:Q,ownerAddress:X}})}}async function r(Q){try{let X=await k(),{JettonWallet:Y}=await import("@ton/ton");return await X.open(Y.create(Q)).getBalance()}catch{throw new v({errorKey:"core_swap_contract_not_found",info:{jettonWalletAddress:Q.toString()}})}}function n({jettonAmount:Q,destinationAddress:X,responseAddress:Y,forwardAmount:$=HQ,forwardPayload:Z}){let z=h().storeUint(GQ,32).storeUint(0,64).storeCoins(Q).storeAddress(X).storeAddress(Y).storeBit(0).storeCoins($);if(Z)z.storeBit(1).storeRef(Z);else z.storeBit(0);return z.endCell()}function C(Q){return h().storeUint(0,32).storeStringTail(Q).endCell()}return{broadcastTransaction:b,createTransaction:_,estimateTransactionFee:o,getAddress:j,getBalance:g,getJettonWalletAddress:f,sign:T,signAndBroadcastTransaction:E,transfer:d,validateAddress:LQ}}function LQ(H){try{return q.parse(H),!0}catch{return!1}}export{LQ as validateTonAddress,OQ as getTONToolbox};
1
+ import{fa as m}from"../../chunk-nvfkjbyq.js";import{ga as v}from"../../chunk-xbdjxeqd.js";import{AssetValue as QQ,Chain as K,getChainConfig as XQ,SKConfig as YQ,SwapKitError as x,SwapKitNumber as ZQ}from"@swapkit/helpers";import{Address as H,beginCell as h,Cell as u,external as $Q,internal as zQ,loadStateInit as GQ,SendMode as P,storeMessage as HQ,toNano as c}from"@ton/core";import{match as w,P as M}from"ts-pattern";var qQ=260734629,kQ=c("0.01"),xQ=c("0.05"),A=P.PAY_GAS_SEPARATELY+P.IGNORE_ERRORS,IQ=P.CARRY_ALL_REMAINING_BALANCE+P.IGNORE_ERRORS,LQ=60000,D,p=0;async function RQ(){let q=Date.now();if(D&&q-p<LQ)return D;let{getHttpEndpoint:B}=await import("@orbs-network/ton-access");return D=await B(),p=q,D}async function vQ(){let[q]=YQ.get("rpcUrls")[K.Ton]??[];if(q)return q;return await RQ()}function JQ(q={}){let B,V,N;async function I(){if(!B){let{TonClient:Q}=await import("@ton/ton"),X=q.provider??await vQ();B=new Q({endpoint:X})}return B}async function _(){return(await J()).address.toString()}async function j(){if(N)return N;return N=await w(q).with({phrase:M.string},async({phrase:Q})=>{let{mnemonicToWalletKey:X}=await import("@ton/crypto");return X(Q.split(" "))}).with({signer:M.any},({signer:Q})=>Q).otherwise(()=>{return}),N}async function J(Q){if(!V||Q){let X=await j(),Y=await I(),$=Q||X;if(!$)throw new x("core_wallet_connection_not_found");let{WalletContractV4:Z}=await import("@ton/ton"),z=Z.create({publicKey:$.publicKey,workchain:0});V=Y.open(z)}return V}let g=m(K.Ton);async function i({assetValue:Q,recipient:X,memo:Y,sender:$,sweep:Z,jettonWalletAddress:z}){if(Q.isGasAsset){if(Z){let e=$||await _(),S=await(await I()).getBalance(H.parse(e));if(S<=0n)throw new x("toolbox_sweep_amount_too_low",{asset:Q.toString(),balance:S.toString()})}let t=Y?C(Y).toBoc().toString("base64"):void 0;return[{address:X,amount:Q.getBaseValue("string"),payload:t}]}let G=Q.address;if(!G)throw new x({errorKey:"core_swap_contract_not_found",info:{asset:Q.toString()}});let L=$??await _(),k=z?H.parse(z):await W({jettonMasterAddress:G,ownerAddress:L}),U=k.toString(),F=H.parse(X),R=H.parse(L),O=Z?await r(k):Q.getBaseValue("bigint");if(Z&&O<=0n)throw new x("toolbox_sweep_amount_too_low",{asset:Q.toString(),balance:O.toString()});let a=Y?C(Y):void 0,s=n({destinationAddress:F,forwardPayload:a,jettonAmount:O,responseAddress:R});return[{address:U,amount:xQ.toString(),payload:s.toBoc().toString("base64")}]}async function y({sender:Q,sweep:X,...Y}){let $=X&&Y.assetValue.isGasAsset?IQ:A;return{messages:await i({...Y,sender:Q,sweep:X}),sendMode:$}}function l(Q){if(!Array.isArray(Q))return Q;let[X]=Q;return{messages:Q.map(({sendMode:$,...Z})=>Z),sendMode:X?.sendMode??A}}function T(Q){return Q.map((X)=>{let Y=X.payload?u.fromBase64(X.payload):void 0,$=X.stateInit?GQ(u.fromBase64(X.stateInit).asSlice()):void 0,Z=H.parse(X.address),z=H.isFriendly(X.address)?H.parseFriendly(X.address).isBounceable:!0;return zQ({body:Y,bounce:z,init:$,to:Z,value:BigInt(X.amount)})})}async function b(Q){let X=await j(),Y=await J();if(!Y||!X)throw new x("core_wallet_connection_not_found");let $=await I(),{state:Z}=await $.getContractState(Y.address),z=Z==="active",G=z?await Y.getSeqno():0,{messages:L,sendMode:k}=l(Q),U=Y.createTransfer({messages:T(L),secretKey:X.secretKey,sendMode:k,seqno:G}),F=$Q({body:U,init:z?void 0:Y.init,to:Y.address});return h().store(HQ(F)).endCell()}async function E(Q){return await(await I()).sendFile(Q.toBoc()),Q.hash().toString("hex")}async function f(Q){let X=await b(Q);return E(X)}async function d({assetValue:Q,recipient:X,memo:Y,sweep:$}){let Z=await y({assetValue:Q,memo:Y,recipient:X,sweep:$});return f(Z)}async function o({sender:Q,...X}){let{baseDecimal:Y}=XQ(K.Ton),$=await w(Q).with(M.string,(G)=>{return H.parseFriendly(G).address}).otherwise(async()=>{return(await J()).address});if(!$)throw new x("toolbox_fee_estimation_failed",{chain:K.Ton});let Z=QQ.from({chain:K.Ton,value:"0.01"}),z=await I();try{let G=await y({sender:Q,...X}),L=await j(),k=await J();if(!k||!L)return Z;let U=await k.getSeqno(),F=k.createTransfer({messages:T(G.messages),secretKey:L.secretKey,sendMode:G.sendMode,seqno:U}),{source_fees:R}=await z.estimateExternalMessageFee($,{body:F,ignoreSignature:!0,initCode:null,initData:null}),O=R.in_fwd_fee+R.storage_fee+R.gas_fee+R.fwd_fee;return Z.set(ZQ.fromBigInt(BigInt(O),Y))}catch{return Z}}async function W({jettonMasterAddress:Q,ownerAddress:X}){try{let Y=await I(),$=H.parse(Q),Z=H.parse(X),{JettonMaster:z}=await import("@ton/ton");return await Y.open(z.create($)).getWalletAddress(Z)}catch{throw new x({errorKey:"core_swap_contract_not_found",info:{jettonMasterAddress:Q,ownerAddress:X}})}}async function r(Q){try{let X=await I(),{JettonWallet:Y}=await import("@ton/ton");return await X.open(Y.create(Q)).getBalance()}catch{throw new x({errorKey:"core_swap_contract_not_found",info:{jettonWalletAddress:Q.toString()}})}}function n({jettonAmount:Q,destinationAddress:X,responseAddress:Y,forwardAmount:$=kQ,forwardPayload:Z}){let z=h().storeUint(qQ,32).storeUint(0,64).storeCoins(Q).storeAddress(X).storeAddress(Y).storeBit(0).storeCoins($);if(Z)z.storeBit(1).storeRef(Z);else z.storeBit(0);return z.endCell()}function C(Q){return h().storeUint(0,32).storeStringTail(Q).endCell()}return{broadcastTransaction:E,createTransaction:y,estimateTransactionFee:o,getAddress:_,getBalance:g,getJettonWalletAddress:W,sign:b,signAndBroadcastTransaction:f,transfer:d,validateAddress:BQ}}function BQ(q){try{return H.parse(q),!0}catch{return!1}}export{BQ as validateTonAddress,JQ as getTONToolbox};
@@ -1 +1 @@
1
- import"../../chunk-xbdjxeqd.js";import{bytesToHex as WJ}from"@noble/hashes/utils.js";import{HDKey as OJ}from"@scure/bip32";import{mnemonicToSeedSync as CJ}from"@scure/bip39";import{AssetValue as F,BaseDecimal as l,Chain as D,derivationPathToString as xz,getRPCUrl as kJ,NetworkDerivationPath as bz,SwapKitError as U,updateDerivationPath as wz,warnOnce as Tz}from"@swapkit/helpers";import{match as UJ,P as t}from"ts-pattern";import{sha256 as oz}from"@noble/hashes/sha2.js";import{bytesToHex as Yz,hexToBytes as Xz}from"@noble/hashes/utils.js";import{SwapKitError as _}from"@swapkit/helpers";var h=0,jz=1,A=2,qz=5,iz=8,dz=10,nz=18;function i(J,z){let Q=0n,$=0n,X=z;while(X<J.length&&X-z<10){let q=J[X++];if(q===void 0)break;if(Q|=BigInt(q&127)<<$,$+=7n,(q&128)===0)return[Q,X]}throw new _("toolbox_tron_transaction_creation_failed")}function x(J){let z=[],Q=J<0n?J+2n**64n:J;while(Q>=128n)z.push(Number(Q&0x7fn)|128),Q>>=7n;return z.push(Number(Q)),z}function y(J,z,Q){let $=J.get(z);if($)$.push(Q);else J.set(z,[Q])}function tz(J){let z=new Map,Q=0;while(Q<J.length){let[$,X]=i(J,Q);Q=X;let q=Number($>>3n),O=Number($&7n);if(O===h){let[P,K]=i(J,Q);Q=K,y(z,q,{data:new Uint8Array(x(P)),wireType:h})}else if(O===A){let[P,K]=i(J,Q);Q=K;let B=Number(P);if(B<0||Q+B>J.length)throw new _("toolbox_tron_transaction_creation_failed");let c=J.slice(Q,Q+B);Q+=B,y(z,q,{data:c,wireType:A})}else if(O===jz){if(Q+8>J.length)throw new _("toolbox_tron_transaction_creation_failed");let P=J.slice(Q,Q+8);Q+=8,y(z,q,{data:P,wireType:jz})}else if(O===qz){if(Q+4>J.length)throw new _("toolbox_tron_transaction_creation_failed");let P=J.slice(Q,Q+4);Q+=4,y(z,q,{data:P,wireType:qz})}else throw new _("toolbox_tron_transaction_creation_failed")}return z}function az(J){let z=[];for(let[q,O]of[...J.entries()].sort(([P],[K])=>P-K))for(let{wireType:P,data:K}of O){let B=BigInt(q<<3|P);if(z.push(new Uint8Array(x(B))),P===A)z.push(new Uint8Array(x(BigInt(K.length))));z.push(K)}let Q=z.reduce((q,O)=>q+O.length,0),$=new Uint8Array(Q),X=0;for(let q of z)$.set(q,X),X+=q.length;return $}function Gz(J,z){if(!J||J.length%2!==0)throw new _("toolbox_tron_transaction_creation_failed");let Q=Xz(J),$=tz(Q);if(z.expiration!==void 0)$.set(iz,[{data:new Uint8Array(x(BigInt(z.expiration))),wireType:h}]);if(z.data!==void 0)$.set(dz,[{data:Xz(z.data),wireType:A}]);if(z.fee_limit!==void 0)$.set(nz,[{data:new Uint8Array(x(BigInt(z.fee_limit))),wireType:h}]);let X=az($),q=Yz(X),O=Yz(oz(X));return{raw_data_hex:q,txID:O}}import{Chain as ZJ,getRPCUrlSync as $J,SwapKitError as N,warnOnce as u}from"@swapkit/helpers";import{secp256k1 as Mz}from"@noble/curves/secp256k1.js";import{sha256 as Wz}from"@noble/hashes/sha2.js";import{keccak_256 as rz}from"@noble/hashes/sha3.js";import{bytesToHex as T,hexToBytes as E}from"@noble/hashes/utils.js";import{createBase58check as sz}from"@scure/base";import{SwapKitError as Oz}from"@swapkit/helpers";var m=sz(Wz),Cz=65,ez=2n**256n;function R(J){if(typeof J!=="string")return!1;try{let z=m.decode(J);return z.length===21&&z[0]===Cz}catch{return!1}}function kz(J){return T(m.decode(J))}function zJ(J){return m.decode(J).slice(1)}function Uz(J){let z=Mz.getPublicKey(E(J),!1),Q=rz(z.slice(1)).slice(-20),$=new Uint8Array(21);return $[0]=Cz,$.set(Q,1),m.encode($)}function Hz({txID:J,privateKey:z}){let Q=Mz.sign(E(J),E(z),{format:"recovered",prehash:!1}),$=Q[0]??0,X=T(Q.slice(1,33)),q=T(Q.slice(33,65)),O=($+27).toString(16).padStart(2,"0");return X+q+O}function V({txID:J,raw_data_hex:z}){let Q=T(Wz(E(z)));if(J!==Q)throw new Oz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:J})}function JJ(J){return`000000000000000000000000${T(zJ(J))}`}function QJ(J){let z=typeof J==="bigint"?J:BigInt(J);if(z<0n||z>=ez)throw new Oz("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});return z.toString(16).padStart(64,"0")}function I(J){return J.map(({type:z,value:Q})=>z==="address"?JJ(Q):QJ(BigInt(Q))).join("")}function Kz(J){return T(new TextEncoder().encode(J))}var Lz="https://api.trongrid.io",YJ=1000,XJ=1e6,jJ=420,qJ=1e6,GJ=30000;function Nz(){try{return $J(ZJ.Tron)}catch{return Lz}}function Dz(){let J=new AbortController,z=setTimeout(()=>J.abort(),GJ);return{cleanup:()=>clearTimeout(z),signal:J.signal}}async function S(J,z){let{signal:Q,cleanup:$}=Dz();try{let X=await fetch(`${Nz()}${J}`,{body:JSON.stringify(z),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!X.ok)throw new N("toolbox_tron_trongrid_api_error",{message:`${X.status} ${X.statusText} on ${J}`});return await X.json()}finally{$()}}async function Rz(J,z){let{signal:Q,cleanup:$}=Dz();try{let X=await fetch(`${z??Nz()}${J}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!X.ok)throw new N("toolbox_tron_trongrid_api_error",{message:`${X.status} ${X.statusText} on ${J}`});return await X.json()}finally{$()}}async function p(J){if(!R(J))throw new N("toolbox_tron_trongrid_api_error",{address:J,message:"Invalid address"});try{let z=await Rz(`/v1/accounts/${J}`,Lz);if(!(z.success&&z.data)||z.data.length===0)return;let Q;try{Q=kz(J).toLowerCase()}catch{Q=J.toLowerCase()}let $=z.data.find((X)=>X.address.toLowerCase()===Q);if(!$)return;return{balance:$.balance,trc20:$.trc20||[]}}catch(z){if(z instanceof N)throw z;throw new N("toolbox_tron_trongrid_api_error",{address:J,message:z instanceof Error?z.message:"Unknown error"})}}async function Fz({from:J,to:z,amount:Q}){let X=await S("/wallet/createtransaction",{amount:Q,owner_address:J,to_address:z,visible:!0});if(!X.txID||!X.raw_data_hex||!X.raw_data)throw new N("toolbox_tron_transaction_creation_failed");let O=X.raw_data?.contract?.[0]?.parameter?.value;if(O?.to_address!==z||O?.owner_address!==J||O?.amount!==Q)throw new N("toolbox_tron_transaction_creation_failed");return V(X),X}async function Bz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$,feeLimit:X,callValue:q=0}){let O=await S("/wallet/triggersmartcontract",{call_value:q,contract_address:z,fee_limit:X,function_selector:Q,owner_address:J,parameter:$,visible:!0});if(!O.result.result||!O.transaction?.txID||!O.transaction?.raw_data_hex)throw new N("toolbox_tron_transaction_creation_failed");let K=O.transaction.raw_data?.contract?.[0]?.parameter?.value;if(K?.contract_address!==z||K?.owner_address!==J)throw new N("toolbox_tron_transaction_creation_failed");return V(O.transaction),O.transaction}function Sz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$}){return S("/wallet/triggerconstantcontract",{contract_address:z,function_selector:Q,owner_address:J,parameter:$,visible:!0})}function MJ({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$}){return S("/wallet/estimateenergy",{contract_address:z,function_selector:Q,owner_address:J,parameter:$,visible:!0})}function Pz(J){let z=typeof J==="number"?J:typeof J==="string"?Number(J):Number.NaN;return Number.isFinite(z)&&z>0?z:void 0}async function b(J){try{let{result:z,txid:Q}=await S("/wallet/broadcasttransaction",{raw_data:J.raw_data,raw_data_hex:J.raw_data_hex,signature:J.signature,txID:J.txID,visible:J.visible});if(!z||!Q)throw new N("toolbox_tron_token_transfer_failed");return Q}catch(z){throw new N("toolbox_tron_broadcast_failed",{error:z})}}async function w(){let J={};try{let{chainParameter:z}=await Rz("/wallet/getchainparameters");for(let Q of z)J[Q.key]=Q.value}catch(z){u({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${z instanceof Error?z.message:z}`})}return{bandwidthFee:J.getTransactionFee??YJ,createAccountFee:J.getCreateNewAccountFeeInSystemContract??J.getCreateAccountFee??XJ,energyFee:J.getEnergyFee??jJ,memoFee:J.getMemoFee??qJ}}async function d(J){try{let z=await S("/wallet/getaccountresource",{address:J,visible:!0});return{bandwidth:{free:(z.freeNetLimit??600)-(z.freeNetUsed??0),total:z.NetLimit??0,used:z.NetUsed??0},energy:{total:z.EnergyLimit??0,used:z.EnergyUsed??0}}}catch(z){return u({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${z instanceof Error?z.message:z}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function g(J){try{let z=await S("/wallet/getaccount",{address:J,visible:!0});return z&&Object.keys(z).length>0}catch{return!1}}async function n(J){try{let z=await MJ({...J,ownerAddress:J.sender}),Q=z.energy_required??z.energyRequired;if(z.result&&!z.result.result)throw new N("toolbox_tron_trongrid_api_error",{message:z.result.message||"estimateenergy failed"});if(Q!==void 0){let $=Pz(Q);if($!==void 0)return $;throw new N("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(z){u({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${z instanceof Error?z.message:z}`})}try{let{energy_used:z}=await Sz({...J,ownerAddress:J.sender}),Q=Pz(z);if(Q!==void 0)return Q;throw new N("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(z){throw u({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${z instanceof Error?z.message:z}`}),new N("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${z instanceof Error?z.message:z}`})}}async function _z({assetAddress:J,owner:z,spender:Q}){let $=I([{type:"address",value:z},{type:"address",value:Q}]),q=(await Sz({contractAddress:J,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:$})).constant_result?.[0];if(!q)return 0n;try{return BigInt(`0x${q}`)}catch{return 0n}}var HJ=R,Vz=268,Iz=65000,a=25000,vz=345,r="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",KJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";function gz({phrase:J,derivationPath:z}){let Q=OJ.fromMasterSeed(CJ(J)).derive(z);if(!Q.privateKey)throw new U("toolbox_tron_no_signer");return WJ(Q.privateKey)}function PJ(J,z){return{...J,value:String(z)}}function LJ(J,z){if(!z)return J;return{...J,data:z.startsWith("0x")?z:`0x${z}`}}function NJ({phrase:J,derivationPath:z,index:Q}){let $=z||xz(wz(bz[D.Tron],{index:Q||0}));return gz({derivationPath:$,phrase:J})}function DJ({phrase:J,derivationPath:z}){let Q=gz({derivationPath:z,phrase:J}),$=Uz(Q);return{getAddress:()=>Promise.resolve($),signTransaction:(X)=>{V(X);let q=Hz({privateKey:Q,txID:X.txID});return Promise.resolve({...X,signature:[q]})}}}function fz({transaction:J,memo:z,expiration:Q,feeLimit:$}){let X={},q={};if($!==void 0&&J.raw_data)X.fee_limit=$,q.fee_limit=$;if(z){let K=z.startsWith("0x")?z.replace(/^0x/,""):Kz(z);X.data=K,q.data=K}if(Q){let K=J.raw_data.expiration+Q*1000;X.expiration=K,q.expiration=K}if(Object.keys(X).length===0)return J;let{raw_data_hex:O,txID:P}=Gz(J.raw_data_hex,X);return{...J,raw_data:{...J.raw_data,...q},raw_data_hex:O,txID:P}}function RJ(J={}){let z="index"in J?J.index||0:0,Q=xz("derivationPath"in J&&J.derivationPath?J.derivationPath:wz(bz[D.Tron],{index:z})),$,X=!1;function q(){if(X)return Promise.resolve($);return $=UJ(J).with({phrase:t.string},({phrase:Z})=>DJ({derivationPath:Q,phrase:Z})).with({signer:t.not(t.nullish)},({signer:Z})=>Z).otherwise(()=>{return}),X=!0,Promise.resolve($)}async function O(){let Z=await q();if(!Z)throw new U("toolbox_tron_no_signer");return Z.getAddress()}async function P(Z,Y){let G=Z||Iz,j=Y??(await w()).energyFee,M=G*j,W=Math.ceil(M*1.5);return Math.min(Math.max(W,1e7),150000000)}async function K({contractAddress:Z,functionSelector:Y,parameter:G,sender:j,memo:M,expiration:W,extraEnergy:C=0}){let k=await n({contractAddress:Z,functionSelector:Y,parameter:G,sender:j}),H=await P(k+C),L=await Bz({contractAddress:Z,feeLimit:H,functionSelector:Y,ownerAddress:j,parameter:G});return fz({expiration:W,feeLimit:H,memo:M,transaction:L})}async function B(Z){if(!R(Z))return[F.from({chain:D.Tron})];try{let Y=await p(Z);if(!Y)return[F.from({chain:D.Tron})];let G=[F.from({chain:D.Tron,fromBaseDecimal:6,value:String(Y.balance)})],j=Y.trc20?.find((M)=>(r in M));if(j){let M=j[r];G.push(F.from({asset:`TRON.USDT-${r}`,fromBaseDecimal:6,value:M}))}return G}catch(Y){return Tz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${Y instanceof Error?Y.message:Y}`}),[F.from({chain:D.Tron})]}}async function c({recipient:Z,assetValue:Y,memo:G,expiration:j,sweep:M}){if(!R(Z))throw new U("toolbox_tron_token_transfer_failed",{message:"invalid address"});let W=await q();if(!W)throw new U("toolbox_tron_no_signer");try{let C=await O(),k=await Jz({assetValue:Y,expiration:j,memo:G,recipient:Z,sender:C,sweep:M}),H=await W.signTransaction(k),L=await b(H);if(!L)throw new U("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(C){if(C instanceof U&&C.errorKey==="toolbox_sweep_amount_too_low")throw C;throw new U("toolbox_tron_token_transfer_failed",{message:C instanceof Error?C.message:String(C)})}}function s({requiredBandwidth:Z,resources:Y,feePerUnit:G}){let j=Math.max(0,Y.free+Y.total-Y.used);return Z>j?(Z-j)*G:0}async function e({memo:Z,recipient:Y,senderAddress:G}){let[j,M,W]=await Promise.all([w(),g(Y),d(G)]),C=M?0:j.createAccountFee,k=s({feePerUnit:j.bandwidthFee,requiredBandwidth:Vz,resources:W.bandwidth}),H=Z?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:l.TRON,value:C+k+H})}async function zz({assetValue:Z,amountInBaseUnits:Y=Z.getBaseValue("string"),memo:G,recipient:j,senderAddress:M}){let W=Z.address;if(!W)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Z.toString()});let[C,k,H,L]=await Promise.all([w(),g(j),d(M),n({contractAddress:W,functionSelector:"transfer(address,uint256)",parameter:I([{type:"address",value:j},{type:"uint256",value:Y}]),sender:M})]),f=L+(k?0:a),o=s({feePerUnit:C.bandwidthFee,requiredBandwidth:vz,resources:H.bandwidth}),$z=Math.max(0,H.energy.total-H.energy.used),lz=f>$z?(f-$z)*C.energyFee:0,cz=G?C.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:l.TRON,value:o+lz+cz})}async function yz({assetValue:Z,memo:Y,recipient:G}){let[j,M]=await Promise.all([w(),g(G)]);if(Z.isGasAsset){let H=M?0:j.createAccountFee,L=Y?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:l.TRON,value:H+Vz*j.bandwidthFee+L})}let C=await P(Iz+(M?0:a),j.energyFee),k=Y?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:l.TRON,value:C+vz*j.bandwidthFee+k})}async function hz({assetValue:Z,memo:Y,recipient:G,sender:j}){let M=await q();try{let W=j?j:M?await O():void 0;if(!W)return yz({assetValue:Z,memo:Y,recipient:G});return Z.isGasAsset?e({memo:Y,recipient:G,senderAddress:W}):zz({assetValue:Z,memo:Y,recipient:G,senderAddress:W})}catch(W){throw Tz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${W instanceof Error?W.message:W}`}),new U("toolbox_fee_estimation_failed",{chain:D.Tron,error:W})}}async function Az({assetValue:Z,memo:Y,recipient:G,sender:j,sweep:M}){if(!M)return Z.getBaseValue("bigint");let[W,C]=await Promise.all([p(j),e({memo:Y,recipient:G,senderAddress:j})]),k=BigInt(W?.balance??0)-C.getBaseValue("bigint");if(k<=0n)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{amount:k.toString(),asset:Z.toString()}});return k}async function Ez({assetValue:Z,memo:Y,recipient:G,sender:j,sweep:M}){if(!M)return Z.getBaseValue("string");let W=Z.address;if(!W)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Z.toString()});let C=await p(j),H=C?.trc20.find((o)=>(W in o))?.[W]??"0";if(BigInt(H)<=0n)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{asset:Z.toString(),balance:H}});let L=await zz({amountInBaseUnits:H,assetValue:Z,memo:Y,recipient:G,senderAddress:j}),v=BigInt(C?.balance??0),f=L.getBaseValue("bigint");if(v<f)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{asset:Z.toString(),nativeBalance:v.toString(),requiredNativeFee:f.toString()}});return H}async function Jz({recipient:Z,assetValue:Y,memo:G,sender:j,expiration:M,sweep:W}){if(!R(Z)||!R(j))throw new U("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(Y.isGasAsset){let L=await Az({assetValue:Y,expiration:M,memo:G,recipient:Z,sender:j,sweep:W});if(L>BigInt(Number.MAX_SAFE_INTEGER))throw new U({errorKey:"toolbox_tron_transaction_creation_failed",info:{amount:L.toString(),reason:`Native transfer amount exceeds the safe integer limit of ${Number.MAX_SAFE_INTEGER} SUN`}});let v=await Fz({amount:Number(L),from:j,to:Z});return fz({expiration:M,memo:G,transaction:v})}let C=Y.address;if(!C)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let k=await Ez({assetValue:Y,expiration:M,memo:G,recipient:Z,sender:j,sweep:W}),H=await g(Z);return K({contractAddress:C,expiration:M,extraEnergy:H?0:a,functionSelector:"transfer(address,uint256)",memo:G,parameter:I([{type:"address",value:Z},{type:"uint256",value:k}]),sender:j})}async function Qz(Z){V(Z);let Y=await q();if(!Y)throw new U("toolbox_tron_no_signer");return Y.signTransaction(Z)}async function mz(Z){let Y=await Qz(Z);return b(Y)}function Zz({assetAddress:Z,spenderAddress:Y,from:G}){return _z({assetAddress:Z,owner:G,spender:Y})}async function uz({assetAddress:Z,spenderAddress:Y,from:G,amount:j}){let M=await Zz({assetAddress:Z,from:G,spenderAddress:Y});if(!j)return M>0n;return M>=BigInt(j)}async function pz({assetAddress:Z,spenderAddress:Y,amount:G,from:j}){if(!R(Z)||!R(Y))throw new U("toolbox_tron_approve_failed");let M=await q();if(!M)throw new U("toolbox_tron_no_signer");let W=j||await O(),C=G!==void 0?BigInt(G).toString():KJ;try{let k=await K({contractAddress:Z,functionSelector:"approve(address,uint256)",parameter:I([{type:"address",value:Y},{type:"uint256",value:C}]),sender:W}),H=await M.signTransaction(k),L=await b(H);if(!L)throw new U("toolbox_tron_approve_failed");return L}catch(k){if(k instanceof U)throw k;throw new U("toolbox_tron_approve_failed",{error:k})}}return{approve:pz,broadcastTransaction:b,createTransaction:Jz,estimateTransactionFee:hz,getAddress:O,getApprovedAmount:Zz,getBalance:B,getRpcUrl:()=>kJ(D.Tron),isApproved:uz,signAndBroadcastTransaction:mz,signTransaction:Qz,transfer:c,validateAddress:R}}export{PJ as withTronTransactionValue,LJ as withTronTransactionData,HJ as validateTronAddress,RJ as getTronToolbox,NJ as getTronPrivateKeyFromMnemonic};
1
+ import"../../chunk-xbdjxeqd.js";import{bytesToHex as WJ}from"@noble/hashes/utils.js";import{HDKey as OJ}from"@scure/bip32";import{mnemonicToSeedSync as CJ}from"@scure/bip39";import{AssetValue as F,BaseDecimal as p,Chain as D,derivationPathToString as xz,getRPCUrl as kJ,NetworkDerivationPath as bz,SwapKitError as U,updateDerivationPath as wz,warnOnce as Tz}from"@swapkit/helpers";import{match as UJ,P as t}from"ts-pattern";import{sha256 as oz}from"@noble/hashes/sha2.js";import{bytesToHex as Yz,hexToBytes as Xz}from"@noble/hashes/utils.js";import{SwapKitError as V}from"@swapkit/helpers";var h=0,jz=1,A=2,qz=5,iz=8,dz=10,nz=18;function i(J,z){let Q=0n,$=0n,X=z;while(X<J.length&&X-z<10){let q=J[X++];if(q===void 0)break;if(Q|=BigInt(q&127)<<$,$+=7n,(q&128)===0)return[Q,X]}throw new V("toolbox_tron_transaction_creation_failed")}function x(J){let z=[],Q=J<0n?J+2n**64n:J;while(Q>=128n)z.push(Number(Q&0x7fn)|128),Q>>=7n;return z.push(Number(Q)),z}function y(J,z,Q){let $=J.get(z);if($)$.push(Q);else J.set(z,[Q])}function tz(J){let z=new Map,Q=0;while(Q<J.length){let[$,X]=i(J,Q);Q=X;let q=Number($>>3n),O=Number($&7n);if(O===h){let[P,K]=i(J,Q);Q=K,y(z,q,{data:new Uint8Array(x(P)),wireType:h})}else if(O===A){let[P,K]=i(J,Q);Q=K;let B=Number(P);if(B<0||Q+B>J.length)throw new V("toolbox_tron_transaction_creation_failed");let c=J.slice(Q,Q+B);Q+=B,y(z,q,{data:c,wireType:A})}else if(O===jz){if(Q+8>J.length)throw new V("toolbox_tron_transaction_creation_failed");let P=J.slice(Q,Q+8);Q+=8,y(z,q,{data:P,wireType:jz})}else if(O===qz){if(Q+4>J.length)throw new V("toolbox_tron_transaction_creation_failed");let P=J.slice(Q,Q+4);Q+=4,y(z,q,{data:P,wireType:qz})}else throw new V("toolbox_tron_transaction_creation_failed")}return z}function az(J){let z=[];for(let[q,O]of[...J.entries()].sort(([P],[K])=>P-K))for(let{wireType:P,data:K}of O){let B=BigInt(q<<3|P);if(z.push(new Uint8Array(x(B))),P===A)z.push(new Uint8Array(x(BigInt(K.length))));z.push(K)}let Q=z.reduce((q,O)=>q+O.length,0),$=new Uint8Array(Q),X=0;for(let q of z)$.set(q,X),X+=q.length;return $}function Gz(J,z){if(!J||J.length%2!==0)throw new V("toolbox_tron_transaction_creation_failed");let Q=Xz(J),$=tz(Q);if(z.expiration!==void 0)$.set(iz,[{data:new Uint8Array(x(BigInt(z.expiration))),wireType:h}]);if(z.data!==void 0)$.set(dz,[{data:Xz(z.data),wireType:A}]);if(z.fee_limit!==void 0)$.set(nz,[{data:new Uint8Array(x(BigInt(z.fee_limit))),wireType:h}]);let X=az($),q=Yz(X),O=Yz(oz(X));return{raw_data_hex:q,txID:O}}import{Chain as ZJ,getRPCUrlSync as $J,SwapKitError as N,warnOnce as u}from"@swapkit/helpers";import{secp256k1 as Mz}from"@noble/curves/secp256k1.js";import{sha256 as Wz}from"@noble/hashes/sha2.js";import{keccak_256 as rz}from"@noble/hashes/sha3.js";import{bytesToHex as I,hexToBytes as E}from"@noble/hashes/utils.js";import{createBase58check as sz}from"@scure/base";import{SwapKitError as Oz}from"@swapkit/helpers";var m=sz(Wz),Cz=65,ez=2n**256n;function R(J){if(typeof J!=="string")return!1;try{let z=m.decode(J);return z.length===21&&z[0]===Cz}catch{return!1}}function kz(J){return I(m.decode(J))}function zJ(J){return m.decode(J).slice(1)}function Uz(J){let z=Mz.getPublicKey(E(J),!1),Q=rz(z.slice(1)).slice(-20),$=new Uint8Array(21);return $[0]=Cz,$.set(Q,1),m.encode($)}function Hz({txID:J,privateKey:z}){let Q=Mz.sign(E(J),E(z),{format:"recovered",prehash:!1}),$=Q[0]??0,X=I(Q.slice(1,33)),q=I(Q.slice(33,65)),O=($+27).toString(16).padStart(2,"0");return X+q+O}function f({txID:J,raw_data_hex:z}){let Q=I(Wz(E(z)));if(J!==Q)throw new Oz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:J})}function JJ(J){return`000000000000000000000000${I(zJ(J))}`}function QJ(J){let z=typeof J==="bigint"?J:BigInt(J);if(z<0n||z>=ez)throw new Oz("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});return z.toString(16).padStart(64,"0")}function v(J){return J.map(({type:z,value:Q})=>z==="address"?JJ(Q):QJ(BigInt(Q))).join("")}function Kz(J){return I(new TextEncoder().encode(J))}var Lz="https://api.trongrid.io",YJ=1000,XJ=1e6,jJ=420,qJ=1e6,GJ=30000;function Nz(){try{return $J(ZJ.Tron)}catch{return Lz}}function Dz(){let J=new AbortController,z=setTimeout(()=>J.abort(),GJ);return{cleanup:()=>clearTimeout(z),signal:J.signal}}async function T(J,z){let{signal:Q,cleanup:$}=Dz();try{let X=await fetch(`${Nz()}${J}`,{body:JSON.stringify(z),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!X.ok)throw new N("toolbox_tron_trongrid_api_error",{message:`${X.status} ${X.statusText} on ${J}`});return await X.json()}finally{$()}}async function Rz(J,z){let{signal:Q,cleanup:$}=Dz();try{let X=await fetch(`${z??Nz()}${J}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!X.ok)throw new N("toolbox_tron_trongrid_api_error",{message:`${X.status} ${X.statusText} on ${J}`});return await X.json()}finally{$()}}async function l(J){if(!R(J))throw new N("toolbox_tron_trongrid_api_error",{address:J,message:"Invalid address"});try{let z=await Rz(`/v1/accounts/${J}`,Lz);if(!(z.success&&z.data)||z.data.length===0)return;let Q;try{Q=kz(J).toLowerCase()}catch{Q=J.toLowerCase()}let $=z.data.find((X)=>X.address.toLowerCase()===Q);if(!$)return;return{balance:$.balance,trc20:$.trc20||[]}}catch(z){if(z instanceof N)throw z;throw new N("toolbox_tron_trongrid_api_error",{address:J,message:z instanceof Error?z.message:"Unknown error"})}}async function Fz({from:J,to:z,amount:Q}){let X=await T("/wallet/createtransaction",{amount:Q,owner_address:J,to_address:z,visible:!0});if(!X.txID||!X.raw_data_hex||!X.raw_data)throw new N("toolbox_tron_transaction_creation_failed");let O=X.raw_data?.contract?.[0]?.parameter?.value;if(O?.to_address!==z||O?.owner_address!==J||O?.amount!==Q)throw new N("toolbox_tron_transaction_creation_failed");return f(X),X}async function Bz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$,feeLimit:X,callValue:q=0}){let O=await T("/wallet/triggersmartcontract",{call_value:q,contract_address:z,fee_limit:X,function_selector:Q,owner_address:J,parameter:$,visible:!0});if(!O.result.result||!O.transaction?.txID||!O.transaction?.raw_data_hex)throw new N("toolbox_tron_transaction_creation_failed");let K=O.transaction.raw_data?.contract?.[0]?.parameter?.value;if(K?.contract_address!==z||K?.owner_address!==J)throw new N("toolbox_tron_transaction_creation_failed");return f(O.transaction),O.transaction}function Sz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$}){return T("/wallet/triggerconstantcontract",{contract_address:z,function_selector:Q,owner_address:J,parameter:$,visible:!0})}function MJ({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$}){return T("/wallet/estimateenergy",{contract_address:z,function_selector:Q,owner_address:J,parameter:$,visible:!0})}function Pz(J){let z=typeof J==="number"?J:typeof J==="string"?Number(J):Number.NaN;return Number.isFinite(z)&&z>0?z:void 0}async function b(J){try{let{result:z,txid:Q}=await T("/wallet/broadcasttransaction",{raw_data:J.raw_data,raw_data_hex:J.raw_data_hex,signature:J.signature,txID:J.txID,visible:J.visible});if(!z||!Q)throw new N("toolbox_tron_token_transfer_failed");return Q}catch(z){throw new N("toolbox_tron_broadcast_failed",{error:z})}}async function w(){let J={};try{let{chainParameter:z}=await Rz("/wallet/getchainparameters");for(let Q of z)J[Q.key]=Q.value}catch(z){u({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${z instanceof Error?z.message:z}`})}return{bandwidthFee:J.getTransactionFee??YJ,createAccountFee:J.getCreateNewAccountFeeInSystemContract??J.getCreateAccountFee??XJ,energyFee:J.getEnergyFee??jJ,memoFee:J.getMemoFee??qJ}}async function d(J){try{let z=await T("/wallet/getaccountresource",{address:J,visible:!0});return{bandwidth:{free:(z.freeNetLimit??600)-(z.freeNetUsed??0),total:z.NetLimit??0,used:z.NetUsed??0},energy:{total:z.EnergyLimit??0,used:z.EnergyUsed??0}}}catch(z){return u({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${z instanceof Error?z.message:z}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function g(J){try{let z=await T("/wallet/getaccount",{address:J,visible:!0});return z&&Object.keys(z).length>0}catch{return!1}}async function n(J){try{let z=await MJ({...J,ownerAddress:J.sender}),Q=z.energy_required??z.energyRequired;if(z.result&&!z.result.result)throw new N("toolbox_tron_trongrid_api_error",{message:z.result.message||"estimateenergy failed"});if(Q!==void 0){let $=Pz(Q);if($!==void 0)return $;throw new N("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(z){u({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${z instanceof Error?z.message:z}`})}try{let{energy_used:z}=await Sz({...J,ownerAddress:J.sender}),Q=Pz(z);if(Q!==void 0)return Q;throw new N("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(z){throw u({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${z instanceof Error?z.message:z}`}),new N("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${z instanceof Error?z.message:z}`})}}async function _z({assetAddress:J,owner:z,spender:Q}){let $=v([{type:"address",value:z},{type:"address",value:Q}]),q=(await Sz({contractAddress:J,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:$})).constant_result?.[0];if(!q)return 0n;try{return BigInt(`0x${q}`)}catch{return 0n}}var HJ=R,Vz=268,Iz=65000,a=25000,fz=345,r="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",KJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";function gz({phrase:J,derivationPath:z}){let Q=OJ.fromMasterSeed(CJ(J)).derive(z);if(!Q.privateKey)throw new U("toolbox_tron_no_signer");return WJ(Q.privateKey)}function PJ(J,z){return{...J,value:String(z)}}function LJ(J,z){if(!z)return J;return{...J,data:z.startsWith("0x")?z:`0x${z}`}}function NJ({phrase:J,derivationPath:z,index:Q}){let $=z||xz(wz(bz[D.Tron],{index:Q||0}));return gz({derivationPath:$,phrase:J})}function DJ({phrase:J,derivationPath:z}){let Q=gz({derivationPath:z,phrase:J}),$=Uz(Q);return{getAddress:()=>Promise.resolve($),signTransaction:(X)=>{f(X);let q=Hz({privateKey:Q,txID:X.txID});return Promise.resolve({...X,signature:[q]})}}}function vz({transaction:J,memo:z,expiration:Q,feeLimit:$}){let X={},q={};if($!==void 0&&J.raw_data)X.fee_limit=$,q.fee_limit=$;if(z){let K=z.startsWith("0x")?z.replace(/^0x/,""):Kz(z);X.data=K,q.data=K}if(Q){let K=J.raw_data.expiration+Q*1000;X.expiration=K,q.expiration=K}if(Object.keys(X).length===0)return J;let{raw_data_hex:O,txID:P}=Gz(J.raw_data_hex,X);return{...J,raw_data:{...J.raw_data,...q},raw_data_hex:O,txID:P}}function RJ(J={}){let z="index"in J?J.index||0:0,Q=xz("derivationPath"in J&&J.derivationPath?J.derivationPath:wz(bz[D.Tron],{index:z})),$,X=!1;function q(){if(X)return Promise.resolve($);return $=UJ(J).with({phrase:t.string},({phrase:Z})=>DJ({derivationPath:Q,phrase:Z})).with({signer:t.not(t.nullish)},({signer:Z})=>Z).otherwise(()=>{return}),X=!0,Promise.resolve($)}async function O(){let Z=await q();if(!Z)throw new U("toolbox_tron_no_signer");return Z.getAddress()}async function P(Z,Y){let G=Z||Iz,j=Y??(await w()).energyFee,M=G*j,W=Math.ceil(M*1.5);return Math.min(Math.max(W,1e7),150000000)}async function K({contractAddress:Z,functionSelector:Y,parameter:G,sender:j,memo:M,expiration:W,extraEnergy:C=0}){let k=await n({contractAddress:Z,functionSelector:Y,parameter:G,sender:j}),H=await P(k+C),L=await Bz({contractAddress:Z,feeLimit:H,functionSelector:Y,ownerAddress:j,parameter:G});return vz({expiration:W,feeLimit:H,memo:M,transaction:L})}async function B(Z){if(!R(Z))return[F.from({chain:D.Tron})];try{let Y=await l(Z);if(!Y)return[F.from({chain:D.Tron})];let G=[F.from({chain:D.Tron,fromBaseDecimal:6,value:String(Y.balance)})],j=Y.trc20?.find((M)=>(r in M));if(j){let M=j[r];G.push(F.from({asset:`TRON.USDT-${r}`,fromBaseDecimal:6,value:M}))}return G}catch(Y){return Tz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${Y instanceof Error?Y.message:Y}`}),[F.from({chain:D.Tron})]}}async function c({recipient:Z,assetValue:Y,memo:G,expiration:j,sweep:M}){if(!R(Z))throw new U("toolbox_tron_token_transfer_failed",{message:"invalid address"});let W=await q();if(!W)throw new U("toolbox_tron_no_signer");try{let C=await O(),k=await Jz({assetValue:Y,expiration:j,memo:G,recipient:Z,sender:C,sweep:M}),H=await W.signTransaction(k),L=await b(H);if(!L)throw new U("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(C){if(C instanceof U&&C.errorKey==="toolbox_sweep_amount_too_low")throw C;throw new U("toolbox_tron_token_transfer_failed",{message:C instanceof Error?C.message:String(C)})}}function s({requiredBandwidth:Z,resources:Y,feePerUnit:G}){let j=Math.max(0,Y.free+Y.total-Y.used);return Z>j?(Z-j)*G:0}async function e({memo:Z,recipient:Y,senderAddress:G}){let[j,M,W]=await Promise.all([w(),g(Y),d(G)]),C=M?0:j.createAccountFee,k=s({feePerUnit:j.bandwidthFee,requiredBandwidth:Vz,resources:W.bandwidth}),H=Z?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:p.TRON,value:C+k+H})}async function zz({assetValue:Z,amountInBaseUnits:Y=Z.getBaseValue("string"),memo:G,recipient:j,senderAddress:M}){let W=Z.address;if(!W)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Z.toString()});let[C,k,H,L]=await Promise.all([w(),g(j),d(M),n({contractAddress:W,functionSelector:"transfer(address,uint256)",parameter:v([{type:"address",value:j},{type:"uint256",value:Y}]),sender:M})]),_=L+(k?0:a),o=s({feePerUnit:C.bandwidthFee,requiredBandwidth:fz,resources:H.bandwidth}),$z=Math.max(0,H.energy.total-H.energy.used),pz=_>$z?(_-$z)*C.energyFee:0,cz=G?C.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:p.TRON,value:o+pz+cz})}async function yz({assetValue:Z,memo:Y,recipient:G}){let[j,M]=await Promise.all([w(),g(G)]);if(Z.isGasAsset){let H=M?0:j.createAccountFee,L=Y?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:p.TRON,value:H+Vz*j.bandwidthFee+L})}let C=await P(Iz+(M?0:a),j.energyFee),k=Y?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:p.TRON,value:C+fz*j.bandwidthFee+k})}async function hz({assetValue:Z,memo:Y,recipient:G,sender:j}){let M=await q();try{let W=j?j:M?await O():void 0;if(!W)return yz({assetValue:Z,memo:Y,recipient:G});return Z.isGasAsset?e({memo:Y,recipient:G,senderAddress:W}):zz({assetValue:Z,memo:Y,recipient:G,senderAddress:W})}catch(W){throw Tz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${W instanceof Error?W.message:W}`}),new U("toolbox_fee_estimation_failed",{chain:D.Tron,error:W})}}async function Az({assetValue:Z,memo:Y,recipient:G,sender:j,sweep:M}){if(!M)return Z.getBaseValue("bigint");let[W,C]=await Promise.all([l(j),e({memo:Y,recipient:G,senderAddress:j})]),k=BigInt(W?.balance??0)-C.getBaseValue("bigint");if(k<=0n)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{amount:k.toString(),asset:Z.toString()}});return k}async function Ez({assetValue:Z,memo:Y,recipient:G,sender:j,sweep:M}){if(!M)return Z.getBaseValue("string");let W=Z.address;if(!W)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Z.toString()});let C=await l(j),H=C?.trc20.find((o)=>(W in o))?.[W]??"0";if(BigInt(H)<=0n)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{asset:Z.toString(),balance:H}});let L=await zz({amountInBaseUnits:H,assetValue:Z,memo:Y,recipient:G,senderAddress:j}),S=BigInt(C?.balance??0),_=L.getBaseValue("bigint");if(S<_)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{asset:Z.toString(),nativeBalance:S.toString(),requiredNativeFee:_.toString()}});return H}async function Jz({recipient:Z,assetValue:Y,memo:G,sender:j,expiration:M,sweep:W,recipientExists:C}){if(!R(Z)||!R(j))throw new U("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(Y.isGasAsset){let S=await Az({assetValue:Y,expiration:M,memo:G,recipient:Z,sender:j,sweep:W});if(S>BigInt(Number.MAX_SAFE_INTEGER))throw new U({errorKey:"toolbox_tron_transaction_creation_failed",info:{amount:S.toString(),reason:`Native transfer amount exceeds the safe integer limit of ${Number.MAX_SAFE_INTEGER} SUN`}});let _=await Fz({amount:Number(S),from:j,to:Z});return vz({expiration:M,memo:G,transaction:_})}let k=Y.address;if(!k)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let H=await Ez({assetValue:Y,expiration:M,memo:G,recipient:Z,sender:j,sweep:W}),L=C??await g(Z);return K({contractAddress:k,expiration:M,extraEnergy:L?0:a,functionSelector:"transfer(address,uint256)",memo:G,parameter:v([{type:"address",value:Z},{type:"uint256",value:H}]),sender:j})}async function Qz(Z){f(Z);let Y=await q();if(!Y)throw new U("toolbox_tron_no_signer");return Y.signTransaction(Z)}async function mz(Z){let Y=await Qz(Z);return b(Y)}function Zz({assetAddress:Z,spenderAddress:Y,from:G}){return _z({assetAddress:Z,owner:G,spender:Y})}async function uz({assetAddress:Z,spenderAddress:Y,from:G,amount:j}){let M=await Zz({assetAddress:Z,from:G,spenderAddress:Y});if(!j)return M>0n;return M>=BigInt(j)}async function lz({assetAddress:Z,spenderAddress:Y,amount:G,from:j}){if(!R(Z)||!R(Y))throw new U("toolbox_tron_approve_failed");let M=await q();if(!M)throw new U("toolbox_tron_no_signer");let W=j||await O(),C=G!==void 0?BigInt(G).toString():KJ;try{let k=await K({contractAddress:Z,functionSelector:"approve(address,uint256)",parameter:v([{type:"address",value:Y},{type:"uint256",value:C}]),sender:W}),H=await M.signTransaction(k),L=await b(H);if(!L)throw new U("toolbox_tron_approve_failed");return L}catch(k){if(k instanceof U)throw k;throw new U("toolbox_tron_approve_failed",{error:k})}}return{approve:lz,broadcastTransaction:b,createTransaction:Jz,estimateTransactionFee:hz,getAddress:O,getApprovedAmount:Zz,getBalance:B,getRpcUrl:()=>kJ(D.Tron),isApproved:uz,signAndBroadcastTransaction:mz,signTransaction:Qz,transfer:c,validateAddress:R}}export{PJ as withTronTransactionValue,LJ as withTronTransactionData,HJ as validateTronAddress,RJ as getTronToolbox,NJ as getTronPrivateKeyFromMnemonic};
@@ -1 +1 @@
1
- import{ea as j2,fa as M2}from"../../chunk-nvfkjbyq.js";import"../../chunk-xbdjxeqd.js";import{NetworkDerivationPath as p2}from"@swapkit/helpers";function K(X,$){if(!Number.isInteger($)||$<0)throw RangeError(`${X} must be a non-negative integer, got: ${$}`)}function n({accountIndex:X,chain:$,derivationPath:J}){if(X!==void 0)K("accountIndex",X);let j=[...J?.slice(0,3)??p2[$].slice(0,3)];if(X!==void 0)j[2]=X;return j}function MX({accountIndex:X,change:$=!1,chain:J,derivationPath:j,index:Q}){return K("index",Q),[...n({accountIndex:X,chain:J,derivationPath:j}),Number($),Q]}function ZX(X){return X[2]??0}function d2({deriveAddress:X,getBalance:$,getUtxos:J}){async function j(Y){let{accountIndex:q,count:G,startIndex:W=0,change:U=!1}=Y;if(K("count",G),G<1)throw RangeError("count must be at least 1");K("startIndex",W);let z=[];for(let _=0;_<G;_++){let N=await X({accountIndex:q,change:U,index:W+_});if(N)z.push(N)}return z}async function Q(Y){let{gapLimit:q=20,change:G=!1}=Y??{},W=[],U=0,z=0;while(U<q){let _=await X({change:G,index:z});if(!_)break;if((await $(_.address)).some((D)=>D.getValue("number")>0))W.push(_),U=0;else U++;z++}return W}async function Z(Y=20){let[q,G]=await Promise.all([Q({change:!1,gapLimit:Y}),Q({change:!0,gapLimit:Y})]),W=[...q,...G],U=await Promise.all(W.map(async(_)=>{let H=(await $(_.address)).reduce((D,V)=>D+V.getValue("number"),0);return{..._,balance:H}})),z=U.reduce((_,N)=>_+N.balance,0);return{addresses:U,total:z}}async function L(Y=20){let[q,G]=await Promise.all([Q({change:!1,gapLimit:Y}),Q({change:!0,gapLimit:Y})]),W=[...q,...G];return(await Promise.all(W.map(async(z)=>{return(await J(z.address)).map((N)=>({...N,address:z.address,derivationIndex:z.index,isChange:z.change}))}))).flat()}return{deriveAddresses:j,getAggregatedBalance:Z,getAggregatedUtxos:L,scanForAddresses:Q}}import{Chain as P,getRPCUrl as r2,RequestClient as RX,SKConfig as n2,SwapKitError as v,warnOnce as i2}from"@swapkit/helpers";import{NETWORKS as GX}from"@swapkit/utxo-signer";async function s2({chain:X,txHash:$}){let J=`${YX(X)}/push/transaction`,j=JSON.stringify({data:$});try{let Q=await RX.post(J,{body:j,headers:{"Content-Type":"application/json"}});if(Q.context.code!==200)throw new v("toolbox_utxo_broadcast_failed",{error:Q.context.error||"Transaction broadcast failed"});return Q.data?.transaction_hash||$}catch(Q){let Z=await r2(X);if(Z){let L=JSON.stringify({id:j2(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),Y=await RX.post(Z,{body:L,headers:{"Content-Type":"application/json"}});if(Y.error)throw new v("toolbox_utxo_broadcast_failed",{error:Y.error?.message});if(Y.result.includes('"code":-26'))throw new v("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return Y.result}throw Q}}function YX(X){return`https://api.blockchair.com/${a2(X)}`}function $2(X){switch(X){case P.Bitcoin:return 5;case P.Dogecoin:return 1e4;case P.Litecoin:return 1;case P.Zcash:return 1;default:return 2}}function a2(X){switch(X){case P.BitcoinCash:return"bitcoin-cash";case P.Litecoin:return"litecoin";case P.Dash:return"dash";case P.Dogecoin:return"dogecoin";case P.Zcash:return"zcash";case P.Polkadot:return"polkadot";default:return"bitcoin"}}async function t2(X){try{let{feePerKb:$}=await RX.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,$2(X))}catch{return $2(X)}}async function DX(X,$){let J=await RX.get(`${X}${$?`${X.includes("?")?"&":"?"}key=${$}`:""}`);if(!J||J.context.code!==200)throw new v("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}async function e2({chain:X,apiKey:$}){let J=await DX(`${YX(X)}/stats`,$);if(typeof J.best_block_height!=="number")throw new v("toolbox_utxo_api_error",{error:"Missing best_block_height in stats response"});return J.best_block_height}async function Q2({address:X,chain:$,apiKey:J}){if(!X)throw new v("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await DX(`${YX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function X0({address:X,chain:$,apiKey:J}){return(await Q2({address:X,apiKey:J,chain:$}))?.address.balance||0}async function Z2({chain:X,apiKey:$,txHash:J}){if(!J)throw new v("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await DX(`${YX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(j){let Q=j instanceof Error?j.message:String(j);return console.error(`Failed to fetch raw transaction: ${Q}`),""}}var $0=4294967294;async function J0({chain:X,apiKey:$,txHash:J}){if(!J)throw new v("toolbox_utxo_invalid_params",{error:"TxHash is required"});let Q=(await DX(`${YX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!Q)throw new v("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:Z,inputs:L,outputs:Y}=Q,q=L.map((W)=>W.spending_sequence),G=Z.is_rbf===!0||q.some((W)=>W<$0);return{blockId:Z.block_id,confirmed:Z.block_id!==-1,fee:Z.fee,inputs:L,isRBF:G,outputs:Y,sequences:q,size:Z.size,txid:Z.hash,weight:Z.weight}}async function j0({chain:X,address:$,apiKey:J,offset:j=0,limit:Q=30}){return(await DX(`${YX(X)}/outputs?q=recipient(${$}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${j}`,J)).map(({is_spent:q,script_hex:G,block_id:W,transaction_hash:U,index:z,value:_,spending_signature_hex:N})=>({hash:U,index:z,is_confirmed:W!==-1,is_spent:q,script_hex:G,txHex:N,value:_}))}function Q0(X){return X.reduce(($,J)=>$+J.value,0)}function J2(X,$){let J=[...X].sort((j,Q)=>Q.value-j.value);if($){let j=[],Q=0;for(let Z of J)if(j.push(Z),Q+=Z.value,Q>=$)break;return j}return J}async function G2({chain:X,address:$,apiKey:J,targetValue:j,accumulativeValue:Q=0,offset:Z=0,limit:L=30}){if(!$)throw new v("toolbox_utxo_invalid_params",{error:"Address is required"});try{let Y=await j0({address:$,apiKey:J,chain:X,limit:L,offset:Z,targetValue:j}),G=Y.length<L,W=Y.filter(({is_spent:D})=>!D),U=Q0(W),z=Q+U,_=j&&z>=j;if(G||_)return J2(W,j);let N=await G2({accumulativeValue:z,address:$,apiKey:J,chain:X,limit:L,offset:Z+L,targetValue:j}),H=[...W,...N];return J2(H,j)}catch(Y){let q=Y instanceof Error?Y.message:String(Y);return console.error(`Failed to fetch unspent UTXOs: ${q}`),[]}}async function Z0({address:X,chain:$,apiKey:J,fetchTxHex:j=!0,targetValue:Q}){let Z=await G2({address:X,apiKey:J,chain:$,targetValue:Q}),L=[];for(let{hash:Y,index:q,script_hex:G,value:W}of Z){let U;if(j)U=await Z2({apiKey:J,chain:$,txHash:Y});L.push({address:X,hash:Y,index:q,txHex:U,value:W,witnessUtxo:{script:Buffer.from(G,"hex"),value:W}})}return L}function I(X){let $=n2.get("apiKeys").blockchair||"";return i2({condition:!$,id:"no_blockchair_api_key_warning",warning:"No Blockchair API key found. Functionality will be limited."}),{broadcastTx:(J)=>s2({chain:X,txHash:J}),getAddressData:(J)=>Q2({address:J,apiKey:$,chain:X}),getBalance:(J)=>X0({address:J,apiKey:$,chain:X}),getBlockHeight:()=>e2({apiKey:$,chain:X}),getRawTx:(J)=>Z2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>t2(X),getTransactionDetails:(J)=>J0({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>Z0({...J,apiKey:$,chain:X})}}function E1(X){return X}function R1(){return function($){switch($){case P.Bitcoin:return GX.bitcoin;case P.BitcoinCash:return GX.bitcoinCash;case P.Dash:return GX.dash;case P.Litecoin:return GX.litecoin;case P.Dogecoin:return GX.dogecoin;case P.Zcash:return GX.zcash;default:throw new v("toolbox_utxo_not_supported",{chain:$})}}}import{sha256 as U0}from"@noble/hashes/sha2.js";import{createBase58check as _0}from"@scure/base";import{SwapKitError as q2}from"@swapkit/helpers";import{CashAddrType as AX,decodeCashAddr as G0,encodeCashAddr as Y0}from"@swapkit/utxo-signer";var q0={P2PKH:AX.P2PKH,P2SH:AX.P2SH},L0={[AX.P2PKH]:"P2PKH",[AX.P2SH]:"P2SH"};function z0(X,$,J){return Y0({hash:J,prefix:X,type:q0[$]})}function W0(X){let $=G0(X),J=L0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var hX={decode:W0,encode:z0};var L2=_0(U0);var z2;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(z2||={});var i={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function W2(X){try{return vX(X),!0}catch{return!1}}function U2(X){return vX(X)?.network}function c(X){let $=vX(X);if($?.format==="legacy")return X;return M0($)}function yX(X){let $=vX(X);return D0($)}function vX(X){try{let $=N0(X);if($)return $}catch{}try{let $=B0(X);if($)return $}catch{}throw new q2("toolbox_utxo_invalid_address",{address:X})}function N0(X){try{let $=L2.decode(X);if($.length!==21)throw new q2("toolbox_utxo_invalid_address",{address:X});let J=$[0],j=Array.prototype.slice.call($,1);switch(J){case i.legacy.mainnet.p2pkh:return{format:"legacy",hash:j,network:"mainnet",type:"p2pkh"};case i.legacy.mainnet.p2sh:return{format:"legacy",hash:j,network:"mainnet",type:"p2sh"};case i.legacy.testnet.p2pkh:return{format:"legacy",hash:j,network:"testnet",type:"p2pkh"};case i.legacy.testnet.p2sh:return{format:"legacy",hash:j,network:"testnet",type:"p2sh"};case i.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2pkh"};case i.bitpay.mainnet.p2sh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function B0(X){if(X.indexOf(":")!==-1)try{return Y2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return Y2(`${J}:${X}`)}catch{}}return}function Y2(X){try{let{hash:$,prefix:J,type:j}=hX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:j==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function M0(X){let $=i.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),L2.encode(J)}function D0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",j=new Uint8Array(X.hash);return hX.encode($,J,j)}import{Chain as a,SwapKitError as dX}from"@swapkit/helpers";import{SwapKitError as H0}from"@swapkit/helpers";import{Script as C0}from"@swapkit/utxo-signer";var h1=1000,cX=10,uX=2,O0=10,b0=41,k0=107;function y(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return C0.encode(["RETURN",$])}var pX;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(pX||={});var oX={["P2PKH"]:148,["P2WPKH"]:68},SX={["P2PKH"]:34,["P2WPKH"]:31},HX=(X)=>{if(X.startsWith("bc1")||X.startsWith("tb1")||X.startsWith("ltc1")||X.startsWith("tltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("m")||X.startsWith("n")||X.startsWith("bitcoincash:q")||X.startsWith("bitcoincash:p")||X.startsWith("q")||X.startsWith("p")||X.startsWith("L")||X.startsWith("M")||X.startsWith("3")||X.startsWith("D")||X.startsWith("A")||X.startsWith("9")||X.startsWith("X")||X.startsWith("7")||X.startsWith("y")||X.startsWith("t1")||X.startsWith("t3")||X.startsWith("tm"))return"P2PKH";throw new H0("toolbox_utxo_invalid_address",{address:X})},qX=({inputs:X,outputs:$,feeRate:J})=>{let j=X[0]&&"address"in X[0]&&X[0].address?HX(X[0].address):"P2PKH",Z=(J?X.filter((G)=>G.value>=oX["type"in G&&G.type?G.type:"P2PKH"]*Math.ceil(J)):X).reduce((G,W)=>G+s(W),0),L=$?.reduce((G,W)=>G+wX(W),0)||SX[j],Y=cX+Z+L;return j==="P2WPKH"?Math.ceil(Y+uX/4):Y},s=(X)=>{if("type"in X&&X.type)return oX[X.type];if("address"in X&&X.address)return oX[HX(X.address)];return b0+k0},wX=(X,$)=>{if(X?.script)return O0+X.script.length+(X.script.length>=74?2:1);if($)return SX[$];if("address"in X&&X.address)return SX[HX(X.address)];return SX.P2PKH};function CX(X){switch(X){case a.Bitcoin:case a.BitcoinCash:return 550;case a.Dash:case a.Litecoin:return 5500;case a.Dogecoin:return 1e5;case a.Zcash:return 546;default:throw new dX("toolbox_utxo_not_supported",{chain:X})}}function S({inputs:X,outputs:$,feeRate:J=1,chain:j=a.Bitcoin,changeAddress:Q="",sweep:Z=!1}){let L=CX(j),Y=X.filter((D)=>{let V=s(D)*J;return Z?D.value>Math.max(V,L):V<=D.value});if(Z){let D=Math.ceil(J*qX({inputs:Y,outputs:$})),V=Y.reduce((R,l)=>R+l.value,0),u=V-D;if(u<=L)throw new dX("toolbox_sweep_amount_too_low",{available:V,dustThreshold:L,fee:D});let p=$.findIndex((R)=>("address"in R)&&R.address);if(p===-1)throw new dX("toolbox_utxo_invalid_params",{error:"Sweep requires a recipient output"});return{fee:D,inputs:Y,outputs:$.map((R,l)=>l===p?{...R,value:u}:R)}}let W=(X[0]&&"address"in X[0]&&X[0].address?HX(X[0].address):"P2PKH")==="P2WPKH"?Math.ceil(uX/4):0,U=cX+W+$.reduce((D,V)=>D+wX(V),0),z=$.reduce((D,V)=>D+V.value,0),_=U*J,N=0,H=[];for(let D of Y){let V=s(D),u=J*V;_+=u,N+=D.value,H.push(D);let p=_+z;if(N<p)continue;let R=N-p,l=J*wX({address:Q,value:0});if(R>l){let IX=l+_,fX=N-(z+Math.ceil(IX));if(fX>Math.max(s({value:0})*J,CX(j)))return{fee:Math.ceil(IX),inputs:H,outputs:$.concat({address:Q,value:fX})}}return{fee:Math.ceil(_),inputs:H,outputs:$}}return{fee:Math.ceil(J*qX({inputs:X,outputs:$}))}}import{Chain as _X,SwapKitError as V1}from"@swapkit/helpers";import{hex as F2}from"@scure/base";import{Chain as x0,derivationPathToString as h0,FeeOption as o0,NetworkDerivationPath as c0,SwapKitError as h,updateDerivationPath as u0}from"@swapkit/helpers";import{BCHSigHash as p0,CashAddrPrefix as E2,CashAddrType as R2,encodeCashAddr as A2,NETWORKS as d0,p2pkh as y2,Transaction as v2}from"@swapkit/utxo-signer";import{secp256k1 as V0}from"@noble/curves/secp256k1.js";import{hex as e}from"@scure/base";import{HDKey as D2}from"@scure/bip32";import{mnemonicToSeedSync as iX}from"@scure/bip39";import{AssetValue as rX,applyFeeMultiplier as _2,Chain as f,derivationPathToString as bX,FeeOption as m,NetworkDerivationPath as H2,SwapKitError as k,SwapKitNumber as I0,updateDerivationPath as f0,warnOnce as P0}from"@swapkit/helpers";import{Address as T0,BCHSigHash as sX,CashAddrPrefix as F0,CashAddrType as E0,encodeCashAddr as R0,NETWORKS as zX,p2pkh as N2,p2wpkh as A0,RBF_SEQUENCE as y0,SigHash as C2,Transaction as nX,WIF as O2}from"@swapkit/utxo-signer";import{match as b2}from"ts-pattern";import{validateZcashAddress as OX}from"@swapkit/utxo-signer";function LX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function t(X){let $=LX(X);return W2($)&&U2($)==="mainnet"}var mX=[f.Dash,f.Dogecoin,f.Zcash,f.BitcoinCash],KX=[f.Bitcoin];function k2({address:X,chain:$}){return b2($).with(f.BitcoinCash,()=>t(X)).with(f.Zcash,()=>OX(X)).otherwise(()=>{try{return T0(F($)).decode(X),!0}catch{return!1}})}function F(X){return b2(X).with(f.Bitcoin,()=>zX.bitcoin).with(f.BitcoinCash,()=>zX.bitcoinCash).with(f.Dash,()=>zX.dash).with(f.Dogecoin,()=>zX.dogecoin).with(f.Litecoin,()=>zX.litecoin).with(f.Zcash,()=>zX.zcash).exhaustive()}function v0({phrase:X,derivationPath:$,network:J,seed:j}){let Q=j??iX(X),L=D2.fromMasterSeed(Q,J.bip32).derive($);if(!L.privateKey)throw new k("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return L.privateKey}function B2(X){return V0.getPublicKey(X,!0)}function kX({publicKey:X,chain:$,network:J}){if($===f.BitcoinCash){let Z=N2(X,J);if(!Z.hash)throw new k("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return R0({hash:Z.hash,prefix:F0.MAINNET,type:E0.P2PKH}).replace(/^bitcoincash:/,"")}let Q=!mX.includes($)?A0(X,J):N2(X,J);if(!Q.address)throw new k("toolbox_utxo_invalid_address",{error:"Could not derive address"});return Q.address}function WX({phrase:X,derivationPath:$,chain:J,wif:j,seed:Q}){let Z=F(J);if(j){let G=O2(Z).decode(j),W=B2(G);return{privateKey:G,publicKey:W}}if(!X)throw new k("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let L=$||bX(H2[J]),Y=v0({derivationPath:L,network:Z,phrase:X,seed:Q}),q=B2(Y);return{privateKey:Y,publicKey:q}}function S0(X,$){return O2(F($)).encode(X)}function w0({phrase:X,derivationPath:$,chain:J,seed:j}){let Q=$.split("/");if(Q.length<4)throw new k("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${Q.length}): ${$}`});let Z=F(J),L=j??iX(X),Y=D2.fromMasterSeed(L,Z.bip32),q=Q.slice(0,4).join("/");return Y.derive(q)}function XX({inputs:X,outputs:$,chain:J,tx:j,sender:Q,compiledMemo:Z,enableRBF:L=!1}){let Y=F(J),q=!mX.includes(J),G=L?y0:void 0,W=new Set;for(let U of X){let z=`${U.hash}:${U.index}`;if(W.has(z))throw new k("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});W.add(z);let _=typeof U.hash==="string"?e.decode(U.hash):U.hash;if(q&&U.witnessUtxo)j.addInput({index:U.index,sequence:G,txid:_,witnessUtxo:{amount:BigInt(U.witnessUtxo.value),script:U.witnessUtxo.script}});else if(U.txHex)j.addInput({index:U.index,nonWitnessUtxo:e.decode(U.txHex),sequence:G,txid:_,...J===f.BitcoinCash?{sighashType:sX.ALL}:{}});else throw new k("toolbox_utxo_invalid_params",{error:"Input requires either witnessUtxo or txHex for non-segwit chains"})}for(let U of $){let z="address"in U&&U.address?U.address:Q;if(J===f.BitcoinCash)z=c(z);if(U.script){if(Z)j.addOutput({amount:0n,script:Z})}else j.addOutputAddress(z,BigInt(U.value),Y)}return{inputs:X,tx:j}}async function UX(X){let $=await I(X).getSuggestedTxFee();return{[m.Average]:$,[m.Fast]:_2($,m.Fast),[m.Fastest]:_2($,m.Fastest)}}async function V2({assetValue:X,recipient:$,memo:J,sender:j,sweep:Q,fetchTxHex:Z=!1}){let L=X.chain,Y=Z||mX.includes(L),q=X.getBaseValue("number"),G=Q?void 0:Math.ceil(q+(await UX(L))[m.Fastest]*5000);return{inputs:await I(L).getUtxos({address:j,fetchTxHex:Y,targetValue:G}),outputs:[{address:$,value:Q?0:q},...J?[{address:"",script:y(J),value:0}]:[]]}}async function I2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,fetchTxHex:Z=!1,enableRBF:L=!1,sweep:Y}){let q=X.chain,G=J?y(J):null,W=await V2({assetValue:X,fetchTxHex:Z,memo:J,recipient:$,sender:Q,sweep:Y}),{inputs:U,outputs:z}=S({...W,chain:q,feeRate:j,sweep:Y});if(!(U&&z))throw new k("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new nX({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:N,tx:H}=XX({chain:q,compiledMemo:G,enableRBF:L,inputs:U,outputs:z,sender:Q,tx:_});return{inputs:N,tx:H,utxos:W.inputs}}async function f2({assetValue:X,feeOptionKey:$=m.Fast,feeRate:J,memo:j,sender:Q,recipient:Z,sweep:L}){let Y=X.chain,q=await V2({assetValue:X,memo:j,recipient:Z,sender:Q,sweep:L}),G=J?Math.floor(J):(await UX(Y))[$];return S({...q,chain:Y,feeRate:G,sweep:L})}function K0(X){return async function({from:J,memo:j,feeRate:Q,feeOptionKey:Z=m.Fast,recipient:L=J,recipients:Y=1}){let q=Q??(await UX(X))[Z],W=(await I(X).getUtxos({address:J,fetchTxHex:!1})).filter((H)=>H.value>Math.max(CX(X),s(H)*q));if(!W.length)return rX.from({chain:X});let U=typeof Y==="number"?Math.max(Y,1):Y.length,z=typeof Y==="number"||U===0?Array.from({length:U||1},()=>({address:L,value:0})):[...Y];if(j)z.push({address:J,script:y(j),value:0});let{outputs:_}=S({chain:X,feeRate:q,inputs:W,outputs:z,sweep:!0}),N=_?.[0]?.value??0;return rX.from({chain:X,value:BigInt(N)})}}function m0(X){return async function(J){let{fee:j}=await f2(J);return rX.from({chain:X,value:I0.fromBigInt(BigInt(j),8).getValue("string")})}}function g0({chain:X,phrase:$,derivationPath:J,seed:j}){let Q=F(X),{privateKey:Z,publicKey:L}=WX({chain:X,derivationPath:J,phrase:$,seed:j}),Y=X===f.BitcoinCash?[sX.ALL]:[C2.ALL];return{getAddress:()=>kX({chain:X,network:Q,publicKey:L}),privateKey:Z,publicKey:L,signTransaction:(q)=>{return q.sign(Z,Y),q}}}function l0(X,$){return async function({memo:j,recipient:Q,feeOptionKey:Z,feeRate:L,assetValue:Y,enableRBF:q=!1,sweep:G}){let W=await $?.getAddress();if(!($&&W))throw new k("toolbox_utxo_no_signer");if(!Q)throw new k("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});P0({condition:q&&!KX.includes(X),id:`rbf_not_supported_${X}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${X}. Transaction will be created without RBF signaling.`});let U=q&&KX.includes(X),z=L||(await UX(X))[Z||m.Fast],{tx:_}=await I2({assetValue:Y,enableRBF:U,feeRate:z,memo:j,recipient:Q,sender:W,sweep:G}),N=await $.signTransaction(_);return N.finalize(),I(X).broadcastTx(e.encode(N.extract()))}}function P2(X){return($)=>k2({address:$,chain:X})}function T2(X){let $=F(X);return function(j){if(!j)throw new k("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return kX({chain:X,network:$,publicKey:j.publicKey})}}function $X({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,j="index"in $?$.index||0:0,Q=J?iX(J):void 0,Z="derivationPath"in $&&$.derivationPath?$.derivationPath:f0(H2[X],{index:j}),L=bX(Z),Y=J?g0({chain:X,derivationPath:L,phrase:J,seed:Q}):void 0,q="signer"in $?$.signer:void 0,G=Y||q,W=J?WX({chain:X,derivationPath:L,phrase:J,seed:Q}):void 0;function U(){if(G)return G.getAddress();return Promise.resolve(void 0)}function z(B){if(!J)return;let M=n({accountIndex:B,chain:X,derivationPath:Z});return w0({chain:X,derivationPath:bX(M),phrase:J,seed:Q})}let _=z();function N(){if(!_)return;return _.publicExtendedKey}function H({accountIndex:B}={}){let M=B===void 0?_:z(B);if(!M)return;let C=n({accountIndex:B,chain:X,derivationPath:Z});return{accountIndex:ZX(C),path:bX(C),xpub:M.publicExtendedKey}}function D({accountIndex:B,index:M,change:C=!1}){let O=B===void 0?_:z(B);if(!O)return;let b=MX({accountIndex:B,chain:X,change:C,derivationPath:Z,index:M}),A=F(X),w=O.deriveChild(Number(C)).deriveChild(M);if(!w.publicKey)throw new k("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let E=kX({chain:X,network:A,publicKey:w.publicKey}),o=e.encode(w.publicKey);return{accountIndex:ZX(b),address:E,change:C,index:M,path:bX(b),pubkey:o}}async function V(B){if(!KX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let M=await I(X).getTransactionDetails(B);return{canReplace:M.isRBF&&!M.confirmed,confirmed:M.confirmed,enabled:M.isRBF,fee:M.fee,sequences:M.sequences,supported:!0}}async function u({txid:B,newFeeRate:M,recipient:C,memo:O}){if(!KX.includes(X))throw new k("toolbox_utxo_rbf_not_supported",{chain:X});let b=await I(X).getTransactionDetails(B);if(!b.isRBF)throw new k("toolbox_utxo_tx_not_replaceable",{txid:B});if(b.confirmed)throw new k("toolbox_utxo_tx_already_confirmed",{blockId:b.blockId,txid:B});let A=b.inputs.reduce((T,x)=>T+x.value,0),E=b.outputs.find((T)=>T.recipient===C)?.value||0;if(E===0)throw new k("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let o=await Promise.all(b.inputs.map(async(T)=>{let x=await I(X).getRawTx(T.transaction_hash);return{hash:T.transaction_hash,index:T.index,txHex:x,value:T.value,witnessUtxo:void 0}})),NX=O?y(O):null,PX=qX({feeRate:M,inputs:o.map((T)=>({...T,type:"P2WPKH"})),outputs:[{address:C,value:E}]}),d=Math.ceil(PX*M);if(d<=b.fee)throw new k("toolbox_utxo_rbf_fee_too_low",{newFee:d,originalFee:b.fee});let jX=d-b.fee,QX=E-jX;if(QX<=0)throw new k("toolbox_utxo_rbf_insufficient_change");let r=new nX({allowLegacyWitnessUtxo:!0,version:1}),TX=[{address:C,value:QX},...O?[{address:"",script:y(O),value:0}]:[]],FX=A-QX-d,BX=await U();if(FX>CX(X)&&BX)TX.push({address:BX,value:FX});return XX({chain:X,compiledMemo:NX,inputs:o,outputs:TX,sender:BX||C,tx:r}),{feeDelta:jX,newFee:d,originalFee:b.fee,tx:r}}async function p({txid:B,newFeeRate:M,recipient:C,memo:O}){let{tx:b,originalFee:A,newFee:w}=await u({memo:O,newFeeRate:M,recipient:C,txid:B}),E=await lX(b);E.finalize();let o=await I(X).broadcastTx(e.encode(E.extract()));return{newFee:w,originalFee:A,txid:o}}function R({accountIndex:B,index:M,change:C=!1}){K("index",M);let O=B===void 0?_:z(B);if(!O)return;return O.deriveChild(Number(C)).deriveChild(M).privateKey||void 0}function l({tx:B,inputDerivations:M}){if(!_)throw new k("toolbox_utxo_no_signer");let C=X===f.BitcoinCash?[sX.ALL]:[C2.ALL];for(let O=0;O<M.length;O++){let b=M[O];if(!b)continue;let{derivationIndex:A,isChange:w}=b,E=R({change:w,index:A});if(!E)throw new k("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${O} at index ${A}`});B.signIdx(E,O,C)}return B}async function IX({utxos:B,recipient:M,assetValue:C,memo:O,feeRate:b,feeOptionKey:A,changeAddress:w,sweep:E}){if(E)throw new k("toolbox_utxo_invalid_params",{error:"Sweep is not supported for transfers from multiple addresses"});if(!_)throw new k("toolbox_utxo_no_signer");let o=b||(await UX(X))[A||m.Fast],NX=O?y(O):null,PX=[{address:M,value:C.getBaseValue("number")}];if(NX)PX.push({address:"",script:NX,value:0});let d=B.map(({hash:T,index:x,value:EX,txHex:u2,witnessUtxo:xX})=>({hash:T,index:x,txHex:u2,value:EX,witnessUtxo:xX?{script:xX.script,value:xX.value}:void 0})),{inputs:jX,outputs:QX}=S({chain:X,feeRate:o,inputs:d,outputs:PX});if(!(jX&&QX))throw new k("toolbox_utxo_insufficient_balance",{assetValue:C,sender:"multiple addresses"});let r=new nX({allowLegacyWitnessUtxo:!0,version:1}),TX=B[0]?.address,FX=w||await U()||TX||M;XX({chain:X,compiledMemo:NX,inputs:jX,outputs:QX,sender:FX,tx:r});let BX=jX.map((T)=>{let x=B.find((EX)=>EX.hash===T.hash&&EX.index===T.index);return x?{derivationIndex:x.derivationIndex,isChange:x.isChange}:{derivationIndex:0,isChange:!1}});return l({inputDerivations:BX,tx:r}),r.finalize(),I(X).broadcastTx(e.encode(r.extract()))}function fX({address:B,gapLimit:M=20}){if(!_)return;for(let C=0;C<M;C++){let O=D({change:!1,index:C}),b=D({change:!0,index:C}),A=O?.address===B?!1:b?.address===B;if(O?.address===B||b?.address===B)return{change:A,index:C}}return}function lX(B){if(!G)throw new k("toolbox_utxo_no_signer");return G.signTransaction(B)}async function c2(B){let M=await lX(B);return M.finalize(),await I(X).broadcastTx(e.encode(M.extract()))}return{accumulative:S,broadcastTx:(B)=>I(X).broadcastTx(B),bumpFee:p,calculateTxSize:qX,createKeysForPath:(B)=>WX({...B,chain:X}),createReplacementTransaction:u,createTransaction:I2,deriveAddressAtIndex:D,derivePrivateKeyAtIndex:R,estimateMaxSendableAmount:K0(X),estimateTransactionFee:m0(X),getAddress:U,getAddressFromKeys:T2(X),getBalance:M2(X),getExtendedPublicKey:N,getExtendedPublicKeyInfo:H,getFeeRates:()=>UX(X),getInputsOutputsFee:f2,getNetworkForChain:()=>F(X),getPrivateKeyFromMnemonic:(B)=>S0(WX({...B,chain:X}).privateKey,X),isRBFEnabled:V,keys:W,resolveDerivationIndex:fX,signAndBroadcastTransaction:c2,signTransaction:lX,signTransactionWithMultipleKeys:l,transfer:l0(X,G),transferFromMultipleAddresses:IX,validateAddress:P2(X)}}var g=x0.BitcoinCash;function gX(X){return LX(yX(X))}function r0(X){let $=F(g);function J(Q){return Q.sign(X.privateKey,[p0.ALL]),Q}function j(){let Q=y2(X.publicKey,$);if(!Q.hash)throw new h("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let Z=A2({hash:Q.hash,prefix:E2.MAINNET,type:R2.P2PKH});return Promise.resolve(Z.replace(/^bitcoincash:/,""))}return{getAddress:j,signTransaction:J}}function S2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,j=h0("derivationPath"in X&&X.derivationPath?X.derivationPath:u0(c0[g],{index:J})),Q=$?WX({chain:g,derivationPath:j,phrase:$}):void 0,Z=Q?r0(Q):("signer"in X)?X.signer:void 0;function L(){return Promise.resolve(Z?.getAddress())}let{getBalance:Y,getFeeRates:q,broadcastTx:G,...W}=$X({chain:g});function U(N,H=!0){return Y(LX(yX(N)))}function z(N){if(!Z)throw new h("toolbox_utxo_no_signer");return Z.signTransaction(N)}async function _(N){let H=await z(N);return H.finalize(),await G(F2.encode(H.extract()))}return{...W,broadcastTx:G,buildTx:i0,createTransaction:w2,getAddress:L,getAddressFromKeys:s0,getBalance:U,getFeeRates:q,signAndBroadcastTransaction:_,signTransaction:z,stripPrefix:LX,stripToCashAddress:gX,transfer:n0({broadcastTx:G,getFeeRates:q,signer:Z}),validateAddress:t}}async function w2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,sweep:Z}){if(!t($))throw new h("toolbox_utxo_invalid_address",{address:$});let L=Math.ceil(X.getBaseValue("number")+j*7500),Y=await I(g).getUtxos({address:gX(Q),fetchTxHex:!0,targetValue:Z?void 0:L}),q=J?y(J):null,G=[],W=c($);if(G.push({address:W,value:Z?0:X.getBaseValue("number")}),q)G.push({script:q,value:0});let{inputs:U,outputs:z}=S({chain:g,feeRate:j,inputs:Y,outputs:G,sweep:Z});if(!(U&&z))throw new h("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new v2({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),N=c(Q),{inputs:H,tx:D}=XX({chain:g,compiledMemo:q,inputs:U,outputs:z.map((V)=>("address"in V)&&V.address?{...V,address:c(V.address)}:V),sender:N,tx:_});return{inputs:H,tx:D,utxos:U}}function n0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:Q,assetValue:Z,feeOptionKey:L=o0.Fast,sweep:Y,...q}){let G=await J?.getAddress();if(!(J&&G))throw new h("toolbox_utxo_no_signer");if(!Q)throw new h("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let W=q.feeRate||(await $())[L],{tx:U}=await w2({...q,assetValue:Z,feeRate:W,recipient:Q,sender:G,sweep:Y}),z=await J.signTransaction(U);return z.finalize(),X(F2.encode(z.extract()))}}async function i0({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){let Z=yX($);if(!t(Z))throw new h("toolbox_utxo_invalid_address",{address:Z});let L=Math.ceil(X.getBaseValue("number")+j*7500),Y=await I(g).getUtxos({address:gX(Q),fetchTxHex:!0,targetValue:L}),q=Number(j.toFixed(0)),G=J?y(J):null,W=[];if(W.push({address:c($),value:X.getBaseValue("number")}),G)W.push({script:G,value:0});let{inputs:U,outputs:z}=S({chain:g,feeRate:q,inputs:Y,outputs:W});if(!(U&&z))throw new h("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new v2({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:N,tx:H}=XX({chain:g,compiledMemo:G,inputs:U,outputs:z,sender:c(Q),tx:_});return{inputs:N,tx:H,utxos:Y}}function s0(X){let $=d0.bitcoinCash,J=y2(X.publicKey,$);if(!J.hash)throw new h("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return A2({hash:J.hash,prefix:E2.MAINNET,type:R2.P2PKH}).replace(/^bitcoincash:/,"")}import{createBase58check as a0,hex as t0}from"@scure/base";import{HDKey as l2}from"@scure/bip32";import{mnemonicToSeedSync as x2}from"@scure/bip39";import{Chain as VX,derivationPathToString as e0,FeeOption as X1,NetworkDerivationPath as $1,SKConfig as eX,SwapKitError as JX,updateDerivationPath as J1}from"@swapkit/helpers";import{Address as j1,createZcashTransaction as Q1,getZcashConsensusBranchId as Z1,isTransparentZcashAddress as K2,OutScript as G1,PCZT as Y1,utils as h2,WIF as q1,ZCASH_NETWORK as L1,ZCASH_TEST_NETWORK as z1,ZcashConsensusBranchId as m2,ZcashPSBT as W1,ZcashSigHash as aX,ZcashVersionGroupId as U1}from"@swapkit/utxo-signer";import{match as _1,P as tX}from"ts-pattern";function X2(){let{isStagenet:X}=eX.get("envs");return X?z1:L1}var N1=a0(h2.sha256);function B1(X){return N1.encode(X)}function M1({phrase:X,derivationPath:$}){let J=x2(X),Q=l2.fromMasterSeed(J).derive($);if(!Q.privateKey||!Q.publicKey)throw new JX("toolbox_utxo_invalid_params");let{privateKey:Z,publicKey:L}=Q,Y=h2.hash160(L),{isStagenet:q}=eX.get("envs"),G=q?new Uint8Array([29,37]):new Uint8Array([28,184]),W=new Uint8Array(G.length+Y.length);W.set(G,0),W.set(Y,G.length);let U=B1(W);return{getAddress:()=>Promise.resolve(U),signTransaction:(z)=>{if(z instanceof W1){let _=z.toPCZT();return _.signAllInputs(Z,L,aX.ALL),_.finalizeAllInputs(),Promise.resolve(_.extract())}if(z instanceof Y1)return z.signAllInputs(Z,L,aX.ALL),z.finalizeAllInputs(),Promise.resolve(z.extract());return z.signAllInputs(Z,L,aX.ALL),Promise.resolve(z)}}}function D1({inputs:X,outputs:$,tx:J,sender:j,compiledMemo:Q}){let Z=X2();for(let L of X){let Y=j1(Z).decode(j),q=G1.encode(Y);J.addInput({index:L.index,script:q,sequence:4294967295,txid:t0.decode(L.hash),value:BigInt(L.value)})}for(let L of $){let Y="address"in L&&L.address?L.address:j,q=L.script;if(q&&!Q)continue;if(q&&Q)J.addOutput({amount:0n,script:Q});else J.addOutputAddress(Y,BigInt(L.value),Z)}return{inputs:X,tx:J}}async function H1(){let{isStagenet:X}=eX.get("envs");if(X)return m2.IRONWOOD;try{let $=await I(VX.Zcash).getBlockHeight();return Z1($+1)}catch{return m2.IRONWOOD}}async function g2(X){let{assetValue:$,recipient:J,memo:j,feeRate:Q,sender:Z,fetchTxHex:L,sweep:Y}=X,q=X2();if(!K2(Z,q))throw new JX("toolbox_utxo_invalid_address",{address:Z});if(!K2(J,q))throw new JX("toolbox_utxo_invalid_address",{address:J,error:"Zcash transaction creation currently supports transparent addresses only"});let G=j?y(j):null,W=await I(VX.Zcash).getUtxos({address:Z,fetchTxHex:L!==!1}),U=[{address:J,value:Y?0:Number($.getBaseValue("string"))},...G?[{script:G,value:0}]:[]],{inputs:z,outputs:_}=S({chain:VX.Zcash,changeAddress:Z,feeRate:Q,inputs:W,outputs:U,sweep:Y});if(!(z&&_))throw new JX("toolbox_utxo_insufficient_balance",{assetValue:$,sender:Z});let N=Q1({consensusBranchId:await H1(),expiryHeight:0,lockTime:0,version:4,versionGroupId:U1.SAPLING}),{tx:H,inputs:D}=D1({compiledMemo:G,inputs:z,outputs:_,sender:Z,tx:N});return{inputs:D,outputs:_,tx:H}}function o2(X){let $=_1(X).with({signer:tX.not(tX.nullish)},({signer:q})=>q).with({phrase:tX.string},({phrase:q,derivationPath:G,index:W=0})=>{let U=G||$1[VX.Zcash]||[44,133,0,0,0],z=J1(U,{index:W}),_=e0(z);return M1({derivationPath:_,phrase:q})}).otherwise(()=>{return}),J=$X({chain:VX.Zcash,signer:$});async function j(q){if(!$)throw new JX("toolbox_utxo_no_signer");return await $.signTransaction(q)}async function Q(q){let G=await j(q);return J.broadcastTx(G.toHex())}async function Z({recipient:q,assetValue:G,feeOptionKey:W=X1.Fast,sweep:U,...z}){let _=await $?.getAddress();if(!($&&_))throw new JX("toolbox_utxo_no_signer");let N=z.feeRate||(await J.getFeeRates())[W],{tx:H}=await g2({...z,assetValue:G,feeRate:N,recipient:q,sender:_,sweep:U}),V=(await $.signTransaction(H)).toHex();return J.broadcastTx(V)}function L({phrase:q,derivationPath:G="m/44'/133'/0'/0/0"}){let W=x2(q),z=l2.fromMasterSeed(W).derive(G);if(!z.privateKey||!z.publicKey)throw new JX("toolbox_utxo_invalid_params");return{privateKey:z.privateKey,publicKey:z.publicKey}}function Y({phrase:q,derivationPath:G="m/44'/133'/0'/0/0"}){let W=L({derivationPath:G,phrase:q}),U=X2();return q1(U).encode(W.privateKey)}return{...J,createKeysForPath:L,createTransaction:g2,getPrivateKeyFromMnemonic:Y,signAndBroadcastTransaction:Q,signTransaction:j,transfer:Z,validateAddress:OX}}import{hex as C1}from"@scure/base";import{HDKey as O1}from"@scure/bip32";import{derivationPathToString as b1}from"@swapkit/helpers";function k1({xpub:X,chain:$,count:J,startIndex:j=0,accountIndex:Q}){if(K("count",J),J<1)throw RangeError("count must be at least 1");K("startIndex",j);let Z=F($),L=O1.fromExtendedKey(X,Z.bip32),Y=n({accountIndex:Q,chain:$}),q=ZX(Y),G=[];for(let W of[!1,!0]){let U=L.deriveChild(Number(W));for(let z=0;z<J;z++){let _=j+z,N=U.deriveChild(_);if(!N.publicKey)continue;let H=MX({accountIndex:Q,chain:$,change:W,index:_});G.push({accountIndex:q,address:kX({chain:$,network:Z,publicKey:N.publicKey}),change:W,index:_,path:b1(H),pubkey:C1.encode(N.publicKey)})}}return G}function l8(X,$){switch(X){case _X.BitcoinCash:return S2($||{});case _X.Zcash:return o2($);case _X.Bitcoin:case _X.Dogecoin:case _X.Litecoin:case _X.Dash:return $X({chain:X,...$});default:throw new V1("toolbox_utxo_not_supported",{chain:X})}}export{OX as validateZcashAddress,k2 as validateUtxoAddress,t as validateBchAddress,c as toLegacyAddress,yX as toCashAddress,gX as stripToCashAddress,LX as stripPrefix,mX as nonSegwitChains,W2 as isValidAddress,l8 as getUtxoToolbox,R1 as getUtxoNetwork,I as getUtxoApi,P2 as getUTXOAddressValidator,MX as getUTXOAddressPath,n as getUTXOAccountPath,ZX as getUTXOAccountIndexFromPath,HX as getScriptTypeForAddress,wX as getOutputSize,F as getNetworkForChain,s as getInputSize,CX as getDustThreshold,U2 as detectAddressNetwork,k1 as deriveAddressesFromXpub,o2 as createZcashToolbox,$X as createUTXOToolbox,d2 as createHDWalletHelpers,E1 as createCustomUtxoApi,S2 as createBCHToolbox,y as compileMemo,qX as calculateTxSize,K as assertDerivationIndex,T2 as addressFromKeysGetter,XX as addInputsAndOutputs,S as accumulative,z2 as UtxoNetwork,pX as UTXOScriptType,cX as TX_OVERHEAD,uX as SEGWIT_MARKER_FLAG_WEIGHT,SX as OutputSizes,O0 as OP_RETURN_OVERHEAD,h1 as MIN_TX_FEE,oX as InputSizes};
1
+ import{ea as j2,fa as M2}from"../../chunk-nvfkjbyq.js";import"../../chunk-xbdjxeqd.js";import{NetworkDerivationPath as p2}from"@swapkit/helpers";function m(X,$){if(!Number.isInteger($)||$<0)throw RangeError(`${X} must be a non-negative integer, got: ${$}`)}function n({accountIndex:X,chain:$,derivationPath:J}){if(X!==void 0)m("accountIndex",X);let j=[...J?.slice(0,3)??p2[$].slice(0,3)];if(X!==void 0)j[2]=X;return j}function MX({accountIndex:X,change:$=!1,chain:J,derivationPath:j,index:Q}){return m("index",Q),[...n({accountIndex:X,chain:J,derivationPath:j}),Number($),Q]}function ZX(X){return X[2]??0}function d2({deriveAddress:X,getBalance:$,getUtxos:J}){async function j(Y){let{accountIndex:q,count:G,startIndex:W=0,change:U=!1}=Y;if(m("count",G),G<1)throw RangeError("count must be at least 1");m("startIndex",W);let L=[];for(let _=0;_<G;_++){let N=await X({accountIndex:q,change:U,index:W+_});if(N)L.push(N)}return L}async function Q(Y){let{gapLimit:q=20,change:G=!1}=Y??{},W=[],U=0,L=0;while(U<q){let _=await X({change:G,index:L});if(!_)break;if((await $(_.address)).some((D)=>D.getValue("number")>0))W.push(_),U=0;else U++;L++}return W}async function Z(Y=20){let[q,G]=await Promise.all([Q({change:!1,gapLimit:Y}),Q({change:!0,gapLimit:Y})]),W=[...q,...G],U=await Promise.all(W.map(async(_)=>{let H=(await $(_.address)).reduce((D,b)=>D+b.getValue("number"),0);return{..._,balance:H}})),L=U.reduce((_,N)=>_+N.balance,0);return{addresses:U,total:L}}async function z(Y=20){let[q,G]=await Promise.all([Q({change:!1,gapLimit:Y}),Q({change:!0,gapLimit:Y})]),W=[...q,...G];return(await Promise.all(W.map(async(L)=>{return(await J(L.address)).map((N)=>({...N,address:L.address,derivationIndex:L.index,isChange:L.change}))}))).flat()}return{deriveAddresses:j,getAggregatedBalance:Z,getAggregatedUtxos:z,scanForAddresses:Q}}import{Chain as T,getRPCUrl as r2,RequestClient as AX,SKConfig as n2,SwapKitError as v,warnOnce as i2}from"@swapkit/helpers";import{NETWORKS as GX}from"@swapkit/utxo-signer";async function s2({chain:X,txHash:$}){let J=`${YX(X)}/push/transaction`,j=JSON.stringify({data:$});try{let Q=await AX.post(J,{body:j,headers:{"Content-Type":"application/json"}});if(Q.context.code!==200)throw new v("toolbox_utxo_broadcast_failed",{error:Q.context.error||"Transaction broadcast failed"});return Q.data?.transaction_hash||$}catch(Q){let Z=await r2(X);if(Z){let z=JSON.stringify({id:j2(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),Y=await AX.post(Z,{body:z,headers:{"Content-Type":"application/json"}});if(Y.error)throw new v("toolbox_utxo_broadcast_failed",{error:Y.error?.message});if(Y.result.includes('"code":-26'))throw new v("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return Y.result}throw Q}}function YX(X){return`https://api.blockchair.com/${a2(X)}`}function $2(X){switch(X){case T.Bitcoin:return 5;case T.Dogecoin:return 1e4;case T.Litecoin:return 1;case T.Zcash:return 1;default:return 2}}function a2(X){switch(X){case T.BitcoinCash:return"bitcoin-cash";case T.Litecoin:return"litecoin";case T.Dash:return"dash";case T.Dogecoin:return"dogecoin";case T.Zcash:return"zcash";case T.Polkadot:return"polkadot";default:return"bitcoin"}}async function t2(X){try{let{feePerKb:$}=await AX.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,$2(X))}catch{return $2(X)}}async function DX(X,$){let J=await AX.get(`${X}${$?`${X.includes("?")?"&":"?"}key=${$}`:""}`);if(!J||J.context.code!==200)throw new v("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}async function e2({chain:X,apiKey:$}){let J=await DX(`${YX(X)}/stats`,$);if(typeof J.best_block_height!=="number")throw new v("toolbox_utxo_api_error",{error:"Missing best_block_height in stats response"});return J.best_block_height}async function Q2({address:X,chain:$,apiKey:J}){if(!X)throw new v("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await DX(`${YX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function X0({address:X,chain:$,apiKey:J}){return(await Q2({address:X,apiKey:J,chain:$}))?.address.balance||0}async function Z2({chain:X,apiKey:$,txHash:J}){if(!J)throw new v("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await DX(`${YX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(j){let Q=j instanceof Error?j.message:String(j);return console.error(`Failed to fetch raw transaction: ${Q}`),""}}var $0=4294967294;async function J0({chain:X,apiKey:$,txHash:J}){if(!J)throw new v("toolbox_utxo_invalid_params",{error:"TxHash is required"});let Q=(await DX(`${YX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!Q)throw new v("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:Z,inputs:z,outputs:Y}=Q,q=z.map((W)=>W.spending_sequence),G=Z.is_rbf===!0||q.some((W)=>W<$0);return{blockId:Z.block_id,confirmed:Z.block_id!==-1,fee:Z.fee,inputs:z,isRBF:G,outputs:Y,sequences:q,size:Z.size,txid:Z.hash,weight:Z.weight}}async function j0({chain:X,address:$,apiKey:J,offset:j=0,limit:Q=30}){return(await DX(`${YX(X)}/outputs?q=recipient(${$}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${j}`,J)).map(({is_spent:q,script_hex:G,block_id:W,transaction_hash:U,index:L,value:_,spending_signature_hex:N})=>({hash:U,index:L,is_confirmed:W!==-1,is_spent:q,script_hex:G,txHex:N,value:_}))}function Q0(X){return X.reduce(($,J)=>$+J.value,0)}function J2(X,$){let J=[...X].sort((j,Q)=>Q.value-j.value);if($){let j=[],Q=0;for(let Z of J)if(j.push(Z),Q+=Z.value,Q>=$)break;return j}return J}async function G2({chain:X,address:$,apiKey:J,targetValue:j,accumulativeValue:Q=0,offset:Z=0,limit:z=30}){if(!$)throw new v("toolbox_utxo_invalid_params",{error:"Address is required"});try{let Y=await j0({address:$,apiKey:J,chain:X,limit:z,offset:Z,targetValue:j}),G=Y.length<z,W=Y.filter(({is_spent:D})=>!D),U=Q0(W),L=Q+U,_=j&&L>=j;if(G||_)return J2(W,j);let N=await G2({accumulativeValue:L,address:$,apiKey:J,chain:X,limit:z,offset:Z+z,targetValue:j}),H=[...W,...N];return J2(H,j)}catch(Y){let q=Y instanceof Error?Y.message:String(Y);return console.error(`Failed to fetch unspent UTXOs: ${q}`),[]}}async function Z0({address:X,chain:$,apiKey:J,fetchTxHex:j=!0,targetValue:Q}){let Z=await G2({address:X,apiKey:J,chain:$,targetValue:Q}),z=j?await Promise.all(Z.map(({hash:Y})=>Z2({apiKey:J,chain:$,txHash:Y}))):[];return Z.map(({hash:Y,index:q,script_hex:G,value:W},U)=>({address:X,hash:Y,index:q,txHex:j?z[U]:void 0,value:W,witnessUtxo:{script:Buffer.from(G,"hex"),value:W}}))}function I(X){let $=n2.get("apiKeys").blockchair||"";return i2({condition:!$,id:"no_blockchair_api_key_warning",warning:"No Blockchair API key found. Functionality will be limited."}),{broadcastTx:(J)=>s2({chain:X,txHash:J}),getAddressData:(J)=>Q2({address:J,apiKey:$,chain:X}),getBalance:(J)=>X0({address:J,apiKey:$,chain:X}),getBlockHeight:()=>e2({apiKey:$,chain:X}),getRawTx:(J)=>Z2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>t2(X),getTransactionDetails:(J)=>J0({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>Z0({...J,apiKey:$,chain:X})}}function f1(X){return X}function A1(){return function($){switch($){case T.Bitcoin:return GX.bitcoin;case T.BitcoinCash:return GX.bitcoinCash;case T.Dash:return GX.dash;case T.Litecoin:return GX.litecoin;case T.Dogecoin:return GX.dogecoin;case T.Zcash:return GX.zcash;default:throw new v("toolbox_utxo_not_supported",{chain:$})}}}import{sha256 as U0}from"@noble/hashes/sha2.js";import{createBase58check as _0}from"@scure/base";import{SwapKitError as q2}from"@swapkit/helpers";import{CashAddrType as yX,decodeCashAddr as G0,encodeCashAddr as Y0}from"@swapkit/utxo-signer";var q0={P2PKH:yX.P2PKH,P2SH:yX.P2SH},L0={[yX.P2PKH]:"P2PKH",[yX.P2SH]:"P2SH"};function z0(X,$,J){return Y0({hash:J,prefix:X,type:q0[$]})}function W0(X){let $=G0(X),J=L0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var hX={decode:W0,encode:z0};var L2=_0(U0);var z2;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(z2||={});var i={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function W2(X){try{return vX(X),!0}catch{return!1}}function U2(X){return vX(X)?.network}function o(X){let $=vX(X);if($?.format==="legacy")return X;return M0($)}function RX(X){let $=vX(X);return D0($)}function vX(X){try{let $=N0(X);if($)return $}catch{}try{let $=B0(X);if($)return $}catch{}throw new q2("toolbox_utxo_invalid_address",{address:X})}function N0(X){try{let $=L2.decode(X);if($.length!==21)throw new q2("toolbox_utxo_invalid_address",{address:X});let J=$[0],j=Array.prototype.slice.call($,1);switch(J){case i.legacy.mainnet.p2pkh:return{format:"legacy",hash:j,network:"mainnet",type:"p2pkh"};case i.legacy.mainnet.p2sh:return{format:"legacy",hash:j,network:"mainnet",type:"p2sh"};case i.legacy.testnet.p2pkh:return{format:"legacy",hash:j,network:"testnet",type:"p2pkh"};case i.legacy.testnet.p2sh:return{format:"legacy",hash:j,network:"testnet",type:"p2sh"};case i.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2pkh"};case i.bitpay.mainnet.p2sh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function B0(X){if(X.indexOf(":")!==-1)try{return Y2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return Y2(`${J}:${X}`)}catch{}}return}function Y2(X){try{let{hash:$,prefix:J,type:j}=hX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:j==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function M0(X){let $=i.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),L2.encode(J)}function D0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",j=new Uint8Array(X.hash);return hX.encode($,J,j)}import{Chain as a,SwapKitError as dX}from"@swapkit/helpers";import{SwapKitError as H0}from"@swapkit/helpers";import{Script as C0}from"@swapkit/utxo-signer";var h1=1000,oX=10,uX=2,O0=10,k0=41,V0=107;function R(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return C0.encode(["RETURN",$])}var pX;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(pX||={});var cX={["P2PKH"]:148,["P2WPKH"]:68},SX={["P2PKH"]:34,["P2WPKH"]:31},HX=(X)=>{if(X.startsWith("bc1")||X.startsWith("tb1")||X.startsWith("ltc1")||X.startsWith("tltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("m")||X.startsWith("n")||X.startsWith("bitcoincash:q")||X.startsWith("bitcoincash:p")||X.startsWith("q")||X.startsWith("p")||X.startsWith("L")||X.startsWith("M")||X.startsWith("3")||X.startsWith("D")||X.startsWith("A")||X.startsWith("9")||X.startsWith("X")||X.startsWith("7")||X.startsWith("y")||X.startsWith("t1")||X.startsWith("t3")||X.startsWith("tm"))return"P2PKH";throw new H0("toolbox_utxo_invalid_address",{address:X})},qX=({inputs:X,outputs:$,feeRate:J})=>{let j=X[0]&&"address"in X[0]&&X[0].address?HX(X[0].address):"P2PKH",Z=(J?X.filter((G)=>G.value>=cX["type"in G&&G.type?G.type:"P2PKH"]*Math.ceil(J)):X).reduce((G,W)=>G+s(W),0),z=$?.reduce((G,W)=>G+wX(W),0)||SX[j],Y=oX+Z+z;return j==="P2WPKH"?Math.ceil(Y+uX/4):Y},s=(X)=>{if("type"in X&&X.type)return cX[X.type];if("address"in X&&X.address)return cX[HX(X.address)];return k0+V0},wX=(X,$)=>{if(X?.script)return O0+X.script.length+(X.script.length>=74?2:1);if($)return SX[$];if("address"in X&&X.address)return SX[HX(X.address)];return SX.P2PKH};function CX(X){switch(X){case a.Bitcoin:case a.BitcoinCash:return 550;case a.Dash:case a.Litecoin:return 5500;case a.Dogecoin:return 1e5;case a.Zcash:return 546;default:throw new dX("toolbox_utxo_not_supported",{chain:X})}}function S({inputs:X,outputs:$,feeRate:J=1,chain:j=a.Bitcoin,changeAddress:Q="",sweep:Z=!1}){let z=CX(j),Y=X.filter((D)=>{let b=s(D)*J;return Z?D.value>Math.max(b,z):b<=D.value});if(Z){let D=Math.ceil(J*qX({inputs:Y,outputs:$})),b=Y.reduce((A,l)=>A+l.value,0),u=b-D;if(u<=z)throw new dX("toolbox_sweep_amount_too_low",{available:b,dustThreshold:z,fee:D});let p=$.findIndex((A)=>("address"in A)&&A.address);if(p===-1)throw new dX("toolbox_utxo_invalid_params",{error:"Sweep requires a recipient output"});return{fee:D,inputs:Y,outputs:$.map((A,l)=>l===p?{...A,value:u}:A)}}let W=(X[0]&&"address"in X[0]&&X[0].address?HX(X[0].address):"P2PKH")==="P2WPKH"?Math.ceil(uX/4):0,U=oX+W+$.reduce((D,b)=>D+wX(b),0),L=$.reduce((D,b)=>D+b.value,0),_=U*J,N=0,H=[];for(let D of Y){let b=s(D),u=J*b;_+=u,N+=D.value,H.push(D);let p=_+L;if(N<p)continue;let A=N-p,l=J*wX({address:Q,value:0});if(A>l){let IX=l+_,PX=N-(L+Math.ceil(IX));if(PX>Math.max(s({value:0})*J,CX(j)))return{fee:Math.ceil(IX),inputs:H,outputs:$.concat({address:Q,value:PX})}}return{fee:Math.ceil(_),inputs:H,outputs:$}}return{fee:Math.ceil(J*qX({inputs:X,outputs:$}))}}import{Chain as _X,SwapKitError as b1}from"@swapkit/helpers";import{hex as E2}from"@scure/base";import{Chain as x0,derivationPathToString as h0,FeeOption as c0,NetworkDerivationPath as o0,SwapKitError as h,updateDerivationPath as u0}from"@swapkit/helpers";import{BCHSigHash as p0,CashAddrPrefix as f2,CashAddrType as A2,encodeCashAddr as y2,NETWORKS as d0,p2pkh as R2,Transaction as v2}from"@swapkit/utxo-signer";import{secp256k1 as b0}from"@noble/curves/secp256k1.js";import{hex as e}from"@scure/base";import{HDKey as D2}from"@scure/bip32";import{mnemonicToSeedSync as iX}from"@scure/bip39";import{AssetValue as rX,applyFeeMultiplier as _2,Chain as P,derivationPathToString as kX,FeeOption as w,NetworkDerivationPath as H2,SwapKitError as V,SwapKitNumber as I0,updateDerivationPath as P0,warnOnce as T0}from"@swapkit/helpers";import{Address as F0,BCHSigHash as sX,CashAddrPrefix as E0,CashAddrType as f0,encodeCashAddr as A0,NETWORKS as zX,p2pkh as N2,p2wpkh as y0,RBF_SEQUENCE as R0,SigHash as C2,Transaction as nX,WIF as O2}from"@swapkit/utxo-signer";import{match as k2}from"ts-pattern";import{validateZcashAddress as OX}from"@swapkit/utxo-signer";function LX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function t(X){let $=LX(X);return W2($)&&U2($)==="mainnet"}var mX=[P.Dash,P.Dogecoin,P.Zcash,P.BitcoinCash],KX=[P.Bitcoin];function V2({address:X,chain:$}){return k2($).with(P.BitcoinCash,()=>t(X)).with(P.Zcash,()=>OX(X)).otherwise(()=>{try{return F0(E($)).decode(X),!0}catch{return!1}})}function E(X){return k2(X).with(P.Bitcoin,()=>zX.bitcoin).with(P.BitcoinCash,()=>zX.bitcoinCash).with(P.Dash,()=>zX.dash).with(P.Dogecoin,()=>zX.dogecoin).with(P.Litecoin,()=>zX.litecoin).with(P.Zcash,()=>zX.zcash).exhaustive()}function v0({phrase:X,derivationPath:$,network:J,seed:j}){let Q=j??iX(X),z=D2.fromMasterSeed(Q,J.bip32).derive($);if(!z.privateKey)throw new V("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return z.privateKey}function B2(X){return b0.getPublicKey(X,!0)}function VX({publicKey:X,chain:$,network:J}){if($===P.BitcoinCash){let Z=N2(X,J);if(!Z.hash)throw new V("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return A0({hash:Z.hash,prefix:E0.MAINNET,type:f0.P2PKH}).replace(/^bitcoincash:/,"")}let Q=!mX.includes($)?y0(X,J):N2(X,J);if(!Q.address)throw new V("toolbox_utxo_invalid_address",{error:"Could not derive address"});return Q.address}function WX({phrase:X,derivationPath:$,chain:J,wif:j,seed:Q}){let Z=E(J);if(j){let G=O2(Z).decode(j),W=B2(G);return{privateKey:G,publicKey:W}}if(!X)throw new V("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let z=$||kX(H2[J]),Y=v0({derivationPath:z,network:Z,phrase:X,seed:Q}),q=B2(Y);return{privateKey:Y,publicKey:q}}function S0(X,$){return O2(E($)).encode(X)}function w0({phrase:X,derivationPath:$,chain:J,seed:j}){let Q=$.split("/");if(Q.length<4)throw new V("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${Q.length}): ${$}`});let Z=E(J),z=j??iX(X),Y=D2.fromMasterSeed(z,Z.bip32),q=Q.slice(0,4).join("/");return Y.derive(q)}function XX({inputs:X,outputs:$,chain:J,tx:j,sender:Q,compiledMemo:Z,enableRBF:z=!1}){let Y=E(J),q=!mX.includes(J),G=z?R0:void 0,W=new Set;for(let U of X){let L=`${U.hash}:${U.index}`;if(W.has(L))throw new V("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});W.add(L);let _=typeof U.hash==="string"?e.decode(U.hash):U.hash;if(q&&U.witnessUtxo)j.addInput({index:U.index,sequence:G,txid:_,witnessUtxo:{amount:BigInt(U.witnessUtxo.value),script:U.witnessUtxo.script}});else if(U.txHex)j.addInput({index:U.index,nonWitnessUtxo:e.decode(U.txHex),sequence:G,txid:_,...J===P.BitcoinCash?{sighashType:sX.ALL}:{}});else throw new V("toolbox_utxo_invalid_params",{error:"Input requires either witnessUtxo or txHex for non-segwit chains"})}for(let U of $){let L="address"in U&&U.address?U.address:Q;if(J===P.BitcoinCash)L=o(L);if(U.script){if(Z)j.addOutput({amount:0n,script:Z})}else j.addOutputAddress(L,BigInt(U.value),Y)}return{inputs:X,tx:j}}async function UX(X){let $=await I(X).getSuggestedTxFee();return{[w.Average]:$,[w.Fast]:_2($,w.Fast),[w.Fastest]:_2($,w.Fastest)}}async function b2({assetValue:X,recipient:$,memo:J,sender:j,sweep:Q,fetchTxHex:Z=!1},z){let Y=X.chain,q=Z||mX.includes(Y),G=X.getBaseValue("number"),W=Q?void 0:z??(await UX(Y))[w.Fastest],U=Q||W===void 0?void 0:Math.ceil(G+W*5000);return{inputs:await I(Y).getUtxos({address:j,fetchTxHex:q,targetValue:U}),outputs:[{address:$,value:Q?0:G},...J?[{address:"",script:R(J),value:0}]:[]]}}async function I2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,fetchTxHex:Z=!1,enableRBF:z=!1,sweep:Y}){let q=X.chain,G=J?R(J):null,W=await b2({assetValue:X,fetchTxHex:Z,memo:J,recipient:$,sender:Q,sweep:Y},j),{inputs:U,outputs:L}=S({...W,chain:q,feeRate:j,sweep:Y});if(!(U&&L))throw new V("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new nX({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:N,tx:H}=XX({chain:q,compiledMemo:G,enableRBF:z,inputs:U,outputs:L,sender:Q,tx:_});return{inputs:N,tx:H,utxos:W.inputs}}async function P2({assetValue:X,feeOptionKey:$=w.Fast,feeRate:J,memo:j,sender:Q,recipient:Z,sweep:z}){let Y=X.chain,q,G;if(J!==void 0)q=J,G=Math.floor(J);else{let U=await UX(Y);q=U[w.Fastest],G=U[$]}let W=await b2({assetValue:X,memo:j,recipient:Z,sender:Q,sweep:z},q);return S({...W,chain:Y,feeRate:G,sweep:z})}function K0(X){return async function({from:J,memo:j,feeRate:Q,feeOptionKey:Z=w.Fast,recipient:z=J,recipients:Y=1}){let q=Q??(await UX(X))[Z],W=(await I(X).getUtxos({address:J,fetchTxHex:!1})).filter((H)=>H.value>Math.max(CX(X),s(H)*q));if(!W.length)return rX.from({chain:X});let U=typeof Y==="number"?Math.max(Y,1):Y.length,L=typeof Y==="number"||U===0?Array.from({length:U||1},()=>({address:z,value:0})):[...Y];if(j)L.push({address:J,script:R(j),value:0});let{outputs:_}=S({chain:X,feeRate:q,inputs:W,outputs:L,sweep:!0}),N=_?.[0]?.value??0;return rX.from({chain:X,value:BigInt(N)})}}function m0(X){return async function(J){let{fee:j}=await P2(J);return rX.from({chain:X,value:I0.fromBigInt(BigInt(j),8).getValue("string")})}}function g0({chain:X,phrase:$,derivationPath:J,seed:j}){let Q=E(X),{privateKey:Z,publicKey:z}=WX({chain:X,derivationPath:J,phrase:$,seed:j}),Y=X===P.BitcoinCash?[sX.ALL]:[C2.ALL];return{getAddress:()=>VX({chain:X,network:Q,publicKey:z}),privateKey:Z,publicKey:z,signTransaction:(q)=>{return q.sign(Z,Y),q}}}function l0(X,$){return async function({memo:j,recipient:Q,feeOptionKey:Z,feeRate:z,assetValue:Y,enableRBF:q=!1,sweep:G}){let W=await $?.getAddress();if(!($&&W))throw new V("toolbox_utxo_no_signer");if(!Q)throw new V("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});T0({condition:q&&!KX.includes(X),id:`rbf_not_supported_${X}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${X}. Transaction will be created without RBF signaling.`});let U=q&&KX.includes(X),L=z||(await UX(X))[Z||w.Fast],{tx:_}=await I2({assetValue:Y,enableRBF:U,feeRate:L,memo:j,recipient:Q,sender:W,sweep:G}),N=await $.signTransaction(_);return N.finalize(),I(X).broadcastTx(e.encode(N.extract()))}}function T2(X){return($)=>V2({address:$,chain:X})}function F2(X){let $=E(X);return function(j){if(!j)throw new V("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return VX({chain:X,network:$,publicKey:j.publicKey})}}function $X({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,j="index"in $?$.index||0:0,Q=J?iX(J):void 0,Z="derivationPath"in $&&$.derivationPath?$.derivationPath:P0(H2[X],{index:j}),z=kX(Z),Y=J?g0({chain:X,derivationPath:z,phrase:J,seed:Q}):void 0,q="signer"in $?$.signer:void 0,G=Y||q,W=J?WX({chain:X,derivationPath:z,phrase:J,seed:Q}):void 0;function U(){if(G)return G.getAddress();return Promise.resolve(void 0)}function L(B){if(!J)return;let M=n({accountIndex:B,chain:X,derivationPath:Z});return w0({chain:X,derivationPath:kX(M),phrase:J,seed:Q})}let _=L();function N(){if(!_)return;return _.publicExtendedKey}function H({accountIndex:B}={}){let M=B===void 0?_:L(B);if(!M)return;let C=n({accountIndex:B,chain:X,derivationPath:Z});return{accountIndex:ZX(C),path:kX(C),xpub:M.publicExtendedKey}}function D({accountIndex:B,index:M,change:C=!1}){let O=B===void 0?_:L(B);if(!O)return;let k=MX({accountIndex:B,chain:X,change:C,derivationPath:Z,index:M}),y=E(X),K=O.deriveChild(Number(C)).deriveChild(M);if(!K.publicKey)throw new V("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let f=VX({chain:X,network:y,publicKey:K.publicKey}),c=e.encode(K.publicKey);return{accountIndex:ZX(k),address:f,change:C,index:M,path:kX(k),pubkey:c}}async function b(B){if(!KX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let M=await I(X).getTransactionDetails(B);return{canReplace:M.isRBF&&!M.confirmed,confirmed:M.confirmed,enabled:M.isRBF,fee:M.fee,sequences:M.sequences,supported:!0}}async function u({txid:B,newFeeRate:M,recipient:C,memo:O}){if(!KX.includes(X))throw new V("toolbox_utxo_rbf_not_supported",{chain:X});let k=await I(X).getTransactionDetails(B);if(!k.isRBF)throw new V("toolbox_utxo_tx_not_replaceable",{txid:B});if(k.confirmed)throw new V("toolbox_utxo_tx_already_confirmed",{blockId:k.blockId,txid:B});let y=k.inputs.reduce((F,x)=>F+x.value,0),f=k.outputs.find((F)=>F.recipient===C)?.value||0;if(f===0)throw new V("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let c=await Promise.all(k.inputs.map(async(F)=>{let x=await I(X).getRawTx(F.transaction_hash);return{hash:F.transaction_hash,index:F.index,txHex:x,value:F.value,witnessUtxo:void 0}})),NX=O?R(O):null,TX=qX({feeRate:M,inputs:c.map((F)=>({...F,type:"P2WPKH"})),outputs:[{address:C,value:f}]}),d=Math.ceil(TX*M);if(d<=k.fee)throw new V("toolbox_utxo_rbf_fee_too_low",{newFee:d,originalFee:k.fee});let jX=d-k.fee,QX=f-jX;if(QX<=0)throw new V("toolbox_utxo_rbf_insufficient_change");let r=new nX({allowLegacyWitnessUtxo:!0,version:1}),FX=[{address:C,value:QX},...O?[{address:"",script:R(O),value:0}]:[]],EX=y-QX-d,BX=await U();if(EX>CX(X)&&BX)FX.push({address:BX,value:EX});return XX({chain:X,compiledMemo:NX,inputs:c,outputs:FX,sender:BX||C,tx:r}),{feeDelta:jX,newFee:d,originalFee:k.fee,tx:r}}async function p({txid:B,newFeeRate:M,recipient:C,memo:O}){let{tx:k,originalFee:y,newFee:K}=await u({memo:O,newFeeRate:M,recipient:C,txid:B}),f=await lX(k);f.finalize();let c=await I(X).broadcastTx(e.encode(f.extract()));return{newFee:K,originalFee:y,txid:c}}function A({accountIndex:B,index:M,change:C=!1}){m("index",M);let O=B===void 0?_:L(B);if(!O)return;return O.deriveChild(Number(C)).deriveChild(M).privateKey||void 0}function l({tx:B,inputDerivations:M}){if(!_)throw new V("toolbox_utxo_no_signer");let C=X===P.BitcoinCash?[sX.ALL]:[C2.ALL];for(let O=0;O<M.length;O++){let k=M[O];if(!k)continue;let{derivationIndex:y,isChange:K}=k,f=A({change:K,index:y});if(!f)throw new V("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${O} at index ${y}`});B.signIdx(f,O,C)}return B}async function IX({utxos:B,recipient:M,assetValue:C,memo:O,feeRate:k,feeOptionKey:y,changeAddress:K,sweep:f}){if(f)throw new V("toolbox_utxo_invalid_params",{error:"Sweep is not supported for transfers from multiple addresses"});if(!_)throw new V("toolbox_utxo_no_signer");let c=k||(await UX(X))[y||w.Fast],NX=O?R(O):null,TX=[{address:M,value:C.getBaseValue("number")}];if(NX)TX.push({address:"",script:NX,value:0});let d=B.map(({hash:F,index:x,value:fX,txHex:u2,witnessUtxo:xX})=>({hash:F,index:x,txHex:u2,value:fX,witnessUtxo:xX?{script:xX.script,value:xX.value}:void 0})),{inputs:jX,outputs:QX}=S({chain:X,feeRate:c,inputs:d,outputs:TX});if(!(jX&&QX))throw new V("toolbox_utxo_insufficient_balance",{assetValue:C,sender:"multiple addresses"});let r=new nX({allowLegacyWitnessUtxo:!0,version:1}),FX=B[0]?.address,EX=K||await U()||FX||M;XX({chain:X,compiledMemo:NX,inputs:jX,outputs:QX,sender:EX,tx:r});let BX=jX.map((F)=>{let x=B.find((fX)=>fX.hash===F.hash&&fX.index===F.index);return x?{derivationIndex:x.derivationIndex,isChange:x.isChange}:{derivationIndex:0,isChange:!1}});return l({inputDerivations:BX,tx:r}),r.finalize(),I(X).broadcastTx(e.encode(r.extract()))}function PX({address:B,gapLimit:M=20}){if(!_)return;for(let C=0;C<M;C++){let O=D({change:!1,index:C}),k=D({change:!0,index:C}),y=O?.address===B?!1:k?.address===B;if(O?.address===B||k?.address===B)return{change:y,index:C}}return}function lX(B){if(!G)throw new V("toolbox_utxo_no_signer");return G.signTransaction(B)}async function o2(B){let M=await lX(B);return M.finalize(),await I(X).broadcastTx(e.encode(M.extract()))}return{accumulative:S,broadcastTx:(B)=>I(X).broadcastTx(B),bumpFee:p,calculateTxSize:qX,createKeysForPath:(B)=>WX({...B,chain:X}),createReplacementTransaction:u,createTransaction:I2,deriveAddressAtIndex:D,derivePrivateKeyAtIndex:A,estimateMaxSendableAmount:K0(X),estimateTransactionFee:m0(X),getAddress:U,getAddressFromKeys:F2(X),getBalance:M2(X),getExtendedPublicKey:N,getExtendedPublicKeyInfo:H,getFeeRates:()=>UX(X),getInputsOutputsFee:P2,getNetworkForChain:()=>E(X),getPrivateKeyFromMnemonic:(B)=>S0(WX({...B,chain:X}).privateKey,X),isRBFEnabled:b,keys:W,resolveDerivationIndex:PX,signAndBroadcastTransaction:o2,signTransaction:lX,signTransactionWithMultipleKeys:l,transfer:l0(X,G),transferFromMultipleAddresses:IX,validateAddress:T2(X)}}var g=x0.BitcoinCash;function gX(X){return LX(RX(X))}function r0(X){let $=E(g);function J(Q){return Q.sign(X.privateKey,[p0.ALL]),Q}function j(){let Q=R2(X.publicKey,$);if(!Q.hash)throw new h("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let Z=y2({hash:Q.hash,prefix:f2.MAINNET,type:A2.P2PKH});return Promise.resolve(Z.replace(/^bitcoincash:/,""))}return{getAddress:j,signTransaction:J}}function S2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,j=h0("derivationPath"in X&&X.derivationPath?X.derivationPath:u0(o0[g],{index:J})),Q=$?WX({chain:g,derivationPath:j,phrase:$}):void 0,Z=Q?r0(Q):("signer"in X)?X.signer:void 0;function z(){return Promise.resolve(Z?.getAddress())}let{getBalance:Y,getFeeRates:q,broadcastTx:G,...W}=$X({chain:g});function U(N,H=!0){return Y(LX(RX(N)))}function L(N){if(!Z)throw new h("toolbox_utxo_no_signer");return Z.signTransaction(N)}async function _(N){let H=await L(N);return H.finalize(),await G(E2.encode(H.extract()))}return{...W,broadcastTx:G,buildTx:i0,createTransaction:w2,getAddress:z,getAddressFromKeys:s0,getBalance:U,getFeeRates:q,signAndBroadcastTransaction:_,signTransaction:L,stripPrefix:LX,stripToCashAddress:gX,transfer:n0({broadcastTx:G,getFeeRates:q,signer:Z}),validateAddress:t}}async function w2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,sweep:Z}){if(!t($))throw new h("toolbox_utxo_invalid_address",{address:$});let z=Math.ceil(X.getBaseValue("number")+j*7500),Y=await I(g).getUtxos({address:gX(Q),fetchTxHex:!0,targetValue:Z?void 0:z}),q=J?R(J):null,G=[],W=o($);if(G.push({address:W,value:Z?0:X.getBaseValue("number")}),q)G.push({script:q,value:0});let{inputs:U,outputs:L}=S({chain:g,feeRate:j,inputs:Y,outputs:G,sweep:Z});if(!(U&&L))throw new h("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new v2({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),N=o(Q),{inputs:H,tx:D}=XX({chain:g,compiledMemo:q,inputs:U,outputs:L.map((b)=>("address"in b)&&b.address?{...b,address:o(b.address)}:b),sender:N,tx:_});return{inputs:H,tx:D,utxos:U}}function n0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:Q,assetValue:Z,feeOptionKey:z=c0.Fast,sweep:Y,...q}){let G=await J?.getAddress();if(!(J&&G))throw new h("toolbox_utxo_no_signer");if(!Q)throw new h("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let W=q.feeRate||(await $())[z],{tx:U}=await w2({...q,assetValue:Z,feeRate:W,recipient:Q,sender:G,sweep:Y}),L=await J.signTransaction(U);return L.finalize(),X(E2.encode(L.extract()))}}async function i0({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){let Z=RX($);if(!t(Z))throw new h("toolbox_utxo_invalid_address",{address:Z});let z=Math.ceil(X.getBaseValue("number")+j*7500),Y=await I(g).getUtxos({address:gX(Q),fetchTxHex:!0,targetValue:z}),q=Number(j.toFixed(0)),G=J?R(J):null,W=[];if(W.push({address:o($),value:X.getBaseValue("number")}),G)W.push({script:G,value:0});let{inputs:U,outputs:L}=S({chain:g,feeRate:q,inputs:Y,outputs:W});if(!(U&&L))throw new h("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new v2({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:N,tx:H}=XX({chain:g,compiledMemo:G,inputs:U,outputs:L,sender:o(Q),tx:_});return{inputs:N,tx:H,utxos:Y}}function s0(X){let $=d0.bitcoinCash,J=R2(X.publicKey,$);if(!J.hash)throw new h("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return y2({hash:J.hash,prefix:f2.MAINNET,type:A2.P2PKH}).replace(/^bitcoincash:/,"")}import{createBase58check as a0,hex as t0}from"@scure/base";import{HDKey as l2}from"@scure/bip32";import{mnemonicToSeedSync as x2}from"@scure/bip39";import{Chain as bX,derivationPathToString as e0,FeeOption as X1,NetworkDerivationPath as $1,SKConfig as eX,SwapKitError as JX,updateDerivationPath as J1}from"@swapkit/helpers";import{Address as j1,createZcashTransaction as Q1,getZcashConsensusBranchId as Z1,isTransparentZcashAddress as K2,OutScript as G1,PCZT as Y1,utils as h2,WIF as q1,ZCASH_NETWORK as L1,ZCASH_TEST_NETWORK as z1,ZcashConsensusBranchId as m2,ZcashPSBT as W1,ZcashSigHash as aX,ZcashVersionGroupId as U1}from"@swapkit/utxo-signer";import{match as _1,P as tX}from"ts-pattern";function X2(){let{isStagenet:X}=eX.get("envs");return X?z1:L1}var N1=a0(h2.sha256);function B1(X){return N1.encode(X)}function M1({phrase:X,derivationPath:$}){let J=x2(X),Q=l2.fromMasterSeed(J).derive($);if(!Q.privateKey||!Q.publicKey)throw new JX("toolbox_utxo_invalid_params");let{privateKey:Z,publicKey:z}=Q,Y=h2.hash160(z),{isStagenet:q}=eX.get("envs"),G=q?new Uint8Array([29,37]):new Uint8Array([28,184]),W=new Uint8Array(G.length+Y.length);W.set(G,0),W.set(Y,G.length);let U=B1(W);return{getAddress:()=>Promise.resolve(U),signTransaction:(L)=>{if(L instanceof W1){let _=L.toPCZT();return _.signAllInputs(Z,z,aX.ALL),_.finalizeAllInputs(),Promise.resolve(_.extract())}if(L instanceof Y1)return L.signAllInputs(Z,z,aX.ALL),L.finalizeAllInputs(),Promise.resolve(L.extract());return L.signAllInputs(Z,z,aX.ALL),Promise.resolve(L)}}}function D1({inputs:X,outputs:$,tx:J,sender:j,compiledMemo:Q}){let Z=X2();for(let z of X){let Y=j1(Z).decode(j),q=G1.encode(Y);J.addInput({index:z.index,script:q,sequence:4294967295,txid:t0.decode(z.hash),value:BigInt(z.value)})}for(let z of $){let Y="address"in z&&z.address?z.address:j,q=z.script;if(q&&!Q)continue;if(q&&Q)J.addOutput({amount:0n,script:Q});else J.addOutputAddress(Y,BigInt(z.value),Z)}return{inputs:X,tx:J}}async function H1(){let{isStagenet:X}=eX.get("envs");if(X)return m2.IRONWOOD;try{let $=await I(bX.Zcash).getBlockHeight();return Z1($+1)}catch{return m2.IRONWOOD}}async function g2(X){let{assetValue:$,recipient:J,memo:j,feeRate:Q,sender:Z,fetchTxHex:z,sweep:Y}=X,q=X2();if(!K2(Z,q))throw new JX("toolbox_utxo_invalid_address",{address:Z});if(!K2(J,q))throw new JX("toolbox_utxo_invalid_address",{address:J,error:"Zcash transaction creation currently supports transparent addresses only"});let G=j?R(j):null,W=await I(bX.Zcash).getUtxos({address:Z,fetchTxHex:z!==!1}),U=[{address:J,value:Y?0:Number($.getBaseValue("string"))},...G?[{script:G,value:0}]:[]],{inputs:L,outputs:_}=S({chain:bX.Zcash,changeAddress:Z,feeRate:Q,inputs:W,outputs:U,sweep:Y});if(!(L&&_))throw new JX("toolbox_utxo_insufficient_balance",{assetValue:$,sender:Z});let N=Q1({consensusBranchId:await H1(),expiryHeight:0,lockTime:0,version:4,versionGroupId:U1.SAPLING}),{tx:H,inputs:D}=D1({compiledMemo:G,inputs:L,outputs:_,sender:Z,tx:N});return{inputs:D,outputs:_,tx:H}}function c2(X){let $=_1(X).with({signer:tX.not(tX.nullish)},({signer:q})=>q).with({phrase:tX.string},({phrase:q,derivationPath:G,index:W=0})=>{let U=G||$1[bX.Zcash]||[44,133,0,0,0],L=J1(U,{index:W}),_=e0(L);return M1({derivationPath:_,phrase:q})}).otherwise(()=>{return}),J=$X({chain:bX.Zcash,signer:$});async function j(q){if(!$)throw new JX("toolbox_utxo_no_signer");return await $.signTransaction(q)}async function Q(q){let G=await j(q);return J.broadcastTx(G.toHex())}async function Z({recipient:q,assetValue:G,feeOptionKey:W=X1.Fast,sweep:U,...L}){let _=await $?.getAddress();if(!($&&_))throw new JX("toolbox_utxo_no_signer");let N=L.feeRate||(await J.getFeeRates())[W],{tx:H}=await g2({...L,assetValue:G,feeRate:N,recipient:q,sender:_,sweep:U}),b=(await $.signTransaction(H)).toHex();return J.broadcastTx(b)}function z({phrase:q,derivationPath:G="m/44'/133'/0'/0/0"}){let W=x2(q),L=l2.fromMasterSeed(W).derive(G);if(!L.privateKey||!L.publicKey)throw new JX("toolbox_utxo_invalid_params");return{privateKey:L.privateKey,publicKey:L.publicKey}}function Y({phrase:q,derivationPath:G="m/44'/133'/0'/0/0"}){let W=z({derivationPath:G,phrase:q}),U=X2();return q1(U).encode(W.privateKey)}return{...J,createKeysForPath:z,createTransaction:g2,getPrivateKeyFromMnemonic:Y,signAndBroadcastTransaction:Q,signTransaction:j,transfer:Z,validateAddress:OX}}import{hex as C1}from"@scure/base";import{HDKey as O1}from"@scure/bip32";import{derivationPathToString as k1}from"@swapkit/helpers";function V1({xpub:X,chain:$,count:J,startIndex:j=0,accountIndex:Q}){if(m("count",J),J<1)throw RangeError("count must be at least 1");m("startIndex",j);let Z=E($),z=O1.fromExtendedKey(X,Z.bip32),Y=n({accountIndex:Q,chain:$}),q=ZX(Y),G=[];for(let W of[!1,!0]){let U=z.deriveChild(Number(W));for(let L=0;L<J;L++){let _=j+L,N=U.deriveChild(_);if(!N.publicKey)continue;let H=MX({accountIndex:Q,chain:$,change:W,index:_});G.push({accountIndex:q,address:VX({chain:$,network:Z,publicKey:N.publicKey}),change:W,index:_,path:k1(H),pubkey:C1.encode(N.publicKey)})}}return G}function l8(X,$){switch(X){case _X.BitcoinCash:return S2($||{});case _X.Zcash:return c2($);case _X.Bitcoin:case _X.Dogecoin:case _X.Litecoin:case _X.Dash:return $X({chain:X,...$});default:throw new b1("toolbox_utxo_not_supported",{chain:X})}}export{OX as validateZcashAddress,V2 as validateUtxoAddress,t as validateBchAddress,o as toLegacyAddress,RX as toCashAddress,gX as stripToCashAddress,LX as stripPrefix,mX as nonSegwitChains,W2 as isValidAddress,l8 as getUtxoToolbox,A1 as getUtxoNetwork,I as getUtxoApi,T2 as getUTXOAddressValidator,MX as getUTXOAddressPath,n as getUTXOAccountPath,ZX as getUTXOAccountIndexFromPath,HX as getScriptTypeForAddress,wX as getOutputSize,E as getNetworkForChain,s as getInputSize,CX as getDustThreshold,U2 as detectAddressNetwork,V1 as deriveAddressesFromXpub,c2 as createZcashToolbox,$X as createUTXOToolbox,d2 as createHDWalletHelpers,f1 as createCustomUtxoApi,S2 as createBCHToolbox,R as compileMemo,qX as calculateTxSize,m as assertDerivationIndex,F2 as addressFromKeysGetter,XX as addInputsAndOutputs,S as accumulative,z2 as UtxoNetwork,pX as UTXOScriptType,oX as TX_OVERHEAD,uX as SEGWIT_MARKER_FLAG_WEIGHT,SX as OutputSizes,O0 as OP_RETURN_OVERHEAD,h1 as MIN_TX_FEE,cX as InputSizes};
@@ -3,15 +3,15 @@ import type { AptosCreateTransactionParams, AptosExtensionProvider, AptosToolbox
3
3
  export declare function validateAptosAddress(address: string): boolean;
4
4
  export declare function getAptosToolbox({ derivationPath, provider: providerParam, ...signerParams }?: AptosToolboxParams): {
5
5
  broadcastTransaction: ({ senderAuthenticator, transaction, }: {
6
- senderAuthenticator: Awaited<ReturnType<(transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<import("@aptos-labs/ts-sdk").AccountAuthenticator>>>;
7
- transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>;
6
+ senderAuthenticator: Awaited<ReturnType<(transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, accountSequenceNumber, gasUnitPrice, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<import("@aptos-labs/ts-sdk").AccountAuthenticator>>>;
7
+ transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, accountSequenceNumber, gasUnitPrice, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>;
8
8
  }) => Promise<string>;
9
- createTransaction: ({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>;
9
+ createTransaction: ({ recipient, assetValue, maxGasAmount, sender: _senderAddress, accountSequenceNumber, gasUnitPrice, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>;
10
10
  estimateTransactionFee: (params?: AptosCreateTransactionParams) => Promise<AssetValue>;
11
11
  getAddress: () => Promise<"" | `0x${string}`>;
12
12
  getBalance: (targetAddress?: string) => Promise<AssetValue[]>;
13
- signAndBroadcastTransaction: (transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<string>;
14
- signTransaction: (transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<import("@aptos-labs/ts-sdk").AccountAuthenticator>;
13
+ signAndBroadcastTransaction: (transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, accountSequenceNumber, gasUnitPrice, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<string>;
14
+ signTransaction: (transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, accountSequenceNumber, gasUnitPrice, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<import("@aptos-labs/ts-sdk").AccountAuthenticator>;
15
15
  transfer: ({ assetValue, maxGasAmount, recipient, sweep }: AptosTransferParams) => Promise<string>;
16
16
  validateAddress: typeof validateAptosAddress;
17
17
  };
@@ -4,6 +4,10 @@ import type { getAptosToolbox } from "./toolbox";
4
4
  export type AptosWallet = ReturnType<typeof getAptosToolbox>;
5
5
  export type AptosCreateTransactionParams = Omit<GenericCreateTransactionParams, "feeRate"> & {
6
6
  maxGasAmount?: number;
7
+ /** Pre-fetched account sequence number; when provided, skips the SDK's account lookup. */
8
+ accountSequenceNumber?: number;
9
+ /** Pre-fetched gas unit price; when provided, skips the SDK's gas-price estimation. */
10
+ gasUnitPrice?: number;
7
11
  };
8
12
  export type AptosTransferParams = Omit<GenericTransferParams, "feeRate"> & {
9
13
  maxGasAmount?: number;