@swapkit/core 1.0.4 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export*from"@swapkit/api";export*from"@swapkit/helpers";import{stripToCashAddress as zo} from"@swapkit/toolbox-utxo";import{lowercasedContractAbiMapping as H} from"@swapkit/contracts";import{ApproveMode as Y,AssetValue as Z,Chain as $,EVMChains as d,ProviderName as i,SwapKitError as P,isGasAsset as t} from"@swapkit/helpers";import{estimateTransactionFee as n,cosmosValidateAddress as s} from"@swapkit/toolbox-cosmos";import{evmValidateAddress as l} from"@swapkit/toolbox-evm";import{substrateValidateAddress as e} from"@swapkit/toolbox-substrate";import{utxoValidateAddress as a} from"@swapkit/toolbox-utxo";import{Chain as U,ChainToExplorerUrl as b,SwapKitError as c} from"@swapkit/helpers";function m({chain:q,txHash:_}){const y=b[q];switch(q){case U.Maya:case U.Kujira:case U.Cosmos:case U.THORChain:case U.Solana:return`${y}/tx/${_.startsWith("0x")?_.slice(2):_}`;case U.Arbitrum:case U.Avalanche:case U.BinanceSmartChain:case U.Ethereum:case U.Optimism:case U.Polkadot:case U.Polygon:return`${y}/tx/${_.startsWith("0x")?_:`0x${_}`}`;case U.Litecoin:case U.Bitcoin:case U.BitcoinCash:case U.Dogecoin:return`${y}/transaction/${_.toLowerCase()}`;default:throw new c({errorKey:"core_explorer_unsupported_chain",info:{chain:q}})}}function E({chain:q,address:_}){const y=b[q];switch(q){case U.Solana:return`${y}/account/${_}`;default:return`${y}/address/${_}`}}function Lo({apis:q={},config:_={},plugins:y,rpcUrls:C={},stagenet:D=!1,wallets:F}){const J={},Q=Object.entries(y).reduce((o,[x,{plugin:k,config:T}])=>{const B=k({wallets:J,stagenet:D,config:T??_});return o[x]=B,o},{}),M=Object.entries(F).reduce((o,[x,k])=>{const T=k({addChain:W,config:_,apis:q,rpcUrls:C});return o[x]=T,o},{});function S(o){const x=Q[o]||Object.values(Q)[0];if(!x)throw new P("core_plugin_not_found");return x}function O(o){const x=Object.values(Q).find((k)=>k.supportedSwapkitProviders?.includes(o));if(!x)throw new P("core_plugin_not_found");return x}function W(o){J[o.chain]=o}function j({assetValue:o,type:x="checkOnly",contractAddress:k}){const T=Q[k];if(T){if(x===Y.CheckOnly&&"isAssetValueApproved"in T)return T.isAssetValueApproved({assetValue:o});if(x===Y.Approve&&"approveAssetValue"in T)return T.approveAssetValue({assetValue:o});throw new P({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(k)} cannot be used for approve operation`}})}const B=o.chain,z=d.includes(B);if(z&&o.isGasAsset||!z||o.isSynthetic)return Promise.resolve(x==="checkOnly"?!0:"approved");const L=I(B),R=x==="checkOnly"?L.isApproved:L.approve;if(!R)throw new P("core_wallet_connection_not_found");if(!(o.address&&L.address&&typeof k==="string"))throw new P("core_approve_asset_address_or_from_not_found");return R({amount:o.getBaseValue("bigint"),assetAddress:o.address,from:L.address,spenderAddress:k})}function I(o){return J[o]}function v(){return{...J}}function N(o){return I(o)?.address||""}function K(o,x){return j({assetValue:o,contractAddress:x,type:Y.Approve})}function A(o,x){return j({assetValue:o,contractAddress:x,type:Y.CheckOnly})}function G(o){I(o)?.disconnect?.(),delete J[o]}function w(){for(let o of Object.keys(J))G(o)}function V(o,x){return x?f(o).then((k)=>k.balance):I(o)?.balance||[]}function r({address:o,chain:x}){switch(x){case $.Arbitrum:case $.Avalanche:case $.Optimism:case $.BinanceSmartChain:case $.Polygon:case $.Ethereum:return l({address:o});case $.Litecoin:case $.Dash:case $.Dogecoin:case $.BitcoinCash:case $.Bitcoin:return a({address:o,chain:x});case $.Cosmos:case $.Kujira:case $.Maya:case $.THORChain:return s({address:o,chain:x});case $.Polkadot:return e({address:o,chain:x});default:return!1}}async function f(o,x=!0){const k=[Z.from({chain:o})],T=I(o);if(!T)throw new P("core_wallet_connection_not_found");if("getBalance"in T){const B=await T.getBalance(T.address,x);T.balance=B?.length?B:k}return T}function h({route:o,pluginName:x,...k}){const T=x&&S(x)||O(o.providers[0]);if(!T)throw new P("core_swap_route_not_complete");if("swap"in T)return T.swap({...k,route:o});throw new P("core_plugin_swap_not_found")}function g({from:o,recipient:x,assetValue:k,feeOptionKey:T}){const B=k.chain,z=I(B);if(!z)throw new P("core_wallet_connection_not_found");return z.transfer({from:o,recipient:x,assetValue:k,feeOptionKey:T})}async function p({type:o,feeOptionKey:x,params:k}){const{assetValue:T}=k,{chain:B}=T;if(!I(B))throw new P("core_wallet_connection_not_found");const z=Z.from({chain:B});switch(B){case $.Arbitrum:case $.Avalanche:case $.Ethereum:case $.BinanceSmartChain:case $.Polygon:{const X=I(B);if(o==="transfer"){const L=await X.createTransferTx(k);return X.estimateTransactionFee(L,x)}if(o==="approve"&&!t(T))return X.estimateTransactionFee(await X.createApprovalTx({assetAddress:T.address,spenderAddress:k.contractAddress,amount:T.getBaseValue("bigint"),from:X.address}),x);if(o==="swap"){if(k.route.providers[0]===i.CHAINFLIP){const u=await X.createTransferTx({from:X.address,recipient:X.address,assetValue:T});return X.estimateTransactionFee(u,x)}const{evmTransactionDetails:R}=k.route;if(!(R&&H[R.contractAddress]))return;return X.estimateTransactionFee(await X.createContractTxObject({contractAddress:R.contractAddress,abi:H[R.contractAddress],funcName:R.contractMethod,funcParams:R.contractParams}),x)}return Z.from({chain:B})}case $.Bitcoin:case $.BitcoinCash:case $.Dogecoin:case $.Dash:case $.Litecoin:{const{estimateMaxSendableAmount:X,address:L}=I(B);return X({...k,feeOptionKey:x,from:L,recipient:L})}case $.THORChain:case $.Maya:case $.Kujira:case $.Cosmos:return n(k);case $.Polkadot:{const{address:X,estimateTransactionFee:L}=I(B);return L({...k,recipient:X})}default:return z}}return{...Q,...M,approveAssetValue:K,getAddress:N,getBalance:V,getExplorerAddressUrl:E,getExplorerTxUrl:m,getWallet:I,getAllWallets:v,getWalletWithBalance:f,isAssetValueApproved:A,estimateTransactionFee:p,swap:h,transfer:g,validateAddress:r,disconnectAll:w,disconnectChain:G}}export{zo as stripToCashAddress,Lo as SwapKit};
1
+ var i=((X)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(X,{get:(Q,j)=>(typeof require!=="undefined"?require:Q)[j]}):X)(function(X){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+X+'" is not supported')});export*from"@swapkit/api";export*from"@swapkit/helpers";import{stripToCashAddress as k$} from"@swapkit/toolbox-utxo";import{lowercasedContractAbiMapping as N} from"@swapkit/contracts";import{ApproveMode as D,AssetValue as k,Chain as R,EVMChains as s,ProviderName as t,SwapKitError as Y,isGasAsset as l} from"@swapkit/helpers";import{estimateTransactionFee as e,cosmosValidateAddress as a} from"@swapkit/toolbox-cosmos";import{evmValidateAddress as $$} from"@swapkit/toolbox-evm";import{substrateValidateAddress as _$} from"@swapkit/toolbox-substrate";import{utxoValidateAddress as L$} from"@swapkit/toolbox-utxo";import{Chain as I,ChainToExplorerUrl as E,SwapKitError as n} from"@swapkit/helpers";function M({chain:X,txHash:Q}){const j=E[X];switch(X){case I.Maya:case I.Kujira:case I.Cosmos:case I.THORChain:case I.Solana:return`${j}/tx/${Q.startsWith("0x")?Q.slice(2):Q}`;case I.Arbitrum:case I.Avalanche:case I.BinanceSmartChain:case I.Ethereum:case I.Optimism:case I.Polkadot:case I.Polygon:return`${j}/tx/${Q.startsWith("0x")?Q:`0x${Q}`}`;case I.Litecoin:case I.Bitcoin:case I.BitcoinCash:case I.Dogecoin:return`${j}/transaction/${Q.toLowerCase()}`;default:throw new n({errorKey:"core_explorer_unsupported_chain",info:{chain:X}})}}function O({chain:X,address:Q}){const j=E[X];switch(X){case I.Solana:return`${j}/account/${Q}`;default:return`${j}/address/${Q}`}}function j$({apis:X={},config:Q={},plugins:j,rpcUrls:f={},stagenet:S=!1,wallets:b={}}){const B={},H=Object.entries(j).reduce(($,[_,{plugin:L,config:q}])=>{const z=L({getWallet:U,stagenet:S,config:q??Q});return $[_]=z,$},{}),v=Object.entries(b).reduce(($,[_,L])=>{const q=L({addChain:W,config:Q,apis:X,rpcUrls:f});return $[_]=q,$},{});function K($){const _=H[$]||Object.values(H)[0];if(!_)throw new Y("core_plugin_not_found");return _}function y($){const _=Object.values(H).find((L)=>L.supportedSwapkitProviders?.includes($));if(!_)throw new Y("core_plugin_not_found");return _}function W($){const _=U($.chain);B[$.chain]={..._,...$}}function F({assetValue:$,type:_="checkOnly",contractAddress:L}){const q=H[L];if(q){if(_===D.CheckOnly&&"isAssetValueApproved"in q)return q.isAssetValueApproved({assetValue:$});if(_===D.Approve&&"approveAssetValue"in q)return q.approveAssetValue({assetValue:$});throw new Y({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(L)} cannot be used for approve operation`}})}const z=$.chain,x=s.includes(z);if(x&&$.isGasAsset||!x||$.isSynthetic)return Promise.resolve(_==="checkOnly"?!0:"approved");const Z=U(z),G=_==="checkOnly"?Z.isApproved:Z.approve;if(!G)throw new Y("core_wallet_connection_not_found");if(!($.address&&Z.address&&typeof L==="string"))throw new Y("core_approve_asset_address_or_from_not_found");return G({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:Z.address,spenderAddress:L})}function U($){return B[$]}function C(){return{...B}}function A($){return U($)?.address||""}function V($,_){return F({assetValue:$,contractAddress:_,type:D.Approve})}function m($,_){return F({assetValue:$,contractAddress:_,type:D.CheckOnly})}function P($){U($)?.disconnect?.(),delete B[$]}function w(){for(let $ of Object.keys(B))P($)}function u($,_){return _?T($).then(({balance:L})=>L):U($)?.balance||[]}function g({address:$,chain:_}){switch(_){case R.Arbitrum:case R.Avalanche:case R.Optimism:case R.BinanceSmartChain:case R.Polygon:case R.Ethereum:return $$({address:$});case R.Litecoin:case R.Dash:case R.Dogecoin:case R.BitcoinCash:case R.Bitcoin:return L$({address:$,chain:_});case R.Cosmos:case R.Kujira:case R.Maya:case R.THORChain:return a({address:$,chain:_});case R.Polkadot:return _$({address:$,chain:_});default:return!1}}async function T($,_=!0){const L=[k.from({chain:$})],q=U($);if(!q)throw new Y("core_wallet_connection_not_found");if("getBalance"in q){const z=await q.getBalance(q.address,_);q.balance=z?.length?z:L}return q}function o({route:$,pluginName:_,...L}){const q=_&&K(_)||y($.providers[0]);if(!q)throw new Y("core_swap_route_not_complete");if("swap"in q)return q.swap({...L,route:$});throw new Y("core_plugin_swap_not_found")}function h({from:$,recipient:_,assetValue:L,feeOptionKey:q}){const z=L.chain,x=U(z);if(!x)throw new Y("core_wallet_connection_not_found");return x.transfer({from:$,recipient:_,assetValue:L,feeOptionKey:q})}function d({chain:$,message:_}){const L=U($);if(!L)throw new Y("core_wallet_connection_not_found");if("signMessage"in L)return L.signMessage?.(_);throw new Y({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:L.walletType}})}async function r({address:$,chain:_,message:L,signature:q}){switch(_){case R.THORChain:{const{getToolboxByChain:z}=await import("@swapkit/toolbox-cosmos");return z(_)().verifySignature({signature:q,message:L,address:$})}default:throw new Y({errorKey:"core_verify_message_not_supported",info:{chain:_}})}}async function c({type:$,feeOptionKey:_,params:L}){const{assetValue:q}=L,{chain:z}=q;if(!U(z))throw new Y("core_wallet_connection_not_found");const x=k.from({chain:z});switch(z){case R.Arbitrum:case R.Avalanche:case R.Ethereum:case R.BinanceSmartChain:case R.Polygon:{const J=U(z);if($==="transfer"){const Z=await J.createTransferTx(L);return J.estimateTransactionFee(Z,_)}if($==="approve"&&!l(q))return J.estimateTransactionFee(await J.createApprovalTx({assetAddress:q.address,spenderAddress:L.contractAddress,amount:q.getBaseValue("bigint"),from:J.address}),_);if($==="swap"){if(L.route.providers[0]===t.CHAINFLIP){const p=await J.createTransferTx({from:J.address,recipient:J.address,assetValue:q});return J.estimateTransactionFee(p,_)}const{evmTransactionDetails:G}=L.route;if(!(G&&N[G.contractAddress]))return;return J.estimateTransactionFee(await J.createContractTxObject({contractAddress:G.contractAddress,abi:N[G.contractAddress],funcName:G.contractMethod,funcParams:G.contractParams}),_)}return k.from({chain:z})}case R.Bitcoin:case R.BitcoinCash:case R.Dogecoin:case R.Dash:case R.Litecoin:{const{estimateMaxSendableAmount:J,address:Z}=U(z);return J({...L,feeOptionKey:_,from:Z,recipient:Z})}case R.THORChain:case R.Maya:case R.Kujira:case R.Cosmos:return e(L);case R.Polkadot:{const{address:J,estimateTransactionFee:Z}=U(z);return Z({...L,recipient:J})}default:return x}}return{...H,...v,disconnectAll:w,disconnectChain:P,estimateTransactionFee:c,getAddress:A,getAllWallets:C,getBalance:u,getExplorerAddressUrl:O,getExplorerTxUrl:M,getWallet:U,getWalletWithBalance:T,approveAssetValue:V,isAssetValueApproved:m,signMessage:d,swap:o,transfer:h,validateAddress:g,verifyMessage:r}}export{k$ as stripToCashAddress,j$ as SwapKit};
2
2
 
3
- //# debugId=C19E100412E60E5664756E2164756E21
3
+ //# debugId=829B2312977B2D9D64756E2164756E21
package/dist/index.js.map CHANGED
@@ -2,11 +2,11 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/client.ts", "../src/helpers/explorerUrls.ts"],
4
4
  "sourcesContent": [
5
- "export * from \"@swapkit/api\";\nexport * from \"@swapkit/helpers\";\nexport { stripToCashAddress } from \"@swapkit/toolbox-utxo\";\n\nexport * from \"./client.ts\";\nexport * from \"./types.ts\";\n",
6
- "import { lowercasedContractAbiMapping } from \"@swapkit/contracts\";\nimport {\n type AddChainWalletParams,\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ConnectConfig,\n type EVMChain,\n EVMChains,\n type FeeOption,\n ProviderName as PluginNameEnum,\n SwapKitError,\n type SwapParams,\n type WalletChain,\n isGasAsset,\n} from \"@swapkit/helpers\";\nimport {\n type TransferParams as CosmosTransferParams,\n estimateTransactionFee as cosmosTransactionFee,\n cosmosValidateAddress,\n} from \"@swapkit/toolbox-cosmos\";\nimport { type TransferParams as EVMTransferParams, evmValidateAddress } from \"@swapkit/toolbox-evm\";\nimport { substrateValidateAddress } from \"@swapkit/toolbox-substrate\";\nimport { type UTXOTransferParams, utxoValidateAddress } from \"@swapkit/toolbox-utxo\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls.ts\";\nimport type { Apis, SwapKitPluginInterface, SwapKitWallet, Wallet } from \"./types.ts\";\n\nexport function SwapKit<\n Plugins extends { [key in string]: SwapKitPluginInterface<{ [key in string]: Todo }> },\n Wallets extends { [key in string]: SwapKitWallet<NotWorth[]> },\n>({\n apis = {},\n config = {},\n plugins,\n rpcUrls = {},\n stagenet = false,\n wallets,\n}: {\n apis?: Apis;\n config?: ConnectConfig;\n plugins: Plugins;\n rpcUrls?: { [key in Chain]?: string };\n stagenet?: boolean;\n wallets: Wallets;\n}) {\n type PluginName = keyof Plugins;\n\n const connectedWallets = {} as Wallet;\n const availablePlugins = Object.entries(plugins).reduce(\n (acc, [pluginName, { plugin, config: pluginConfig }]) => {\n const methods = plugin({\n wallets: connectedWallets,\n stagenet,\n config: pluginConfig ?? config,\n });\n\n // @ts-expect-error\n acc[pluginName] = methods;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key][\"plugin\"]> },\n );\n\n const connectWalletMethods = Object.entries(wallets).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet({ addChain, config, apis, rpcUrls });\n\n // @ts-expect-error\n acc[walletName] = connectWallet;\n return acc;\n },\n {} as { [key in keyof Wallets]: ReturnType<Wallets[key]> },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName: T) {\n const plugin = availablePlugins[pluginName] || Object.values(availablePlugins)[0];\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin;\n }\n\n function getSwapKitPluginForSKProvider(pluginName: PluginNameEnum): Plugins[keyof Plugins] {\n const plugin = Object.values(availablePlugins).find((plugin) =>\n plugin.supportedSwapkitProviders?.includes(pluginName),\n );\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin;\n }\n\n function addChain<T extends Chain>(connectWallet: AddChainWalletParams<T>) {\n // @ts-expect-error: TODO\n connectedWallets[connectWallet.chain] = connectWallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends Chain>(chain: T) {\n return connectedWallets[chain];\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain>(chain: T, refresh?: boolean) {\n return refresh\n ? getWalletWithBalance(chain).then((wallet) => wallet.balance)\n : getWallet(chain)?.balance || [];\n }\n\n 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.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 case Chain.Polkadot:\n return substrateValidateAddress({ address, chain });\n\n default:\n return false;\n }\n }\n\n async function getWalletWithBalance<T extends Chain>(chain: T, potentialScamFilter = true) {\n const defaultBalance = [AssetValue.from({ chain })];\n const wallet = getWallet(chain);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n if (\"getBalance\" in wallet) {\n // @ts-expect-error TODO add getBalance to radix\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>({ route, pluginName, ...rest }: SwapParams<T>) {\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 from,\n recipient,\n assetValue,\n feeOptionKey,\n }: UTXOTransferParams | EVMTransferParams | CosmosTransferParams) {\n const chain = assetValue.chain as WalletChain;\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n return wallet.transfer({ from, recipient, assetValue, feeOptionKey });\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> & { assetValue: AssetValue } }\n | {\n type: \"transfer\";\n params: UTXOTransferParams | EVMTransferParams | CosmosTransferParams;\n }\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)) 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\" && !isGasAsset(assetValue)) {\n return wallet.estimateTransactionFee(\n await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n }),\n feeOptionKey,\n );\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if (plugin === PluginNameEnum.CHAINFLIP) {\n const txObject = await wallet.createTransferTx({\n from: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\n return wallet.estimateTransactionFee(txObject, feeOptionKey);\n }\n\n const { evmTransactionDetails } = params.route;\n if (\n !(\n evmTransactionDetails &&\n lowercasedContractAbiMapping[evmTransactionDetails.contractAddress]\n )\n ) {\n return undefined;\n }\n\n return wallet.estimateTransactionFee(\n await wallet.createContractTxObject({\n contractAddress: evmTransactionDetails.contractAddress,\n // biome-ignore lint/style/noNonNullAssertion: TS cant infer the type\n abi: lowercasedContractAbiMapping[evmTransactionDetails.contractAddress]!,\n funcName: evmTransactionDetails.contractMethod,\n funcParams: evmTransactionDetails.contractParams,\n }),\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 { estimateMaxSendableAmount, address } = getWallet(chain);\n\n return estimateMaxSendableAmount({\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 return cosmosTransactionFee(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 approveAssetValue,\n getAddress,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getAllWallets,\n getWalletWithBalance,\n isAssetValueApproved,\n estimateTransactionFee,\n swap,\n transfer,\n validateAddress,\n disconnectAll,\n disconnectChain,\n };\n}\n",
5
+ "export * from \"@swapkit/api\";\nexport * from \"@swapkit/helpers\";\nexport { stripToCashAddress } from \"@swapkit/toolbox-utxo\";\n\nexport * from \"./client.ts\";\n",
6
+ "import { lowercasedContractAbiMapping } from \"@swapkit/contracts\";\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainApis,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n type ConnectConfig,\n type EVMChain,\n EVMChains,\n type FeeOption,\n type FullWallet,\n ProviderName as PluginNameEnum,\n SwapKitError,\n type SwapKitPluginParams,\n type SwapKitWallet,\n type SwapParams,\n type WalletChain,\n isGasAsset,\n} from \"@swapkit/helpers\";\nimport {\n type TransferParams as CosmosTransferParams,\n estimateTransactionFee as cosmosTransactionFee,\n cosmosValidateAddress,\n} from \"@swapkit/toolbox-cosmos\";\nimport { type TransferParams as EVMTransferParams, evmValidateAddress } from \"@swapkit/toolbox-evm\";\nimport { substrateValidateAddress } from \"@swapkit/toolbox-substrate\";\nimport { type UTXOTransferParams, utxoValidateAddress } from \"@swapkit/toolbox-utxo\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls.ts\";\n\nexport function SwapKit<\n Plugins extends {\n [key in string]: {\n plugin: (params: SwapKitPluginParams<NotWorth>) => NotWorth;\n config?: NotWorth;\n };\n },\n Wallets extends { [key in string]: SwapKitWallet<NotWorth[]> },\n>({\n apis = {},\n config = {},\n plugins,\n rpcUrls = {},\n stagenet = false,\n wallets = {} as Wallets,\n}: {\n apis?: ChainApis;\n config?: ConnectConfig;\n plugins: Plugins;\n rpcUrls?: { [key in Chain]?: string };\n stagenet?: boolean;\n wallets?: Wallets;\n}) {\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n\n const availablePlugins = Object.entries(plugins).reduce(\n (acc, [pluginName, { plugin, config: pluginConfig }]) => {\n const methods = plugin({ getWallet, stagenet, config: pluginConfig ?? config });\n\n // @ts-expect-error key is generic and cannot be indexed\n acc[pluginName] = methods;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key][\"plugin\"]> },\n );\n\n const connectWalletMethods = Object.entries(wallets).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet({ addChain, config, apis, rpcUrls });\n\n // @ts-expect-error walletName is generic and cannot be indexed\n acc[walletName] = connectWallet;\n return acc;\n },\n {} as { [key in keyof Wallets]: ReturnType<Wallets[key]> },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName: T) {\n const plugin = availablePlugins[pluginName] || Object.values(availablePlugins)[0];\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin;\n }\n\n function getSwapKitPluginForSKProvider(pluginName: PluginNameEnum): Plugins[keyof Plugins] {\n const plugin = Object.values(availablePlugins).find((plugin) =>\n plugin.supportedSwapkitProviders?.includes(pluginName),\n );\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin;\n }\n\n function addChain<T extends 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 return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends Chain>(chain: T) {\n return connectedWallets[chain];\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n 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.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 case Chain.Polkadot:\n return substrateValidateAddress({ address, chain });\n\n default:\n return false;\n }\n }\n\n async function getWalletWithBalance<T extends Chain>(chain: T, potentialScamFilter = true) {\n const defaultBalance = [AssetValue.from({ chain })];\n const wallet = getWallet(chain);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n if (\"getBalance\" in wallet) {\n // @ts-expect-error TODO add getBalance to radix\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>({ route, pluginName, ...rest }: SwapParams<T>) {\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 from,\n recipient,\n assetValue,\n feeOptionKey,\n }: UTXOTransferParams | EVMTransferParams | CosmosTransferParams) {\n const chain = assetValue.chain as WalletChain;\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n return wallet.transfer({ from, recipient, assetValue, feeOptionKey });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n switch (chain) {\n case Chain.THORChain: {\n const { getToolboxByChain } = await import(\"@swapkit/toolbox-cosmos\");\n const toolbox = getToolboxByChain(chain);\n return toolbox().verifySignature({ signature, message, address });\n }\n\n default:\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO clean this up\n async function estimateTransactionFee<T extends PluginName>({\n type,\n feeOptionKey,\n params,\n }: (\n | { type: \"swap\"; params: SwapParams<T> & { assetValue: AssetValue } }\n | {\n type: \"transfer\";\n params: UTXOTransferParams | EVMTransferParams | CosmosTransferParams;\n }\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)) 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\" && !isGasAsset(assetValue)) {\n return wallet.estimateTransactionFee(\n await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n }),\n feeOptionKey,\n );\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if (plugin === PluginNameEnum.CHAINFLIP) {\n const txObject = await wallet.createTransferTx({\n from: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\n return wallet.estimateTransactionFee(txObject, feeOptionKey);\n }\n\n const { evmTransactionDetails } = params.route;\n if (\n !(\n evmTransactionDetails &&\n lowercasedContractAbiMapping[evmTransactionDetails.contractAddress]\n )\n ) {\n return undefined;\n }\n\n return wallet.estimateTransactionFee(\n await wallet.createContractTxObject({\n contractAddress: evmTransactionDetails.contractAddress,\n // biome-ignore lint/style/noNonNullAssertion: TS cant infer the type\n abi: lowercasedContractAbiMapping[evmTransactionDetails.contractAddress]!,\n funcName: evmTransactionDetails.contractMethod,\n funcParams: evmTransactionDetails.contractParams,\n }),\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 { estimateMaxSendableAmount, address } = getWallet(chain);\n\n return estimateMaxSendableAmount({\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 return cosmosTransactionFee(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 validateAddress,\n verifyMessage,\n };\n}\n",
7
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.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 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 return `${baseUrl}/account/${address}`;\n\n default:\n return `${baseUrl}/address/${address}`;\n }\n}\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "C19E100412E60E5664756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "829B2312977B2D9D64756E2164756E21",
11
11
  "names": []
12
12
  }
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "author": "swapkit-oss",
3
3
  "dependencies": {
4
- "@swapkit/api": "1.1.2",
4
+ "@swapkit/api": "1.2.0",
5
5
  "@swapkit/contracts": "1.0.1",
6
- "@swapkit/helpers": "1.0.4",
7
- "@swapkit/plugin-evm": "1.0.4",
8
- "@swapkit/toolbox-cosmos": "1.0.4",
9
- "@swapkit/toolbox-evm": "1.0.4",
10
- "@swapkit/toolbox-solana": "1.0.4",
11
- "@swapkit/toolbox-substrate": "1.0.4",
12
- "@swapkit/toolbox-utxo": "1.0.4"
6
+ "@swapkit/helpers": "1.1.0",
7
+ "@swapkit/plugin-evm": "1.0.6",
8
+ "@swapkit/toolbox-cosmos": "1.0.5",
9
+ "@swapkit/toolbox-evm": "1.1.1",
10
+ "@swapkit/toolbox-solana": "1.0.6",
11
+ "@swapkit/toolbox-substrate": "1.1.0",
12
+ "@swapkit/toolbox-utxo": "1.0.5"
13
13
  },
14
14
  "description": "SwapKit - Core",
15
15
  "files": [
@@ -35,5 +35,5 @@
35
35
  },
36
36
  "type": "module",
37
37
  "types": "./src/index.ts",
38
- "version": "1.0.4"
38
+ "version": "1.1.1"
39
39
  }
package/src/client.ts CHANGED
@@ -1,16 +1,21 @@
1
1
  import { lowercasedContractAbiMapping } from "@swapkit/contracts";
2
2
  import {
3
- type AddChainWalletParams,
4
3
  ApproveMode,
5
4
  type ApproveReturnType,
6
5
  AssetValue,
7
6
  Chain,
7
+ type ChainApis,
8
+ type ChainWallet,
9
+ type ConditionalAssetValueReturn,
8
10
  type ConnectConfig,
9
11
  type EVMChain,
10
12
  EVMChains,
11
13
  type FeeOption,
14
+ type FullWallet,
12
15
  ProviderName as PluginNameEnum,
13
16
  SwapKitError,
17
+ type SwapKitPluginParams,
18
+ type SwapKitWallet,
14
19
  type SwapParams,
15
20
  type WalletChain,
16
21
  isGasAsset,
@@ -28,10 +33,14 @@ import {
28
33
  getExplorerAddressUrl as getAddressUrl,
29
34
  getExplorerTxUrl as getTxUrl,
30
35
  } from "./helpers/explorerUrls.ts";
31
- import type { Apis, SwapKitPluginInterface, SwapKitWallet, Wallet } from "./types.ts";
32
36
 
33
37
  export function SwapKit<
34
- Plugins extends { [key in string]: SwapKitPluginInterface<{ [key in string]: Todo }> },
38
+ Plugins extends {
39
+ [key in string]: {
40
+ plugin: (params: SwapKitPluginParams<NotWorth>) => NotWorth;
41
+ config?: NotWorth;
42
+ };
43
+ },
35
44
  Wallets extends { [key in string]: SwapKitWallet<NotWorth[]> },
36
45
  >({
37
46
  apis = {},
@@ -39,27 +48,23 @@ export function SwapKit<
39
48
  plugins,
40
49
  rpcUrls = {},
41
50
  stagenet = false,
42
- wallets,
51
+ wallets = {} as Wallets,
43
52
  }: {
44
- apis?: Apis;
53
+ apis?: ChainApis;
45
54
  config?: ConnectConfig;
46
55
  plugins: Plugins;
47
56
  rpcUrls?: { [key in Chain]?: string };
48
57
  stagenet?: boolean;
49
- wallets: Wallets;
58
+ wallets?: Wallets;
50
59
  }) {
51
60
  type PluginName = keyof Plugins;
61
+ const connectedWallets = {} as FullWallet;
52
62
 
53
- const connectedWallets = {} as Wallet;
54
63
  const availablePlugins = Object.entries(plugins).reduce(
55
64
  (acc, [pluginName, { plugin, config: pluginConfig }]) => {
56
- const methods = plugin({
57
- wallets: connectedWallets,
58
- stagenet,
59
- config: pluginConfig ?? config,
60
- });
65
+ const methods = plugin({ getWallet, stagenet, config: pluginConfig ?? config });
61
66
 
62
- // @ts-expect-error
67
+ // @ts-expect-error key is generic and cannot be indexed
63
68
  acc[pluginName] = methods;
64
69
  return acc;
65
70
  },
@@ -70,7 +75,7 @@ export function SwapKit<
70
75
  (acc, [walletName, wallet]) => {
71
76
  const connectWallet = wallet({ addChain, config, apis, rpcUrls });
72
77
 
73
- // @ts-expect-error
78
+ // @ts-expect-error walletName is generic and cannot be indexed
74
79
  acc[walletName] = connectWallet;
75
80
  return acc;
76
81
  },
@@ -99,9 +104,10 @@ export function SwapKit<
99
104
  return plugin;
100
105
  }
101
106
 
102
- function addChain<T extends Chain>(connectWallet: AddChainWalletParams<T>) {
103
- // @ts-expect-error: TODO
104
- connectedWallets[connectWallet.chain] = connectWallet;
107
+ function addChain<T extends Chain>(connectWallet: ChainWallet<T>) {
108
+ const currentWallet = getWallet(connectWallet.chain);
109
+
110
+ connectedWallets[connectWallet.chain] = { ...currentWallet, ...connectWallet };
105
111
  }
106
112
 
107
113
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>
@@ -189,10 +195,15 @@ export function SwapKit<
189
195
  }
190
196
  }
191
197
 
192
- function getBalance<T extends Chain>(chain: T, refresh?: boolean) {
193
- return refresh
194
- ? getWalletWithBalance(chain).then((wallet) => wallet.balance)
195
- : getWallet(chain)?.balance || [];
198
+ function getBalance<T extends Chain, R extends boolean>(
199
+ chain: T,
200
+ refresh?: R,
201
+ ): ConditionalAssetValueReturn<R> {
202
+ return (
203
+ refresh
204
+ ? getWalletWithBalance(chain).then(({ balance }) => balance)
205
+ : getWallet(chain)?.balance || []
206
+ ) as ConditionalAssetValueReturn<R>;
196
207
  }
197
208
 
198
209
  function validateAddress({ address, chain }: { address: string; chain: Chain }) {
@@ -270,6 +281,38 @@ export function SwapKit<
270
281
  return wallet.transfer({ from, recipient, assetValue, feeOptionKey });
271
282
  }
272
283
 
284
+ function signMessage({ chain, message }: { chain: Chain; message: string }) {
285
+ const wallet = getWallet(chain);
286
+ if (!wallet) throw new SwapKitError("core_wallet_connection_not_found");
287
+
288
+ if ("signMessage" in wallet) {
289
+ return wallet.signMessage?.(message);
290
+ }
291
+
292
+ throw new SwapKitError({
293
+ errorKey: "core_wallet_sign_message_not_supported",
294
+ info: { chain, wallet: wallet.walletType },
295
+ });
296
+ }
297
+
298
+ async function verifyMessage({
299
+ address,
300
+ chain,
301
+ message,
302
+ signature,
303
+ }: { chain: Chain; signature: string; message: string; address: string }) {
304
+ switch (chain) {
305
+ case Chain.THORChain: {
306
+ const { getToolboxByChain } = await import("@swapkit/toolbox-cosmos");
307
+ const toolbox = getToolboxByChain(chain);
308
+ return toolbox().verifySignature({ signature, message, address });
309
+ }
310
+
311
+ default:
312
+ throw new SwapKitError({ errorKey: "core_verify_message_not_supported", info: { chain } });
313
+ }
314
+ }
315
+
273
316
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO clean this up
274
317
  async function estimateTransactionFee<T extends PluginName>({
275
318
  type,
@@ -396,20 +439,23 @@ export function SwapKit<
396
439
  ...availablePlugins,
397
440
  ...connectWalletMethods,
398
441
 
399
- approveAssetValue,
442
+ disconnectAll,
443
+ disconnectChain,
444
+ estimateTransactionFee,
400
445
  getAddress,
446
+ getAllWallets,
401
447
  getBalance,
402
448
  getExplorerAddressUrl: getAddressUrl,
403
449
  getExplorerTxUrl: getTxUrl,
404
450
  getWallet,
405
- getAllWallets,
406
451
  getWalletWithBalance,
452
+
453
+ approveAssetValue,
407
454
  isAssetValueApproved,
408
- estimateTransactionFee,
455
+ signMessage,
409
456
  swap,
410
457
  transfer,
411
458
  validateAddress,
412
- disconnectAll,
413
- disconnectChain,
459
+ verifyMessage,
414
460
  };
415
461
  }
package/src/index.ts CHANGED
@@ -3,4 +3,3 @@ export * from "@swapkit/helpers";
3
3
  export { stripToCashAddress } from "@swapkit/toolbox-utxo";
4
4
 
5
5
  export * from "./client.ts";
6
- export * from "./types.ts";
package/src/types.ts DELETED
@@ -1,44 +0,0 @@
1
- import type {
2
- BaseWallet,
3
- Chain,
4
- ConnectWalletParams,
5
- CosmosChain,
6
- UTXOChain,
7
- } from "@swapkit/helpers";
8
- import type { CosmosWallets, ThorchainWallets } from "@swapkit/toolbox-cosmos";
9
- import type { CovalentApiType, EthplorerApiType } from "@swapkit/toolbox-evm";
10
- import type { EVMWallets } from "@swapkit/toolbox-evm";
11
- import type { SolanaWallet } from "@swapkit/toolbox-solana";
12
- import type { SubstrateWallets } from "@swapkit/toolbox-substrate";
13
- import type { BlockchairApiType } from "@swapkit/toolbox-utxo";
14
- import type { UTXOWallets } from "@swapkit/toolbox-utxo";
15
-
16
- export type Wallet = BaseWallet<
17
- EVMWallets & UTXOWallets & CosmosWallets & ThorchainWallets & SubstrateWallets & SolanaWallet
18
- >;
19
-
20
- export type SwapKitWallet<ConnectParams extends Todo[]> = (
21
- params: ConnectWalletParams,
22
- ) => (...connectParams: ConnectParams) => boolean | Promise<boolean>;
23
-
24
- export type SwapKitPluginInterface<Methods = { [key in string]: Todo }> = {
25
- plugin: ({
26
- wallets,
27
- stagenet,
28
- config,
29
- }: { wallets: Wallet; stagenet?: boolean; config: Todo }) => Methods;
30
- config?: Todo;
31
- };
32
-
33
- type CovalentChains =
34
- | Chain.BinanceSmartChain
35
- | Chain.Polygon
36
- | Chain.Avalanche
37
- | Chain.Arbitrum
38
- | Chain.Optimism;
39
-
40
- export type Apis = { [key in CovalentChains]?: CovalentApiType } & {
41
- [key in Chain.Ethereum]?: EthplorerApiType;
42
- } & { [key in CosmosChain]?: Todo } & {
43
- [key in UTXOChain]?: BlockchairApiType;
44
- };