@swapkit/core 4.0.0-beta.0 → 4.0.0-beta.10

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 CHANGED
@@ -1,3 +1,3 @@
1
- var l=Object.create;var{getPrototypeOf:a,defineProperty:P,getOwnPropertyNames:f,getOwnPropertyDescriptor:e}=Object,O=Object.prototype.hasOwnProperty,Z=(_,D,j)=>{for(let U of f(D))if(!O.call(_,U)&&U!=="default")P(_,U,{get:()=>D[U],enumerable:!0});if(j){for(let U of f(D))if(!O.call(j,U)&&U!=="default")P(j,U,{get:()=>D[U],enumerable:!0});return j}},H=(_,D,j)=>{j=_!=null?l(a(_)):{};let U=D||!_||!_.__esModule?P(j,"default",{value:_,enumerable:!0}):j;for(let k of f(_))if(!O.call(U,k))P(U,k,{get:()=>_[k],enumerable:!0});return U},N=new WeakMap,$$=(_)=>{var D=N.get(_),j;if(D)return D;if(D=P({},"__esModule",{value:!0}),_&&typeof _==="object"||typeof _==="function")f(_).map((U)=>!O.call(D,U)&&P(D,U,{get:()=>_[U],enumerable:!(j=e(_,U))||j.enumerable}));return N.set(_,D),D};var S=(_,D)=>{for(var j in D)P(_,j,{get:D[j],enumerable:!0,configurable:!0,set:(U)=>D[j]=()=>U})};var Y={};S(Y,{getAddressValidator:()=>d,SwapKit:()=>o});module.exports=$$(Y);Z(Y,require("@swapkit/helpers/api"),module.exports);Z(Y,require("@swapkit/helpers"),module.exports);var m={};S(m,{SwapKit:()=>o});var R=require("@swapkit/helpers");var q=require("@swapkit/helpers");function y({chain:_,txHash:D}){let j=q.ChainToExplorerUrl[_];switch(_){case q.Chain.Maya:case q.Chain.Kujira:case q.Chain.Cosmos:case q.Chain.THORChain:case q.Chain.Solana:return`${j}/tx/${D.startsWith("0x")?D.slice(2):D}`;case q.Chain.Arbitrum:case q.Chain.Avalanche:case q.Chain.BinanceSmartChain:case q.Chain.Base:case q.Chain.Ethereum:case q.Chain.Optimism:case q.Chain.Polkadot:case q.Chain.Polygon:return`${j}/tx/${D.startsWith("0x")?D:`0x${D}`}`;case q.Chain.Litecoin:case q.Chain.Bitcoin:case q.Chain.BitcoinCash:case q.Chain.Dogecoin:case q.Chain.Radix:return`${j}/transaction/${D.toLowerCase()}`;default:throw new q.SwapKitError({errorKey:"core_explorer_unsupported_chain",info:{chain:_}})}}function K({chain:_,address:D}){let j=q.ChainToExplorerUrl[_];switch(_){case q.Chain.Solana:case q.Chain.Radix:return`${j}/account/${D}`;default:return`${j}/address/${D}`}}function o({config:_,plugins:D,wallets:j={}}={}){if(_)R.SKConfig.set(_);let U={},k=Object.entries(D||{}).reduce(($,[B,L])=>{let z=L({getWallet:J});return $[B]=z,$},{}),b=Object.entries(j||{}).reduce(($,[B,L])=>{let z=L.connectWallet({addChain:x});return $[B]=z,$},{});function v($){let B=k[$]||Object.values(k)[0];if(!B)throw new R.SwapKitError("core_plugin_not_found");return B}function E($){let B=Object.values(k).find((L)=>L.supportedSwapkitProviders?.includes($));if(!B)throw new R.SwapKitError("core_plugin_not_found");return B}function x($){let B=J($.chain);U[$.chain]={...B,...$}}function T({assetValue:$,type:B="checkOnly",contractAddress:L}){let z=k[L];if(z){if(B===R.ApproveMode.CheckOnly&&"isAssetValueApproved"in z)return z.isAssetValueApproved({assetValue:$});if(B===R.ApproveMode.Approve&&"approveAssetValue"in z)return z.approveAssetValue({assetValue:$});throw new R.SwapKitError({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(L)} cannot be used for approve operation`}})}let Q=$.chain,M=R.EVMChains.includes(Q);if(M&&$.isGasAsset||!M||$.isSynthetic)return Promise.resolve(B==="checkOnly"?!0:"approved");let X=J(Q),F=B==="checkOnly"?X.isApproved:X.approve;if(!F)throw new R.SwapKitError("core_wallet_connection_not_found");if(!($.address&&X.address&&typeof L==="string"))throw new R.SwapKitError("core_approve_asset_address_or_from_not_found");return F({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:X.address,spenderAddress:L})}function J($){return U[$]}function W(){return{...U}}function w($){return J($)?.address||""}function r($,B){return T({assetValue:$,contractAddress:B,type:R.ApproveMode.Approve})}function u($,B){return T({assetValue:$,contractAddress:B,type:R.ApproveMode.CheckOnly})}function A($){J($)?.disconnect?.(),delete U[$]}function c(){for(let $ of Object.keys(U))A($)}function h($,B){return B?C($).then(({balance:L})=>L):J($)?.balance||[]}async function C($,B=!0){if($===R.Chain.Fiat||!J($))throw new R.SwapKitError("core_wallet_connection_not_found");let L=J($),z=[R.AssetValue.from({chain:$})];if("getBalance"in L){let Q=await L.getBalance(L.address,B);L.balance=Q?.length?Q:z}return L}function g({route:$,pluginName:B,...L}){let z=B&&v(B)||E($.providers[0]);if(!z)throw new R.SwapKitError("core_swap_route_not_complete");if("swap"in z)return z.swap({...L,route:$});throw new R.SwapKitError("core_plugin_swap_not_found")}function i({assetValue:$,...B}){let L=$.chain;if([R.Chain.Fiat,R.Chain.Radix].includes(L)||!J(L))throw new R.SwapKitError("core_wallet_connection_not_found");return J(L).transfer({...B,assetValue:$})}function p({chain:$,message:B}){let L=J($);if(!L)throw new R.SwapKitError("core_wallet_connection_not_found");if("signMessage"in L)return L.signMessage?.(B);throw new R.SwapKitError({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:L.walletType}})}async function s({address:$,chain:B,message:L,signature:z}){switch(B){case R.Chain.THORChain:{let{getToolboxByChain:Q}=await import("@swapkit/toolboxes/cosmos");return Q(B)().verifySignature({signature:z,message:L,address:$})}default:throw new R.SwapKitError({errorKey:"core_verify_message_not_supported",info:{chain:B}})}}async function n({type:$,feeOptionKey:B,params:L}){let{assetValue:z}=L,{chain:Q}=z;if(!J(Q))throw new R.SwapKitError("core_wallet_connection_not_found");let M=R.AssetValue.from({chain:Q});switch(Q){case R.Chain.Arbitrum:case R.Chain.Avalanche:case R.Chain.Ethereum:case R.Chain.BinanceSmartChain:case R.Chain.Polygon:{let I=J(Q);if($==="transfer"){let X=await I.createTransferTx(L);return I.estimateTransactionFee(X,B)}if($==="approve"&&!z.isGasAsset){let X=await I.createApprovalTx({assetAddress:z.address,spenderAddress:L.contractAddress,amount:z.getBaseValue("bigint"),from:I.address});return I.estimateTransactionFee(X,B)}if($==="swap"){let X=L.route.providers[0];if([R.ProviderName.CHAINFLIP,R.ProviderName.CHAINFLIP_STREAMING].includes(X)){let t=await I.createTransferTx({from:I.address,recipient:I.address,assetValue:z});return I.estimateTransactionFee(t,B)}let{tx:F}=L.route;if(!F)return;return I.estimateTransactionFee({...F,value:BigInt(F.value)},B)}return R.AssetValue.from({chain:Q})}case R.Chain.Bitcoin:case R.Chain.BitcoinCash:case R.Chain.Dogecoin:case R.Chain.Dash:case R.Chain.Litecoin:{let{estimateTransactionFee:I,address:X}=J(Q);return I({...L,feeOptionKey:B,from:X,recipient:X})}case R.Chain.THORChain:case R.Chain.Maya:case R.Chain.Kujira:case R.Chain.Cosmos:{let{estimateTransactionFee:I}=await import("@swapkit/toolboxes/cosmos");return I(L)}case R.Chain.Polkadot:{let{address:I,estimateTransactionFee:X}=J(Q);return X({...L,recipient:I})}default:return M}}return{...k,...b,disconnectAll:c,disconnectChain:A,estimateTransactionFee:n,getAddress:w,getAllWallets:W,getBalance:h,getExplorerAddressUrl:K,getExplorerTxUrl:y,getWallet:J,getWalletWithBalance:C,approveAssetValue:r,isAssetValueApproved:u,signMessage:p,swap:g,transfer:i,verifyMessage:s}}var V={};S(V,{getAddressValidator:()=>d});var G=require("@swapkit/helpers");async function d(){let{cosmosValidateAddress:_}=await import("@swapkit/toolboxes/cosmos"),{evmValidateAddress:D}=await import("@swapkit/toolboxes/evm"),{substrateValidateAddress:j}=await import("@swapkit/toolboxes/substrate"),{utxoValidateAddress:U}=await import("@swapkit/toolboxes/utxo"),{getAddressValidator:k}=await import("@swapkit/toolboxes/solana"),{validateAddress:b}=await import("@swapkit/toolboxes/radix"),v=await k();return function E({address:x,chain:T}){switch(T){case G.Chain.Arbitrum:case G.Chain.Avalanche:case G.Chain.Optimism:case G.Chain.BinanceSmartChain:case G.Chain.Base:case G.Chain.Polygon:case G.Chain.Ethereum:return D({address:x});case G.Chain.Litecoin:case G.Chain.Dash:case G.Chain.Dogecoin:case G.Chain.BitcoinCash:case G.Chain.Bitcoin:return U({address:x,chain:T});case G.Chain.Cosmos:case G.Chain.Kujira:case G.Chain.Maya:case G.Chain.THORChain:return _({address:x,chain:T});case G.Chain.Polkadot:return j({address:x,chain:T});case G.Chain.Radix:return b(x);case G.Chain.Solana:return v(x);default:return!1}}}
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
2
 
3
- //# debugId=0CC9B5CEB4068C0B64756E2164756E21
3
+ //# debugId=922824806F9EC96164756E2164756E21
@@ -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/helpers/api\";\nexport * from \"@swapkit/helpers\";\nexport * from \"./client\";\nexport * from \"./helpers/walletAddressValidator\";\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 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 { TransferParams as CosmosTransferParams } from \"@swapkit/toolboxes/cosmos\";\nimport type { TransferParams as EVMTransferParams } from \"@swapkit/toolboxes/evm\";\nimport type { UTXOTransferParams } from \"@swapkit/toolboxes/utxo\";\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>({ config, plugins, wallets = {} as Wallets }: SwapKitParams<Plugins, Wallets> = {}) {\n if (config) {\n SKConfig.set(config);\n }\n\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, plugin]) => {\n const methods = plugin({ getWallet });\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]> },\n );\n\n const connectWalletMethods = Object.entries(wallets || {}).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet.connectWallet({ addChain });\n\n // @ts-expect-error key is generic and cannot be indexed\n acc[walletName] = connectWallet;\n return acc;\n },\n {} as {\n [key in keyof typeof wallets]: ReturnType<(typeof wallets)[key][\"connectWallet\"]>;\n },\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) {\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 Chain>(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 // @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 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 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 // @ts-expect-error TODO: right now it's inferred from toolboxes\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 { getToolboxByChain } = await import(\"@swapkit/toolboxes/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 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, 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 from: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\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/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 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
- "import { Chain } from \"@swapkit/helpers\";\n\nexport async function getAddressValidator() {\n const { cosmosValidateAddress } = await import(\"@swapkit/toolboxes/cosmos\");\n const { evmValidateAddress } = await import(\"@swapkit/toolboxes/evm\");\n const { substrateValidateAddress } = await import(\"@swapkit/toolboxes/substrate\");\n const { utxoValidateAddress } = await import(\"@swapkit/toolboxes/utxo\");\n const { getAddressValidator: getSolValidator } = await import(\"@swapkit/toolboxes/solana\");\n const { validateAddress: validateRadixAddress } = await import(\"@swapkit/toolboxes/radix\");\n\n const solanaValidateAddress = await getSolValidator();\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": "0CC9B5CEB4068C0B64756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "922824806F9EC96164756E2164756E21",
12
11
  "names": []
13
12
  }
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- var p=Object.create;var{getPrototypeOf:s,defineProperty:A,getOwnPropertyNames:n}=Object;var t=Object.prototype.hasOwnProperty;var x=(L,q,G)=>{G=L!=null?p(s(L)):{};let Y=q||!L||!L.__esModule?A(G,"default",{value:L,enumerable:!0}):G;for(let Z of n(L))if(!t.call(Y,Z))A(Y,Z,{get:()=>L[Z],enumerable:!0});return Y};var H=((L)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(L,{get:(q,G)=>(typeof require!=="undefined"?require:q)[G]}):L)(function(L){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+L+'" is not supported')});export*from"@swapkit/helpers/api";export*from"@swapkit/helpers";import{ApproveMode as M,AssetValue as b,Chain as U,EVMChains as a,ProviderName as K,SKConfig as e,SwapKitError as X}from"@swapkit/helpers";import{Chain as D,ChainToExplorerUrl as C,SwapKitError as l}from"@swapkit/helpers";function N({chain:L,txHash:q}){let G=C[L];switch(L){case D.Maya:case D.Kujira:case D.Cosmos:case D.THORChain:case D.Solana:return`${G}/tx/${q.startsWith("0x")?q.slice(2):q}`;case D.Arbitrum:case D.Avalanche:case D.BinanceSmartChain:case D.Base:case D.Ethereum:case D.Optimism:case D.Polkadot:case D.Polygon:return`${G}/tx/${q.startsWith("0x")?q:`0x${q}`}`;case D.Litecoin:case D.Bitcoin:case D.BitcoinCash:case D.Dogecoin:case D.Radix:return`${G}/transaction/${q.toLowerCase()}`;default:throw new l({errorKey:"core_explorer_unsupported_chain",info:{chain:L}})}}function y({chain:L,address:q}){let G=C[L];switch(L){case D.Solana:case D.Radix:return`${G}/account/${q}`;default:return`${G}/address/${q}`}}function D$({config:L,plugins:q,wallets:G={}}={}){if(L)e.set(L);let Y={},Z=Object.entries(q||{}).reduce(($,[R,B])=>{let _=B({getWallet:I});return $[R]=_,$},{}),f=Object.entries(G||{}).reduce(($,[R,B])=>{let _=B.connectWallet({addChain:k});return $[R]=_,$},{});function O($){let R=Z[$]||Object.values(Z)[0];if(!R)throw new X("core_plugin_not_found");return R}function v($){let R=Object.values(Z).find((B)=>B.supportedSwapkitProviders?.includes($));if(!R)throw new X("core_plugin_not_found");return R}function k($){let R=I($.chain);Y[$.chain]={...R,...$}}function T({assetValue:$,type:R="checkOnly",contractAddress:B}){let _=Z[B];if(_){if(R===M.CheckOnly&&"isAssetValueApproved"in _)return _.isAssetValueApproved({assetValue:$});if(R===M.Approve&&"approveAssetValue"in _)return _.approveAssetValue({assetValue:$});throw new X({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(B)} cannot be used for approve operation`}})}let J=$.chain,F=a.includes(J);if(F&&$.isGasAsset||!F||$.isSynthetic)return Promise.resolve(R==="checkOnly"?!0:"approved");let Q=I(J),P=R==="checkOnly"?Q.isApproved:Q.approve;if(!P)throw new X("core_wallet_connection_not_found");if(!($.address&&Q.address&&typeof B==="string"))throw new X("core_approve_asset_address_or_from_not_found");return P({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:Q.address,spenderAddress:B})}function I($){return Y[$]}function o(){return{...Y}}function m($){return I($)?.address||""}function d($,R){return T({assetValue:$,contractAddress:R,type:M.Approve})}function V($,R){return T({assetValue:$,contractAddress:R,type:M.CheckOnly})}function S($){I($)?.disconnect?.(),delete Y[$]}function W(){for(let $ of Object.keys(Y))S($)}function w($,R){return R?E($).then(({balance:B})=>B):I($)?.balance||[]}async function E($,R=!0){if($===U.Fiat||!I($))throw new X("core_wallet_connection_not_found");let B=I($),_=[b.from({chain:$})];if("getBalance"in B){let J=await B.getBalance(B.address,R);B.balance=J?.length?J:_}return B}function r({route:$,pluginName:R,...B}){let _=R&&O(R)||v($.providers[0]);if(!_)throw new X("core_swap_route_not_complete");if("swap"in _)return _.swap({...B,route:$});throw new X("core_plugin_swap_not_found")}function u({assetValue:$,...R}){let B=$.chain;if([U.Fiat,U.Radix].includes(B)||!I(B))throw new X("core_wallet_connection_not_found");return I(B).transfer({...R,assetValue:$})}function c({chain:$,message:R}){let B=I($);if(!B)throw new X("core_wallet_connection_not_found");if("signMessage"in B)return B.signMessage?.(R);throw new X({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:B.walletType}})}async function h({address:$,chain:R,message:B,signature:_}){switch(R){case U.THORChain:{let{getToolboxByChain:J}=await import("@swapkit/toolboxes/cosmos");return J(R)().verifySignature({signature:_,message:B,address:$})}default:throw new X({errorKey:"core_verify_message_not_supported",info:{chain:R}})}}async function g({type:$,feeOptionKey:R,params:B}){let{assetValue:_}=B,{chain:J}=_;if(!I(J))throw new X("core_wallet_connection_not_found");let F=b.from({chain:J});switch(J){case U.Arbitrum:case U.Avalanche:case U.Ethereum:case U.BinanceSmartChain:case U.Polygon:{let z=I(J);if($==="transfer"){let Q=await z.createTransferTx(B);return z.estimateTransactionFee(Q,R)}if($==="approve"&&!_.isGasAsset){let Q=await z.createApprovalTx({assetAddress:_.address,spenderAddress:B.contractAddress,amount:_.getBaseValue("bigint"),from:z.address});return z.estimateTransactionFee(Q,R)}if($==="swap"){let Q=B.route.providers[0];if([K.CHAINFLIP,K.CHAINFLIP_STREAMING].includes(Q)){let i=await z.createTransferTx({from:z.address,recipient:z.address,assetValue:_});return z.estimateTransactionFee(i,R)}let{tx:P}=B.route;if(!P)return;return z.estimateTransactionFee({...P,value:BigInt(P.value)},R)}return b.from({chain:J})}case U.Bitcoin:case U.BitcoinCash:case U.Dogecoin:case U.Dash:case U.Litecoin:{let{estimateTransactionFee:z,address:Q}=I(J);return z({...B,feeOptionKey:R,from:Q,recipient:Q})}case U.THORChain:case U.Maya:case U.Kujira:case U.Cosmos:{let{estimateTransactionFee:z}=await import("@swapkit/toolboxes/cosmos");return z(B)}case U.Polkadot:{let{address:z,estimateTransactionFee:Q}=I(J);return Q({...B,recipient:z})}default:return F}}return{...Z,...f,disconnectAll:W,disconnectChain:S,estimateTransactionFee:g,getAddress:m,getAllWallets:o,getBalance:w,getExplorerAddressUrl:y,getExplorerTxUrl:N,getWallet:I,getWalletWithBalance:E,approveAssetValue:d,isAssetValueApproved:V,signMessage:c,swap:r,transfer:u,verifyMessage:h}}import{Chain as j}from"@swapkit/helpers";async function q$(){let{cosmosValidateAddress:L}=await import("@swapkit/toolboxes/cosmos"),{evmValidateAddress:q}=await import("@swapkit/toolboxes/evm"),{substrateValidateAddress:G}=await import("@swapkit/toolboxes/substrate"),{utxoValidateAddress:Y}=await import("@swapkit/toolboxes/utxo"),{getAddressValidator:Z}=await import("@swapkit/toolboxes/solana"),{validateAddress:f}=await import("@swapkit/toolboxes/radix"),O=await Z();return function v({address:k,chain:T}){switch(T){case j.Arbitrum:case j.Avalanche:case j.Optimism:case j.BinanceSmartChain:case j.Base:case j.Polygon:case j.Ethereum:return q({address:k});case j.Litecoin:case j.Dash:case j.Dogecoin:case j.BitcoinCash:case j.Bitcoin:return Y({address:k,chain:T});case j.Cosmos:case j.Kujira:case j.Maya:case j.THORChain:return L({address:k,chain:T});case j.Polkadot:return G({address:k,chain:T});case j.Radix:return f(k);case j.Solana:return O(k);default:return!1}}}export{q$ as getAddressValidator,D$ 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=2A42EE8D75A4550964756E2164756E21
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/helpers/api\";\nexport * from \"@swapkit/helpers\";\nexport * from \"./client\";\nexport * from \"./helpers/walletAddressValidator\";\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 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 { TransferParams as CosmosTransferParams } from \"@swapkit/toolboxes/cosmos\";\nimport type { TransferParams as EVMTransferParams } from \"@swapkit/toolboxes/evm\";\nimport type { UTXOTransferParams } from \"@swapkit/toolboxes/utxo\";\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>({ config, plugins, wallets = {} as Wallets }: SwapKitParams<Plugins, Wallets> = {}) {\n if (config) {\n SKConfig.set(config);\n }\n\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, plugin]) => {\n const methods = plugin({ getWallet });\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]> },\n );\n\n const connectWalletMethods = Object.entries(wallets || {}).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet.connectWallet({ addChain });\n\n // @ts-expect-error key is generic and cannot be indexed\n acc[walletName] = connectWallet;\n return acc;\n },\n {} as {\n [key in keyof typeof wallets]: ReturnType<(typeof wallets)[key][\"connectWallet\"]>;\n },\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) {\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 Chain>(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 // @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 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 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 // @ts-expect-error TODO: right now it's inferred from toolboxes\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 { getToolboxByChain } = await import(\"@swapkit/toolboxes/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 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, 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 from: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\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/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 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
- "import { Chain } from \"@swapkit/helpers\";\n\nexport async function getAddressValidator() {\n const { cosmosValidateAddress } = await import(\"@swapkit/toolboxes/cosmos\");\n const { evmValidateAddress } = await import(\"@swapkit/toolboxes/evm\");\n const { substrateValidateAddress } = await import(\"@swapkit/toolboxes/substrate\");\n const { utxoValidateAddress } = await import(\"@swapkit/toolboxes/utxo\");\n const { getAddressValidator: getSolValidator } = await import(\"@swapkit/toolboxes/solana\");\n const { validateAddress: validateRadixAddress } = await import(\"@swapkit/toolboxes/radix\");\n\n const solanaValidateAddress = await getSolValidator();\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": "2A42EE8D75A4550964756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "C6A226BD4E317C5664756E2164756E21",
12
11
  "names": []
13
12
  }
package/package.json CHANGED
@@ -1,31 +1,38 @@
1
1
  {
2
2
  "author": "swapkit-oss",
3
3
  "dependencies": {
4
- "@swapkit/helpers": "3.0.0-beta.0",
5
- "@swapkit/toolboxes": "1.0.0-beta.0"
4
+ "@swapkit/helpers": "3.0.0-beta.9",
5
+ "@swapkit/toolboxes": "1.0.0-beta.10"
6
6
  },
7
7
  "description": "SwapKit - Core",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/index.cjs",
12
+ "types": "./src/index.ts"
13
+ }
14
+ },
8
15
  "files": [
9
16
  "src/",
10
17
  "dist/"
11
18
  ],
12
19
  "homepage": "https://github.com/thorswap/SwapKit",
13
20
  "license": "Apache-2.0",
14
- "main": "./dist/index.js",
15
21
  "name": "@swapkit/core",
16
22
  "repository": {
23
+ "directory": "packages/core",
17
24
  "type": "git",
18
25
  "url": "git+https://github.com/thorswap/SwapKit.git"
19
26
  },
20
27
  "scripts": {
21
28
  "build": "bun run ./build.ts",
29
+ "build:clean": "rm -rf dist && bun run ./build.ts",
22
30
  "clean": "rm -rf dist node_modules *.tsbuildinfo",
23
- "lint": "biome check --write ./src",
24
31
  "test": "echo 'bun test'",
25
32
  "test:ci": "bun test --coverage",
26
- "type-check": "tsc --noEmit"
33
+ "type-check": "bun tsc --noEmit",
34
+ "type-check:go": "tsgo"
27
35
  },
28
36
  "type": "module",
29
- "types": "./src/index.ts",
30
- "version": "4.0.0-beta.0"
37
+ "version": "4.0.0-beta.10"
31
38
  }
package/src/client.ts CHANGED
@@ -11,6 +11,7 @@ import {
11
11
  EVMChains,
12
12
  type FeeOption,
13
13
  type FullWallet,
14
+ type GenericTransferParams,
14
15
  ProviderName as PluginNameEnum,
15
16
  SKConfig,
16
17
  type SKConfigState,
@@ -19,9 +20,7 @@ import {
19
20
  type createPlugin,
20
21
  type createWallet,
21
22
  } from "@swapkit/helpers";
22
- import type { TransferParams as CosmosTransferParams } from "@swapkit/toolboxes/cosmos";
23
- import type { TransferParams as EVMTransferParams } from "@swapkit/toolboxes/evm";
24
- import type { UTXOTransferParams } from "@swapkit/toolboxes/utxo";
23
+ import type { EVMCreateTransactionParams, EVMTransferParams } from "@swapkit/toolboxes/evm";
25
24
 
26
25
  import {
27
26
  getExplorerAddressUrl as getAddressUrl,
@@ -37,20 +36,24 @@ export type SwapKitParams<P, W> = {
37
36
  export function SwapKit<
38
37
  Plugins extends ReturnType<typeof createPlugin>,
39
38
  Wallets extends ReturnType<typeof createWallet>,
40
- >({ config, plugins, wallets = {} as Wallets }: SwapKitParams<Plugins, Wallets> = {}) {
39
+ >({
40
+ config,
41
+ plugins,
42
+ wallets,
43
+ }: { config?: SKConfigState; plugins?: Plugins; wallets?: Wallets } = {}) {
41
44
  if (config) {
42
45
  SKConfig.set(config);
43
46
  }
44
47
 
45
48
  type PluginName = keyof Plugins;
46
49
  const connectedWallets = {} as FullWallet;
50
+ type ConnectedChains = keyof typeof connectedWallets;
47
51
 
48
52
  const availablePlugins = Object.entries(plugins || {}).reduce(
49
53
  (acc, [pluginName, plugin]) => {
50
54
  const methods = plugin({ getWallet });
51
55
 
52
- // @ts-expect-error key is generic and cannot be indexed
53
- acc[pluginName] = methods;
56
+ acc[pluginName as PluginName] = methods as ReturnType<Plugins[keyof Plugins]>;
54
57
  return acc;
55
58
  },
56
59
  {} as { [key in PluginName]: ReturnType<Plugins[key]> },
@@ -60,41 +63,40 @@ export function SwapKit<
60
63
  (acc, [walletName, wallet]) => {
61
64
  const connectWallet = wallet.connectWallet({ addChain });
62
65
 
63
- // @ts-expect-error key is generic and cannot be indexed
64
- acc[walletName] = connectWallet;
66
+ acc[walletName as keyof Wallets] = connectWallet as ReturnType<
67
+ Wallets[keyof Wallets]["connectWallet"]
68
+ >;
65
69
  return acc;
66
70
  },
67
71
  {} as {
68
- [key in keyof typeof wallets]: ReturnType<(typeof wallets)[key]["connectWallet"]>;
72
+ [key in keyof Wallets]: ReturnType<Wallets[key]["connectWallet"]>;
69
73
  },
70
74
  );
71
75
 
72
- function getSwapKitPlugin<T extends PluginName>(pluginName: T) {
73
- 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];
74
79
 
75
80
  if (!plugin) {
76
81
  throw new SwapKitError("core_plugin_not_found");
77
82
  }
78
83
 
79
- return plugin;
84
+ return plugin as ReturnType<Plugins[T]>;
80
85
  }
81
86
 
82
- function getSwapKitPluginForSKProvider(pluginName: PluginNameEnum) {
83
- const plugin = Object.values(availablePlugins).find((plugin) =>
84
- plugin.supportedSwapkitProviders?.includes(pluginName),
85
- );
87
+ function addChain<T extends Chain>(
88
+ connectWallet: Omit<ChainWallet<T>, "balance"> & { balance?: AssetValue[] },
89
+ ) {
90
+ const currentWallet = getWallet(connectWallet.chain);
86
91
 
87
- if (!plugin) {
88
- throw new SwapKitError("core_plugin_not_found");
89
- }
92
+ const balance = connectWallet.balance ||
93
+ currentWallet.balance || [AssetValue.from({ chain: connectWallet.chain })];
90
94
 
91
- return plugin;
92
- }
95
+ const wallet = { ...currentWallet, ...connectWallet, balance } as FullWallet[T];
93
96
 
94
- function addChain<T extends Chain>(connectWallet: ChainWallet<T>) {
95
- const currentWallet = getWallet(connectWallet.chain);
97
+ connectedWallets[connectWallet.chain] = wallet;
96
98
 
97
- connectedWallets[connectWallet.chain] = { ...currentWallet, ...connectWallet };
99
+ return wallet;
98
100
  }
99
101
 
100
102
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>
@@ -152,8 +154,8 @@ export function SwapKit<
152
154
  /**
153
155
  * @Public
154
156
  */
155
- function getWallet<T extends Chain>(chain: T) {
156
- return connectedWallets[chain];
157
+ function getWallet<T extends ConnectedChains>(chain: T) {
158
+ return connectedWallets[chain] || {};
157
159
  }
158
160
 
159
161
  function getAllWallets() {
@@ -195,16 +197,20 @@ export function SwapKit<
195
197
  ) as ConditionalAssetValueReturn<R>;
196
198
  }
197
199
 
198
- 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[] }> {
199
204
  if (chain === Chain.Fiat || !getWallet(chain)) {
200
205
  throw new SwapKitError("core_wallet_connection_not_found");
201
206
  }
202
207
  const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);
203
208
  const defaultBalance = [AssetValue.from({ chain })];
209
+ wallet.balance = defaultBalance;
204
210
 
205
211
  if ("getBalance" in wallet) {
206
- const balance = await wallet.getBalance(wallet.address, potentialScamFilter);
207
- wallet.balance = balance?.length ? balance : defaultBalance;
212
+ const balance = await wallet.getBalance(wallet.address, scamFilter);
213
+ wallet.balance = balance;
208
214
  }
209
215
 
210
216
  return wallet;
@@ -215,30 +221,23 @@ export function SwapKit<
215
221
  pluginName,
216
222
  ...rest
217
223
  }: SwapParams<T, QuoteResponseRoute>) {
218
- const plugin =
219
- (pluginName && getSwapKitPlugin(pluginName)) ||
220
- getSwapKitPluginForSKProvider(route.providers[0] as PluginNameEnum);
221
-
222
- if (!plugin) throw new SwapKitError("core_swap_route_not_complete");
224
+ const plugin = getSwapKitPlugin(pluginName || route.providers[0]);
223
225
 
224
226
  if ("swap" in plugin) {
227
+ // @ts-expect-error TODO: fix this
225
228
  return plugin.swap({ ...rest, route });
226
229
  }
227
230
 
228
231
  throw new SwapKitError("core_plugin_swap_not_found");
229
232
  }
230
233
 
231
- function transfer({
232
- assetValue,
233
- ...params
234
- }: UTXOTransferParams | EVMTransferParams | CosmosTransferParams) {
234
+ function transfer({ assetValue, ...params }: GenericTransferParams | EVMTransferParams) {
235
235
  const chain = assetValue.chain;
236
236
  if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {
237
237
  throw new SwapKitError("core_wallet_connection_not_found");
238
238
  }
239
- 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>);
240
240
 
241
- // @ts-expect-error TODO: right now it's inferred from toolboxes
242
241
  // we need to simplify this to one object params
243
242
  return wallet.transfer({ ...params, assetValue });
244
243
  }
@@ -265,9 +264,10 @@ export function SwapKit<
265
264
  }: { chain: Chain; signature: string; message: string; address: string }) {
266
265
  switch (chain) {
267
266
  case Chain.THORChain: {
268
- const { getToolboxByChain } = await import("@swapkit/toolboxes/cosmos");
269
- const toolbox = getToolboxByChain(chain);
270
- 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 });
271
271
  }
272
272
 
273
273
  default:
@@ -282,7 +282,7 @@ export function SwapKit<
282
282
  params,
283
283
  }: (
284
284
  | { type: "swap"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }
285
- | { type: "transfer"; params: UTXOTransferParams | EVMTransferParams | CosmosTransferParams }
285
+ | { type: "transfer"; params: EVMTransferParams | GenericTransferParams }
286
286
  | {
287
287
  type: "approve";
288
288
  params: {
@@ -309,8 +309,8 @@ export function SwapKit<
309
309
  case Chain.Polygon: {
310
310
  const wallet = getWallet(chain);
311
311
  if (type === "transfer") {
312
- const txObject = await wallet.createTransferTx(params);
313
- return wallet.estimateTransactionFee(txObject, feeOptionKey);
312
+ const txObject = await wallet.createTransferTx(params as EVMCreateTransactionParams);
313
+ return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });
314
314
  }
315
315
 
316
316
  if (type === "approve" && !assetValue.isGasAsset) {
@@ -321,19 +321,19 @@ export function SwapKit<
321
321
  from: wallet.address,
322
322
  });
323
323
 
324
- return wallet.estimateTransactionFee(approvalTx, feeOptionKey);
324
+ return wallet.estimateTransactionFee({ ...approvalTx, chain, feeOption: feeOptionKey });
325
325
  }
326
326
 
327
327
  if (type === "swap") {
328
328
  const plugin = params.route.providers[0] as PluginNameEnum;
329
329
  if ([PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)) {
330
330
  const txObject = await wallet.createTransferTx({
331
- from: wallet.address,
331
+ sender: wallet.address,
332
332
  recipient: wallet.address,
333
333
  assetValue,
334
334
  });
335
335
 
336
- return wallet.estimateTransactionFee(txObject, feeOptionKey);
336
+ return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });
337
337
  }
338
338
 
339
339
  const { tx } = params.route;
@@ -341,10 +341,12 @@ export function SwapKit<
341
341
  return undefined;
342
342
  }
343
343
 
344
- return wallet.estimateTransactionFee(
345
- { ...(tx as EVMTransaction), value: BigInt((tx as EVMTransaction).value) },
346
- feeOptionKey,
347
- );
344
+ return wallet.estimateTransactionFee({
345
+ ...(tx as EVMTransaction),
346
+ value: BigInt((tx as EVMTransaction).value),
347
+ feeOption: feeOptionKey,
348
+ chain,
349
+ });
348
350
  }
349
351
 
350
352
  return AssetValue.from({ chain });
@@ -355,14 +357,9 @@ export function SwapKit<
355
357
  case Chain.Dogecoin:
356
358
  case Chain.Dash:
357
359
  case Chain.Litecoin: {
358
- const { estimateTransactionFee, address } = getWallet(chain);
359
-
360
- return estimateTransactionFee({
361
- ...params,
362
- feeOptionKey,
363
- from: address,
364
- recipient: address,
365
- });
360
+ const { estimateTransactionFee, address: recipient } = getWallet(chain);
361
+
362
+ return estimateTransactionFee({ ...params, feeOptionKey, recipient, sender: recipient });
366
363
  }
367
364
 
368
365
  case Chain.THORChain:
@@ -379,6 +376,12 @@ export function SwapKit<
379
376
  return estimateTransactionFee({ ...params, recipient: address });
380
377
  }
381
378
 
379
+ case Chain.Ripple: {
380
+ const { estimateTransactionFee } = getWallet(chain);
381
+
382
+ return estimateTransactionFee();
383
+ }
384
+
382
385
  default:
383
386
  return baseValue;
384
387
  }
package/src/index.ts CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from "@swapkit/helpers/api";
2
2
  export * from "@swapkit/helpers";
3
3
  export * from "./client";
4
- export * from "./helpers/walletAddressValidator";
@@ -1,54 +0,0 @@
1
- import { Chain } from "@swapkit/helpers";
2
-
3
- export async function getAddressValidator() {
4
- const { cosmosValidateAddress } = await import("@swapkit/toolboxes/cosmos");
5
- const { evmValidateAddress } = await import("@swapkit/toolboxes/evm");
6
- const { substrateValidateAddress } = await import("@swapkit/toolboxes/substrate");
7
- const { utxoValidateAddress } = await import("@swapkit/toolboxes/utxo");
8
- const { getAddressValidator: getSolValidator } = await import("@swapkit/toolboxes/solana");
9
- const { validateAddress: validateRadixAddress } = await import("@swapkit/toolboxes/radix");
10
-
11
- const solanaValidateAddress = await getSolValidator();
12
-
13
- return function validateAddress({ address, chain }: { address: string; chain: Chain }) {
14
- switch (chain) {
15
- case Chain.Arbitrum:
16
- case Chain.Avalanche:
17
- case Chain.Optimism:
18
- case Chain.BinanceSmartChain:
19
- case Chain.Base:
20
- case Chain.Polygon:
21
- case Chain.Ethereum:
22
- return evmValidateAddress({ address });
23
-
24
- case Chain.Litecoin:
25
- case Chain.Dash:
26
- case Chain.Dogecoin:
27
- case Chain.BitcoinCash:
28
- case Chain.Bitcoin:
29
- return utxoValidateAddress({ address, chain });
30
-
31
- case Chain.Cosmos:
32
- case Chain.Kujira:
33
- case Chain.Maya:
34
- case Chain.THORChain: {
35
- return cosmosValidateAddress({ address, chain });
36
- }
37
-
38
- case Chain.Polkadot: {
39
- return substrateValidateAddress({ address, chain });
40
- }
41
-
42
- case Chain.Radix: {
43
- return validateRadixAddress(address);
44
- }
45
-
46
- case Chain.Solana: {
47
- return solanaValidateAddress(address);
48
- }
49
-
50
- default:
51
- return false;
52
- }
53
- };
54
- }