@swapkit/core 2.1.2 → 3.1.0
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 +2 -2
- package/dist/index.js.map +3 -3
- package/package.json +10 -10
- package/src/client.ts +41 -13
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var L$=Object.create;var{getPrototypeOf:_$,defineProperty:W,getOwnPropertyNames:B$}=Object;var j$=Object.prototype.hasOwnProperty;var D=(B,j,I)=>{I=B!=null?L$(_$(B)):{};let T=j||!B||!B.__esModule?W(I,"default",{value:B,enumerable:!0}):I;for(let P of B$(B))if(!j$.call(T,P))W(T,P,{get:()=>B[P],enumerable:!0});return T};var H=((B)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(B,{get:(j,I)=>(typeof require!=="undefined"?require:j)[I]}):B)(function(B){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+B+'" is not supported')});export*from"@swapkit/api";export*from"@swapkit/helpers";import{SwapKitApi as M}from"@swapkit/api";import{ApproveMode as N,AssetValue as S,Chain as J,EVMChains as x$,ProviderName as d,SwapKitError as U}from"@swapkit/helpers";import{Chain as q,ChainToExplorerUrl as y,SwapKitError as q$}from"@swapkit/helpers";function V({chain:B,txHash:j}){let I=y[B];switch(B){case q.Maya:case q.Kujira:case q.Cosmos:case q.THORChain:case q.Solana:return`${I}/tx/${j.startsWith("0x")?j.slice(2):j}`;case q.Arbitrum:case q.Avalanche:case q.BinanceSmartChain:case q.Base:case q.Ethereum:case q.Optimism:case q.Polkadot:case q.Polygon:return`${I}/tx/${j.startsWith("0x")?j:`0x${j}`}`;case q.Litecoin:case q.Bitcoin:case q.BitcoinCash:case q.Dogecoin:case q.Radix:return`${I}/transaction/${j.toLowerCase()}`;default:throw new q$({errorKey:"core_explorer_unsupported_chain",info:{chain:B}})}}function K({chain:B,address:j}){let I=y[B];switch(B){case q.Solana:case q.Radix:return`${I}/account/${j}`;default:return`${I}/address/${j}`}}function Y$({apis:B={},config:j={},plugins:I,rpcUrls:T={},wallets:P={}}={}){let C=j.stagenet,O=j.swapkitConfig?.isDev,X={},Z=Object.entries(I||{}).reduce(($,[R,{plugin:L,config:_}])=>{let z=L({getWallet:Q,stagenet:C,config:_??j});return $[R]=z,$},{}),o=Object.entries(P).reduce(($,[R,L])=>{let _=L({addChain:w,config:j,apis:B,rpcUrls:T});return $[R]=_,$},{});function u($){let R=Z[$]||Object.values(Z)[0];if(!R)throw new U("core_plugin_not_found");return R}function h($){let R=Object.values(Z).find((L)=>L.supportedSwapkitProviders?.includes($));if(!R)throw new U("core_plugin_not_found");return R}function w($){let R=Q($.chain);X[$.chain]={...R,...$}}function m({assetValue:$,type:R="checkOnly",contractAddress:L}){let _=Z[L];if(_){if(R===N.CheckOnly&&"isAssetValueApproved"in _)return _.isAssetValueApproved({assetValue:$});if(R===N.Approve&&"approveAssetValue"in _)return _.approveAssetValue({assetValue:$});throw new U({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(L)} cannot be used for approve operation`}})}let z=$.chain,E=x$.includes(z);if(E&&$.isGasAsset||!E||$.isSynthetic)return Promise.resolve(R==="checkOnly"?!0:"approved");let Y=Q(z),b=R==="checkOnly"?Y.isApproved:Y.approve;if(!b)throw new U("core_wallet_connection_not_found");if(!($.address&&Y.address&&typeof L==="string"))throw new U("core_approve_asset_address_or_from_not_found");return b({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:Y.address,spenderAddress:L})}function Q($){return X[$]}function c(){return{...X}}function g($){return Q($)?.address||""}function r($,R){return m({assetValue:$,contractAddress:R,type:N.Approve})}function n($,R){return m({assetValue:$,contractAddress:R,type:N.CheckOnly})}function f($){Q($)?.disconnect?.(),delete X[$]}function s(){for(let $ of Object.keys(X))f($)}function p($,R){return R?A($).then(({balance:L})=>L):Q($)?.balance||[]}function i($){throw new U("not_implemented",{message:"validateAddress is deprecated - use toolbox directly or import { getAddressValidator } from '@swapkit/core'"})}async function A($,R=!0){let L=[S.from({chain:$})],_=Q($);if(!_)throw new U("core_wallet_connection_not_found");if("getBalance"in _){let z=await _.getBalance(_.address,R);_.balance=z?.length?z:L}return _}function t({route:$,pluginName:R,...L}){let _=R&&u(R)||h($.providers[0]);if(!_)throw new U("core_swap_route_not_complete");if("swap"in _)return _.swap({...L,route:$});throw new U("core_plugin_swap_not_found")}function l({assetValue:$,...R}){let L=$.chain,_=Q(L);if(!_)throw new U("core_wallet_connection_not_found");return _.transfer({...R,assetValue:$})}function a({chain:$,message:R}){let L=Q($);if(!L)throw new U("core_wallet_connection_not_found");if("signMessage"in L)return L.signMessage?.(R);throw new U({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:L.walletType}})}async function e({address:$,chain:R,message:L,signature:_}){switch(R){case J.THORChain:{let{getToolboxByChain:z}=await import("@swapkit/toolbox-cosmos");return z(R)().verifySignature({signature:_,message:L,address:$})}default:throw new U({errorKey:"core_verify_message_not_supported",info:{chain:R}})}}async function $$({type:$,feeOptionKey:R,params:L}){let{assetValue:_}=L,{chain:z}=_;if(!Q(z))throw new U("core_wallet_connection_not_found");let E=S.from({chain:z});switch(z){case J.Arbitrum:case J.Avalanche:case J.Ethereum:case J.BinanceSmartChain:case J.Polygon:{let G=Q(z);if($==="transfer"){let Y=await G.createTransferTx(L);return G.estimateTransactionFee(Y,R)}if($==="approve"&&!_.isGasAsset)return G.estimateTransactionFee(await G.createApprovalTx({assetAddress:_.address,spenderAddress:L.contractAddress,amount:_.getBaseValue("bigint"),from:G.address}),R);if($==="swap"){if(L.route.providers[0]===d.CHAINFLIP){let R$=await G.createTransferTx({from:G.address,recipient:G.address,assetValue:_});return G.estimateTransactionFee(R$,R)}let{tx:b}=L.route;if(!b)return;return G.estimateTransactionFee({...b,value:BigInt(b.value)},R)}return S.from({chain:z})}case J.Bitcoin:case J.BitcoinCash:case J.Dogecoin:case J.Dash:case J.Litecoin:{let{estimateTransactionFee:G,address:Y}=Q(z);return G({...L,feeOptionKey:R,from:Y,recipient:Y})}case J.THORChain:case J.Maya:case J.Kujira:case J.Cosmos:{let{estimateTransactionFee:G}=await import("@swapkit/toolbox-cosmos");return G(L)}case J.Polkadot:{let{address:G,estimateTransactionFee:Y}=Q(z);return Y({...L,recipient:G})}default:return E}}let v=j.swapkitConfig||{},F=v?.swapkitApiKey||j?.swapkitApiKey,k=v.useHashedApiKey?v.referer:void 0;return{...Z,...o,disconnectAll:s,disconnectChain:f,estimateTransactionFee:$$,getAddress:g,getAllWallets:c,getBalance:p,getExplorerAddressUrl:K,getExplorerTxUrl:V,getWallet:Q,getWalletWithBalance:A,approveAssetValue:r,isAssetValueApproved:n,signMessage:a,swap:t,transfer:l,validateAddress:i,verifyMessage:e,api:F?{getGasRate:()=>M.getGasRate(O,F,k),getPrice:($)=>M.getPrice($,O,F,k),getSwapQuote:($)=>M.getSwapQuote($,O,F,k),getTokenList:($)=>M.getTokenList($),getTokenListProviders:()=>M.getTokenListProvidersV2(O,F,k),getTokenTradingPairs:($)=>M.getTokenTradingPairs($,O,F,k),getTrackerDetails:($)=>M.getTrackerDetails($,F,k)}:{undefined:void 0}}}import{Chain as x}from"@swapkit/helpers";async function H$(){let{cosmosValidateAddress:B}=await import("@swapkit/toolbox-cosmos"),{evmValidateAddress:j}=await import("@swapkit/toolbox-evm"),{substrateValidateAddress:I}=await import("@swapkit/toolbox-substrate"),{utxoValidateAddress:T}=await import("@swapkit/toolbox-utxo"),{validateAddress:P}=await import("@swapkit/toolbox-solana"),{validateAddress:C}=await import("@swapkit/toolbox-radix");return function O({address:X,chain:Z}){switch(Z){case x.Arbitrum:case x.Avalanche:case x.Optimism:case x.BinanceSmartChain:case x.Polygon:case x.Ethereum:return j({address:X});case x.Litecoin:case x.Dash:case x.Dogecoin:case x.BitcoinCash:case x.Bitcoin:return T({address:X,chain:Z});case x.Cosmos:case x.Kujira:case x.Maya:case x.THORChain:return B({address:X,chain:Z});case x.Polkadot:return I({address:X,chain:Z});case x.Radix:return C(X);case x.Solana:return P(X);default:return!1}}}export{H$ as getAddressValidator,Y$ as SwapKit};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=267A91833868AB5B64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
"sources": ["../src/index.ts", "../src/client.ts", "../src/helpers/explorerUrls.ts", "../src/helpers/walletAddressValidator.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"export * from \"@swapkit/api\";\nexport * from \"@swapkit/helpers\";\nexport * from \"./client\";\nexport * from \"./helpers/walletAddressValidator\";\n",
|
|
6
|
-
"import type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainApis,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n type ConnectConfig,\n type 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} from \"@swapkit/helpers\";\nimport type { TransferParams as CosmosTransferParams } from \"@swapkit/toolbox-cosmos\";\nimport type { TransferParams as EVMTransferParams } from \"@swapkit/toolbox-evm\";\nimport type { UTXOTransferParams } from \"@swapkit/toolbox-utxo\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\ntype PluginsType = {\n [key in string]: {\n plugin: (params: SwapKitPluginParams<any>) => any;\n config?: any;\n };\n};\n\nexport type SwapKitParams<P, W> = {\n apis?: ChainApis;\n config?: ConnectConfig;\n plugins?: P;\n rpcUrls?: { [key in Chain]?: string };\n // TODO: migrate to `config` only\n stagenet?: boolean;\n wallets?: W;\n};\n\nexport function SwapKit<\n Plugins extends PluginsType,\n Wallets extends { [key in string]: SwapKitWallet<any[]> },\n>({\n apis = {},\n config = {},\n plugins,\n rpcUrls = {},\n stagenet = false,\n wallets = {} as Wallets,\n}: SwapKitParams<Plugins, Wallets> = {}) {\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 /**\n * @deprecated - use toolbox directly or use getAddressValidator() function\n */\n function validateAddress(_: { address: string; chain: Chain }) {\n throw new SwapKitError(\"not_implemented\", {\n message:\n \"validateAddress is deprecated - use toolbox directly or import { getAddressValidator } from '@swapkit/core'\",\n });\n }\n\n async function getWalletWithBalance<T extends Chain>(chain: T, potentialScamFilter = true) {\n 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 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 as WalletChain;\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n switch (chain) {\n case Chain.THORChain: {\n const { getToolboxByChain } = await import(\"@swapkit/toolbox-cosmos\");\n const toolbox = getToolboxByChain(chain);\n return toolbox().verifySignature({ signature, message, address });\n }\n\n default:\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO clean this up\n async function estimateTransactionFee<T extends PluginName>({\n type,\n feeOptionKey,\n params,\n }: (\n | { type: \"swap\"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }\n | { type: \"transfer\"; params: UTXOTransferParams | EVMTransferParams | CosmosTransferParams }\n | {\n type: \"approve\";\n params: {\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n feeOptionKey?: FeeOption;\n };\n }\n ) & {\n feeOptionKey: FeeOption;\n }): Promise<AssetValue | undefined> {\n const { assetValue } = params;\n const { chain } = assetValue;\n\n if (!getWallet(chain)) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Ethereum:\n case Chain.BinanceSmartChain:\n case Chain.Polygon: {\n const wallet = getWallet(chain);\n if (type === \"transfer\") {\n const txObject = await wallet.createTransferTx(params);\n return wallet.estimateTransactionFee(txObject, feeOptionKey);\n }\n\n if (type === \"approve\" && !assetValue.isGasAsset) {\n return wallet.estimateTransactionFee(\n await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n }),\n feeOptionKey,\n );\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if (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 { tx } = params.route;\n if (!tx) {\n return undefined;\n }\n\n return wallet.estimateTransactionFee(\n { ...(tx as EVMTransaction), value: BigInt((tx as EVMTransaction).value) },\n feeOptionKey,\n );\n }\n\n return AssetValue.from({ chain });\n }\n\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Dash:\n case Chain.Litecoin: {\n const { estimateTransactionFee, address } = getWallet(chain);\n\n return estimateTransactionFee({\n ...params,\n feeOptionKey,\n from: address,\n recipient: address,\n });\n }\n\n case Chain.THORChain:\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos: {\n const { estimateTransactionFee } = await import(\"@swapkit/toolbox-cosmos\");\n return estimateTransactionFee(params);\n }\n\n case Chain.Polkadot: {\n const { address, estimateTransactionFee } = getWallet(chain);\n\n return estimateTransactionFee({ ...params, recipient: address });\n }\n\n default:\n return baseValue;\n }\n }\n\n 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",
|
|
6
|
+
"import type {\n EVMTransaction,\n PriceRequest,\n QuoteRequest,\n QuoteResponseRoute,\n TrackerParams,\n} from \"@swapkit/api\";\nimport { SwapKitApi } from \"@swapkit/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainApis,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n type ConnectConfig,\n type 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} from \"@swapkit/helpers\";\nimport type { TransferParams as CosmosTransferParams } from \"@swapkit/toolbox-cosmos\";\nimport type { TransferParams as EVMTransferParams } from \"@swapkit/toolbox-evm\";\nimport type { UTXOTransferParams } from \"@swapkit/toolbox-utxo\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\ntype PluginsType = {\n [key in string]: {\n plugin: (params: SwapKitPluginParams<any>) => any;\n config?: any;\n };\n};\n\nexport type SwapKitParams<P, W> = {\n apis?: ChainApis;\n config?: ConnectConfig;\n plugins?: P;\n rpcUrls?: { [key in Chain]?: string };\n wallets?: W;\n};\n\nexport function SwapKit<\n Plugins extends PluginsType,\n Wallets extends { [key in string]: SwapKitWallet<any[]> },\n>({\n apis = {},\n config = {},\n plugins,\n rpcUrls = {},\n wallets = {} as Wallets,\n}: SwapKitParams<Plugins, Wallets> = {}) {\n const stagenet = config.stagenet;\n const isDev = config.swapkitConfig?.isDev;\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, { plugin, config: pluginConfig }]) => {\n const methods = plugin({ getWallet, stagenet, config: pluginConfig ?? config });\n\n // @ts-expect-error key is generic and cannot be indexed\n acc[pluginName] = methods;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key][\"plugin\"]> },\n );\n\n const connectWalletMethods = Object.entries(wallets).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet({ addChain, config, apis, rpcUrls });\n\n // @ts-expect-error walletName is generic and cannot be indexed\n acc[walletName] = connectWallet;\n return acc;\n },\n {} as { [key in keyof Wallets]: ReturnType<Wallets[key]> },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName: T) {\n const plugin = availablePlugins[pluginName] || Object.values(availablePlugins)[0];\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin;\n }\n\n function getSwapKitPluginForSKProvider(pluginName: PluginNameEnum): Plugins[keyof Plugins] {\n const plugin = Object.values(availablePlugins).find((plugin) =>\n plugin.supportedSwapkitProviders?.includes(pluginName),\n );\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin;\n }\n\n function addChain<T extends WalletChain>(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 WalletChain>(chain: T) {\n return connectedWallets[chain];\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends WalletChain>(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 WalletChain>(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 WalletChain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n /**\n * @deprecated - use toolbox directly or use getAddressValidator() function\n */\n function validateAddress(_: { address: string; chain: Chain }) {\n throw new SwapKitError(\"not_implemented\", {\n message:\n \"validateAddress is deprecated - use toolbox directly or import { getAddressValidator } from '@swapkit/core'\",\n });\n }\n\n async function getWalletWithBalance<T extends WalletChain>(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 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 as Exclude<WalletChain, Chain.Radix>;\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: WalletChain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n switch (chain) {\n case Chain.THORChain: {\n const { getToolboxByChain } = await import(\"@swapkit/toolbox-cosmos\");\n const toolbox = getToolboxByChain(chain);\n return toolbox().verifySignature({ signature, message, address });\n }\n\n default:\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO clean this up\n async function estimateTransactionFee<T extends PluginName>({\n type,\n feeOptionKey,\n params,\n }: (\n | { type: \"swap\"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }\n | { type: \"transfer\"; params: UTXOTransferParams | EVMTransferParams | CosmosTransferParams }\n | {\n type: \"approve\";\n params: {\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n feeOptionKey?: FeeOption;\n };\n }\n ) & {\n feeOptionKey: FeeOption;\n }): Promise<AssetValue | undefined> {\n const { assetValue } = params;\n const { chain } = assetValue;\n\n if (!getWallet(chain as WalletChain))\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Ethereum:\n case Chain.BinanceSmartChain:\n case Chain.Polygon: {\n const wallet = getWallet(chain);\n if (type === \"transfer\") {\n const txObject = await wallet.createTransferTx(params);\n return wallet.estimateTransactionFee(txObject, feeOptionKey);\n }\n\n if (type === \"approve\" && !assetValue.isGasAsset) {\n return wallet.estimateTransactionFee(\n await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n }),\n feeOptionKey,\n );\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if (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 { tx } = params.route;\n if (!tx) {\n return undefined;\n }\n\n return wallet.estimateTransactionFee(\n { ...(tx as EVMTransaction), value: BigInt((tx as EVMTransaction).value) },\n feeOptionKey,\n );\n }\n\n return AssetValue.from({ chain });\n }\n\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Dash:\n case Chain.Litecoin: {\n const { estimateTransactionFee, address } = getWallet(chain);\n\n return estimateTransactionFee({\n ...params,\n feeOptionKey,\n from: address,\n recipient: address,\n });\n }\n\n case Chain.THORChain:\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos: {\n const { estimateTransactionFee } = await import(\"@swapkit/toolbox-cosmos\");\n return estimateTransactionFee(params);\n }\n\n case Chain.Polkadot: {\n const { address, estimateTransactionFee } = getWallet(chain);\n\n return estimateTransactionFee({ ...params, recipient: address });\n }\n\n default:\n return baseValue;\n }\n }\n\n const swapkitConfig = config.swapkitConfig || {};\n const swapkitApiKey = swapkitConfig?.swapkitApiKey || config?.swapkitApiKey;\n const referer = swapkitConfig.useHashedApiKey ? swapkitConfig.referer : undefined;\n\n const api = swapkitApiKey\n ? {\n getGasRate: () => SwapKitApi.getGasRate(isDev, swapkitApiKey, referer),\n getPrice: (body: PriceRequest) => SwapKitApi.getPrice(body, isDev, swapkitApiKey, referer),\n getSwapQuote: (params: QuoteRequest) =>\n SwapKitApi.getSwapQuote(params, isDev, swapkitApiKey, referer),\n getTokenList: (provider: string) => SwapKitApi.getTokenList(provider),\n getTokenListProviders: () =>\n SwapKitApi.getTokenListProvidersV2(isDev, swapkitApiKey, referer),\n getTokenTradingPairs: (providers: PluginNameEnum[]) =>\n SwapKitApi.getTokenTradingPairs(providers, isDev, swapkitApiKey, referer),\n getTrackerDetails: (payload: TrackerParams) =>\n SwapKitApi.getTrackerDetails(payload, swapkitApiKey, referer),\n }\n : { undefined };\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n disconnectAll,\n disconnectChain,\n estimateTransactionFee,\n getAddress,\n getAllWallets,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n\n approveAssetValue,\n isAssetValueApproved,\n signMessage,\n swap,\n transfer,\n validateAddress,\n verifyMessage,\n api,\n };\n}\n",
|
|
7
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
8
|
"import { Chain } from \"@swapkit/helpers\";\n\nexport async function getAddressValidator() {\n const { cosmosValidateAddress } = await import(\"@swapkit/toolbox-cosmos\");\n const { evmValidateAddress } = await import(\"@swapkit/toolbox-evm\");\n const { substrateValidateAddress } = await import(\"@swapkit/toolbox-substrate\");\n const { utxoValidateAddress } = await import(\"@swapkit/toolbox-utxo\");\n const { validateAddress: solanaValidateAddress } = await import(\"@swapkit/toolbox-solana\");\n const { validateAddress: validateRadixAddress } = await import(\"@swapkit/toolbox-radix\");\n\n return function validateAddress({ address, chain }: { address: string; chain: Chain }) {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Optimism:\n case Chain.BinanceSmartChain:\n case Chain.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"
|
|
9
9
|
],
|
|
10
|
-
"mappings": "
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "267A91833868AB5B64756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "swapkit-oss",
|
|
3
3
|
"dependencies": {
|
|
4
|
-
"@swapkit/api": "
|
|
5
|
-
"@swapkit/helpers": "1.
|
|
6
|
-
"@swapkit/plugin-evm": "1.3.
|
|
7
|
-
"@swapkit/toolbox-cosmos": "1.
|
|
8
|
-
"@swapkit/toolbox-evm": "1.7.
|
|
9
|
-
"@swapkit/toolbox-radix": "1.2.
|
|
10
|
-
"@swapkit/toolbox-solana": "1.3.
|
|
11
|
-
"@swapkit/toolbox-substrate": "1.3.
|
|
12
|
-
"@swapkit/toolbox-utxo": "1.2.
|
|
4
|
+
"@swapkit/api": "2.0.1",
|
|
5
|
+
"@swapkit/helpers": "1.19.0",
|
|
6
|
+
"@swapkit/plugin-evm": "1.3.4",
|
|
7
|
+
"@swapkit/toolbox-cosmos": "1.6.1",
|
|
8
|
+
"@swapkit/toolbox-evm": "1.7.7",
|
|
9
|
+
"@swapkit/toolbox-radix": "1.2.23",
|
|
10
|
+
"@swapkit/toolbox-solana": "1.3.7",
|
|
11
|
+
"@swapkit/toolbox-substrate": "1.3.7",
|
|
12
|
+
"@swapkit/toolbox-utxo": "1.2.7"
|
|
13
13
|
},
|
|
14
14
|
"description": "SwapKit - Core",
|
|
15
15
|
"files": [
|
|
@@ -34,5 +34,5 @@
|
|
|
34
34
|
},
|
|
35
35
|
"type": "module",
|
|
36
36
|
"types": "./src/index.ts",
|
|
37
|
-
"version": "
|
|
37
|
+
"version": "3.1.0"
|
|
38
38
|
}
|
package/src/client.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
EVMTransaction,
|
|
3
|
+
PriceRequest,
|
|
4
|
+
QuoteRequest,
|
|
5
|
+
QuoteResponseRoute,
|
|
6
|
+
TrackerParams,
|
|
7
|
+
} from "@swapkit/api";
|
|
8
|
+
import { SwapKitApi } from "@swapkit/api";
|
|
2
9
|
|
|
3
10
|
import {
|
|
4
11
|
ApproveMode,
|
|
@@ -41,8 +48,6 @@ export type SwapKitParams<P, W> = {
|
|
|
41
48
|
config?: ConnectConfig;
|
|
42
49
|
plugins?: P;
|
|
43
50
|
rpcUrls?: { [key in Chain]?: string };
|
|
44
|
-
// TODO: migrate to `config` only
|
|
45
|
-
stagenet?: boolean;
|
|
46
51
|
wallets?: W;
|
|
47
52
|
};
|
|
48
53
|
|
|
@@ -54,9 +59,10 @@ export function SwapKit<
|
|
|
54
59
|
config = {},
|
|
55
60
|
plugins,
|
|
56
61
|
rpcUrls = {},
|
|
57
|
-
stagenet = false,
|
|
58
62
|
wallets = {} as Wallets,
|
|
59
63
|
}: SwapKitParams<Plugins, Wallets> = {}) {
|
|
64
|
+
const stagenet = config.stagenet;
|
|
65
|
+
const isDev = config.swapkitConfig?.isDev;
|
|
60
66
|
type PluginName = keyof Plugins;
|
|
61
67
|
const connectedWallets = {} as FullWallet;
|
|
62
68
|
|
|
@@ -104,7 +110,7 @@ export function SwapKit<
|
|
|
104
110
|
return plugin;
|
|
105
111
|
}
|
|
106
112
|
|
|
107
|
-
function addChain<T extends
|
|
113
|
+
function addChain<T extends WalletChain>(connectWallet: ChainWallet<T>) {
|
|
108
114
|
const currentWallet = getWallet(connectWallet.chain);
|
|
109
115
|
|
|
110
116
|
connectedWallets[connectWallet.chain] = { ...currentWallet, ...connectWallet };
|
|
@@ -163,7 +169,7 @@ export function SwapKit<
|
|
|
163
169
|
/**
|
|
164
170
|
* @Public
|
|
165
171
|
*/
|
|
166
|
-
function getWallet<T extends
|
|
172
|
+
function getWallet<T extends WalletChain>(chain: T) {
|
|
167
173
|
return connectedWallets[chain];
|
|
168
174
|
}
|
|
169
175
|
|
|
@@ -171,7 +177,7 @@ export function SwapKit<
|
|
|
171
177
|
return { ...connectedWallets };
|
|
172
178
|
}
|
|
173
179
|
|
|
174
|
-
function getAddress<T extends
|
|
180
|
+
function getAddress<T extends WalletChain>(chain: T) {
|
|
175
181
|
return getWallet(chain)?.address || "";
|
|
176
182
|
}
|
|
177
183
|
|
|
@@ -183,7 +189,7 @@ export function SwapKit<
|
|
|
183
189
|
return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });
|
|
184
190
|
}
|
|
185
191
|
|
|
186
|
-
function disconnectChain<T extends
|
|
192
|
+
function disconnectChain<T extends WalletChain>(chain: T) {
|
|
187
193
|
const wallet = getWallet(chain);
|
|
188
194
|
wallet?.disconnect?.();
|
|
189
195
|
delete connectedWallets[chain];
|
|
@@ -195,7 +201,7 @@ export function SwapKit<
|
|
|
195
201
|
}
|
|
196
202
|
}
|
|
197
203
|
|
|
198
|
-
function getBalance<T extends
|
|
204
|
+
function getBalance<T extends WalletChain, R extends boolean>(
|
|
199
205
|
chain: T,
|
|
200
206
|
refresh?: R,
|
|
201
207
|
): ConditionalAssetValueReturn<R> {
|
|
@@ -216,7 +222,7 @@ export function SwapKit<
|
|
|
216
222
|
});
|
|
217
223
|
}
|
|
218
224
|
|
|
219
|
-
async function getWalletWithBalance<T extends
|
|
225
|
+
async function getWalletWithBalance<T extends WalletChain>(chain: T, potentialScamFilter = true) {
|
|
220
226
|
const defaultBalance = [AssetValue.from({ chain })];
|
|
221
227
|
const wallet = getWallet(chain);
|
|
222
228
|
|
|
@@ -254,14 +260,14 @@ export function SwapKit<
|
|
|
254
260
|
assetValue,
|
|
255
261
|
...params
|
|
256
262
|
}: UTXOTransferParams | EVMTransferParams | CosmosTransferParams) {
|
|
257
|
-
const chain = assetValue.chain as WalletChain
|
|
263
|
+
const chain = assetValue.chain as Exclude<WalletChain, Chain.Radix>;
|
|
258
264
|
const wallet = getWallet(chain);
|
|
259
265
|
if (!wallet) throw new SwapKitError("core_wallet_connection_not_found");
|
|
260
266
|
|
|
261
267
|
return wallet.transfer({ ...params, assetValue });
|
|
262
268
|
}
|
|
263
269
|
|
|
264
|
-
function signMessage({ chain, message }: { chain:
|
|
270
|
+
function signMessage({ chain, message }: { chain: WalletChain; message: string }) {
|
|
265
271
|
const wallet = getWallet(chain);
|
|
266
272
|
if (!wallet) throw new SwapKitError("core_wallet_connection_not_found");
|
|
267
273
|
|
|
@@ -315,7 +321,8 @@ export function SwapKit<
|
|
|
315
321
|
const { assetValue } = params;
|
|
316
322
|
const { chain } = assetValue;
|
|
317
323
|
|
|
318
|
-
if (!getWallet(chain
|
|
324
|
+
if (!getWallet(chain as WalletChain))
|
|
325
|
+
throw new SwapKitError("core_wallet_connection_not_found");
|
|
319
326
|
|
|
320
327
|
const baseValue = AssetValue.from({ chain });
|
|
321
328
|
|
|
@@ -402,6 +409,26 @@ export function SwapKit<
|
|
|
402
409
|
}
|
|
403
410
|
}
|
|
404
411
|
|
|
412
|
+
const swapkitConfig = config.swapkitConfig || {};
|
|
413
|
+
const swapkitApiKey = swapkitConfig?.swapkitApiKey || config?.swapkitApiKey;
|
|
414
|
+
const referer = swapkitConfig.useHashedApiKey ? swapkitConfig.referer : undefined;
|
|
415
|
+
|
|
416
|
+
const api = swapkitApiKey
|
|
417
|
+
? {
|
|
418
|
+
getGasRate: () => SwapKitApi.getGasRate(isDev, swapkitApiKey, referer),
|
|
419
|
+
getPrice: (body: PriceRequest) => SwapKitApi.getPrice(body, isDev, swapkitApiKey, referer),
|
|
420
|
+
getSwapQuote: (params: QuoteRequest) =>
|
|
421
|
+
SwapKitApi.getSwapQuote(params, isDev, swapkitApiKey, referer),
|
|
422
|
+
getTokenList: (provider: string) => SwapKitApi.getTokenList(provider),
|
|
423
|
+
getTokenListProviders: () =>
|
|
424
|
+
SwapKitApi.getTokenListProvidersV2(isDev, swapkitApiKey, referer),
|
|
425
|
+
getTokenTradingPairs: (providers: PluginNameEnum[]) =>
|
|
426
|
+
SwapKitApi.getTokenTradingPairs(providers, isDev, swapkitApiKey, referer),
|
|
427
|
+
getTrackerDetails: (payload: TrackerParams) =>
|
|
428
|
+
SwapKitApi.getTrackerDetails(payload, swapkitApiKey, referer),
|
|
429
|
+
}
|
|
430
|
+
: { undefined };
|
|
431
|
+
|
|
405
432
|
return {
|
|
406
433
|
...availablePlugins,
|
|
407
434
|
...connectWalletMethods,
|
|
@@ -424,5 +451,6 @@ export function SwapKit<
|
|
|
424
451
|
transfer,
|
|
425
452
|
validateAddress,
|
|
426
453
|
verifyMessage,
|
|
454
|
+
api,
|
|
427
455
|
};
|
|
428
456
|
}
|