@uswap/toolboxes 4.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cardano/index.cjs +4 -0
- package/dist/src/cardano/index.cjs.map +11 -0
- package/dist/src/cardano/index.js +4 -0
- package/dist/src/cardano/index.js.map +11 -0
- package/dist/src/cosmos/index.cjs +4 -0
- package/dist/src/cosmos/index.cjs.map +20 -0
- package/dist/src/cosmos/index.js +4 -0
- package/dist/src/cosmos/index.js.map +20 -0
- package/dist/src/evm/index.cjs +4 -0
- package/dist/src/evm/index.cjs.map +20 -0
- package/dist/src/evm/index.js +4 -0
- package/dist/src/evm/index.js.map +20 -0
- package/dist/src/index.cjs +5 -0
- package/dist/src/index.cjs.map +67 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +67 -0
- package/dist/src/near/index.cjs +4 -0
- package/dist/src/near/index.cjs.map +16 -0
- package/dist/src/near/index.js +4 -0
- package/dist/src/near/index.js.map +16 -0
- package/dist/src/radix/index.cjs +4 -0
- package/dist/src/radix/index.cjs.map +10 -0
- package/dist/src/radix/index.js +4 -0
- package/dist/src/radix/index.js.map +10 -0
- package/dist/src/ripple/index.cjs +4 -0
- package/dist/src/ripple/index.cjs.map +10 -0
- package/dist/src/ripple/index.js +4 -0
- package/dist/src/ripple/index.js.map +10 -0
- package/dist/src/solana/index.cjs +4 -0
- package/dist/src/solana/index.cjs.map +11 -0
- package/dist/src/solana/index.js +4 -0
- package/dist/src/solana/index.js.map +11 -0
- package/dist/src/substrate/index.cjs +4 -0
- package/dist/src/substrate/index.cjs.map +13 -0
- package/dist/src/substrate/index.js +4 -0
- package/dist/src/substrate/index.js.map +13 -0
- package/dist/src/sui/index.cjs +4 -0
- package/dist/src/sui/index.cjs.map +11 -0
- package/dist/src/sui/index.js +4 -0
- package/dist/src/sui/index.js.map +11 -0
- package/dist/src/ton/index.cjs +4 -0
- package/dist/src/ton/index.cjs.map +11 -0
- package/dist/src/ton/index.js +4 -0
- package/dist/src/ton/index.js.map +11 -0
- package/dist/src/tron/index.cjs +4 -0
- package/dist/src/tron/index.cjs.map +13 -0
- package/dist/src/tron/index.js +4 -0
- package/dist/src/tron/index.js.map +13 -0
- package/dist/src/utxo/index.cjs +5 -0
- package/dist/src/utxo/index.cjs.map +21 -0
- package/dist/src/utxo/index.js +5 -0
- package/dist/src/utxo/index.js.map +21 -0
- package/dist/types/cardano/index.d.ts +3 -0
- package/dist/types/cardano/index.d.ts.map +1 -0
- package/dist/types/cardano/toolbox.d.ts +34 -0
- package/dist/types/cardano/toolbox.d.ts.map +1 -0
- package/dist/types/cardano/types.d.ts +11 -0
- package/dist/types/cardano/types.d.ts.map +1 -0
- package/dist/types/cosmos/index.d.ts +5 -0
- package/dist/types/cosmos/index.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts +5 -0
- package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/index.d.ts +5 -0
- package/dist/types/cosmos/thorchainUtils/index.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/messages.d.ts +208 -0
- package/dist/types/cosmos/thorchainUtils/messages.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/registry.d.ts +4 -0
- package/dist/types/cosmos/thorchainUtils/registry.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/types/MsgCompiled.d.ts +2 -0
- package/dist/types/cosmos/thorchainUtils/types/MsgCompiled.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts +63 -0
- package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/types/index.d.ts +2 -0
- package/dist/types/cosmos/thorchainUtils/types/index.d.ts.map +1 -0
- package/dist/types/cosmos/toolbox/cosmos.d.ts +62 -0
- package/dist/types/cosmos/toolbox/cosmos.d.ts.map +1 -0
- package/dist/types/cosmos/toolbox/index.d.ts +15 -0
- package/dist/types/cosmos/toolbox/index.d.ts.map +1 -0
- package/dist/types/cosmos/toolbox/thorchain.d.ts +158 -0
- package/dist/types/cosmos/toolbox/thorchain.d.ts.map +1 -0
- package/dist/types/cosmos/types.d.ts +49 -0
- package/dist/types/cosmos/types.d.ts.map +1 -0
- package/dist/types/cosmos/util.d.ts +74 -0
- package/dist/types/cosmos/util.d.ts.map +1 -0
- package/dist/types/evm/api.d.ts +8 -0
- package/dist/types/evm/api.d.ts.map +1 -0
- package/dist/types/evm/contracts/eth/multicall.d.ts +36 -0
- package/dist/types/evm/contracts/eth/multicall.d.ts.map +1 -0
- package/dist/types/evm/contracts/op/gasOracle.d.ts +40 -0
- package/dist/types/evm/contracts/op/gasOracle.d.ts.map +1 -0
- package/dist/types/evm/helpers.d.ts +6 -0
- package/dist/types/evm/helpers.d.ts.map +1 -0
- package/dist/types/evm/index.d.ts +5 -0
- package/dist/types/evm/index.d.ts.map +1 -0
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +83 -0
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts.map +1 -0
- package/dist/types/evm/toolbox/evm.d.ts +767 -0
- package/dist/types/evm/toolbox/evm.d.ts.map +1 -0
- package/dist/types/evm/toolbox/index.d.ts +7 -0
- package/dist/types/evm/toolbox/index.d.ts.map +1 -0
- package/dist/types/evm/toolbox/op.d.ts +76 -0
- package/dist/types/evm/toolbox/op.d.ts.map +1 -0
- package/dist/types/evm/types.d.ts +108 -0
- package/dist/types/evm/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +75 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/near/helpers/core.d.ts +15 -0
- package/dist/types/near/helpers/core.d.ts.map +1 -0
- package/dist/types/near/helpers/gasEstimation.d.ts +41 -0
- package/dist/types/near/helpers/gasEstimation.d.ts.map +1 -0
- package/dist/types/near/helpers/nep141.d.ts +36 -0
- package/dist/types/near/helpers/nep141.d.ts.map +1 -0
- package/dist/types/near/index.d.ts +10 -0
- package/dist/types/near/index.d.ts.map +1 -0
- package/dist/types/near/toolbox.d.ts +32 -0
- package/dist/types/near/toolbox.d.ts.map +1 -0
- package/dist/types/near/types/contract.d.ts +38 -0
- package/dist/types/near/types/contract.d.ts.map +1 -0
- package/dist/types/near/types/nep141.d.ts +29 -0
- package/dist/types/near/types/nep141.d.ts.map +1 -0
- package/dist/types/near/types/toolbox.d.ts +51 -0
- package/dist/types/near/types/toolbox.d.ts.map +1 -0
- package/dist/types/near/types.d.ts +47 -0
- package/dist/types/near/types.d.ts.map +1 -0
- package/dist/types/radix/index.d.ts +14 -0
- package/dist/types/radix/index.d.ts.map +1 -0
- package/dist/types/ripple/index.d.ts +46 -0
- package/dist/types/ripple/index.d.ts.map +1 -0
- package/dist/types/solana/index.d.ts +23 -0
- package/dist/types/solana/index.d.ts.map +1 -0
- package/dist/types/solana/toolbox.d.ts +51 -0
- package/dist/types/solana/toolbox.d.ts.map +1 -0
- package/dist/types/substrate/balance.d.ts +17 -0
- package/dist/types/substrate/balance.d.ts.map +1 -0
- package/dist/types/substrate/index.d.ts +3 -0
- package/dist/types/substrate/index.d.ts.map +1 -0
- package/dist/types/substrate/substrate.d.ts +148 -0
- package/dist/types/substrate/substrate.d.ts.map +1 -0
- package/dist/types/substrate/types.d.ts +100 -0
- package/dist/types/substrate/types.d.ts.map +1 -0
- package/dist/types/sui/index.d.ts +3 -0
- package/dist/types/sui/index.d.ts.map +1 -0
- package/dist/types/sui/toolbox.d.ts +19 -0
- package/dist/types/sui/toolbox.d.ts.map +1 -0
- package/dist/types/sui/types.d.ts +16 -0
- package/dist/types/sui/types.d.ts.map +1 -0
- package/dist/types/ton/index.d.ts +3 -0
- package/dist/types/ton/index.d.ts.map +1 -0
- package/dist/types/ton/toolbox.d.ts +14 -0
- package/dist/types/ton/toolbox.d.ts.map +1 -0
- package/dist/types/ton/types.d.ts +22 -0
- package/dist/types/ton/types.d.ts.map +1 -0
- package/dist/types/tron/helpers/trc20.abi.d.ts +156 -0
- package/dist/types/tron/helpers/trc20.abi.d.ts.map +1 -0
- package/dist/types/tron/helpers/trongrid.d.ts +8 -0
- package/dist/types/tron/helpers/trongrid.d.ts.map +1 -0
- package/dist/types/tron/index.d.ts +6 -0
- package/dist/types/tron/index.d.ts.map +1 -0
- package/dist/types/tron/toolbox.d.ts +26 -0
- package/dist/types/tron/toolbox.d.ts.map +1 -0
- package/dist/types/tron/types.d.ts +103 -0
- package/dist/types/tron/types.d.ts.map +1 -0
- package/dist/types/types.d.ts +26 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils.d.ts +4 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utxo/helpers/api.d.ts +101 -0
- package/dist/types/utxo/helpers/api.d.ts.map +1 -0
- package/dist/types/utxo/helpers/bchaddrjs.d.ts +10 -0
- package/dist/types/utxo/helpers/bchaddrjs.d.ts.map +1 -0
- package/dist/types/utxo/helpers/coinselect.d.ts +17 -0
- package/dist/types/utxo/helpers/coinselect.d.ts.map +1 -0
- package/dist/types/utxo/helpers/index.d.ts +5 -0
- package/dist/types/utxo/helpers/index.d.ts.map +1 -0
- package/dist/types/utxo/helpers/txSize.d.ts +21 -0
- package/dist/types/utxo/helpers/txSize.d.ts.map +1 -0
- package/dist/types/utxo/index.d.ts +7 -0
- package/dist/types/utxo/index.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts +93 -0
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/index.d.ts +28 -0
- package/dist/types/utxo/toolbox/index.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/params.d.ts +32 -0
- package/dist/types/utxo/toolbox/params.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/utxo.d.ts +103 -0
- package/dist/types/utxo/toolbox/utxo.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/validators.d.ts +4 -0
- package/dist/types/utxo/toolbox/validators.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/zcash.d.ts +72 -0
- package/dist/types/utxo/toolbox/zcash.d.ts.map +1 -0
- package/dist/types/utxo/types.d.ts +46 -0
- package/dist/types/utxo/types.d.ts.map +1 -0
- package/package.json +205 -0
- package/src/__tests__/address-validation-all-chains.test.ts +162 -0
- package/src/__tests__/addressValidator.test.ts +162 -0
- package/src/cardano/__tests__/toolbox.test.ts +48 -0
- package/src/cardano/index.ts +2 -0
- package/src/cardano/toolbox.ts +168 -0
- package/src/cardano/types.ts +10 -0
- package/src/cosmos/__tests__/toolbox.test.ts +91 -0
- package/src/cosmos/index.ts +4 -0
- package/src/cosmos/thorchainUtils/addressFormat.ts +22 -0
- package/src/cosmos/thorchainUtils/index.ts +4 -0
- package/src/cosmos/thorchainUtils/messages.ts +212 -0
- package/src/cosmos/thorchainUtils/registry.ts +43 -0
- package/src/cosmos/thorchainUtils/types/MsgCompiled.ts +2800 -0
- package/src/cosmos/thorchainUtils/types/client-types.ts +54 -0
- package/src/cosmos/thorchainUtils/types/index.ts +1 -0
- package/src/cosmos/toolbox/cosmos.ts +345 -0
- package/src/cosmos/toolbox/index.ts +35 -0
- package/src/cosmos/toolbox/thorchain.ts +249 -0
- package/src/cosmos/types.ts +48 -0
- package/src/cosmos/util.ts +214 -0
- package/src/evm/__tests__/address-validation.test.ts +84 -0
- package/src/evm/__tests__/ethereum.test.ts +137 -0
- package/src/evm/__tests__/signMessage.test.ts +60 -0
- package/src/evm/api.ts +10 -0
- package/src/evm/contracts/eth/multicall.ts +165 -0
- package/src/evm/contracts/op/gasOracle.ts +145 -0
- package/src/evm/helpers.ts +73 -0
- package/src/evm/index.ts +4 -0
- package/src/evm/toolbox/baseEVMToolbox.ts +695 -0
- package/src/evm/toolbox/evm.ts +67 -0
- package/src/evm/toolbox/index.ts +44 -0
- package/src/evm/toolbox/op.ts +156 -0
- package/src/evm/types.ts +146 -0
- package/src/index.ts +260 -0
- package/src/near/__tests__/core.test.ts +70 -0
- package/src/near/helpers/core.ts +85 -0
- package/src/near/helpers/gasEstimation.ts +96 -0
- package/src/near/helpers/nep141.ts +50 -0
- package/src/near/index.ts +21 -0
- package/src/near/toolbox.ts +421 -0
- package/src/near/types/contract.ts +32 -0
- package/src/near/types/nep141.ts +34 -0
- package/src/near/types/toolbox.ts +55 -0
- package/src/near/types.ts +44 -0
- package/src/radix/index.ts +132 -0
- package/src/ripple/index.ts +179 -0
- package/src/solana/index.ts +36 -0
- package/src/solana/toolbox.ts +415 -0
- package/src/substrate/balance.ts +88 -0
- package/src/substrate/index.ts +2 -0
- package/src/substrate/substrate.ts +281 -0
- package/src/substrate/types.ts +115 -0
- package/src/sui/__tests__/toolbox.test.ts +82 -0
- package/src/sui/index.ts +2 -0
- package/src/sui/toolbox.ts +165 -0
- package/src/sui/types.ts +11 -0
- package/src/ton/__tests__/toolbox.test.ts +63 -0
- package/src/ton/index.ts +2 -0
- package/src/ton/toolbox.ts +136 -0
- package/src/ton/types.ts +13 -0
- package/src/tron/__tests__/toolbox.test.ts +221 -0
- package/src/tron/helpers/trc20.abi.ts +107 -0
- package/src/tron/helpers/trongrid.ts +53 -0
- package/src/tron/index.ts +21 -0
- package/src/tron/toolbox.ts +585 -0
- package/src/tron/types.ts +83 -0
- package/src/types.ts +28 -0
- package/src/utils.ts +27 -0
- package/src/utxo/__tests__/zcash-integration.test.ts +97 -0
- package/src/utxo/helpers/api.ts +471 -0
- package/src/utxo/helpers/bchaddrjs.ts +166 -0
- package/src/utxo/helpers/coinselect.ts +92 -0
- package/src/utxo/helpers/index.ts +4 -0
- package/src/utxo/helpers/txSize.ts +137 -0
- package/src/utxo/index.ts +6 -0
- package/src/utxo/toolbox/bitcoinCash.ts +243 -0
- package/src/utxo/toolbox/index.ts +59 -0
- package/src/utxo/toolbox/params.ts +18 -0
- package/src/utxo/toolbox/utxo.ts +439 -0
- package/src/utxo/toolbox/validators.ts +36 -0
- package/src/utxo/toolbox/zcash.ts +245 -0
- package/src/utxo/types.ts +39 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var Bt=Object.create;var{getPrototypeOf:Ft,defineProperty:G,getOwnPropertyNames:it,getOwnPropertyDescriptor:bt}=Object,et=Object.prototype.hasOwnProperty;var P=(t,r,e)=>{e=t!=null?Bt(Ft(t)):{};let N=r||!t||!t.__esModule?G(e,"default",{value:t,enumerable:!0}):e;for(let m of it(t))if(!et.call(N,m))G(N,m,{get:()=>t[m],enumerable:!0});return N},ot=new WeakMap,It=(t)=>{var r=ot.get(t),e;if(r)return r;if(r=G({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")it(t).map((N)=>!et.call(r,N)&&G(r,N,{get:()=>t[N],enumerable:!(e=bt(t,N))||e.enumerable}));return ot.set(t,r),r};var Ut=(t,r)=>{for(var e in r)G(t,e,{get:r[e],enumerable:!0,configurable:!0,set:(N)=>r[e]=()=>N})};var L=(t,r)=>()=>(t&&(r=t(t=0)),r);async function B(){let{validateAccountId:t}=await import("near-sdk-js");return(r)=>{try{return t(r)}catch{let e=/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/;return r.length>=2&&r.length<=64&&e.test(r)}}}async function F(t){let{parseSeedPhrase:r}=await import("near-seed-phrase"),{KeyPair:e}=await import("@near-js/crypto"),N=t.index||0,m=t.derivationPath?y.derivationPathToString(t.derivationPath.slice(0,3)):`m/44'/397'/${N}'`,{secretKey:A}=r(t.phrase,m),s=e.fromString(A);return Nt(s)}async function J(t){let{KeyPair:r}=await import("@near-js/crypto"),e=r.fromString(t);return Nt(e)}function Nt(t){return new Tt(t)}async function b(t,r){let N=(await t.query({account_id:r,finality:"final",request_type:"view_access_key_list"})).keys.find((O)=>O.access_key.permission==="FullAccess");if(!N)throw new y.SwapKitError("toolbox_near_no_public_key_found");let{PublicKey:m}=await import("@near-js/crypto"),A=m.fromString(N.public_key);return{nonce:N.access_key.nonce||0,publicKey:A}}var mt,y,Tt;var M=L(()=>{mt=require("@near-js/signers"),y=require("@uswap/helpers");Tt=class Tt extends mt.KeyPairSigner{#t;constructor(t){super(t);this.#t=t}getAddress(){let t=this.#t.getPublicKey(),r=Buffer.from(t.data).toString("hex");return Promise.resolve(r)}}});function Q(t){return"recipient"in t&&"amount"in t&&!("contractId"in t)}function W(t){return"contractId"in t&&"methodName"in t}function Z(t){return"actions"in t}function $(t){return"newAccountId"in t}function p(t){return"contractCode"in t}function z(t){return"customEstimator"in t}function X(t){let r=0;for(let e of t)switch(e.enum){case"transfer":r+=Number(C.SIMPLE_TRANSFER);break;case"functionCall":r+=Number(C.CONTRACT_CALL);break;case"createAccount":r+=Number(C.ACCOUNT_CREATION);break;case"deployContract":r+=Number(C.CONTRACT_DEPLOYMENT);break;case"addKey":r+=Number(C.ACCESS_KEY_ADDITION);break;case"deleteKey":r+=Number(C.ACCESS_KEY_DELETION);break;case"stake":r+=Number(C.STAKE);break;default:r+=Number(C.CONTRACT_CALL)}return r.toString()}function H(t){if(t==="ft_transfer"||t==="ft_transfer_call")return C.TOKEN_TRANSFER;if(t==="storage_deposit")return C.STORAGE_DEPOSIT;return C.CONTRACT_CALL}function Yt(t){return(BigInt(t)*BigInt(1000000000000)).toString()}function qt(t){return(BigInt(t)/BigInt(1000000000000)).toString()}var C;var k=L(()=>{C={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"}});async function w({account:t,contractId:r,viewMethods:e,changeMethods:N}){let{Contract:m}=await import("@near-js/accounts");return new m(t,r,{changeMethods:N,useLocalViewExecution:!0,viewMethods:e})}function Xt(){function t(){let r=Date.now(),e=V||r;return V=e,r>V?r:e+1}return Jt+t().toString(36)}function gt(t){return async function(e,N=!0){let m=await ft.SwapKitApi.getChainBalance({address:e,chain:t,scamFilter:N}),{baseDecimal:A}=I.getChainConfig(t);return m.map(({identifier:s,value:O,decimal:u})=>{return new I.AssetValue({decimal:u||A,identifier:s,value:O})})}}var I,ft,Jt,V=0;var Pt=L(()=>{I=require("@uswap/helpers"),ft=require("@uswap/helpers/api"),Jt=typeof process<"u"&&process.pid?process.pid.toString(36):""});async function Mt(t){let{P:r,match:e}=await import("ts-pattern"),{JsonRpcProvider:N}=await import("@near-js/providers"),m=await e(t).with({phrase:r.string},async(n)=>{return await F(n)}).with({signer:r.any},({signer:n})=>n).otherwise(()=>{return}),A=await i.getRPCUrl(i.Chain.Near),s=new N({url:A});async function O(n){let{Account:o}=await import("@near-js/accounts"),T=n||await u();return new o(T,s,m)}async function u(){if(!m)throw new i.SwapKitError("toolbox_near_no_signer");return await m.getAddress()}async function Ct(n){return(await K({changeMethods:[],contractId:n.contractId,viewMethods:["storage_balance_of"]})).storage_balance_of({account_id:n.accountId})}async function Et(n){let T=[await Y({args:{account_id:n.recipient},attachedDeposit:"1250000000000000000000",gas:"150000000000000",methodName:"storage_deposit"}),await Y({args:{amount:n.assetValue.getBaseValue("string"),memo:n.memo||null,receiver_id:n.recipient},attachedDeposit:"1",gas:"150000000000000",methodName:"ft_transfer"})];return c({actions:T,receiverId:n.contractId})}async function st(n){if(!m)throw new i.SwapKitError("toolbox_near_no_signer");let{assetValue:o,recipient:T,memo:x}=n,E=await u();if(!o.isGasAsset&&o.address){if(!await Ct({accountId:T,contractId:o.address}))return Et({assetValue:o,contractId:o.address,memo:x,recipient:T})}let f=await v({...n,sender:E});return l(f)}async function v(n){let{recipient:o,assetValue:T,memo:x,attachedDeposit:E,sender:f,functionCall:g}=n,_=await B();if(!_(o))throw new i.SwapKitError("toolbox_near_invalid_address",{recipient:o});if(!_(f))throw new i.SwapKitError("toolbox_near_invalid_address",{signerId:f});if(g)return U({...g,sender:f});if(!T.isGasAsset){let rt=T.address;if(!rt)throw new i.SwapKitError("toolbox_near_missing_contract_address");return U({args:{amount:T.getBaseValue("string"),memo:x||null,receiver_id:o},attachedDeposit:E||"1",contractId:rt,gas:"250000000000000",methodName:"ft_transfer",sender:f})}let{publicKey:D,nonce:S}=await b(s,f),d=T.getBaseValue("bigint"),{actionCreators:tt,createTransaction:Dt}=await import("@near-js/transactions"),{baseDecode:Gt}=await import("@near-js/utils"),nt=[tt.transfer(d)];if(x&&E)nt.push(tt.functionCall("memo",{memo:x},BigInt("250000000000000"),BigInt(E)));let St=await s.block({finality:"final"}),yt=Gt(St.header.hash);return Dt(f,D,o,S+1,nt,yt)}function Ot(n){let o=n.encode();return Buffer.from(o).toString("base64")}async function U(n){let{sender:o}=n,{publicKey:T,nonce:x}=await b(s,o),{createTransaction:E,actionCreators:f}=await import("@near-js/transactions"),{baseDecode:g}=await import("@near-js/utils"),_=await s.block({finality:"final"}),D=g(_.header.hash),S=[f.functionCall(n.methodName,Buffer.from(JSON.stringify(n.args)),BigInt(n.gas),BigInt(n.attachedDeposit))];return E(o,T,n.contractId,x+1,S,D)}async function Y(n){let{actionCreators:o}=await import("@near-js/transactions");return o.functionCall(n.methodName,Buffer.from(JSON.stringify(n.args)),BigInt(n.gas),BigInt(n.attachedDeposit))}async function a(n){if(!m)throw new i.SwapKitError("toolbox_near_no_signer");let[o,T]=await m.signTransaction(n);return T}async function h(n){return(await s.sendTransaction(n)).transaction.hash}async function l(n){if(!m)throw new i.SwapKitError("toolbox_near_no_signer");try{let o=await a(n);return await h(o)}catch{return m.signAndSendTransactions?.({transactions:[n]})}}async function _t(n){if("assetValue"in n){let E=BigInt("115123062500")+BigInt("108059500000"),f=await At(),g=E*BigInt(f.toString()),{baseDecimal:_}=i.getChainConfig(i.Chain.Near);return i.AssetValue.from({chain:i.Chain.Near,fromBaseDecimal:_,value:g.toString()})}let o=m?await O():void 0;return q(n,o)}async function At(){try{return await s.query({account_id:"system",args_base64:"",finality:"final",method_name:"gas_price",request_type:"call_function"})}catch{return"100000000"}}async function Rt(n,o,T){if(!m)throw new i.SwapKitError("toolbox_near_no_signer");let x=await O(),{formatNearAmount:E}=await import("@near-js/utils"),{PublicKey:f}=await import("@near-js/crypto"),g=E(T)||"0";return(await x.createAccount(n,f.fromString(o),BigInt(g))).transaction.hash}async function Lt(n){try{if(!m)throw new i.SwapKitError("toolbox_near_no_signer");let{actionCreators:o}=await import("@near-js/transactions"),{contractId:T,methodName:x,args:E,deposit:f}=n,g=await O(),_=await q({args:E||{},contractId:T,methodName:x}),D=o.functionCall(x,E||{},_.getBaseValue("bigint"),BigInt(f||"1"));return(await g.signAndSendTransaction({actions:[D],receiverId:T})).transaction_outcome.id}catch(o){throw new i.SwapKitError("toolbox_near_transfer_failed",{error:o})}}async function K(n){let o=await O();return w({account:o,changeMethods:n.changeMethods,contractId:n.contractId,viewMethods:n.viewMethods})}async function c(n){if(!m)throw new i.SwapKitError("toolbox_near_no_signer");if(n.actions.length===0)throw new i.SwapKitError("toolbox_near_empty_batch");return(await(await O()).signAndSendTransaction({actions:n.actions,receiverId:n.receiverId})).transaction.hash}async function q(n,o){let{baseDecimal:T}=i.getChainConfig(i.Chain.Near),x=await e(n).when(Q,()=>C.SIMPLE_TRANSFER).when(W,(g)=>H(g.methodName)).when(Z,(g)=>X(g.actions)).when($,()=>C.ACCOUNT_CREATION).when(p,()=>C.CONTRACT_DEPLOYMENT).when(z,(g)=>{if(!o)throw new i.SwapKitError("toolbox_near_no_account");return g.customEstimator(o)}).otherwise(()=>{throw new i.SwapKitError("toolbox_near_invalid_gas_params")}),f=BigInt(x)*BigInt(1000000000000);return i.AssetValue.from({chain:i.Chain.Near,fromBaseDecimal:T,value:f})}async function ut(){try{return(await s.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}return{broadcastTransaction:h,callFunction:Lt,createAction:Y,createContract:K,createContractFunctionCall:U,createSubAccount:Rt,createTransaction:v,estimateGas:q,estimateTransactionFee:_t,executeBatchTransaction:c,getAddress:u,getBalance:gt(i.Chain.Near),getGasPrice:ut,getPublicKey:async()=>m?(await m.getPublicKey()).toString():"",getSignerFromPhrase:(n)=>F(n),getSignerFromPrivateKey:J,provider:s,serializeTransaction:Ot,signAndSendTransaction:l,signTransaction:a,transfer:st,validateAddress:await B()}}var i;var j=L(()=>{Pt();M();k();i=require("@uswap/helpers")});var xt=L(()=>{j()});var Qt={};Ut(Qt,{tgasToGas:()=>Yt,isSimpleTransfer:()=>Q,isCustomEstimator:()=>z,isContractDeployment:()=>p,isContractCall:()=>W,isBatchTransaction:()=>Z,isAccountCreation:()=>$,getValidateNearAddress:()=>B,getNearToolbox:()=>Mt,getNearSignerFromPrivateKey:()=>J,getNearSignerFromPhrase:()=>F,getFullAccessPublicKey:()=>b,getContractMethodGas:()=>H,gasToTGas:()=>qt,estimateBatchGas:()=>X,createNearContract:()=>w,GAS_COSTS:()=>C});module.exports=It(Qt);var Wt=L(()=>{M();k();j();xt()});Wt();
|
|
2
|
+
|
|
3
|
+
//# debugId=C4C445F309B45A4364756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/near/helpers/core.ts", "../src/near/helpers/gasEstimation.ts", "../src/near/helpers/nep141.ts", "../src/utils.ts", "../src/near/toolbox.ts", "../src/near/types.ts", "../src/near/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { KeyPair } from \"@near-js/crypto\";\nimport type { Provider } from \"@near-js/providers\";\nimport { KeyPairSigner } from \"@near-js/signers\";\nimport { type DerivationPathArray, derivationPathToString, SwapKitError } from \"@uswap/helpers\";\nimport type { NearSigner } from \"../types\";\n\nexport async function getValidateNearAddress() {\n const { validateAccountId } = await import(\"near-sdk-js\");\n return (address: string) => {\n // Use the official NEAR SDK validation function if available\n try {\n return validateAccountId(address);\n } catch {\n const ACCOUNT_ID_REGEX = /^(([a-z\\d]+[-_])*[a-z\\d]+\\.)*([a-z\\d]+[-_])*[a-z\\d]+$/;\n\n return address.length >= 2 && address.length <= 64 && ACCOUNT_ID_REGEX.test(address);\n }\n };\n}\n\nexport async function getNearSignerFromPhrase(params: {\n phrase: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n}) {\n const { parseSeedPhrase } = await import(\"near-seed-phrase\");\n const { KeyPair } = await import(\"@near-js/crypto\");\n\n const index = params.index || 0;\n const derivationPath = params.derivationPath\n ? derivationPathToString(params.derivationPath.slice(0, 3) as [number, number, number])\n : `m/44'/397'/${index}'`;\n\n const { secretKey } = parseSeedPhrase(params.phrase, derivationPath);\n const keyPair = KeyPair.fromString(secretKey as any);\n\n return createNearSignerFromKeyPair(keyPair);\n}\n\nexport async function getNearSignerFromPrivateKey(privateKey: string) {\n const { KeyPair } = await import(\"@near-js/crypto\");\n const keyPair = KeyPair.fromString(privateKey as any);\n return createNearSignerFromKeyPair(keyPair);\n}\n\nclass SKKeyPairSigner extends KeyPairSigner {\n #keyPair: KeyPair;\n\n constructor(keyPair: KeyPair) {\n super(keyPair);\n this.#keyPair = keyPair;\n }\n\n getAddress(): Promise<string> {\n const publicKey = this.#keyPair.getPublicKey();\n const hexAddress = Buffer.from(publicKey.data).toString(\"hex\");\n return Promise.resolve(hexAddress);\n }\n}\n\nfunction createNearSignerFromKeyPair(keyPair: KeyPair): NearSigner {\n const keyPairSigner = new SKKeyPairSigner(keyPair);\n\n return keyPairSigner;\n}\n\nexport async function getFullAccessPublicKey(provider: Provider, accountId: string) {\n const response = await provider.query({\n account_id: accountId,\n finality: \"final\",\n request_type: \"view_access_key_list\",\n });\n\n const fullAccessKey = (response as any).keys.find((key: any) => key.access_key.permission === \"FullAccess\");\n\n if (!fullAccessKey) {\n throw new SwapKitError(\"toolbox_near_no_public_key_found\");\n }\n const { PublicKey } = await import(\"@near-js/crypto\");\n\n const publicKey = PublicKey.fromString(fullAccessKey.public_key);\n const nonce = (fullAccessKey.access_key.nonce as number) || 0;\n\n return { nonce, publicKey };\n}\n",
|
|
6
|
+
"import type { Account } from \"@near-js/accounts\";\nimport type { NearGasEstimateParams } from \"../types/contract\";\n\nexport const GAS_COSTS = {\n ACCESS_KEY_ADDITION: \"5\",\n ACCESS_KEY_DELETION: \"5\",\n ACCOUNT_CREATION: \"30\",\n CONTRACT_CALL: \"150\",\n CONTRACT_DEPLOYMENT: \"200\",\n SIMPLE_TRANSFER: \"1\",\n STAKE: \"10\",\n STORAGE_DEPOSIT: \"150\",\n TOKEN_TRANSFER: \"150\",\n} as const;\n\nexport function isSimpleTransfer(params: NearGasEstimateParams): params is { recipient: string; amount: string } {\n return \"recipient\" in params && \"amount\" in params && !(\"contractId\" in params);\n}\n\nexport function isContractCall(\n params: NearGasEstimateParams,\n): params is { contractId: string; methodName: string; args?: Record<string, any>; attachedDeposit?: string } {\n return \"contractId\" in params && \"methodName\" in params;\n}\n\nexport function isBatchTransaction(params: NearGasEstimateParams): params is { actions: any[] } {\n return \"actions\" in params;\n}\n\nexport function isAccountCreation(\n params: NearGasEstimateParams,\n): params is { newAccountId: string; publicKey?: string } {\n return \"newAccountId\" in params;\n}\n\nexport function isContractDeployment(params: NearGasEstimateParams): params is { contractCode: Uint8Array } {\n return \"contractCode\" in params;\n}\n\nexport function isCustomEstimator(\n params: NearGasEstimateParams,\n): params is { customEstimator: (account: Account) => Promise<string> } {\n return \"customEstimator\" in params;\n}\n\nexport function estimateBatchGas(actions: any[]) {\n let totalGas = 0;\n\n for (const action of actions) {\n switch (action.enum) {\n case \"transfer\":\n totalGas += Number(GAS_COSTS.SIMPLE_TRANSFER);\n break;\n case \"functionCall\":\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n break;\n case \"createAccount\":\n totalGas += Number(GAS_COSTS.ACCOUNT_CREATION);\n break;\n case \"deployContract\":\n totalGas += Number(GAS_COSTS.CONTRACT_DEPLOYMENT);\n break;\n case \"addKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_ADDITION);\n break;\n case \"deleteKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_DELETION);\n break;\n case \"stake\":\n totalGas += Number(GAS_COSTS.STAKE);\n break;\n default:\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n }\n }\n\n return totalGas.toString();\n}\n\nexport function getContractMethodGas(methodName: string) {\n if (methodName === \"ft_transfer\" || methodName === \"ft_transfer_call\") {\n return GAS_COSTS.TOKEN_TRANSFER;\n }\n if (methodName === \"storage_deposit\") {\n return GAS_COSTS.STORAGE_DEPOSIT;\n }\n return GAS_COSTS.CONTRACT_CALL;\n}\n\nexport function tgasToGas(tgas: string): string {\n return (BigInt(tgas) * BigInt(10 ** 12)).toString();\n}\n\nexport function gasToTGas(gas: string): string {\n return (BigInt(gas) / BigInt(10 ** 12)).toString();\n}\n",
|
|
7
|
+
"import type { Account, Contract } from \"@near-js/accounts\";\n\nexport interface NEP141Metadata {\n spec: string;\n name: string;\n symbol: string;\n icon?: string;\n reference?: string;\n reference_hash?: string;\n decimals: number;\n}\n\nexport interface StorageBalance {\n total: string;\n available: string;\n}\n\nexport interface StorageBalanceBounds {\n min: string;\n max?: string;\n}\n\nexport type NEP141Token = {\n transfer: (receiverId: string, amount: string, memo?: string) => Promise<void>;\n transferCall: (receiverId: string, amount: string, msg: string, memo?: string) => Promise<void>;\n balanceOf: (accountId: string) => Promise<string>;\n totalSupply: () => Promise<string>;\n metadata: () => Promise<NEP141Metadata>;\n storageBalanceOf: (accountId: string) => Promise<StorageBalance | null>;\n storageDeposit: (accountId?: string, amount?: string) => Promise<StorageBalance>;\n ensureStorage: (accountId: string) => Promise<void>;\n contract: Contract;\n};\n\n// Create a Near contract instance\nexport async function createNearContract<T extends Contract>({\n account,\n contractId,\n viewMethods,\n changeMethods,\n}: {\n account: Account;\n contractId: string;\n viewMethods: string[];\n changeMethods: string[];\n}) {\n const { Contract } = await import(\"@near-js/accounts\");\n\n return new Contract(account, contractId, { changeMethods, useLocalViewExecution: true, viewMethods }) as T;\n}\n",
|
|
8
|
+
"import { AssetValue, type Chain, getChainConfig } from \"@uswap/helpers\";\nimport { SwapKitApi } from \"@uswap/helpers/api\";\n\nconst pid = typeof process !== \"undefined\" && process.pid ? process.pid.toString(36) : \"\";\n\nlet last = 0;\nexport function uniqid() {\n function now() {\n const time = Date.now();\n const lastTime = last || time;\n last = lastTime;\n\n return time > last ? time : lastTime + 1;\n }\n\n return pid + now().toString(36);\n}\n\nexport function getBalance<T extends Chain>(chain: T) {\n return async function getBalance(address: string, scamFilter = true) {\n const balances = await SwapKitApi.getChainBalance({ address, chain, scamFilter });\n const { baseDecimal } = getChainConfig(chain);\n return balances.map(({ identifier, value, decimal }) => {\n return new AssetValue({ decimal: decimal || baseDecimal, identifier, value });\n });\n };\n}\n",
|
|
9
|
+
"import type { Account, Contract } from \"@near-js/accounts\";\nimport type { SignedTransaction, Transaction } from \"@near-js/transactions\";\nimport { AssetValue, Chain, getChainConfig, getRPCUrl, SwapKitError } from \"@uswap/helpers\";\nimport { getBalance } from \"../utils\";\nimport {\n getFullAccessPublicKey,\n getNearSignerFromPhrase,\n getNearSignerFromPrivateKey,\n getValidateNearAddress,\n} from \"./helpers/core\";\nimport {\n estimateBatchGas,\n GAS_COSTS,\n getContractMethodGas,\n isAccountCreation,\n isBatchTransaction,\n isContractCall,\n isContractDeployment,\n isCustomEstimator,\n isSimpleTransfer,\n} from \"./helpers/gasEstimation\";\nimport { createNearContract } from \"./helpers/nep141\";\nimport type {\n NearCreateTransactionParams,\n NearFunctionCallParams,\n NearToolboxParams,\n NearTransferParams,\n} from \"./types\";\nimport type { NearContractInterface, NearGasEstimateParams } from \"./types/contract\";\nimport type { NEP141StorageContract } from \"./types/nep141\";\nimport type {\n BatchTransaction,\n ContractFunctionCallParams,\n CreateActionParams,\n GetSignerFromPhraseParams,\n} from \"./types/toolbox\";\n\nexport async function getNearToolbox(toolboxParams?: NearToolboxParams) {\n const { P, match } = await import(\"ts-pattern\");\n const { JsonRpcProvider } = await import(\"@near-js/providers\");\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, async (params) => {\n const signer = await getNearSignerFromPhrase(params);\n return signer;\n })\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const url = await getRPCUrl(Chain.Near);\n\n const provider = new JsonRpcProvider({ url });\n\n async function getAccount(address?: string) {\n const { Account } = await import(\"@near-js/accounts\");\n\n const _address = address || (await getAddress());\n\n const account = new Account(_address, provider, signer);\n\n return account;\n }\n\n async function getAddress() {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n const address = await signer.getAddress();\n return address;\n }\n\n async function checkStorageBalance(params: { contractId: string; accountId: string }) {\n const contract = await createContract<NEP141StorageContract>({\n changeMethods: [],\n contractId: params.contractId,\n viewMethods: [\"storage_balance_of\"],\n });\n\n return contract.storage_balance_of({ account_id: params.accountId });\n }\n\n async function transferTokenWithStorageDeposit(params: {\n recipient: string;\n assetValue: AssetValue;\n memo?: string;\n contractId: string;\n }) {\n const storageDeposit = \"1250000000000000000000\"; // 0.00125 NEAR default\n\n const actions = [\n await createAction({\n args: { account_id: params.recipient },\n attachedDeposit: storageDeposit,\n gas: \"150000000000000\", // 150 TGas for storage_deposit\n methodName: \"storage_deposit\",\n }),\n await createAction({\n args: {\n amount: params.assetValue.getBaseValue(\"string\"),\n memo: params.memo || null,\n receiver_id: params.recipient,\n },\n attachedDeposit: \"1\",\n gas: \"150000000000000\", // 150 TGas for ft_transfer\n methodName: \"ft_transfer\",\n }),\n ];\n\n return executeBatchTransaction({ actions, receiverId: params.contractId });\n }\n\n async function transfer(params: NearTransferParams) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { assetValue, recipient, memo } = params;\n const sender = await getAddress();\n\n // Handle NEP-141 token transfers - check if recipient needs storage\n if (!assetValue.isGasAsset && assetValue.address) {\n const storageBalance = await checkStorageBalance({ accountId: recipient, contractId: assetValue.address });\n\n if (!storageBalance) {\n return transferTokenWithStorageDeposit({ assetValue, contractId: assetValue.address, memo, recipient });\n }\n }\n\n // Standard transfer (native NEAR or token with registered storage)\n const transaction = await createTransaction({ ...params, sender });\n return signAndSendTransaction(transaction);\n }\n\n async function createTransaction(params: NearCreateTransactionParams) {\n const { recipient, assetValue, memo, attachedDeposit, sender: signerId, functionCall } = params;\n const validateNearAddress = await getValidateNearAddress();\n\n if (!validateNearAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { recipient: recipient });\n }\n\n if (!validateNearAddress(signerId)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { signerId: signerId });\n }\n\n if (functionCall) {\n return createContractFunctionCall({ ...functionCall, sender: signerId });\n }\n\n if (!assetValue.isGasAsset) {\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n return createContractFunctionCall({\n args: { amount: assetValue.getBaseValue(\"string\"), memo: memo || null, receiver_id: recipient },\n attachedDeposit: attachedDeposit || \"1\",\n contractId,\n gas: \"250000000000000\",\n methodName: \"ft_transfer\",\n sender: signerId,\n });\n }\n\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, signerId);\n const baseAmount = assetValue.getBaseValue(\"bigint\");\n\n const { actionCreators, createTransaction } = await import(\"@near-js/transactions\");\n const { baseDecode } = await import(\"@near-js/utils\");\n\n const txActions = [actionCreators.transfer(baseAmount)];\n\n if (memo && attachedDeposit) {\n txActions.push(actionCreators.functionCall(\"memo\", { memo }, BigInt(\"250000000000000\"), BigInt(attachedDeposit)));\n }\n\n const block = await provider.block({ finality: \"final\" });\n const blockHash = baseDecode(block.header.hash);\n\n return createTransaction(signerId, publicKey, recipient, nonce + 1, txActions, blockHash);\n }\n\n function serializeTransaction(transaction: Transaction) {\n const serializedTx = transaction.encode();\n return Buffer.from(serializedTx).toString(\"base64\");\n }\n\n async function createContractFunctionCall(params: ContractFunctionCallParams) {\n const { sender: accountId } = params;\n\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, accountId);\n\n const { createTransaction, actionCreators } = await import(\"@near-js/transactions\");\n const { baseDecode } = await import(\"@near-js/utils\");\n const block = await provider.block({ finality: \"final\" });\n const blockHash = baseDecode(block.header.hash);\n\n const actions = [\n actionCreators.functionCall(\n params.methodName,\n Buffer.from(JSON.stringify(params.args)),\n BigInt(params.gas),\n BigInt(params.attachedDeposit),\n ),\n ];\n\n const transaction = createTransaction(accountId, publicKey, params.contractId, nonce + 1, actions, blockHash);\n\n return transaction;\n }\n\n async function createAction(params: CreateActionParams) {\n const { actionCreators } = await import(\"@near-js/transactions\");\n\n const action = actionCreators.functionCall(\n params.methodName,\n Buffer.from(JSON.stringify(params.args)),\n BigInt(params.gas),\n BigInt(params.attachedDeposit),\n );\n\n return action;\n }\n\n async function signTransaction(transaction: Transaction): Promise<SignedTransaction> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const [_hash, signedTx] = await signer.signTransaction(transaction);\n return signedTx;\n }\n\n async function broadcastTransaction(signedTransaction: SignedTransaction) {\n const result = await provider.sendTransaction(signedTransaction);\n return result.transaction.hash;\n }\n\n async function signAndSendTransaction(transaction: Transaction) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n try {\n const signedTx = await signTransaction(transaction);\n const txHash = await broadcastTransaction(signedTx);\n return txHash;\n } catch {\n return signer.signAndSendTransactions?.({ transactions: [transaction] });\n }\n }\n\n async function estimateTransactionFee(params: NearTransferParams | NearGasEstimateParams) {\n if (\"assetValue\" in params) {\n const baseTransferCost = \"115123062500\";\n const receiptCreationCost = \"108059500000\";\n\n const totalGasUnits = BigInt(baseTransferCost) + BigInt(receiptCreationCost);\n\n const gasPrice = await getCurrentGasPrice();\n\n const totalCostYocto = totalGasUnits * BigInt(gasPrice.toString());\n const { baseDecimal } = getChainConfig(Chain.Near);\n\n return AssetValue.from({ chain: Chain.Near, fromBaseDecimal: baseDecimal, value: totalCostYocto.toString() });\n }\n\n const account = signer ? await getAccount() : undefined;\n return estimateGas(params, account);\n }\n\n async function getCurrentGasPrice() {\n try {\n const result = await provider.query({\n account_id: \"system\",\n args_base64: \"\",\n finality: \"final\",\n method_name: \"gas_price\",\n request_type: \"call_function\",\n });\n\n return result;\n } catch {\n return \"100000000\"; // 0.0001 NEAR per Tgas\n }\n }\n\n async function createSubAccount(subAccountId: string, publicKey: string, initialBalance: string): Promise<string> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const account = await getAccount();\n const { formatNearAmount } = await import(\"@near-js/utils\");\n const { PublicKey } = await import(\"@near-js/crypto\");\n\n const balanceInYocto = formatNearAmount(initialBalance) || \"0\";\n\n const result = await account.createAccount(subAccountId, PublicKey.fromString(publicKey), BigInt(balanceInYocto));\n\n return result.transaction.hash;\n }\n\n async function callFunction(params: NearFunctionCallParams): Promise<string> {\n try {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { actionCreators } = await import(\"@near-js/transactions\");\n\n const { contractId, methodName, args, deposit } = params;\n const account = await getAccount();\n\n const estimatedGas = await estimateGas({ args: args || {}, contractId, methodName });\n\n const functionAction = actionCreators.functionCall(\n methodName,\n args || {},\n estimatedGas.getBaseValue(\"bigint\"),\n BigInt(deposit || \"1\"),\n );\n\n const result = await account.signAndSendTransaction({ actions: [functionAction], receiverId: contractId });\n\n return result.transaction_outcome.id;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n // Create typed contract interface\n async function createContract<T extends Contract = Contract>(contractInterface: NearContractInterface): Promise<T> {\n const account = await getAccount();\n\n return createNearContract<T>({\n account,\n changeMethods: contractInterface.changeMethods,\n contractId: contractInterface.contractId,\n viewMethods: contractInterface.viewMethods,\n });\n }\n\n async function executeBatchTransaction(batch: BatchTransaction): Promise<string> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n if (batch.actions.length === 0) {\n throw new SwapKitError(\"toolbox_near_empty_batch\");\n }\n\n const account = await getAccount();\n\n // Use account.signAndSendTransaction for batch operations\n const result = await account.signAndSendTransaction({ actions: batch.actions, receiverId: batch.receiverId });\n\n return result.transaction.hash;\n }\n\n async function estimateGas(params: NearGasEstimateParams, account?: Account) {\n const { baseDecimal } = getChainConfig(Chain.Near);\n\n const gasInTGas = await match(params)\n .when(isSimpleTransfer, () => GAS_COSTS.SIMPLE_TRANSFER)\n .when(isContractCall, (p) => getContractMethodGas(p.methodName))\n .when(isBatchTransaction, (p) => estimateBatchGas(p.actions))\n .when(isAccountCreation, () => GAS_COSTS.ACCOUNT_CREATION)\n .when(isContractDeployment, () => GAS_COSTS.CONTRACT_DEPLOYMENT)\n .when(isCustomEstimator, (p) => {\n if (!account) {\n throw new SwapKitError(\"toolbox_near_no_account\");\n }\n return p.customEstimator(account);\n })\n .otherwise(() => {\n throw new SwapKitError(\"toolbox_near_invalid_gas_params\");\n });\n\n const gasInUnits = BigInt(gasInTGas) * BigInt(10 ** 12);\n const costInYoctoNear = gasInUnits;\n\n return AssetValue.from({ chain: Chain.Near, fromBaseDecimal: baseDecimal, value: costInYoctoNear });\n }\n\n // Get current gas price from network\n async function getGasPrice() {\n try {\n const result = await provider.gasPrice(null);\n return result.gas_price || \"100000000\";\n } catch {\n // Fallback to default\n return \"100000000\";\n }\n }\n\n return {\n broadcastTransaction,\n callFunction,\n createAction,\n createContract,\n createContractFunctionCall,\n createSubAccount,\n createTransaction,\n estimateGas,\n estimateTransactionFee,\n executeBatchTransaction,\n getAddress,\n getBalance: getBalance(Chain.Near),\n getGasPrice,\n getPublicKey: async () => (signer ? (await signer.getPublicKey()).toString() : \"\"),\n getSignerFromPhrase: (params: GetSignerFromPhraseParams) => getNearSignerFromPhrase(params),\n getSignerFromPrivateKey: getNearSignerFromPrivateKey,\n provider,\n serializeTransaction,\n signAndSendTransaction,\n signTransaction,\n transfer,\n validateAddress: await getValidateNearAddress(),\n };\n}\n",
|
|
10
|
+
"import type { Signer } from \"@near-js/signers\";\nimport type { SignedTransaction, Transaction } from \"@near-js/transactions\";\nimport type {\n ChainSigner,\n DerivationPathArray,\n GenericCreateTransactionParams,\n GenericTransferParams,\n} from \"@uswap/helpers\";\n\nexport interface NearSigner extends Signer, Omit<ChainSigner<Transaction, SignedTransaction>, \"signTransaction\"> {\n signAndSendTransactions?(params: { transactions: Transaction[] }): Promise<string>;\n}\n\nexport type NearToolboxParams =\n | { signer?: NearSigner; accountId?: string }\n | { phrase?: string; index?: number; derivationPath?: DerivationPathArray };\n\nexport interface NearTransferParams extends GenericTransferParams {}\n\nexport interface NearConfig {\n networkId: \"mainnet\" | \"testnet\" | \"betanet\";\n nodeUrl: string;\n walletUrl?: string;\n helperUrl?: string;\n keyStore?: any;\n}\n\nexport interface NearFunctionCallParams {\n contractId: string;\n methodName: string;\n args: Uint8Array | Record<string, any>;\n deposit?: bigint | string | number;\n gas?: bigint | string | number;\n}\n\nexport interface NearCreateTransactionParams extends Omit<GenericCreateTransactionParams, \"feeRate\"> {\n attachedDeposit?: string;\n functionCall?: { methodName: string; args: object; attachedDeposit: string; gas: string; contractId: string };\n}\n\nexport * from \"./toolbox\";\nexport * from \"./types/contract\";\nexport * from \"./types/nep141\";\nexport * from \"./types/toolbox\";\n",
|
|
11
|
+
"import type { getNearToolbox } from \"./toolbox\";\n\nexport * from \"./helpers/core\";\nexport * from \"./helpers/gasEstimation\";\nexport * from \"./helpers/nep141\";\nexport * from \"./toolbox\";\nexport * from \"./types\";\n\nexport type NearWallet = Awaited<ReturnType<typeof getNearToolbox>>;\n\nexport type {\n NearCallParams,\n NearContractInterface,\n NearGasEstimateParams,\n} from \"./types/contract\";\nexport type {\n FungibleTokenMetadata,\n StorageBalance,\n StorageBalanceBounds,\n TokenTransferParams,\n} from \"./types/nep141\";\n"
|
|
12
|
+
],
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "C4C445F309B45A4364756E2164756E21",
|
|
15
|
+
"names": []
|
|
16
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var Gt=Object.create;var{getPrototypeOf:St,defineProperty:q,getOwnPropertyNames:yt}=Object;var Bt=Object.prototype.hasOwnProperty;var g=(t,r,i)=>{i=t!=null?Gt(St(t)):{};let N=r||!t||!t.__esModule?q(i,"default",{value:t,enumerable:!0}):i;for(let e of yt(t))if(!Bt.call(N,e))q(N,e,{get:()=>t[e],enumerable:!0});return N};var Ft=(t,r)=>{for(var i in r)q(t,i,{get:r[i],enumerable:!0,configurable:!0,set:(N)=>r[i]=()=>N})};var u=(t,r)=>()=>(t&&(r=t(t=0)),r);var P=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(r,i)=>(typeof require<"u"?require:r)[i]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});import{KeyPairSigner as bt}from"@near-js/signers";import{derivationPathToString as It,SwapKitError as Ut}from"@uswap/helpers";async function B(){let{validateAccountId:t}=await import("near-sdk-js");return(r)=>{try{return t(r)}catch{let i=/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/;return r.length>=2&&r.length<=64&&i.test(r)}}}async function F(t){let{parseSeedPhrase:r}=await import("near-seed-phrase"),{KeyPair:i}=await import("@near-js/crypto"),N=t.index||0,e=t.derivationPath?It(t.derivationPath.slice(0,3)):`m/44'/397'/${N}'`,{secretKey:R}=r(t.phrase,e),s=i.fromString(R);return it(s)}async function J(t){let{KeyPair:r}=await import("@near-js/crypto"),i=r.fromString(t);return it(i)}function it(t){return new ot(t)}async function b(t,r){let N=(await t.query({account_id:r,finality:"final",request_type:"view_access_key_list"})).keys.find((_)=>_.access_key.permission==="FullAccess");if(!N)throw new Ut("toolbox_near_no_public_key_found");let{PublicKey:e}=await import("@near-js/crypto"),R=e.fromString(N.public_key);return{nonce:N.access_key.nonce||0,publicKey:R}}var ot;var M=u(()=>{ot=class ot extends bt{#t;constructor(t){super(t);this.#t=t}getAddress(){let t=this.#t.getPublicKey(),r=Buffer.from(t.data).toString("hex");return Promise.resolve(r)}}});function Q(t){return"recipient"in t&&"amount"in t&&!("contractId"in t)}function W(t){return"contractId"in t&&"methodName"in t}function Z(t){return"actions"in t}function $(t){return"newAccountId"in t}function p(t){return"contractCode"in t}function z(t){return"customEstimator"in t}function X(t){let r=0;for(let i of t)switch(i.enum){case"transfer":r+=Number(C.SIMPLE_TRANSFER);break;case"functionCall":r+=Number(C.CONTRACT_CALL);break;case"createAccount":r+=Number(C.ACCOUNT_CREATION);break;case"deployContract":r+=Number(C.CONTRACT_DEPLOYMENT);break;case"addKey":r+=Number(C.ACCESS_KEY_ADDITION);break;case"deleteKey":r+=Number(C.ACCESS_KEY_DELETION);break;case"stake":r+=Number(C.STAKE);break;default:r+=Number(C.CONTRACT_CALL)}return r.toString()}function H(t){if(t==="ft_transfer"||t==="ft_transfer_call")return C.TOKEN_TRANSFER;if(t==="storage_deposit")return C.STORAGE_DEPOSIT;return C.CONTRACT_CALL}function Yt(t){return(BigInt(t)*BigInt(1000000000000)).toString()}function qt(t){return(BigInt(t)/BigInt(1000000000000)).toString()}var C;var k=u(()=>{C={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"}});async function w({account:t,contractId:r,viewMethods:i,changeMethods:N}){let{Contract:e}=await import("@near-js/accounts");return new e(t,r,{changeMethods:N,useLocalViewExecution:!0,viewMethods:i})}import{AssetValue as Jt,getChainConfig as Mt}from"@uswap/helpers";import{SwapKitApi as Qt}from"@uswap/helpers/api";function ht(){function t(){let r=Date.now(),i=V||r;return V=i,r>V?r:i+1}return Wt+t().toString(36)}function et(t){return async function(i,N=!0){let e=await Qt.getChainBalance({address:i,chain:t,scamFilter:N}),{baseDecimal:R}=Mt(t);return e.map(({identifier:s,value:_,decimal:G})=>{return new Jt({decimal:G||R,identifier:s,value:_})})}}var Wt,V=0;var mt=u(()=>{Wt=typeof process<"u"&&process.pid?process.pid.toString(36):""});import{AssetValue as Tt,Chain as D,getChainConfig as Nt,getRPCUrl as Zt,SwapKitError as O}from"@uswap/helpers";async function $t(t){let{P:r,match:i}=await import("ts-pattern"),{JsonRpcProvider:N}=await import("@near-js/providers"),e=await i(t).with({phrase:r.string},async(n)=>{return await F(n)}).with({signer:r.any},({signer:n})=>n).otherwise(()=>{return}),R=await Zt(D.Near),s=new N({url:R});async function _(n){let{Account:o}=await import("@near-js/accounts"),m=n||await G();return new o(m,s,e)}async function G(){if(!e)throw new O("toolbox_near_no_signer");return await e.getAddress()}async function gt(n){return(await K({changeMethods:[],contractId:n.contractId,viewMethods:["storage_balance_of"]})).storage_balance_of({account_id:n.accountId})}async function Pt(n){let m=[await U({args:{account_id:n.recipient},attachedDeposit:"1250000000000000000000",gas:"150000000000000",methodName:"storage_deposit"}),await U({args:{amount:n.assetValue.getBaseValue("string"),memo:n.memo||null,receiver_id:n.recipient},attachedDeposit:"1",gas:"150000000000000",methodName:"ft_transfer"})];return c({actions:m,receiverId:n.contractId})}async function xt(n){if(!e)throw new O("toolbox_near_no_signer");let{assetValue:o,recipient:m,memo:x}=n,E=await G();if(!o.isGasAsset&&o.address){if(!await gt({accountId:m,contractId:o.address}))return Pt({assetValue:o,contractId:o.address,memo:x,recipient:m})}let T=await v({...n,sender:E});return l(T)}async function v(n){let{recipient:o,assetValue:m,memo:x,attachedDeposit:E,sender:T,functionCall:f}=n,A=await B();if(!A(o))throw new O("toolbox_near_invalid_address",{recipient:o});if(!A(T))throw new O("toolbox_near_invalid_address",{signerId:T});if(f)return I({...f,sender:T});if(!m.isGasAsset){let rt=m.address;if(!rt)throw new O("toolbox_near_missing_contract_address");return I({args:{amount:m.getBaseValue("string"),memo:x||null,receiver_id:o},attachedDeposit:E||"1",contractId:rt,gas:"250000000000000",methodName:"ft_transfer",sender:T})}let{publicKey:S,nonce:y}=await b(s,T),d=m.getBaseValue("bigint"),{actionCreators:tt,createTransaction:Rt}=await import("@near-js/transactions"),{baseDecode:Lt}=await import("@near-js/utils"),nt=[tt.transfer(d)];if(x&&E)nt.push(tt.functionCall("memo",{memo:x},BigInt("250000000000000"),BigInt(E)));let ut=await s.block({finality:"final"}),Dt=Lt(ut.header.hash);return Rt(T,S,o,y+1,nt,Dt)}function Ct(n){let o=n.encode();return Buffer.from(o).toString("base64")}async function I(n){let{sender:o}=n,{publicKey:m,nonce:x}=await b(s,o),{createTransaction:E,actionCreators:T}=await import("@near-js/transactions"),{baseDecode:f}=await import("@near-js/utils"),A=await s.block({finality:"final"}),S=f(A.header.hash),y=[T.functionCall(n.methodName,Buffer.from(JSON.stringify(n.args)),BigInt(n.gas),BigInt(n.attachedDeposit))];return E(o,m,n.contractId,x+1,y,S)}async function U(n){let{actionCreators:o}=await import("@near-js/transactions");return o.functionCall(n.methodName,Buffer.from(JSON.stringify(n.args)),BigInt(n.gas),BigInt(n.attachedDeposit))}async function a(n){if(!e)throw new O("toolbox_near_no_signer");let[o,m]=await e.signTransaction(n);return m}async function h(n){return(await s.sendTransaction(n)).transaction.hash}async function l(n){if(!e)throw new O("toolbox_near_no_signer");try{let o=await a(n);return await h(o)}catch{return e.signAndSendTransactions?.({transactions:[n]})}}async function Et(n){if("assetValue"in n){let E=BigInt("115123062500")+BigInt("108059500000"),T=await st(),f=E*BigInt(T.toString()),{baseDecimal:A}=Nt(D.Near);return Tt.from({chain:D.Near,fromBaseDecimal:A,value:f.toString()})}let o=e?await _():void 0;return Y(n,o)}async function st(){try{return await s.query({account_id:"system",args_base64:"",finality:"final",method_name:"gas_price",request_type:"call_function"})}catch{return"100000000"}}async function Ot(n,o,m){if(!e)throw new O("toolbox_near_no_signer");let x=await _(),{formatNearAmount:E}=await import("@near-js/utils"),{PublicKey:T}=await import("@near-js/crypto"),f=E(m)||"0";return(await x.createAccount(n,T.fromString(o),BigInt(f))).transaction.hash}async function _t(n){try{if(!e)throw new O("toolbox_near_no_signer");let{actionCreators:o}=await import("@near-js/transactions"),{contractId:m,methodName:x,args:E,deposit:T}=n,f=await _(),A=await Y({args:E||{},contractId:m,methodName:x}),S=o.functionCall(x,E||{},A.getBaseValue("bigint"),BigInt(T||"1"));return(await f.signAndSendTransaction({actions:[S],receiverId:m})).transaction_outcome.id}catch(o){throw new O("toolbox_near_transfer_failed",{error:o})}}async function K(n){let o=await _();return w({account:o,changeMethods:n.changeMethods,contractId:n.contractId,viewMethods:n.viewMethods})}async function c(n){if(!e)throw new O("toolbox_near_no_signer");if(n.actions.length===0)throw new O("toolbox_near_empty_batch");return(await(await _()).signAndSendTransaction({actions:n.actions,receiverId:n.receiverId})).transaction.hash}async function Y(n,o){let{baseDecimal:m}=Nt(D.Near),x=await i(n).when(Q,()=>C.SIMPLE_TRANSFER).when(W,(f)=>H(f.methodName)).when(Z,(f)=>X(f.actions)).when($,()=>C.ACCOUNT_CREATION).when(p,()=>C.CONTRACT_DEPLOYMENT).when(z,(f)=>{if(!o)throw new O("toolbox_near_no_account");return f.customEstimator(o)}).otherwise(()=>{throw new O("toolbox_near_invalid_gas_params")}),T=BigInt(x)*BigInt(1000000000000);return Tt.from({chain:D.Near,fromBaseDecimal:m,value:T})}async function At(){try{return(await s.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}return{broadcastTransaction:h,callFunction:_t,createAction:U,createContract:K,createContractFunctionCall:I,createSubAccount:Ot,createTransaction:v,estimateGas:Y,estimateTransactionFee:Et,executeBatchTransaction:c,getAddress:G,getBalance:et(D.Near),getGasPrice:At,getPublicKey:async()=>e?(await e.getPublicKey()).toString():"",getSignerFromPhrase:(n)=>F(n),getSignerFromPrivateKey:J,provider:s,serializeTransaction:Ct,signAndSendTransaction:l,signTransaction:a,transfer:xt,validateAddress:await B()}}var j=u(()=>{mt();M();k()});var ft=u(()=>{j()});var pt={};Ft(pt,{tgasToGas:()=>Yt,isSimpleTransfer:()=>Q,isCustomEstimator:()=>z,isContractDeployment:()=>p,isContractCall:()=>W,isBatchTransaction:()=>Z,isAccountCreation:()=>$,getValidateNearAddress:()=>B,getNearToolbox:()=>$t,getNearSignerFromPrivateKey:()=>J,getNearSignerFromPhrase:()=>F,getFullAccessPublicKey:()=>b,getContractMethodGas:()=>H,gasToTGas:()=>qt,estimateBatchGas:()=>X,createNearContract:()=>w,GAS_COSTS:()=>C});var zt=u(()=>{M();k();j();ft()});zt();export{Yt as tgasToGas,Q as isSimpleTransfer,z as isCustomEstimator,p as isContractDeployment,W as isContractCall,Z as isBatchTransaction,$ as isAccountCreation,B as getValidateNearAddress,$t as getNearToolbox,J as getNearSignerFromPrivateKey,F as getNearSignerFromPhrase,b as getFullAccessPublicKey,H as getContractMethodGas,qt as gasToTGas,X as estimateBatchGas,w as createNearContract,C as GAS_COSTS};
|
|
2
|
+
|
|
3
|
+
//# debugId=5B6C5D380AA6D65E64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/near/helpers/core.ts", "../src/near/helpers/gasEstimation.ts", "../src/near/helpers/nep141.ts", "../src/utils.ts", "../src/near/toolbox.ts", "../src/near/types.ts", "../src/near/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { KeyPair } from \"@near-js/crypto\";\nimport type { Provider } from \"@near-js/providers\";\nimport { KeyPairSigner } from \"@near-js/signers\";\nimport { type DerivationPathArray, derivationPathToString, SwapKitError } from \"@uswap/helpers\";\nimport type { NearSigner } from \"../types\";\n\nexport async function getValidateNearAddress() {\n const { validateAccountId } = await import(\"near-sdk-js\");\n return (address: string) => {\n // Use the official NEAR SDK validation function if available\n try {\n return validateAccountId(address);\n } catch {\n const ACCOUNT_ID_REGEX = /^(([a-z\\d]+[-_])*[a-z\\d]+\\.)*([a-z\\d]+[-_])*[a-z\\d]+$/;\n\n return address.length >= 2 && address.length <= 64 && ACCOUNT_ID_REGEX.test(address);\n }\n };\n}\n\nexport async function getNearSignerFromPhrase(params: {\n phrase: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n}) {\n const { parseSeedPhrase } = await import(\"near-seed-phrase\");\n const { KeyPair } = await import(\"@near-js/crypto\");\n\n const index = params.index || 0;\n const derivationPath = params.derivationPath\n ? derivationPathToString(params.derivationPath.slice(0, 3) as [number, number, number])\n : `m/44'/397'/${index}'`;\n\n const { secretKey } = parseSeedPhrase(params.phrase, derivationPath);\n const keyPair = KeyPair.fromString(secretKey as any);\n\n return createNearSignerFromKeyPair(keyPair);\n}\n\nexport async function getNearSignerFromPrivateKey(privateKey: string) {\n const { KeyPair } = await import(\"@near-js/crypto\");\n const keyPair = KeyPair.fromString(privateKey as any);\n return createNearSignerFromKeyPair(keyPair);\n}\n\nclass SKKeyPairSigner extends KeyPairSigner {\n #keyPair: KeyPair;\n\n constructor(keyPair: KeyPair) {\n super(keyPair);\n this.#keyPair = keyPair;\n }\n\n getAddress(): Promise<string> {\n const publicKey = this.#keyPair.getPublicKey();\n const hexAddress = Buffer.from(publicKey.data).toString(\"hex\");\n return Promise.resolve(hexAddress);\n }\n}\n\nfunction createNearSignerFromKeyPair(keyPair: KeyPair): NearSigner {\n const keyPairSigner = new SKKeyPairSigner(keyPair);\n\n return keyPairSigner;\n}\n\nexport async function getFullAccessPublicKey(provider: Provider, accountId: string) {\n const response = await provider.query({\n account_id: accountId,\n finality: \"final\",\n request_type: \"view_access_key_list\",\n });\n\n const fullAccessKey = (response as any).keys.find((key: any) => key.access_key.permission === \"FullAccess\");\n\n if (!fullAccessKey) {\n throw new SwapKitError(\"toolbox_near_no_public_key_found\");\n }\n const { PublicKey } = await import(\"@near-js/crypto\");\n\n const publicKey = PublicKey.fromString(fullAccessKey.public_key);\n const nonce = (fullAccessKey.access_key.nonce as number) || 0;\n\n return { nonce, publicKey };\n}\n",
|
|
6
|
+
"import type { Account } from \"@near-js/accounts\";\nimport type { NearGasEstimateParams } from \"../types/contract\";\n\nexport const GAS_COSTS = {\n ACCESS_KEY_ADDITION: \"5\",\n ACCESS_KEY_DELETION: \"5\",\n ACCOUNT_CREATION: \"30\",\n CONTRACT_CALL: \"150\",\n CONTRACT_DEPLOYMENT: \"200\",\n SIMPLE_TRANSFER: \"1\",\n STAKE: \"10\",\n STORAGE_DEPOSIT: \"150\",\n TOKEN_TRANSFER: \"150\",\n} as const;\n\nexport function isSimpleTransfer(params: NearGasEstimateParams): params is { recipient: string; amount: string } {\n return \"recipient\" in params && \"amount\" in params && !(\"contractId\" in params);\n}\n\nexport function isContractCall(\n params: NearGasEstimateParams,\n): params is { contractId: string; methodName: string; args?: Record<string, any>; attachedDeposit?: string } {\n return \"contractId\" in params && \"methodName\" in params;\n}\n\nexport function isBatchTransaction(params: NearGasEstimateParams): params is { actions: any[] } {\n return \"actions\" in params;\n}\n\nexport function isAccountCreation(\n params: NearGasEstimateParams,\n): params is { newAccountId: string; publicKey?: string } {\n return \"newAccountId\" in params;\n}\n\nexport function isContractDeployment(params: NearGasEstimateParams): params is { contractCode: Uint8Array } {\n return \"contractCode\" in params;\n}\n\nexport function isCustomEstimator(\n params: NearGasEstimateParams,\n): params is { customEstimator: (account: Account) => Promise<string> } {\n return \"customEstimator\" in params;\n}\n\nexport function estimateBatchGas(actions: any[]) {\n let totalGas = 0;\n\n for (const action of actions) {\n switch (action.enum) {\n case \"transfer\":\n totalGas += Number(GAS_COSTS.SIMPLE_TRANSFER);\n break;\n case \"functionCall\":\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n break;\n case \"createAccount\":\n totalGas += Number(GAS_COSTS.ACCOUNT_CREATION);\n break;\n case \"deployContract\":\n totalGas += Number(GAS_COSTS.CONTRACT_DEPLOYMENT);\n break;\n case \"addKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_ADDITION);\n break;\n case \"deleteKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_DELETION);\n break;\n case \"stake\":\n totalGas += Number(GAS_COSTS.STAKE);\n break;\n default:\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n }\n }\n\n return totalGas.toString();\n}\n\nexport function getContractMethodGas(methodName: string) {\n if (methodName === \"ft_transfer\" || methodName === \"ft_transfer_call\") {\n return GAS_COSTS.TOKEN_TRANSFER;\n }\n if (methodName === \"storage_deposit\") {\n return GAS_COSTS.STORAGE_DEPOSIT;\n }\n return GAS_COSTS.CONTRACT_CALL;\n}\n\nexport function tgasToGas(tgas: string): string {\n return (BigInt(tgas) * BigInt(10 ** 12)).toString();\n}\n\nexport function gasToTGas(gas: string): string {\n return (BigInt(gas) / BigInt(10 ** 12)).toString();\n}\n",
|
|
7
|
+
"import type { Account, Contract } from \"@near-js/accounts\";\n\nexport interface NEP141Metadata {\n spec: string;\n name: string;\n symbol: string;\n icon?: string;\n reference?: string;\n reference_hash?: string;\n decimals: number;\n}\n\nexport interface StorageBalance {\n total: string;\n available: string;\n}\n\nexport interface StorageBalanceBounds {\n min: string;\n max?: string;\n}\n\nexport type NEP141Token = {\n transfer: (receiverId: string, amount: string, memo?: string) => Promise<void>;\n transferCall: (receiverId: string, amount: string, msg: string, memo?: string) => Promise<void>;\n balanceOf: (accountId: string) => Promise<string>;\n totalSupply: () => Promise<string>;\n metadata: () => Promise<NEP141Metadata>;\n storageBalanceOf: (accountId: string) => Promise<StorageBalance | null>;\n storageDeposit: (accountId?: string, amount?: string) => Promise<StorageBalance>;\n ensureStorage: (accountId: string) => Promise<void>;\n contract: Contract;\n};\n\n// Create a Near contract instance\nexport async function createNearContract<T extends Contract>({\n account,\n contractId,\n viewMethods,\n changeMethods,\n}: {\n account: Account;\n contractId: string;\n viewMethods: string[];\n changeMethods: string[];\n}) {\n const { Contract } = await import(\"@near-js/accounts\");\n\n return new Contract(account, contractId, { changeMethods, useLocalViewExecution: true, viewMethods }) as T;\n}\n",
|
|
8
|
+
"import { AssetValue, type Chain, getChainConfig } from \"@uswap/helpers\";\nimport { SwapKitApi } from \"@uswap/helpers/api\";\n\nconst pid = typeof process !== \"undefined\" && process.pid ? process.pid.toString(36) : \"\";\n\nlet last = 0;\nexport function uniqid() {\n function now() {\n const time = Date.now();\n const lastTime = last || time;\n last = lastTime;\n\n return time > last ? time : lastTime + 1;\n }\n\n return pid + now().toString(36);\n}\n\nexport function getBalance<T extends Chain>(chain: T) {\n return async function getBalance(address: string, scamFilter = true) {\n const balances = await SwapKitApi.getChainBalance({ address, chain, scamFilter });\n const { baseDecimal } = getChainConfig(chain);\n return balances.map(({ identifier, value, decimal }) => {\n return new AssetValue({ decimal: decimal || baseDecimal, identifier, value });\n });\n };\n}\n",
|
|
9
|
+
"import type { Account, Contract } from \"@near-js/accounts\";\nimport type { SignedTransaction, Transaction } from \"@near-js/transactions\";\nimport { AssetValue, Chain, getChainConfig, getRPCUrl, SwapKitError } from \"@uswap/helpers\";\nimport { getBalance } from \"../utils\";\nimport {\n getFullAccessPublicKey,\n getNearSignerFromPhrase,\n getNearSignerFromPrivateKey,\n getValidateNearAddress,\n} from \"./helpers/core\";\nimport {\n estimateBatchGas,\n GAS_COSTS,\n getContractMethodGas,\n isAccountCreation,\n isBatchTransaction,\n isContractCall,\n isContractDeployment,\n isCustomEstimator,\n isSimpleTransfer,\n} from \"./helpers/gasEstimation\";\nimport { createNearContract } from \"./helpers/nep141\";\nimport type {\n NearCreateTransactionParams,\n NearFunctionCallParams,\n NearToolboxParams,\n NearTransferParams,\n} from \"./types\";\nimport type { NearContractInterface, NearGasEstimateParams } from \"./types/contract\";\nimport type { NEP141StorageContract } from \"./types/nep141\";\nimport type {\n BatchTransaction,\n ContractFunctionCallParams,\n CreateActionParams,\n GetSignerFromPhraseParams,\n} from \"./types/toolbox\";\n\nexport async function getNearToolbox(toolboxParams?: NearToolboxParams) {\n const { P, match } = await import(\"ts-pattern\");\n const { JsonRpcProvider } = await import(\"@near-js/providers\");\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, async (params) => {\n const signer = await getNearSignerFromPhrase(params);\n return signer;\n })\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const url = await getRPCUrl(Chain.Near);\n\n const provider = new JsonRpcProvider({ url });\n\n async function getAccount(address?: string) {\n const { Account } = await import(\"@near-js/accounts\");\n\n const _address = address || (await getAddress());\n\n const account = new Account(_address, provider, signer);\n\n return account;\n }\n\n async function getAddress() {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n const address = await signer.getAddress();\n return address;\n }\n\n async function checkStorageBalance(params: { contractId: string; accountId: string }) {\n const contract = await createContract<NEP141StorageContract>({\n changeMethods: [],\n contractId: params.contractId,\n viewMethods: [\"storage_balance_of\"],\n });\n\n return contract.storage_balance_of({ account_id: params.accountId });\n }\n\n async function transferTokenWithStorageDeposit(params: {\n recipient: string;\n assetValue: AssetValue;\n memo?: string;\n contractId: string;\n }) {\n const storageDeposit = \"1250000000000000000000\"; // 0.00125 NEAR default\n\n const actions = [\n await createAction({\n args: { account_id: params.recipient },\n attachedDeposit: storageDeposit,\n gas: \"150000000000000\", // 150 TGas for storage_deposit\n methodName: \"storage_deposit\",\n }),\n await createAction({\n args: {\n amount: params.assetValue.getBaseValue(\"string\"),\n memo: params.memo || null,\n receiver_id: params.recipient,\n },\n attachedDeposit: \"1\",\n gas: \"150000000000000\", // 150 TGas for ft_transfer\n methodName: \"ft_transfer\",\n }),\n ];\n\n return executeBatchTransaction({ actions, receiverId: params.contractId });\n }\n\n async function transfer(params: NearTransferParams) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { assetValue, recipient, memo } = params;\n const sender = await getAddress();\n\n // Handle NEP-141 token transfers - check if recipient needs storage\n if (!assetValue.isGasAsset && assetValue.address) {\n const storageBalance = await checkStorageBalance({ accountId: recipient, contractId: assetValue.address });\n\n if (!storageBalance) {\n return transferTokenWithStorageDeposit({ assetValue, contractId: assetValue.address, memo, recipient });\n }\n }\n\n // Standard transfer (native NEAR or token with registered storage)\n const transaction = await createTransaction({ ...params, sender });\n return signAndSendTransaction(transaction);\n }\n\n async function createTransaction(params: NearCreateTransactionParams) {\n const { recipient, assetValue, memo, attachedDeposit, sender: signerId, functionCall } = params;\n const validateNearAddress = await getValidateNearAddress();\n\n if (!validateNearAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { recipient: recipient });\n }\n\n if (!validateNearAddress(signerId)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { signerId: signerId });\n }\n\n if (functionCall) {\n return createContractFunctionCall({ ...functionCall, sender: signerId });\n }\n\n if (!assetValue.isGasAsset) {\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n return createContractFunctionCall({\n args: { amount: assetValue.getBaseValue(\"string\"), memo: memo || null, receiver_id: recipient },\n attachedDeposit: attachedDeposit || \"1\",\n contractId,\n gas: \"250000000000000\",\n methodName: \"ft_transfer\",\n sender: signerId,\n });\n }\n\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, signerId);\n const baseAmount = assetValue.getBaseValue(\"bigint\");\n\n const { actionCreators, createTransaction } = await import(\"@near-js/transactions\");\n const { baseDecode } = await import(\"@near-js/utils\");\n\n const txActions = [actionCreators.transfer(baseAmount)];\n\n if (memo && attachedDeposit) {\n txActions.push(actionCreators.functionCall(\"memo\", { memo }, BigInt(\"250000000000000\"), BigInt(attachedDeposit)));\n }\n\n const block = await provider.block({ finality: \"final\" });\n const blockHash = baseDecode(block.header.hash);\n\n return createTransaction(signerId, publicKey, recipient, nonce + 1, txActions, blockHash);\n }\n\n function serializeTransaction(transaction: Transaction) {\n const serializedTx = transaction.encode();\n return Buffer.from(serializedTx).toString(\"base64\");\n }\n\n async function createContractFunctionCall(params: ContractFunctionCallParams) {\n const { sender: accountId } = params;\n\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, accountId);\n\n const { createTransaction, actionCreators } = await import(\"@near-js/transactions\");\n const { baseDecode } = await import(\"@near-js/utils\");\n const block = await provider.block({ finality: \"final\" });\n const blockHash = baseDecode(block.header.hash);\n\n const actions = [\n actionCreators.functionCall(\n params.methodName,\n Buffer.from(JSON.stringify(params.args)),\n BigInt(params.gas),\n BigInt(params.attachedDeposit),\n ),\n ];\n\n const transaction = createTransaction(accountId, publicKey, params.contractId, nonce + 1, actions, blockHash);\n\n return transaction;\n }\n\n async function createAction(params: CreateActionParams) {\n const { actionCreators } = await import(\"@near-js/transactions\");\n\n const action = actionCreators.functionCall(\n params.methodName,\n Buffer.from(JSON.stringify(params.args)),\n BigInt(params.gas),\n BigInt(params.attachedDeposit),\n );\n\n return action;\n }\n\n async function signTransaction(transaction: Transaction): Promise<SignedTransaction> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const [_hash, signedTx] = await signer.signTransaction(transaction);\n return signedTx;\n }\n\n async function broadcastTransaction(signedTransaction: SignedTransaction) {\n const result = await provider.sendTransaction(signedTransaction);\n return result.transaction.hash;\n }\n\n async function signAndSendTransaction(transaction: Transaction) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n try {\n const signedTx = await signTransaction(transaction);\n const txHash = await broadcastTransaction(signedTx);\n return txHash;\n } catch {\n return signer.signAndSendTransactions?.({ transactions: [transaction] });\n }\n }\n\n async function estimateTransactionFee(params: NearTransferParams | NearGasEstimateParams) {\n if (\"assetValue\" in params) {\n const baseTransferCost = \"115123062500\";\n const receiptCreationCost = \"108059500000\";\n\n const totalGasUnits = BigInt(baseTransferCost) + BigInt(receiptCreationCost);\n\n const gasPrice = await getCurrentGasPrice();\n\n const totalCostYocto = totalGasUnits * BigInt(gasPrice.toString());\n const { baseDecimal } = getChainConfig(Chain.Near);\n\n return AssetValue.from({ chain: Chain.Near, fromBaseDecimal: baseDecimal, value: totalCostYocto.toString() });\n }\n\n const account = signer ? await getAccount() : undefined;\n return estimateGas(params, account);\n }\n\n async function getCurrentGasPrice() {\n try {\n const result = await provider.query({\n account_id: \"system\",\n args_base64: \"\",\n finality: \"final\",\n method_name: \"gas_price\",\n request_type: \"call_function\",\n });\n\n return result;\n } catch {\n return \"100000000\"; // 0.0001 NEAR per Tgas\n }\n }\n\n async function createSubAccount(subAccountId: string, publicKey: string, initialBalance: string): Promise<string> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const account = await getAccount();\n const { formatNearAmount } = await import(\"@near-js/utils\");\n const { PublicKey } = await import(\"@near-js/crypto\");\n\n const balanceInYocto = formatNearAmount(initialBalance) || \"0\";\n\n const result = await account.createAccount(subAccountId, PublicKey.fromString(publicKey), BigInt(balanceInYocto));\n\n return result.transaction.hash;\n }\n\n async function callFunction(params: NearFunctionCallParams): Promise<string> {\n try {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { actionCreators } = await import(\"@near-js/transactions\");\n\n const { contractId, methodName, args, deposit } = params;\n const account = await getAccount();\n\n const estimatedGas = await estimateGas({ args: args || {}, contractId, methodName });\n\n const functionAction = actionCreators.functionCall(\n methodName,\n args || {},\n estimatedGas.getBaseValue(\"bigint\"),\n BigInt(deposit || \"1\"),\n );\n\n const result = await account.signAndSendTransaction({ actions: [functionAction], receiverId: contractId });\n\n return result.transaction_outcome.id;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n // Create typed contract interface\n async function createContract<T extends Contract = Contract>(contractInterface: NearContractInterface): Promise<T> {\n const account = await getAccount();\n\n return createNearContract<T>({\n account,\n changeMethods: contractInterface.changeMethods,\n contractId: contractInterface.contractId,\n viewMethods: contractInterface.viewMethods,\n });\n }\n\n async function executeBatchTransaction(batch: BatchTransaction): Promise<string> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n if (batch.actions.length === 0) {\n throw new SwapKitError(\"toolbox_near_empty_batch\");\n }\n\n const account = await getAccount();\n\n // Use account.signAndSendTransaction for batch operations\n const result = await account.signAndSendTransaction({ actions: batch.actions, receiverId: batch.receiverId });\n\n return result.transaction.hash;\n }\n\n async function estimateGas(params: NearGasEstimateParams, account?: Account) {\n const { baseDecimal } = getChainConfig(Chain.Near);\n\n const gasInTGas = await match(params)\n .when(isSimpleTransfer, () => GAS_COSTS.SIMPLE_TRANSFER)\n .when(isContractCall, (p) => getContractMethodGas(p.methodName))\n .when(isBatchTransaction, (p) => estimateBatchGas(p.actions))\n .when(isAccountCreation, () => GAS_COSTS.ACCOUNT_CREATION)\n .when(isContractDeployment, () => GAS_COSTS.CONTRACT_DEPLOYMENT)\n .when(isCustomEstimator, (p) => {\n if (!account) {\n throw new SwapKitError(\"toolbox_near_no_account\");\n }\n return p.customEstimator(account);\n })\n .otherwise(() => {\n throw new SwapKitError(\"toolbox_near_invalid_gas_params\");\n });\n\n const gasInUnits = BigInt(gasInTGas) * BigInt(10 ** 12);\n const costInYoctoNear = gasInUnits;\n\n return AssetValue.from({ chain: Chain.Near, fromBaseDecimal: baseDecimal, value: costInYoctoNear });\n }\n\n // Get current gas price from network\n async function getGasPrice() {\n try {\n const result = await provider.gasPrice(null);\n return result.gas_price || \"100000000\";\n } catch {\n // Fallback to default\n return \"100000000\";\n }\n }\n\n return {\n broadcastTransaction,\n callFunction,\n createAction,\n createContract,\n createContractFunctionCall,\n createSubAccount,\n createTransaction,\n estimateGas,\n estimateTransactionFee,\n executeBatchTransaction,\n getAddress,\n getBalance: getBalance(Chain.Near),\n getGasPrice,\n getPublicKey: async () => (signer ? (await signer.getPublicKey()).toString() : \"\"),\n getSignerFromPhrase: (params: GetSignerFromPhraseParams) => getNearSignerFromPhrase(params),\n getSignerFromPrivateKey: getNearSignerFromPrivateKey,\n provider,\n serializeTransaction,\n signAndSendTransaction,\n signTransaction,\n transfer,\n validateAddress: await getValidateNearAddress(),\n };\n}\n",
|
|
10
|
+
"import type { Signer } from \"@near-js/signers\";\nimport type { SignedTransaction, Transaction } from \"@near-js/transactions\";\nimport type {\n ChainSigner,\n DerivationPathArray,\n GenericCreateTransactionParams,\n GenericTransferParams,\n} from \"@uswap/helpers\";\n\nexport interface NearSigner extends Signer, Omit<ChainSigner<Transaction, SignedTransaction>, \"signTransaction\"> {\n signAndSendTransactions?(params: { transactions: Transaction[] }): Promise<string>;\n}\n\nexport type NearToolboxParams =\n | { signer?: NearSigner; accountId?: string }\n | { phrase?: string; index?: number; derivationPath?: DerivationPathArray };\n\nexport interface NearTransferParams extends GenericTransferParams {}\n\nexport interface NearConfig {\n networkId: \"mainnet\" | \"testnet\" | \"betanet\";\n nodeUrl: string;\n walletUrl?: string;\n helperUrl?: string;\n keyStore?: any;\n}\n\nexport interface NearFunctionCallParams {\n contractId: string;\n methodName: string;\n args: Uint8Array | Record<string, any>;\n deposit?: bigint | string | number;\n gas?: bigint | string | number;\n}\n\nexport interface NearCreateTransactionParams extends Omit<GenericCreateTransactionParams, \"feeRate\"> {\n attachedDeposit?: string;\n functionCall?: { methodName: string; args: object; attachedDeposit: string; gas: string; contractId: string };\n}\n\nexport * from \"./toolbox\";\nexport * from \"./types/contract\";\nexport * from \"./types/nep141\";\nexport * from \"./types/toolbox\";\n",
|
|
11
|
+
"import type { getNearToolbox } from \"./toolbox\";\n\nexport * from \"./helpers/core\";\nexport * from \"./helpers/gasEstimation\";\nexport * from \"./helpers/nep141\";\nexport * from \"./toolbox\";\nexport * from \"./types\";\n\nexport type NearWallet = Awaited<ReturnType<typeof getNearToolbox>>;\n\nexport type {\n NearCallParams,\n NearContractInterface,\n NearGasEstimateParams,\n} from \"./types/contract\";\nexport type {\n FungibleTokenMetadata,\n StorageBalance,\n StorageBalanceBounds,\n TokenTransferParams,\n} from \"./types/nep141\";\n"
|
|
12
|
+
],
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "5B6C5D380AA6D65E64756E2164756E21",
|
|
15
|
+
"names": []
|
|
16
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var v=Object.create;var{getPrototypeOf:x,defineProperty:U,getOwnPropertyNames:Z,getOwnPropertyDescriptor:B}=Object,_=Object.prototype.hasOwnProperty;var $=(j,z,H)=>{H=j!=null?v(x(j)):{};let J=z||!j||!j.__esModule?U(H,"default",{value:j,enumerable:!0}):H;for(let K of Z(j))if(!_.call(J,K))U(J,K,{get:()=>j[K],enumerable:!0});return J},Y=new WeakMap,I=(j)=>{var z=Y.get(j),H;if(z)return z;if(z=U({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")Z(j).map((J)=>!_.call(z,J)&&U(z,J,{get:()=>j[J],enumerable:!(H=B(j,J))||H.enumerable}));return Y.set(j,z),z};var S=(j,z)=>{for(var H in z)U(j,H,{get:z[H],enumerable:!0,configurable:!0,set:(J)=>z[H]=()=>J})};var T=(j,z)=>()=>(j&&(z=j(j=0)),z);var P={};S(P,{radixValidateAddress:()=>q,RadixToolbox:()=>F});module.exports=I(P);function q(j){return j.startsWith("account_rdx1")&&j.length===66}function C({networkApi:j}){return async function(H){let J=await D({address:H,networkApi:j});return h({networkApi:j,resources:J})}}async function D({address:j,networkApi:z}){let H=!0,J,K=[],L=await E(z);while(H){let V={address:j,at_ledger_state:{state_version:L},cursor:J,limit_per_page:100},O=await z.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:V});if(K=K.concat(O.items),O.next_cursor)J=O.next_cursor;else H=!1}return K}async function h({resources:j,networkApi:z}){let H=[],J=50,K=[];for(let L=0;L<j.length;L+=50)K.push(j.slice(L,L+50));for(let L of K){let V=L.map((M)=>M.resource_address),O=await z.state.getEntityDetailsVaultAggregated(V),X=new Map;for(let M of O)if(M.details!==void 0){let Q=M.metadata?.items.find((G)=>G.key==="symbol"),W=Q?.value.typed.type==="String"?Q.value.typed.value:"?";if(M.details.type==="FungibleResource")X.set(M.address,{decimals:M.details.divisibility,symbol:W})}for(let M of L)if(M.aggregation_level==="Global"){let Q=X.get(M.resource_address)||{decimals:0,symbol:"?"},W=N.AssetValue.from({asset:Q.symbol!==N.Chain.Radix?`${N.Chain.Radix}.${Q.symbol}-${M.resource_address}`:"XRD.XRD",value:M.amount});H.push(W)}}return H}function E(j){return j.status.getCurrent().then((z)=>z.ledger_state.state_version)}var N,F=async({dappConfig:j}={})=>{let{RadixDappToolkit:z}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:H}=await import("@radixdlt/babylon-gateway-api-sdk"),J=j||N.SKConfig.get("integrations").radix,K=z({...J,networkId:J.network?.networkId||1}),L=H.initialize(K.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:C({networkApi:L}),networkApi:L,signAndBroadcast:()=>{throw new N.SwapKitError("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})},validateAddress:q}};var R=T(()=>{N=require("@uswap/helpers")});R();
|
|
2
|
+
|
|
3
|
+
//# debugId=D2FCC12CE9584A4764756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/radix/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n FungibleResourcesCollectionItem,\n GatewayApiClient,\n StateEntityDetailsVaultResponseItem,\n StateEntityFungiblesPageRequest,\n StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport { AssetValue, Chain, SKConfig, type SKConfigIntegrations, SwapKitError } from \"@uswap/helpers\";\n\nexport type RadixWallet = Awaited<ReturnType<typeof RadixToolbox>>;\n\ntype RadixGetBalanceParams = { address: string; networkApi: GatewayApiClient };\n// Could not find anything sync in SDK, ask Radix team\nexport function radixValidateAddress(address: string) {\n return address.startsWith(\"account_rdx1\") && address.length === 66;\n}\n\nfunction getBalance({ networkApi }: { networkApi: GatewayApiClient }) {\n return async function getBalance(address: string) {\n const fungibleResources = await fetchFungibleResources({ address, networkApi });\n const fungibleBalances = convertResourcesToBalances({ networkApi, resources: fungibleResources });\n return fungibleBalances;\n };\n}\n\nasync function fetchFungibleResources({\n address,\n networkApi,\n}: RadixGetBalanceParams): Promise<FungibleResourcesCollectionItem[]> {\n let hasNextPage = true;\n let nextCursor: string | undefined;\n let fungibleResources: FungibleResourcesCollectionItem[] = [];\n const stateVersion = await currentStateVersion(networkApi);\n while (hasNextPage) {\n const stateEntityFungiblesPageRequest: StateEntityFungiblesPageRequest = {\n address: address,\n at_ledger_state: { state_version: stateVersion },\n cursor: nextCursor,\n limit_per_page: 100,\n };\n\n const stateEntityFungiblesPageResponse: StateEntityFungiblesPageResponse =\n await networkApi.state.innerClient.entityFungiblesPage({\n stateEntityFungiblesPageRequest: stateEntityFungiblesPageRequest,\n });\n\n fungibleResources = fungibleResources.concat(stateEntityFungiblesPageResponse.items);\n if (stateEntityFungiblesPageResponse.next_cursor) {\n nextCursor = stateEntityFungiblesPageResponse.next_cursor;\n } else {\n hasNextPage = false;\n }\n }\n return fungibleResources;\n}\n\nasync function convertResourcesToBalances({\n resources,\n networkApi,\n}: {\n resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];\n networkApi: GatewayApiClient;\n}): Promise<AssetValue[]> {\n const balances: AssetValue[] = [];\n const BATCH_SIZE = 50;\n\n // Split resources into batches of up to 50 items\n const resourceBatches: FungibleResourcesCollectionItem[][] = [];\n for (let i = 0; i < resources.length; i += BATCH_SIZE) {\n resourceBatches.push(resources.slice(i, i + BATCH_SIZE));\n }\n\n for (const batch of resourceBatches) {\n const addresses = batch.map((item) => item.resource_address);\n const response: StateEntityDetailsVaultResponseItem[] =\n await networkApi.state.getEntityDetailsVaultAggregated(addresses);\n\n const divisibilities = new Map<string, { decimals: number; symbol: string }>();\n\n for (const result of response) {\n if (result.details !== undefined) {\n const metaDataSymbol = result.metadata?.items.find((item) => item.key === \"symbol\");\n const symbol = metaDataSymbol?.value.typed.type === \"String\" ? metaDataSymbol.value.typed.value : \"?\";\n\n if (result.details.type === \"FungibleResource\") {\n divisibilities.set(result.address, { decimals: result.details.divisibility, symbol });\n }\n }\n }\n\n for (const item of batch) {\n if (item.aggregation_level === \"Global\") {\n const assetInfo = divisibilities.get(item.resource_address) || { decimals: 0, symbol: \"?\" };\n\n const balance = AssetValue.from({\n asset:\n assetInfo.symbol !== Chain.Radix\n ? `${Chain.Radix}.${assetInfo.symbol}-${item.resource_address}`\n : \"XRD.XRD\",\n value: item.amount,\n });\n balances.push(balance);\n }\n }\n }\n\n return balances;\n}\n\nfunction currentStateVersion(networkApi: GatewayApiClient) {\n return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);\n}\n\nexport const RadixToolbox = async ({ dappConfig }: { dappConfig?: SKConfigIntegrations[\"radix\"] } = {}) => {\n const { RadixDappToolkit } = await import(\"@radixdlt/radix-dapp-toolkit\");\n const { GatewayApiClient } = await import(\"@radixdlt/babylon-gateway-api-sdk\");\n const config = dappConfig || SKConfig.get(\"integrations\").radix;\n\n const radixToolkit = RadixDappToolkit({ ...config, networkId: config.network?.networkId || 1 });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n getAddress: () => \"\",\n getBalance: getBalance({ networkApi }),\n networkApi,\n signAndBroadcast: (() => {\n throw new SwapKitError(\"toolbox_radix_method_not_supported\", { method: \"signAndBroadcast\" });\n }) as (params: any) => Promise<string>,\n validateAddress: radixValidateAddress,\n };\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "wxBAaO,SAAS,CAAoB,CAAC,EAAiB,CACpD,OAAO,EAAQ,WAAW,cAAc,GAAK,EAAQ,SAAW,GAGlE,SAAS,CAAU,EAAG,cAAgD,CACpE,OAAO,cAAyB,CAAC,EAAiB,CAChD,IAAM,EAAoB,MAAM,EAAuB,CAAE,UAAS,YAAW,CAAC,EAE9E,OADyB,EAA2B,CAAE,aAAY,UAAW,CAAkB,CAAC,GAKpG,eAAe,CAAsB,EACnC,UACA,cACoE,CACpE,IAAI,EAAc,GACd,EACA,EAAuD,CAAC,EACtD,EAAe,MAAM,EAAoB,CAAU,EACzD,MAAO,EAAa,CAClB,IAAM,EAAmE,CACvE,QAAS,EACT,gBAAiB,CAAE,cAAe,CAAa,EAC/C,OAAQ,EACR,eAAgB,GAClB,EAEM,EACJ,MAAM,EAAW,MAAM,YAAY,oBAAoB,CACrD,gCAAiC,CACnC,CAAC,EAGH,GADA,EAAoB,EAAkB,OAAO,EAAiC,KAAK,EAC/E,EAAiC,YACnC,EAAa,EAAiC,YAE9C,OAAc,GAGlB,OAAO,EAGT,eAAe,CAA0B,EACvC,YACA,cAIwB,CACxB,IAAM,EAAyB,CAAC,EAC1B,EAAa,GAGb,EAAuD,CAAC,EAC9D,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,GAJnB,GAKjB,EAAgB,KAAK,EAAU,MAAM,EAAG,EALvB,EAKqC,CAAC,EAGzD,QAAW,KAAS,EAAiB,CACnC,IAAM,EAAY,EAAM,IAAI,CAAC,IAAS,EAAK,gBAAgB,EACrD,EACJ,MAAM,EAAW,MAAM,gCAAgC,CAAS,EAE5D,EAAiB,IAAI,IAE3B,QAAW,KAAU,EACnB,GAAI,EAAO,UAAY,OAAW,CAChC,IAAM,EAAiB,EAAO,UAAU,MAAM,KAAK,CAAC,IAAS,EAAK,MAAQ,QAAQ,EAC5E,EAAS,GAAgB,MAAM,MAAM,OAAS,SAAW,EAAe,MAAM,MAAM,MAAQ,IAElG,GAAI,EAAO,QAAQ,OAAS,mBAC1B,EAAe,IAAI,EAAO,QAAS,CAAE,SAAU,EAAO,QAAQ,aAAc,QAAO,CAAC,EAK1F,QAAW,KAAQ,EACjB,GAAI,EAAK,oBAAsB,SAAU,CACvC,IAAM,EAAY,EAAe,IAAI,EAAK,gBAAgB,GAAK,CAAE,SAAU,EAAG,OAAQ,GAAI,EAEpF,EAAU,aAAW,KAAK,CAC9B,MACE,EAAU,SAAW,QAAM,MACvB,GAAG,QAAM,SAAS,EAAU,UAAU,EAAK,mBAC3C,UACN,MAAO,EAAK,MACd,CAAC,EACD,EAAS,KAAK,CAAO,GAK3B,OAAO,EAGT,SAAS,CAAmB,CAAC,EAA8B,CACzD,OAAO,EAAW,OAAO,WAAW,EAAE,KAAK,CAAC,IAAW,EAAO,aAAa,aAAa,MAvG1F,EA0Ga,EAAe,OAAS,cAA+D,CAAC,IAAM,CACzG,IAAQ,oBAAqB,KAAa,yCAClC,oBAAqB,KAAa,6CACpC,EAAS,GAAc,WAAS,IAAI,cAAc,EAAE,MAEpD,EAAe,EAAiB,IAAK,EAAQ,UAAW,EAAO,SAAS,WAAa,CAAE,CAAC,EAExF,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,WAAY,IAAM,GAClB,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,aACA,iBAAmB,IAAM,CACvB,MAAM,IAAI,eAAa,qCAAsC,CAAE,OAAQ,kBAAmB,CAAC,GAE7F,gBAAiB,CACnB,gBA3HF",
|
|
8
|
+
"debugId": "D2FCC12CE9584A4764756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var q=Object.create;var{getPrototypeOf:G,defineProperty:V,getOwnPropertyNames:v}=Object;var x=Object.prototype.hasOwnProperty;var X=(j,z,H)=>{H=j!=null?q(G(j)):{};let J=z||!j||!j.__esModule?V(H,"default",{value:j,enumerable:!0}):H;for(let K of v(j))if(!x.call(J,K))V(J,K,{get:()=>j[K],enumerable:!0});return J};var B=(j,z)=>{for(var H in z)V(j,H,{get:z[H],enumerable:!0,configurable:!0,set:(J)=>z[H]=()=>J})};var I=(j,z)=>()=>(j&&(z=j(j=0)),z);var Y=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(z,H)=>(typeof require<"u"?require:z)[H]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});var R={};B(R,{radixValidateAddress:()=>_,RadixToolbox:()=>P});import{AssetValue as S,Chain as Z,SKConfig as T,SwapKitError as C}from"@uswap/helpers";function _(j){return j.startsWith("account_rdx1")&&j.length===66}function D({networkApi:j}){return async function(H){let J=await h({address:H,networkApi:j});return E({networkApi:j,resources:J})}}async function h({address:j,networkApi:z}){let H=!0,J,K=[],L=await F(z);while(H){let Q={address:j,at_ledger_state:{state_version:L},cursor:J,limit_per_page:100},N=await z.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:Q});if(K=K.concat(N.items),N.next_cursor)J=N.next_cursor;else H=!1}return K}async function E({resources:j,networkApi:z}){let H=[],J=50,K=[];for(let L=0;L<j.length;L+=50)K.push(j.slice(L,L+50));for(let L of K){let Q=L.map((M)=>M.resource_address),N=await z.state.getEntityDetailsVaultAggregated(Q),W=new Map;for(let M of N)if(M.details!==void 0){let O=M.metadata?.items.find(($)=>$.key==="symbol"),U=O?.value.typed.type==="String"?O.value.typed.value:"?";if(M.details.type==="FungibleResource")W.set(M.address,{decimals:M.details.divisibility,symbol:U})}for(let M of L)if(M.aggregation_level==="Global"){let O=W.get(M.resource_address)||{decimals:0,symbol:"?"},U=S.from({asset:O.symbol!==Z.Radix?`${Z.Radix}.${O.symbol}-${M.resource_address}`:"XRD.XRD",value:M.amount});H.push(U)}}return H}function F(j){return j.status.getCurrent().then((z)=>z.ledger_state.state_version)}var P=async({dappConfig:j}={})=>{let{RadixDappToolkit:z}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:H}=await import("@radixdlt/babylon-gateway-api-sdk"),J=j||T.get("integrations").radix,K=z({...J,networkId:J.network?.networkId||1}),L=H.initialize(K.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:D({networkApi:L}),networkApi:L,signAndBroadcast:()=>{throw new C("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})},validateAddress:_}};var f=()=>{};f();export{_ as radixValidateAddress,P as RadixToolbox};
|
|
2
|
+
|
|
3
|
+
//# debugId=F0B7C9B297F37B4864756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/radix/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n FungibleResourcesCollectionItem,\n GatewayApiClient,\n StateEntityDetailsVaultResponseItem,\n StateEntityFungiblesPageRequest,\n StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport { AssetValue, Chain, SKConfig, type SKConfigIntegrations, SwapKitError } from \"@uswap/helpers\";\n\nexport type RadixWallet = Awaited<ReturnType<typeof RadixToolbox>>;\n\ntype RadixGetBalanceParams = { address: string; networkApi: GatewayApiClient };\n// Could not find anything sync in SDK, ask Radix team\nexport function radixValidateAddress(address: string) {\n return address.startsWith(\"account_rdx1\") && address.length === 66;\n}\n\nfunction getBalance({ networkApi }: { networkApi: GatewayApiClient }) {\n return async function getBalance(address: string) {\n const fungibleResources = await fetchFungibleResources({ address, networkApi });\n const fungibleBalances = convertResourcesToBalances({ networkApi, resources: fungibleResources });\n return fungibleBalances;\n };\n}\n\nasync function fetchFungibleResources({\n address,\n networkApi,\n}: RadixGetBalanceParams): Promise<FungibleResourcesCollectionItem[]> {\n let hasNextPage = true;\n let nextCursor: string | undefined;\n let fungibleResources: FungibleResourcesCollectionItem[] = [];\n const stateVersion = await currentStateVersion(networkApi);\n while (hasNextPage) {\n const stateEntityFungiblesPageRequest: StateEntityFungiblesPageRequest = {\n address: address,\n at_ledger_state: { state_version: stateVersion },\n cursor: nextCursor,\n limit_per_page: 100,\n };\n\n const stateEntityFungiblesPageResponse: StateEntityFungiblesPageResponse =\n await networkApi.state.innerClient.entityFungiblesPage({\n stateEntityFungiblesPageRequest: stateEntityFungiblesPageRequest,\n });\n\n fungibleResources = fungibleResources.concat(stateEntityFungiblesPageResponse.items);\n if (stateEntityFungiblesPageResponse.next_cursor) {\n nextCursor = stateEntityFungiblesPageResponse.next_cursor;\n } else {\n hasNextPage = false;\n }\n }\n return fungibleResources;\n}\n\nasync function convertResourcesToBalances({\n resources,\n networkApi,\n}: {\n resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];\n networkApi: GatewayApiClient;\n}): Promise<AssetValue[]> {\n const balances: AssetValue[] = [];\n const BATCH_SIZE = 50;\n\n // Split resources into batches of up to 50 items\n const resourceBatches: FungibleResourcesCollectionItem[][] = [];\n for (let i = 0; i < resources.length; i += BATCH_SIZE) {\n resourceBatches.push(resources.slice(i, i + BATCH_SIZE));\n }\n\n for (const batch of resourceBatches) {\n const addresses = batch.map((item) => item.resource_address);\n const response: StateEntityDetailsVaultResponseItem[] =\n await networkApi.state.getEntityDetailsVaultAggregated(addresses);\n\n const divisibilities = new Map<string, { decimals: number; symbol: string }>();\n\n for (const result of response) {\n if (result.details !== undefined) {\n const metaDataSymbol = result.metadata?.items.find((item) => item.key === \"symbol\");\n const symbol = metaDataSymbol?.value.typed.type === \"String\" ? metaDataSymbol.value.typed.value : \"?\";\n\n if (result.details.type === \"FungibleResource\") {\n divisibilities.set(result.address, { decimals: result.details.divisibility, symbol });\n }\n }\n }\n\n for (const item of batch) {\n if (item.aggregation_level === \"Global\") {\n const assetInfo = divisibilities.get(item.resource_address) || { decimals: 0, symbol: \"?\" };\n\n const balance = AssetValue.from({\n asset:\n assetInfo.symbol !== Chain.Radix\n ? `${Chain.Radix}.${assetInfo.symbol}-${item.resource_address}`\n : \"XRD.XRD\",\n value: item.amount,\n });\n balances.push(balance);\n }\n }\n }\n\n return balances;\n}\n\nfunction currentStateVersion(networkApi: GatewayApiClient) {\n return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);\n}\n\nexport const RadixToolbox = async ({ dappConfig }: { dappConfig?: SKConfigIntegrations[\"radix\"] } = {}) => {\n const { RadixDappToolkit } = await import(\"@radixdlt/radix-dapp-toolkit\");\n const { GatewayApiClient } = await import(\"@radixdlt/babylon-gateway-api-sdk\");\n const config = dappConfig || SKConfig.get(\"integrations\").radix;\n\n const radixToolkit = RadixDappToolkit({ ...config, networkId: config.network?.networkId || 1 });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n getAddress: () => \"\",\n getBalance: getBalance({ networkApi }),\n networkApi,\n signAndBroadcast: (() => {\n throw new SwapKitError(\"toolbox_radix_method_not_supported\", { method: \"signAndBroadcast\" });\n }) as (params: any) => Promise<string>,\n validateAddress: radixValidateAddress,\n };\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "qvBAOA,qBAAS,WAAY,cAAO,kBAAqC,uBAM1D,SAAS,CAAoB,CAAC,EAAiB,CACpD,OAAO,EAAQ,WAAW,cAAc,GAAK,EAAQ,SAAW,GAGlE,SAAS,CAAU,EAAG,cAAgD,CACpE,OAAO,cAAyB,CAAC,EAAiB,CAChD,IAAM,EAAoB,MAAM,EAAuB,CAAE,UAAS,YAAW,CAAC,EAE9E,OADyB,EAA2B,CAAE,aAAY,UAAW,CAAkB,CAAC,GAKpG,eAAe,CAAsB,EACnC,UACA,cACoE,CACpE,IAAI,EAAc,GACd,EACA,EAAuD,CAAC,EACtD,EAAe,MAAM,EAAoB,CAAU,EACzD,MAAO,EAAa,CAClB,IAAM,EAAmE,CACvE,QAAS,EACT,gBAAiB,CAAE,cAAe,CAAa,EAC/C,OAAQ,EACR,eAAgB,GAClB,EAEM,EACJ,MAAM,EAAW,MAAM,YAAY,oBAAoB,CACrD,gCAAiC,CACnC,CAAC,EAGH,GADA,EAAoB,EAAkB,OAAO,EAAiC,KAAK,EAC/E,EAAiC,YACnC,EAAa,EAAiC,YAE9C,OAAc,GAGlB,OAAO,EAGT,eAAe,CAA0B,EACvC,YACA,cAIwB,CACxB,IAAM,EAAyB,CAAC,EAC1B,EAAa,GAGb,EAAuD,CAAC,EAC9D,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,GAJnB,GAKjB,EAAgB,KAAK,EAAU,MAAM,EAAG,EALvB,EAKqC,CAAC,EAGzD,QAAW,KAAS,EAAiB,CACnC,IAAM,EAAY,EAAM,IAAI,CAAC,IAAS,EAAK,gBAAgB,EACrD,EACJ,MAAM,EAAW,MAAM,gCAAgC,CAAS,EAE5D,EAAiB,IAAI,IAE3B,QAAW,KAAU,EACnB,GAAI,EAAO,UAAY,OAAW,CAChC,IAAM,EAAiB,EAAO,UAAU,MAAM,KAAK,CAAC,IAAS,EAAK,MAAQ,QAAQ,EAC5E,EAAS,GAAgB,MAAM,MAAM,OAAS,SAAW,EAAe,MAAM,MAAM,MAAQ,IAElG,GAAI,EAAO,QAAQ,OAAS,mBAC1B,EAAe,IAAI,EAAO,QAAS,CAAE,SAAU,EAAO,QAAQ,aAAc,QAAO,CAAC,EAK1F,QAAW,KAAQ,EACjB,GAAI,EAAK,oBAAsB,SAAU,CACvC,IAAM,EAAY,EAAe,IAAI,EAAK,gBAAgB,GAAK,CAAE,SAAU,EAAG,OAAQ,GAAI,EAEpF,EAAU,EAAW,KAAK,CAC9B,MACE,EAAU,SAAW,EAAM,MACvB,GAAG,EAAM,SAAS,EAAU,UAAU,EAAK,mBAC3C,UACN,MAAO,EAAK,MACd,CAAC,EACD,EAAS,KAAK,CAAO,GAK3B,OAAO,EAGT,SAAS,CAAmB,CAAC,EAA8B,CACzD,OAAO,EAAW,OAAO,WAAW,EAAE,KAAK,CAAC,IAAW,EAAO,aAAa,aAAa,MAG7E,EAAe,OAAS,cAA+D,CAAC,IAAM,CACzG,IAAQ,oBAAqB,KAAa,yCAClC,oBAAqB,KAAa,6CACpC,EAAS,GAAc,EAAS,IAAI,cAAc,EAAE,MAEpD,EAAe,EAAiB,IAAK,EAAQ,UAAW,EAAO,SAAS,WAAa,CAAE,CAAC,EAExF,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,WAAY,IAAM,GAClB,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,aACA,iBAAmB,IAAM,CACvB,MAAM,IAAI,EAAa,qCAAsC,CAAE,OAAQ,kBAAmB,CAAC,GAE7F,gBAAiB,CACnB",
|
|
8
|
+
"debugId": "F0B7C9B297F37B4864756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var f=Object.create;var{getPrototypeOf:R,defineProperty:Z,getOwnPropertyNames:W,getOwnPropertyDescriptor:D}=Object,H=Object.prototype.hasOwnProperty;var u=(j,q,z)=>{z=j!=null?f(R(j)):{};let y=q||!j||!j.__esModule?Z(z,"default",{value:j,enumerable:!0}):z;for(let X of W(j))if(!H.call(y,X))Z(y,X,{get:()=>j[X],enumerable:!0});return y},N=new WeakMap,b=(j)=>{var q=N.get(j),z;if(q)return q;if(q=Z({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")W(j).map((y)=>!H.call(q,y)&&Z(q,y,{get:()=>j[y],enumerable:!(z=D(j,y))||z.enumerable}));return N.set(j,q),q};var K=(j,q)=>{for(var z in q)Z(j,z,{get:q[z],enumerable:!0,configurable:!0,set:(y)=>q[z]=()=>y})};var A=(j,q)=>()=>(j&&(q=j(j=0)),q);var E={};K(E,{rippleValidateAddress:()=>v,hashes:()=>_.hashes,getRippleToolbox:()=>w});module.exports=b(E);function O(j){let q=Q.Wallet.fromMnemonic(j);return{getAddress:()=>Promise.resolve(q.address),signTransaction:(z)=>Promise.resolve(q.sign(z))}}function v(j){return Q.isValidAddress(j)}var k,Q,_,T,w=async(j={})=>{let q="signer"in j&&j.signer?j.signer:("phrase"in j)&&j.phrase?O(j.phrase):void 0,z=await k.getRPCUrl(k.Chain.Ripple);if(!z)throw new k.SwapKitError({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:k.Chain.Ripple}});let y=new Q.Client(z);await y.connect();let X=()=>{if(!q)throw new k.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return q.getAddress()},P=async(G)=>{let M=G||await X(),{baseDecimal:J}=k.getChainConfig(k.Chain.Ripple);try{let $=(await y.request({account:M,command:"account_info"})).result.account_data.Balance;return[k.AssetValue.from({chain:k.Chain.Ripple,fromBaseDecimal:J,value:$})]}catch(Y){if(Y.data.error_code===T.ACCOUNT_NOT_FOUND)return[k.AssetValue.from({chain:k.Chain.Ripple,value:0})];throw new k.SwapKitError("toolbox_ripple_get_balance_error",{info:{address:M,error:Y}})}},U=async()=>{let M=(await y.request({command:"fee"})).result.drops.open_ledger_fee,{baseDecimal:J}=k.getChainConfig(k.Chain.Ripple);return k.AssetValue.from({chain:k.Chain.Ripple,fromBaseDecimal:J,value:k.SwapKitNumber.fromBigInt(BigInt(M),J)})},B=async({assetValue:G,recipient:M,memo:J,sender:Y})=>{if(!v(M))throw new k.SwapKitError({errorKey:"core_transaction_invalid_recipient_address"});let $=Y||await X();if(!G.isGasAsset||G.chain!==k.Chain.Ripple)throw new k.SwapKitError({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:G.toString()}});let L={Account:$,Amount:Q.xrpToDrops(G.getValue("string")),Destination:M,TransactionType:"Payment"};if(J)L.Memos=[{Memo:{MemoData:Buffer.from(J).toString("hex")}}];return await y.autofill(L)},F=(G)=>{if(!q)throw new k.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return q.signTransaction(G)},I=async(G)=>{let J=(await y.submitAndWait(G)).result;if(J.validated)return J.hash;throw new k.SwapKitError({errorKey:"toolbox_ripple_broadcast_error",info:{chain:k.Chain.Ripple}})};return{broadcastTransaction:I,createSigner:O,createTransaction:B,disconnect:()=>y.disconnect(),estimateTransactionFee:U,getAddress:X,getBalance:P,signer:q,signTransaction:F,transfer:async(G)=>{if(!q)throw new k.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});let M=await q.getAddress(),J=await B({...G,sender:M}),Y=await F(J);return I(Y.tx_blob)},validateAddress:v}};var S=A(()=>{k=require("@uswap/helpers"),Q=require("xrpl"),_=require("xrpl"),T={ACCOUNT_NOT_FOUND:19}});S();
|
|
2
|
+
|
|
3
|
+
//# debugId=AD4ABCF34873E07864756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/ripple/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import {\n AssetValue,\n Chain,\n type ChainSigner,\n type GenericTransferParams,\n getChainConfig,\n getRPCUrl,\n SwapKitError,\n SwapKitNumber,\n} from \"@uswap/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, isValidAddress, type Payment, Wallet, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\nexport { hashes, type Transaction } from \"xrpl\";\n\nconst RIPPLE_ERROR_CODES = { ACCOUNT_NOT_FOUND: 19 } as const;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase?: string }\n | { signer?: ChainSigner<Transaction, { tx_blob: string; hash: string }> };\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = await getRPCUrl(Chain.Ripple);\n if (!rpcUrl) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_rpc_not_configured\", info: { chain: Chain.Ripple } });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n const { baseDecimal } = getChainConfig(Chain.Ripple);\n\n try {\n const accountInfo = await client.request({ account: addr, command: \"account_info\" });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [AssetValue.from({ chain: Chain.Ripple, fromBaseDecimal: baseDecimal, value: balance })];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === RIPPLE_ERROR_CODES.ACCOUNT_NOT_FOUND) {\n return [AssetValue.from({ chain: Chain.Ripple, value: 0 })];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", { info: { address: addr, error } });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n const { baseDecimal } = getChainConfig(Chain.Ripple);\n\n return AssetValue.from({\n chain: Chain.Ripple,\n fromBaseDecimal: baseDecimal,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), baseDecimal),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: {\n assetValue: AssetValue;\n recipient: string;\n sender?: string;\n memo?: string;\n }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n TransactionType: \"Payment\",\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n const result = submitResult.result;\n\n if (result.validated) {\n return result.hash;\n }\n\n throw new SwapKitError({ errorKey: \"toolbox_ripple_broadcast_error\", info: { chain: Chain.Ripple } });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n const disconnect = () => client.disconnect();\n\n return {\n broadcastTransaction,\n createSigner, // Expose the helper\n createTransaction,\n disconnect,\n estimateTransactionFee,\n // Core methods\n getAddress,\n getBalance,\n // Signer related\n signer, // Expose the signer instance if created/provided\n signTransaction,\n transfer,\n validateAddress: rippleValidateAddress,\n };\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "AD4ABCF34873E07864756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var P=Object.create;var{getPrototypeOf:U,defineProperty:$,getOwnPropertyNames:f}=Object;var R=Object.prototype.hasOwnProperty;var c=(j,k,q)=>{q=j!=null?P(U(j)):{};let z=k||!j||!j.__esModule?$(q,"default",{value:j,enumerable:!0}):q;for(let X of f(j))if(!R.call(z,X))$(z,X,{get:()=>j[X],enumerable:!0});return z};var D=(j,k)=>{for(var q in k)$(j,q,{get:k[q],enumerable:!0,configurable:!0,set:(z)=>k[q]=()=>z})};var b=(j,k)=>()=>(j&&(k=j(j=0)),k);var d=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(k,q)=>(typeof require<"u"?require:k)[q]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});var h={};D(h,{rippleValidateAddress:()=>B,hashes:()=>u,getRippleToolbox:()=>V});import{AssetValue as v,Chain as M,getChainConfig as W,getRPCUrl as K,SwapKitError as Q,SwapKitNumber as A}from"@uswap/helpers";import{Client as T,isValidAddress as w,Wallet as E,xrpToDrops as S}from"xrpl";import{hashes as u}from"xrpl";function H(j){let k=E.fromMnemonic(j);return{getAddress:()=>Promise.resolve(k.address),signTransaction:(q)=>Promise.resolve(k.sign(q))}}function B(j){return w(j)}var x,V=async(j={})=>{let k="signer"in j&&j.signer?j.signer:("phrase"in j)&&j.phrase?H(j.phrase):void 0,q=await K(M.Ripple);if(!q)throw new Q({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:M.Ripple}});let z=new T(q);await z.connect();let X=()=>{if(!k)throw new Q({errorKey:"toolbox_ripple_signer_not_found"});return k.getAddress()},O=async(y)=>{let J=y||await X(),{baseDecimal:G}=W(M.Ripple);try{let Z=(await z.request({account:J,command:"account_info"})).result.account_data.Balance;return[v.from({chain:M.Ripple,fromBaseDecimal:G,value:Z})]}catch(Y){if(Y.data.error_code===x.ACCOUNT_NOT_FOUND)return[v.from({chain:M.Ripple,value:0})];throw new Q("toolbox_ripple_get_balance_error",{info:{address:J,error:Y}})}},_=async()=>{let J=(await z.request({command:"fee"})).result.drops.open_ledger_fee,{baseDecimal:G}=W(M.Ripple);return v.from({chain:M.Ripple,fromBaseDecimal:G,value:A.fromBigInt(BigInt(J),G)})},F=async({assetValue:y,recipient:J,memo:G,sender:Y})=>{if(!B(J))throw new Q({errorKey:"core_transaction_invalid_recipient_address"});let Z=Y||await X();if(!y.isGasAsset||y.chain!==M.Ripple)throw new Q({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:y.toString()}});let N={Account:Z,Amount:S(y.getValue("string")),Destination:J,TransactionType:"Payment"};if(G)N.Memos=[{Memo:{MemoData:Buffer.from(G).toString("hex")}}];return await z.autofill(N)},I=(y)=>{if(!k)throw new Q({errorKey:"toolbox_ripple_signer_not_found"});return k.signTransaction(y)},L=async(y)=>{let G=(await z.submitAndWait(y)).result;if(G.validated)return G.hash;throw new Q({errorKey:"toolbox_ripple_broadcast_error",info:{chain:M.Ripple}})};return{broadcastTransaction:L,createSigner:H,createTransaction:F,disconnect:()=>z.disconnect(),estimateTransactionFee:_,getAddress:X,getBalance:O,signer:k,signTransaction:I,transfer:async(y)=>{if(!k)throw new Q({errorKey:"toolbox_ripple_signer_not_found"});let J=await k.getAddress(),G=await F({...y,sender:J}),Y=await I(G);return L(Y.tx_blob)},validateAddress:B}};var C=b(()=>{x={ACCOUNT_NOT_FOUND:19}});C();export{B as rippleValidateAddress,u as hashes,V as getRippleToolbox};
|
|
2
|
+
|
|
3
|
+
//# debugId=13590117061B06FC64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/ripple/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import {\n AssetValue,\n Chain,\n type ChainSigner,\n type GenericTransferParams,\n getChainConfig,\n getRPCUrl,\n SwapKitError,\n SwapKitNumber,\n} from \"@uswap/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, isValidAddress, type Payment, Wallet, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\nexport { hashes, type Transaction } from \"xrpl\";\n\nconst RIPPLE_ERROR_CODES = { ACCOUNT_NOT_FOUND: 19 } as const;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase?: string }\n | { signer?: ChainSigner<Transaction, { tx_blob: string; hash: string }> };\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = await getRPCUrl(Chain.Ripple);\n if (!rpcUrl) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_rpc_not_configured\", info: { chain: Chain.Ripple } });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n const { baseDecimal } = getChainConfig(Chain.Ripple);\n\n try {\n const accountInfo = await client.request({ account: addr, command: \"account_info\" });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [AssetValue.from({ chain: Chain.Ripple, fromBaseDecimal: baseDecimal, value: balance })];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === RIPPLE_ERROR_CODES.ACCOUNT_NOT_FOUND) {\n return [AssetValue.from({ chain: Chain.Ripple, value: 0 })];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", { info: { address: addr, error } });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n const { baseDecimal } = getChainConfig(Chain.Ripple);\n\n return AssetValue.from({\n chain: Chain.Ripple,\n fromBaseDecimal: baseDecimal,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), baseDecimal),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: {\n assetValue: AssetValue;\n recipient: string;\n sender?: string;\n memo?: string;\n }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n TransactionType: \"Payment\",\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n const result = submitResult.result;\n\n if (result.validated) {\n return result.hash;\n }\n\n throw new SwapKitError({ errorKey: \"toolbox_ripple_broadcast_error\", info: { chain: Chain.Ripple } });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n const disconnect = () => client.disconnect();\n\n return {\n broadcastTransaction,\n createSigner, // Expose the helper\n createTransaction,\n disconnect,\n estimateTransactionFee,\n // Core methods\n getAddress,\n getBalance,\n // Signer related\n signer, // Expose the signer instance if created/provided\n signTransaction,\n transfer,\n validateAddress: rippleValidateAddress,\n };\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "13590117061B06FC64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var A=Object.create;var{getPrototypeOf:p,defineProperty:L,getOwnPropertyNames:h,getOwnPropertyDescriptor:C}=Object,k=Object.prototype.hasOwnProperty;var O=(j,q,w)=>{w=j!=null?A(p(j)):{};let z=q||!j||!j.__esModule?L(w,"default",{value:j,enumerable:!0}):w;for(let F of h(j))if(!k.call(z,F))L(z,F,{get:()=>j[F],enumerable:!0});return z},D=new WeakMap,P=(j)=>{var q=D.get(j),w;if(q)return q;if(q=L({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")h(j).map((z)=>!k.call(q,z)&&L(q,z,{get:()=>j[z],enumerable:!(w=C(j,z))||w.enumerable}));return D.set(j,q),q};var l=(j,q)=>{for(var w in q)L(j,w,{get:q[w],enumerable:!0,configurable:!0,set:(z)=>q[w]=()=>z})};var T=(j,q)=>()=>(j&&(q=j(j=0)),q);async function K(j){let q=B.AssetValue.from({address:j,chain:B.Chain.Solana});if(q.symbol!=="UNKNOWN")return{decimals:q.decimal||0,id:j,logoURI:q.getIconUrl(),name:q.symbol,symbol:q.ticker};let w=`https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(j)}`;try{let z=await fetch(w);if(!z.ok)return null;let F=await z.json();if(!Array.isArray(F)||F.length===0)return null;return F.find((G)=>G.id===j)||null}catch{return null}}async function u(j){let q=await X(),{PublicKey:w}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:z}=await import("@solana/spl-token"),F=new w(j),J=[],G=await q.getBalance(F);if(G>0){let{baseDecimal:Q}=B.getChainConfig(B.Chain.Solana);J.push(B.AssetValue.from({chain:B.Chain.Solana,fromBaseDecimal:Q,value:G}))}let N=await q.getParsedTokenAccountsByOwner(F,{programId:z});for(let{account:Q}of N.value){let R=Q.data.parsed.info,U=R.mint,Y=R.tokenAmount.amount;if(Number(Y)===0)continue;let _=await K(U),$=_?.symbol||"UNKNOWN",Z=_?.decimals||R.tokenAmount.decimals;J.push(B.AssetValue.from({asset:`${B.Chain.Solana}.${$}-${U}`,fromBaseDecimal:Z,value:Y}))}return J}async function x(){let{PublicKey:j}=await import("@solana/web3.js");return(q)=>{try{let w=new j(q);return j.isOnCurve(w.toBytes())}catch{return!1}}}async function m(j){let q=j&&"index"in j?j.index||0:0,w=B.derivationPathToString(j&&"derivationPath"in j&&j.derivationPath?j.derivationPath:B.updateDerivationPath(B.NetworkDerivationPath[B.Chain.Solana],{index:q})),z=await W.match(j).with({phrase:W.P.string},({phrase:G})=>M({derivationPath:w,phrase:G})).with({signer:W.P.any},({signer:G})=>G).otherwise(()=>{return});function F(){return z?.publicKey?v(z.publicKey):""}function J(G){let N=G||F();if(!N)throw new B.SwapKitError("core_wallet_connection_not_found");return u(N)}return{broadcastTransaction:I(X),createKeysForPath:M,createTransaction:H(X),createTransactionFromInstructions:a,estimateTransactionFee:d(X),getAddress:F,getAddressFromPubKey:v,getAddressValidator:x,getBalance:J,getConnection:X,getPubkeyFromAddress:S,signTransaction:r(X,z),transfer:o(X,z)}}function d(j){return async({recipient:q,assetValue:w,memo:z,isProgramDerivedAddress:F,sender:J})=>{let G=await j(),Q=(await H(j)({assetValue:w,isProgramDerivedAddress:F,memo:z,recipient:q,sender:J})).compileMessage(),R=await G.getFeeForMessage(Q);if(R.value===null)throw new B.SwapKitError("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");let{baseDecimal:U}=B.getChainConfig(B.Chain.Solana);return B.AssetValue.from({chain:B.Chain.Solana,fromBaseDecimal:U,value:R.value})}}async function X(){let{Connection:j}=await import("@solana/web3.js"),q=await B.getRPCUrl(B.Chain.Solana);return new j(q,"confirmed")}function g(j){return async({assetValue:q,recipient:w,sender:z,isProgramDerivedAddress:F})=>{let J=await j(),G=await S(z);if(q.isGasAsset){let{Transaction:N,SystemProgram:Q,PublicKey:R}=await import("@solana/web3.js");return new N().add(Q.transfer({fromPubkey:G,lamports:q.getBaseValue("number"),toPubkey:new R(w)}))}if(q.address)return c({amount:q.getBaseValue("number"),connection:J,decimals:q.decimal,from:G,isProgramDerivedAddress:F,recipient:w,tokenAddress:q.address});return}}async function c({tokenAddress:j,recipient:q,from:w,connection:z,amount:F,decimals:J,isProgramDerivedAddress:G}){let{getAssociatedTokenAddress:N,getAccount:Q,createAssociatedTokenAccountInstruction:R,createTransferCheckedInstruction:U}=await import("@solana/spl-token"),{Transaction:Y,PublicKey:_}=await import("@solana/web3.js"),$=new Y,Z=new _(j),y=await N(Z,w),f=new _(q),E=await N(Z,f,G),V=!1;try{await Q(z,E),V=!0}catch{}if(!V)$.add(R(w,E,f,Z));return $.add(U(y,Z,E,w,F,J)),$}function H(j){return async({recipient:q,assetValue:w,memo:z,isProgramDerivedAddress:F,sender:J})=>{let{createMemoInstruction:G}=await import("@solana/spl-memo"),N=await S(J),Q=await x();if(!(F||Q(q)))throw new B.SwapKitError("core_transaction_invalid_recipient_address");let R=await j(),U=await g(j)({assetValue:w,isProgramDerivedAddress:F,recipient:q,sender:J});if(!U)throw new B.SwapKitError("core_transaction_invalid_sender_address");if(z)U.add(G(z));let Y=await R.getLatestBlockhash();return U.recentBlockhash=Y.blockhash,U.feePayer=N,U}}async function a({instructions:j}){let{Transaction:q}=await import("@solana/web3.js"),w=new q().add(...j);if(!w)throw new B.SwapKitError("core_transaction_invalid_sender_address");return w}function o(j,q){return async({recipient:w,assetValue:z,memo:F,isProgramDerivedAddress:J})=>{if(!q)throw new B.SwapKitError("core_transaction_invalid_sender_address");let G=q.publicKey?.toString()??(await q.connect()).publicKey.toString(),N=await H(j)({assetValue:z,isProgramDerivedAddress:J,memo:F,recipient:w,sender:G});if("signTransaction"in q){let Q=await q.signTransaction(N);return I(j)(Q)}return N.sign(q),I(j)(N)}}function I(j){return async(q)=>{return(await j()).sendRawTransaction(q.serialize())}}function r(j,q){return async(w)=>{let{VersionedTransaction:z}=await import("@solana/web3.js");if(!q)throw new B.SwapKitError("toolbox_solana_no_signer");if(!(w instanceof z)){let J=await(await j()).getLatestBlockhash();w.recentBlockhash=J.blockhash,w.feePayer=q.publicKey||void 0}if("connect"in q)return await q.signTransaction(w);return await w.sign([q]),w}}async function M({phrase:j,derivationPath:q=B.DerivationPath.SOL}){let{HDKey:w}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:z}=await import("@scure/bip39"),{Keypair:F}=await import("@solana/web3.js"),J=z(j),G=w.fromMasterSeed(J);return F.fromSeed(G.derive(q,!0).privateKey)}function v(j){return j.toString()}async function S(j){let{PublicKey:q}=await import("@solana/web3.js");return new q(j)}var B,W;var b=T(()=>{B=require("@uswap/helpers"),W=require("ts-pattern")});var s={};l(s,{getSolanaToolbox:()=>m,getSolanaAddressValidator:()=>x,fetchTokenMetaData:()=>K,createKeysForPath:()=>M});module.exports=P(s);var t=T(()=>{b()});t();
|
|
2
|
+
|
|
3
|
+
//# debugId=05633CD75DA19A5D64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/solana/toolbox.ts", "../src/solana/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n Connection,\n PublicKey,\n Signer,\n Transaction,\n TransactionInstruction,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n AssetValue,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n type GenericCreateTransactionParams,\n getChainConfig,\n getRPCUrl,\n NetworkDerivationPath,\n SwapKitError,\n updateDerivationPath,\n} from \"@uswap/helpers\";\nimport { match, P } from \"ts-pattern\";\nimport type { SolanaCreateTransactionParams, SolanaProvider, SolanaTransferParams } from \"./index\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\ntype TokenMetadata = {\n name: string;\n symbol: string;\n decimals: number;\n logoURI?: string;\n tags?: string[];\n daily_volume?: number;\n id: string; // mint address\n};\n\nexport async function fetchTokenMetaData(mintAddress: string): Promise<TokenMetadata | null> {\n const assetValue = AssetValue.from({ address: mintAddress, chain: Chain.Solana });\n if (assetValue.symbol !== \"UNKNOWN\") {\n return {\n decimals: assetValue.decimal || 0,\n id: mintAddress,\n logoURI: assetValue.getIconUrl(),\n name: assetValue.symbol,\n symbol: assetValue.ticker,\n };\n }\n\n const url = `https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(mintAddress)}`;\n\n try {\n const res = await fetch(url);\n if (!res.ok) return null;\n\n const arr = (await res.json()) as TokenMetadata[];\n if (!Array.isArray(arr) || arr.length === 0) return null;\n\n const exact = arr.find((t) => t.id === mintAddress);\n return exact || null;\n } catch {\n return null;\n }\n}\n\nasync function getSolanaBalance(address: string) {\n const connection = await getConnection();\n const { PublicKey } = await import(\"@solana/web3.js\");\n const { TOKEN_PROGRAM_ID } = await import(\"@solana/spl-token\");\n const publicKey = new PublicKey(address);\n\n const balances: AssetValue[] = [];\n\n // Get SOL balance\n const solBalance = await connection.getBalance(publicKey);\n if (solBalance > 0) {\n const { baseDecimal } = getChainConfig(Chain.Solana);\n balances.push(AssetValue.from({ chain: Chain.Solana, fromBaseDecimal: baseDecimal, value: solBalance }));\n }\n\n // Get token balances\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(publicKey, { programId: TOKEN_PROGRAM_ID });\n\n for (const { account } of tokenAccounts.value) {\n const tokenInfo = account.data.parsed.info;\n const mintAddress = tokenInfo.mint;\n const amount = tokenInfo.tokenAmount.amount;\n\n if (Number(amount) === 0) continue;\n\n const metadata = await fetchTokenMetaData(mintAddress);\n const ticker = metadata?.symbol || \"UNKNOWN\";\n const decimals = metadata?.decimals || tokenInfo.tokenAmount.decimals;\n\n balances.push(\n AssetValue.from({ asset: `${Chain.Solana}.${ticker}-${mintAddress}`, fromBaseDecimal: decimals, value: amount }),\n );\n }\n\n return balances;\n}\n\nexport async function getSolanaAddressValidator() {\n const { PublicKey } = await import(\"@solana/web3.js\");\n\n return (address: string) => {\n try {\n const pubkey = new PublicKey(address);\n return PublicKey.isOnCurve(pubkey.toBytes());\n } catch {\n return false;\n }\n };\n}\n\nexport async function getSolanaToolbox(\n toolboxParams?: { signer?: SolanaSigner } | { phrase?: string; index?: number; derivationPath?: DerivationPathArray },\n) {\n const index = toolboxParams && \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n const derivationPath = derivationPathToString(\n toolboxParams && \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Solana], { index }),\n );\n\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, ({ phrase }) => createKeysForPath({ derivationPath, phrase }))\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n function getAddress() {\n return signer?.publicKey ? getAddressFromPubKey(signer.publicKey) : \"\";\n }\n\n function getBalance(addressParam?: string) {\n const address = addressParam || getAddress();\n if (!address) throw new SwapKitError(\"core_wallet_connection_not_found\");\n return getSolanaBalance(address);\n }\n\n return {\n broadcastTransaction: broadcastTransaction(getConnection),\n createKeysForPath,\n createTransaction: createTransaction(getConnection),\n createTransactionFromInstructions,\n estimateTransactionFee: estimateTransactionFee(getConnection),\n getAddress,\n getAddressFromPubKey,\n getAddressValidator: getSolanaAddressValidator,\n getBalance,\n getConnection,\n getPubkeyFromAddress,\n signTransaction: signTransaction(getConnection, signer),\n transfer: transfer(getConnection, signer),\n };\n}\n\nfunction estimateTransactionFee(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: Omit<GenericCreateTransactionParams, \"feeRate\"> & { isProgramDerivedAddress?: boolean }) => {\n const connection = await getConnection();\n\n const transaction = await createTransaction(getConnection)({\n assetValue,\n isProgramDerivedAddress,\n memo,\n recipient,\n sender,\n });\n\n const message = transaction.compileMessage();\n const feeInLamports = await connection.getFeeForMessage(message);\n\n if (feeInLamports.value === null) {\n throw new SwapKitError(\"toolbox_solana_fee_estimation_failed\", \"Could not estimate Solana fee.\");\n }\n\n const { baseDecimal } = getChainConfig(Chain.Solana);\n\n return AssetValue.from({ chain: Chain.Solana, fromBaseDecimal: baseDecimal, value: feeInLamports.value });\n };\n}\n\nasync function getConnection() {\n const { Connection } = await import(\"@solana/web3.js\");\n const rpcUrl = await getRPCUrl(Chain.Solana);\n return new Connection(rpcUrl, \"confirmed\");\n}\n\nfunction createAssetTransaction(getConnection: () => Promise<Connection>) {\n return async ({ assetValue, recipient, sender, isProgramDerivedAddress }: SolanaCreateTransactionParams) => {\n const connection = await getConnection();\n const fromPubkey = await getPubkeyFromAddress(sender);\n\n if (assetValue.isGasAsset) {\n const { Transaction, SystemProgram, PublicKey } = await import(\"@solana/web3.js\");\n\n return new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: fromPubkey,\n lamports: assetValue.getBaseValue(\"number\"),\n toPubkey: new PublicKey(recipient),\n }),\n );\n }\n\n if (assetValue.address) {\n return createSolanaTokenTransaction({\n amount: assetValue.getBaseValue(\"number\"),\n connection,\n decimals: assetValue.decimal as number,\n from: fromPubkey,\n isProgramDerivedAddress,\n recipient,\n tokenAddress: assetValue.address,\n });\n }\n\n return undefined;\n };\n}\n\nasync function createSolanaTokenTransaction({\n tokenAddress,\n recipient,\n from,\n connection,\n amount,\n decimals,\n isProgramDerivedAddress,\n}: {\n tokenAddress: string;\n recipient: string;\n from: PublicKey;\n connection: Connection;\n amount: number;\n decimals: number;\n isProgramDerivedAddress?: boolean;\n}) {\n const {\n getAssociatedTokenAddress,\n getAccount,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n } = await import(\"@solana/spl-token\");\n const { Transaction, PublicKey } = await import(\"@solana/web3.js\");\n\n const transaction = new Transaction();\n const tokenPublicKey = new PublicKey(tokenAddress);\n const fromSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, from);\n\n const recipientPublicKey = new PublicKey(recipient);\n const recipientSPLAddress = await getAssociatedTokenAddress(\n tokenPublicKey,\n recipientPublicKey,\n isProgramDerivedAddress,\n );\n\n let recipientAccountExists = false;\n try {\n await getAccount(connection, recipientSPLAddress);\n recipientAccountExists = true;\n } catch {\n // Recipient's associated token account doesn't exist\n }\n\n if (!recipientAccountExists) {\n transaction.add(\n createAssociatedTokenAccountInstruction(from, recipientSPLAddress, recipientPublicKey, tokenPublicKey),\n );\n }\n\n transaction.add(\n createTransferCheckedInstruction(fromSPLAddress, tokenPublicKey, recipientSPLAddress, from, amount, decimals),\n );\n\n return transaction;\n}\n\nfunction createTransaction(getConnection: () => Promise<Connection>) {\n return async ({ recipient, assetValue, memo, isProgramDerivedAddress, sender }: SolanaCreateTransactionParams) => {\n const { createMemoInstruction } = await import(\"@solana/spl-memo\");\n\n const fromPubkey = await getPubkeyFromAddress(sender);\n const validateAddress = await getSolanaAddressValidator();\n\n if (!(isProgramDerivedAddress || validateAddress(recipient))) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const connection = await getConnection();\n const transaction = await createAssetTransaction(getConnection)({\n assetValue,\n isProgramDerivedAddress,\n recipient,\n sender,\n });\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n if (memo) transaction.add(createMemoInstruction(memo));\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = fromPubkey;\n\n return transaction;\n };\n}\n\nasync function createTransactionFromInstructions({\n instructions,\n}: {\n instructions: TransactionInstruction[];\n isProgramDerivedAddress?: boolean;\n}) {\n const { Transaction } = await import(\"@solana/web3.js\");\n const transaction = new Transaction().add(...instructions);\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n return transaction;\n}\n\nfunction transfer(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async ({ recipient, assetValue, memo, isProgramDerivedAddress }: SolanaTransferParams) => {\n if (!signer) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n const sender = signer.publicKey?.toString() ?? (await (signer as SolanaProvider).connect()).publicKey.toString();\n\n const transaction = await createTransaction(getConnection)({\n assetValue,\n isProgramDerivedAddress,\n memo,\n recipient,\n sender,\n });\n\n if (\"signTransaction\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return broadcastTransaction(getConnection)(signedTransaction);\n }\n\n transaction.sign(signer);\n\n return broadcastTransaction(getConnection)(transaction);\n };\n}\n\nfunction broadcastTransaction(getConnection: () => Promise<Connection>) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const connection = await getConnection();\n return connection.sendRawTransaction(transaction.serialize());\n };\n}\n\nfunction signTransaction(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const { VersionedTransaction } = await import(\"@solana/web3.js\");\n if (!signer) {\n throw new SwapKitError(\"toolbox_solana_no_signer\");\n }\n\n if (!(transaction instanceof VersionedTransaction)) {\n const connection = await getConnection();\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = signer.publicKey || undefined;\n }\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return signedTransaction;\n }\n\n await transaction.sign([signer] as Signer & Signer[]);\n return transaction;\n };\n}\n\nexport async function createKeysForPath({\n phrase,\n derivationPath = DerivationPath.SOL,\n}: {\n phrase: string;\n derivationPath?: string;\n}) {\n const { HDKey } = await import(\"micro-key-producer/slip10.js\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n const { Keypair } = await import(\"@solana/web3.js\");\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n\n return Keypair.fromSeed(hdKey.derive(derivationPath, true).privateKey);\n}\n\nfunction getAddressFromPubKey(publicKey: PublicKey) {\n return publicKey.toString();\n}\n\nasync function getPubkeyFromAddress(address: string) {\n const { PublicKey } = await import(\"@solana/web3.js\");\n return new PublicKey(address);\n}\n",
|
|
6
|
+
"import type { PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport type { GenericCreateTransactionParams, GenericTransferParams } from \"@uswap/helpers\";\nimport type { getSolanaToolbox } from \"./toolbox\";\n\n// type DisplayEncoding = \"utf8\" | \"hex\";\n\n// type PhantomRequestMethod =\n// | \"connect\"\n// | \"disconnect\"\n// | \"signAndSendTransaction\"\n// | \"signAndSendTransactionV0\"\n// | \"signAndSendTransactionV0WithLookupTable\"\n// | \"signTransaction\"\n// | \"signAllTransactions\"\n// | \"signMessage\";\n\ninterface ConnectOpts {\n onlyIfTrusted: boolean;\n}\n\nexport * from \"./toolbox\";\n\nexport type SolanaWallet = Awaited<ReturnType<typeof getSolanaToolbox>>;\n\nexport interface SolanaProvider {\n connect: (opts?: Partial<ConnectOpts>) => Promise<{ publicKey: PublicKey }>;\n disconnect: () => Promise<void>;\n publicKey: PublicKey | null;\n signTransaction: <T extends Transaction | VersionedTransaction = Transaction>(transaction: T) => Promise<T>;\n}\n\nexport type SolanaCreateTransactionParams = Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n};\n\nexport type SolanaTransferParams = Omit<GenericTransferParams, \"feeRate\"> & { isProgramDerivedAddress?: boolean };\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "05633CD75DA19A5D64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var p=Object.create;var{getPrototypeOf:C,defineProperty:M,getOwnPropertyNames:P}=Object;var l=Object.prototype.hasOwnProperty;var N=(j,q,w)=>{w=j!=null?p(C(j)):{};let z=q||!j||!j.__esModule?M(w,"default",{value:j,enumerable:!0}):w;for(let B of P(j))if(!l.call(z,B))M(z,B,{get:()=>j[B],enumerable:!0});return z};var u=(j,q)=>{for(var w in q)M(j,w,{get:q[w],enumerable:!0,configurable:!0,set:(z)=>q[w]=()=>z})};var k=(j,q)=>()=>(j&&(q=j(j=0)),q);var O=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(q,w)=>(typeof require<"u"?require:q)[w]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});import{AssetValue as E,Chain as X,DerivationPath as m,derivationPathToString as d,getChainConfig as K,getRPCUrl as g,NetworkDerivationPath as c,SwapKitError as Z,updateDerivationPath as a}from"@uswap/helpers";import{match as o,P as T}from"ts-pattern";async function b(j){let q=E.from({address:j,chain:X.Solana});if(q.symbol!=="UNKNOWN")return{decimals:q.decimal||0,id:j,logoURI:q.getIconUrl(),name:q.symbol,symbol:q.ticker};let w=`https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(j)}`;try{let z=await fetch(w);if(!z.ok)return null;let B=await z.json();if(!Array.isArray(B)||B.length===0)return null;return B.find((F)=>F.id===j)||null}catch{return null}}async function r(j){let q=await Y(),{PublicKey:w}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:z}=await import("@solana/spl-token"),B=new w(j),G=[],F=await q.getBalance(B);if(F>0){let{baseDecimal:Q}=K(X.Solana);G.push(E.from({chain:X.Solana,fromBaseDecimal:Q,value:F}))}let J=await q.getParsedTokenAccountsByOwner(B,{programId:z});for(let{account:Q}of J.value){let R=Q.data.parsed.info,U=R.mint,_=R.tokenAmount.amount;if(Number(_)===0)continue;let L=await b(U),W=L?.symbol||"UNKNOWN",$=L?.decimals||R.tokenAmount.decimals;G.push(E.from({asset:`${X.Solana}.${W}-${U}`,fromBaseDecimal:$,value:_}))}return G}async function S(){let{PublicKey:j}=await import("@solana/web3.js");return(q)=>{try{let w=new j(q);return j.isOnCurve(w.toBytes())}catch{return!1}}}async function s(j){let q=j&&"index"in j?j.index||0:0,w=d(j&&"derivationPath"in j&&j.derivationPath?j.derivationPath:a(c[X.Solana],{index:q})),z=await o(j).with({phrase:T.string},({phrase:F})=>H({derivationPath:w,phrase:F})).with({signer:T.any},({signer:F})=>F).otherwise(()=>{return});function B(){return z?.publicKey?v(z.publicKey):""}function G(F){let J=F||B();if(!J)throw new Z("core_wallet_connection_not_found");return r(J)}return{broadcastTransaction:x(Y),createKeysForPath:H,createTransaction:f(Y),createTransactionFromInstructions:n,estimateTransactionFee:t(Y),getAddress:B,getAddressFromPubKey:v,getAddressValidator:S,getBalance:G,getConnection:Y,getPubkeyFromAddress:V,signTransaction:qj(Y,z),transfer:jj(Y,z)}}function t(j){return async({recipient:q,assetValue:w,memo:z,isProgramDerivedAddress:B,sender:G})=>{let F=await j(),Q=(await f(j)({assetValue:w,isProgramDerivedAddress:B,memo:z,recipient:q,sender:G})).compileMessage(),R=await F.getFeeForMessage(Q);if(R.value===null)throw new Z("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");let{baseDecimal:U}=K(X.Solana);return E.from({chain:X.Solana,fromBaseDecimal:U,value:R.value})}}async function Y(){let{Connection:j}=await import("@solana/web3.js"),q=await g(X.Solana);return new j(q,"confirmed")}function i(j){return async({assetValue:q,recipient:w,sender:z,isProgramDerivedAddress:B})=>{let G=await j(),F=await V(z);if(q.isGasAsset){let{Transaction:J,SystemProgram:Q,PublicKey:R}=await import("@solana/web3.js");return new J().add(Q.transfer({fromPubkey:F,lamports:q.getBaseValue("number"),toPubkey:new R(w)}))}if(q.address)return e({amount:q.getBaseValue("number"),connection:G,decimals:q.decimal,from:F,isProgramDerivedAddress:B,recipient:w,tokenAddress:q.address});return}}async function e({tokenAddress:j,recipient:q,from:w,connection:z,amount:B,decimals:G,isProgramDerivedAddress:F}){let{getAssociatedTokenAddress:J,getAccount:Q,createAssociatedTokenAccountInstruction:R,createTransferCheckedInstruction:U}=await import("@solana/spl-token"),{Transaction:_,PublicKey:L}=await import("@solana/web3.js"),W=new _,$=new L(j),A=await J($,w),D=new L(q),I=await J($,D,F),h=!1;try{await Q(z,I),h=!0}catch{}if(!h)W.add(R(w,I,D,$));return W.add(U(A,$,I,w,B,G)),W}function f(j){return async({recipient:q,assetValue:w,memo:z,isProgramDerivedAddress:B,sender:G})=>{let{createMemoInstruction:F}=await import("@solana/spl-memo"),J=await V(G),Q=await S();if(!(B||Q(q)))throw new Z("core_transaction_invalid_recipient_address");let R=await j(),U=await i(j)({assetValue:w,isProgramDerivedAddress:B,recipient:q,sender:G});if(!U)throw new Z("core_transaction_invalid_sender_address");if(z)U.add(F(z));let _=await R.getLatestBlockhash();return U.recentBlockhash=_.blockhash,U.feePayer=J,U}}async function n({instructions:j}){let{Transaction:q}=await import("@solana/web3.js"),w=new q().add(...j);if(!w)throw new Z("core_transaction_invalid_sender_address");return w}function jj(j,q){return async({recipient:w,assetValue:z,memo:B,isProgramDerivedAddress:G})=>{if(!q)throw new Z("core_transaction_invalid_sender_address");let F=q.publicKey?.toString()??(await q.connect()).publicKey.toString(),J=await f(j)({assetValue:z,isProgramDerivedAddress:G,memo:B,recipient:w,sender:F});if("signTransaction"in q){let Q=await q.signTransaction(J);return x(j)(Q)}return J.sign(q),x(j)(J)}}function x(j){return async(q)=>{return(await j()).sendRawTransaction(q.serialize())}}function qj(j,q){return async(w)=>{let{VersionedTransaction:z}=await import("@solana/web3.js");if(!q)throw new Z("toolbox_solana_no_signer");if(!(w instanceof z)){let G=await(await j()).getLatestBlockhash();w.recentBlockhash=G.blockhash,w.feePayer=q.publicKey||void 0}if("connect"in q)return await q.signTransaction(w);return await w.sign([q]),w}}async function H({phrase:j,derivationPath:q=m.SOL}){let{HDKey:w}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:z}=await import("@scure/bip39"),{Keypair:B}=await import("@solana/web3.js"),G=z(j),F=w.fromMasterSeed(G);return B.fromSeed(F.derive(q,!0).privateKey)}function v(j){return j.toString()}async function V(j){let{PublicKey:q}=await import("@solana/web3.js");return new q(j)}var y=()=>{};var wj={};u(wj,{getSolanaToolbox:()=>s,getSolanaAddressValidator:()=>S,fetchTokenMetaData:()=>b,createKeysForPath:()=>H});var zj=k(()=>{y()});zj();export{s as getSolanaToolbox,S as getSolanaAddressValidator,b as fetchTokenMetaData,H as createKeysForPath};
|
|
2
|
+
|
|
3
|
+
//# debugId=B4F0E1DA73EB872C64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/solana/toolbox.ts", "../src/solana/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n Connection,\n PublicKey,\n Signer,\n Transaction,\n TransactionInstruction,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n AssetValue,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n type GenericCreateTransactionParams,\n getChainConfig,\n getRPCUrl,\n NetworkDerivationPath,\n SwapKitError,\n updateDerivationPath,\n} from \"@uswap/helpers\";\nimport { match, P } from \"ts-pattern\";\nimport type { SolanaCreateTransactionParams, SolanaProvider, SolanaTransferParams } from \"./index\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\ntype TokenMetadata = {\n name: string;\n symbol: string;\n decimals: number;\n logoURI?: string;\n tags?: string[];\n daily_volume?: number;\n id: string; // mint address\n};\n\nexport async function fetchTokenMetaData(mintAddress: string): Promise<TokenMetadata | null> {\n const assetValue = AssetValue.from({ address: mintAddress, chain: Chain.Solana });\n if (assetValue.symbol !== \"UNKNOWN\") {\n return {\n decimals: assetValue.decimal || 0,\n id: mintAddress,\n logoURI: assetValue.getIconUrl(),\n name: assetValue.symbol,\n symbol: assetValue.ticker,\n };\n }\n\n const url = `https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(mintAddress)}`;\n\n try {\n const res = await fetch(url);\n if (!res.ok) return null;\n\n const arr = (await res.json()) as TokenMetadata[];\n if (!Array.isArray(arr) || arr.length === 0) return null;\n\n const exact = arr.find((t) => t.id === mintAddress);\n return exact || null;\n } catch {\n return null;\n }\n}\n\nasync function getSolanaBalance(address: string) {\n const connection = await getConnection();\n const { PublicKey } = await import(\"@solana/web3.js\");\n const { TOKEN_PROGRAM_ID } = await import(\"@solana/spl-token\");\n const publicKey = new PublicKey(address);\n\n const balances: AssetValue[] = [];\n\n // Get SOL balance\n const solBalance = await connection.getBalance(publicKey);\n if (solBalance > 0) {\n const { baseDecimal } = getChainConfig(Chain.Solana);\n balances.push(AssetValue.from({ chain: Chain.Solana, fromBaseDecimal: baseDecimal, value: solBalance }));\n }\n\n // Get token balances\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(publicKey, { programId: TOKEN_PROGRAM_ID });\n\n for (const { account } of tokenAccounts.value) {\n const tokenInfo = account.data.parsed.info;\n const mintAddress = tokenInfo.mint;\n const amount = tokenInfo.tokenAmount.amount;\n\n if (Number(amount) === 0) continue;\n\n const metadata = await fetchTokenMetaData(mintAddress);\n const ticker = metadata?.symbol || \"UNKNOWN\";\n const decimals = metadata?.decimals || tokenInfo.tokenAmount.decimals;\n\n balances.push(\n AssetValue.from({ asset: `${Chain.Solana}.${ticker}-${mintAddress}`, fromBaseDecimal: decimals, value: amount }),\n );\n }\n\n return balances;\n}\n\nexport async function getSolanaAddressValidator() {\n const { PublicKey } = await import(\"@solana/web3.js\");\n\n return (address: string) => {\n try {\n const pubkey = new PublicKey(address);\n return PublicKey.isOnCurve(pubkey.toBytes());\n } catch {\n return false;\n }\n };\n}\n\nexport async function getSolanaToolbox(\n toolboxParams?: { signer?: SolanaSigner } | { phrase?: string; index?: number; derivationPath?: DerivationPathArray },\n) {\n const index = toolboxParams && \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n const derivationPath = derivationPathToString(\n toolboxParams && \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Solana], { index }),\n );\n\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, ({ phrase }) => createKeysForPath({ derivationPath, phrase }))\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n function getAddress() {\n return signer?.publicKey ? getAddressFromPubKey(signer.publicKey) : \"\";\n }\n\n function getBalance(addressParam?: string) {\n const address = addressParam || getAddress();\n if (!address) throw new SwapKitError(\"core_wallet_connection_not_found\");\n return getSolanaBalance(address);\n }\n\n return {\n broadcastTransaction: broadcastTransaction(getConnection),\n createKeysForPath,\n createTransaction: createTransaction(getConnection),\n createTransactionFromInstructions,\n estimateTransactionFee: estimateTransactionFee(getConnection),\n getAddress,\n getAddressFromPubKey,\n getAddressValidator: getSolanaAddressValidator,\n getBalance,\n getConnection,\n getPubkeyFromAddress,\n signTransaction: signTransaction(getConnection, signer),\n transfer: transfer(getConnection, signer),\n };\n}\n\nfunction estimateTransactionFee(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: Omit<GenericCreateTransactionParams, \"feeRate\"> & { isProgramDerivedAddress?: boolean }) => {\n const connection = await getConnection();\n\n const transaction = await createTransaction(getConnection)({\n assetValue,\n isProgramDerivedAddress,\n memo,\n recipient,\n sender,\n });\n\n const message = transaction.compileMessage();\n const feeInLamports = await connection.getFeeForMessage(message);\n\n if (feeInLamports.value === null) {\n throw new SwapKitError(\"toolbox_solana_fee_estimation_failed\", \"Could not estimate Solana fee.\");\n }\n\n const { baseDecimal } = getChainConfig(Chain.Solana);\n\n return AssetValue.from({ chain: Chain.Solana, fromBaseDecimal: baseDecimal, value: feeInLamports.value });\n };\n}\n\nasync function getConnection() {\n const { Connection } = await import(\"@solana/web3.js\");\n const rpcUrl = await getRPCUrl(Chain.Solana);\n return new Connection(rpcUrl, \"confirmed\");\n}\n\nfunction createAssetTransaction(getConnection: () => Promise<Connection>) {\n return async ({ assetValue, recipient, sender, isProgramDerivedAddress }: SolanaCreateTransactionParams) => {\n const connection = await getConnection();\n const fromPubkey = await getPubkeyFromAddress(sender);\n\n if (assetValue.isGasAsset) {\n const { Transaction, SystemProgram, PublicKey } = await import(\"@solana/web3.js\");\n\n return new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: fromPubkey,\n lamports: assetValue.getBaseValue(\"number\"),\n toPubkey: new PublicKey(recipient),\n }),\n );\n }\n\n if (assetValue.address) {\n return createSolanaTokenTransaction({\n amount: assetValue.getBaseValue(\"number\"),\n connection,\n decimals: assetValue.decimal as number,\n from: fromPubkey,\n isProgramDerivedAddress,\n recipient,\n tokenAddress: assetValue.address,\n });\n }\n\n return undefined;\n };\n}\n\nasync function createSolanaTokenTransaction({\n tokenAddress,\n recipient,\n from,\n connection,\n amount,\n decimals,\n isProgramDerivedAddress,\n}: {\n tokenAddress: string;\n recipient: string;\n from: PublicKey;\n connection: Connection;\n amount: number;\n decimals: number;\n isProgramDerivedAddress?: boolean;\n}) {\n const {\n getAssociatedTokenAddress,\n getAccount,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n } = await import(\"@solana/spl-token\");\n const { Transaction, PublicKey } = await import(\"@solana/web3.js\");\n\n const transaction = new Transaction();\n const tokenPublicKey = new PublicKey(tokenAddress);\n const fromSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, from);\n\n const recipientPublicKey = new PublicKey(recipient);\n const recipientSPLAddress = await getAssociatedTokenAddress(\n tokenPublicKey,\n recipientPublicKey,\n isProgramDerivedAddress,\n );\n\n let recipientAccountExists = false;\n try {\n await getAccount(connection, recipientSPLAddress);\n recipientAccountExists = true;\n } catch {\n // Recipient's associated token account doesn't exist\n }\n\n if (!recipientAccountExists) {\n transaction.add(\n createAssociatedTokenAccountInstruction(from, recipientSPLAddress, recipientPublicKey, tokenPublicKey),\n );\n }\n\n transaction.add(\n createTransferCheckedInstruction(fromSPLAddress, tokenPublicKey, recipientSPLAddress, from, amount, decimals),\n );\n\n return transaction;\n}\n\nfunction createTransaction(getConnection: () => Promise<Connection>) {\n return async ({ recipient, assetValue, memo, isProgramDerivedAddress, sender }: SolanaCreateTransactionParams) => {\n const { createMemoInstruction } = await import(\"@solana/spl-memo\");\n\n const fromPubkey = await getPubkeyFromAddress(sender);\n const validateAddress = await getSolanaAddressValidator();\n\n if (!(isProgramDerivedAddress || validateAddress(recipient))) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const connection = await getConnection();\n const transaction = await createAssetTransaction(getConnection)({\n assetValue,\n isProgramDerivedAddress,\n recipient,\n sender,\n });\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n if (memo) transaction.add(createMemoInstruction(memo));\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = fromPubkey;\n\n return transaction;\n };\n}\n\nasync function createTransactionFromInstructions({\n instructions,\n}: {\n instructions: TransactionInstruction[];\n isProgramDerivedAddress?: boolean;\n}) {\n const { Transaction } = await import(\"@solana/web3.js\");\n const transaction = new Transaction().add(...instructions);\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n return transaction;\n}\n\nfunction transfer(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async ({ recipient, assetValue, memo, isProgramDerivedAddress }: SolanaTransferParams) => {\n if (!signer) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n const sender = signer.publicKey?.toString() ?? (await (signer as SolanaProvider).connect()).publicKey.toString();\n\n const transaction = await createTransaction(getConnection)({\n assetValue,\n isProgramDerivedAddress,\n memo,\n recipient,\n sender,\n });\n\n if (\"signTransaction\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return broadcastTransaction(getConnection)(signedTransaction);\n }\n\n transaction.sign(signer);\n\n return broadcastTransaction(getConnection)(transaction);\n };\n}\n\nfunction broadcastTransaction(getConnection: () => Promise<Connection>) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const connection = await getConnection();\n return connection.sendRawTransaction(transaction.serialize());\n };\n}\n\nfunction signTransaction(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const { VersionedTransaction } = await import(\"@solana/web3.js\");\n if (!signer) {\n throw new SwapKitError(\"toolbox_solana_no_signer\");\n }\n\n if (!(transaction instanceof VersionedTransaction)) {\n const connection = await getConnection();\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = signer.publicKey || undefined;\n }\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return signedTransaction;\n }\n\n await transaction.sign([signer] as Signer & Signer[]);\n return transaction;\n };\n}\n\nexport async function createKeysForPath({\n phrase,\n derivationPath = DerivationPath.SOL,\n}: {\n phrase: string;\n derivationPath?: string;\n}) {\n const { HDKey } = await import(\"micro-key-producer/slip10.js\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n const { Keypair } = await import(\"@solana/web3.js\");\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n\n return Keypair.fromSeed(hdKey.derive(derivationPath, true).privateKey);\n}\n\nfunction getAddressFromPubKey(publicKey: PublicKey) {\n return publicKey.toString();\n}\n\nasync function getPubkeyFromAddress(address: string) {\n const { PublicKey } = await import(\"@solana/web3.js\");\n return new PublicKey(address);\n}\n",
|
|
6
|
+
"import type { PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport type { GenericCreateTransactionParams, GenericTransferParams } from \"@uswap/helpers\";\nimport type { getSolanaToolbox } from \"./toolbox\";\n\n// type DisplayEncoding = \"utf8\" | \"hex\";\n\n// type PhantomRequestMethod =\n// | \"connect\"\n// | \"disconnect\"\n// | \"signAndSendTransaction\"\n// | \"signAndSendTransactionV0\"\n// | \"signAndSendTransactionV0WithLookupTable\"\n// | \"signTransaction\"\n// | \"signAllTransactions\"\n// | \"signMessage\";\n\ninterface ConnectOpts {\n onlyIfTrusted: boolean;\n}\n\nexport * from \"./toolbox\";\n\nexport type SolanaWallet = Awaited<ReturnType<typeof getSolanaToolbox>>;\n\nexport interface SolanaProvider {\n connect: (opts?: Partial<ConnectOpts>) => Promise<{ publicKey: PublicKey }>;\n disconnect: () => Promise<void>;\n publicKey: PublicKey | null;\n signTransaction: <T extends Transaction | VersionedTransaction = Transaction>(transaction: T) => Promise<T>;\n}\n\nexport type SolanaCreateTransactionParams = Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n};\n\nexport type SolanaTransferParams = Omit<GenericTransferParams, \"feeRate\"> & { isProgramDerivedAddress?: boolean };\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "B4F0E1DA73EB872C64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|