@swapkit/toolboxes 5.3.0 → 5.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/{chunk-k50sjysj.js → chunk-4428244x.js} +1 -1
- package/dist/{chunk-s1528ghz.js → chunk-as9fracn.js} +1 -1
- package/dist/chunk-dssawneq.js +1 -0
- package/dist/chunk-rn33j2bm.js +2 -0
- package/dist/src/aleo/index.js +1 -1
- package/dist/src/aptos/index.js +1 -1
- package/dist/src/cardano/index.js +1 -1
- package/dist/src/cosmos/index.js +1 -1
- package/dist/src/evm/index.js +1 -1
- package/dist/src/hypercore/index.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/near/index.js +1 -1
- package/dist/src/radix/index.js +1 -1
- package/dist/src/ripple/index.js +1 -1
- package/dist/src/solana/index.js +1 -1
- package/dist/src/starknet/index.js +1 -1
- package/dist/src/stellar/index.js +1 -1
- package/dist/src/substrate/index.js +1 -1
- package/dist/src/sui/index.js +1 -1
- package/dist/src/ton/index.js +1 -1
- package/dist/src/tron/index.js +1 -1
- package/dist/src/utxo/index.js +1 -1
- package/dist/types/evm/toolbox/evm.d.ts +172 -0
- package/dist/types/evm/types.d.ts +2 -1
- package/dist/types/utxo/__tests__/fixtures/utxo.d.ts +178 -0
- package/dist/types/utxo/helpers/bchaddrjs.d.ts +17 -1
- package/dist/types/utxo/helpers/txSize.d.ts +7 -5
- package/dist/types/utxo/index.d.ts +1 -1
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts +1 -0
- package/dist/types/utxo/toolbox/index.d.ts +1 -1
- package/dist/types/utxo/toolbox/utxo.d.ts +6 -0
- package/dist/types/utxo/toolbox/validators.d.ts +2 -1
- package/dist/types/utxo/toolbox/zcash.d.ts +1 -0
- package/package.json +2 -2
- package/dist/chunk-1ma8fv42.js +0 -2
- package/dist/chunk-z8n8qjs5.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-qsbf0z90.js";import{q as we}from"../../chunk-1ma8fv42.js";import"../../chunk-s1528ghz.js";import"../../chunk-k50sjysj.js";function bt({builder:e,grouping:t="na",orders:n}){return{builder:e,grouping:t,orders:n,type:"order"}}function Tt({cancels:e}){return{cancels:e,type:"cancel"}}function St({cancels:e}){return{cancels:e,type:"cancelByCloid"}}function wt({oid:e,order:t}){return{oid:e,order:t,type:"modify"}}function Ut({modifies:e}){return{modifies:e,type:"batchModify"}}function _t({asset:e,isCross:t,leverage:n}){return{asset:e,isCross:t,leverage:n,type:"updateLeverage"}}function Dt({asset:e,isBuy:t,ntli:n}){return{asset:e,isBuy:t,ntli:n,type:"updateIsolatedMargin"}}function Ot({asset:e,leverage:t}){return{asset:e,leverage:t,type:"topUpIsolatedOnlyMargin"}}function Pt({time:e}){return{time:e,type:"scheduleCancel"}}function kt({amount:e,hyperliquidChain:t,nonce:n,signatureChainId:r,toPerp:i}){return{amount:e,hyperliquidChain:t,nonce:n,signatureChainId:r,toPerp:i,type:"usdClassTransfer"}}function oe({amount:e,destination:t,destinationDex:n,fromSubAccount:r,hyperliquidChain:i,nonce:o,signatureChainId:s,sourceDex:p,token:u}){return{amount:e,destination:t,destinationDex:n,fromSubAccount:r,hyperliquidChain:i,nonce:o,signatureChainId:s,sourceDex:p,token:u,type:"sendAsset"}}function vt({agentAddress:e,agentName:t,hyperliquidChain:n,nonce:r,signatureChainId:i}){return{agentAddress:e,agentName:t,hyperliquidChain:n,nonce:r,signatureChainId:i,type:"approveAgent"}}function Rt({builder:e,hyperliquidChain:t,maxFeeRate:n,nonce:r,signatureChainId:i}){return{builder:e,hyperliquidChain:t,maxFeeRate:n,nonce:r,signatureChainId:i,type:"approveBuilderFee"}}function It({hyperliquidChain:e,isUndelegate:t,nonce:n,signatureChainId:r,validator:i,wei:o}){return{hyperliquidChain:e,isUndelegate:t,nonce:n,signatureChainId:r,type:"tokenDelegate",validator:i,wei:o}}import{SwapKitError as We,SwapKitNumber as Ve}from"@swapkit/helpers";import{HYPERCORE_USDC_TOKEN_ID as B}from"@swapkit/helpers/api";import{SwapKitError as V}from"@swapkit/helpers";import{keccak256 as Ne,Signature as Me}from"ethers";var I="0x0000000000000000000000000000000000000000",D="0xa4b1",q={name:"HyperliquidSignTransaction",verifyingContract:I,version:"1"},Fe={chainId:1337,name:"Exchange",verifyingContract:I,version:"1"},Le={Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]},ae="Mainnet",Q={approveAgent:[{name:"hyperliquidChain",type:"string"},{name:"agentAddress",type:"address"},{name:"agentName",type:"string"},{name:"nonce",type:"uint64"}],approveBuilderFee:[{name:"hyperliquidChain",type:"string"},{name:"maxFeeRate",type:"string"},{name:"builder",type:"address"},{name:"nonce",type:"uint64"}],sendAsset:[{name:"hyperliquidChain",type:"string"},{name:"destination",type:"string"},{name:"sourceDex",type:"string"},{name:"destinationDex",type:"string"},{name:"token",type:"string"},{name:"amount",type:"string"},{name:"fromSubAccount",type:"string"},{name:"nonce",type:"uint64"}],tokenDelegate:[{name:"hyperliquidChain",type:"string"},{name:"validator",type:"address"},{name:"wei",type:"uint64"},{name:"isUndelegate",type:"bool"},{name:"nonce",type:"uint64"}],usdClassTransfer:[{name:"hyperliquidChain",type:"string"},{name:"amount",type:"string"},{name:"toPerp",type:"bool"},{name:"nonce",type:"uint64"}]},G={approveAgent:"HyperliquidTransaction:ApproveAgent",approveBuilderFee:"HyperliquidTransaction:ApproveBuilderFee",sendAsset:"HyperliquidTransaction:SendAsset",tokenDelegate:"HyperliquidTransaction:TokenDelegate",usdClassTransfer:"HyperliquidTransaction:UsdClassTransfer"},je=new TextEncoder;function b(...e){let t=e.reduce((i,o)=>i+o.length,0),n=new Uint8Array(t),r=0;for(let i of e)n.set(i,r),r+=i.length;return n}function Ee(e,t,n){if(n<t)return new Uint8Array([e+n]);if(n<=255)return new Uint8Array([e+t,n]);if(n<=65535)return new Uint8Array([e+t+1,n>>8,n&255]);return new Uint8Array([e+t+2,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}function v(e,t){let n=new Uint8Array(t),r=e;for(let i=t-1;i>=0;i-=1)n[i]=Number(r&0xffn),r>>=8n;return n}function se(e){if(e>=0n){if(e<=0x7fn)return new Uint8Array([Number(e)]);if(e<=0xffn)return new Uint8Array([204,Number(e)]);if(e<=0xffffn)return b(new Uint8Array([205]),v(e,2));if(e<=0xffffffffn)return b(new Uint8Array([206]),v(e,4));return b(new Uint8Array([207]),v(e,8))}if(e>=-32n)return new Uint8Array([256+Number(e)]);if(e>=-128n)return new Uint8Array([208,256+Number(e)]);if(e>=-32768n)return b(new Uint8Array([209]),v(BigInt.asUintN(16,e),2));if(e>=-2147483648n)return b(new Uint8Array([210]),v(BigInt.asUintN(32,e),4));return b(new Uint8Array([211]),v(BigInt.asUintN(64,e),8))}function pe(e){let t=je.encode(e);if(t.length<32)return b(new Uint8Array([160+t.length]),t);return b(Ee(217,0,t.length),t)}function Je(e){let t=e.map((r)=>Y(r)),n=e.length<16?new Uint8Array([144+e.length]):e.length<=65535?new Uint8Array([220,e.length>>8,e.length&255]):new Uint8Array([221,e.length>>>24&255,e.length>>>16&255,e.length>>>8&255,e.length&255]);return b(n,...t)}function ze(e){let t=Object.entries(e).filter(([,r])=>typeof r<"u"),n=t.length<16?new Uint8Array([128+t.length]):t.length<=65535?new Uint8Array([222,t.length>>8,t.length&255]):new Uint8Array([223,t.length>>>24&255,t.length>>>16&255,t.length>>>8&255,t.length&255]);return b(n,...t.flatMap(([r,i])=>[pe(r),Y(i)]))}function Y(e){if(e===null)return new Uint8Array([192]);if(typeof e==="boolean")return new Uint8Array([e?195:194]);if(typeof e==="string")return pe(e);if(typeof e==="number"){if(!Number.isFinite(e)||!Number.isInteger(e))throw new V("helpers_invalid_params",{message:"Hyperliquid msgpack only supports integers"});return se(BigInt(e))}if(typeof e==="bigint")return se(e);if(e instanceof Uint8Array){let t=e.length<=255?new Uint8Array([196,e.length]):e.length<=65535?new Uint8Array([197,e.length>>8,e.length&255]):new Uint8Array([198,e.length>>>24&255,e.length>>>16&255,e.length>>>8&255,e.length&255]);return b(t,e)}if(Array.isArray(e))return Je(e);if(typeof e==="object")return ze(e);throw new V("helpers_invalid_params",{message:`Unsupported Hyperliquid msgpack value: ${String(e)}`})}function Ke(e){let t=e.startsWith("0x")?e.slice(2):e;if(t.length%2!==0||/[^a-fA-F0-9]/u.test(t))throw new V("helpers_invalid_params",{hexValue:e});let n=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)n[r/2]=Number.parseInt(t.slice(r,r+2),16);return n}function ce(e){return{domain:Fe,message:{connectionId:e,source:"a"},primaryType:"Agent",types:{Agent:[...Le.Agent]}}}function de(e){let t=G[e.type],n=Q[e.type],{signatureChainId:r,type:i,...o}=e,s=Number.parseInt(r||D,16);return{domain:{...q,chainId:s},message:{...o,hyperliquidChain:o.hyperliquidChain||ae},primaryType:t,types:{[t]:n}}}function ye(e){let t=Me.from(e);return{r:t.r,s:t.s,v:t.v}}function ue(e,t,{expiresAfter:n,vaultAddress:r}={}){let i=Y(e),o=v(BigInt(t),8),s=r?b(new Uint8Array([1]),Ke(r.toLowerCase())):new Uint8Array([0]),p=typeof n==="number"?b(new Uint8Array([0]),v(BigInt(n),8)):new Uint8Array;return Ne(b(i,o,s,p))}function le(e){let t=e.hyperliquidChain||ae;switch(e.type){case"approveAgent":return{...e,agentAddress:e.agentAddress.toLowerCase(),hyperliquidChain:t};case"approveBuilderFee":return{...e,builder:e.builder.toLowerCase(),hyperliquidChain:t};case"sendAsset":return{...e,destination:e.destination.toLowerCase(),fromSubAccount:e.fromSubAccount.toLowerCase(),hyperliquidChain:t};case"tokenDelegate":return{...e,hyperliquidChain:t,validator:e.validator.toLowerCase()};case"usdClassTransfer":return{...e,hyperliquidChain:t};default:return e}}var ge=Number.parseInt(D,16),Qe=new Set(["chainId","name","verifyingContract","version"]),fe=/^0x[0-9a-fA-F]{40}$/,X=Q.sendAsset;var c=(e)=>{throw new We("toolbox_hypercore_payload_mismatch",{problems:[e]})};function me(e){try{return new URL(e)}catch{return}}function Ce(e){if(!("EIP712Domain"in e.types))return e;let{EIP712Domain:t,...n}=e.types;return{...e,types:n}}function Ae({action:e,allowedEndpoints:t,expectedAmount:n,expectedDestination:r,expectedFromSubAccount:i,expectedSourceDex:o,expectedToken:s,submitTo:p,typedData:u}){let{domain:f,message:S,primaryType:m,types:H}=u,a=G.sendAsset;if(m!==a)c(`primaryType is ${JSON.stringify(m)}, expected "${a}"`);if(e.type!=="sendAsset")c(`action.type is ${JSON.stringify(e.type)}, expected "sendAsset"`);let y=X.map(({name:d})=>d),C=new Set([...y,"signatureChainId","type"]),x=Object.keys(e).filter((d)=>!C.has(d));if(x.length)c(`action carries unexpected keys: ${x.join(", ")}`);for(let{name:d}of X)if(S[d]!==e[d])c(`${d}: signed ${JSON.stringify(S[d])} != submitted ${JSON.stringify(e[d])}`);let A=Object.keys(S),l=A.filter((d)=>!y.includes(d)),T=y.filter((d)=>!A.includes(d));if(l.length||T.length){let d=[l.length?`declares undeclared keys [${l.join(",")}]`:"",T.length?`is missing keys [${T.join(",")}]`:""].filter(Boolean).join(" / ");c(`message ${d}`)}let _=X.map(({name:d,type:W})=>`${d}:${W}`).join(","),w=(H[a]??[]).map(({name:d,type:W})=>`${d}:${W}`).join(",");if(w!==_)c(`types.${a} is [${w}], expected [${_}]`);let R=Object.keys(H).filter((d)=>d!==a&&d!=="EIP712Domain");if(R.length)c(`types carries unexpected entries: ${R.join(", ")}`);if(Number(f.chainId)!==ge)c(`domain.chainId is ${f.chainId}, expected ${ge} (Arbitrum)`);if(f.name!==q.name)c(`domain.name is ${JSON.stringify(f.name)}, expected "${q.name}"`);if(f.version!==q.version)c(`domain.version is ${JSON.stringify(f.version)}, expected "${q.version}"`);if(f.verifyingContract!==I)c(`domain.verifyingContract is ${f.verifyingContract}, expected the zero address`);let k=Object.keys(f).filter((d)=>!Qe.has(d));if(k.length)c(`domain carries unexpected keys: ${k.join(", ")}`);if(typeof e.signatureChainId!=="string"||e.signatureChainId.toLowerCase()!==D)c(`action.signatureChainId is ${JSON.stringify(e.signatureChainId)}, expected "${D}"`);if(e.hyperliquidChain!=="Mainnet")c(`action.hyperliquidChain is ${JSON.stringify(e.hyperliquidChain)}, expected "Mainnet"`);if(typeof e.nonce!=="number"||!Number.isSafeInteger(e.nonce)||e.nonce<=0)c(`action.nonce is ${JSON.stringify(e.nonce)}, expected a positive safe integer`);if(e.destinationDex!=="")c(`action.destinationDex is ${JSON.stringify(e.destinationDex)}, expected ""`);if(s!==B)c(`route sell token is ${JSON.stringify(s)}, expected "${B}"`);if(e.token!==s)c(`action.token is ${JSON.stringify(e.token)}, expected route sell token "${s}"`);if(e.sourceDex!==""&&e.sourceDex!=="spot")c(`action.sourceDex is ${JSON.stringify(e.sourceDex)}, expected "" or "spot"`);if(typeof e.sourceDex!=="string"||e.sourceDex!==o)c(`action.sourceDex is ${JSON.stringify(e.sourceDex)}, expected route sourceDex ${JSON.stringify(o)}`);let L=e.fromSubAccount;if(typeof L!=="string"||typeof i!=="string"||L.toLowerCase()!==i.toLowerCase())c(`action.fromSubAccount is ${JSON.stringify(e.fromSubAccount)}, expected ${JSON.stringify(i)}`);if(i&&!fe.test(i))c(`expectedFromSubAccount ${JSON.stringify(i)} is not a well-formed 0x address`);if(!n)c("expectedAmount is missing — cannot verify action.amount");let j=!1;try{j=new Ve(String(e.amount)).eqValue(n)}catch{c(`action.amount ${JSON.stringify(e.amount)} is not comparable to ${n}`)}if(!j)c(`action.amount ${JSON.stringify(e.amount)} != route sell amount ${n}`);let z=typeof e.destination==="string"?e.destination:"";if(!fe.test(z))c(`action.destination ${JSON.stringify(e.destination)} is not a well-formed 0x address`);if(!r)c("expectedDestination is missing — cannot verify action.destination");if(z.toLowerCase()!==r.toLowerCase())c(`action.destination ${z} != expected destination ${r}`);let re=me(p),K=re?.origin,ie=t.flatMap((d)=>me(d)?.origin??[]);if(re?.protocol!=="https:")c(`submitTo ${JSON.stringify(p)} must be an https URL`);if(!K||!ie.includes(K))c(`submitTo origin ${K} is not one of the allowed exchange origins [${ie.join(", ")}]`)}import{AssetValue as M,Chain as Ge,derivationPathToString as Ye,getChainConfig as Ue,getRPCUrl as Xe,NetworkDerivationPath as Ze,RequestClient as N,SwapKitError as g,SwapKitNumber as O,updateDerivationPath as et}from"@swapkit/helpers";import{SwapKitApi as tt}from"@swapkit/helpers/api";import{HDNodeWallet as nt}from"ethers";import{match as rt,P as Z}from"ts-pattern";var U=Ge.Hype,{baseDecimal:ee,rpcUrls:he}=Ue(U),it=he[0]?`${he[0]}/exchange`:void 0,ot={HYPE:ee,USDC:6,USDT:6},_e="Mainnet",st=/^\d+(?:\.\d+)?$/,at=/^[^:]+:0x[0-9a-fA-F]+$/,pt={spotSend:[{name:"hyperliquidChain",type:"string"},{name:"destination",type:"string"},{name:"token",type:"string"},{name:"amount",type:"string"},{name:"time",type:"uint64"}]},ct={spotSend:"HyperliquidTransaction:SpotSend"};function h(e,t){if(!$e(e))throw new g(t,{address:e});return e.toLowerCase()}function F(e){if(e===void 0)return;try{return new O(e)}catch{return}}var De={retry:{maxRetries:0},timeoutMs:5000};async function P({requestOptions:e,...t}){let n=await E();return N.post(`${n}/info`,{json:t,...e})}function te({dex:e,user:t}){return P({...e?{dex:e}:{},type:"clearinghouseState",user:h(t,"helpers_invalid_params")})}function Oe({user:e}){return P({type:"spotClearinghouseState",user:h(e,"helpers_invalid_params")})}function dt({destination:e,sender:t}){let n=h(t,"helpers_invalid_params"),r=h(e,"helpers_invalid_params");return P({requestOptions:De,source:n,type:"preTransferCheck",user:r})}function yt({dex:e,user:t}){return P({...e?{dex:e}:{},type:"openOrders",user:h(t,"helpers_invalid_params")})}function ut({dex:e,user:t}){return P({...e?{dex:e}:{},type:"frontendOpenOrders",user:h(t,"helpers_invalid_params")})}function lt({oidOrCloid:e,user:t}){return P({oid:e,type:"orderStatus",user:h(t,"helpers_invalid_params")})}function gt({aggregateByTime:e,user:t}){return P({...typeof e==="boolean"?{aggregateByTime:e}:{},type:"userFills",user:h(t,"helpers_invalid_params")})}function ft({aggregateByTime:e,endTime:t,startTime:n,user:r}){return P({...typeof e==="boolean"?{aggregateByTime:e}:{},...typeof t==="number"?{endTime:t}:{},startTime:n,type:"userFillsByTime",user:h(r,"helpers_invalid_params")})}function He({coin:e,token:t,value:n,spotMeta:r}){if(!n||Number(n)<=0)return null;let i=e?.toUpperCase()||`TOKEN-${t||"UNKNOWN"}`,o=r?.tokens?.find((u)=>u.name===e||t!==void 0&&u.index===Number(t)),s=o?.weiDecimals??ot[i]??ee,p=o?`${U}.${i}-${o.name}:${o.tokenId}`:`${U}.${i}`;return new M({decimal:s,identifier:p,value:n})}function mt(e){let t=new Map;for(let n of e){let r=n.toString({includeSynthProtocol:!0}),i=t.get(r);t.set(r,i?i.add(n):n)}if(![...t.values()].some((n)=>n.isGasAsset||n.ticker==="HYPE")){let n=M.from({chain:U,value:0});t.set(n.toString({includeSynthProtocol:!0}),n)}return[...t.values()]}async function E(){try{return await Xe(U)}catch{let[e]=Ue(U).rpcUrls;if(!e)throw new g("helpers_chain_no_public_or_set_rpc_url",{chain:U});return e}}async function J(){return`${await E()}/exchange`}function Ct(e){let t=ct[e.type],{type:n,...r}=e;return{domain:{chainId:Number.parseInt(e.signatureChainId,16),name:"HyperliquidSignTransaction",verifyingContract:I,version:"1"},message:r,primaryType:t,types:{[t]:pt[n]}}}async function At({action:e,expiresAfter:t,nonce:n,vaultAddress:r}){let i=n||Date.now(),o=r?h(r,"helpers_invalid_params"):void 0,s=await J(),p=ue(e,i,{expiresAfter:t,vaultAddress:o});return{action:e,endpoint:s,expiresAfter:t,nonce:i,typedData:ce(p),vaultAddress:o}}async function Pe({action:e,endpoint:t,nonce:n,signatureChainId:r}){let i=n||e.nonce||Date.now(),o=r||e.signatureChainId||D,s=le({...e,nonce:i,signatureChainId:o});return{action:s,endpoint:t??await J(),nonce:i,typedData:de(s)}}async function ne({token:e,user:t}){let n=await Oe({user:t}),i=(n.spotState?.balances||n.balances||[]).find(({coin:p})=>p&&e.startsWith(`${p}:`)),o=F(i?.total||0),s=F(i?.hold||0);return o&&s?o.sub(s):void 0}async function ke({assetValue:e,sender:t,token:n}){let r=(await ne({token:n,user:t}))?.getValue("string");if(!r||Number(r)<=0)throw new g("toolbox_sweep_amount_too_low",{asset:e.toString(),balance:r||"0"});return r}async function ht(e){if(e.address&&at.test(e.address))return e.address;let n=(await P({type:"spotMeta"}))?.tokens?.find(({name:r})=>r?.toUpperCase()===e.ticker.toUpperCase());if(n)return`${n.name}:${n.tokenId}`;throw new g("helpers_invalid_params",{asset:e.toString(),message:"Unable to resolve the HyperCore spot token id"})}async function ve({destination:e,sender:t}){let n;try{n=await dt({destination:e,sender:t})}catch(o){throw new g("toolbox_hypercore_pre_transfer_check_failed",o)}if(typeof n?.isSanctioned!=="boolean"||typeof n.userExists!=="boolean")throw new g("toolbox_hypercore_pre_transfer_check_failed",{response:n});let{fee:r}=n,i=typeof r==="string"&&st.test(r)?Number(r):Number.NaN;if(!Number.isFinite(i))throw new g("toolbox_hypercore_pre_transfer_check_failed",{response:n});if(n.isSanctioned)throw new g("toolbox_hypercore_destination_sanctioned",{destination:e,sender:t});return i}function Re(e){return e.toUpperCase().startsWith("USDC:")}async function Ie({activationFee:e,token:t,user:n}){if(e<=0)return;let[r,i]=await Promise.all([te({user:n}),ne({token:B,user:n})]),o=F(r.withdrawable||"0")??new O(0),s=i??new O(0);if(new O(e).lte(o)||new O(e).lte(s))return;throw new g("toolbox_hypercore_insufficient_balance",{activationFee:e,feeToken:B,perpsWithdrawable:o.getValue("string"),spotAvailable:s.getValue("string"),token:t})}async function qe({activationFee:e,amount:t,sourceDex:n,token:r,user:i}){let o=Re(r),s=o?new O(t).add(e):new O(t);if(n!==void 0&&n!==""&&n!=="spot")throw new g("helpers_invalid_params",{message:"Unsupported HyperCore sourceDex",sourceDex:n});if(!o&&n==="")throw new g("helpers_invalid_params",{message:"Only a collateral token can be sent from a perp DEX",sourceDex:n,token:r});let p="0";if(o&&n!=="spot"){if(p=(await te({user:i})).withdrawable||"0",s.lte(F(p)??0))return"";if(n==="")throw new g("toolbox_hypercore_insufficient_balance",{amountRequired:s.getValue("string"),perpsWithdrawable:p,spotAvailable:"0",token:r})}let u=await ne({token:r,user:i})??new O(0);if(u.gte(s)){if(!o)await Ie({activationFee:e,token:r,user:i});return"spot"}throw new g("toolbox_hypercore_insufficient_balance",{amountRequired:s.getValue("string"),perpsWithdrawable:p,spotAvailable:u.getValue("string"),token:r})}async function Ht({amount:e,destination:t,sender:n,sourceDex:r,sweep:i,token:o}){if(i&&r!==void 0&&r!=="spot")throw new g("helpers_invalid_params",{message:"HyperCore sweep drains spot and requires sourceDex spot",sourceDex:r});let s=await ve({destination:t,sender:n});if(!i){let u=await qe({activationFee:s,amount:e,sourceDex:r,token:o,user:n});return{amount:e,sourceDex:u}}if(!Re(o))return await Ie({activationFee:s,token:o,user:n}),{amount:e,sourceDex:"spot"};if(s<=0)return{amount:e,sourceDex:"spot"};let p=new O(e).sub(s);if(p.lte(0))throw new g("toolbox_hypercore_insufficient_balance",{activationFee:s,spotAvailable:e,token:o});return{amount:p.getValue("string"),sourceDex:"spot"}}async function xt({assetValue:e,recipient:t,sender:n,signatureChainId:r,sweep:i,time:o,endpoint:s}){let p=h(t,"core_transaction_invalid_recipient_address"),u=h(n,"core_transaction_invalid_sender_address"),f=e.address;if(!f)throw new g("helpers_invalid_params",{asset:e.toString(),from:u});let S=i?await ke({assetValue:e,sender:u,token:f}):e.getValue("string"),m=s??await J(),H=o||Date.now(),a={amount:S,destination:p,hyperliquidChain:_e,signatureChainId:r||D,time:H,token:f,type:"spotSend"};return{action:a,endpoint:m,nonce:H,typedData:Ct(a)}}async function xe({assetValue:e,destinationDex:t,endpoint:n,fromSubAccount:r,recipient:i,sender:o,signatureChainId:s,sourceDex:p,sweep:u,time:f}){let S=h(i,"core_transaction_invalid_recipient_address"),m=h(o,"core_transaction_invalid_sender_address"),H=r?h(r,"helpers_invalid_params"):"",a=H||m,y=await ht(e),C=u?await ke({assetValue:e,sender:a,token:y}):e.getValue("string"),{amount:x,sourceDex:A}=await Ht({amount:C,destination:S,sender:a,sourceDex:p,sweep:u,token:y}),l=oe({amount:x,destination:S,destinationDex:t??"spot",fromSubAccount:H,hyperliquidChain:_e,nonce:f||Date.now(),signatureChainId:s||D,sourceDex:A,token:y});return Pe({action:l,endpoint:n})}async function Be(e){let t=await N.post(e.endpoint,{json:{action:e.action,...typeof e.expiresAfter==="number"?{expiresAfter:e.expiresAfter}:{},nonce:e.nonce,signature:e.signature,vaultAddress:e.vaultAddress??null},retry:{maxRetries:0}});if(t?.status!=="ok")throw new g("core_transaction_failed",{definitive:t?.status==="err",response:t});return t}async function be({amount:e,destination:t,nonce:n,token:r,user:i}){let o=h(i,"helpers_invalid_params"),s=await E(),p=n-5000,u=t?.toLowerCase(),f=r?.toUpperCase(),S=({delta:m,time:H})=>{if(!(H&&H>=p&&m?.type==="send"&&m.nonce===n))return!1;if(u&&m?.destination?.toLowerCase()!==u)return!1;let a=F(m?.amount);if(e!==void 0&&!a?.eqValue(e))return!1;if(f!==void 0){if(!m?.token)return!1;let y=m.token.toUpperCase();if(y!==f&&!f.startsWith(`${y}:`))return!1}return!0};for(let m=0;m<8;m++){if(m>0)await new Promise((H)=>setTimeout(H,1500));try{let H=await N.post(`${s}/info`,{json:{startTime:p,type:"userNonFundingLedgerUpdates",user:o},...De}),a=Array.isArray(H)?H.find(S):void 0;if(a?.hash)return a.hash}catch{}}return""}async function Te({kind:e,lookup:t,signed:n}){try{await Be(n)}catch(i){if(i instanceof g&&i.errorKey==="core_transaction_failed"&&i.cause?.definitive===!0)throw i;let s=await be(t);if(s)return s;throw new g("toolbox_hypercore_transfer_hash_not_found",{broadcast:"unknown",guidance:"Delivery of this broadcast is unknown and the nonce is single-use — do not retry or re-sign; check the account ledger for the transfer first.",nonce:t.nonce,transportError:String(i)})}let r=await be(t);if(!r)throw new g("toolbox_hypercore_transfer_hash_not_found",{broadcast:"accepted",guidance:`Do not retry or re-sign — the exchange accepted this nonce, so re-submitting risks a duplicate ${e}. Check the account ledger for the transfer first.`,nonce:t.nonce});return r}function Se({action:e,nonce:t,user:n}){return{amount:e.amount,destination:e.destination,nonce:t,token:e.token,user:n}}function $e(e){return e.startsWith("0x")&&we(e)}function Yt(e){let t=e&&"index"in e?e.index||0:0,n=Ye(e&&"derivationPath"in e&&e.derivationPath?e.derivationPath:et(Ze[U],{index:t})),r,i=!1;function o(){if(i)return r;return r=rt(e).with({phrase:Z.string},({phrase:a})=>nt.fromPhrase(a,void 0,n)).with({signer:Z.not(Z.nullish)},({signer:a})=>a).otherwise(()=>{return}),i=!0,r}async function s(){let a=o();return a?await a.getAddress():""}async function p(a){let y=o();if(!y)throw new g("toolbox_hypercore_no_signer");let C=Ce(a.typedData),x=await y.signTypedData(C.domain,C.types,C.message);return{action:a.action,endpoint:a.endpoint,nonce:a.nonce,signature:ye(x),..."expiresAfter"in a?{expiresAfter:a.expiresAfter}:{},..."vaultAddress"in a?{vaultAddress:a.vaultAddress}:{}}}async function u(a){let y=h(a,"helpers_invalid_params"),C=await E(),[x,A,l]=await Promise.all([N.post(`${C}/info`,{json:{type:"spotClearinghouseState",user:y}}),N.post(`${C}/info`,{json:{type:"clearinghouseState",user:y}}),N.post(`${C}/info`,{json:{type:"spotMeta"}})]),T=(x.spotState?.balances||x.balances||[]).map(({coin:w,token:R,total:k})=>He({coin:w,spotMeta:l,token:R,value:k})).filter((w)=>!!w),_=He({coin:"USDC",spotMeta:l,value:A.withdrawable||A.marginSummary?.accountValue||A.marginSummary?.totalRawUsd});return mt(_?[...T,_]:T)}async function f(a,y=!0){let C=h(a,"helpers_invalid_params");try{let x=await tt.getChainBalance({address:C,chain:U,scamFilter:y});if(x.length){let A=x.map(({identifier:T,value:_,decimal:w})=>new M({decimal:w||ee,identifier:T,value:_}));return A.some((T)=>T.isGasAsset)?A:[M.from({chain:U}),...A]}}catch{}return u(C)}async function S({sweep:a,...y}){let C=o();if(!C)throw new g("toolbox_hypercore_no_signer");let x=y.sender||await C.getAddress(),A=await xe({...y,feeRate:0,sender:x,sweep:a}),l=await p(A);return Te({kind:"transfer",lookup:Se({action:A.action,nonce:A.nonce,user:A.action.fromSubAccount||x}),signed:l})}async function m(a){let y=o();if(!y)throw new g("toolbox_hypercore_no_signer");let{action:C,typedData:x,...A}=a,l=structuredClone(C),T=structuredClone(x),_=await y.getAddress(),w=await J(),R=[...new Set([w,it??w])];Ae({...A,action:l,allowedEndpoints:R,typedData:T});let k=l.fromSubAccount?h(l.fromSubAccount,"helpers_invalid_params"):_,L=await ve({destination:l.destination,sender:k});await qe({activationFee:L,amount:l.amount,sourceDex:l.sourceDex,token:l.token,user:k});let j=await p({action:l,endpoint:w,nonce:l.nonce,typedData:T});return Te({kind:"payin",lookup:Se({action:l,nonce:l.nonce,user:k}),signed:j})}function H(){return M.from({chain:U,value:0})}return{broadcastTransaction:Be,createL1ActionRequest:At,createSendAssetTransaction:xe,createTransaction:xt,createUserSignedActionRequest:Pe,estimateTransactionFee:H,getAddress:s,getBalance:f,getBalanceFromChain:u,getState:{clearinghouse:te,frontendOpenOrders:ut,openOrders:yt,orderStatus:lt,spotClearinghouse:Oe,userFills:gt,userFillsByTime:ft},signAndBroadcastSendAsset:m,signTransaction:p,transfer:S,validateAddress:$e}}export{B as HYPERCORE_USDC_TOKEN_ID,vt as buildApproveAgentAction,Rt as buildApproveBuilderFeeAction,Ut as buildBatchModifyAction,Tt as buildCancelAction,St as buildCancelByCloidAction,wt as buildModifyAction,bt as buildOrderAction,Pt as buildScheduleCancelAction,oe as buildSendAssetAction,It as buildTokenDelegateAction,Ot as buildTopUpIsolatedOnlyMarginAction,Dt as buildUpdateIsolatedMarginAction,_t as buildUpdateLeverageAction,kt as buildUsdClassTransferAction,At as createL1ActionRequest,xe as createSendAssetTransaction,xt as createTransaction,Pe as createUserSignedActionRequest,Yt as getHyperCoreToolbox,$e as validateHyperCoreAddress};
|
|
1
|
+
import"../../chunk-qsbf0z90.js";import{q as we}from"../../chunk-rn33j2bm.js";import"../../chunk-as9fracn.js";import"../../chunk-4428244x.js";function bt({builder:e,grouping:t="na",orders:n}){return{builder:e,grouping:t,orders:n,type:"order"}}function Tt({cancels:e}){return{cancels:e,type:"cancel"}}function St({cancels:e}){return{cancels:e,type:"cancelByCloid"}}function wt({oid:e,order:t}){return{oid:e,order:t,type:"modify"}}function Ut({modifies:e}){return{modifies:e,type:"batchModify"}}function _t({asset:e,isCross:t,leverage:n}){return{asset:e,isCross:t,leverage:n,type:"updateLeverage"}}function Dt({asset:e,isBuy:t,ntli:n}){return{asset:e,isBuy:t,ntli:n,type:"updateIsolatedMargin"}}function Ot({asset:e,leverage:t}){return{asset:e,leverage:t,type:"topUpIsolatedOnlyMargin"}}function Pt({time:e}){return{time:e,type:"scheduleCancel"}}function kt({amount:e,hyperliquidChain:t,nonce:n,signatureChainId:r,toPerp:i}){return{amount:e,hyperliquidChain:t,nonce:n,signatureChainId:r,toPerp:i,type:"usdClassTransfer"}}function oe({amount:e,destination:t,destinationDex:n,fromSubAccount:r,hyperliquidChain:i,nonce:o,signatureChainId:s,sourceDex:p,token:u}){return{amount:e,destination:t,destinationDex:n,fromSubAccount:r,hyperliquidChain:i,nonce:o,signatureChainId:s,sourceDex:p,token:u,type:"sendAsset"}}function vt({agentAddress:e,agentName:t,hyperliquidChain:n,nonce:r,signatureChainId:i}){return{agentAddress:e,agentName:t,hyperliquidChain:n,nonce:r,signatureChainId:i,type:"approveAgent"}}function Rt({builder:e,hyperliquidChain:t,maxFeeRate:n,nonce:r,signatureChainId:i}){return{builder:e,hyperliquidChain:t,maxFeeRate:n,nonce:r,signatureChainId:i,type:"approveBuilderFee"}}function It({hyperliquidChain:e,isUndelegate:t,nonce:n,signatureChainId:r,validator:i,wei:o}){return{hyperliquidChain:e,isUndelegate:t,nonce:n,signatureChainId:r,type:"tokenDelegate",validator:i,wei:o}}import{SwapKitError as We,SwapKitNumber as Ve}from"@swapkit/helpers";import{HYPERCORE_USDC_TOKEN_ID as B}from"@swapkit/helpers/api";import{SwapKitError as V}from"@swapkit/helpers";import{keccak256 as Ne,Signature as Me}from"ethers";var I="0x0000000000000000000000000000000000000000",D="0xa4b1",q={name:"HyperliquidSignTransaction",verifyingContract:I,version:"1"},Fe={chainId:1337,name:"Exchange",verifyingContract:I,version:"1"},Le={Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]},ae="Mainnet",Q={approveAgent:[{name:"hyperliquidChain",type:"string"},{name:"agentAddress",type:"address"},{name:"agentName",type:"string"},{name:"nonce",type:"uint64"}],approveBuilderFee:[{name:"hyperliquidChain",type:"string"},{name:"maxFeeRate",type:"string"},{name:"builder",type:"address"},{name:"nonce",type:"uint64"}],sendAsset:[{name:"hyperliquidChain",type:"string"},{name:"destination",type:"string"},{name:"sourceDex",type:"string"},{name:"destinationDex",type:"string"},{name:"token",type:"string"},{name:"amount",type:"string"},{name:"fromSubAccount",type:"string"},{name:"nonce",type:"uint64"}],tokenDelegate:[{name:"hyperliquidChain",type:"string"},{name:"validator",type:"address"},{name:"wei",type:"uint64"},{name:"isUndelegate",type:"bool"},{name:"nonce",type:"uint64"}],usdClassTransfer:[{name:"hyperliquidChain",type:"string"},{name:"amount",type:"string"},{name:"toPerp",type:"bool"},{name:"nonce",type:"uint64"}]},G={approveAgent:"HyperliquidTransaction:ApproveAgent",approveBuilderFee:"HyperliquidTransaction:ApproveBuilderFee",sendAsset:"HyperliquidTransaction:SendAsset",tokenDelegate:"HyperliquidTransaction:TokenDelegate",usdClassTransfer:"HyperliquidTransaction:UsdClassTransfer"},je=new TextEncoder;function b(...e){let t=e.reduce((i,o)=>i+o.length,0),n=new Uint8Array(t),r=0;for(let i of e)n.set(i,r),r+=i.length;return n}function Ee(e,t,n){if(n<t)return new Uint8Array([e+n]);if(n<=255)return new Uint8Array([e+t,n]);if(n<=65535)return new Uint8Array([e+t+1,n>>8,n&255]);return new Uint8Array([e+t+2,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}function v(e,t){let n=new Uint8Array(t),r=e;for(let i=t-1;i>=0;i-=1)n[i]=Number(r&0xffn),r>>=8n;return n}function se(e){if(e>=0n){if(e<=0x7fn)return new Uint8Array([Number(e)]);if(e<=0xffn)return new Uint8Array([204,Number(e)]);if(e<=0xffffn)return b(new Uint8Array([205]),v(e,2));if(e<=0xffffffffn)return b(new Uint8Array([206]),v(e,4));return b(new Uint8Array([207]),v(e,8))}if(e>=-32n)return new Uint8Array([256+Number(e)]);if(e>=-128n)return new Uint8Array([208,256+Number(e)]);if(e>=-32768n)return b(new Uint8Array([209]),v(BigInt.asUintN(16,e),2));if(e>=-2147483648n)return b(new Uint8Array([210]),v(BigInt.asUintN(32,e),4));return b(new Uint8Array([211]),v(BigInt.asUintN(64,e),8))}function pe(e){let t=je.encode(e);if(t.length<32)return b(new Uint8Array([160+t.length]),t);return b(Ee(217,0,t.length),t)}function Je(e){let t=e.map((r)=>Y(r)),n=e.length<16?new Uint8Array([144+e.length]):e.length<=65535?new Uint8Array([220,e.length>>8,e.length&255]):new Uint8Array([221,e.length>>>24&255,e.length>>>16&255,e.length>>>8&255,e.length&255]);return b(n,...t)}function ze(e){let t=Object.entries(e).filter(([,r])=>typeof r<"u"),n=t.length<16?new Uint8Array([128+t.length]):t.length<=65535?new Uint8Array([222,t.length>>8,t.length&255]):new Uint8Array([223,t.length>>>24&255,t.length>>>16&255,t.length>>>8&255,t.length&255]);return b(n,...t.flatMap(([r,i])=>[pe(r),Y(i)]))}function Y(e){if(e===null)return new Uint8Array([192]);if(typeof e==="boolean")return new Uint8Array([e?195:194]);if(typeof e==="string")return pe(e);if(typeof e==="number"){if(!Number.isFinite(e)||!Number.isInteger(e))throw new V("helpers_invalid_params",{message:"Hyperliquid msgpack only supports integers"});return se(BigInt(e))}if(typeof e==="bigint")return se(e);if(e instanceof Uint8Array){let t=e.length<=255?new Uint8Array([196,e.length]):e.length<=65535?new Uint8Array([197,e.length>>8,e.length&255]):new Uint8Array([198,e.length>>>24&255,e.length>>>16&255,e.length>>>8&255,e.length&255]);return b(t,e)}if(Array.isArray(e))return Je(e);if(typeof e==="object")return ze(e);throw new V("helpers_invalid_params",{message:`Unsupported Hyperliquid msgpack value: ${String(e)}`})}function Ke(e){let t=e.startsWith("0x")?e.slice(2):e;if(t.length%2!==0||/[^a-fA-F0-9]/u.test(t))throw new V("helpers_invalid_params",{hexValue:e});let n=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)n[r/2]=Number.parseInt(t.slice(r,r+2),16);return n}function ce(e){return{domain:Fe,message:{connectionId:e,source:"a"},primaryType:"Agent",types:{Agent:[...Le.Agent]}}}function de(e){let t=G[e.type],n=Q[e.type],{signatureChainId:r,type:i,...o}=e,s=Number.parseInt(r||D,16);return{domain:{...q,chainId:s},message:{...o,hyperliquidChain:o.hyperliquidChain||ae},primaryType:t,types:{[t]:n}}}function ye(e){let t=Me.from(e);return{r:t.r,s:t.s,v:t.v}}function ue(e,t,{expiresAfter:n,vaultAddress:r}={}){let i=Y(e),o=v(BigInt(t),8),s=r?b(new Uint8Array([1]),Ke(r.toLowerCase())):new Uint8Array([0]),p=typeof n==="number"?b(new Uint8Array([0]),v(BigInt(n),8)):new Uint8Array;return Ne(b(i,o,s,p))}function le(e){let t=e.hyperliquidChain||ae;switch(e.type){case"approveAgent":return{...e,agentAddress:e.agentAddress.toLowerCase(),hyperliquidChain:t};case"approveBuilderFee":return{...e,builder:e.builder.toLowerCase(),hyperliquidChain:t};case"sendAsset":return{...e,destination:e.destination.toLowerCase(),fromSubAccount:e.fromSubAccount.toLowerCase(),hyperliquidChain:t};case"tokenDelegate":return{...e,hyperliquidChain:t,validator:e.validator.toLowerCase()};case"usdClassTransfer":return{...e,hyperliquidChain:t};default:return e}}var ge=Number.parseInt(D,16),Qe=new Set(["chainId","name","verifyingContract","version"]),fe=/^0x[0-9a-fA-F]{40}$/,X=Q.sendAsset;var c=(e)=>{throw new We("toolbox_hypercore_payload_mismatch",{problems:[e]})};function me(e){try{return new URL(e)}catch{return}}function Ce(e){if(!("EIP712Domain"in e.types))return e;let{EIP712Domain:t,...n}=e.types;return{...e,types:n}}function Ae({action:e,allowedEndpoints:t,expectedAmount:n,expectedDestination:r,expectedFromSubAccount:i,expectedSourceDex:o,expectedToken:s,submitTo:p,typedData:u}){let{domain:f,message:S,primaryType:m,types:H}=u,a=G.sendAsset;if(m!==a)c(`primaryType is ${JSON.stringify(m)}, expected "${a}"`);if(e.type!=="sendAsset")c(`action.type is ${JSON.stringify(e.type)}, expected "sendAsset"`);let y=X.map(({name:d})=>d),C=new Set([...y,"signatureChainId","type"]),x=Object.keys(e).filter((d)=>!C.has(d));if(x.length)c(`action carries unexpected keys: ${x.join(", ")}`);for(let{name:d}of X)if(S[d]!==e[d])c(`${d}: signed ${JSON.stringify(S[d])} != submitted ${JSON.stringify(e[d])}`);let A=Object.keys(S),l=A.filter((d)=>!y.includes(d)),T=y.filter((d)=>!A.includes(d));if(l.length||T.length){let d=[l.length?`declares undeclared keys [${l.join(",")}]`:"",T.length?`is missing keys [${T.join(",")}]`:""].filter(Boolean).join(" / ");c(`message ${d}`)}let _=X.map(({name:d,type:W})=>`${d}:${W}`).join(","),w=(H[a]??[]).map(({name:d,type:W})=>`${d}:${W}`).join(",");if(w!==_)c(`types.${a} is [${w}], expected [${_}]`);let R=Object.keys(H).filter((d)=>d!==a&&d!=="EIP712Domain");if(R.length)c(`types carries unexpected entries: ${R.join(", ")}`);if(Number(f.chainId)!==ge)c(`domain.chainId is ${f.chainId}, expected ${ge} (Arbitrum)`);if(f.name!==q.name)c(`domain.name is ${JSON.stringify(f.name)}, expected "${q.name}"`);if(f.version!==q.version)c(`domain.version is ${JSON.stringify(f.version)}, expected "${q.version}"`);if(f.verifyingContract!==I)c(`domain.verifyingContract is ${f.verifyingContract}, expected the zero address`);let k=Object.keys(f).filter((d)=>!Qe.has(d));if(k.length)c(`domain carries unexpected keys: ${k.join(", ")}`);if(typeof e.signatureChainId!=="string"||e.signatureChainId.toLowerCase()!==D)c(`action.signatureChainId is ${JSON.stringify(e.signatureChainId)}, expected "${D}"`);if(e.hyperliquidChain!=="Mainnet")c(`action.hyperliquidChain is ${JSON.stringify(e.hyperliquidChain)}, expected "Mainnet"`);if(typeof e.nonce!=="number"||!Number.isSafeInteger(e.nonce)||e.nonce<=0)c(`action.nonce is ${JSON.stringify(e.nonce)}, expected a positive safe integer`);if(e.destinationDex!=="")c(`action.destinationDex is ${JSON.stringify(e.destinationDex)}, expected ""`);if(s!==B)c(`route sell token is ${JSON.stringify(s)}, expected "${B}"`);if(e.token!==s)c(`action.token is ${JSON.stringify(e.token)}, expected route sell token "${s}"`);if(e.sourceDex!==""&&e.sourceDex!=="spot")c(`action.sourceDex is ${JSON.stringify(e.sourceDex)}, expected "" or "spot"`);if(typeof e.sourceDex!=="string"||e.sourceDex!==o)c(`action.sourceDex is ${JSON.stringify(e.sourceDex)}, expected route sourceDex ${JSON.stringify(o)}`);let L=e.fromSubAccount;if(typeof L!=="string"||typeof i!=="string"||L.toLowerCase()!==i.toLowerCase())c(`action.fromSubAccount is ${JSON.stringify(e.fromSubAccount)}, expected ${JSON.stringify(i)}`);if(i&&!fe.test(i))c(`expectedFromSubAccount ${JSON.stringify(i)} is not a well-formed 0x address`);if(!n)c("expectedAmount is missing — cannot verify action.amount");let j=!1;try{j=new Ve(String(e.amount)).eqValue(n)}catch{c(`action.amount ${JSON.stringify(e.amount)} is not comparable to ${n}`)}if(!j)c(`action.amount ${JSON.stringify(e.amount)} != route sell amount ${n}`);let z=typeof e.destination==="string"?e.destination:"";if(!fe.test(z))c(`action.destination ${JSON.stringify(e.destination)} is not a well-formed 0x address`);if(!r)c("expectedDestination is missing — cannot verify action.destination");if(z.toLowerCase()!==r.toLowerCase())c(`action.destination ${z} != expected destination ${r}`);let re=me(p),K=re?.origin,ie=t.flatMap((d)=>me(d)?.origin??[]);if(re?.protocol!=="https:")c(`submitTo ${JSON.stringify(p)} must be an https URL`);if(!K||!ie.includes(K))c(`submitTo origin ${K} is not one of the allowed exchange origins [${ie.join(", ")}]`)}import{AssetValue as M,Chain as Ge,derivationPathToString as Ye,getChainConfig as Ue,getRPCUrl as Xe,NetworkDerivationPath as Ze,RequestClient as N,SwapKitError as g,SwapKitNumber as O,updateDerivationPath as et}from"@swapkit/helpers";import{SwapKitApi as tt}from"@swapkit/helpers/api";import{HDNodeWallet as nt}from"ethers";import{match as rt,P as Z}from"ts-pattern";var U=Ge.Hype,{baseDecimal:ee,rpcUrls:he}=Ue(U),it=he[0]?`${he[0]}/exchange`:void 0,ot={HYPE:ee,USDC:6,USDT:6},_e="Mainnet",st=/^\d+(?:\.\d+)?$/,at=/^[^:]+:0x[0-9a-fA-F]+$/,pt={spotSend:[{name:"hyperliquidChain",type:"string"},{name:"destination",type:"string"},{name:"token",type:"string"},{name:"amount",type:"string"},{name:"time",type:"uint64"}]},ct={spotSend:"HyperliquidTransaction:SpotSend"};function h(e,t){if(!$e(e))throw new g(t,{address:e});return e.toLowerCase()}function F(e){if(e===void 0)return;try{return new O(e)}catch{return}}var De={retry:{maxRetries:0},timeoutMs:5000};async function P({requestOptions:e,...t}){let n=await E();return N.post(`${n}/info`,{json:t,...e})}function te({dex:e,user:t}){return P({...e?{dex:e}:{},type:"clearinghouseState",user:h(t,"helpers_invalid_params")})}function Oe({user:e}){return P({type:"spotClearinghouseState",user:h(e,"helpers_invalid_params")})}function dt({destination:e,sender:t}){let n=h(t,"helpers_invalid_params"),r=h(e,"helpers_invalid_params");return P({requestOptions:De,source:n,type:"preTransferCheck",user:r})}function yt({dex:e,user:t}){return P({...e?{dex:e}:{},type:"openOrders",user:h(t,"helpers_invalid_params")})}function ut({dex:e,user:t}){return P({...e?{dex:e}:{},type:"frontendOpenOrders",user:h(t,"helpers_invalid_params")})}function lt({oidOrCloid:e,user:t}){return P({oid:e,type:"orderStatus",user:h(t,"helpers_invalid_params")})}function gt({aggregateByTime:e,user:t}){return P({...typeof e==="boolean"?{aggregateByTime:e}:{},type:"userFills",user:h(t,"helpers_invalid_params")})}function ft({aggregateByTime:e,endTime:t,startTime:n,user:r}){return P({...typeof e==="boolean"?{aggregateByTime:e}:{},...typeof t==="number"?{endTime:t}:{},startTime:n,type:"userFillsByTime",user:h(r,"helpers_invalid_params")})}function He({coin:e,token:t,value:n,spotMeta:r}){if(!n||Number(n)<=0)return null;let i=e?.toUpperCase()||`TOKEN-${t||"UNKNOWN"}`,o=r?.tokens?.find((u)=>u.name===e||t!==void 0&&u.index===Number(t)),s=o?.weiDecimals??ot[i]??ee,p=o?`${U}.${i}-${o.name}:${o.tokenId}`:`${U}.${i}`;return new M({decimal:s,identifier:p,value:n})}function mt(e){let t=new Map;for(let n of e){let r=n.toString({includeSynthProtocol:!0}),i=t.get(r);t.set(r,i?i.add(n):n)}if(![...t.values()].some((n)=>n.isGasAsset||n.ticker==="HYPE")){let n=M.from({chain:U,value:0});t.set(n.toString({includeSynthProtocol:!0}),n)}return[...t.values()]}async function E(){try{return await Xe(U)}catch{let[e]=Ue(U).rpcUrls;if(!e)throw new g("helpers_chain_no_public_or_set_rpc_url",{chain:U});return e}}async function J(){return`${await E()}/exchange`}function Ct(e){let t=ct[e.type],{type:n,...r}=e;return{domain:{chainId:Number.parseInt(e.signatureChainId,16),name:"HyperliquidSignTransaction",verifyingContract:I,version:"1"},message:r,primaryType:t,types:{[t]:pt[n]}}}async function At({action:e,expiresAfter:t,nonce:n,vaultAddress:r}){let i=n||Date.now(),o=r?h(r,"helpers_invalid_params"):void 0,s=await J(),p=ue(e,i,{expiresAfter:t,vaultAddress:o});return{action:e,endpoint:s,expiresAfter:t,nonce:i,typedData:ce(p),vaultAddress:o}}async function Pe({action:e,endpoint:t,nonce:n,signatureChainId:r}){let i=n||e.nonce||Date.now(),o=r||e.signatureChainId||D,s=le({...e,nonce:i,signatureChainId:o});return{action:s,endpoint:t??await J(),nonce:i,typedData:de(s)}}async function ne({token:e,user:t}){let n=await Oe({user:t}),i=(n.spotState?.balances||n.balances||[]).find(({coin:p})=>p&&e.startsWith(`${p}:`)),o=F(i?.total||0),s=F(i?.hold||0);return o&&s?o.sub(s):void 0}async function ke({assetValue:e,sender:t,token:n}){let r=(await ne({token:n,user:t}))?.getValue("string");if(!r||Number(r)<=0)throw new g("toolbox_sweep_amount_too_low",{asset:e.toString(),balance:r||"0"});return r}async function ht(e){if(e.address&&at.test(e.address))return e.address;let n=(await P({type:"spotMeta"}))?.tokens?.find(({name:r})=>r?.toUpperCase()===e.ticker.toUpperCase());if(n)return`${n.name}:${n.tokenId}`;throw new g("helpers_invalid_params",{asset:e.toString(),message:"Unable to resolve the HyperCore spot token id"})}async function ve({destination:e,sender:t}){let n;try{n=await dt({destination:e,sender:t})}catch(o){throw new g("toolbox_hypercore_pre_transfer_check_failed",o)}if(typeof n?.isSanctioned!=="boolean"||typeof n.userExists!=="boolean")throw new g("toolbox_hypercore_pre_transfer_check_failed",{response:n});let{fee:r}=n,i=typeof r==="string"&&st.test(r)?Number(r):Number.NaN;if(!Number.isFinite(i))throw new g("toolbox_hypercore_pre_transfer_check_failed",{response:n});if(n.isSanctioned)throw new g("toolbox_hypercore_destination_sanctioned",{destination:e,sender:t});return i}function Re(e){return e.toUpperCase().startsWith("USDC:")}async function Ie({activationFee:e,token:t,user:n}){if(e<=0)return;let[r,i]=await Promise.all([te({user:n}),ne({token:B,user:n})]),o=F(r.withdrawable||"0")??new O(0),s=i??new O(0);if(new O(e).lte(o)||new O(e).lte(s))return;throw new g("toolbox_hypercore_insufficient_balance",{activationFee:e,feeToken:B,perpsWithdrawable:o.getValue("string"),spotAvailable:s.getValue("string"),token:t})}async function qe({activationFee:e,amount:t,sourceDex:n,token:r,user:i}){let o=Re(r),s=o?new O(t).add(e):new O(t);if(n!==void 0&&n!==""&&n!=="spot")throw new g("helpers_invalid_params",{message:"Unsupported HyperCore sourceDex",sourceDex:n});if(!o&&n==="")throw new g("helpers_invalid_params",{message:"Only a collateral token can be sent from a perp DEX",sourceDex:n,token:r});let p="0";if(o&&n!=="spot"){if(p=(await te({user:i})).withdrawable||"0",s.lte(F(p)??0))return"";if(n==="")throw new g("toolbox_hypercore_insufficient_balance",{amountRequired:s.getValue("string"),perpsWithdrawable:p,spotAvailable:"0",token:r})}let u=await ne({token:r,user:i})??new O(0);if(u.gte(s)){if(!o)await Ie({activationFee:e,token:r,user:i});return"spot"}throw new g("toolbox_hypercore_insufficient_balance",{amountRequired:s.getValue("string"),perpsWithdrawable:p,spotAvailable:u.getValue("string"),token:r})}async function Ht({amount:e,destination:t,sender:n,sourceDex:r,sweep:i,token:o}){if(i&&r!==void 0&&r!=="spot")throw new g("helpers_invalid_params",{message:"HyperCore sweep drains spot and requires sourceDex spot",sourceDex:r});let s=await ve({destination:t,sender:n});if(!i){let u=await qe({activationFee:s,amount:e,sourceDex:r,token:o,user:n});return{amount:e,sourceDex:u}}if(!Re(o))return await Ie({activationFee:s,token:o,user:n}),{amount:e,sourceDex:"spot"};if(s<=0)return{amount:e,sourceDex:"spot"};let p=new O(e).sub(s);if(p.lte(0))throw new g("toolbox_hypercore_insufficient_balance",{activationFee:s,spotAvailable:e,token:o});return{amount:p.getValue("string"),sourceDex:"spot"}}async function xt({assetValue:e,recipient:t,sender:n,signatureChainId:r,sweep:i,time:o,endpoint:s}){let p=h(t,"core_transaction_invalid_recipient_address"),u=h(n,"core_transaction_invalid_sender_address"),f=e.address;if(!f)throw new g("helpers_invalid_params",{asset:e.toString(),from:u});let S=i?await ke({assetValue:e,sender:u,token:f}):e.getValue("string"),m=s??await J(),H=o||Date.now(),a={amount:S,destination:p,hyperliquidChain:_e,signatureChainId:r||D,time:H,token:f,type:"spotSend"};return{action:a,endpoint:m,nonce:H,typedData:Ct(a)}}async function xe({assetValue:e,destinationDex:t,endpoint:n,fromSubAccount:r,recipient:i,sender:o,signatureChainId:s,sourceDex:p,sweep:u,time:f}){let S=h(i,"core_transaction_invalid_recipient_address"),m=h(o,"core_transaction_invalid_sender_address"),H=r?h(r,"helpers_invalid_params"):"",a=H||m,y=await ht(e),C=u?await ke({assetValue:e,sender:a,token:y}):e.getValue("string"),{amount:x,sourceDex:A}=await Ht({amount:C,destination:S,sender:a,sourceDex:p,sweep:u,token:y}),l=oe({amount:x,destination:S,destinationDex:t??"spot",fromSubAccount:H,hyperliquidChain:_e,nonce:f||Date.now(),signatureChainId:s||D,sourceDex:A,token:y});return Pe({action:l,endpoint:n})}async function Be(e){let t=await N.post(e.endpoint,{json:{action:e.action,...typeof e.expiresAfter==="number"?{expiresAfter:e.expiresAfter}:{},nonce:e.nonce,signature:e.signature,vaultAddress:e.vaultAddress??null},retry:{maxRetries:0}});if(t?.status!=="ok")throw new g("core_transaction_failed",{definitive:t?.status==="err",response:t});return t}async function be({amount:e,destination:t,nonce:n,token:r,user:i}){let o=h(i,"helpers_invalid_params"),s=await E(),p=n-5000,u=t?.toLowerCase(),f=r?.toUpperCase(),S=({delta:m,time:H})=>{if(!(H&&H>=p&&m?.type==="send"&&m.nonce===n))return!1;if(u&&m?.destination?.toLowerCase()!==u)return!1;let a=F(m?.amount);if(e!==void 0&&!a?.eqValue(e))return!1;if(f!==void 0){if(!m?.token)return!1;let y=m.token.toUpperCase();if(y!==f&&!f.startsWith(`${y}:`))return!1}return!0};for(let m=0;m<8;m++){if(m>0)await new Promise((H)=>setTimeout(H,1500));try{let H=await N.post(`${s}/info`,{json:{startTime:p,type:"userNonFundingLedgerUpdates",user:o},...De}),a=Array.isArray(H)?H.find(S):void 0;if(a?.hash)return a.hash}catch{}}return""}async function Te({kind:e,lookup:t,signed:n}){try{await Be(n)}catch(i){if(i instanceof g&&i.errorKey==="core_transaction_failed"&&i.cause?.definitive===!0)throw i;let s=await be(t);if(s)return s;throw new g("toolbox_hypercore_transfer_hash_not_found",{broadcast:"unknown",guidance:"Delivery of this broadcast is unknown and the nonce is single-use — do not retry or re-sign; check the account ledger for the transfer first.",nonce:t.nonce,transportError:String(i)})}let r=await be(t);if(!r)throw new g("toolbox_hypercore_transfer_hash_not_found",{broadcast:"accepted",guidance:`Do not retry or re-sign — the exchange accepted this nonce, so re-submitting risks a duplicate ${e}. Check the account ledger for the transfer first.`,nonce:t.nonce});return r}function Se({action:e,nonce:t,user:n}){return{amount:e.amount,destination:e.destination,nonce:t,token:e.token,user:n}}function $e(e){return e.startsWith("0x")&&we(e)}function Yt(e){let t=e&&"index"in e?e.index||0:0,n=Ye(e&&"derivationPath"in e&&e.derivationPath?e.derivationPath:et(Ze[U],{index:t})),r,i=!1;function o(){if(i)return r;return r=rt(e).with({phrase:Z.string},({phrase:a})=>nt.fromPhrase(a,void 0,n)).with({signer:Z.not(Z.nullish)},({signer:a})=>a).otherwise(()=>{return}),i=!0,r}async function s(){let a=o();return a?await a.getAddress():""}async function p(a){let y=o();if(!y)throw new g("toolbox_hypercore_no_signer");let C=Ce(a.typedData),x=await y.signTypedData(C.domain,C.types,C.message);return{action:a.action,endpoint:a.endpoint,nonce:a.nonce,signature:ye(x),..."expiresAfter"in a?{expiresAfter:a.expiresAfter}:{},..."vaultAddress"in a?{vaultAddress:a.vaultAddress}:{}}}async function u(a){let y=h(a,"helpers_invalid_params"),C=await E(),[x,A,l]=await Promise.all([N.post(`${C}/info`,{json:{type:"spotClearinghouseState",user:y}}),N.post(`${C}/info`,{json:{type:"clearinghouseState",user:y}}),N.post(`${C}/info`,{json:{type:"spotMeta"}})]),T=(x.spotState?.balances||x.balances||[]).map(({coin:w,token:R,total:k})=>He({coin:w,spotMeta:l,token:R,value:k})).filter((w)=>!!w),_=He({coin:"USDC",spotMeta:l,value:A.withdrawable||A.marginSummary?.accountValue||A.marginSummary?.totalRawUsd});return mt(_?[...T,_]:T)}async function f(a,y=!0){let C=h(a,"helpers_invalid_params");try{let x=await tt.getChainBalance({address:C,chain:U,scamFilter:y});if(x.length){let A=x.map(({identifier:T,value:_,decimal:w})=>new M({decimal:w||ee,identifier:T,value:_}));return A.some((T)=>T.isGasAsset)?A:[M.from({chain:U}),...A]}}catch{}return u(C)}async function S({sweep:a,...y}){let C=o();if(!C)throw new g("toolbox_hypercore_no_signer");let x=y.sender||await C.getAddress(),A=await xe({...y,feeRate:0,sender:x,sweep:a}),l=await p(A);return Te({kind:"transfer",lookup:Se({action:A.action,nonce:A.nonce,user:A.action.fromSubAccount||x}),signed:l})}async function m(a){let y=o();if(!y)throw new g("toolbox_hypercore_no_signer");let{action:C,typedData:x,...A}=a,l=structuredClone(C),T=structuredClone(x),_=await y.getAddress(),w=await J(),R=[...new Set([w,it??w])];Ae({...A,action:l,allowedEndpoints:R,typedData:T});let k=l.fromSubAccount?h(l.fromSubAccount,"helpers_invalid_params"):_,L=await ve({destination:l.destination,sender:k});await qe({activationFee:L,amount:l.amount,sourceDex:l.sourceDex,token:l.token,user:k});let j=await p({action:l,endpoint:w,nonce:l.nonce,typedData:T});return Te({kind:"payin",lookup:Se({action:l,nonce:l.nonce,user:k}),signed:j})}function H(){return M.from({chain:U,value:0})}return{broadcastTransaction:Be,createL1ActionRequest:At,createSendAssetTransaction:xe,createTransaction:xt,createUserSignedActionRequest:Pe,estimateTransactionFee:H,getAddress:s,getBalance:f,getBalanceFromChain:u,getState:{clearinghouse:te,frontendOpenOrders:ut,openOrders:yt,orderStatus:lt,spotClearinghouse:Oe,userFills:gt,userFillsByTime:ft},signAndBroadcastSendAsset:m,signTransaction:p,transfer:S,validateAddress:$e}}export{B as HYPERCORE_USDC_TOKEN_ID,vt as buildApproveAgentAction,Rt as buildApproveBuilderFeeAction,Ut as buildBatchModifyAction,Tt as buildCancelAction,St as buildCancelByCloidAction,wt as buildModifyAction,bt as buildOrderAction,Pt as buildScheduleCancelAction,oe as buildSendAssetAction,It as buildTokenDelegateAction,Ot as buildTopUpIsolatedOnlyMarginAction,Dt as buildUpdateIsolatedMarginAction,_t as buildUpdateLeverageAction,kt as buildUsdClassTransferAction,At as createL1ActionRequest,xe as createSendAssetTransaction,xt as createTransaction,Pe as createUserSignedActionRequest,Yt as getHyperCoreToolbox,$e as validateHyperCoreAddress};
|
package/dist/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ha as o}from"../chunk-4428244x.js";import{AssetValue as k,Chain as t,CosmosChains as x,EVMChains as c,FeeOption as v,SubstrateChains as O,SwapKitError as V,UTXOChains as C}from"@swapkit/helpers";async function H(){let{match:l}=await import("ts-pattern"),{validateAleoAddress:r}=await import("./aleo/index.js"),{validateAptosAddress:s}=await import("./aptos/index.js"),{validateEVMAddress:e}=await import("./evm/index.js"),{validateCardanoAddress:a}=await import("./cardano/index.js"),{getCosmosAddressValidator:i}=await import("./cosmos/index.js"),{getSubstrateAddressValidator:p}=await import("./substrate/index.js"),{validateHyperCoreAddress:m}=await import("./hypercore/index.js"),{validateSolanaAddress:h}=await import("./solana/index.js"),{validateStarknetAddress:u}=await import("./starknet/index.js"),{validateSuiAddress:d}=await import("./sui/index.js"),{validateTonAddress:f}=await import("./ton/index.js"),{getUTXOAddressValidator:g}=await import("./utxo/index.js"),{validateNearAddress:w}=await import("./near/index.js"),{validateRadixAddress:S}=await import("./radix/index.js"),{validateRippleAddress:P}=await import("./ripple/index.js"),{validateTronAddress:A}=await import("./tron/index.js"),{validateStellarAddress:R}=await import("./stellar/index.js");return function({address:n,chain:W}){return l(W).with(...c,()=>e(n)).with(...C,(T)=>g(T)(n)).with(...x,(T)=>i(T)(n)).with(...O,(T)=>p({chain:T})(n)).with(t.Aleo,()=>r(n)).with(t.Aptos,()=>s(n)).with(t.Radix,()=>S(n)).with(t.Hype,()=>m(n)).with(t.Near,()=>w(n)).with(t.Ripple,()=>P(n)).with(t.Solana,()=>h(n)).with(t.Stellar,()=>R(n)).with(t.Starknet,()=>u(n)).with(t.Sui,()=>d(n)).with(t.Ton,()=>f(n)).with(t.Tron,()=>A(n)).with(t.Cardano,()=>a(n)).otherwise(()=>!1)}}function F(l){return async function(s){let{match:e}=await import("ts-pattern");return e(l).returnType().with(...c,async(a)=>{let i=await b(a),p=await i.createTransaction(s),m="feeOptionKey"in s?s.feeOptionKey:v.Fast;return i.estimateTransactionFee({...p,feeOption:m})}).with(t.Bitcoin,t.BitcoinCash,t.Dogecoin,t.Dash,t.Litecoin,t.Solana,t.Ripple,t.Tron,t.Near,t.Cardano,t.Hype,async(a)=>(await b(a)).estimateTransactionFee(s)).with(t.Aptos,async()=>{let{getAptosToolbox:a}=await import("./aptos/index.js");return a().estimateTransactionFee(s)}).with(t.Aleo,async()=>{let{getAleoToolbox:a}=await import("./aleo/index.js");return a().estimateTransactionFee(s)}).with(t.Starknet,async()=>{let{getStarknetToolbox:a}=await import("./starknet/index.js");return(await a()).estimateTransactionFee(s)}).with(t.Stellar,async()=>{let{getStellarToolbox:a}=await import("./stellar/index.js");return a().estimateTransactionFee()}).with(t.Sui,async()=>{let{getSuiToolbox:a}=await import("./sui/index.js");return a().estimateTransactionFee(s)}).with(t.Ton,async()=>{let{getTONToolbox:a}=await import("./ton/index.js");return a().estimateTransactionFee(s)}).with(...x,async()=>{let{estimateTransactionFee:a}=await import("./cosmos/index.js");return a(s)}).otherwise(async()=>k.from({chain:l}))}}async function b(l,r){let{match:s}=await import("ts-pattern");return s(l).returnType().with(...c,async()=>{let{getEvmToolboxAsync:e}=await import("../chunk-dssawneq.js");return await e(l,r)}).with(...C,async()=>{let{getUtxoToolbox:e}=await import("./utxo/index.js");return e(l,r)}).with(...x,async()=>{let{getCosmosToolbox:e}=await import("./cosmos/index.js");return e(l,r)}).with(t.Aleo,async()=>{let{getAleoToolbox:e}=await import("./aleo/index.js");return e(r)}).with(t.Aptos,async()=>{let{getAptosToolbox:e}=await import("./aptos/index.js");return e(r)}).with(t.Hype,async()=>{let{getHyperCoreToolbox:e}=await import("./hypercore/index.js");return e(r)}).with(t.Radix,async()=>{let{getRadixToolbox:e}=await import("./radix/index.js");return e(r)}).with(t.Ripple,async()=>{let{getRippleToolbox:e}=await import("./ripple/index.js");return e(r)}).with(t.Solana,async()=>{let{getSolanaToolbox:e}=await import("./solana/index.js");return e(r)}).with(t.Stellar,async()=>{let{getStellarToolbox:e}=await import("./stellar/index.js");return e(r)}).with(t.Starknet,async()=>{let{getStarknetToolbox:e}=await import("./starknet/index.js");return e(r)}).with(t.Sui,async()=>{let{getSuiToolbox:e}=await import("./sui/index.js");return e(r)}).with(t.Tron,async()=>{let{getTronToolbox:e}=await import("./tron/index.js");return e(r)}).with(t.Near,async()=>{let{getNearToolbox:e}=await import("./near/index.js");return e(r)}).with(t.Cardano,async()=>{let{getCardanoToolbox:e}=await import("./cardano/index.js");return e(r)}).with(t.Ton,async()=>{let{getTONToolbox:e}=await import("./ton/index.js");return e(r)}).otherwise(()=>{throw new V("toolbox_not_supported",{chain:l})})}export{H as getAddressValidator,F as getFeeEstimator,b as getToolbox};
|
package/dist/src/near/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{fa as wt}from"../../chunk-s1528ghz.js";import{ga as l}from"../../chunk-k50sjysj.js";import{Chain as Gt,derivationPathToString as Kt,SwapKitError as rt}from"@swapkit/helpers";function G(e){return e.length>=2&&e.length<=64&&/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/.test(e)}async function M(e){if(e.derivationPath&&(e.derivationPath[3]||e.derivationPath[4]))throw new rt("toolbox_derivation_slot_unsupported",{chain:Gt.Near,derivationPath:e.derivationPath});let{KeyPair:s}=await import("@near-js/crypto"),c=e.derivationPath?Kt(e.derivationPath.slice(0,3)):`m/44'/397'/${e.index??0}'`,{parseSeedPhrase:g}=await import("near-seed-phrase"),{secretKey:P}=g(e.phrase,c),y=s.fromString(P);return at(y)}async function et(e){let{KeyPair:s}=await import("@near-js/crypto"),c=s.fromString(e);return at(c)}async function at(e){let{KeyPairSigner:s}=await import("@near-js/signers");class c extends s{#t;constructor(g){super(g);this.#t=g}getAddress(){let g=this.#t.getPublicKey(),P=Buffer.from(g.data).toString("hex");return Promise.resolve(P)}}return new c(e)}async function j(e,s){let g=(await e.query({account_id:s,finality:"final",request_type:"view_access_key_list"})).keys.find((K)=>K.access_key.permission==="FullAccess");if(!g)throw new rt("toolbox_near_no_public_key_found");let{PublicKey:P}=await import("@near-js/crypto"),y=P.fromString(g.public_key);return{nonce:g.access_key.nonce||0,publicKey:y}}var p={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 ot(e){return"recipient"in e&&"amount"in e&&!("contractId"in e)}function it(e){return"contractId"in e&&"methodName"in e}function st(e){return"actions"in e}function ct(e){return"newAccountId"in e}function gt(e){return"contractCode"in e}function mt(e){return"customEstimator"in e}function ut(e){let s=0;for(let c of e)switch(c.enum){case"transfer":s+=Number(p.SIMPLE_TRANSFER);break;case"functionCall":s+=Number(p.CONTRACT_CALL);break;case"createAccount":s+=Number(p.ACCOUNT_CREATION);break;case"deployContract":s+=Number(p.CONTRACT_DEPLOYMENT);break;case"addKey":s+=Number(p.ACCESS_KEY_ADDITION);break;case"deleteKey":s+=Number(p.ACCESS_KEY_DELETION);break;case"stake":s+=Number(p.STAKE);break;default:s+=Number(p.CONTRACT_CALL)}return s.toString()}function dt(e){if(e==="ft_transfer"||e==="ft_transfer_call")return p.TOKEN_TRANSFER;if(e==="storage_deposit")return p.STORAGE_DEPOSIT;return p.CONTRACT_CALL}function Ut(e){return(BigInt(e)*BigInt(1000000000000)).toString()}function Vt(e){return(BigInt(e)/BigInt(1000000000000)).toString()}async function lt({account:e,contractId:s,viewMethods:c,changeMethods:g}){let{Contract:P}=await import("@near-js/accounts");return new P(e,s,{changeMethods:g,useLocalViewExecution:!0,viewMethods:c})}import{AssetValue as ft,Chain as x,getRPCUrl as kt,SwapKitError as u}from"@swapkit/helpers";import{match as pt,P as Pt}from"ts-pattern";var _t=1250000000000000000000n,yt=150000000000000n,Ft=150000000000000n,Dt=250000000000000n,Ot=250000000000000n,Lt=500n,U=10000n;function Xt(e){let s;async function c(){if(s)return s;return s=await pt(e).with({phrase:Pt.string},async(t)=>await M(t)).with({signer:Pt.any},({signer:t})=>t).otherwise(()=>{return}),s}async function g(){let{JsonRpcProvider:t}=await import("@near-js/providers"),n=await kt(x.Near);return new t({url:n})}async function P(t){let{Account:n}=await import("@near-js/accounts"),r=await g(),a=await c(),o=t||await y();return new n(o,r,a)}async function y(){let t=await c();if(!t)throw new u("toolbox_near_no_signer");return await t.getAddress()}async function V(t,n){return(n||await g()).callFunction(t.contractId,"storage_balance_of",{account_id:t.accountId},{finality:"final"})}async function K(t,n){try{let r=await n.callFunction(t,"storage_balance_bounds",{},{finality:"final"});return r?.min?BigInt(r.min):_t}catch{return _t}}function k(t){return(t*(U+Lt)+U-1n)/U}function J(t,n){return BigInt(t)*BigInt(n.runtime_config.storage_amount_per_byte)}function z(t,n){if(t<=0n)throw new u({errorKey:"toolbox_sweep_amount_too_low",info:n});return t}async function F(t){return await(t||await g()).experimental_protocolConfig({finality:"final"})}async function Tt(t,n,r){let o=await(r||await g()).callFunction(t,"ft_balance_of",{account_id:n},{finality:"final"});return BigInt(o||"0")}async function ht(t){if(!await c())throw new u("toolbox_near_no_signer");let{assetValue:r,recipient:a,memo:o,sweep:i}=t,m=await y(),d=await Y({assetValue:r,memo:o,recipient:a,sender:m,sweep:i});return X(d)}async function St({assetValue:t,attachedDeposit:n,memo:r,provider:a,recipient:o,sender:i,sweep:m}){let d=t.address;if(!d)throw new u("toolbox_near_missing_contract_address");let f=await V({accountId:o,contractId:d},a),_=f?0n:await K(d,a),w=f?Dt:Ft,T=BigInt(n||"1"),N=t.getBaseValue("bigint");if(m){let[S,A,b,I]=await Promise.all([Tt(d,i,a),a.viewAccount(i,{finality:"final"}),F(a),L(a)]);N=z(S,{asset:t.toString(),balance:S.toString()});let B=J(A.storage_usage,b),C=A.amount-B,R=_,nt=(w+(f?0n:yt))*k(I)+R+T;if(C<nt)throw new u("toolbox_sweep_amount_too_low",{asset:t.toString(),availableNear:C.toString(),reason:"Insufficient NEAR to cover token transfer gas and storage deposit",requiredNear:nt.toString()})}let h=[];if(!f)h.push(await E({args:{account_id:o},attachedDeposit:_.toString(),gas:yt.toString(),methodName:"storage_deposit"}));return h.push(await E({args:{amount:N.toString(),memo:r||null,receiver_id:o},attachedDeposit:T.toString(),gas:w.toString(),methodName:"ft_transfer"})),W({actions:h,receiverId:d,sender:i})}async function Nt({assetValue:t,attachedDeposit:n,memo:r,provider:a,recipient:o,sender:i,sweep:m}){let d=t.getBaseValue("bigint");if(m){let[b,I]=await Promise.all([a.viewAccount(i,{finality:"final"}),F(a)]),B=await Z({assetValue:t,memo:r,recipient:o,sweep:m},I),C=J(b.storage_usage,I),R=0n;if(r&&n){let tt=await L(a);R=Ot*k(tt)+BigInt(n)}d=z(b.amount-B.getBaseValue("bigint")-C-R,{asset:t.toString(),balance:b.amount.toString(),fee:B.getBaseValue("bigint").toString(),storageStakeReserve:C.toString()})}let[{publicKey:f,nonce:_},w,{actionCreators:T,createTransaction:N},{baseDecode:h}]=await Promise.all([j(a,i),a.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),S=[T.transfer(d)];if(r&&n)S.push(T.functionCall("memo",{memo:r},BigInt("250000000000000"),BigInt(n)));let A=h(w.header.hash);return N(i,f,o,_+1,S,A)}async function Y({recipient:t,assetValue:n,memo:r,attachedDeposit:a,sender:o,functionCall:i,sweep:m}){if(!G(t))throw new u("toolbox_near_invalid_address",{recipient:t});if(!G(o))throw new u("toolbox_near_invalid_address",{sender:o});if(i)return H({...i,sender:o});if(m&&!await c())throw new u("toolbox_near_no_signer");let d=await g(),f={assetValue:n,attachedDeposit:a,memo:r,provider:d,recipient:t,sender:o,sweep:m};return n.isGasAsset?Nt(f):St(f)}function At(t){let n=t.encode();return Buffer.from(n).toString("base64")}async function H({args:t,attachedDeposit:n,contractId:r,gas:a,methodName:o,sender:i}){let m=await E({args:t,attachedDeposit:n,gas:a,methodName:o});return W({actions:[m],receiverId:r,sender:i})}async function W({actions:t,receiverId:n,sender:r}){let a=await g(),[{publicKey:o,nonce:i},m,{createTransaction:d},{baseDecode:f}]=await Promise.all([j(a,r),a.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),_=f(m.header.hash);return d(r,o,n,i+1,t,_)}async function E(t){let{actionCreators:n}=await import("@near-js/transactions");return n.functionCall(t.methodName,Buffer.from(JSON.stringify(t.args)),BigInt(t.gas),BigInt(t.attachedDeposit))}async function q(t){let n=await c();if(!n)throw new u("toolbox_near_no_signer");await bt(t);let[r,a]=await n.signTransaction(t);return a}async function bt(t){let n=t.publicKey;if(n.toString?.().startsWith("ed25519:")||n.toString?.().startsWith("secp256k1:"))return;let{KeyType:r,PublicKey:a}=await import("@near-js/crypto"),o=n.data||n.ed25519Key?.data,i=n.secp256k1Key?.data;if(o){t.publicKey=new a({data:Uint8Array.from(o),keyType:r.ED25519});return}if(i)t.publicKey=new a({data:Uint8Array.from(i),keyType:r.SECP256K1})}function D(t){if(typeof t==="string")return t;if(Array.isArray(t))return t.map(D).find(Boolean);if(!(t&&typeof t==="object"))return;let n=t;return n.transaction?.hash||n.transaction_outcome?.id}function O(t){return t instanceof Error?t.message:String(t)}async function Q(t){let r=await(await g()).sendTransaction(t),a=D(r);if(!a)throw new u("toolbox_near_transfer_failed",{result:r});return a}async function X(t){let n=await c();if(!n)throw new u("toolbox_near_no_signer");let r;try{r=await q(t)}catch(a){let o;try{o=n.signAndSendTransaction?await n.signAndSendTransaction({actions:t.actions,receiverId:t.receiverId,signerId:t.signerId}):await n.signAndSendTransactions?.({transactions:[t]})}catch(m){throw new u({errorKey:"toolbox_near_sign_transaction_failed",info:{directSignError:O(a),signAndSendError:O(m)}},m)}let i=D(o);if(i)return i;throw a}return Q(r)}async function Z(t,n){let r=await c();if("assetValue"in t){if(t.sweep&&!r)throw new u("toolbox_near_no_signer");try{let[o,i]=await Promise.all([L(),n?Promise.resolve(n):F()]),{runtime_config:m}=i,{execution:d,send_sir:f}=m.transaction_costs.action_receipt_creation_config,{execution:_,send_sir:w}=m.transaction_costs.action_creation_config.transfer_cost,T=BigInt(w)+BigInt(_),N=BigInt(f)+BigInt(d),h=T+N,S=t.sweep?k(o):o,A=h*S;return ft.from({chain:x.Near,value:A})}catch(o){throw new u({errorKey:"toolbox_fee_estimation_failed",info:{chain:x.Near,message:O(o)}},o)}}let a=r?await P():void 0;return v(t,a)}async function L(t){let r=await(t||await g()).gasPrice(null);return BigInt(r.gas_price)}async function Ct(t,n,r){if(!await c())throw new u("toolbox_near_no_signer");let o=await P(),{formatNearAmount:i}=await import("@near-js/utils"),{PublicKey:m}=await import("@near-js/crypto"),d=i(r)||"0";return(await o.createAccount(t,m.fromString(n),BigInt(d))).transaction.hash}async function xt(t){let n=await c();try{if(!n)throw new u("toolbox_near_no_signer");let{actionCreators:r}=await import("@near-js/transactions"),{contractId:a,methodName:o,args:i,deposit:m}=t,d=await P(),f=await v({args:i||{},contractId:a,methodName:o}),_=r.functionCall(o,i||{},f.getBaseValue("bigint"),BigInt(m||"1"));return(await d.signAndSendTransaction({actions:[_],receiverId:a})).transaction_outcome.id}catch(r){throw new u("toolbox_near_transfer_failed",{error:r})}}async function Et(t){let n=await P();return lt({account:n,changeMethods:t.changeMethods,contractId:t.contractId,viewMethods:t.viewMethods})}async function vt(t){if(!await c())throw new u("toolbox_near_no_signer");if(t.actions.length===0)throw new u("toolbox_near_empty_batch");return(await(await P()).signAndSendTransaction({actions:t.actions,receiverId:t.receiverId})).transaction.hash}async function v(t,n){let r=await pt(t).when(ot,()=>p.SIMPLE_TRANSFER).when(it,(o)=>dt(o.methodName)).when(st,(o)=>ut(o.actions)).when(ct,()=>p.ACCOUNT_CREATION).when(gt,()=>p.CONTRACT_DEPLOYMENT).when(mt,(o)=>{if(!n)throw new u("toolbox_near_no_account");return o.customEstimator(n)}).otherwise(()=>{throw new u("toolbox_near_invalid_gas_params")}),a=BigInt(r)*BigInt(1000000000000);return ft.from({chain:x.Near,value:a})}function It(t,n){return console.warn("NEAR toolbox: estimateGas is deprecated, use estimateGasLimit instead"),v(t,n)}async function Bt(){let t=await g();try{return(await t.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}async function Rt(){let t=await c();return t?(await t.getPublicKey()).toString():""}return{broadcastTransaction:Q,callFunction:xt,createAction:E,createContract:Et,createContractFunctionCall:H,createSubAccount:Ct,createTransaction:Y,estimateGas:It,estimateGasLimit:v,estimateTransactionFee:Z,executeBatchTransaction:vt,getAddress:y,getBalance:wt(x.Near),getGasPrice:Bt,getNearProvider:g,getPublicKey:Rt,getSignerFromPhrase:M,getSignerFromPrivateKey:et,serializeTransaction:At,signAndBroadcastTransaction:X,signTransaction:q,transfer:ht,validateAddress:G}}export{p as GAS_COSTS,lt as createNearContract,ut as estimateBatchGas,Vt as gasToTGas,dt as getContractMethodGas,j as getFullAccessPublicKey,M as getNearSignerFromPhrase,et as getNearSignerFromPrivateKey,Xt as getNearToolbox,ct as isAccountCreation,st as isBatchTransaction,it as isContractCall,gt as isContractDeployment,mt as isCustomEstimator,ot as isSimpleTransfer,Ut as tgasToGas,G as validateNearAddress};
|
|
1
|
+
import{ga as wt}from"../../chunk-as9fracn.js";import{ha as l}from"../../chunk-4428244x.js";import{Chain as Gt,derivationPathToString as Kt,SwapKitError as rt}from"@swapkit/helpers";function G(e){return e.length>=2&&e.length<=64&&/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/.test(e)}async function M(e){if(e.derivationPath&&(e.derivationPath[3]||e.derivationPath[4]))throw new rt("toolbox_derivation_slot_unsupported",{chain:Gt.Near,derivationPath:e.derivationPath});let{KeyPair:s}=await import("@near-js/crypto"),c=e.derivationPath?Kt(e.derivationPath.slice(0,3)):`m/44'/397'/${e.index??0}'`,{parseSeedPhrase:g}=await import("near-seed-phrase"),{secretKey:P}=g(e.phrase,c),y=s.fromString(P);return at(y)}async function et(e){let{KeyPair:s}=await import("@near-js/crypto"),c=s.fromString(e);return at(c)}async function at(e){let{KeyPairSigner:s}=await import("@near-js/signers");class c extends s{#t;constructor(g){super(g);this.#t=g}getAddress(){let g=this.#t.getPublicKey(),P=Buffer.from(g.data).toString("hex");return Promise.resolve(P)}}return new c(e)}async function j(e,s){let g=(await e.query({account_id:s,finality:"final",request_type:"view_access_key_list"})).keys.find((K)=>K.access_key.permission==="FullAccess");if(!g)throw new rt("toolbox_near_no_public_key_found");let{PublicKey:P}=await import("@near-js/crypto"),y=P.fromString(g.public_key);return{nonce:g.access_key.nonce||0,publicKey:y}}var p={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 ot(e){return"recipient"in e&&"amount"in e&&!("contractId"in e)}function it(e){return"contractId"in e&&"methodName"in e}function st(e){return"actions"in e}function ct(e){return"newAccountId"in e}function gt(e){return"contractCode"in e}function mt(e){return"customEstimator"in e}function ut(e){let s=0;for(let c of e)switch(c.enum){case"transfer":s+=Number(p.SIMPLE_TRANSFER);break;case"functionCall":s+=Number(p.CONTRACT_CALL);break;case"createAccount":s+=Number(p.ACCOUNT_CREATION);break;case"deployContract":s+=Number(p.CONTRACT_DEPLOYMENT);break;case"addKey":s+=Number(p.ACCESS_KEY_ADDITION);break;case"deleteKey":s+=Number(p.ACCESS_KEY_DELETION);break;case"stake":s+=Number(p.STAKE);break;default:s+=Number(p.CONTRACT_CALL)}return s.toString()}function dt(e){if(e==="ft_transfer"||e==="ft_transfer_call")return p.TOKEN_TRANSFER;if(e==="storage_deposit")return p.STORAGE_DEPOSIT;return p.CONTRACT_CALL}function Ut(e){return(BigInt(e)*BigInt(1000000000000)).toString()}function Vt(e){return(BigInt(e)/BigInt(1000000000000)).toString()}async function lt({account:e,contractId:s,viewMethods:c,changeMethods:g}){let{Contract:P}=await import("@near-js/accounts");return new P(e,s,{changeMethods:g,useLocalViewExecution:!0,viewMethods:c})}import{AssetValue as ft,Chain as x,getRPCUrl as kt,SwapKitError as u}from"@swapkit/helpers";import{match as pt,P as Pt}from"ts-pattern";var _t=1250000000000000000000n,yt=150000000000000n,Ft=150000000000000n,Dt=250000000000000n,Ot=250000000000000n,Lt=500n,U=10000n;function Xt(e){let s;async function c(){if(s)return s;return s=await pt(e).with({phrase:Pt.string},async(t)=>await M(t)).with({signer:Pt.any},({signer:t})=>t).otherwise(()=>{return}),s}async function g(){let{JsonRpcProvider:t}=await import("@near-js/providers"),n=await kt(x.Near);return new t({url:n})}async function P(t){let{Account:n}=await import("@near-js/accounts"),r=await g(),a=await c(),o=t||await y();return new n(o,r,a)}async function y(){let t=await c();if(!t)throw new u("toolbox_near_no_signer");return await t.getAddress()}async function V(t,n){return(n||await g()).callFunction(t.contractId,"storage_balance_of",{account_id:t.accountId},{finality:"final"})}async function K(t,n){try{let r=await n.callFunction(t,"storage_balance_bounds",{},{finality:"final"});return r?.min?BigInt(r.min):_t}catch{return _t}}function k(t){return(t*(U+Lt)+U-1n)/U}function J(t,n){return BigInt(t)*BigInt(n.runtime_config.storage_amount_per_byte)}function z(t,n){if(t<=0n)throw new u({errorKey:"toolbox_sweep_amount_too_low",info:n});return t}async function F(t){return await(t||await g()).experimental_protocolConfig({finality:"final"})}async function Tt(t,n,r){let o=await(r||await g()).callFunction(t,"ft_balance_of",{account_id:n},{finality:"final"});return BigInt(o||"0")}async function ht(t){if(!await c())throw new u("toolbox_near_no_signer");let{assetValue:r,recipient:a,memo:o,sweep:i}=t,m=await y(),d=await Y({assetValue:r,memo:o,recipient:a,sender:m,sweep:i});return X(d)}async function St({assetValue:t,attachedDeposit:n,memo:r,provider:a,recipient:o,sender:i,sweep:m}){let d=t.address;if(!d)throw new u("toolbox_near_missing_contract_address");let f=await V({accountId:o,contractId:d},a),_=f?0n:await K(d,a),w=f?Dt:Ft,T=BigInt(n||"1"),N=t.getBaseValue("bigint");if(m){let[S,A,b,I]=await Promise.all([Tt(d,i,a),a.viewAccount(i,{finality:"final"}),F(a),L(a)]);N=z(S,{asset:t.toString(),balance:S.toString()});let B=J(A.storage_usage,b),C=A.amount-B,R=_,nt=(w+(f?0n:yt))*k(I)+R+T;if(C<nt)throw new u("toolbox_sweep_amount_too_low",{asset:t.toString(),availableNear:C.toString(),reason:"Insufficient NEAR to cover token transfer gas and storage deposit",requiredNear:nt.toString()})}let h=[];if(!f)h.push(await E({args:{account_id:o},attachedDeposit:_.toString(),gas:yt.toString(),methodName:"storage_deposit"}));return h.push(await E({args:{amount:N.toString(),memo:r||null,receiver_id:o},attachedDeposit:T.toString(),gas:w.toString(),methodName:"ft_transfer"})),W({actions:h,receiverId:d,sender:i})}async function Nt({assetValue:t,attachedDeposit:n,memo:r,provider:a,recipient:o,sender:i,sweep:m}){let d=t.getBaseValue("bigint");if(m){let[b,I]=await Promise.all([a.viewAccount(i,{finality:"final"}),F(a)]),B=await Z({assetValue:t,memo:r,recipient:o,sweep:m},I),C=J(b.storage_usage,I),R=0n;if(r&&n){let tt=await L(a);R=Ot*k(tt)+BigInt(n)}d=z(b.amount-B.getBaseValue("bigint")-C-R,{asset:t.toString(),balance:b.amount.toString(),fee:B.getBaseValue("bigint").toString(),storageStakeReserve:C.toString()})}let[{publicKey:f,nonce:_},w,{actionCreators:T,createTransaction:N},{baseDecode:h}]=await Promise.all([j(a,i),a.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),S=[T.transfer(d)];if(r&&n)S.push(T.functionCall("memo",{memo:r},BigInt("250000000000000"),BigInt(n)));let A=h(w.header.hash);return N(i,f,o,_+1,S,A)}async function Y({recipient:t,assetValue:n,memo:r,attachedDeposit:a,sender:o,functionCall:i,sweep:m}){if(!G(t))throw new u("toolbox_near_invalid_address",{recipient:t});if(!G(o))throw new u("toolbox_near_invalid_address",{sender:o});if(i)return H({...i,sender:o});if(m&&!await c())throw new u("toolbox_near_no_signer");let d=await g(),f={assetValue:n,attachedDeposit:a,memo:r,provider:d,recipient:t,sender:o,sweep:m};return n.isGasAsset?Nt(f):St(f)}function At(t){let n=t.encode();return Buffer.from(n).toString("base64")}async function H({args:t,attachedDeposit:n,contractId:r,gas:a,methodName:o,sender:i}){let m=await E({args:t,attachedDeposit:n,gas:a,methodName:o});return W({actions:[m],receiverId:r,sender:i})}async function W({actions:t,receiverId:n,sender:r}){let a=await g(),[{publicKey:o,nonce:i},m,{createTransaction:d},{baseDecode:f}]=await Promise.all([j(a,r),a.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),_=f(m.header.hash);return d(r,o,n,i+1,t,_)}async function E(t){let{actionCreators:n}=await import("@near-js/transactions");return n.functionCall(t.methodName,Buffer.from(JSON.stringify(t.args)),BigInt(t.gas),BigInt(t.attachedDeposit))}async function q(t){let n=await c();if(!n)throw new u("toolbox_near_no_signer");await bt(t);let[r,a]=await n.signTransaction(t);return a}async function bt(t){let n=t.publicKey;if(n.toString?.().startsWith("ed25519:")||n.toString?.().startsWith("secp256k1:"))return;let{KeyType:r,PublicKey:a}=await import("@near-js/crypto"),o=n.data||n.ed25519Key?.data,i=n.secp256k1Key?.data;if(o){t.publicKey=new a({data:Uint8Array.from(o),keyType:r.ED25519});return}if(i)t.publicKey=new a({data:Uint8Array.from(i),keyType:r.SECP256K1})}function D(t){if(typeof t==="string")return t;if(Array.isArray(t))return t.map(D).find(Boolean);if(!(t&&typeof t==="object"))return;let n=t;return n.transaction?.hash||n.transaction_outcome?.id}function O(t){return t instanceof Error?t.message:String(t)}async function Q(t){let r=await(await g()).sendTransaction(t),a=D(r);if(!a)throw new u("toolbox_near_transfer_failed",{result:r});return a}async function X(t){let n=await c();if(!n)throw new u("toolbox_near_no_signer");let r;try{r=await q(t)}catch(a){let o;try{o=n.signAndSendTransaction?await n.signAndSendTransaction({actions:t.actions,receiverId:t.receiverId,signerId:t.signerId}):await n.signAndSendTransactions?.({transactions:[t]})}catch(m){throw new u({errorKey:"toolbox_near_sign_transaction_failed",info:{directSignError:O(a),signAndSendError:O(m)}},m)}let i=D(o);if(i)return i;throw a}return Q(r)}async function Z(t,n){let r=await c();if("assetValue"in t){if(t.sweep&&!r)throw new u("toolbox_near_no_signer");try{let[o,i]=await Promise.all([L(),n?Promise.resolve(n):F()]),{runtime_config:m}=i,{execution:d,send_sir:f}=m.transaction_costs.action_receipt_creation_config,{execution:_,send_sir:w}=m.transaction_costs.action_creation_config.transfer_cost,T=BigInt(w)+BigInt(_),N=BigInt(f)+BigInt(d),h=T+N,S=t.sweep?k(o):o,A=h*S;return ft.from({chain:x.Near,value:A})}catch(o){throw new u({errorKey:"toolbox_fee_estimation_failed",info:{chain:x.Near,message:O(o)}},o)}}let a=r?await P():void 0;return v(t,a)}async function L(t){let r=await(t||await g()).gasPrice(null);return BigInt(r.gas_price)}async function Ct(t,n,r){if(!await c())throw new u("toolbox_near_no_signer");let o=await P(),{formatNearAmount:i}=await import("@near-js/utils"),{PublicKey:m}=await import("@near-js/crypto"),d=i(r)||"0";return(await o.createAccount(t,m.fromString(n),BigInt(d))).transaction.hash}async function xt(t){let n=await c();try{if(!n)throw new u("toolbox_near_no_signer");let{actionCreators:r}=await import("@near-js/transactions"),{contractId:a,methodName:o,args:i,deposit:m}=t,d=await P(),f=await v({args:i||{},contractId:a,methodName:o}),_=r.functionCall(o,i||{},f.getBaseValue("bigint"),BigInt(m||"1"));return(await d.signAndSendTransaction({actions:[_],receiverId:a})).transaction_outcome.id}catch(r){throw new u("toolbox_near_transfer_failed",{error:r})}}async function Et(t){let n=await P();return lt({account:n,changeMethods:t.changeMethods,contractId:t.contractId,viewMethods:t.viewMethods})}async function vt(t){if(!await c())throw new u("toolbox_near_no_signer");if(t.actions.length===0)throw new u("toolbox_near_empty_batch");return(await(await P()).signAndSendTransaction({actions:t.actions,receiverId:t.receiverId})).transaction.hash}async function v(t,n){let r=await pt(t).when(ot,()=>p.SIMPLE_TRANSFER).when(it,(o)=>dt(o.methodName)).when(st,(o)=>ut(o.actions)).when(ct,()=>p.ACCOUNT_CREATION).when(gt,()=>p.CONTRACT_DEPLOYMENT).when(mt,(o)=>{if(!n)throw new u("toolbox_near_no_account");return o.customEstimator(n)}).otherwise(()=>{throw new u("toolbox_near_invalid_gas_params")}),a=BigInt(r)*BigInt(1000000000000);return ft.from({chain:x.Near,value:a})}function It(t,n){return console.warn("NEAR toolbox: estimateGas is deprecated, use estimateGasLimit instead"),v(t,n)}async function Bt(){let t=await g();try{return(await t.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}async function Rt(){let t=await c();return t?(await t.getPublicKey()).toString():""}return{broadcastTransaction:Q,callFunction:xt,createAction:E,createContract:Et,createContractFunctionCall:H,createSubAccount:Ct,createTransaction:Y,estimateGas:It,estimateGasLimit:v,estimateTransactionFee:Z,executeBatchTransaction:vt,getAddress:y,getBalance:wt(x.Near),getGasPrice:Bt,getNearProvider:g,getPublicKey:Rt,getSignerFromPhrase:M,getSignerFromPrivateKey:et,serializeTransaction:At,signAndBroadcastTransaction:X,signTransaction:q,transfer:ht,validateAddress:G}}export{p as GAS_COSTS,lt as createNearContract,ut as estimateBatchGas,Vt as gasToTGas,dt as getContractMethodGas,j as getFullAccessPublicKey,M as getNearSignerFromPhrase,et as getNearSignerFromPrivateKey,Xt as getNearToolbox,ct as isAccountCreation,st as isBatchTransaction,it as isContractCall,gt as isContractDeployment,mt as isCustomEstimator,ot as isSimpleTransfer,Ut as tgasToGas,G as validateNearAddress};
|
package/dist/src/radix/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ha as p}from"../../chunk-4428244x.js";import{AssetValue as y,Chain as g,SKConfig as f,SwapKitError as b}from"@swapkit/helpers";function R(s){return s.startsWith("account_rdx1")&&s.length===66}async function w({address:s,networkApi:i}){let a=!0,c,o=[],e=await A(i);while(a){let r={address:s,at_ledger_state:{state_version:e},cursor:c,limit_per_page:100},n=await i.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:r});if(o=o.concat(n.items),n.next_cursor)c=n.next_cursor;else a=!1}return o}async function x({resources:s,networkApi:i}){let a=[],c=50,o=[];for(let e=0;e<s.length;e+=50)o.push(s.slice(e,e+50));for(let e of o){let r=e.map((t)=>t.resource_address),n=await i.state.getEntityDetailsVaultAggregated(r),u=new Map;for(let t of n)if(t.details!==void 0){let l=t.metadata?.items.find((m)=>m.key==="symbol"),d=l?.value.typed.type==="String"?l.value.typed.value:"?";if(t.details.type==="FungibleResource")u.set(t.address,{decimals:t.details.divisibility,symbol:d})}for(let t of e)if(t.aggregation_level==="Global"){let l=u.get(t.resource_address)||{decimals:0,symbol:"?"},d=y.from({asset:l.symbol!==g.Radix?`${g.Radix}.${l.symbol}-${t.resource_address}`:"XRD.XRD",value:t.amount});a.push(d)}}return a}async function A(s){return(await s.status.getCurrent()).ledger_state.state_version}function _({dappConfig:s}={}){let i=s||f.get("integrations").radix,a;async function c(){if(a)return a;let{GatewayApiClient:e}=await import("@radixdlt/babylon-gateway-api-sdk"),{RadixDappToolkit:r}=await import("@radixdlt/radix-dapp-toolkit"),n=r({...i,networkId:i.network?.networkId||1});return a=e.initialize(n.gatewayApi.clientConfig),a}async function o(e){let r=await c(),n=await w({address:e,networkApi:r}),u=await x({networkApi:r,resources:n});if(!u.some((l)=>l.isGasAsset))return[y.from({chain:g.Radix}),...u];return u}return{getAddress:()=>"",getBalance:o,getNetworkApi:c,signAndBroadcast:()=>{throw new b("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})},validateAddress:R}}export{_ as getRadixToolbox,R as validateRadixAddress};
|
package/dist/src/ripple/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ga as U}from"../../chunk-k50sjysj.js";import{AssetValue as T,Chain as g,derivationPathToString as oe,getChainConfig as E,getRPCUrl as se,resolveDerivationPath as ae,SwapKitError as l}from"@swapkit/helpers";import{isValidClassicAddress as ce,isValidXAddress as L}from"ripple-address-codec";import{match as z,P as F}from"ts-pattern";import{SwapKitError as te}from"@swapkit/helpers";function D(e){return/^[0-9A-Fa-f]{40}$/.test(e)}function b(e){if(D(e))return e.toUpperCase();if(e.length<=3){let a=Buffer.from(e.padEnd(3,"\x00")).toString("hex");return`00${"0".repeat(22)}${a}${"0".repeat(10)}`.toUpperCase()}let r=Buffer.from(e).toString("hex").toUpperCase();if(r.length>40)throw new te({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:e,reason:"Currency exceeds maximum length (20 bytes)"}});return r.padEnd(40,"0")}function me(e){if(!D(e))return e;if(e.toUpperCase().startsWith("00")){let r=e.slice(24,30);try{let a=Buffer.from(r,"hex").toString("ascii").replace(/\0/g,"");if(/^[A-Za-z0-9?!@#$%^&*<>(){}[\]|]+$/.test(a)&&a.length>0)return a}catch{}return e.toUpperCase()}try{let r=e.replace(/0+$/,""),a=r.length%2===0?r:`${r}0`,u=Buffer.from(a,"hex").toString("utf8");if(/^[\x20-\x7E]+$/.test(u))return u}catch{}return e.toUpperCase()}function R(e){if(D(e))return e.toUpperCase();if(e.length<=3)return e;return b(e)}import{RequestClient as re,warnOnce as ie}from"@swapkit/helpers";var N=[{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 be(e,r){let a=R(e),u=N.find((p)=>R(p.currency)===a&&p.issuer===r);if(u)return u;try{let p=await re.get(`https://api.xrplmeta.org/token/${e}:${r}`);if(p)return{currency:e,decimals:15,description:p.desc,domain:p.domain,icon:p.icon,issuer:r,name:p.name,verified:p.self_assessment?.is_regulated||p.self_assessment?.is_licensed}}catch(p){ie({condition:!0,id:`xrpl_token_lookup_${e}_${r}`,warning:`Failed to fetch XRPL token info for ${e}:${r}: ${p}`})}return{currency:e,decimals:15,issuer:r,verified:!1}}function ye(e){return N.filter((r)=>r.issuer===e)}function he(e,r){let a=R(e);return N.some((u)=>R(u.currency)===a&&u.issuer===r)}var ue={ACCOUNT_NOT_FOUND:19};function q(e){if(typeof e!=="object"||e===null||!("data"in e))return!1;let{data:r}=e;return typeof r==="object"&&r!==null&&"error_code"in r&&r.error_code===ue.ACCOUNT_NOT_FOUND}var k={tecFROZEN:"tecFROZEN",tecNO_AUTH:"tecNO_AUTH",tecNO_DST:"tecNO_DST",tecNO_LINE:"tecNO_LINE",tecPATH_DRY:"tecPATH_DRY",tecUNFUNDED_OFFER:"tecUNFUNDED_OFFER"};function W(e){let r=e.match(/^XRP\.([A-Fa-f0-9]{40}|[\x20-\x7E]{1,20})-([a-zA-Z0-9]{25,34})$/);if(!r?.[1]||!r?.[2])return null;if(!S(r[2]))return null;return{currency:r[1],issuer:r[2]}}function le(e,r){return`${g.Ripple}.${e}-${r}`}async function H(e){if(e.isGasAsset){let{xrpToDrops:a}=await import("xrpl");return a(e.getValue("string"))}let r=W(e.toString());if(!r)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:e.toString()}});return{currency:r.currency,issuer:r.issuer,value:e.getValue("string")}}function pe({fee:e,lastLedgerSequence:r,sequence:a,transaction:u}){return a!==void 0&&e!==void 0&&r!==void 0&&!L(u.Account)&&!L(u.Destination)}function X(e,r){let a,u=()=>(a??=import("xrpl").then(({Wallet:p})=>p.fromMnemonic(e,r?{derivationPath:r}:void 0)),a);return{getAddress:async()=>(await u()).address,signTransaction:async(p)=>(await u()).sign(p)}}function S(e){return ce(e)||L(e)}function Ce(e={}){let r;async function a(){if(r)return r;return r=await z(e).with({phrase:F.string},({phrase:n,derivationPath:t,index:i=0})=>X(n,oe(ae({chain:g.Ripple,derivationPath:t,index:i})))).with({signer:F.any},({signer:n})=>n).otherwise(()=>{return}),r}let u;async function p(){let n=await se(g.Ripple);if(!n)throw new l({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:g.Ripple}});let{Client:t}=await import("xrpl"),i=new t(n);return await i.connect(),i}async function w(){if(u){let n=await u.catch(()=>null);if(n?.isConnected())return n}return u=p(),u}async function G(n){let t=await n.request({command:"server_state"}),i=t.result.state.validated_ledger??t.result.state.closed_ledger;if(!i||!Number.isSafeInteger(i.reserve_base)||i.reserve_base<0||!Number.isSafeInteger(i.reserve_inc)||i.reserve_inc<0)throw new l({errorKey:"toolbox_ripple_get_balance_error",info:{reason:"XRPL reserve data is unavailable or invalid"}});return{baseReserveDrops:BigInt(i.reserve_base),ownerReserveDrops:BigInt(i.reserve_inc)}}let y=async()=>{let n=await a();if(!n)throw new l({errorKey:"toolbox_ripple_signer_not_found"});return n.getAddress()},M=async(n)=>{let t=n||await y(),{baseDecimal:i}=E(g.Ripple),s=await w();try{let[o,c]=await Promise.all([s.request({account:t,command:"account_info"}),s.request({account:t,command:"account_lines"})]),d=o.result.account_data.Balance,f=[T.from({chain:g.Ripple,fromBaseDecimal:i,value:d})];for(let m of c.result.lines){let _=le(m.currency,m.account);if(Number.parseFloat(m.balance)!==0)f.push(T.from({asset:_,asyncTokenLookup:!1,value:m.balance}))}return f}catch(o){if(q(o))return[T.from({chain:g.Ripple,value:0})];throw new l({errorKey:"toolbox_ripple_get_balance_error",info:{address:t,error:o}})}},B=async()=>{let{baseDecimal:n}=E(g.Ripple),s=(await(await w()).request({command:"fee"})).result.drops.open_ledger_fee;return T.from({chain:g.Ripple,fromBaseDecimal:n,value:s})};async function O(n){let t=n||await y(),i=await w();try{return(await i.request({account:t,command:"account_lines"})).result.lines.map((o)=>({account:o.account,authorized:o.authorized??!1,balance:o.balance,currency:o.currency,freeze:o.freeze??!1,freezePeer:o.freeze_peer??!1,limit:o.limit,limitPeer:o.limit_peer,noRipple:o.no_ripple??!1,noRipplePeer:o.no_ripple_peer??!1,peerAuthorized:o.peer_authorized??!1,qualityIn:o.quality_in??0,qualityOut:o.quality_out??0}))}catch(s){if(q(s))return[];throw new l({errorKey:"toolbox_ripple_get_trust_lines_error",info:{address:t,error:s}})}}async function Z({address:n,currency:t,issuer:i}){let s=await O(n),o=b(t);return s.some((c)=>b(c.currency)===o&&c.account===i)}async function K({currency:n,issuer:t,limit:i,sender:s}){let o=s||await y();if(!S(t))throw new l({errorKey:"core_transaction_invalid_recipient_address",info:{address:t}});let c=Number.parseFloat(i);if(Number.isNaN(c)||c<0)throw new l({errorKey:"toolbox_ripple_invalid_trust_line_limit",info:{limit:i}});let d=await w(),f={Account:o,LimitAmount:{currency:n,issuer:t,value:i},TransactionType:"TrustSet"};return d.autofill(f)}async function V(n,t){let[i,s,o]=await Promise.all([n.request({account:t,command:"account_info"}),G(n),B()]),{Balance:c,OwnerCount:d}=i.result.account_data,f=o.getBaseValue("bigint"),m=BigInt(c)-s.baseReserveDrops-BigInt(d)*s.ownerReserveDrops-f;if(m<=0n)throw new l({errorKey:"toolbox_sweep_amount_too_low",info:{asset:g.Ripple,balance:c,baseReserve:s.baseReserveDrops.toString(),fee:f.toString(),ownerCount:d,ownerReserve:s.ownerReserveDrops.toString()}});let{baseDecimal:_}=E(g.Ripple),h=T.from({chain:g.Ripple,fromBaseDecimal:_,value:m.toString()});return{amount:await H(h),fee:f.toString()}}async function j(n,t){let i=W(n.toString());if(!i)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:n.toString()}});let s=await w(),o="0",c;while(!0){let d=await s.request({account:t,command:"account_lines",peer:i.issuer,...c!==void 0&&{marker:c}}),f=d.result.lines.find((_)=>_.account===i.issuer&&b(_.currency)===b(i.currency));if(f){o=f.balance;break}let m=d.result.marker;if(m===void 0||m===null)break;c=m}if(!Number.isFinite(Number(o))||Number(o)<=0)throw new l({errorKey:"toolbox_sweep_amount_too_low",info:{asset:n.toString(),balance:o}});return{currency:i.currency,issuer:i.issuer,value:o}}async function I({assetValue:n,recipient:t,memo:i,sender:s,sweep:o,destinationTag:c,extendBySeconds:d=150,sequence:f,fee:m,lastLedgerSequence:_}){if(!S(t))throw new l({errorKey:"core_transaction_invalid_recipient_address"});let h=s||await y();if(n.chain!==g.Ripple)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:n.toString()}});let A=o&&n.isGasAsset?await V(await w(),h):void 0,ne=A?A.amount:o?await j(n,h):await H(n),C={Account:h,Amount:ne,Destination:t,TransactionType:"Payment",...A&&{Fee:A.fee},...c!==void 0&&{DestinationTag:c},...f!==void 0&&{Sequence:f},...m!==void 0&&{Fee:m},..._!==void 0&&{LastLedgerSequence:_}};if(i)C.Memos=[{Memo:{MemoData:Buffer.from(i).toString("hex")}}];if(pe({fee:m,lastLedgerSequence:_,sequence:f,transaction:C}))return C;let P=await(await w()).autofill(C);if(_===void 0&&P.LastLedgerSequence&&d>0)P.LastLedgerSequence+=Math.ceil(d/4);return P}async function x(n){let t=await a();if(!t)throw new l({errorKey:"toolbox_ripple_signer_not_found"});return t.signTransaction(n)}async function v(n){let i=await(await w()).submitAndWait(n),{result:s}=i;if(s.validated)return s.hash;let o=s.meta?.TransactionResult,c=z(o).with(k.tecNO_LINE,()=>"No trust line exists for this token").with(k.tecPATH_DRY,()=>"Payment path could not deliver funds").with(k.tecFROZEN,()=>"Token is frozen").otherwise(()=>{return});throw new l({errorKey:"toolbox_ripple_broadcast_error",info:{chain:g.Ripple,...c?{reason:c}:{txResult:o}}})}let Y=async(n)=>{try{let t=await x(n);return v(t.tx_blob)}catch(t){if(t instanceof l)throw t;throw new l({errorKey:"toolbox_ripple_broadcast_error",info:{chain:g.Ripple,error:t}})}};async function J({assetValue:n,memo:t,recipient:i,sweep:s}){let o=await a();if(!o)throw new l({errorKey:"toolbox_ripple_signer_not_found"});let c=await o.getAddress(),d=await I({assetValue:n,memo:t,recipient:i,sender:c,sweep:s}),f=await x(d);return v(f.tx_blob)}async function Q(n){let t=await a();if(!t)throw new l({errorKey:"toolbox_ripple_signer_not_found"});let i=await t.getAddress(),s=await K({...n,sender:i}),o=await x(s);return v(o.tx_blob)}function ee(){let n=u;if(u=null,n)n.then((t)=>{if(t?.isConnected())return t.disconnect();return}).catch((t)=>{console.warn("XRPL Cleanup failed silently:",t)})}return{broadcastTransaction:v,createSigner:X,createTransaction:I,disconnect:ee,estimateTransactionFee:B,getAddress:y,getBalance:M,getTrustLines:O,hasTrustLine:Z,setTrustLine:K,setTrustLineAndBroadcast:Q,signAndBroadcastTransaction:Y,signTransaction:x,transfer:J,validateAddress:S}}export{N as XRPL_KNOWN_TOKENS,k as XRPL_TOKEN_ERROR_CODES,b as currencyToHex,le as formatXrplTokenIdentifier,ye as getKnownTokensByIssuer,Ce as getRippleToolbox,be as getXrplTokenInfo,me as hexToCurrency,D as isHexCurrency,he as isKnownToken,R as normalizeCurrency,W as parseXrplTokenIdentifier,S as validateRippleAddress};
|
|
1
|
+
import{ha as U}from"../../chunk-4428244x.js";import{AssetValue as T,Chain as g,derivationPathToString as oe,getChainConfig as E,getRPCUrl as se,resolveDerivationPath as ae,SwapKitError as l}from"@swapkit/helpers";import{isValidClassicAddress as ce,isValidXAddress as L}from"ripple-address-codec";import{match as z,P as F}from"ts-pattern";import{SwapKitError as te}from"@swapkit/helpers";function D(e){return/^[0-9A-Fa-f]{40}$/.test(e)}function b(e){if(D(e))return e.toUpperCase();if(e.length<=3){let a=Buffer.from(e.padEnd(3,"\x00")).toString("hex");return`00${"0".repeat(22)}${a}${"0".repeat(10)}`.toUpperCase()}let r=Buffer.from(e).toString("hex").toUpperCase();if(r.length>40)throw new te({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:e,reason:"Currency exceeds maximum length (20 bytes)"}});return r.padEnd(40,"0")}function me(e){if(!D(e))return e;if(e.toUpperCase().startsWith("00")){let r=e.slice(24,30);try{let a=Buffer.from(r,"hex").toString("ascii").replace(/\0/g,"");if(/^[A-Za-z0-9?!@#$%^&*<>(){}[\]|]+$/.test(a)&&a.length>0)return a}catch{}return e.toUpperCase()}try{let r=e.replace(/0+$/,""),a=r.length%2===0?r:`${r}0`,u=Buffer.from(a,"hex").toString("utf8");if(/^[\x20-\x7E]+$/.test(u))return u}catch{}return e.toUpperCase()}function R(e){if(D(e))return e.toUpperCase();if(e.length<=3)return e;return b(e)}import{RequestClient as re,warnOnce as ie}from"@swapkit/helpers";var N=[{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 be(e,r){let a=R(e),u=N.find((p)=>R(p.currency)===a&&p.issuer===r);if(u)return u;try{let p=await re.get(`https://api.xrplmeta.org/token/${e}:${r}`);if(p)return{currency:e,decimals:15,description:p.desc,domain:p.domain,icon:p.icon,issuer:r,name:p.name,verified:p.self_assessment?.is_regulated||p.self_assessment?.is_licensed}}catch(p){ie({condition:!0,id:`xrpl_token_lookup_${e}_${r}`,warning:`Failed to fetch XRPL token info for ${e}:${r}: ${p}`})}return{currency:e,decimals:15,issuer:r,verified:!1}}function ye(e){return N.filter((r)=>r.issuer===e)}function he(e,r){let a=R(e);return N.some((u)=>R(u.currency)===a&&u.issuer===r)}var ue={ACCOUNT_NOT_FOUND:19};function q(e){if(typeof e!=="object"||e===null||!("data"in e))return!1;let{data:r}=e;return typeof r==="object"&&r!==null&&"error_code"in r&&r.error_code===ue.ACCOUNT_NOT_FOUND}var k={tecFROZEN:"tecFROZEN",tecNO_AUTH:"tecNO_AUTH",tecNO_DST:"tecNO_DST",tecNO_LINE:"tecNO_LINE",tecPATH_DRY:"tecPATH_DRY",tecUNFUNDED_OFFER:"tecUNFUNDED_OFFER"};function W(e){let r=e.match(/^XRP\.([A-Fa-f0-9]{40}|[\x20-\x7E]{1,20})-([a-zA-Z0-9]{25,34})$/);if(!r?.[1]||!r?.[2])return null;if(!S(r[2]))return null;return{currency:r[1],issuer:r[2]}}function le(e,r){return`${g.Ripple}.${e}-${r}`}async function H(e){if(e.isGasAsset){let{xrpToDrops:a}=await import("xrpl");return a(e.getValue("string"))}let r=W(e.toString());if(!r)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:e.toString()}});return{currency:r.currency,issuer:r.issuer,value:e.getValue("string")}}function pe({fee:e,lastLedgerSequence:r,sequence:a,transaction:u}){return a!==void 0&&e!==void 0&&r!==void 0&&!L(u.Account)&&!L(u.Destination)}function X(e,r){let a,u=()=>(a??=import("xrpl").then(({Wallet:p})=>p.fromMnemonic(e,r?{derivationPath:r}:void 0)),a);return{getAddress:async()=>(await u()).address,signTransaction:async(p)=>(await u()).sign(p)}}function S(e){return ce(e)||L(e)}function Ce(e={}){let r;async function a(){if(r)return r;return r=await z(e).with({phrase:F.string},({phrase:n,derivationPath:t,index:i=0})=>X(n,oe(ae({chain:g.Ripple,derivationPath:t,index:i})))).with({signer:F.any},({signer:n})=>n).otherwise(()=>{return}),r}let u;async function p(){let n=await se(g.Ripple);if(!n)throw new l({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:g.Ripple}});let{Client:t}=await import("xrpl"),i=new t(n);return await i.connect(),i}async function w(){if(u){let n=await u.catch(()=>null);if(n?.isConnected())return n}return u=p(),u}async function G(n){let t=await n.request({command:"server_state"}),i=t.result.state.validated_ledger??t.result.state.closed_ledger;if(!i||!Number.isSafeInteger(i.reserve_base)||i.reserve_base<0||!Number.isSafeInteger(i.reserve_inc)||i.reserve_inc<0)throw new l({errorKey:"toolbox_ripple_get_balance_error",info:{reason:"XRPL reserve data is unavailable or invalid"}});return{baseReserveDrops:BigInt(i.reserve_base),ownerReserveDrops:BigInt(i.reserve_inc)}}let y=async()=>{let n=await a();if(!n)throw new l({errorKey:"toolbox_ripple_signer_not_found"});return n.getAddress()},M=async(n)=>{let t=n||await y(),{baseDecimal:i}=E(g.Ripple),s=await w();try{let[o,c]=await Promise.all([s.request({account:t,command:"account_info"}),s.request({account:t,command:"account_lines"})]),d=o.result.account_data.Balance,f=[T.from({chain:g.Ripple,fromBaseDecimal:i,value:d})];for(let m of c.result.lines){let _=le(m.currency,m.account);if(Number.parseFloat(m.balance)!==0)f.push(T.from({asset:_,asyncTokenLookup:!1,value:m.balance}))}return f}catch(o){if(q(o))return[T.from({chain:g.Ripple,value:0})];throw new l({errorKey:"toolbox_ripple_get_balance_error",info:{address:t,error:o}})}},B=async()=>{let{baseDecimal:n}=E(g.Ripple),s=(await(await w()).request({command:"fee"})).result.drops.open_ledger_fee;return T.from({chain:g.Ripple,fromBaseDecimal:n,value:s})};async function O(n){let t=n||await y(),i=await w();try{return(await i.request({account:t,command:"account_lines"})).result.lines.map((o)=>({account:o.account,authorized:o.authorized??!1,balance:o.balance,currency:o.currency,freeze:o.freeze??!1,freezePeer:o.freeze_peer??!1,limit:o.limit,limitPeer:o.limit_peer,noRipple:o.no_ripple??!1,noRipplePeer:o.no_ripple_peer??!1,peerAuthorized:o.peer_authorized??!1,qualityIn:o.quality_in??0,qualityOut:o.quality_out??0}))}catch(s){if(q(s))return[];throw new l({errorKey:"toolbox_ripple_get_trust_lines_error",info:{address:t,error:s}})}}async function Z({address:n,currency:t,issuer:i}){let s=await O(n),o=b(t);return s.some((c)=>b(c.currency)===o&&c.account===i)}async function K({currency:n,issuer:t,limit:i,sender:s}){let o=s||await y();if(!S(t))throw new l({errorKey:"core_transaction_invalid_recipient_address",info:{address:t}});let c=Number.parseFloat(i);if(Number.isNaN(c)||c<0)throw new l({errorKey:"toolbox_ripple_invalid_trust_line_limit",info:{limit:i}});let d=await w(),f={Account:o,LimitAmount:{currency:n,issuer:t,value:i},TransactionType:"TrustSet"};return d.autofill(f)}async function V(n,t){let[i,s,o]=await Promise.all([n.request({account:t,command:"account_info"}),G(n),B()]),{Balance:c,OwnerCount:d}=i.result.account_data,f=o.getBaseValue("bigint"),m=BigInt(c)-s.baseReserveDrops-BigInt(d)*s.ownerReserveDrops-f;if(m<=0n)throw new l({errorKey:"toolbox_sweep_amount_too_low",info:{asset:g.Ripple,balance:c,baseReserve:s.baseReserveDrops.toString(),fee:f.toString(),ownerCount:d,ownerReserve:s.ownerReserveDrops.toString()}});let{baseDecimal:_}=E(g.Ripple),h=T.from({chain:g.Ripple,fromBaseDecimal:_,value:m.toString()});return{amount:await H(h),fee:f.toString()}}async function j(n,t){let i=W(n.toString());if(!i)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:n.toString()}});let s=await w(),o="0",c;while(!0){let d=await s.request({account:t,command:"account_lines",peer:i.issuer,...c!==void 0&&{marker:c}}),f=d.result.lines.find((_)=>_.account===i.issuer&&b(_.currency)===b(i.currency));if(f){o=f.balance;break}let m=d.result.marker;if(m===void 0||m===null)break;c=m}if(!Number.isFinite(Number(o))||Number(o)<=0)throw new l({errorKey:"toolbox_sweep_amount_too_low",info:{asset:n.toString(),balance:o}});return{currency:i.currency,issuer:i.issuer,value:o}}async function I({assetValue:n,recipient:t,memo:i,sender:s,sweep:o,destinationTag:c,extendBySeconds:d=150,sequence:f,fee:m,lastLedgerSequence:_}){if(!S(t))throw new l({errorKey:"core_transaction_invalid_recipient_address"});let h=s||await y();if(n.chain!==g.Ripple)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:n.toString()}});let A=o&&n.isGasAsset?await V(await w(),h):void 0,ne=A?A.amount:o?await j(n,h):await H(n),C={Account:h,Amount:ne,Destination:t,TransactionType:"Payment",...A&&{Fee:A.fee},...c!==void 0&&{DestinationTag:c},...f!==void 0&&{Sequence:f},...m!==void 0&&{Fee:m},..._!==void 0&&{LastLedgerSequence:_}};if(i)C.Memos=[{Memo:{MemoData:Buffer.from(i).toString("hex")}}];if(pe({fee:m,lastLedgerSequence:_,sequence:f,transaction:C}))return C;let P=await(await w()).autofill(C);if(_===void 0&&P.LastLedgerSequence&&d>0)P.LastLedgerSequence+=Math.ceil(d/4);return P}async function x(n){let t=await a();if(!t)throw new l({errorKey:"toolbox_ripple_signer_not_found"});return t.signTransaction(n)}async function v(n){let i=await(await w()).submitAndWait(n),{result:s}=i;if(s.validated)return s.hash;let o=s.meta?.TransactionResult,c=z(o).with(k.tecNO_LINE,()=>"No trust line exists for this token").with(k.tecPATH_DRY,()=>"Payment path could not deliver funds").with(k.tecFROZEN,()=>"Token is frozen").otherwise(()=>{return});throw new l({errorKey:"toolbox_ripple_broadcast_error",info:{chain:g.Ripple,...c?{reason:c}:{txResult:o}}})}let Y=async(n)=>{try{let t=await x(n);return v(t.tx_blob)}catch(t){if(t instanceof l)throw t;throw new l({errorKey:"toolbox_ripple_broadcast_error",info:{chain:g.Ripple,error:t}})}};async function J({assetValue:n,memo:t,recipient:i,sweep:s}){let o=await a();if(!o)throw new l({errorKey:"toolbox_ripple_signer_not_found"});let c=await o.getAddress(),d=await I({assetValue:n,memo:t,recipient:i,sender:c,sweep:s}),f=await x(d);return v(f.tx_blob)}async function Q(n){let t=await a();if(!t)throw new l({errorKey:"toolbox_ripple_signer_not_found"});let i=await t.getAddress(),s=await K({...n,sender:i}),o=await x(s);return v(o.tx_blob)}function ee(){let n=u;if(u=null,n)n.then((t)=>{if(t?.isConnected())return t.disconnect();return}).catch((t)=>{console.warn("XRPL Cleanup failed silently:",t)})}return{broadcastTransaction:v,createSigner:X,createTransaction:I,disconnect:ee,estimateTransactionFee:B,getAddress:y,getBalance:M,getTrustLines:O,hasTrustLine:Z,setTrustLine:K,setTrustLineAndBroadcast:Q,signAndBroadcastTransaction:Y,signTransaction:x,transfer:J,validateAddress:S}}export{N as XRPL_KNOWN_TOKENS,k as XRPL_TOKEN_ERROR_CODES,b as currencyToHex,le as formatXrplTokenIdentifier,ye as getKnownTokensByIssuer,Ce as getRippleToolbox,be as getXrplTokenInfo,me as hexToCurrency,D as isHexCurrency,he as isKnownToken,R as normalizeCurrency,W as parseXrplTokenIdentifier,S as validateRippleAddress};
|
package/dist/src/solana/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ga as D}from"../../chunk-as9fracn.js";import{ha as d}from"../../chunk-4428244x.js";import{PublicKey as p}from"@solana/web3.js";import{AssetValue as k,Chain as w,DerivationPath as M,derivationPathToString as L,getChainConfig as R,getRPCUrl as G,NetworkDerivationPath as N,SwapKitError as P,updateDerivationPath as U}from"@swapkit/helpers";import{match as V,P as K}from"ts-pattern";async function j(n){let e=k.from({address:n,chain:w.Solana});if(e.symbol!=="UNKNOWN")return{decimals:e.decimal||0,id:n,logoURI:e.getIconUrl(),name:e.symbol,symbol:e.ticker};let t=`https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(n)}`;try{let a=await fetch(t);if(!a.ok)return null;let r=await a.json();if(!Array.isArray(r)||r.length===0)return null;return r.find((o)=>o.id===n)||null}catch{return null}}async function E(n){let e=await y(),{PublicKey:t}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:a}=await import("@solana/spl-token"),r=new t(n),{baseDecimal:s}=R(w.Solana),o=await e.getBalance(r),i=[k.from({chain:w.Solana,fromBaseDecimal:s,value:o||0})],c=await e.getParsedTokenAccountsByOwner(r,{programId:a});for(let{account:l}of c.value){let f=l.data.parsed.info,T=f.mint,u=f.tokenAmount.amount;if(Number(u)===0)continue;let m=await j(T),g=m?.symbol||"UNKNOWN",h=m?.decimals||f.tokenAmount.decimals;i.push(k.from({asset:`${w.Solana}.${g}-${T}`,fromBaseDecimal:h,value:u}))}return i}function O(n){try{let e=new p(n);return p.isOnCurve(e.toBytes())}catch{return!1}}function nn(n){let e=n&&"index"in n?n.index||0:0,t=L(n&&"derivationPath"in n&&n.derivationPath?n.derivationPath:U(N[w.Solana],{index:e})),a;async function r(){if(a)return a;return a=await V(n).with({phrase:K.string},({phrase:o})=>x({derivationPath:t,phrase:o})).with({signer:K.any},({signer:o})=>o).otherwise(()=>{return}),a}async function s(){let o=await r();return o?.publicKey?I(o.publicKey):""}return{broadcastTransaction:_(y),createKeysForPath:x,createTransaction:C(y),createTransactionFromInstructions:z,estimateTransactionFee:W(y),getAddress:s,getAddressFromPubKey:I,getBalance:D(w.Solana),getBalanceFromRPC:E,getConnection:y,getPubkeyFromAddress:(o)=>new p(o),signAndBroadcastTransaction:async(o)=>{let i=await B(y,r)(o);return _(y)(i)},signTransaction:B(y,r),transfer:J(y,r),validateAddress:O}}function W(n){return async({recipient:e,assetValue:t,memo:a,isProgramDerivedAddress:r,sender:s})=>{let o=await n(),i=await C(n)({assetValue:t,isProgramDerivedAddress:r,memo:a,recipient:e,sender:s}),c=await F(o,i),{baseDecimal:l}=R(w.Solana);return k.from({chain:w.Solana,fromBaseDecimal:l,value:c})}}async function F(n,e){let t=await n.getFeeForMessage(e.compileMessage());if(t.value===null)throw new P("toolbox_fee_estimation_failed","Could not estimate Solana fee.");return t.value}async function y(){let{Connection:n}=await import("@solana/web3.js"),e=await G(w.Solana);return new n(e,{commitment:"confirmed",fetchMiddleware:(t,a,r)=>{let s={};for(let[o,i]of Object.entries(a?.headers??{})){let c=o.toLowerCase();if(c!=="pragma"&&c!=="solana-client")s[o]=i}r(t,{...a,headers:s})}})}function H(n){return async({assetValue:e,recipient:t,sender:a,isProgramDerivedAddress:r,sweep:s})=>{let o=new p(a);if(e.isGasAsset){let{Transaction:i,SystemProgram:c}=await import("@solana/web3.js");return new i().add(c.transfer({fromPubkey:o,lamports:s?0:e.getBaseValue("number"),toPubkey:new p(t)}))}if(e.address){let i=await n();return q({amount:s?0:e.getBaseValue("number"),connection:i,decimals:e.decimal,from:o,isProgramDerivedAddress:r,recipient:t,sweep:s,tokenAddress:e.address})}return}}async function q({tokenAddress:n,recipient:e,from:t,connection:a,amount:r,decimals:s,isProgramDerivedAddress:o,sweep:i}){let{getAssociatedTokenAddress:c,getAccount:l,createAssociatedTokenAccountInstruction:f,createTransferCheckedInstruction:T}=await import("@solana/spl-token"),{Transaction:u}=await import("@solana/web3.js"),m=new u,g=new p(n),h=await c(g,t),S=new p(e),b=await c(g,S,o),v=!1;try{await l(a,b),v=!0}catch{}if(!v)m.add(f(t,b,S,g));let A=i?BigInt((await a.getTokenAccountBalance(h)).value.amount):r;if(i&&A<=0n)throw new P({errorKey:"toolbox_sweep_amount_too_low",info:{asset:n,balance:A.toString()}});return m.add(T(h,g,b,t,A,s)),m}function C(n){return async({recipient:e,assetValue:t,memo:a,isProgramDerivedAddress:r,sender:s,recentBlockhash:o,sweep:i})=>{let{createMemoInstruction:c}=await import("@solana/spl-memo"),l=new p(s);if(!(r||O(e)))throw new P("core_transaction_invalid_recipient_address");let f,T=()=>f??=n(),u=await H(T)({assetValue:t,isProgramDerivedAddress:r,recipient:e,sender:s,sweep:i});if(!u)throw new P("core_transaction_invalid_sender_address");if(a)u.add(c(a));if(u.recentBlockhash=o??(await(await T()).getLatestBlockhash()).blockhash,u.feePayer=l,i&&t.isGasAsset){let m=await T(),[g,h,S]=await Promise.all([m.getBalance(l),F(m,u),m.getMinimumBalanceForRentExemption(0)]),b=g-h-S;if(b<=0)throw new P({errorKey:"toolbox_sweep_amount_too_low",info:{balance:g,fee:h,rentReserve:S}});let{SystemProgram:v}=await import("@solana/web3.js");u.instructions[0]=v.transfer({fromPubkey:l,lamports:b,toPubkey:new p(e)})}return u}}async function z({instructions:n}){let{Transaction:e}=await import("@solana/web3.js"),t=new e().add(...n);if(!t)throw new P("core_transaction_invalid_sender_address");return t}function J(n,e){return async({recipient:t,assetValue:a,memo:r,isProgramDerivedAddress:s,sweep:o})=>{let i=await e();if(!i)throw new P("core_transaction_invalid_sender_address");let c=i.publicKey?.toString()??(await i.connect()).publicKey.toString(),l=await C(n)({assetValue:a,isProgramDerivedAddress:s,memo:r,recipient:t,sender:c,sweep:o});if("signTransaction"in i){let f=await i.signTransaction(l);return _(n)(f)}return l.sign(i),_(n)(l)}}function _(n){return async(e)=>(await n()).sendRawTransaction(e.serialize())}function B(n,e){return async(t)=>{let a=await e();if(!a)throw new P("toolbox_solana_no_signer");let{VersionedTransaction:r}=await import("@solana/web3.js");if(!(t instanceof r)){let o=await(await n()).getLatestBlockhash();t.recentBlockhash=o.blockhash,t.feePayer=a.publicKey||void 0}if("connect"in a)return await a.signTransaction(t);return t.sign([a]),t}}async function x({phrase:n,derivationPath:e=M.SOL}){let{HDKey:t}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:a}=await import("@scure/bip39"),{Keypair:r}=await import("@solana/web3.js"),s=a(n),o=t.fromMasterSeed(s);return r.fromSeed(o.derive(e,!0).privateKey)}function I(n){return n.toString()}export{x as createKeysForPath,j as fetchTokenMetaData,nn as getSolanaToolbox,O as validateSolanaAddress};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ga as I}from"../../chunk-as9fracn.js";import{ha as u}from"../../chunk-4428244x.js";import{AssetValue as T,Chain as D,DerivationPath as W,derivationPathToString as tt,getChainConfig as M,getRPCUrl as U,NetworkDerivationPath as et,SwapKitError as s,updateDerivationPath as at}from"@swapkit/helpers";import{match as j,P}from"ts-pattern";var K="0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",z="0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",H="0x01a736d6ed154502257f02b1ccdf4d9d1089f80811cd6acad48e6b6a9d1f2003";function R(i){if(!i)return!1;return/^0x[0-9a-fA-F]{1,64}$/.test(i)}async function E({phrase:i,derivationPath:d=W.STRK}){let{HDKey:h}=await import("@scure/bip32"),{mnemonicToSeedSync:_}=await import("@scure/bip39"),{ec:l,hash:w,encode:f,CallData:p}=await import("starknet"),v=_(i),S=h.fromMasterSeed(v).derive(d);if(!S.privateKey)throw new s("toolbox_starknet_no_signer");let m=f.addHexPrefix(Buffer.from(S.privateKey).toString("hex")),k=l.starkCurve.grindKey(m),g=f.addHexPrefix(k),b=l.starkCurve.getStarkKey(g),C=p.compile([b,0]);return{address:w.calculateContractAddressFromHash(b,H,C,0),privateKey:g,publicKey:b}}async function Z({phrase:i,derivationPath:d=W.STRK}){let{Account:h,RpcProvider:_}=await import("starknet"),{privateKey:l,address:w}=await E({derivationPath:d,phrase:i}),f=await U(D.Starknet),p=new _({nodeUrl:f});return new h({address:w,provider:p,signer:l})}function rt(i){let d=D.Starknet,h=i&&"index"in i?i.index||0:0,_=tt(i&&"derivationPath"in i&&i.derivationPath?i.derivationPath:at(et[d],{index:h})),l,w,f;async function p(){if(w)return w;if(l)return w=l.provider,w;let{RpcProvider:e}=await import("starknet"),t=await U(d);return w=new e({nodeUrl:t}),w}async function v(e){let t=await p(),a=e||await k();if(!a)return!1;try{return await t.getClassHashAt(a),!0}catch(r){if(r instanceof Error&&r.message.includes("Contract not found"))return!1;let n=r;if(n?.code===20||n?.code===19)return!1;throw r}}async function F(){let{CallData:e,hash:t}=await import("starknet"),a=await p(),r=await m();if(!r)throw new s("toolbox_starknet_no_signer");if(!f)throw new s({errorKey:"toolbox_starknet_account_not_deployed",info:{message:"Cannot deploy account: public key not available. Use phrase-based wallet initialization."}});if(await v())return r.address;let o=e.compile([f,0]);if(t.calculateContractAddressFromHash(f,H,o,0).toLowerCase()!==r.address.toLowerCase())throw new s({errorKey:"toolbox_starknet_account_not_deployed",info:{message:"Address mismatch during deployment verification"}});let y={addressSalt:f,classHash:H,constructorCalldata:o},{transaction_hash:x}=await r.deployAccount(y);return await a.waitForTransaction(x),x}async function S(){if(!await v()){if(!f)throw new s({errorKey:"toolbox_starknet_account_not_deployed",info:{message:"Starknet account is not deployed and cannot be auto-deployed without public key. Use phrase-based wallet initialization."}});await F()}}async function m(){if(l)return l;return l=await j(i).with({phrase:P.string},async({phrase:e})=>{let{Account:t,RpcProvider:a}=await import("starknet"),{privateKey:r,address:n,publicKey:o}=await E({derivationPath:_,phrase:e});f=o;let c=await U(D.Starknet),y=new a({nodeUrl:c});return new t({address:n,provider:y,signer:r})}).with({address:P.string,privateKey:P.string},async({privateKey:e,address:t})=>{let{Account:a}=await import("starknet"),r=await p();return new a({address:t,provider:r,signer:e})}).with({signer:P.instanceOf(Object)},({signer:e})=>e).otherwise(()=>{return}),l}async function k(){return(await m())?.address??""}async function g(e,t){let a=await p(),{uint256:r,CallData:n}=await import("starknet"),[o="0",c="0"]=await a.callContract({calldata:n.compile({account:e}),contractAddress:t,entrypoint:"balanceOf"});return r.uint256ToBN({high:c,low:o})}async function b(e){let{baseDecimal:t}=M(d),a=[],r=[K,z];for(let n of r)try{let o=await g(e,n);j(n).with(K,()=>{a.push(T.from({chain:d,fromBaseDecimal:t,value:o}))}).with(z,()=>{if(o>0n)a.push(T.from({asset:`${d}.ETH-${n}`,fromBaseDecimal:t,value:o}))}).otherwise(()=>{})}catch{}return a}async function C(e){let t=await m();if(t&&(!e||t.address.toLowerCase()===e.toLowerCase()))return t;if(e){let{Account:a}=await import("starknet"),r=await p();return new a({address:e,provider:r,signer:"0x0"})}throw new s({errorKey:"toolbox_starknet_fee_estimation_failed",info:{message:"Estimating fee needs a valid sender address or signer"}})}async function O(e,t){try{let a=await C(t),{overall_fee:r}=await a.estimateInvokeFee(e);if(r<=0n)throw new s({errorKey:"toolbox_starknet_fee_estimation_failed",info:{message:"Sweep fee estimation returned a non-positive fee",sender:t}});return r}catch(a){throw new s({errorKey:"toolbox_starknet_fee_estimation_failed",info:{message:"Unable to estimate the sweep fee. Verify RPC availability and that the sender account is deployed.",sender:t}},a)}}async function G(e,t){let a=await N(e),r=t.isGasAsset?a.find(({isGasAsset:n})=>n):a.find(({address:n})=>n?.toLowerCase()===t.address?.toLowerCase());if(r)return r.getBaseValue("bigint");if(t.isGasAsset)return g(e,K);if(t.address)return g(e,t.address);return 0n}async function B({recipient:e,assetValue:t,sender:a,sweep:r}){let{CallData:n,uint256:o}=await import("starknet");if(!R(e))throw new s("core_transaction_invalid_recipient_address",{address:e});let c=t.isGasAsset?K:t.address;if(!c)throw new s("toolbox_starknet_invalid_address",{address:c,assetValue:t});let y=t.getBaseValue("bigint");if(r){let A=a??await k();if(!R(A))throw new s("core_transaction_invalid_sender_address",{address:A});if(t.isGasAsset){let Y=[{calldata:n.compile([e,o.bnToUint256(1n)]),contractAddress:c,entrypoint:"transfer"}],V=await O(Y,A);y=await G(A,t)-V}else y=await G(A,t);if(y<=0n)throw new s({errorKey:"toolbox_sweep_amount_too_low",info:{amount:y.toString(),asset:t.toString()}})}let x=o.bnToUint256(y);return[{calldata:n.compile([e,x]),contractAddress:c,entrypoint:"transfer"}]}async function q({recipient:e,assetValue:t,sender:a}){let{baseDecimal:r}=M(D.Starknet);try{let n=await B({assetValue:t,recipient:e}),c=await(await C(a)).estimateInvokeFee(n);if(c?.overall_fee)return T.from({chain:d,fromBaseDecimal:r,value:c.overall_fee})}catch(n){throw new s("toolbox_starknet_fee_estimation_failed",n)}return T.from({chain:d,value:"0.00001"})}async function J({recipient:e,assetValue:t,memo:a,sweep:r}){let n=await m();if(!n)throw new s("toolbox_starknet_no_signer");await S();let o=await B({assetValue:t,memo:a,recipient:e,sender:n.address,sweep:r});return(await n.execute(o)).transaction_hash}async function Q(e){let t=await m();if(!t)throw new s("toolbox_starknet_no_signer");let a=await t.signMessage(e);return Array.isArray(a)?a:[a.r.toString(),a.s.toString()]}async function L(e){let t=await m();if(!t)throw new s("toolbox_starknet_no_signer");return await S(),(await t.execute(e)).transaction_hash}function X(e){return L(e)}async function N(e,t=!0){try{return await I(d)(e,t)}catch{return b(e)}}return{broadcastTransaction:L,createKeysForPath:Z,createTransaction:B,deployAccount:F,estimateTransactionFee:q,getAddress:k,getBalance:N,getProvider:p,isAccountDeployed:v,signAndBroadcastTransaction:X,signMessage:Q,transfer:J,validateAddress:R}}export{E as deriveStarknetKeys,rt as getStarknetToolbox,Z as starknetCreateKeysForPath,R as validateStarknetAddress};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ha as b}from"../../chunk-4428244x.js";import{AssetValue as h,Chain as c,derivationPathToString as ee,getChainConfig as H,getRPCUrl as X,SKConfig as te,SwapKitError as u}from"@swapkit/helpers";import{match as ne,P as re}from"ts-pattern";var se=/^G[A-Z2-7]{55}$/,ae=/^[A-Za-z0-9]{1,12}$/,j=2,oe=600000,I;async function G(e){if(I&&Date.now()-I.timestamp<oe)return I.value;let l=(await e.ledgers().order("desc").limit(1).call()).records[0]?.base_reserve_in_stroops;if(l===void 0)throw new u({errorKey:"toolbox_stellar_balance_error",info:{reason:"base_reserve_unavailable"}});return I={timestamp:Date.now(),value:l},l}function L(e){return h.from({chain:c.Stellar,value:e}).getBaseValue("bigint")}function ie(e){let{baseDecimal:s}=H(c.Stellar);return h.from({chain:c.Stellar,fromBaseDecimal:s,value:e}).getValue("string")}function V({balance:e,baseReserveInStroops:s,numSponsored:l,numSponsoring:p,sellingLiabilities:d,subentryCount:g}){let w=L(e),_=L(d),k=j+g+p-l,K=BigInt(k)*BigInt(s),A=w-K-_;return A>0n?A:0n}function le({account:e,assetValue:s,baseReserveInStroops:l,fee:p}){let d=e.balances.find((_)=>_.asset_type==="native"),w=(d?V({balance:d.balance,baseReserveInStroops:l,numSponsored:e.num_sponsored,numSponsoring:e.num_sponsoring,sellingLiabilities:d.selling_liabilities,subentryCount:e.subentry_count}):0n)-BigInt(p);if(w<=0n)throw new u({errorKey:"toolbox_sweep_amount_too_low",info:{asset:s.toString(),reason:"spendable balance does not cover the transaction fee"}});return w}function ce({baseReserveInStroops:e,sweepAmountInStroops:s}){if(s===void 0||e===void 0)return;let l=BigInt(j)*BigInt(e);if(s<l)throw new u({errorKey:"toolbox_sweep_amount_too_low",info:{amountInStroops:s,minimumStartingBalanceInStroops:l,reason:"starting balance is below the Stellar account minimum"}})}function ue({account:e,assetCode:s,assetValue:l,issuer:p,sweep:d}){if(!d)return l.getValue("string");let g=e.balances.find((w)=>("asset_code"in w)&&w.asset_code===s&&w.asset_issuer===p)?.balance??"0";if(L(g)<=0n)throw new u({errorKey:"toolbox_sweep_amount_too_low",info:{asset:l.toString(),balance:g,reason:"trust-line balance is not positive"}});return g}function de(e){if(!e)return;if(new TextEncoder().encode(e).length>28)throw new u("helpers_invalid_memo_type")}function O(e){if(!e||typeof e!=="string"||!e.startsWith("G")||e.length!==56)return!1;return se.test(e)}function U(e){if(typeof e!=="object"||e===null)return;let s="response"in e?e.response:void 0;return typeof s?.status==="number"?s.status:void 0}function fe(e){return U(e)===504}function me(e){return e.hash?.().toString("hex")}function pe(e){return[...new Set([e,...te.get("rpcUrls")[c.Stellar]])].filter(Boolean)}async function W(e){if(!O(e))return!1;try{let{StrKey:s}=await import("@stellar/stellar-sdk");return s.isValidEd25519PublicKey(e)}catch{return!1}}async function F(e){let{address:s,ticker:l}=e,p=s?await W(s):!1;if(e.chain!==c.Stellar||e.isGasAsset||!ae.test(l)||!s||!p)throw new u({errorKey:"helpers_invalid_asset_identifier",info:{identifier:e.toString()}});return{assetCode:l,issuer:s}}function we(e={}){let s;async function l({phrase:t,path:n}){let{HDKey:a}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:r}=await import("@scure/bip39"),{Keypair:o}=await import("@stellar/stellar-sdk"),i=r(t),m=a.fromMasterSeed(i).derive(n,!0);return o.fromRawEd25519Seed(Buffer.from(m.privateKey))}async function p(){if(s)return s;let t=ne(e).with({phrase:re.string},({phrase:r})=>r).otherwise(()=>{return});if(!t)throw new u("toolbox_stellar_no_signer");if(e.derivationPath&&(e.derivationPath[3]||e.derivationPath[4]))throw new u("toolbox_derivation_slot_unsupported",{chain:c.Stellar,derivationPath:e.derivationPath});let n=e.index??0;if(!e.derivationPath&&(!Number.isInteger(n)||n<0))throw new u("toolbox_derivation_slot_unsupported",{chain:c.Stellar,index:n});let a=e.derivationPath?ee(e.derivationPath.slice(0,3)):`m/44'/148'/${n}'`;return s=await l({path:a,phrase:t}),s}async function d(t){let{Horizon:n}=await import("@stellar/stellar-sdk"),a=t||await X(c.Stellar);return new n.Server(a)}async function g(t,n){for(let a of n)try{return(await(await d(a)).transactions().transaction(t).call()).hash||t}catch{}return}async function w(t,n){let a=await X(c.Stellar),r=pe(a),o=me(t),i;for(let f of r)try{let m=await d(f),{hash:S}=await m.submitTransaction(t);return S}catch(m){if(i=m,!fe(m))break;let S=o?await g(o,r):void 0;if(S)return S}throw new u(n,i)}async function _(){try{return(await p()).publicKey()}catch(t){if(t instanceof u&&t.errorKey==="toolbox_derivation_slot_unsupported")throw t;return""}}async function k(t){let n=t||await _();if(!n)throw new u("toolbox_stellar_account_not_found");let a=await d(),[r,o]=await Promise.allSettled([a.loadAccount(n),G(a)]);if(r.status==="rejected"){let i=r.reason;if(U(i)===404)return[h.from({chain:c.Stellar,value:0})];throw i}if(o.status==="rejected")throw o.reason;return r.value.balances.map((i)=>{if(i.asset_type==="native"){let S=V({balance:i.balance,baseReserveInStroops:o.value,numSponsored:r.value.num_sponsored,numSponsoring:r.value.num_sponsoring,sellingLiabilities:i.selling_liabilities,subentryCount:r.value.subentry_count}),{baseDecimal:B}=H(c.Stellar);return h.from({chain:c.Stellar,fromBaseDecimal:B,value:S})}let f="asset_code"in i?i.asset_code:"",m="asset_issuer"in i?i.asset_issuer:"";return h.from({asset:`${c.Stellar}.${f}-${m}`,asyncTokenLookup:!1,value:i.balance})})}async function K({address:t,assetValue:n}){if(n.chain!==c.Stellar)throw new u({errorKey:"toolbox_stellar_trustline_asset_invalid",info:{asset:n.toString()}});if(n.isGasAsset)return!0;if(!n.address)throw new u({errorKey:"toolbox_stellar_trustline_asset_invalid",info:{asset:n.toString(),reason:"missing issuer"}});let a=await d(),r;try{r=await a.loadAccount(t)}catch(o){if(U(o)===404)return!1;throw o}return r.balances.some((o)=>("asset_code"in o)&&o.asset_code===n.ticker&&o.asset_issuer===n.address)}async function A({recipient:t,assetValue:n,memo:a,sender:r,sweep:o}){if(de(a),!await W(t))throw new u("core_transaction_invalid_recipient_address");let f=r||await _();if(!f)throw new u("toolbox_stellar_no_signer");let{Asset:m,Memo:S,Networks:B,Operation:y,TransactionBuilder:E}=await import("@stellar/stellar-sdk"),v=await d(),[P,x,D]=await Promise.all([v.fetchBaseFee(),v.loadAccount(f),o&&n.isGasAsset?G(v):Promise.resolve(void 0)]),C=new E(x,{fee:String(P),networkPassphrase:B.PUBLIC});if(n.isGasAsset){let T=o&&D!==void 0?le({account:x,assetValue:n,baseReserveInStroops:D,fee:P}):void 0,R=T===void 0?n.getValue("string"):ie(T);try{await v.loadAccount(t),C.addOperation(y.payment({amount:R,asset:m.native(),destination:t}))}catch{ce({baseReserveInStroops:D,sweepAmountInStroops:T}),C.addOperation(y.createAccount({destination:t,startingBalance:R}))}}else{let{assetCode:T,issuer:R}=await F(n),Y=ue({account:x,assetCode:T,assetValue:n,issuer:R,sweep:o});C.addOperation(y.payment({amount:Y,asset:new m(T,R),destination:t}))}if(a)C.addMemo(S.text(a));return C.setTimeout(30).build()}async function z({assetValue:t,limit:n,sender:a}){let r=a||await _();if(!r)throw new u("toolbox_stellar_no_signer");let{Asset:o,Networks:i,Operation:f,TransactionBuilder:m}=await import("@stellar/stellar-sdk"),{assetCode:S,issuer:B}=await F(t),y=await d(),[E,v]=await Promise.all([y.fetchBaseFee(),y.loadAccount(r)]),P=new o(S,B),x=n!==void 0?f.changeTrust({asset:P,limit:n}):f.changeTrust({asset:P});return new m(v,{fee:String(E),networkPassphrase:i.PUBLIC}).addOperation(x).setTimeout(30).build()}async function M(t){let{TransactionBuilder:n,Networks:a}=await import("@stellar/stellar-sdk"),r=await p(),o=n.fromXDR(t.toXDR(),a.PUBLIC);return o.sign(r),o}function N(t){return w(t,"toolbox_stellar_broadcast_error")}async function Z({recipient:t,assetValue:n,memo:a,sweep:r}){let o=await p(),i=o.publicKey(),f=await A({assetValue:n,memo:a,recipient:t,sender:i,sweep:r});return f.sign(o),w(f,"toolbox_stellar_transaction_failed")}async function q({assetValue:t,limit:n}){let a=await p(),r=await z({assetValue:t,limit:n,sender:a.publicKey()});return r.sign(a),w(r,"toolbox_stellar_transaction_failed")}async function J(t){let n=await M(t);return N(n)}async function Q(){let{baseDecimal:t}=H(c.Stellar);try{let r=(await(await d()).feeStats()).fee_charged.p50;return h.from({chain:c.Stellar,fromBaseDecimal:t,value:r})}catch{return h.from({chain:c.Stellar,fromBaseDecimal:t,value:"100"})}}return{broadcastTransaction:N,createTransaction:A,createTrustline:q,createTrustlineTransaction:z,estimateTransactionFee:Q,getAddress:_,getBalance:k,hasTrustline:K,signAndBroadcastTransaction:J,signTransaction:M,transfer:Z,validateAddress:O}}export{we as getStellarToolbox,O as validateStellarAddress};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ha as b}from"../../chunk-4428244x.js";import{hexToU8a as M,isHex as _,u8aToHex as G}from"@polkadot/util";import{decodeAddress as T,encodeAddress as v}from"@polkadot/util-crypto";import{AssetValue as F,Chain as y,getRPCUrl as U,SubstrateChains as W,SwapKitError as d,SwapKitNumber as H}from"@swapkit/helpers";import{match as w,P as A}from"ts-pattern";import{AssetValue as K,Chain as B,SwapKitNumber as x}from"@swapkit/helpers";async function N(e,t,n){let a=[t.set(0)];if(!n)return a;try{let r=await e.query.system?.account?.(n);if(!r)return a;let{data:{free:i}}=r,c=x.fromBigInt(BigInt(i.toString()),t.decimal).getValue("string");return[t.set(c)]}catch(r){let i=r instanceof Error?r.message:String(r);return console.error(`Error fetching substrate balance: ${i}`),a}}async function j(e,t,n){let a=[t.set(0)];if(!n)return a;try{let r=await e.query.flip?.account?.(n);if(!r)return a;let i=r.balance||r.data?.balance;if(!i||i.isEmpty)return a;let c=x.fromBigInt(BigInt(i.toString()),t.decimal).getValue("string");return[t.set(c)]}catch(r){let i=r instanceof Error?r.message:String(r);return console.error(`Error fetching chainflip balance: ${i}`),a}}function I(e,t){return function(a){let r=K.from({chain:e});switch(e){case B.Chainflip:return j(t,r,a);default:return N(t,r,a)}}}var R={decimals:[10],displayName:"Polkadot Relay Chain",network:"polkadot",prefix:0,standardAccount:"*25519",symbols:["DOT"],website:"https://polkadot.network"},D={decimals:[18],displayName:"Chainflip",network:"chainflip",prefix:2112,standardAccount:"*25519",symbols:["FLIP"],website:"https://chainflip.io/"},V={decimals:[],displayName:"Substrate",network:"substrate",prefix:42,standardAccount:"*25519",symbols:[],website:"https://substrate.io/"},p={DOT:R,FLIP:D,GENERIC:V};function de(e,t){return w(e).with(...W,(n)=>ee({chain:n,...t})).exhaustive()}function f(e){return"address"in e}async function k(e,t){let{Keyring:n}=await import("@polkadot/keyring"),{cryptoWaitReady:a}=await import("@polkadot/util-crypto");return await a(),new n({ss58Format:t,type:"sr25519"}).addFromUri(e)}var S=(e,t)=>e.rpc.system.accountNextIndex(t),h=(e,{recipient:t,assetValue:n,sweep:a})=>{let r=a?e.tx.balances?.transferAll?.(t,!0):e.tx.balances?.transferAllowDeath?.(t,n.getBaseValue("number"));if(a&&!r)throw new d("toolbox_substrate_transfer_error");return r},m=(e,t)=>{if(e===y.Chainflip&&t)throw new d("toolbox_substrate_not_supported")},L=async(e,t,n)=>{let a=h(e,n);if(!a)throw new d("toolbox_substrate_transfer_error");let r=f(t),i=r?t.address:n.sender;if(!i)throw new d("core_transaction_invalid_sender_address");let c=await S(e,i);return(await a.signAndSend(r?t:i,{nonce:c,signer:r?void 0:t})).toString()},q=async(e,t,n,a)=>{let r=h(e,a),i=f(t)?t.address:a.sender;if(!i)return Promise.resolve(n.set(0));let c=await r?.paymentInfo(i,{nonce:await S(e,i)})||{partialFee:0};return n.set(H.fromBigInt(BigInt(c.partialFee.toString()),n.decimal).getValue("string"))},O=async(e,t)=>{if(t)return e.send(t);return(await e.send()).toString()},z=async(e,t)=>await t.signAsync(e),J=(e,t,n)=>{if(n)return t.signAndSend(e,n);return t.signAndSend(e).toString()},Q=async({signer:e,address:t,tx:n,callback:a,api:r})=>{let i=await S(r,t);if(a)n.signAndSend(t,{nonce:i,signer:e},a);return n.signAndSend(t,{nonce:i,signer:e}).toString()};function X(e,t){let n=T(e);return v(n,t)}function C(e,t){return _(e)?M(e):T(e,void 0,t)}function Y(e,t="ss58",n){if(t==="hex")return G(e);return v(e,n)}function Z({chain:e,prefix:t}){let n=t||w(e).with(y.Polkadot,()=>p.DOT.prefix).with(y.Chainflip,()=>p.FLIP.prefix).otherwise(()=>p.GENERIC.prefix);return function(r){if(typeof r!=="string"||_(r))return!1;try{return C(r,n).length===32}catch{return!1}}}function ee({chain:e,generic:t=!1,...n}){let a=F.from({chain:e}),r;async function i(){let{ApiPromise:s,WsProvider:o}=await import("@polkadot/api"),u=await U(e),l=new o(u);return s.create({noInitWarn:!0,provider:l})}async function c(){if(r)return r;return r=await w(n).with({phrase:A.string},({phrase:s})=>k(s,p[e].prefix)).with({signer:A.any},({signer:s})=>s).otherwise(()=>{return}),r}let g=t?p.GENERIC:p[e];async function P(s){let o=await c(),u=s||o;if(!u)throw new d("core_wallet_not_keypair_wallet");return f(u)?u.address:void 0}return{broadcast:O,convertAddress:X,createKeyring:(s)=>k(s,g.prefix),createTransaction:async(s)=>{m(e,s.sweep);let o=await i();return h(o,s)},decodeAddress:C,encodeAddress:Y,estimateTransactionFee:async(s)=>{m(e,s.sweep);let o=await c();if(!o)throw new d("core_wallet_not_keypair_wallet");let u=await i();return q(u,o,a,s)},gasAsset:a,getAddress:P,getApi:i,getBalance:async(s)=>{let o=await i(),u=I(e,o),l=s||await P();return u(l)},network:g,sign:async(s)=>{let o=await c();if(!o)throw new d("core_wallet_not_keypair_wallet");if(f(o))return z(o,s);throw new d("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},signAndBroadcast:async({tx:s,callback:o,address:u})=>{let l=await c();if(!l)throw new d("core_wallet_not_keypair_wallet");if(f(l))return J(l,s,o);let E=await i();if(u)return Q({address:u,api:E,callback:o,signer:l,tx:s});throw new d("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},transfer:async(s)=>{m(e,s.sweep);let o=await c();if(!o)throw new d("core_wallet_not_keypair_wallet");let u=await i();return L(u,o,s)},validateAddress:Z({chain:e,prefix:g.prefix})}}export{p as SubstrateNetwork,k as createKeyring,ee as createSubstrateToolbox,Z as getSubstrateAddressValidator,de as getSubstrateToolbox,f as isKeyringPair};
|
package/dist/src/sui/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ha as k}from"../../chunk-4428244x.js";import{isValidSuiAddress as V}from"@mysten/sui/utils";import{AssetValue as x,Chain as _,derivationPathToString as W,getChainConfig as K,getRPCUrlSync as J,resolveDerivationPath as L,SwapKitError as y}from"@swapkit/helpers";import{match as M,P as j}from"ts-pattern";var I="0x2::sui::SUI",R=256,Y=50000000;async function U(t,a,i,o){let r=[],s,f=0n;while(!0){let c=await t.getCoins({coinType:i,cursor:s,owner:a});if(r.push(...c.data),f+=c.data.reduce((T,w)=>T+BigInt(w.balance),0n),!c.hasNextPage||o!==void 0&&f>=o)return r;s=c.nextCursor}}async function N(t){return BigInt(await t.getReferenceGasPrice())}function v({coinObjectId:t,digest:a,version:i}){return{digest:a,objectId:t,version:i}}function Q(t,a,i,o=!1){let r=a.reduce((l,S)=>l+BigInt(S.balance),0n);if(r<i)throw new y("toolbox_sui_insufficient_balance",{available:r.toString(),required:i.toString()});let{selectedCoins:s}=a.reduce((l,S)=>{if(l.total>=i)return l;return{selectedCoins:[...l.selectedCoins,S],total:l.total+BigInt(S.balance)}},{selectedCoins:[],total:0n}),f=s[0],c=t.objectRef(v(f)),T=s.slice(1).map((l)=>t.objectRef(v(l)));if(T.length>0)t.mergeCoins(c,T);if(o)return c;let[w]=t.splitCoins(c,[i]);return w}function H(t,a){let i=t.reduce((o,r)=>o+BigInt(r.balance),0n);if(i<=0n)throw new y({errorKey:"toolbox_sweep_amount_too_low",info:{asset:a,available:i.toString()}});return i}function q(t){if(t.length>R)throw new y({errorKey:"toolbox_sui_transaction_creation_error",info:{coinCount:t.length,maxGasPaymentCoins:R,reason:`SUI transactions support at most ${R} gas payment coins`}})}function X(t,a,i,o,r,s){let f=i.getBaseValue("bigint");if(s)H(a,i.toString()),q(a);else F(a,f+BigInt(o));if(t.setGasPayment(a.map(v)),s)t.transferObjects([t.gas],r);else{let[c]=t.splitCoins(t.gas,[i.getBaseValue("string")]);t.transferObjects([c],r)}}function F(t,a){let i=t.reduce((o,r)=>o+BigInt(r.balance),0n);if(i<a)throw new y("toolbox_sui_insufficient_balance",{available:i.toString(),required:a.toString()})}async function z({assetValue:t,gasBudget:a,recipient:i,sender:o,suiClient:r,sweep:s,tx:f}){let c=t.getBaseValue("bigint"),[T,w]=await Promise.all([N(r),U(r,o,I,s?void 0:c+BigInt(a))]);if(f.setGasPrice(T),X(f,w,t,a,i,s),s){let l=w.reduce((S,A)=>S+BigInt(A.balance),0n);return l<BigInt(a)?l:a}return a}async function Z({assetValue:t,gasBudget:a,recipient:i,sender:o,suiClient:r,sweep:s,tx:f}){let c=t.address;if(!c)throw new y("toolbox_sui_missing_coin_type");let T=t.getBaseValue("bigint"),[w,l,S]=await Promise.all([N(r),U(r,o,I,BigInt(a)),U(r,o,c,s?void 0:T)]);if(!S.length&&!s)throw new y("toolbox_sui_no_coins_found",{coinType:c});let A=s?H(S,t.toString()):T;if(F(l,BigInt(a)),s)q(l);f.setGasPrice(w),f.setGasPayment(l.map(v));let D=Q(f,S,A,s);f.transferObjects([D],i)}function tt(t){try{return V(t)}catch{return!1}}function O(t){return"signWithIntent"in t}function at({provider:t,...a}={}){let i;async function o(){if(i)return i;return i=await M(a).with({phrase:j.string},async({phrase:n,derivationPath:e,index:g=0})=>{let{Ed25519Keypair:d}=await import("@mysten/sui/keypairs/ed25519"),u=L({chain:_.Sui,derivationPath:e,index:g});if(u.length!==5||u[3]!==0||u[4]!==0)throw new y("toolbox_derivation_slot_unsupported",{chain:_.Sui,derivationPath:u});let m=W(u,{allHardened:!0});return d.deriveKeypair(n,m)}).with({signer:j.any},({signer:n})=>n).otherwise(()=>{return}),i}async function r(n=t){let{SuiJsonRpcClient:e}=await import("@mysten/sui/jsonRpc");return new e({network:"mainnet",url:n||J(_.Sui)})}async function s(){return(await o())?.toSuiAddress()||""}function f(n){try{let e=x.from({address:n,chain:_.Sui});return{asset:e.toString(),decimals:e.decimal}}catch{}return null}async function c(n){let e=n||await s();if(!e)throw new y("toolbox_sui_address_required");let{baseDecimal:g,chain:d}=K(_.Sui);try{let m=await(await r()).getAllBalances({owner:e}),b=m.find(({coinType:p})=>p===I)?.totalBalance||"0",B=[x.from({chain:d,fromBaseDecimal:g,value:b})];for(let{coinType:p,totalBalance:h}of m){if(p===I||Number(h)<=0)continue;let C=f(p);if(C)B.push(x.from({asset:C.asset,fromBaseDecimal:C.decimals,value:h}))}return B}catch{return[x.from({chain:d})]}}async function T(n){let e=x.from({chain:_.Sui,value:"0.01"});if(!n)return e;try{let g=await r(),{txBytes:d}=await w(n),{effects:{status:u,gasUsed:m}}=await g.dryRunTransactionBlock({transactionBlock:d});if(u.status!=="success")return e;let{baseDecimal:b}=K(_.Sui),B=BigInt(m.computationCost)+BigInt(m.storageCost)-BigInt(m.storageRebate);return x.from({chain:_.Sui,fromBaseDecimal:b,value:B.toString()})}catch{return e}}async function w({recipient:n,assetValue:e,gasBudget:g,sender:d,sweep:u}){let{Transaction:m}=await import("@mysten/sui/transactions"),b=d||await s(),B=g||Y;if(!b)throw new y("toolbox_sui_no_sender");try{let p=await r(),h=new m;h.setSender(b);let C={assetValue:e,gasBudget:B,recipient:n,sender:b,suiClient:p,sweep:u,tx:h},G;if(e.isGasAsset||e.symbol==="SUI"){let P=await z(C);if(BigInt(P)<BigInt(B))G=BigInt(P);h.setGasBudget(P)}else await Z(C),h.setGasBudget(B);let E=await h.build({client:p});if(G!==void 0){let{effects:{status:P}}=await p.dryRunTransactionBlock({transactionBlock:E});if(P.status!=="success")throw new y({errorKey:"toolbox_sweep_amount_too_low",info:{asset:e.toString(),budget:G.toString(),error:P.error}})}return{tx:h,txBytes:E}}catch(p){if(p instanceof y)throw p;throw new y("toolbox_sui_transaction_creation_error",{error:p})}}async function l(n){let e=await o();if(!e)throw new y("toolbox_sui_no_signer");if(n instanceof Uint8Array)return e.signTransaction(n);let{txBytes:g}="tx"in n?n:await w(n);return e.signTransaction(g)}async function S({assetValue:n,gasBudget:e,recipient:g,sweep:d}){let u=await o();if(!u)throw new y("toolbox_sui_no_signer");let m=u.toSuiAddress()||await s();if(!m)throw new y("toolbox_sui_no_sender");let{txBytes:b}=await w({assetValue:n,gasBudget:e,recipient:g,sender:m,sweep:d}),B=await r();if(!O(u)){let h=await u.signTransaction(b),{digest:C}=await B.executeTransactionBlock({signature:h.signature,transactionBlock:h.bytes});return C}let{digest:p}=await B.signAndExecuteTransaction({signer:u,transaction:b});return p}async function A(n){let e=await r(),{digest:g}=await e.executeTransactionBlock({signature:n.signature,transactionBlock:n.bytes});return g}async function D(n){let e=await o();if(!e)throw new y("toolbox_sui_no_signer");let g=await r(),d;if(typeof n==="string")d=Uint8Array.from(Buffer.from(n,"base64"));else if(n instanceof Uint8Array)d=n;else d=await n.build({client:g});if(!O(e)){let m=await e.signTransaction(d),{digest:b}=await g.executeTransactionBlock({signature:m.signature,transactionBlock:m.bytes});return b}let{digest:u}=await g.signAndExecuteTransaction({signer:e,transaction:d});return u}return{broadcastTransaction:A,createTransaction:w,estimateTransactionFee:T,getAddress:s,getBalance:c,signAndBroadcastTransaction:D,signTransaction:l,transfer:S,validateAddress:tt}}export{at as getSuiToolbox,tt as validateSuiAddress};
|
package/dist/src/ton/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ga as U}from"../../chunk-as9fracn.js";import{ha as p}from"../../chunk-4428244x.js";import{AssetValue as et,Chain as g,getChainConfig as nt,NetworkDerivationPath as ot,SKConfig as rt,SwapKitError as l,SwapKitNumber as st}from"@swapkit/helpers";import{Address as i,beginCell as x,Cell as j,external as at,internal as it,loadStateInit as ct,SendMode as N,storeMessage as dt,toNano as L}from"@ton/core";import{match as F,P as B}from"ts-pattern";var lt=260734629,ft=L("0.01"),ut=L("0.05"),G=N.PAY_GAS_SEPARATELY+N.IGNORE_ERRORS,gt=N.CARRY_ALL_REMAINING_BALANCE+N.IGNORE_ERRORS,Tt=60000,O,v=0;async function pt(){let c=Date.now();if(O&&c-v<Tt)return O;let{getHttpEndpoint:w}=await import("@orbs-network/ton-access");return O=await w(),v=c,O}async function wt(){let[c]=rt.get("rpcUrls")[g.Ton]??[];if(c)return c;return await pt()}function Nt(c={}){let w,S,A;async function u(){if(!w){let{TonClient:t}=await import("@ton/ton"),e=c.provider??await wt();w=new t({endpoint:e})}return w}async function h(){return(await b()).address.toString()}async function C(){if(A)return A;return A=await F(c).with({phrase:B.string},async({phrase:t,derivationPath:e,index:n=0})=>{let r=ot[g.Ton],o=e?.some((a,d)=>a!==r[d]);if(n||o)throw new l("toolbox_derivation_slot_unsupported",{chain:g.Ton,derivationPath:e,index:n});let{mnemonicToWalletKey:s}=await import("@ton/crypto");return s(t.split(" "))}).with({signer:B.any},({signer:t})=>t).otherwise(()=>{return}),A}async function b(t){if(!S||t){let e=await C(),n=await u(),r=t||e;if(!r)throw new l("core_wallet_connection_not_found");let{WalletContractV4:o}=await import("@ton/ton"),s=o.create({publicKey:r.publicKey,workchain:0});S=n.open(s)}return S}let J=U(g.Ton);async function q({assetValue:t,recipient:e,memo:n,sender:r,sweep:o,jettonWalletAddress:s}){if(t.isGasAsset){if(o){let tt=r||await h(),K=await(await u()).getBalance(i.parse(tt));if(K<=0n)throw new l("toolbox_sweep_amount_too_low",{asset:t.toString(),balance:K.toString()})}let Z=n?D(n).toBoc().toString("base64"):void 0;return[{address:e,amount:t.getBaseValue("string"),payload:Z}]}let a=t.address;if(!a)throw new l({errorKey:"core_swap_contract_not_found",info:{asset:t.toString()}});let d=r??await h(),f=s?i.parse(s):await I({jettonMasterAddress:a,ownerAddress:d}),y=f.toString(),_=i.parse(e),T=i.parse(d),m=o?await H(f):t.getBaseValue("bigint");if(o&&m<=0n)throw new l("toolbox_sweep_amount_too_low",{asset:t.toString(),balance:m.toString()});let Q=n?D(n):void 0,X=V({destinationAddress:_,forwardPayload:Q,jettonAmount:m,responseAddress:T});return[{address:y,amount:ut.toString(),payload:X.toBoc().toString("base64")}]}async function M({sender:t,sweep:e,...n}){let r=e&&n.assetValue.isGasAsset?gt:G;return{messages:await q({...n,sender:t,sweep:e}),sendMode:r}}function k(t){if(!Array.isArray(t))return t;let[e]=t;return{messages:t.map(({sendMode:r,...o})=>o),sendMode:e?.sendMode??G}}function E(t){return t.map((e)=>{let n=e.payload?j.fromBase64(e.payload):void 0,r=e.stateInit?ct(j.fromBase64(e.stateInit).asSlice()):void 0,o=i.parse(e.address),s=i.isFriendly(e.address)?i.parseFriendly(e.address).isBounceable:!0;return it({body:n,bounce:s,init:r,to:o,value:BigInt(e.amount)})})}async function P(t){let e=await C(),n=await b();if(!n||!e)throw new l("core_wallet_connection_not_found");let r=await u(),{state:o}=await r.getContractState(n.address),s=o==="active",a=s?await n.getSeqno():0,{messages:d,sendMode:f}=k(t),y=n.createTransfer({messages:E(d),secretKey:e.secretKey,sendMode:f,seqno:a}),_=at({body:y,init:s?void 0:n.init,to:n.address});return x().store(dt(_)).endCell()}async function W(t){return await(await u()).sendFile(t.toBoc()),t.hash().toString("hex")}async function R(t){let e=await P(t);return W(e)}async function Y({assetValue:t,recipient:e,memo:n,sweep:r}){let o=await M({assetValue:t,memo:n,recipient:e,sweep:r});return R(o)}async function z({sender:t,...e}){let{baseDecimal:n}=nt(g.Ton),r=await F(t).with(B.string,(a)=>i.parseFriendly(a).address).otherwise(async()=>(await b()).address);if(!r)throw new l("toolbox_fee_estimation_failed",{chain:g.Ton});let o=et.from({chain:g.Ton,value:"0.01"}),s=await u();try{let a=await M({sender:t,...e}),d=await C(),f=await b();if(!f||!d)return o;let y=await f.getSeqno(),_=f.createTransfer({messages:E(a.messages),secretKey:d.secretKey,sendMode:a.sendMode,seqno:y}),{source_fees:T}=await s.estimateExternalMessageFee(r,{body:_,ignoreSignature:!0,initCode:null,initData:null}),m=T.in_fwd_fee+T.storage_fee+T.gas_fee+T.fwd_fee;return o.set(st.fromBigInt(BigInt(m),n))}catch{return o}}async function I({jettonMasterAddress:t,ownerAddress:e}){try{let n=await u(),r=i.parse(t),o=i.parse(e),{JettonMaster:s}=await import("@ton/ton");return await n.open(s.create(r)).getWalletAddress(o)}catch{throw new l({errorKey:"core_swap_contract_not_found",info:{jettonMasterAddress:t,ownerAddress:e}})}}async function H(t){try{let e=await u(),{JettonWallet:n}=await import("@ton/ton");return await e.open(n.create(t)).getBalance()}catch{throw new l({errorKey:"core_swap_contract_not_found",info:{jettonWalletAddress:t.toString()}})}}function V({jettonAmount:t,destinationAddress:e,responseAddress:n,forwardAmount:r=ft,forwardPayload:o}){let s=x().storeUint(lt,32).storeUint(0,64).storeCoins(t).storeAddress(e).storeAddress(n).storeBit(0).storeCoins(r);if(o)s.storeBit(1).storeRef(o);else s.storeBit(0);return s.endCell()}function D(t){return x().storeUint(0,32).storeStringTail(t).endCell()}return{broadcastTransaction:W,createTransaction:M,estimateTransactionFee:z,getAddress:h,getBalance:J,getJettonWalletAddress:I,sign:P,signAndBroadcastTransaction:R,transfer:Y,validateAddress:yt}}function yt(c){try{return i.parse(c),!0}catch{return!1}}export{Nt as getTONToolbox,yt as validateTonAddress};
|