@swapkit/core 3.2.34 → 4.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,3 @@
1
+ var i=Object.create;var{getPrototypeOf:s,defineProperty:k,getOwnPropertyNames:P,getOwnPropertyDescriptor:n}=Object,T=Object.prototype.hasOwnProperty,Z=(U,q,G)=>{for(let z of P(q))if(!T.call(U,z)&&z!=="default")k(U,z,{get:()=>q[z],enumerable:!0});if(G){for(let z of P(q))if(!T.call(G,z)&&z!=="default")k(G,z,{get:()=>q[z],enumerable:!0});return G}},b=(U,q,G)=>{G=U!=null?i(s(U)):{};let z=q||!U||!U.__esModule?k(G,"default",{value:U,enumerable:!0}):G;for(let j of P(U))if(!T.call(z,j))k(z,j,{get:()=>U[j],enumerable:!0});return z},f=new WeakMap,t=(U)=>{var q=f.get(U),G;if(q)return q;if(q=k({},"__esModule",{value:!0}),U&&typeof U==="object"||typeof U==="function")P(U).map((z)=>!T.call(q,z)&&k(q,z,{get:()=>U[z],enumerable:!(G=n(U,z))||G.enumerable}));return f.set(U,q),q};var E=(U,q)=>{for(var G in q)k(U,G,{get:q[G],enumerable:!0,configurable:!0,set:(z)=>q[G]=()=>z})};var Y={};E(Y,{SwapKit:()=>v});module.exports=t(Y);Z(Y,require("@swapkit/helpers/api"),module.exports);Z(Y,require("@swapkit/helpers"),module.exports);var K={};E(K,{SwapKit:()=>v});var R=require("@swapkit/helpers");var D=require("@swapkit/helpers");function N({chain:U,txHash:q}){let G=D.ChainToExplorerUrl[U];switch(U){case D.Chain.Maya:case D.Chain.Kujira:case D.Chain.Cosmos:case D.Chain.THORChain:case D.Chain.Solana:return`${G}/tx/${q.startsWith("0x")?q.slice(2):q}`;case D.Chain.Arbitrum:case D.Chain.Avalanche:case D.Chain.BinanceSmartChain:case D.Chain.Base:case D.Chain.Ethereum:case D.Chain.Optimism:case D.Chain.Polkadot:case D.Chain.Polygon:return`${G}/tx/${q.startsWith("0x")?q:`0x${q}`}`;case D.Chain.Litecoin:case D.Chain.Bitcoin:case D.Chain.BitcoinCash:case D.Chain.Dogecoin:case D.Chain.Radix:return`${G}/transaction/${q.toLowerCase()}`;default:throw new D.SwapKitError({errorKey:"core_explorer_unsupported_chain",info:{chain:U}})}}function O({chain:U,address:q}){let G=D.ChainToExplorerUrl[U];switch(U){case D.Chain.Solana:case D.Chain.Radix:return`${G}/account/${q}`;default:return`${G}/address/${q}`}}function v({config:U,plugins:q,wallets:G}={}){if(U)R.SKConfig.set(U);let z={},j=Object.entries(q||{}).reduce(($,[L,_])=>{let B=_({getWallet:Q});return $[L]=B,$},{}),C=Object.entries(G||{}).reduce(($,[L,_])=>{let B=_.connectWallet({addChain:A});return $[L]=B,$},{});function y($){let _=$&&j[$]||Object.values(j)[0];if(!_)throw new R.SwapKitError("core_plugin_not_found");return _}function A($){let L=Q($.chain),_=$.balance||L.balance||[R.AssetValue.from({chain:$.chain})],B={...L,...$,balance:_};return z[$.chain]=B,B}function F({assetValue:$,type:L="checkOnly",contractAddress:_}){let B=j[_];if(B){if(L===R.ApproveMode.CheckOnly&&"isAssetValueApproved"in B)return B.isAssetValueApproved({assetValue:$});if(L===R.ApproveMode.Approve&&"approveAssetValue"in B)return B.approveAssetValue({assetValue:$});throw new R.SwapKitError({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(_)} cannot be used for approve operation`}})}let I=$.chain,H=R.EVMChains.includes(I);if(H&&$.isGasAsset||!H||$.isSynthetic)return Promise.resolve(L==="checkOnly"?!0:"approved");let X=Q(I),x=L==="checkOnly"?X.isApproved:X.approve;if(!x)throw new R.SwapKitError("core_wallet_connection_not_found");if(!($.address&&X.address&&typeof _==="string"))throw new R.SwapKitError("core_approve_asset_address_or_from_not_found");return x({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:X.address,spenderAddress:_})}function Q($){return z[$]||{}}function m(){return{...z}}function V($){return Q($)?.address||""}function W($,L){return F({assetValue:$,contractAddress:L,type:R.ApproveMode.Approve})}function w($,L){return F({assetValue:$,contractAddress:L,type:R.ApproveMode.CheckOnly})}function M($){Q($)?.disconnect?.(),delete z[$]}function d(){for(let $ of Object.keys(z))M($)}function o($,L){return L?S($).then(({balance:_})=>_):Q($)?.balance||[]}async function S($,L=!0){if($===R.Chain.Fiat||!Q($))throw new R.SwapKitError("core_wallet_connection_not_found");let _=Q($),B=[R.AssetValue.from({chain:$})];if(_.balance=B,"getBalance"in _){let I=await _.getBalance(_.address,L);_.balance=I}return _}function u({route:$,pluginName:L,..._}){let B=y(L||$.providers[0]);if("swap"in B)return B.swap({..._,route:$});throw new R.SwapKitError("core_plugin_swap_not_found")}function g({assetValue:$,...L}){let _=$.chain;if([R.Chain.Fiat,R.Chain.Radix].includes(_)||!Q(_))throw new R.SwapKitError("core_wallet_connection_not_found");return Q(_).transfer({...L,assetValue:$})}function r({chain:$,message:L}){let _=Q($);if(!_)throw new R.SwapKitError("core_wallet_connection_not_found");if("signMessage"in _)return _.signMessage?.(L);throw new R.SwapKitError({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:_.walletType}})}async function h({address:$,chain:L,message:_,signature:B}){switch(L){case R.Chain.THORChain:{let{getCosmosToolbox:I}=await import("@swapkit/toolboxes/cosmos");return(await I(L)).verifySignature({signature:B,message:_,address:$})}default:throw new R.SwapKitError({errorKey:"core_verify_message_not_supported",info:{chain:L}})}}async function p({type:$,feeOptionKey:L,params:_}){let{assetValue:B}=_,{chain:I}=B;if(!Q(I))throw new R.SwapKitError("core_wallet_connection_not_found");let H=R.AssetValue.from({chain:I});switch(I){case R.Chain.Arbitrum:case R.Chain.Avalanche:case R.Chain.Ethereum:case R.Chain.BinanceSmartChain:case R.Chain.Polygon:{let J=Q(I);if($==="transfer"){let X=await J.createTransferTx(_);return J.estimateTransactionFee({...X,chain:I,feeOption:L})}if($==="approve"&&!B.isGasAsset){let X=await J.createApprovalTx({assetAddress:B.address,spenderAddress:_.contractAddress,amount:B.getBaseValue("bigint"),from:J.address});return J.estimateTransactionFee({...X,chain:I,feeOption:L})}if($==="swap"){let X=_.route.providers[0];if([R.ProviderName.CHAINFLIP,R.ProviderName.CHAINFLIP_STREAMING].includes(X)){let c=await J.createTransferTx({sender:J.address,recipient:J.address,assetValue:B});return J.estimateTransactionFee({...c,chain:I,feeOption:L})}let{tx:x}=_.route;if(!x)return;return J.estimateTransactionFee({...x,value:BigInt(x.value),feeOption:L,chain:I})}return R.AssetValue.from({chain:I})}case R.Chain.Bitcoin:case R.Chain.BitcoinCash:case R.Chain.Dogecoin:case R.Chain.Dash:case R.Chain.Litecoin:{let{estimateTransactionFee:J,address:X}=Q(I);return J({..._,feeOptionKey:L,recipient:X,sender:X})}case R.Chain.THORChain:case R.Chain.Maya:case R.Chain.Kujira:case R.Chain.Cosmos:{let{estimateTransactionFee:J}=await import("@swapkit/toolboxes/cosmos");return J(_)}case R.Chain.Polkadot:{let{address:J,estimateTransactionFee:X}=Q(I);return X({..._,recipient:J})}case R.Chain.Ripple:{let{estimateTransactionFee:J}=Q(I);return J()}default:return H}}return{...j,...C,disconnectAll:d,disconnectChain:M,estimateTransactionFee:p,getAddress:V,getAllWallets:m,getBalance:o,getExplorerAddressUrl:O,getExplorerTxUrl:N,getWallet:Q,getWalletWithBalance:S,approveAssetValue:W,isAssetValueApproved:w,signMessage:r,swap:u,transfer:g,verifyMessage:h}}
2
+
3
+ //# debugId=922824806F9EC96164756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/client.ts", "../src/helpers/explorerUrls.ts"],
4
+ "sourcesContent": [
5
+ "export * from \"@swapkit/helpers/api\";\nexport * from \"@swapkit/helpers\";\nexport * from \"./client\";\n",
6
+ "import type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n type EVMChain,\n EVMChains,\n type FeeOption,\n type FullWallet,\n type GenericTransferParams,\n ProviderName as PluginNameEnum,\n SKConfig,\n type SKConfigState,\n SwapKitError,\n type SwapParams,\n type createPlugin,\n type createWallet,\n} from \"@swapkit/helpers\";\nimport type { EVMCreateTransactionParams, EVMTransferParams } from \"@swapkit/toolboxes/evm\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\nexport type SwapKitParams<P, W> = {\n config?: SKConfigState;\n plugins?: P;\n wallets?: W;\n};\n\nexport function SwapKit<\n Plugins extends ReturnType<typeof createPlugin>,\n Wallets extends ReturnType<typeof createWallet>,\n>({\n config,\n plugins,\n wallets,\n}: { config?: SKConfigState; plugins?: Plugins; wallets?: Wallets } = {}) {\n if (config) {\n SKConfig.set(config);\n }\n\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n type ConnectedChains = keyof typeof connectedWallets;\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, plugin]) => {\n const methods = plugin({ getWallet });\n\n acc[pluginName as PluginName] = methods as ReturnType<Plugins[keyof Plugins]>;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key]> },\n );\n\n const connectWalletMethods = Object.entries(wallets || {}).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet.connectWallet({ addChain });\n\n acc[walletName as keyof Wallets] = connectWallet as ReturnType<\n Wallets[keyof Wallets][\"connectWallet\"]\n >;\n return acc;\n },\n {} as {\n [key in keyof Wallets]: ReturnType<Wallets[key][\"connectWallet\"]>;\n },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName?: T) {\n const availablePlugin = pluginName && availablePlugins[pluginName];\n const plugin = availablePlugin || Object.values(availablePlugins)[0];\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin as ReturnType<Plugins[T]>;\n }\n\n function addChain<T extends Chain>(\n connectWallet: Omit<ChainWallet<T>, \"balance\"> & { balance?: AssetValue[] },\n ) {\n const currentWallet = getWallet(connectWallet.chain);\n\n const balance = connectWallet.balance ||\n currentWallet.balance || [AssetValue.from({ chain: connectWallet.chain })];\n\n const wallet = { ...currentWallet, ...connectWallet, balance } as FullWallet[T];\n\n connectedWallets[connectWallet.chain] = wallet;\n\n return wallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends ConnectedChains>(chain: T) {\n return connectedWallets[chain] || {};\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n async function getWalletWithBalance<T extends Chain>(\n chain: T,\n scamFilter = true,\n ): Promise<ReturnType<typeof getWallet> & { balance: AssetValue[] }> {\n if (chain === Chain.Fiat || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);\n const defaultBalance = [AssetValue.from({ chain })];\n wallet.balance = defaultBalance;\n\n if (\"getBalance\" in wallet) {\n const balance = await wallet.getBalance(wallet.address, scamFilter);\n wallet.balance = balance;\n }\n\n return wallet;\n }\n\n function swap<T extends PluginName>({\n route,\n pluginName,\n ...rest\n }: SwapParams<T, QuoteResponseRoute>) {\n const plugin = getSwapKitPlugin(pluginName || route.providers[0]);\n\n if (\"swap\" in plugin) {\n // @ts-expect-error TODO: fix this\n return plugin.swap({ ...rest, route });\n }\n\n throw new SwapKitError(\"core_plugin_swap_not_found\");\n }\n\n function transfer({ assetValue, ...params }: GenericTransferParams | EVMTransferParams) {\n const chain = assetValue.chain;\n if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix | Chain.Near>);\n\n // we need to simplify this to one object params\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n switch (chain) {\n case Chain.THORChain: {\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const toolbox = await getCosmosToolbox(chain);\n\n return toolbox.verifySignature({ signature, message, address });\n }\n\n default:\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO clean this up\n async function estimateTransactionFee<T extends PluginName>({\n type,\n feeOptionKey,\n params,\n }: (\n | { type: \"swap\"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }\n | { type: \"transfer\"; params: EVMTransferParams | GenericTransferParams }\n | {\n type: \"approve\";\n params: {\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n feeOptionKey?: FeeOption;\n };\n }\n ) & {\n feeOptionKey: FeeOption;\n }): Promise<AssetValue | undefined> {\n const { assetValue } = params;\n const { chain } = assetValue;\n\n if (!getWallet(chain as Chain)) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Ethereum:\n case Chain.BinanceSmartChain:\n case Chain.Polygon: {\n const wallet = getWallet(chain);\n if (type === \"transfer\") {\n const txObject = await wallet.createTransferTx(params as EVMCreateTransactionParams);\n return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });\n }\n\n if (type === \"approve\" && !assetValue.isGasAsset) {\n const approvalTx = await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n });\n\n return wallet.estimateTransactionFee({ ...approvalTx, chain, feeOption: feeOptionKey });\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if ([PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)) {\n const txObject = await wallet.createTransferTx({\n sender: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\n\n return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });\n }\n\n const { tx } = params.route;\n if (!tx) {\n return undefined;\n }\n\n return wallet.estimateTransactionFee({\n ...(tx as EVMTransaction),\n value: BigInt((tx as EVMTransaction).value),\n feeOption: feeOptionKey,\n chain,\n });\n }\n\n return AssetValue.from({ chain });\n }\n\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Dash:\n case Chain.Litecoin: {\n const { estimateTransactionFee, address: recipient } = getWallet(chain);\n\n return estimateTransactionFee({ ...params, feeOptionKey, recipient, sender: recipient });\n }\n\n case Chain.THORChain:\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos: {\n const { estimateTransactionFee } = await import(\"@swapkit/toolboxes/cosmos\");\n return estimateTransactionFee(params);\n }\n\n case Chain.Polkadot: {\n const { address, estimateTransactionFee } = getWallet(chain);\n\n return estimateTransactionFee({ ...params, recipient: address });\n }\n\n case Chain.Ripple: {\n const { estimateTransactionFee } = getWallet(chain);\n\n return estimateTransactionFee();\n }\n\n default:\n return baseValue;\n }\n }\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n disconnectAll,\n disconnectChain,\n estimateTransactionFee,\n getAddress,\n getAllWallets,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n\n approveAssetValue,\n isAssetValueApproved,\n signMessage,\n swap,\n transfer,\n verifyMessage,\n };\n}\n",
7
+ "import { Chain, ChainToExplorerUrl, SwapKitError } from \"@swapkit/helpers\";\n\nexport function getExplorerTxUrl({ chain, txHash }: { txHash: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n switch (chain) {\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos:\n case Chain.THORChain:\n case Chain.Solana:\n return `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash.slice(2) : txHash}`;\n\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.BinanceSmartChain:\n case Chain.Base:\n case Chain.Ethereum:\n case Chain.Optimism:\n case Chain.Polkadot:\n case Chain.Polygon:\n return `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash : `0x${txHash}`}`;\n\n case Chain.Litecoin:\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Radix:\n return `${baseUrl}/transaction/${txHash.toLowerCase()}`;\n\n default:\n throw new SwapKitError({ errorKey: \"core_explorer_unsupported_chain\", info: { chain } });\n }\n}\n\nexport function getExplorerAddressUrl({ chain, address }: { address: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n switch (chain) {\n case Chain.Solana:\n case Chain.Radix:\n return `${baseUrl}/account/${address}`;\n\n default:\n return `${baseUrl}/address/${address}`;\n }\n}\n"
8
+ ],
9
+ "mappings": "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",
10
+ "debugId": "922824806F9EC96164756E2164756E21",
11
+ "names": []
12
+ }
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- var B$=Object.create;var{getPrototypeOf:L$,defineProperty:y,getOwnPropertyNames:_$}=Object;var j$=Object.prototype.hasOwnProperty;var D=(_,j,J)=>{J=_!=null?B$(L$(_)):{};let T=j||!_||!_.__esModule?y(J,"default",{value:_,enumerable:!0}):J;for(let P of _$(_))if(!j$.call(T,P))y(T,P,{get:()=>_[P],enumerable:!0});return T};var H=((_)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(_,{get:(j,J)=>(typeof require!=="undefined"?require:j)[J]}):_)(function(_){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+_+'" is not supported')});export*from"@swapkit/api";export*from"@swapkit/helpers";import{SwapKitApi as M}from"@swapkit/api";import{ApproveMode as N,AssetValue as S,Chain as x,EVMChains as x$,ProviderName as d,SwapKitError as U}from"@swapkit/helpers";import{Chain as q,ChainToExplorerUrl as V,SwapKitError as q$}from"@swapkit/helpers";function W({chain:_,txHash:j}){let J=V[_];switch(_){case q.Maya:case q.Kujira:case q.Cosmos:case q.THORChain:case q.Solana:return`${J}/tx/${j.startsWith("0x")?j.slice(2):j}`;case q.Arbitrum:case q.Avalanche:case q.BinanceSmartChain:case q.Base:case q.Ethereum:case q.Optimism:case q.Polkadot:case q.Polygon:return`${J}/tx/${j.startsWith("0x")?j:`0x${j}`}`;case q.Litecoin:case q.Bitcoin:case q.BitcoinCash:case q.Dogecoin:case q.Radix:return`${J}/transaction/${j.toLowerCase()}`;default:throw new q$({errorKey:"core_explorer_unsupported_chain",info:{chain:_}})}}function K({chain:_,address:j}){let J=V[_];switch(_){case q.Solana:case q.Radix:return`${J}/account/${j}`;default:return`${J}/address/${j}`}}function Y$({apis:_={},config:j={},plugins:J,rpcUrls:T={},wallets:P={}}={}){let C=j.stagenet,O=j.swapkitConfig?.isDev,Y={},Z=Object.entries(J||{}).reduce(($,[R,{plugin:B,config:L}])=>{let G=B({getWallet:Q,stagenet:C,config:L??j});return $[R]=G,$},{}),o=Object.entries(P).reduce(($,[R,B])=>{let L=B({addChain:h,config:j,apis:_,rpcUrls:T});return $[R]=L,$},{});function u($){let R=Z[$]||Object.values(Z)[0];if(!R)throw new U("core_plugin_not_found");return R}function w($){let R=Object.values(Z).find((B)=>B.supportedSwapkitProviders?.includes($));if(!R)throw new U("core_plugin_not_found");return R}function h($){let R=Q($.chain);Y[$.chain]={...R,...$}}function f({assetValue:$,type:R="checkOnly",contractAddress:B}){let L=Z[B];if(L){if(R===N.CheckOnly&&"isAssetValueApproved"in L)return L.isAssetValueApproved({assetValue:$});if(R===N.Approve&&"approveAssetValue"in L)return L.approveAssetValue({assetValue:$});throw new U({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(B)} cannot be used for approve operation`}})}let G=$.chain,E=x$.includes(G);if(E&&$.isGasAsset||!E||$.isSynthetic)return Promise.resolve(R==="checkOnly"?!0:"approved");let X=Q(G),b=R==="checkOnly"?X.isApproved:X.approve;if(!b)throw new U("core_wallet_connection_not_found");if(!($.address&&X.address&&typeof B==="string"))throw new U("core_approve_asset_address_or_from_not_found");return b({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:X.address,spenderAddress:B})}function Q($){return Y[$]}function c(){return{...Y}}function r($){return Q($)?.address||""}function g($,R){return f({assetValue:$,contractAddress:R,type:N.Approve})}function s($,R){return f({assetValue:$,contractAddress:R,type:N.CheckOnly})}function m($){Q($)?.disconnect?.(),delete Y[$]}function n(){for(let $ of Object.keys(Y))m($)}function p($,R){return R?A($).then(({balance:B})=>B):Q($)?.balance||[]}function i($){throw new U("not_implemented",{message:"validateAddress is deprecated - use toolbox directly or import { getAddressValidator } from '@swapkit/core'"})}async function A($,R=!0){if($===x.Fiat||!Q($))throw new U("core_wallet_connection_not_found");let B=Q($),L=[S.from({chain:$})];if("getBalance"in B){let G=await B.getBalance(B.address,R);B.balance=G?.length?G:L}return B}function t({route:$,pluginName:R,...B}){let L=R&&u(R)||w($.providers[0]);if(!L)throw new U("core_swap_route_not_complete");if("swap"in L)return L.swap({...B,route:$});throw new U("core_plugin_swap_not_found")}function l({assetValue:$,...R}){let B=$.chain;if([x.Fiat,x.Radix].includes(B)||!Q(B))throw new U("core_wallet_connection_not_found");return Q(B).transfer({...R,assetValue:$})}function a({chain:$,message:R}){let B=Q($);if(!B)throw new U("core_wallet_connection_not_found");if("signMessage"in B)return B.signMessage?.(R);throw new U({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:B.walletType}})}async function e({address:$,chain:R,message:B,signature:L}){switch(R){case x.THORChain:{let{getToolboxByChain:G}=await import("@swapkit/toolbox-cosmos");return G(R)().verifySignature({signature:L,message:B,address:$})}default:throw new U({errorKey:"core_verify_message_not_supported",info:{chain:R}})}}async function $$({type:$,feeOptionKey:R,params:B}){let{assetValue:L}=B,{chain:G}=L;if(!Q(G))throw new U("core_wallet_connection_not_found");let E=S.from({chain:G});switch(G){case x.Arbitrum:case x.Avalanche:case x.Ethereum:case x.BinanceSmartChain:case x.Polygon:{let I=Q(G);if($==="transfer"){let X=await I.createTransferTx(B);return I.estimateTransactionFee(X,R)}if($==="approve"&&!L.isGasAsset)return I.estimateTransactionFee(await I.createApprovalTx({assetAddress:L.address,spenderAddress:B.contractAddress,amount:L.getBaseValue("bigint"),from:I.address}),R);if($==="swap"){let X=B.route.providers[0];if([d.CHAINFLIP,d.CHAINFLIP_STREAMING].includes(X)){let R$=await I.createTransferTx({from:I.address,recipient:I.address,assetValue:L});return I.estimateTransactionFee(R$,R)}let{tx:b}=B.route;if(!b)return;return I.estimateTransactionFee({...b,value:BigInt(b.value)},R)}return S.from({chain:G})}case x.Bitcoin:case x.BitcoinCash:case x.Dogecoin:case x.Dash:case x.Litecoin:{let{estimateTransactionFee:I,address:X}=Q(G);return I({...B,feeOptionKey:R,from:X,recipient:X})}case x.THORChain:case x.Maya:case x.Kujira:case x.Cosmos:{let{estimateTransactionFee:I}=await import("@swapkit/toolbox-cosmos");return I(B)}case x.Polkadot:{let{address:I,estimateTransactionFee:X}=Q(G);return X({...B,recipient:I})}default:return E}}let v=j.swapkitConfig||{},F=v?.swapkitApiKey||j?.swapkitApiKey,k=v.useHashedApiKey?v.referer:void 0;return{...Z,...o,disconnectAll:n,disconnectChain:m,estimateTransactionFee:$$,getAddress:r,getAllWallets:c,getBalance:p,getExplorerAddressUrl:K,getExplorerTxUrl:W,getWallet:Q,getWalletWithBalance:A,approveAssetValue:g,isAssetValueApproved:s,signMessage:a,swap:t,transfer:l,validateAddress:i,verifyMessage:e,api:F?{getGasRate:()=>M.getGasRate(O,F,k),getPrice:($)=>M.getPrice($,O,F,k),getSwapQuote:($)=>M.getSwapQuote($,O,F,k),getTokenList:($)=>M.getTokenList($),getTokenListProviders:()=>M.getTokenListProvidersV2(O,F,k),getTokenTradingPairs:($)=>M.getTokenTradingPairs($,O,F,k),getTrackerDetails:($)=>M.getTrackerDetails($,F,k)}:{undefined:void 0}}}import{Chain as z}from"@swapkit/helpers";async function H$(){let{cosmosValidateAddress:_}=await import("@swapkit/toolbox-cosmos"),{evmValidateAddress:j}=await import("@swapkit/toolbox-evm"),{substrateValidateAddress:J}=await import("@swapkit/toolbox-substrate"),{utxoValidateAddress:T}=await import("@swapkit/toolbox-utxo"),{validateAddress:P}=await import("@swapkit/toolbox-solana"),{validateAddress:C}=await import("@swapkit/toolbox-radix");return function O({address:Y,chain:Z}){switch(Z){case z.Arbitrum:case z.Avalanche:case z.Optimism:case z.BinanceSmartChain:case z.Base:case z.Polygon:case z.Ethereum:return j({address:Y});case z.Litecoin:case z.Dash:case z.Dogecoin:case z.BitcoinCash:case z.Bitcoin:return T({address:Y,chain:Z});case z.Cosmos:case z.Kujira:case z.Maya:case z.THORChain:return _({address:Y,chain:Z});case z.Polkadot:return J({address:Y,chain:Z});case z.Radix:return C(Y);case z.Solana:return P(Y);default:return!1}}}export{H$ as getAddressValidator,Y$ as SwapKit};
1
+ var p=Object.create;var{getPrototypeOf:c,defineProperty:M,getOwnPropertyNames:i}=Object;var s=Object.prototype.hasOwnProperty;var S=(U,I,Q)=>{Q=U!=null?p(c(U)):{};let Y=I||!U||!U.__esModule?M(Q,"default",{value:U,enumerable:!0}):Q;for(let Z of i(U))if(!s.call(Y,Z))M(Y,Z,{get:()=>U[Z],enumerable:!0});return Y};var f=((U)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(U,{get:(I,Q)=>(typeof require!=="undefined"?require:I)[Q]}):U)(function(U){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+U+'" is not supported')});export*from"@swapkit/helpers/api";export*from"@swapkit/helpers";import{ApproveMode as x,AssetValue as H,Chain as z,EVMChains as t,ProviderName as O,SKConfig as l,SwapKitError as X}from"@swapkit/helpers";import{Chain as q,ChainToExplorerUrl as b,SwapKitError as n}from"@swapkit/helpers";function E({chain:U,txHash:I}){let Q=b[U];switch(U){case q.Maya:case q.Kujira:case q.Cosmos:case q.THORChain:case q.Solana:return`${Q}/tx/${I.startsWith("0x")?I.slice(2):I}`;case q.Arbitrum:case q.Avalanche:case q.BinanceSmartChain:case q.Base:case q.Ethereum:case q.Optimism:case q.Polkadot:case q.Polygon:return`${Q}/tx/${I.startsWith("0x")?I:`0x${I}`}`;case q.Litecoin:case q.Bitcoin:case q.BitcoinCash:case q.Dogecoin:case q.Radix:return`${Q}/transaction/${I.toLowerCase()}`;default:throw new n({errorKey:"core_explorer_unsupported_chain",info:{chain:U}})}}function N({chain:U,address:I}){let Q=b[U];switch(U){case q.Solana:case q.Radix:return`${Q}/account/${I}`;default:return`${Q}/address/${I}`}}function L$({config:U,plugins:I,wallets:Q}={}){if(U)l.set(U);let Y={},Z=Object.entries(I||{}).reduce(($,[_,R])=>{let L=R({getWallet:G});return $[_]=L,$},{}),v=Object.entries(Q||{}).reduce(($,[_,R])=>{let L=R.connectWallet({addChain:C});return $[_]=L,$},{});function K($){let R=$&&Z[$]||Object.values(Z)[0];if(!R)throw new X("core_plugin_not_found");return R}function C($){let _=G($.chain),R=$.balance||_.balance||[H.from({chain:$.chain})],L={..._,...$,balance:R};return Y[$.chain]=L,L}function P({assetValue:$,type:_="checkOnly",contractAddress:R}){let L=Z[R];if(L){if(_===x.CheckOnly&&"isAssetValueApproved"in L)return L.isAssetValueApproved({assetValue:$});if(_===x.Approve&&"approveAssetValue"in L)return L.approveAssetValue({assetValue:$});throw new X({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(R)} cannot be used for approve operation`}})}let B=$.chain,k=t.includes(B);if(k&&$.isGasAsset||!k||$.isSynthetic)return Promise.resolve(_==="checkOnly"?!0:"approved");let J=G(B),j=_==="checkOnly"?J.isApproved:J.approve;if(!j)throw new X("core_wallet_connection_not_found");if(!($.address&&J.address&&typeof R==="string"))throw new X("core_approve_asset_address_or_from_not_found");return j({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:J.address,spenderAddress:R})}function G($){return Y[$]||{}}function y(){return{...Y}}function A($){return G($)?.address||""}function m($,_){return P({assetValue:$,contractAddress:_,type:x.Approve})}function V($,_){return P({assetValue:$,contractAddress:_,type:x.CheckOnly})}function T($){G($)?.disconnect?.(),delete Y[$]}function W(){for(let $ of Object.keys(Y))T($)}function w($,_){return _?F($).then(({balance:R})=>R):G($)?.balance||[]}async function F($,_=!0){if($===z.Fiat||!G($))throw new X("core_wallet_connection_not_found");let R=G($),L=[H.from({chain:$})];if(R.balance=L,"getBalance"in R){let B=await R.getBalance(R.address,_);R.balance=B}return R}function d({route:$,pluginName:_,...R}){let L=K(_||$.providers[0]);if("swap"in L)return L.swap({...R,route:$});throw new X("core_plugin_swap_not_found")}function o({assetValue:$,..._}){let R=$.chain;if([z.Fiat,z.Radix].includes(R)||!G(R))throw new X("core_wallet_connection_not_found");return G(R).transfer({..._,assetValue:$})}function u({chain:$,message:_}){let R=G($);if(!R)throw new X("core_wallet_connection_not_found");if("signMessage"in R)return R.signMessage?.(_);throw new X({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:R.walletType}})}async function g({address:$,chain:_,message:R,signature:L}){switch(_){case z.THORChain:{let{getCosmosToolbox:B}=await import("@swapkit/toolboxes/cosmos");return(await B(_)).verifySignature({signature:L,message:R,address:$})}default:throw new X({errorKey:"core_verify_message_not_supported",info:{chain:_}})}}async function r({type:$,feeOptionKey:_,params:R}){let{assetValue:L}=R,{chain:B}=L;if(!G(B))throw new X("core_wallet_connection_not_found");let k=H.from({chain:B});switch(B){case z.Arbitrum:case z.Avalanche:case z.Ethereum:case z.BinanceSmartChain:case z.Polygon:{let D=G(B);if($==="transfer"){let J=await D.createTransferTx(R);return D.estimateTransactionFee({...J,chain:B,feeOption:_})}if($==="approve"&&!L.isGasAsset){let J=await D.createApprovalTx({assetAddress:L.address,spenderAddress:R.contractAddress,amount:L.getBaseValue("bigint"),from:D.address});return D.estimateTransactionFee({...J,chain:B,feeOption:_})}if($==="swap"){let J=R.route.providers[0];if([O.CHAINFLIP,O.CHAINFLIP_STREAMING].includes(J)){let h=await D.createTransferTx({sender:D.address,recipient:D.address,assetValue:L});return D.estimateTransactionFee({...h,chain:B,feeOption:_})}let{tx:j}=R.route;if(!j)return;return D.estimateTransactionFee({...j,value:BigInt(j.value),feeOption:_,chain:B})}return H.from({chain:B})}case z.Bitcoin:case z.BitcoinCash:case z.Dogecoin:case z.Dash:case z.Litecoin:{let{estimateTransactionFee:D,address:J}=G(B);return D({...R,feeOptionKey:_,recipient:J,sender:J})}case z.THORChain:case z.Maya:case z.Kujira:case z.Cosmos:{let{estimateTransactionFee:D}=await import("@swapkit/toolboxes/cosmos");return D(R)}case z.Polkadot:{let{address:D,estimateTransactionFee:J}=G(B);return J({...R,recipient:D})}case z.Ripple:{let{estimateTransactionFee:D}=G(B);return D()}default:return k}}return{...Z,...v,disconnectAll:W,disconnectChain:T,estimateTransactionFee:r,getAddress:A,getAllWallets:y,getBalance:w,getExplorerAddressUrl:N,getExplorerTxUrl:E,getWallet:G,getWalletWithBalance:F,approveAssetValue:m,isAssetValueApproved:V,signMessage:u,swap:d,transfer:o,verifyMessage:g}}export{L$ as SwapKit};
2
2
 
3
- //# debugId=D1A504E9AFF2E6E164756E2164756E21
3
+ //# debugId=C6A226BD4E317C5664756E2164756E21
package/dist/index.js.map CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/client.ts", "../src/helpers/explorerUrls.ts", "../src/helpers/walletAddressValidator.ts"],
3
+ "sources": ["../src/index.ts", "../src/client.ts", "../src/helpers/explorerUrls.ts"],
4
4
  "sourcesContent": [
5
- "export * from \"@swapkit/api\";\nexport * from \"@swapkit/helpers\";\nexport * from \"./client\";\nexport * from \"./helpers/walletAddressValidator\";\n",
6
- "import type {\n EVMTransaction,\n PriceRequest,\n QuoteRequest,\n QuoteResponseRoute,\n TrackerParams,\n} from \"@swapkit/api\";\nimport { SwapKitApi } from \"@swapkit/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainApis,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n type ConnectConfig,\n type CryptoChain,\n type EVMChain,\n EVMChains,\n type FeeOption,\n type FullWallet,\n ProviderName as PluginNameEnum,\n SwapKitError,\n type SwapKitPluginParams,\n type SwapKitWallet,\n type SwapParams,\n} from \"@swapkit/helpers\";\nimport type { TransferParams as CosmosTransferParams } from \"@swapkit/toolbox-cosmos\";\nimport type { TransferParams as EVMTransferParams } from \"@swapkit/toolbox-evm\";\nimport type { UTXOTransferParams } from \"@swapkit/toolbox-utxo\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\nexport type PluginsType = {\n [key in string]: {\n plugin: (params: SwapKitPluginParams<any>) => any;\n config?: any;\n };\n};\n\nexport type WalletsType = {\n [key in string]: SwapKitWallet<any[]>;\n};\n\nexport type SwapKitParams<P, W> = {\n apis?: ChainApis;\n config?: ConnectConfig;\n plugins?: P;\n rpcUrls?: { [key in CryptoChain]?: string };\n wallets?: W;\n};\n\nexport function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType>({\n apis = {},\n config = {},\n plugins,\n rpcUrls = {},\n wallets = {} as Wallets,\n}: SwapKitParams<Plugins, Wallets> = {}) {\n const stagenet = config.stagenet;\n const isDev = config.swapkitConfig?.isDev;\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, { plugin, config: pluginConfig }]) => {\n const methods = plugin({ getWallet, stagenet, config: pluginConfig ?? config });\n\n // @ts-expect-error key is generic and cannot be indexed\n acc[pluginName] = methods;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key][\"plugin\"]> },\n );\n\n const connectWalletMethods = Object.entries(wallets).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet({ addChain, config, apis, rpcUrls });\n\n // @ts-expect-error walletName is generic and cannot be indexed\n acc[walletName] = connectWallet;\n return acc;\n },\n {} as { [key in keyof Wallets]: ReturnType<Wallets[key]> },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName: T) {\n const plugin = availablePlugins[pluginName] || Object.values(availablePlugins)[0];\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin;\n }\n\n function getSwapKitPluginForSKProvider(pluginName: PluginNameEnum): Plugins[keyof Plugins] {\n const plugin = Object.values(availablePlugins).find((plugin) =>\n plugin.supportedSwapkitProviders?.includes(pluginName),\n );\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin;\n }\n\n function addChain<T extends CryptoChain>(connectWallet: ChainWallet<T>) {\n const currentWallet = getWallet(connectWallet.chain);\n\n connectedWallets[connectWallet.chain] = { ...currentWallet, ...connectWallet };\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends Chain>(chain: T) {\n return connectedWallets[chain];\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n /**\n * @deprecated - use toolbox directly or use getAddressValidator() function\n */\n function validateAddress(_: { address: string; chain: Chain }) {\n throw new SwapKitError(\"not_implemented\", {\n message:\n \"validateAddress is deprecated - use toolbox directly or import { getAddressValidator } from '@swapkit/core'\",\n });\n }\n\n async function getWalletWithBalance<T extends Chain>(chain: T, potentialScamFilter = true) {\n if (chain === Chain.Fiat || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);\n const defaultBalance = [AssetValue.from({ chain })];\n\n if (\"getBalance\" in wallet) {\n const balance = await wallet.getBalance(wallet.address, potentialScamFilter);\n wallet.balance = balance?.length ? balance : defaultBalance;\n }\n\n return wallet;\n }\n\n function swap<T extends PluginName>({\n route,\n pluginName,\n ...rest\n }: SwapParams<T, QuoteResponseRoute>) {\n const plugin =\n (pluginName && getSwapKitPlugin(pluginName)) ||\n getSwapKitPluginForSKProvider(route.providers[0] as PluginNameEnum);\n\n if (!plugin) throw new SwapKitError(\"core_swap_route_not_complete\");\n\n if (\"swap\" in plugin) {\n return plugin.swap({ ...rest, route });\n }\n\n throw new SwapKitError(\"core_plugin_swap_not_found\");\n }\n\n function transfer({\n assetValue,\n ...params\n }: UTXOTransferParams | EVMTransferParams | CosmosTransferParams) {\n const chain = assetValue.chain;\n if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix>);\n\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n switch (chain) {\n case Chain.THORChain: {\n const { getToolboxByChain } = await import(\"@swapkit/toolbox-cosmos\");\n const toolbox = getToolboxByChain(chain);\n return toolbox().verifySignature({ signature, message, address });\n }\n\n default:\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO clean this up\n async function estimateTransactionFee<T extends PluginName>({\n type,\n feeOptionKey,\n params,\n }: (\n | { type: \"swap\"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }\n | { type: \"transfer\"; params: UTXOTransferParams | EVMTransferParams | CosmosTransferParams }\n | {\n type: \"approve\";\n params: {\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n feeOptionKey?: FeeOption;\n };\n }\n ) & {\n feeOptionKey: FeeOption;\n }): Promise<AssetValue | undefined> {\n const { assetValue } = params;\n const { chain } = assetValue;\n\n if (!getWallet(chain as Chain)) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Ethereum:\n case Chain.BinanceSmartChain:\n case Chain.Polygon: {\n const wallet = getWallet(chain);\n if (type === \"transfer\") {\n const txObject = await wallet.createTransferTx(params);\n return wallet.estimateTransactionFee(txObject, feeOptionKey);\n }\n\n if (type === \"approve\" && !assetValue.isGasAsset) {\n return wallet.estimateTransactionFee(\n await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n }),\n feeOptionKey,\n );\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if ([PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)) {\n const txObject = await wallet.createTransferTx({\n from: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\n return wallet.estimateTransactionFee(txObject, feeOptionKey);\n }\n\n const { tx } = params.route;\n if (!tx) {\n return undefined;\n }\n\n return wallet.estimateTransactionFee(\n { ...(tx as EVMTransaction), value: BigInt((tx as EVMTransaction).value) },\n feeOptionKey,\n );\n }\n\n return AssetValue.from({ chain });\n }\n\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Dash:\n case Chain.Litecoin: {\n const { estimateTransactionFee, address } = getWallet(chain);\n\n return estimateTransactionFee({\n ...params,\n feeOptionKey,\n from: address,\n recipient: address,\n });\n }\n\n case Chain.THORChain:\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos: {\n const { estimateTransactionFee } = await import(\"@swapkit/toolbox-cosmos\");\n return estimateTransactionFee(params);\n }\n\n case Chain.Polkadot: {\n const { address, estimateTransactionFee } = getWallet(chain);\n\n return estimateTransactionFee({ ...params, recipient: address });\n }\n\n default:\n return baseValue;\n }\n }\n\n const swapkitConfig = config.swapkitConfig || {};\n const swapkitApiKey = swapkitConfig?.swapkitApiKey || config?.swapkitApiKey;\n const referer = swapkitConfig.useHashedApiKey ? swapkitConfig.referer : undefined;\n\n const api = swapkitApiKey\n ? {\n getGasRate: () => SwapKitApi.getGasRate(isDev, swapkitApiKey, referer),\n getPrice: (body: PriceRequest) => SwapKitApi.getPrice(body, isDev, swapkitApiKey, referer),\n getSwapQuote: (params: QuoteRequest) =>\n SwapKitApi.getSwapQuote(params, isDev, swapkitApiKey, referer),\n getTokenList: (provider: PluginNameEnum) => SwapKitApi.getTokenList(provider),\n getTokenListProviders: () =>\n SwapKitApi.getTokenListProvidersV2(isDev, swapkitApiKey, referer),\n getTokenTradingPairs: (providers: PluginNameEnum[]) =>\n SwapKitApi.getTokenTradingPairs(providers, isDev, swapkitApiKey, referer),\n getTrackerDetails: (payload: TrackerParams) =>\n SwapKitApi.getTrackerDetails(payload, swapkitApiKey, referer),\n }\n : { undefined };\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n disconnectAll,\n disconnectChain,\n estimateTransactionFee,\n getAddress,\n getAllWallets,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n\n approveAssetValue,\n isAssetValueApproved,\n signMessage,\n swap,\n transfer,\n validateAddress,\n verifyMessage,\n api,\n };\n}\n",
7
- "import { Chain, ChainToExplorerUrl, SwapKitError } from \"@swapkit/helpers\";\n\nexport function getExplorerTxUrl({ chain, txHash }: { txHash: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n switch (chain) {\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos:\n case Chain.THORChain:\n case Chain.Solana:\n return `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash.slice(2) : txHash}`;\n\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.BinanceSmartChain:\n case Chain.Base:\n case Chain.Ethereum:\n case Chain.Optimism:\n case Chain.Polkadot:\n case Chain.Polygon:\n return `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash : `0x${txHash}`}`;\n\n case Chain.Litecoin:\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Radix:\n return `${baseUrl}/transaction/${txHash.toLowerCase()}`;\n\n default:\n throw new SwapKitError({ errorKey: \"core_explorer_unsupported_chain\", info: { chain } });\n }\n}\n\nexport function getExplorerAddressUrl({ chain, address }: { address: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n switch (chain) {\n case Chain.Solana:\n case Chain.Radix:\n return `${baseUrl}/account/${address}`;\n\n default:\n return `${baseUrl}/address/${address}`;\n }\n}\n",
8
- "import { Chain } from \"@swapkit/helpers\";\n\nexport async function getAddressValidator() {\n const { cosmosValidateAddress } = await import(\"@swapkit/toolbox-cosmos\");\n const { evmValidateAddress } = await import(\"@swapkit/toolbox-evm\");\n const { substrateValidateAddress } = await import(\"@swapkit/toolbox-substrate\");\n const { utxoValidateAddress } = await import(\"@swapkit/toolbox-utxo\");\n const { validateAddress: solanaValidateAddress } = await import(\"@swapkit/toolbox-solana\");\n const { validateAddress: validateRadixAddress } = await import(\"@swapkit/toolbox-radix\");\n\n return function validateAddress({ address, chain }: { address: string; chain: Chain }) {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Optimism:\n case Chain.BinanceSmartChain:\n case Chain.Base:\n case Chain.Polygon:\n case Chain.Ethereum:\n return evmValidateAddress({ address });\n\n case Chain.Litecoin:\n case Chain.Dash:\n case Chain.Dogecoin:\n case Chain.BitcoinCash:\n case Chain.Bitcoin:\n return utxoValidateAddress({ address, chain });\n\n case Chain.Cosmos:\n case Chain.Kujira:\n case Chain.Maya:\n case Chain.THORChain: {\n return cosmosValidateAddress({ address, chain });\n }\n\n case Chain.Polkadot: {\n return substrateValidateAddress({ address, chain });\n }\n\n case Chain.Radix: {\n return validateRadixAddress(address);\n }\n\n case Chain.Solana: {\n return solanaValidateAddress(address);\n }\n\n default:\n return false;\n }\n };\n}\n"
5
+ "export * from \"@swapkit/helpers/api\";\nexport * from \"@swapkit/helpers\";\nexport * from \"./client\";\n",
6
+ "import type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n type EVMChain,\n EVMChains,\n type FeeOption,\n type FullWallet,\n type GenericTransferParams,\n ProviderName as PluginNameEnum,\n SKConfig,\n type SKConfigState,\n SwapKitError,\n type SwapParams,\n type createPlugin,\n type createWallet,\n} from \"@swapkit/helpers\";\nimport type { EVMCreateTransactionParams, EVMTransferParams } from \"@swapkit/toolboxes/evm\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\nexport type SwapKitParams<P, W> = {\n config?: SKConfigState;\n plugins?: P;\n wallets?: W;\n};\n\nexport function SwapKit<\n Plugins extends ReturnType<typeof createPlugin>,\n Wallets extends ReturnType<typeof createWallet>,\n>({\n config,\n plugins,\n wallets,\n}: { config?: SKConfigState; plugins?: Plugins; wallets?: Wallets } = {}) {\n if (config) {\n SKConfig.set(config);\n }\n\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n type ConnectedChains = keyof typeof connectedWallets;\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, plugin]) => {\n const methods = plugin({ getWallet });\n\n acc[pluginName as PluginName] = methods as ReturnType<Plugins[keyof Plugins]>;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key]> },\n );\n\n const connectWalletMethods = Object.entries(wallets || {}).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet.connectWallet({ addChain });\n\n acc[walletName as keyof Wallets] = connectWallet as ReturnType<\n Wallets[keyof Wallets][\"connectWallet\"]\n >;\n return acc;\n },\n {} as {\n [key in keyof Wallets]: ReturnType<Wallets[key][\"connectWallet\"]>;\n },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName?: T) {\n const availablePlugin = pluginName && availablePlugins[pluginName];\n const plugin = availablePlugin || Object.values(availablePlugins)[0];\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin as ReturnType<Plugins[T]>;\n }\n\n function addChain<T extends Chain>(\n connectWallet: Omit<ChainWallet<T>, \"balance\"> & { balance?: AssetValue[] },\n ) {\n const currentWallet = getWallet(connectWallet.chain);\n\n const balance = connectWallet.balance ||\n currentWallet.balance || [AssetValue.from({ chain: connectWallet.chain })];\n\n const wallet = { ...currentWallet, ...connectWallet, balance } as FullWallet[T];\n\n connectedWallets[connectWallet.chain] = wallet;\n\n return wallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends ConnectedChains>(chain: T) {\n return connectedWallets[chain] || {};\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n async function getWalletWithBalance<T extends Chain>(\n chain: T,\n scamFilter = true,\n ): Promise<ReturnType<typeof getWallet> & { balance: AssetValue[] }> {\n if (chain === Chain.Fiat || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);\n const defaultBalance = [AssetValue.from({ chain })];\n wallet.balance = defaultBalance;\n\n if (\"getBalance\" in wallet) {\n const balance = await wallet.getBalance(wallet.address, scamFilter);\n wallet.balance = balance;\n }\n\n return wallet;\n }\n\n function swap<T extends PluginName>({\n route,\n pluginName,\n ...rest\n }: SwapParams<T, QuoteResponseRoute>) {\n const plugin = getSwapKitPlugin(pluginName || route.providers[0]);\n\n if (\"swap\" in plugin) {\n // @ts-expect-error TODO: fix this\n return plugin.swap({ ...rest, route });\n }\n\n throw new SwapKitError(\"core_plugin_swap_not_found\");\n }\n\n function transfer({ assetValue, ...params }: GenericTransferParams | EVMTransferParams) {\n const chain = assetValue.chain;\n if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix | Chain.Near>);\n\n // we need to simplify this to one object params\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n switch (chain) {\n case Chain.THORChain: {\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const toolbox = await getCosmosToolbox(chain);\n\n return toolbox.verifySignature({ signature, message, address });\n }\n\n default:\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO clean this up\n async function estimateTransactionFee<T extends PluginName>({\n type,\n feeOptionKey,\n params,\n }: (\n | { type: \"swap\"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }\n | { type: \"transfer\"; params: EVMTransferParams | GenericTransferParams }\n | {\n type: \"approve\";\n params: {\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n feeOptionKey?: FeeOption;\n };\n }\n ) & {\n feeOptionKey: FeeOption;\n }): Promise<AssetValue | undefined> {\n const { assetValue } = params;\n const { chain } = assetValue;\n\n if (!getWallet(chain as Chain)) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Ethereum:\n case Chain.BinanceSmartChain:\n case Chain.Polygon: {\n const wallet = getWallet(chain);\n if (type === \"transfer\") {\n const txObject = await wallet.createTransferTx(params as EVMCreateTransactionParams);\n return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });\n }\n\n if (type === \"approve\" && !assetValue.isGasAsset) {\n const approvalTx = await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n });\n\n return wallet.estimateTransactionFee({ ...approvalTx, chain, feeOption: feeOptionKey });\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if ([PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)) {\n const txObject = await wallet.createTransferTx({\n sender: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\n\n return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });\n }\n\n const { tx } = params.route;\n if (!tx) {\n return undefined;\n }\n\n return wallet.estimateTransactionFee({\n ...(tx as EVMTransaction),\n value: BigInt((tx as EVMTransaction).value),\n feeOption: feeOptionKey,\n chain,\n });\n }\n\n return AssetValue.from({ chain });\n }\n\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Dash:\n case Chain.Litecoin: {\n const { estimateTransactionFee, address: recipient } = getWallet(chain);\n\n return estimateTransactionFee({ ...params, feeOptionKey, recipient, sender: recipient });\n }\n\n case Chain.THORChain:\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos: {\n const { estimateTransactionFee } = await import(\"@swapkit/toolboxes/cosmos\");\n return estimateTransactionFee(params);\n }\n\n case Chain.Polkadot: {\n const { address, estimateTransactionFee } = getWallet(chain);\n\n return estimateTransactionFee({ ...params, recipient: address });\n }\n\n case Chain.Ripple: {\n const { estimateTransactionFee } = getWallet(chain);\n\n return estimateTransactionFee();\n }\n\n default:\n return baseValue;\n }\n }\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n disconnectAll,\n disconnectChain,\n estimateTransactionFee,\n getAddress,\n getAllWallets,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n\n approveAssetValue,\n isAssetValueApproved,\n signMessage,\n swap,\n transfer,\n verifyMessage,\n };\n}\n",
7
+ "import { Chain, ChainToExplorerUrl, SwapKitError } from \"@swapkit/helpers\";\n\nexport function getExplorerTxUrl({ chain, txHash }: { txHash: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n switch (chain) {\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos:\n case Chain.THORChain:\n case Chain.Solana:\n return `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash.slice(2) : txHash}`;\n\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.BinanceSmartChain:\n case Chain.Base:\n case Chain.Ethereum:\n case Chain.Optimism:\n case Chain.Polkadot:\n case Chain.Polygon:\n return `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash : `0x${txHash}`}`;\n\n case Chain.Litecoin:\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Radix:\n return `${baseUrl}/transaction/${txHash.toLowerCase()}`;\n\n default:\n throw new SwapKitError({ errorKey: \"core_explorer_unsupported_chain\", info: { chain } });\n }\n}\n\nexport function getExplorerAddressUrl({ chain, address }: { address: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n switch (chain) {\n case Chain.Solana:\n case Chain.Radix:\n return `${baseUrl}/account/${address}`;\n\n default:\n return `${baseUrl}/address/${address}`;\n }\n}\n"
9
8
  ],
10
- "mappings": "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",
11
- "debugId": "D1A504E9AFF2E6E164756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "C6A226BD4E317C5664756E2164756E21",
12
11
  "names": []
13
12
  }
package/package.json CHANGED
@@ -1,38 +1,38 @@
1
1
  {
2
2
  "author": "swapkit-oss",
3
3
  "dependencies": {
4
- "@swapkit/api": "2.6.0",
5
- "@swapkit/helpers": "2.6.0",
6
- "@swapkit/plugin-evm": "1.3.30",
7
- "@swapkit/toolbox-cosmos": "1.10.9",
8
- "@swapkit/toolbox-evm": "1.9.7",
9
- "@swapkit/toolbox-radix": "1.2.41",
10
- "@swapkit/toolbox-solana": "1.5.4",
11
- "@swapkit/toolbox-substrate": "1.3.26",
12
- "@swapkit/toolbox-utxo": "1.3.8"
4
+ "@swapkit/helpers": "3.0.0-beta.1",
5
+ "@swapkit/toolboxes": "1.0.0-beta.1"
13
6
  },
14
7
  "description": "SwapKit - Core",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/index.cjs",
12
+ "types": "./src/index.ts"
13
+ }
14
+ },
15
15
  "files": [
16
16
  "src/",
17
17
  "dist/"
18
18
  ],
19
19
  "homepage": "https://github.com/thorswap/SwapKit",
20
20
  "license": "Apache-2.0",
21
- "main": "./dist/index.js",
22
21
  "name": "@swapkit/core",
23
22
  "repository": {
23
+ "directory": "packages/core",
24
24
  "type": "git",
25
25
  "url": "git+https://github.com/thorswap/SwapKit.git"
26
26
  },
27
27
  "scripts": {
28
28
  "build": "bun run ./build.ts",
29
+ "build:clean": "rm -rf dist && bun run ./build.ts",
29
30
  "clean": "rm -rf dist node_modules *.tsbuildinfo",
30
- "lint": "biome check --diagnostic-level=error --write ./src",
31
31
  "test": "echo 'bun test'",
32
- "test:coverage": "bun test --coverage",
33
- "type-check": "tsc --noEmit"
32
+ "test:ci": "bun test --coverage",
33
+ "type-check": "bun tsc --noEmit",
34
+ "type-check:go": "tsgo"
34
35
  },
35
36
  "type": "module",
36
- "types": "./src/index.ts",
37
- "version": "3.2.34"
38
- }
37
+ "version": "4.0.0-beta.1"
38
+ }
package/src/client.ts CHANGED
@@ -1,120 +1,102 @@
1
- import type {
2
- EVMTransaction,
3
- PriceRequest,
4
- QuoteRequest,
5
- QuoteResponseRoute,
6
- TrackerParams,
7
- } from "@swapkit/api";
8
- import { SwapKitApi } from "@swapkit/api";
1
+ import type { EVMTransaction, QuoteResponseRoute } from "@swapkit/helpers/api";
9
2
 
10
3
  import {
11
4
  ApproveMode,
12
5
  type ApproveReturnType,
13
6
  AssetValue,
14
7
  Chain,
15
- type ChainApis,
16
8
  type ChainWallet,
17
9
  type ConditionalAssetValueReturn,
18
- type ConnectConfig,
19
- type CryptoChain,
20
10
  type EVMChain,
21
11
  EVMChains,
22
12
  type FeeOption,
23
13
  type FullWallet,
14
+ type GenericTransferParams,
24
15
  ProviderName as PluginNameEnum,
16
+ SKConfig,
17
+ type SKConfigState,
25
18
  SwapKitError,
26
- type SwapKitPluginParams,
27
- type SwapKitWallet,
28
19
  type SwapParams,
20
+ type createPlugin,
21
+ type createWallet,
29
22
  } from "@swapkit/helpers";
30
- import type { TransferParams as CosmosTransferParams } from "@swapkit/toolbox-cosmos";
31
- import type { TransferParams as EVMTransferParams } from "@swapkit/toolbox-evm";
32
- import type { UTXOTransferParams } from "@swapkit/toolbox-utxo";
23
+ import type { EVMCreateTransactionParams, EVMTransferParams } from "@swapkit/toolboxes/evm";
33
24
 
34
25
  import {
35
26
  getExplorerAddressUrl as getAddressUrl,
36
27
  getExplorerTxUrl as getTxUrl,
37
28
  } from "./helpers/explorerUrls";
38
29
 
39
- export type PluginsType = {
40
- [key in string]: {
41
- plugin: (params: SwapKitPluginParams<any>) => any;
42
- config?: any;
43
- };
44
- };
45
-
46
- export type WalletsType = {
47
- [key in string]: SwapKitWallet<any[]>;
48
- };
49
-
50
30
  export type SwapKitParams<P, W> = {
51
- apis?: ChainApis;
52
- config?: ConnectConfig;
31
+ config?: SKConfigState;
53
32
  plugins?: P;
54
- rpcUrls?: { [key in CryptoChain]?: string };
55
33
  wallets?: W;
56
34
  };
57
35
 
58
- export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType>({
59
- apis = {},
60
- config = {},
36
+ export function SwapKit<
37
+ Plugins extends ReturnType<typeof createPlugin>,
38
+ Wallets extends ReturnType<typeof createWallet>,
39
+ >({
40
+ config,
61
41
  plugins,
62
- rpcUrls = {},
63
- wallets = {} as Wallets,
64
- }: SwapKitParams<Plugins, Wallets> = {}) {
65
- const stagenet = config.stagenet;
66
- const isDev = config.swapkitConfig?.isDev;
42
+ wallets,
43
+ }: { config?: SKConfigState; plugins?: Plugins; wallets?: Wallets } = {}) {
44
+ if (config) {
45
+ SKConfig.set(config);
46
+ }
47
+
67
48
  type PluginName = keyof Plugins;
68
49
  const connectedWallets = {} as FullWallet;
50
+ type ConnectedChains = keyof typeof connectedWallets;
69
51
 
70
52
  const availablePlugins = Object.entries(plugins || {}).reduce(
71
- (acc, [pluginName, { plugin, config: pluginConfig }]) => {
72
- const methods = plugin({ getWallet, stagenet, config: pluginConfig ?? config });
53
+ (acc, [pluginName, plugin]) => {
54
+ const methods = plugin({ getWallet });
73
55
 
74
- // @ts-expect-error key is generic and cannot be indexed
75
- acc[pluginName] = methods;
56
+ acc[pluginName as PluginName] = methods as ReturnType<Plugins[keyof Plugins]>;
76
57
  return acc;
77
58
  },
78
- {} as { [key in PluginName]: ReturnType<Plugins[key]["plugin"]> },
59
+ {} as { [key in PluginName]: ReturnType<Plugins[key]> },
79
60
  );
80
61
 
81
- const connectWalletMethods = Object.entries(wallets).reduce(
62
+ const connectWalletMethods = Object.entries(wallets || {}).reduce(
82
63
  (acc, [walletName, wallet]) => {
83
- const connectWallet = wallet({ addChain, config, apis, rpcUrls });
64
+ const connectWallet = wallet.connectWallet({ addChain });
84
65
 
85
- // @ts-expect-error walletName is generic and cannot be indexed
86
- acc[walletName] = connectWallet;
66
+ acc[walletName as keyof Wallets] = connectWallet as ReturnType<
67
+ Wallets[keyof Wallets]["connectWallet"]
68
+ >;
87
69
  return acc;
88
70
  },
89
- {} as { [key in keyof Wallets]: ReturnType<Wallets[key]> },
71
+ {} as {
72
+ [key in keyof Wallets]: ReturnType<Wallets[key]["connectWallet"]>;
73
+ },
90
74
  );
91
75
 
92
- function getSwapKitPlugin<T extends PluginName>(pluginName: T) {
93
- const plugin = availablePlugins[pluginName] || Object.values(availablePlugins)[0];
76
+ function getSwapKitPlugin<T extends PluginName>(pluginName?: T) {
77
+ const availablePlugin = pluginName && availablePlugins[pluginName];
78
+ const plugin = availablePlugin || Object.values(availablePlugins)[0];
94
79
 
95
80
  if (!plugin) {
96
81
  throw new SwapKitError("core_plugin_not_found");
97
82
  }
98
83
 
99
- return plugin;
84
+ return plugin as ReturnType<Plugins[T]>;
100
85
  }
101
86
 
102
- function getSwapKitPluginForSKProvider(pluginName: PluginNameEnum): Plugins[keyof Plugins] {
103
- const plugin = Object.values(availablePlugins).find((plugin) =>
104
- plugin.supportedSwapkitProviders?.includes(pluginName),
105
- );
87
+ function addChain<T extends Chain>(
88
+ connectWallet: Omit<ChainWallet<T>, "balance"> & { balance?: AssetValue[] },
89
+ ) {
90
+ const currentWallet = getWallet(connectWallet.chain);
106
91
 
107
- if (!plugin) {
108
- throw new SwapKitError("core_plugin_not_found");
109
- }
92
+ const balance = connectWallet.balance ||
93
+ currentWallet.balance || [AssetValue.from({ chain: connectWallet.chain })];
110
94
 
111
- return plugin;
112
- }
95
+ const wallet = { ...currentWallet, ...connectWallet, balance } as FullWallet[T];
113
96
 
114
- function addChain<T extends CryptoChain>(connectWallet: ChainWallet<T>) {
115
- const currentWallet = getWallet(connectWallet.chain);
97
+ connectedWallets[connectWallet.chain] = wallet;
116
98
 
117
- connectedWallets[connectWallet.chain] = { ...currentWallet, ...connectWallet };
99
+ return wallet;
118
100
  }
119
101
 
120
102
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>
@@ -131,9 +113,11 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
131
113
 
132
114
  if (plugin) {
133
115
  if (type === ApproveMode.CheckOnly && "isAssetValueApproved" in plugin) {
116
+ // @ts-expect-error TODO: add optional approve for plugin
134
117
  return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;
135
118
  }
136
119
  if (type === ApproveMode.Approve && "approveAssetValue" in plugin) {
120
+ // @ts-expect-error TODO: add optional approve for plugin
137
121
  return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;
138
122
  }
139
123
 
@@ -170,8 +154,8 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
170
154
  /**
171
155
  * @Public
172
156
  */
173
- function getWallet<T extends Chain>(chain: T) {
174
- return connectedWallets[chain];
157
+ function getWallet<T extends ConnectedChains>(chain: T) {
158
+ return connectedWallets[chain] || {};
175
159
  }
176
160
 
177
161
  function getAllWallets() {
@@ -213,26 +197,20 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
213
197
  ) as ConditionalAssetValueReturn<R>;
214
198
  }
215
199
 
216
- /**
217
- * @deprecated - use toolbox directly or use getAddressValidator() function
218
- */
219
- function validateAddress(_: { address: string; chain: Chain }) {
220
- throw new SwapKitError("not_implemented", {
221
- message:
222
- "validateAddress is deprecated - use toolbox directly or import { getAddressValidator } from '@swapkit/core'",
223
- });
224
- }
225
-
226
- async function getWalletWithBalance<T extends Chain>(chain: T, potentialScamFilter = true) {
200
+ async function getWalletWithBalance<T extends Chain>(
201
+ chain: T,
202
+ scamFilter = true,
203
+ ): Promise<ReturnType<typeof getWallet> & { balance: AssetValue[] }> {
227
204
  if (chain === Chain.Fiat || !getWallet(chain)) {
228
205
  throw new SwapKitError("core_wallet_connection_not_found");
229
206
  }
230
207
  const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);
231
208
  const defaultBalance = [AssetValue.from({ chain })];
209
+ wallet.balance = defaultBalance;
232
210
 
233
211
  if ("getBalance" in wallet) {
234
- const balance = await wallet.getBalance(wallet.address, potentialScamFilter);
235
- wallet.balance = balance?.length ? balance : defaultBalance;
212
+ const balance = await wallet.getBalance(wallet.address, scamFilter);
213
+ wallet.balance = balance;
236
214
  }
237
215
 
238
216
  return wallet;
@@ -243,29 +221,24 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
243
221
  pluginName,
244
222
  ...rest
245
223
  }: SwapParams<T, QuoteResponseRoute>) {
246
- const plugin =
247
- (pluginName && getSwapKitPlugin(pluginName)) ||
248
- getSwapKitPluginForSKProvider(route.providers[0] as PluginNameEnum);
249
-
250
- if (!plugin) throw new SwapKitError("core_swap_route_not_complete");
224
+ const plugin = getSwapKitPlugin(pluginName || route.providers[0]);
251
225
 
252
226
  if ("swap" in plugin) {
227
+ // @ts-expect-error TODO: fix this
253
228
  return plugin.swap({ ...rest, route });
254
229
  }
255
230
 
256
231
  throw new SwapKitError("core_plugin_swap_not_found");
257
232
  }
258
233
 
259
- function transfer({
260
- assetValue,
261
- ...params
262
- }: UTXOTransferParams | EVMTransferParams | CosmosTransferParams) {
234
+ function transfer({ assetValue, ...params }: GenericTransferParams | EVMTransferParams) {
263
235
  const chain = assetValue.chain;
264
236
  if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {
265
237
  throw new SwapKitError("core_wallet_connection_not_found");
266
238
  }
267
- const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix>);
239
+ const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix | Chain.Near>);
268
240
 
241
+ // we need to simplify this to one object params
269
242
  return wallet.transfer({ ...params, assetValue });
270
243
  }
271
244
 
@@ -291,9 +264,10 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
291
264
  }: { chain: Chain; signature: string; message: string; address: string }) {
292
265
  switch (chain) {
293
266
  case Chain.THORChain: {
294
- const { getToolboxByChain } = await import("@swapkit/toolbox-cosmos");
295
- const toolbox = getToolboxByChain(chain);
296
- return toolbox().verifySignature({ signature, message, address });
267
+ const { getCosmosToolbox } = await import("@swapkit/toolboxes/cosmos");
268
+ const toolbox = await getCosmosToolbox(chain);
269
+
270
+ return toolbox.verifySignature({ signature, message, address });
297
271
  }
298
272
 
299
273
  default:
@@ -308,7 +282,7 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
308
282
  params,
309
283
  }: (
310
284
  | { type: "swap"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }
311
- | { type: "transfer"; params: UTXOTransferParams | EVMTransferParams | CosmosTransferParams }
285
+ | { type: "transfer"; params: EVMTransferParams | GenericTransferParams }
312
286
  | {
313
287
  type: "approve";
314
288
  params: {
@@ -335,31 +309,31 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
335
309
  case Chain.Polygon: {
336
310
  const wallet = getWallet(chain);
337
311
  if (type === "transfer") {
338
- const txObject = await wallet.createTransferTx(params);
339
- return wallet.estimateTransactionFee(txObject, feeOptionKey);
312
+ const txObject = await wallet.createTransferTx(params as EVMCreateTransactionParams);
313
+ return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });
340
314
  }
341
315
 
342
316
  if (type === "approve" && !assetValue.isGasAsset) {
343
- return wallet.estimateTransactionFee(
344
- await wallet.createApprovalTx({
345
- assetAddress: assetValue.address as string,
346
- spenderAddress: params.contractAddress as string,
347
- amount: assetValue.getBaseValue("bigint"),
348
- from: wallet.address,
349
- }),
350
- feeOptionKey,
351
- );
317
+ const approvalTx = await wallet.createApprovalTx({
318
+ assetAddress: assetValue.address as string,
319
+ spenderAddress: params.contractAddress as string,
320
+ amount: assetValue.getBaseValue("bigint"),
321
+ from: wallet.address,
322
+ });
323
+
324
+ return wallet.estimateTransactionFee({ ...approvalTx, chain, feeOption: feeOptionKey });
352
325
  }
353
326
 
354
327
  if (type === "swap") {
355
328
  const plugin = params.route.providers[0] as PluginNameEnum;
356
329
  if ([PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)) {
357
330
  const txObject = await wallet.createTransferTx({
358
- from: wallet.address,
331
+ sender: wallet.address,
359
332
  recipient: wallet.address,
360
333
  assetValue,
361
334
  });
362
- return wallet.estimateTransactionFee(txObject, feeOptionKey);
335
+
336
+ return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });
363
337
  }
364
338
 
365
339
  const { tx } = params.route;
@@ -367,10 +341,12 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
367
341
  return undefined;
368
342
  }
369
343
 
370
- return wallet.estimateTransactionFee(
371
- { ...(tx as EVMTransaction), value: BigInt((tx as EVMTransaction).value) },
372
- feeOptionKey,
373
- );
344
+ return wallet.estimateTransactionFee({
345
+ ...(tx as EVMTransaction),
346
+ value: BigInt((tx as EVMTransaction).value),
347
+ feeOption: feeOptionKey,
348
+ chain,
349
+ });
374
350
  }
375
351
 
376
352
  return AssetValue.from({ chain });
@@ -381,21 +357,16 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
381
357
  case Chain.Dogecoin:
382
358
  case Chain.Dash:
383
359
  case Chain.Litecoin: {
384
- const { estimateTransactionFee, address } = getWallet(chain);
385
-
386
- return estimateTransactionFee({
387
- ...params,
388
- feeOptionKey,
389
- from: address,
390
- recipient: address,
391
- });
360
+ const { estimateTransactionFee, address: recipient } = getWallet(chain);
361
+
362
+ return estimateTransactionFee({ ...params, feeOptionKey, recipient, sender: recipient });
392
363
  }
393
364
 
394
365
  case Chain.THORChain:
395
366
  case Chain.Maya:
396
367
  case Chain.Kujira:
397
368
  case Chain.Cosmos: {
398
- const { estimateTransactionFee } = await import("@swapkit/toolbox-cosmos");
369
+ const { estimateTransactionFee } = await import("@swapkit/toolboxes/cosmos");
399
370
  return estimateTransactionFee(params);
400
371
  }
401
372
 
@@ -405,31 +376,17 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
405
376
  return estimateTransactionFee({ ...params, recipient: address });
406
377
  }
407
378
 
379
+ case Chain.Ripple: {
380
+ const { estimateTransactionFee } = getWallet(chain);
381
+
382
+ return estimateTransactionFee();
383
+ }
384
+
408
385
  default:
409
386
  return baseValue;
410
387
  }
411
388
  }
412
389
 
413
- const swapkitConfig = config.swapkitConfig || {};
414
- const swapkitApiKey = swapkitConfig?.swapkitApiKey || config?.swapkitApiKey;
415
- const referer = swapkitConfig.useHashedApiKey ? swapkitConfig.referer : undefined;
416
-
417
- const api = swapkitApiKey
418
- ? {
419
- getGasRate: () => SwapKitApi.getGasRate(isDev, swapkitApiKey, referer),
420
- getPrice: (body: PriceRequest) => SwapKitApi.getPrice(body, isDev, swapkitApiKey, referer),
421
- getSwapQuote: (params: QuoteRequest) =>
422
- SwapKitApi.getSwapQuote(params, isDev, swapkitApiKey, referer),
423
- getTokenList: (provider: PluginNameEnum) => SwapKitApi.getTokenList(provider),
424
- getTokenListProviders: () =>
425
- SwapKitApi.getTokenListProvidersV2(isDev, swapkitApiKey, referer),
426
- getTokenTradingPairs: (providers: PluginNameEnum[]) =>
427
- SwapKitApi.getTokenTradingPairs(providers, isDev, swapkitApiKey, referer),
428
- getTrackerDetails: (payload: TrackerParams) =>
429
- SwapKitApi.getTrackerDetails(payload, swapkitApiKey, referer),
430
- }
431
- : { undefined };
432
-
433
390
  return {
434
391
  ...availablePlugins,
435
392
  ...connectWalletMethods,
@@ -450,8 +407,6 @@ export function SwapKit<Plugins extends PluginsType, Wallets extends WalletsType
450
407
  signMessage,
451
408
  swap,
452
409
  transfer,
453
- validateAddress,
454
410
  verifyMessage,
455
- api,
456
411
  };
457
412
  }
package/src/index.ts CHANGED
@@ -1,4 +1,3 @@
1
- export * from "@swapkit/api";
1
+ export * from "@swapkit/helpers/api";
2
2
  export * from "@swapkit/helpers";
3
3
  export * from "./client";
4
- export * from "./helpers/walletAddressValidator";
@@ -1,52 +0,0 @@
1
- import { Chain } from "@swapkit/helpers";
2
-
3
- export async function getAddressValidator() {
4
- const { cosmosValidateAddress } = await import("@swapkit/toolbox-cosmos");
5
- const { evmValidateAddress } = await import("@swapkit/toolbox-evm");
6
- const { substrateValidateAddress } = await import("@swapkit/toolbox-substrate");
7
- const { utxoValidateAddress } = await import("@swapkit/toolbox-utxo");
8
- const { validateAddress: solanaValidateAddress } = await import("@swapkit/toolbox-solana");
9
- const { validateAddress: validateRadixAddress } = await import("@swapkit/toolbox-radix");
10
-
11
- return function validateAddress({ address, chain }: { address: string; chain: Chain }) {
12
- switch (chain) {
13
- case Chain.Arbitrum:
14
- case Chain.Avalanche:
15
- case Chain.Optimism:
16
- case Chain.BinanceSmartChain:
17
- case Chain.Base:
18
- case Chain.Polygon:
19
- case Chain.Ethereum:
20
- return evmValidateAddress({ address });
21
-
22
- case Chain.Litecoin:
23
- case Chain.Dash:
24
- case Chain.Dogecoin:
25
- case Chain.BitcoinCash:
26
- case Chain.Bitcoin:
27
- return utxoValidateAddress({ address, chain });
28
-
29
- case Chain.Cosmos:
30
- case Chain.Kujira:
31
- case Chain.Maya:
32
- case Chain.THORChain: {
33
- return cosmosValidateAddress({ address, chain });
34
- }
35
-
36
- case Chain.Polkadot: {
37
- return substrateValidateAddress({ address, chain });
38
- }
39
-
40
- case Chain.Radix: {
41
- return validateRadixAddress(address);
42
- }
43
-
44
- case Chain.Solana: {
45
- return solanaValidateAddress(address);
46
- }
47
-
48
- default:
49
- return false;
50
- }
51
- };
52
- }