@swapkit/core 4.0.0-beta.46 → 4.0.0-beta.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- var t=Object.create;var{getPrototypeOf:l,defineProperty:T,getOwnPropertyNames:F,getOwnPropertyDescriptor:e}=Object,P=Object.prototype.hasOwnProperty,j=(q,Z,G)=>{for(let I of F(Z))if(!P.call(q,I)&&I!=="default")T(q,I,{get:()=>Z[I],enumerable:!0});if(G){for(let I of F(Z))if(!P.call(G,I)&&I!=="default")T(G,I,{get:()=>Z[I],enumerable:!0});return G}},M=(q,Z,G)=>{G=q!=null?t(l(q)):{};let I=Z||!q||!q.__esModule?T(G,"default",{value:q,enumerable:!0}):G;for(let x of F(q))if(!P.call(I,x))T(I,x,{get:()=>q[x],enumerable:!0});return I},N=new WeakMap,a=(q)=>{var Z=N.get(q),G;if(Z)return Z;if(Z=T({},"__esModule",{value:!0}),q&&typeof q==="object"||typeof q==="function")F(q).map((I)=>!P.call(Z,I)&&T(Z,I,{get:()=>q[I],enumerable:!(G=e(q,I))||G.enumerable}));return N.set(q,Z),Z};var v=(q,Z)=>{for(var G in Z)T(q,G,{get:Z[G],enumerable:!0,configurable:!0,set:(I)=>Z[G]=()=>I})};var _={};v(_,{SwapKit:()=>A});module.exports=a(_);j(_,require("@swapkit/helpers/api"),module.exports);j(_,require("@swapkit/helpers"),module.exports);var y={};v(y,{SwapKit:()=>A});var U=require("@swapkit/helpers");var D=require("@swapkit/helpers"),S=require("ts-pattern");function K({chain:q,txHash:Z}){let G=D.ChainToExplorerUrl[q];return S.match(q).with(D.Chain.Maya,D.Chain.Kujira,D.Chain.Cosmos,D.Chain.THORChain,D.Chain.Solana,()=>`${G}/tx/${Z.startsWith("0x")?Z.slice(2):Z}`).with(D.Chain.Arbitrum,D.Chain.Avalanche,D.Chain.BinanceSmartChain,D.Chain.Base,D.Chain.Ethereum,D.Chain.Optimism,D.Chain.Polkadot,D.Chain.Polygon,()=>`${G}/tx/${Z.startsWith("0x")?Z:`0x${Z}`}`).with(D.Chain.Litecoin,D.Chain.Bitcoin,D.Chain.BitcoinCash,D.Chain.Dogecoin,D.Chain.Zcash,D.Chain.Radix,()=>`${G}/transaction/${Z.toLowerCase()}`).with(D.Chain.Near,()=>`${G}/txns/${Z}`).with(D.Chain.Ripple,()=>`${G}/transactions/${Z}`).with(D.Chain.Tron,()=>`${G}/#/transaction/${Z}`).otherwise(()=>"")}function C({chain:q,address:Z}){let G=D.ChainToExplorerUrl[q];return S.match(q).with(D.Chain.Solana,D.Chain.Radix,()=>`${G}/account/${Z}`).with(D.Chain.Tron,()=>`${G}/#/address/${Z}`).otherwise(()=>`${G}/address/${Z}`)}function A({config:q,plugins:Z,wallets:G}={}){if(q)U.SKConfig.set(q);let I={},x=Object.entries(Z||{}).reduce(($,[L,R])=>{let z=R({getWallet:X});return $[L]=z,$},{}),V=Object.entries(G||{}).reduce(($,[L,R])=>{let z=R.connectWallet({addChain:m});return $[L]=z,$},{});function W($){let L=$&&x[$],R=Object.values(x).find((Y)=>Y.supportedSwapkitProviders?.includes($)),z=L||R;if(!z)throw new U.SwapKitError("core_plugin_not_found");return z}function m($){let L=X($.chain),R=$.balance||L.balance||[U.AssetValue.from({chain:$.chain})],z={...L,...$,balance:R};return I[$.chain]=z,z}function b({assetValue:$,type:L="checkOnly",contractAddress:R}){let z=x[R];if(z){if(L===U.ApproveMode.CheckOnly&&"isAssetValueApproved"in z)return z.isAssetValueApproved({assetValue:$});if(L===U.ApproveMode.Approve&&"approveAssetValue"in z)return z.approveAssetValue({assetValue:$});throw new U.SwapKitError({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(R)} cannot be used for approve operation`}})}let Y=$.chain,k=U.EVMChains.includes(Y);if(k&&$.isGasAsset||!k||$.isSynthetic)return Promise.resolve(L==="checkOnly"?!0:"approved");let Q=X(Y),J=L==="checkOnly"?Q.isApproved:Q.approve;if(!J)throw new U.SwapKitError("core_wallet_connection_not_found");if(!($.address&&Q.address&&typeof R==="string"))throw new U.SwapKitError("core_approve_asset_address_or_from_not_found");return J({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:Q.address,spenderAddress:R})}function X($){return I[$]||{}}function w(){return{...I}}function o($){return X($)?.address||""}function d($,L){return b({assetValue:$,contractAddress:L,type:U.ApproveMode.Approve})}function r($,L){return b({assetValue:$,contractAddress:L,type:U.ApproveMode.CheckOnly})}function O($){X($)?.disconnect?.(),delete I[$]}function g(){for(let $ of Object.keys(I))O($)}function u($,L){return L?E($).then(({balance:R})=>R):X($)?.balance||[]}async function E($,L=!0){if($===U.Chain.Fiat||!X($))throw new U.SwapKitError("core_wallet_connection_not_found");let R=X($),z=[U.AssetValue.from({chain:$})];if(R.balance=z,"getBalance"in R){let Y=await R.getBalance(R.address,L);R.balance=Y}return R}function h({route:$,pluginName:L,...R}){let z=W(L||$.providers[0]);if("swap"in z)return z.swap({...R,route:$});throw new U.SwapKitError("core_plugin_swap_not_found")}function p({assetValue:$,...L}){let R=$.chain;if([U.Chain.Fiat,U.Chain.Radix].includes(R)||!X(R))throw new U.SwapKitError("core_wallet_connection_not_found");return X(R).transfer({...L,assetValue:$})}function c({chain:$,message:L}){let R=X($);if(!R)throw new U.SwapKitError("core_wallet_connection_not_found");if("signMessage"in R)return R.signMessage?.(L);throw new U.SwapKitError({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:R.walletType}})}async function i({address:$,chain:L,message:R,signature:z}){if(L!==U.Chain.THORChain)throw new U.SwapKitError({errorKey:"core_verify_message_not_supported",info:{chain:L}});let{getCosmosToolbox:Y}=await import("@swapkit/toolboxes/cosmos");return(await Y(L)).verifySignature({signature:z,message:R,address:$})}async function n({type:$,feeOptionKey:L,params:R}){let{assetValue:z}=R,{chain:Y}=z;if(!X(Y))throw new U.SwapKitError("core_wallet_connection_not_found");let k=U.AssetValue.from({chain:Y}),{match:f}=await import("ts-pattern");return f(Y).returnType().with(U.Chain.Arbitrum,U.Chain.Avalanche,U.Chain.Ethereum,U.Chain.BinanceSmartChain,U.Chain.Polygon,U.Chain.Base,async(Q)=>{let J=X(Q);if($==="transfer"){let B=await J.createTransferTx(R);return J.estimateTransactionFee({...B,chain:Q,feeOption:L})}if($==="approve"&&!z.isGasAsset){let B=await J.createApprovalTx({assetAddress:z.address,spenderAddress:R.contractAddress,amount:z.getBaseValue("bigint"),from:J.address});return J.estimateTransactionFee({...B,chain:Q,feeOption:L})}if($==="swap"){let B=R.route.providers[0];if([U.ProviderName.CHAINFLIP,U.ProviderName.CHAINFLIP_STREAMING].includes(B)){let s=await J.createTransferTx({sender:J.address,recipient:J.address,assetValue:z});return J.estimateTransactionFee({...s,chain:Q,feeOption:L})}let H=R.route.tx;if(H)return J.estimateTransactionFee({...H,value:BigInt(H.value),feeOption:L,chain:Q})}return U.AssetValue.from({chain:Q})}).with(U.Chain.Bitcoin,U.Chain.BitcoinCash,U.Chain.Dogecoin,U.Chain.Dash,U.Chain.Litecoin,(Q)=>{let J=X(Q);return J.estimateTransactionFee({...R,feeOptionKey:L,recipient:J.address,sender:J.address})}).with(U.Chain.THORChain,U.Chain.Maya,U.Chain.Kujira,U.Chain.Cosmos,async()=>{let{estimateTransactionFee:Q}=await import("@swapkit/toolboxes/cosmos");return Q(R)}).with(U.Chain.Polkadot,(Q)=>{let J=X(Q);return J.estimateTransactionFee({...R,recipient:J.address})}).with(U.Chain.Ripple,(Q)=>{return X(Q).estimateTransactionFee()}).with(U.Chain.Tron,(Q)=>{let J=X(Q);return J.estimateTransactionFee({...R,recipient:J.address,sender:J.address})}).otherwise(async()=>k)}return{...x,...V,disconnectAll:g,disconnectChain:O,estimateTransactionFee:n,getAddress:o,getAllWallets:w,getBalance:u,getExplorerAddressUrl:C,getExplorerTxUrl:K,getWallet:X,getWalletWithBalance:E,approveAssetValue:d,isAssetValueApproved:r,signMessage:c,swap:h,transfer:p,verifyMessage:i}}
1
+ var a=Object.create;var{getPrototypeOf:$$,defineProperty:k,getOwnPropertyNames:F,getOwnPropertyDescriptor:U$}=Object,P=Object.prototype.hasOwnProperty,_=(G,x,Z)=>{for(let j of F(x))if(!P.call(G,j)&&j!=="default")k(G,j,{get:()=>x[j],enumerable:!0});if(Z){for(let j of F(x))if(!P.call(Z,j)&&j!=="default")k(Z,j,{get:()=>x[j],enumerable:!0});return Z}},f=(G,x,Z)=>{Z=G!=null?a($$(G)):{};let j=x||!G||!G.__esModule?k(Z,"default",{value:G,enumerable:!0}):Z;for(let B of F(G))if(!P.call(j,B))k(j,B,{get:()=>G[B],enumerable:!0});return j},v=new WeakMap,R$=(G)=>{var x=v.get(G),Z;if(x)return x;if(x=k({},"__esModule",{value:!0}),G&&typeof G==="object"||typeof G==="function")F(G).map((j)=>!P.call(x,j)&&k(x,j,{get:()=>G[j],enumerable:!(Z=U$(G,j))||Z.enumerable}));return v.set(G,x),x};var y=(G,x)=>{for(var Z in x)k(G,Z,{get:x[Z],enumerable:!0,configurable:!0,set:(j)=>x[Z]=()=>j})};var Y={};y(Y,{SwapKit:()=>w});module.exports=R$(Y);_(Y,require("@swapkit/helpers/api"),module.exports);_(Y,require("@swapkit/helpers"),module.exports);var o={};y(o,{SwapKit:()=>w});var R=require("@swapkit/helpers");var D=require("@swapkit/helpers"),C=require("ts-pattern");function K({chain:G,txHash:x}){let Z=D.ChainToExplorerUrl[G];return C.match(G).with(D.Chain.Maya,D.Chain.Kujira,D.Chain.Cosmos,D.Chain.THORChain,D.Chain.Solana,()=>`${Z}/tx/${x.startsWith("0x")?x.slice(2):x}`).with(D.Chain.Arbitrum,D.Chain.Aurora,D.Chain.Avalanche,D.Chain.BinanceSmartChain,D.Chain.Base,D.Chain.Berachain,D.Chain.Ethereum,D.Chain.Gnosis,D.Chain.Optimism,D.Chain.Polkadot,D.Chain.Polygon,()=>`${Z}/tx/${x.startsWith("0x")?x:`0x${x}`}`).with(D.Chain.Litecoin,D.Chain.Bitcoin,D.Chain.BitcoinCash,D.Chain.Dogecoin,D.Chain.Zcash,D.Chain.Radix,()=>`${Z}/transaction/${x.toLowerCase()}`).with(D.Chain.Near,()=>`${Z}/txns/${x}`).with(D.Chain.Ripple,()=>`${Z}/transactions/${x}`).with(D.Chain.Tron,()=>`${Z}/#/transaction/${x}`).otherwise(()=>"")}function A({chain:G,address:x}){let Z=D.ChainToExplorerUrl[G];return C.match(G).with(D.Chain.Solana,D.Chain.Radix,()=>`${Z}/account/${x}`).with(D.Chain.Tron,()=>`${Z}/#/address/${x}`).otherwise(()=>`${Z}/address/${x}`)}function w({config:G,plugins:x,wallets:Z}={}){if(G)R.SKConfig.set(G);let j={},B=Object.entries(x||{}).reduce(($,[L,U])=>{let q=U({getWallet:z});return $[L]=q,$},{}),V=Object.entries(Z||{}).reduce(($,[L,U])=>{let q=U.connectWallet({addChain:W});return $[L]=q,$},{});function m($){let L=$&&B[$],U=Object.values(B).find((Q)=>Q.supportedSwapkitProviders?.includes($)),q=L||U;if(!q)throw new R.SwapKitError("core_plugin_not_found");return q}function W($){let L=z($.chain),U=$.balance||L.balance||[R.AssetValue.from({chain:$.chain})],q={...L,...$,balance:U};return j[$.chain]=q,q}function M({assetValue:$,type:L="checkOnly",contractAddress:U}){let q=B[U];if(q){if(L===R.ApproveMode.CheckOnly&&"isAssetValueApproved"in q)return q.isAssetValueApproved({assetValue:$});if(L===R.ApproveMode.Approve&&"approveAssetValue"in q)return q.approveAssetValue({assetValue:$});throw new R.SwapKitError({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(U)} cannot be used for approve operation`}})}let Q=$.chain,T=R.EVMChains.includes(Q);if(T&&$.isGasAsset||!T||$.isSynthetic)return Promise.resolve(L==="checkOnly"?!0:"approved");let I=z(Q),J=L==="checkOnly"?I.isApproved:I.approve;if(!J)throw new R.SwapKitError("core_wallet_connection_not_found");if(!($.address&&I.address&&typeof U==="string"))throw new R.SwapKitError("core_approve_asset_address_or_from_not_found");return J({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:I.address,spenderAddress:U})}function z($){return j[$]||{}}function h(){return{...j}}function r($){return z($)?.address||""}function d($,L){return M({assetValue:$,contractAddress:L,type:R.ApproveMode.Approve})}function g($,L){return M({assetValue:$,contractAddress:L,type:R.ApproveMode.CheckOnly})}function S($){z($)?.disconnect?.(),delete j[$]}function u(){for(let $ of Object.keys(j))S($)}function p($,L){return L?b($).then(({balance:U})=>U):z($)?.balance||[]}async function b($,L=!0){if($===R.Chain.Fiat||!z($))throw new R.SwapKitError("core_wallet_connection_not_found");let U=z($),q=[R.AssetValue.from({chain:$})];if(U.balance=q,"getBalance"in U){let Q=await U.getBalance(U.address,L);U.balance=Q}return U}function i({route:$,pluginName:L,...U}){let q=m(L||$.providers[0]);if("swap"in q)return q.swap({...U,route:$});throw new R.SwapKitError("core_plugin_swap_not_found")}function c({assetValue:$,...L}){let U=$.chain;if([R.Chain.Fiat,R.Chain.Radix].includes(U)||!z(U))throw new R.SwapKitError("core_wallet_connection_not_found");return z(U).transfer({...L,assetValue:$})}function n({chain:$,message:L}){let U=z($);if(!U)throw new R.SwapKitError("core_wallet_connection_not_found");if("signMessage"in U)return U.signMessage?.(L);throw new R.SwapKitError({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:U.walletType}})}async function t({address:$,chain:L,message:U,signature:q}){if(L!==R.Chain.THORChain)throw new R.SwapKitError({errorKey:"core_verify_message_not_supported",info:{chain:L}});let{getCosmosToolbox:Q}=await import("@swapkit/toolboxes/cosmos");return(await Q(L)).verifySignature({signature:q,message:U,address:$})}async function s({type:$,feeOptionKey:L,params:U}){let{assetValue:q}=U,{chain:Q}=q;if(!z(Q))throw new R.SwapKitError("core_wallet_connection_not_found");let T=R.AssetValue.from({chain:Q}),{match:H}=await import("ts-pattern");return H(Q).returnType().with(...R.EVMChains,async(I)=>{let{address:J,...X}=z(I),E=H($).with("transfer",()=>X.createTransferTx(U)).with("approve",(l)=>{let{contractAddress:O}=U;return X.createApprovalTx({assetAddress:q.address,spenderAddress:O,amount:q.getBaseValue("bigint"),from:J})}).with("swap",(l)=>{let{route:{providers:[O],tx:e}}=U;if(O&&[R.ProviderName.CHAINFLIP,R.ProviderName.CHAINFLIP_STREAMING].includes(O))return X.createTransferTx({sender:J,recipient:J,assetValue:q});let N=e;return{...N,value:BigInt(N.value)}}).otherwise(()=>{return});if(!E)return T;return X.estimateTransactionFee({...E,chain:I,feeOption:L})}).with(...R.UTXOChains,(I)=>{let{address:J,...X}=z(I);return X.estimateTransactionFee({...U,feeOptionKey:L,recipient:J,sender:J})}).with(...R.CosmosChains,async()=>{let{estimateTransactionFee:I}=await import("@swapkit/toolboxes/cosmos");return I(U)}).with(R.Chain.Polkadot,(I)=>{let J=z(I);return J.estimateTransactionFee({...U,recipient:J.address})}).with(R.Chain.Tron,(I)=>{let{address:J,...X}=z(I);return X.estimateTransactionFee({...U,recipient:J,sender:J})}).with(R.Chain.Ripple,(I)=>z(I).estimateTransactionFee()).otherwise(async()=>T)}return{...B,...V,disconnectAll:u,disconnectChain:S,estimateTransactionFee:s,getAddress:r,getAllWallets:h,getBalance:p,getExplorerAddressUrl:A,getExplorerTxUrl:K,getWallet:z,getWalletWithBalance:b,approveAssetValue:d,isAssetValueApproved:g,signMessage:n,swap:i,transfer:c,verifyMessage:t}}
2
2
 
3
- //# debugId=1B5FE59C694EEAFC64756E2164756E21
3
+ //# debugId=9DE3AD230237415664756E2164756E21
4
4
  //# sourceMappingURL=index.cjs.map
@@ -3,10 +3,10 @@
3
3
  "sources": ["../src/index.ts", "../src/client.ts", "../src/helpers/explorerUrls.ts"],
4
4
  "sourcesContent": [
5
5
  "export * from \"@swapkit/helpers/api\";\nexport * from \"@swapkit/helpers\";\nexport * from \"./client\";\n",
6
- "import type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n type EVMChain,\n EVMChains,\n type FeeOption,\n type FullWallet,\n type GenericTransferParams,\n ProviderName as PluginNameEnum,\n SKConfig,\n type SKConfigState,\n SwapKitError,\n type SwapParams,\n type createPlugin,\n type createWallet,\n} from \"@swapkit/helpers\";\nimport type { EVMCreateTransactionParams, EVMTransferParams } from \"@swapkit/toolboxes/evm\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\nexport type SwapKitParams<P, W> = {\n config?: SKConfigState;\n plugins?: P;\n wallets?: W;\n};\n\nexport function SwapKit<\n Plugins extends ReturnType<typeof createPlugin>,\n Wallets extends ReturnType<typeof createWallet>,\n>({\n config,\n plugins,\n wallets,\n}: { config?: SKConfigState; plugins?: Plugins; wallets?: Wallets } = {}) {\n if (config) {\n SKConfig.set(config);\n }\n\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n type ConnectedChains = keyof typeof connectedWallets;\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, plugin]) => {\n const methods = plugin({ getWallet });\n\n acc[pluginName as PluginName] = methods as ReturnType<Plugins[keyof Plugins]>;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key]> },\n );\n\n const connectWalletMethods = Object.entries(wallets || {}).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet.connectWallet({ addChain });\n\n acc[walletName as keyof Wallets] = connectWallet as ReturnType<\n Wallets[keyof Wallets][\"connectWallet\"]\n >;\n return acc;\n },\n {} as {\n [key in keyof Wallets]: ReturnType<Wallets[key][\"connectWallet\"]>;\n },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName?: T) {\n const pluginByName = pluginName && availablePlugins[pluginName];\n const pluginByProvider = Object.values(availablePlugins).find((plugin) =>\n plugin.supportedSwapkitProviders?.includes(pluginName),\n );\n const plugin = pluginByName || pluginByProvider;\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin as ReturnType<Plugins[T]>;\n }\n\n function addChain<T extends Chain>(\n connectWallet: Omit<ChainWallet<T>, \"balance\"> & { balance?: AssetValue[] },\n ) {\n const currentWallet = getWallet(connectWallet.chain);\n\n const balance = connectWallet.balance ||\n currentWallet.balance || [AssetValue.from({ chain: connectWallet.chain })];\n\n const wallet = { ...currentWallet, ...connectWallet, balance } as FullWallet[T];\n\n connectedWallets[connectWallet.chain] = wallet;\n\n return wallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends ConnectedChains>(chain: T) {\n return connectedWallets[chain] || {};\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n async function getWalletWithBalance<T extends Chain>(\n chain: T,\n scamFilter = true,\n ): Promise<ReturnType<typeof getWallet> & { balance: AssetValue[] }> {\n if (chain === Chain.Fiat || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);\n const defaultBalance = [AssetValue.from({ chain })];\n wallet.balance = defaultBalance;\n\n if (\"getBalance\" in wallet) {\n const balance = await wallet.getBalance(wallet.address, scamFilter);\n wallet.balance = balance;\n }\n\n return wallet;\n }\n\n function swap<T extends PluginName>({\n route,\n pluginName,\n ...rest\n }: SwapParams<T, QuoteResponseRoute>) {\n const plugin = getSwapKitPlugin(pluginName || route.providers[0]);\n\n if (\"swap\" in plugin) {\n // @ts-expect-error TODO: fix this\n return plugin.swap({ ...rest, route });\n }\n\n throw new SwapKitError(\"core_plugin_swap_not_found\");\n }\n\n function transfer({ assetValue, ...params }: GenericTransferParams | EVMTransferParams) {\n const chain = assetValue.chain;\n if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix | Chain.Near>);\n\n // we need to simplify this to one object params\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n if (chain !== Chain.THORChain) {\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const toolbox = await getCosmosToolbox(chain);\n\n return toolbox.verifySignature({ signature, message, address });\n }\n\n async function estimateTransactionFee<T extends PluginName>({\n type,\n feeOptionKey,\n params,\n }: (\n | { type: \"swap\"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }\n | {\n type: \"transfer\";\n params: EVMTransferParams | (GenericTransferParams & { sender?: string });\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 as Chain)) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n const { match } = await import(\"ts-pattern\");\n\n return match(chain as Chain)\n .returnType<Promise<AssetValue | undefined>>()\n .with(\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Ethereum,\n Chain.BinanceSmartChain,\n Chain.Polygon,\n Chain.Base,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: simplify this or use nested match\n async (chain) => {\n const wallet = getWallet(chain);\n\n if (type === \"transfer\") {\n const txObject = await wallet.createTransferTx(params as EVMCreateTransactionParams);\n return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });\n }\n\n if (type === \"approve\" && !assetValue.isGasAsset) {\n const approvalTx = await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n });\n\n return wallet.estimateTransactionFee({ ...approvalTx, chain, feeOption: feeOptionKey });\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if ([PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)) {\n const txObject = await wallet.createTransferTx({\n sender: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\n\n return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });\n }\n\n const tx = params.route.tx as EVMTransaction;\n\n if (tx) {\n return wallet.estimateTransactionFee({\n ...tx,\n value: BigInt(tx.value),\n feeOption: feeOptionKey,\n chain,\n });\n }\n }\n\n return AssetValue.from({ chain });\n },\n )\n .with(\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Dogecoin,\n Chain.Dash,\n Chain.Litecoin,\n (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee({\n ...params,\n feeOptionKey,\n recipient: wallet.address,\n sender: wallet.address,\n });\n },\n )\n .with(Chain.THORChain, Chain.Maya, Chain.Kujira, Chain.Cosmos, async () => {\n const { estimateTransactionFee } = await import(\"@swapkit/toolboxes/cosmos\");\n return estimateTransactionFee(params);\n })\n .with(Chain.Polkadot, (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee({ ...params, recipient: wallet.address });\n })\n .with(Chain.Ripple, (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee();\n })\n .with(Chain.Tron, (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee({\n ...params,\n recipient: wallet.address,\n sender: wallet.address,\n });\n })\n .otherwise(async () => baseValue);\n }\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n disconnectAll,\n disconnectChain,\n estimateTransactionFee,\n getAddress,\n getAllWallets,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n\n approveAssetValue,\n isAssetValueApproved,\n signMessage,\n swap,\n transfer,\n verifyMessage,\n };\n}\n",
7
- "import { Chain, ChainToExplorerUrl } from \"@swapkit/helpers\";\nimport { match } from \"ts-pattern\";\n\nexport function getExplorerTxUrl({ chain, txHash }: { txHash: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n const explorerUrl = match(chain)\n .with(\n Chain.Maya,\n Chain.Kujira,\n Chain.Cosmos,\n Chain.THORChain,\n Chain.Solana,\n () => `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash.slice(2) : txHash}`,\n )\n .with(\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Base,\n Chain.Ethereum,\n Chain.Optimism,\n Chain.Polkadot,\n Chain.Polygon,\n () => `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash : `0x${txHash}`}`,\n )\n .with(\n Chain.Litecoin,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Dogecoin,\n Chain.Zcash,\n Chain.Radix,\n () => `${baseUrl}/transaction/${txHash.toLowerCase()}`,\n )\n .with(Chain.Near, () => `${baseUrl}/txns/${txHash}`)\n .with(Chain.Ripple, () => `${baseUrl}/transactions/${txHash}`)\n .with(Chain.Tron, () => `${baseUrl}/#/transaction/${txHash}`)\n .otherwise(() => \"\");\n\n return explorerUrl;\n}\n\nexport function getExplorerAddressUrl({ chain, address }: { address: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n const explorerUrl = match(chain)\n .with(Chain.Solana, Chain.Radix, () => `${baseUrl}/account/${address}`)\n .with(Chain.Tron, () => `${baseUrl}/#/address/${address}`)\n .otherwise(() => `${baseUrl}/address/${address}`);\n\n return explorerUrl;\n}\n"
6
+ "import type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n CosmosChains,\n type EVMChain,\n EVMChains,\n type FeeOption,\n type FullWallet,\n type GenericTransferParams,\n ProviderName as PluginNameEnum,\n SKConfig,\n type SKConfigState,\n SwapKitError,\n type SwapParams,\n UTXOChains,\n type createPlugin,\n type createWallet,\n} from \"@swapkit/helpers\";\nimport type { EVMCreateTransactionParams, EVMTransferParams } from \"@swapkit/toolboxes/evm\";\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\nexport type SwapKitParams<P, W> = {\n config?: SKConfigState;\n plugins?: P;\n wallets?: W;\n};\n\nexport function SwapKit<\n Plugins extends ReturnType<typeof createPlugin>,\n Wallets extends ReturnType<typeof createWallet>,\n>({\n config,\n plugins,\n wallets,\n}: { config?: SKConfigState; plugins?: Plugins; wallets?: Wallets } = {}) {\n if (config) {\n SKConfig.set(config);\n }\n\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n type ConnectedChains = keyof typeof connectedWallets;\n type ActionType = \"transfer\" | \"approve\" | \"swap\";\n\n type ActionParams<P extends PluginName> = {\n transfer: EVMTransferParams | (GenericTransferParams & { sender?: string });\n approve: {\n assetValue: AssetValue;\n contractAddress: string;\n feeOptionKey?: FeeOption;\n };\n swap: SwapParams<P, QuoteResponseRoute> & { assetValue: AssetValue };\n };\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, plugin]) => {\n const methods = plugin({ getWallet });\n\n acc[pluginName as PluginName] = methods as ReturnType<Plugins[keyof Plugins]>;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key]> },\n );\n\n const connectWalletMethods = Object.entries(wallets || {}).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet.connectWallet({ addChain });\n\n acc[walletName as keyof Wallets] = connectWallet as ReturnType<\n Wallets[keyof Wallets][\"connectWallet\"]\n >;\n return acc;\n },\n {} as {\n [key in keyof Wallets]: ReturnType<Wallets[key][\"connectWallet\"]>;\n },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName?: T) {\n const pluginByName = pluginName && availablePlugins[pluginName];\n const pluginByProvider = Object.values(availablePlugins).find((plugin) =>\n plugin.supportedSwapkitProviders?.includes(pluginName),\n );\n const plugin = pluginByName || pluginByProvider;\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin as ReturnType<Plugins[T]>;\n }\n\n function addChain<T extends Chain>(\n connectWallet: Omit<ChainWallet<T>, \"balance\"> & { balance?: AssetValue[] },\n ) {\n const currentWallet = getWallet(connectWallet.chain);\n\n const balance = connectWallet.balance ||\n currentWallet.balance || [AssetValue.from({ chain: connectWallet.chain })];\n\n const wallet = { ...currentWallet, ...connectWallet, balance } as FullWallet[T];\n\n connectedWallets[connectWallet.chain] = wallet;\n\n return wallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends ConnectedChains>(chain: T) {\n return connectedWallets[chain] || {};\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n async function getWalletWithBalance<T extends Chain>(\n chain: T,\n scamFilter = true,\n ): Promise<ReturnType<typeof getWallet> & { balance: AssetValue[] }> {\n if (chain === Chain.Fiat || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);\n const defaultBalance = [AssetValue.from({ chain })];\n wallet.balance = defaultBalance;\n\n if (\"getBalance\" in wallet) {\n const balance = await wallet.getBalance(wallet.address, scamFilter);\n wallet.balance = balance;\n }\n\n return wallet;\n }\n\n function swap<T extends PluginName>({\n route,\n pluginName,\n ...rest\n }: SwapParams<T, QuoteResponseRoute>) {\n const plugin = getSwapKitPlugin(pluginName || route.providers[0]);\n\n if (\"swap\" in plugin) {\n // @ts-expect-error TODO: fix this\n return plugin.swap({ ...rest, route });\n }\n\n throw new SwapKitError(\"core_plugin_swap_not_found\");\n }\n\n function transfer({ assetValue, ...params }: GenericTransferParams | EVMTransferParams) {\n const chain = assetValue.chain;\n if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix | Chain.Near>);\n\n // we need to simplify this to one object params\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n if (chain !== Chain.THORChain) {\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const toolbox = await getCosmosToolbox(chain);\n\n return toolbox.verifySignature({ signature, message, address });\n }\n\n async function estimateTransactionFee<P extends PluginName, T extends ActionType>({\n type,\n feeOptionKey,\n params,\n }: { type: T; params: ActionParams<P>[T]; feeOptionKey: FeeOption }): Promise<\n AssetValue | undefined\n > {\n const { assetValue } = params;\n const { chain } = assetValue;\n\n if (!getWallet(chain as Chain)) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n const { match } = await import(\"ts-pattern\");\n\n return match(chain as Chain)\n .returnType<Promise<AssetValue | undefined>>()\n .with(...EVMChains, async (chain) => {\n const { address, ...wallet } = getWallet(chain);\n\n const tx = match(type as ActionType)\n .with(\"transfer\", () => wallet.createTransferTx(params as EVMCreateTransactionParams))\n .with(\"approve\", (t) => {\n const { contractAddress } = params as ActionParams<P>[typeof t];\n\n return wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: contractAddress,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: address,\n });\n })\n .with(\"swap\", (t) => {\n const {\n route: {\n providers: [plugin],\n tx,\n },\n } = params as ActionParams<P>[typeof t];\n\n if (\n plugin &&\n [PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)\n ) {\n return wallet.createTransferTx({ sender: address, recipient: address, assetValue });\n }\n\n const evmTx = tx as EVMTransaction;\n\n return { ...evmTx, value: BigInt(evmTx.value) };\n })\n .otherwise(() => undefined);\n\n if (!tx) return baseValue;\n\n return wallet.estimateTransactionFee({ ...tx, chain, feeOption: feeOptionKey });\n })\n .with(...UTXOChains, (chain) => {\n const { address, ...wallet } = getWallet(chain);\n return wallet.estimateTransactionFee({\n ...params,\n feeOptionKey,\n recipient: address,\n sender: address,\n });\n })\n .with(...CosmosChains, async () => {\n const { estimateTransactionFee } = await import(\"@swapkit/toolboxes/cosmos\");\n return estimateTransactionFee(params);\n })\n .with(Chain.Polkadot, (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee({ ...params, recipient: wallet.address });\n })\n .with(Chain.Tron, (chain) => {\n const { address, ...wallet } = getWallet(chain);\n return wallet.estimateTransactionFee({ ...params, recipient: address, sender: address });\n })\n .with(Chain.Ripple, (chain) => getWallet(chain).estimateTransactionFee())\n .otherwise(async () => baseValue);\n }\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n disconnectAll,\n disconnectChain,\n estimateTransactionFee,\n getAddress,\n getAllWallets,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n\n approveAssetValue,\n isAssetValueApproved,\n signMessage,\n swap,\n transfer,\n verifyMessage,\n };\n}\n",
7
+ "import { Chain, ChainToExplorerUrl } from \"@swapkit/helpers\";\nimport { match } from \"ts-pattern\";\n\nexport function getExplorerTxUrl({ chain, txHash }: { txHash: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n const explorerUrl = match(chain)\n .with(\n Chain.Maya,\n Chain.Kujira,\n Chain.Cosmos,\n Chain.THORChain,\n Chain.Solana,\n () => `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash.slice(2) : txHash}`,\n )\n .with(\n Chain.Arbitrum,\n Chain.Aurora,\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Base,\n Chain.Berachain,\n Chain.Ethereum,\n Chain.Gnosis,\n Chain.Optimism,\n Chain.Polkadot,\n Chain.Polygon,\n () => `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash : `0x${txHash}`}`,\n )\n .with(\n Chain.Litecoin,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Dogecoin,\n Chain.Zcash,\n Chain.Radix,\n () => `${baseUrl}/transaction/${txHash.toLowerCase()}`,\n )\n .with(Chain.Near, () => `${baseUrl}/txns/${txHash}`)\n .with(Chain.Ripple, () => `${baseUrl}/transactions/${txHash}`)\n .with(Chain.Tron, () => `${baseUrl}/#/transaction/${txHash}`)\n .otherwise(() => \"\");\n\n return explorerUrl;\n}\n\nexport function getExplorerAddressUrl({ chain, address }: { address: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n const explorerUrl = match(chain)\n .with(Chain.Solana, Chain.Radix, () => `${baseUrl}/account/${address}`)\n .with(Chain.Tron, () => `${baseUrl}/#/address/${address}`)\n .otherwise(() => `${baseUrl}/address/${address}`);\n\n return explorerUrl;\n}\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "1B5FE59C694EEAFC64756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "9DE3AD230237415664756E2164756E21",
11
11
  "names": []
12
12
  }
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var n=Object.create;var{getPrototypeOf:s,defineProperty:E,getOwnPropertyNames:t}=Object;var l=Object.prototype.hasOwnProperty;var P=(D,I,J)=>{J=D!=null?n(s(D)):{};let Y=I||!D||!D.__esModule?E(J,"default",{value:D,enumerable:!0}):J;for(let j of t(D))if(!l.call(Y,j))E(Y,j,{get:()=>D[j],enumerable:!0});return Y};var H=((D)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(D,{get:(I,J)=>(typeof require!=="undefined"?require:I)[J]}):D)(function(D){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+D+'" is not supported')});export*from"@swapkit/helpers/api";export*from"@swapkit/helpers";import{ApproveMode as k,AssetValue as B,Chain as z,EVMChains as e,ProviderName as C,SKConfig as a,SwapKitError as _}from"@swapkit/helpers";import{Chain as q,ChainToExplorerUrl as f}from"@swapkit/helpers";import{match as N}from"ts-pattern";function v({chain:D,txHash:I}){let J=f[D];return N(D).with(q.Maya,q.Kujira,q.Cosmos,q.THORChain,q.Solana,()=>`${J}/tx/${I.startsWith("0x")?I.slice(2):I}`).with(q.Arbitrum,q.Avalanche,q.BinanceSmartChain,q.Base,q.Ethereum,q.Optimism,q.Polkadot,q.Polygon,()=>`${J}/tx/${I.startsWith("0x")?I:`0x${I}`}`).with(q.Litecoin,q.Bitcoin,q.BitcoinCash,q.Dogecoin,q.Zcash,q.Radix,()=>`${J}/transaction/${I.toLowerCase()}`).with(q.Near,()=>`${J}/txns/${I}`).with(q.Ripple,()=>`${J}/transactions/${I}`).with(q.Tron,()=>`${J}/#/transaction/${I}`).otherwise(()=>"")}function K({chain:D,address:I}){let J=f[D];return N(D).with(q.Solana,q.Radix,()=>`${J}/account/${I}`).with(q.Tron,()=>`${J}/#/address/${I}`).otherwise(()=>`${J}/address/${I}`)}function z$({config:D,plugins:I,wallets:J}={}){if(D)a.set(D);let Y={},j=Object.entries(I||{}).reduce(($,[R,U])=>{let L=U({getWallet:Q});return $[R]=L,$},{}),A=Object.entries(J||{}).reduce(($,[R,U])=>{let L=U.connectWallet({addChain:V});return $[R]=L,$},{});function y($){let R=$&&j[$],U=Object.values(j).find((X)=>X.supportedSwapkitProviders?.includes($)),L=R||U;if(!L)throw new _("core_plugin_not_found");return L}function V($){let R=Q($.chain),U=$.balance||R.balance||[B.from({chain:$.chain})],L={...R,...$,balance:U};return Y[$.chain]=L,L}function M({assetValue:$,type:R="checkOnly",contractAddress:U}){let L=j[U];if(L){if(R===k.CheckOnly&&"isAssetValueApproved"in L)return L.isAssetValueApproved({assetValue:$});if(R===k.Approve&&"approveAssetValue"in L)return L.approveAssetValue({assetValue:$});throw new _({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(U)} cannot be used for approve operation`}})}let X=$.chain,x=e.includes(X);if(x&&$.isGasAsset||!x||$.isSynthetic)return Promise.resolve(R==="checkOnly"?!0:"approved");let G=Q(X),Z=R==="checkOnly"?G.isApproved:G.approve;if(!Z)throw new _("core_wallet_connection_not_found");if(!($.address&&G.address&&typeof U==="string"))throw new _("core_approve_asset_address_or_from_not_found");return Z({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:G.address,spenderAddress:U})}function Q($){return Y[$]||{}}function W(){return{...Y}}function m($){return Q($)?.address||""}function w($,R){return M({assetValue:$,contractAddress:R,type:k.Approve})}function o($,R){return M({assetValue:$,contractAddress:R,type:k.CheckOnly})}function S($){Q($)?.disconnect?.(),delete Y[$]}function d(){for(let $ of Object.keys(Y))S($)}function r($,R){return R?b($).then(({balance:U})=>U):Q($)?.balance||[]}async function b($,R=!0){if($===z.Fiat||!Q($))throw new _("core_wallet_connection_not_found");let U=Q($),L=[B.from({chain:$})];if(U.balance=L,"getBalance"in U){let X=await U.getBalance(U.address,R);U.balance=X}return U}function g({route:$,pluginName:R,...U}){let L=y(R||$.providers[0]);if("swap"in L)return L.swap({...U,route:$});throw new _("core_plugin_swap_not_found")}function u({assetValue:$,...R}){let U=$.chain;if([z.Fiat,z.Radix].includes(U)||!Q(U))throw new _("core_wallet_connection_not_found");return Q(U).transfer({...R,assetValue:$})}function h({chain:$,message:R}){let U=Q($);if(!U)throw new _("core_wallet_connection_not_found");if("signMessage"in U)return U.signMessage?.(R);throw new _({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:U.walletType}})}async function p({address:$,chain:R,message:U,signature:L}){if(R!==z.THORChain)throw new _({errorKey:"core_verify_message_not_supported",info:{chain:R}});let{getCosmosToolbox:X}=await import("@swapkit/toolboxes/cosmos");return(await X(R)).verifySignature({signature:L,message:U,address:$})}async function c({type:$,feeOptionKey:R,params:U}){let{assetValue:L}=U,{chain:X}=L;if(!Q(X))throw new _("core_wallet_connection_not_found");let x=B.from({chain:X}),{match:O}=await import("ts-pattern");return O(X).returnType().with(z.Arbitrum,z.Avalanche,z.Ethereum,z.BinanceSmartChain,z.Polygon,z.Base,async(G)=>{let Z=Q(G);if($==="transfer"){let T=await Z.createTransferTx(U);return Z.estimateTransactionFee({...T,chain:G,feeOption:R})}if($==="approve"&&!L.isGasAsset){let T=await Z.createApprovalTx({assetAddress:L.address,spenderAddress:U.contractAddress,amount:L.getBaseValue("bigint"),from:Z.address});return Z.estimateTransactionFee({...T,chain:G,feeOption:R})}if($==="swap"){let T=U.route.providers[0];if([C.CHAINFLIP,C.CHAINFLIP_STREAMING].includes(T)){let i=await Z.createTransferTx({sender:Z.address,recipient:Z.address,assetValue:L});return Z.estimateTransactionFee({...i,chain:G,feeOption:R})}let F=U.route.tx;if(F)return Z.estimateTransactionFee({...F,value:BigInt(F.value),feeOption:R,chain:G})}return B.from({chain:G})}).with(z.Bitcoin,z.BitcoinCash,z.Dogecoin,z.Dash,z.Litecoin,(G)=>{let Z=Q(G);return Z.estimateTransactionFee({...U,feeOptionKey:R,recipient:Z.address,sender:Z.address})}).with(z.THORChain,z.Maya,z.Kujira,z.Cosmos,async()=>{let{estimateTransactionFee:G}=await import("@swapkit/toolboxes/cosmos");return G(U)}).with(z.Polkadot,(G)=>{let Z=Q(G);return Z.estimateTransactionFee({...U,recipient:Z.address})}).with(z.Ripple,(G)=>{return Q(G).estimateTransactionFee()}).with(z.Tron,(G)=>{let Z=Q(G);return Z.estimateTransactionFee({...U,recipient:Z.address,sender:Z.address})}).otherwise(async()=>x)}return{...j,...A,disconnectAll:d,disconnectChain:S,estimateTransactionFee:c,getAddress:m,getAllWallets:W,getBalance:r,getExplorerAddressUrl:K,getExplorerTxUrl:v,getWallet:Q,getWalletWithBalance:b,approveAssetValue:w,isAssetValueApproved:o,signMessage:h,swap:g,transfer:u,verifyMessage:p}}export{z$ as SwapKit};
1
+ var e=Object.create;var{getPrototypeOf:a,defineProperty:E,getOwnPropertyNames:$$}=Object;var U$=Object.prototype.hasOwnProperty;var F=(D,G,Z)=>{Z=D!=null?e(a(D)):{};let J=G||!D||!D.__esModule?E(Z,"default",{value:D,enumerable:!0}):Z;for(let Y of $$(D))if(!U$.call(J,Y))E(J,Y,{get:()=>D[Y],enumerable:!0});return J};var P=((D)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(D,{get:(G,Z)=>(typeof require!=="undefined"?require:G)[Z]}):D)(function(D){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+D+'" is not supported')});export*from"@swapkit/helpers/api";export*from"@swapkit/helpers";import{ApproveMode as T,AssetValue as H,Chain as B,CosmosChains as R$,EVMChains as A,ProviderName as w,SKConfig as x$,SwapKitError as Q,UTXOChains as L$}from"@swapkit/helpers";import{Chain as L,ChainToExplorerUrl as N}from"@swapkit/helpers";import{match as v}from"ts-pattern";function y({chain:D,txHash:G}){let Z=N[D];return v(D).with(L.Maya,L.Kujira,L.Cosmos,L.THORChain,L.Solana,()=>`${Z}/tx/${G.startsWith("0x")?G.slice(2):G}`).with(L.Arbitrum,L.Aurora,L.Avalanche,L.BinanceSmartChain,L.Base,L.Berachain,L.Ethereum,L.Gnosis,L.Optimism,L.Polkadot,L.Polygon,()=>`${Z}/tx/${G.startsWith("0x")?G:`0x${G}`}`).with(L.Litecoin,L.Bitcoin,L.BitcoinCash,L.Dogecoin,L.Zcash,L.Radix,()=>`${Z}/transaction/${G.toLowerCase()}`).with(L.Near,()=>`${Z}/txns/${G}`).with(L.Ripple,()=>`${Z}/transactions/${G}`).with(L.Tron,()=>`${Z}/#/transaction/${G}`).otherwise(()=>"")}function K({chain:D,address:G}){let Z=N[D];return v(D).with(L.Solana,L.Radix,()=>`${Z}/account/${G}`).with(L.Tron,()=>`${Z}/#/address/${G}`).otherwise(()=>`${Z}/address/${G}`)}function I$({config:D,plugins:G,wallets:Z}={}){if(D)x$.set(D);let J={},Y=Object.entries(G||{}).reduce(($,[R,U])=>{let x=U({getWallet:j});return $[R]=x,$},{}),o=Object.entries(Z||{}).reduce(($,[R,U])=>{let x=U.connectWallet({addChain:m});return $[R]=x,$},{});function V($){let R=$&&Y[$],U=Object.values(Y).find((I)=>I.supportedSwapkitProviders?.includes($)),x=R||U;if(!x)throw new Q("core_plugin_not_found");return x}function m($){let R=j($.chain),U=$.balance||R.balance||[H.from({chain:$.chain})],x={...R,...$,balance:U};return J[$.chain]=x,x}function f({assetValue:$,type:R="checkOnly",contractAddress:U}){let x=Y[U];if(x){if(R===T.CheckOnly&&"isAssetValueApproved"in x)return x.isAssetValueApproved({assetValue:$});if(R===T.Approve&&"approveAssetValue"in x)return x.approveAssetValue({assetValue:$});throw new Q({errorKey:"core_approve_asset_target_invalid",info:{message:`Target ${String(U)} cannot be used for approve operation`}})}let I=$.chain,X=A.includes(I);if(X&&$.isGasAsset||!X||$.isSynthetic)return Promise.resolve(R==="checkOnly"?!0:"approved");let q=j(I),z=R==="checkOnly"?q.isApproved:q.approve;if(!z)throw new Q("core_wallet_connection_not_found");if(!($.address&&q.address&&typeof U==="string"))throw new Q("core_approve_asset_address_or_from_not_found");return z({amount:$.getBaseValue("bigint"),assetAddress:$.address,from:q.address,spenderAddress:U})}function j($){return J[$]||{}}function W(){return{...J}}function h($){return j($)?.address||""}function r($,R){return f({assetValue:$,contractAddress:R,type:T.Approve})}function d($,R){return f({assetValue:$,contractAddress:R,type:T.CheckOnly})}function C($){j($)?.disconnect?.(),delete J[$]}function g(){for(let $ of Object.keys(J))C($)}function u($,R){return R?M($).then(({balance:U})=>U):j($)?.balance||[]}async function M($,R=!0){if($===B.Fiat||!j($))throw new Q("core_wallet_connection_not_found");let U=j($),x=[H.from({chain:$})];if(U.balance=x,"getBalance"in U){let I=await U.getBalance(U.address,R);U.balance=I}return U}function p({route:$,pluginName:R,...U}){let x=V(R||$.providers[0]);if("swap"in x)return x.swap({...U,route:$});throw new Q("core_plugin_swap_not_found")}function i({assetValue:$,...R}){let U=$.chain;if([B.Fiat,B.Radix].includes(U)||!j(U))throw new Q("core_wallet_connection_not_found");return j(U).transfer({...R,assetValue:$})}function c({chain:$,message:R}){let U=j($);if(!U)throw new Q("core_wallet_connection_not_found");if("signMessage"in U)return U.signMessage?.(R);throw new Q({errorKey:"core_wallet_sign_message_not_supported",info:{chain:$,wallet:U.walletType}})}async function n({address:$,chain:R,message:U,signature:x}){if(R!==B.THORChain)throw new Q({errorKey:"core_verify_message_not_supported",info:{chain:R}});let{getCosmosToolbox:I}=await import("@swapkit/toolboxes/cosmos");return(await I(R)).verifySignature({signature:x,message:U,address:$})}async function t({type:$,feeOptionKey:R,params:U}){let{assetValue:x}=U,{chain:I}=x;if(!j(I))throw new Q("core_wallet_connection_not_found");let X=H.from({chain:I}),{match:O}=await import("ts-pattern");return O(I).returnType().with(...A,async(q)=>{let{address:z,..._}=j(q),S=O($).with("transfer",()=>_.createTransferTx(U)).with("approve",(s)=>{let{contractAddress:k}=U;return _.createApprovalTx({assetAddress:x.address,spenderAddress:k,amount:x.getBaseValue("bigint"),from:z})}).with("swap",(s)=>{let{route:{providers:[k],tx:l}}=U;if(k&&[w.CHAINFLIP,w.CHAINFLIP_STREAMING].includes(k))return _.createTransferTx({sender:z,recipient:z,assetValue:x});let b=l;return{...b,value:BigInt(b.value)}}).otherwise(()=>{return});if(!S)return X;return _.estimateTransactionFee({...S,chain:q,feeOption:R})}).with(...L$,(q)=>{let{address:z,..._}=j(q);return _.estimateTransactionFee({...U,feeOptionKey:R,recipient:z,sender:z})}).with(...R$,async()=>{let{estimateTransactionFee:q}=await import("@swapkit/toolboxes/cosmos");return q(U)}).with(B.Polkadot,(q)=>{let z=j(q);return z.estimateTransactionFee({...U,recipient:z.address})}).with(B.Tron,(q)=>{let{address:z,..._}=j(q);return _.estimateTransactionFee({...U,recipient:z,sender:z})}).with(B.Ripple,(q)=>j(q).estimateTransactionFee()).otherwise(async()=>X)}return{...Y,...o,disconnectAll:g,disconnectChain:C,estimateTransactionFee:t,getAddress:h,getAllWallets:W,getBalance:u,getExplorerAddressUrl:K,getExplorerTxUrl:y,getWallet:j,getWalletWithBalance:M,approveAssetValue:r,isAssetValueApproved:d,signMessage:c,swap:p,transfer:i,verifyMessage:n}}export{I$ as SwapKit};
2
2
 
3
- //# debugId=AD26DBEEB10253A964756E2164756E21
3
+ //# debugId=74EB86C5E8DF235064756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -3,10 +3,10 @@
3
3
  "sources": ["../src/index.ts", "../src/client.ts", "../src/helpers/explorerUrls.ts"],
4
4
  "sourcesContent": [
5
5
  "export * from \"@swapkit/helpers/api\";\nexport * from \"@swapkit/helpers\";\nexport * from \"./client\";\n",
6
- "import type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n type EVMChain,\n EVMChains,\n type FeeOption,\n type FullWallet,\n type GenericTransferParams,\n ProviderName as PluginNameEnum,\n SKConfig,\n type SKConfigState,\n SwapKitError,\n type SwapParams,\n type createPlugin,\n type createWallet,\n} from \"@swapkit/helpers\";\nimport type { EVMCreateTransactionParams, EVMTransferParams } from \"@swapkit/toolboxes/evm\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\nexport type SwapKitParams<P, W> = {\n config?: SKConfigState;\n plugins?: P;\n wallets?: W;\n};\n\nexport function SwapKit<\n Plugins extends ReturnType<typeof createPlugin>,\n Wallets extends ReturnType<typeof createWallet>,\n>({\n config,\n plugins,\n wallets,\n}: { config?: SKConfigState; plugins?: Plugins; wallets?: Wallets } = {}) {\n if (config) {\n SKConfig.set(config);\n }\n\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n type ConnectedChains = keyof typeof connectedWallets;\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, plugin]) => {\n const methods = plugin({ getWallet });\n\n acc[pluginName as PluginName] = methods as ReturnType<Plugins[keyof Plugins]>;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key]> },\n );\n\n const connectWalletMethods = Object.entries(wallets || {}).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet.connectWallet({ addChain });\n\n acc[walletName as keyof Wallets] = connectWallet as ReturnType<\n Wallets[keyof Wallets][\"connectWallet\"]\n >;\n return acc;\n },\n {} as {\n [key in keyof Wallets]: ReturnType<Wallets[key][\"connectWallet\"]>;\n },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName?: T) {\n const pluginByName = pluginName && availablePlugins[pluginName];\n const pluginByProvider = Object.values(availablePlugins).find((plugin) =>\n plugin.supportedSwapkitProviders?.includes(pluginName),\n );\n const plugin = pluginByName || pluginByProvider;\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin as ReturnType<Plugins[T]>;\n }\n\n function addChain<T extends Chain>(\n connectWallet: Omit<ChainWallet<T>, \"balance\"> & { balance?: AssetValue[] },\n ) {\n const currentWallet = getWallet(connectWallet.chain);\n\n const balance = connectWallet.balance ||\n currentWallet.balance || [AssetValue.from({ chain: connectWallet.chain })];\n\n const wallet = { ...currentWallet, ...connectWallet, balance } as FullWallet[T];\n\n connectedWallets[connectWallet.chain] = wallet;\n\n return wallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends ConnectedChains>(chain: T) {\n return connectedWallets[chain] || {};\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n async function getWalletWithBalance<T extends Chain>(\n chain: T,\n scamFilter = true,\n ): Promise<ReturnType<typeof getWallet> & { balance: AssetValue[] }> {\n if (chain === Chain.Fiat || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);\n const defaultBalance = [AssetValue.from({ chain })];\n wallet.balance = defaultBalance;\n\n if (\"getBalance\" in wallet) {\n const balance = await wallet.getBalance(wallet.address, scamFilter);\n wallet.balance = balance;\n }\n\n return wallet;\n }\n\n function swap<T extends PluginName>({\n route,\n pluginName,\n ...rest\n }: SwapParams<T, QuoteResponseRoute>) {\n const plugin = getSwapKitPlugin(pluginName || route.providers[0]);\n\n if (\"swap\" in plugin) {\n // @ts-expect-error TODO: fix this\n return plugin.swap({ ...rest, route });\n }\n\n throw new SwapKitError(\"core_plugin_swap_not_found\");\n }\n\n function transfer({ assetValue, ...params }: GenericTransferParams | EVMTransferParams) {\n const chain = assetValue.chain;\n if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix | Chain.Near>);\n\n // we need to simplify this to one object params\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n if (chain !== Chain.THORChain) {\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const toolbox = await getCosmosToolbox(chain);\n\n return toolbox.verifySignature({ signature, message, address });\n }\n\n async function estimateTransactionFee<T extends PluginName>({\n type,\n feeOptionKey,\n params,\n }: (\n | { type: \"swap\"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }\n | {\n type: \"transfer\";\n params: EVMTransferParams | (GenericTransferParams & { sender?: string });\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 as Chain)) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n const { match } = await import(\"ts-pattern\");\n\n return match(chain as Chain)\n .returnType<Promise<AssetValue | undefined>>()\n .with(\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Ethereum,\n Chain.BinanceSmartChain,\n Chain.Polygon,\n Chain.Base,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: simplify this or use nested match\n async (chain) => {\n const wallet = getWallet(chain);\n\n if (type === \"transfer\") {\n const txObject = await wallet.createTransferTx(params as EVMCreateTransactionParams);\n return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });\n }\n\n if (type === \"approve\" && !assetValue.isGasAsset) {\n const approvalTx = await wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: params.contractAddress as string,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: wallet.address,\n });\n\n return wallet.estimateTransactionFee({ ...approvalTx, chain, feeOption: feeOptionKey });\n }\n\n if (type === \"swap\") {\n const plugin = params.route.providers[0] as PluginNameEnum;\n if ([PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)) {\n const txObject = await wallet.createTransferTx({\n sender: wallet.address,\n recipient: wallet.address,\n assetValue,\n });\n\n return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });\n }\n\n const tx = params.route.tx as EVMTransaction;\n\n if (tx) {\n return wallet.estimateTransactionFee({\n ...tx,\n value: BigInt(tx.value),\n feeOption: feeOptionKey,\n chain,\n });\n }\n }\n\n return AssetValue.from({ chain });\n },\n )\n .with(\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Dogecoin,\n Chain.Dash,\n Chain.Litecoin,\n (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee({\n ...params,\n feeOptionKey,\n recipient: wallet.address,\n sender: wallet.address,\n });\n },\n )\n .with(Chain.THORChain, Chain.Maya, Chain.Kujira, Chain.Cosmos, async () => {\n const { estimateTransactionFee } = await import(\"@swapkit/toolboxes/cosmos\");\n return estimateTransactionFee(params);\n })\n .with(Chain.Polkadot, (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee({ ...params, recipient: wallet.address });\n })\n .with(Chain.Ripple, (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee();\n })\n .with(Chain.Tron, (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee({\n ...params,\n recipient: wallet.address,\n sender: wallet.address,\n });\n })\n .otherwise(async () => baseValue);\n }\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n disconnectAll,\n disconnectChain,\n estimateTransactionFee,\n getAddress,\n getAllWallets,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n\n approveAssetValue,\n isAssetValueApproved,\n signMessage,\n swap,\n transfer,\n verifyMessage,\n };\n}\n",
7
- "import { Chain, ChainToExplorerUrl } from \"@swapkit/helpers\";\nimport { match } from \"ts-pattern\";\n\nexport function getExplorerTxUrl({ chain, txHash }: { txHash: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n const explorerUrl = match(chain)\n .with(\n Chain.Maya,\n Chain.Kujira,\n Chain.Cosmos,\n Chain.THORChain,\n Chain.Solana,\n () => `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash.slice(2) : txHash}`,\n )\n .with(\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Base,\n Chain.Ethereum,\n Chain.Optimism,\n Chain.Polkadot,\n Chain.Polygon,\n () => `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash : `0x${txHash}`}`,\n )\n .with(\n Chain.Litecoin,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Dogecoin,\n Chain.Zcash,\n Chain.Radix,\n () => `${baseUrl}/transaction/${txHash.toLowerCase()}`,\n )\n .with(Chain.Near, () => `${baseUrl}/txns/${txHash}`)\n .with(Chain.Ripple, () => `${baseUrl}/transactions/${txHash}`)\n .with(Chain.Tron, () => `${baseUrl}/#/transaction/${txHash}`)\n .otherwise(() => \"\");\n\n return explorerUrl;\n}\n\nexport function getExplorerAddressUrl({ chain, address }: { address: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n const explorerUrl = match(chain)\n .with(Chain.Solana, Chain.Radix, () => `${baseUrl}/account/${address}`)\n .with(Chain.Tron, () => `${baseUrl}/#/address/${address}`)\n .otherwise(() => `${baseUrl}/address/${address}`);\n\n return explorerUrl;\n}\n"
6
+ "import type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nimport {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ChainWallet,\n type ConditionalAssetValueReturn,\n CosmosChains,\n type EVMChain,\n EVMChains,\n type FeeOption,\n type FullWallet,\n type GenericTransferParams,\n ProviderName as PluginNameEnum,\n SKConfig,\n type SKConfigState,\n SwapKitError,\n type SwapParams,\n UTXOChains,\n type createPlugin,\n type createWallet,\n} from \"@swapkit/helpers\";\nimport type { EVMCreateTransactionParams, EVMTransferParams } from \"@swapkit/toolboxes/evm\";\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls\";\n\nexport type SwapKitParams<P, W> = {\n config?: SKConfigState;\n plugins?: P;\n wallets?: W;\n};\n\nexport function SwapKit<\n Plugins extends ReturnType<typeof createPlugin>,\n Wallets extends ReturnType<typeof createWallet>,\n>({\n config,\n plugins,\n wallets,\n}: { config?: SKConfigState; plugins?: Plugins; wallets?: Wallets } = {}) {\n if (config) {\n SKConfig.set(config);\n }\n\n type PluginName = keyof Plugins;\n const connectedWallets = {} as FullWallet;\n type ConnectedChains = keyof typeof connectedWallets;\n type ActionType = \"transfer\" | \"approve\" | \"swap\";\n\n type ActionParams<P extends PluginName> = {\n transfer: EVMTransferParams | (GenericTransferParams & { sender?: string });\n approve: {\n assetValue: AssetValue;\n contractAddress: string;\n feeOptionKey?: FeeOption;\n };\n swap: SwapParams<P, QuoteResponseRoute> & { assetValue: AssetValue };\n };\n\n const availablePlugins = Object.entries(plugins || {}).reduce(\n (acc, [pluginName, plugin]) => {\n const methods = plugin({ getWallet });\n\n acc[pluginName as PluginName] = methods as ReturnType<Plugins[keyof Plugins]>;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key]> },\n );\n\n const connectWalletMethods = Object.entries(wallets || {}).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet.connectWallet({ addChain });\n\n acc[walletName as keyof Wallets] = connectWallet as ReturnType<\n Wallets[keyof Wallets][\"connectWallet\"]\n >;\n return acc;\n },\n {} as {\n [key in keyof Wallets]: ReturnType<Wallets[key][\"connectWallet\"]>;\n },\n );\n\n function getSwapKitPlugin<T extends PluginName>(pluginName?: T) {\n const pluginByName = pluginName && availablePlugins[pluginName];\n const pluginByProvider = Object.values(availablePlugins).find((plugin) =>\n plugin.supportedSwapkitProviders?.includes(pluginName),\n );\n const plugin = pluginByName || pluginByProvider;\n\n if (!plugin) {\n throw new SwapKitError(\"core_plugin_not_found\");\n }\n\n return plugin as ReturnType<Plugins[T]>;\n }\n\n function addChain<T extends Chain>(\n connectWallet: Omit<ChainWallet<T>, \"balance\"> & { balance?: AssetValue[] },\n ) {\n const currentWallet = getWallet(connectWallet.chain);\n\n const balance = connectWallet.balance ||\n currentWallet.balance || [AssetValue.from({ chain: connectWallet.chain })];\n\n const wallet = { ...currentWallet, ...connectWallet, balance } as FullWallet[T];\n\n connectedWallets[connectWallet.chain] = wallet;\n\n return wallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n // @ts-expect-error TODO: add optional approve for plugin\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError({\n errorKey: \"core_approve_asset_target_invalid\",\n info: { message: `Target ${String(spenderAddress)} cannot be used for approve operation` },\n });\n }\n\n const chain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(chain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (!(assetValue.address && wallet.address && typeof spenderAddress === \"string\")) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n }) as ApproveReturnType<T>;\n }\n\n /**\n * @Public\n */\n function getWallet<T extends ConnectedChains>(chain: T) {\n return connectedWallets[chain] || {};\n }\n\n function getAllWallets() {\n return { ...connectedWallets };\n }\n\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function approveAssetValue(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(assetValue: AssetValue, contractAddress: string | PluginName) {\n return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });\n }\n\n function disconnectChain<T extends Chain>(chain: T) {\n const wallet = getWallet(chain);\n wallet?.disconnect?.();\n delete connectedWallets[chain];\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets) as (keyof typeof connectedWallets)[]) {\n disconnectChain(chain);\n }\n }\n\n function getBalance<T extends Chain, R extends boolean>(\n chain: T,\n refresh?: R,\n ): ConditionalAssetValueReturn<R> {\n return (\n refresh\n ? getWalletWithBalance(chain).then(({ balance }) => balance)\n : getWallet(chain)?.balance || []\n ) as ConditionalAssetValueReturn<R>;\n }\n\n async function getWalletWithBalance<T extends Chain>(\n chain: T,\n scamFilter = true,\n ): Promise<ReturnType<typeof getWallet> & { balance: AssetValue[] }> {\n if (chain === Chain.Fiat || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat>);\n const defaultBalance = [AssetValue.from({ chain })];\n wallet.balance = defaultBalance;\n\n if (\"getBalance\" in wallet) {\n const balance = await wallet.getBalance(wallet.address, scamFilter);\n wallet.balance = balance;\n }\n\n return wallet;\n }\n\n function swap<T extends PluginName>({\n route,\n pluginName,\n ...rest\n }: SwapParams<T, QuoteResponseRoute>) {\n const plugin = getSwapKitPlugin(pluginName || route.providers[0]);\n\n if (\"swap\" in plugin) {\n // @ts-expect-error TODO: fix this\n return plugin.swap({ ...rest, route });\n }\n\n throw new SwapKitError(\"core_plugin_swap_not_found\");\n }\n\n function transfer({ assetValue, ...params }: GenericTransferParams | EVMTransferParams) {\n const chain = assetValue.chain;\n if ([Chain.Fiat, Chain.Radix].includes(chain) || !getWallet(chain)) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const wallet = getWallet(chain as Exclude<Chain, Chain.Fiat | Chain.Radix | Chain.Near>);\n\n // we need to simplify this to one object params\n return wallet.transfer({ ...params, assetValue });\n }\n\n function signMessage({ chain, message }: { chain: Chain; message: string }) {\n const wallet = getWallet(chain);\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n if (\"signMessage\" in wallet) {\n return wallet.signMessage?.(message);\n }\n\n throw new SwapKitError({\n errorKey: \"core_wallet_sign_message_not_supported\",\n info: { chain, wallet: wallet.walletType },\n });\n }\n\n async function verifyMessage({\n address,\n chain,\n message,\n signature,\n }: { chain: Chain; signature: string; message: string; address: string }) {\n if (chain !== Chain.THORChain) {\n throw new SwapKitError({ errorKey: \"core_verify_message_not_supported\", info: { chain } });\n }\n\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const toolbox = await getCosmosToolbox(chain);\n\n return toolbox.verifySignature({ signature, message, address });\n }\n\n async function estimateTransactionFee<P extends PluginName, T extends ActionType>({\n type,\n feeOptionKey,\n params,\n }: { type: T; params: ActionParams<P>[T]; feeOptionKey: FeeOption }): Promise<\n AssetValue | undefined\n > {\n const { assetValue } = params;\n const { chain } = assetValue;\n\n if (!getWallet(chain as Chain)) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const baseValue = AssetValue.from({ chain });\n const { match } = await import(\"ts-pattern\");\n\n return match(chain as Chain)\n .returnType<Promise<AssetValue | undefined>>()\n .with(...EVMChains, async (chain) => {\n const { address, ...wallet } = getWallet(chain);\n\n const tx = match(type as ActionType)\n .with(\"transfer\", () => wallet.createTransferTx(params as EVMCreateTransactionParams))\n .with(\"approve\", (t) => {\n const { contractAddress } = params as ActionParams<P>[typeof t];\n\n return wallet.createApprovalTx({\n assetAddress: assetValue.address as string,\n spenderAddress: contractAddress,\n amount: assetValue.getBaseValue(\"bigint\"),\n from: address,\n });\n })\n .with(\"swap\", (t) => {\n const {\n route: {\n providers: [plugin],\n tx,\n },\n } = params as ActionParams<P>[typeof t];\n\n if (\n plugin &&\n [PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)\n ) {\n return wallet.createTransferTx({ sender: address, recipient: address, assetValue });\n }\n\n const evmTx = tx as EVMTransaction;\n\n return { ...evmTx, value: BigInt(evmTx.value) };\n })\n .otherwise(() => undefined);\n\n if (!tx) return baseValue;\n\n return wallet.estimateTransactionFee({ ...tx, chain, feeOption: feeOptionKey });\n })\n .with(...UTXOChains, (chain) => {\n const { address, ...wallet } = getWallet(chain);\n return wallet.estimateTransactionFee({\n ...params,\n feeOptionKey,\n recipient: address,\n sender: address,\n });\n })\n .with(...CosmosChains, async () => {\n const { estimateTransactionFee } = await import(\"@swapkit/toolboxes/cosmos\");\n return estimateTransactionFee(params);\n })\n .with(Chain.Polkadot, (chain) => {\n const wallet = getWallet(chain);\n return wallet.estimateTransactionFee({ ...params, recipient: wallet.address });\n })\n .with(Chain.Tron, (chain) => {\n const { address, ...wallet } = getWallet(chain);\n return wallet.estimateTransactionFee({ ...params, recipient: address, sender: address });\n })\n .with(Chain.Ripple, (chain) => getWallet(chain).estimateTransactionFee())\n .otherwise(async () => baseValue);\n }\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n disconnectAll,\n disconnectChain,\n estimateTransactionFee,\n getAddress,\n getAllWallets,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n\n approveAssetValue,\n isAssetValueApproved,\n signMessage,\n swap,\n transfer,\n verifyMessage,\n };\n}\n",
7
+ "import { Chain, ChainToExplorerUrl } from \"@swapkit/helpers\";\nimport { match } from \"ts-pattern\";\n\nexport function getExplorerTxUrl({ chain, txHash }: { txHash: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n const explorerUrl = match(chain)\n .with(\n Chain.Maya,\n Chain.Kujira,\n Chain.Cosmos,\n Chain.THORChain,\n Chain.Solana,\n () => `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash.slice(2) : txHash}`,\n )\n .with(\n Chain.Arbitrum,\n Chain.Aurora,\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Base,\n Chain.Berachain,\n Chain.Ethereum,\n Chain.Gnosis,\n Chain.Optimism,\n Chain.Polkadot,\n Chain.Polygon,\n () => `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash : `0x${txHash}`}`,\n )\n .with(\n Chain.Litecoin,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Dogecoin,\n Chain.Zcash,\n Chain.Radix,\n () => `${baseUrl}/transaction/${txHash.toLowerCase()}`,\n )\n .with(Chain.Near, () => `${baseUrl}/txns/${txHash}`)\n .with(Chain.Ripple, () => `${baseUrl}/transactions/${txHash}`)\n .with(Chain.Tron, () => `${baseUrl}/#/transaction/${txHash}`)\n .otherwise(() => \"\");\n\n return explorerUrl;\n}\n\nexport function getExplorerAddressUrl({ chain, address }: { address: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n const explorerUrl = match(chain)\n .with(Chain.Solana, Chain.Radix, () => `${baseUrl}/account/${address}`)\n .with(Chain.Tron, () => `${baseUrl}/#/address/${address}`)\n .otherwise(() => `${baseUrl}/address/${address}`);\n\n return explorerUrl;\n}\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "AD26DBEEB10253A964756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "74EB86C5E8DF235064756E2164756E21",
11
11
  "names": []
12
12
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "swapkit-oss",
3
3
  "dependencies": {
4
4
  "@swapkit/helpers": "4.0.0-beta.31",
5
- "@swapkit/toolboxes": "4.0.0-beta.45"
5
+ "@swapkit/toolboxes": "4.0.0-beta.47"
6
6
  },
7
7
  "description": "SwapKit - Core",
8
8
  "exports": {
@@ -34,5 +34,5 @@
34
34
  "type-check:go": "tsgo"
35
35
  },
36
36
  "type": "module",
37
- "version": "4.0.0-beta.46"
37
+ "version": "4.0.0-beta.48"
38
38
  }
package/src/client.ts CHANGED
@@ -7,6 +7,7 @@ import {
7
7
  Chain,
8
8
  type ChainWallet,
9
9
  type ConditionalAssetValueReturn,
10
+ CosmosChains,
10
11
  type EVMChain,
11
12
  EVMChains,
12
13
  type FeeOption,
@@ -17,11 +18,11 @@ import {
17
18
  type SKConfigState,
18
19
  SwapKitError,
19
20
  type SwapParams,
21
+ UTXOChains,
20
22
  type createPlugin,
21
23
  type createWallet,
22
24
  } from "@swapkit/helpers";
23
25
  import type { EVMCreateTransactionParams, EVMTransferParams } from "@swapkit/toolboxes/evm";
24
-
25
26
  import {
26
27
  getExplorerAddressUrl as getAddressUrl,
27
28
  getExplorerTxUrl as getTxUrl,
@@ -48,6 +49,17 @@ export function SwapKit<
48
49
  type PluginName = keyof Plugins;
49
50
  const connectedWallets = {} as FullWallet;
50
51
  type ConnectedChains = keyof typeof connectedWallets;
52
+ type ActionType = "transfer" | "approve" | "swap";
53
+
54
+ type ActionParams<P extends PluginName> = {
55
+ transfer: EVMTransferParams | (GenericTransferParams & { sender?: string });
56
+ approve: {
57
+ assetValue: AssetValue;
58
+ contractAddress: string;
59
+ feeOptionKey?: FeeOption;
60
+ };
61
+ swap: SwapParams<P, QuoteResponseRoute> & { assetValue: AssetValue };
62
+ };
51
63
 
52
64
  const availablePlugins = Object.entries(plugins || {}).reduce(
53
65
  (acc, [pluginName, plugin]) => {
@@ -275,27 +287,13 @@ export function SwapKit<
275
287
  return toolbox.verifySignature({ signature, message, address });
276
288
  }
277
289
 
278
- async function estimateTransactionFee<T extends PluginName>({
290
+ async function estimateTransactionFee<P extends PluginName, T extends ActionType>({
279
291
  type,
280
292
  feeOptionKey,
281
293
  params,
282
- }: (
283
- | { type: "swap"; params: SwapParams<T, QuoteResponseRoute> & { assetValue: AssetValue } }
284
- | {
285
- type: "transfer";
286
- params: EVMTransferParams | (GenericTransferParams & { sender?: string });
287
- }
288
- | {
289
- type: "approve";
290
- params: {
291
- assetValue: AssetValue;
292
- contractAddress: string | PluginName;
293
- feeOptionKey?: FeeOption;
294
- };
295
- }
296
- ) & {
297
- feeOptionKey: FeeOption;
298
- }): Promise<AssetValue | undefined> {
294
+ }: { type: T; params: ActionParams<P>[T]; feeOptionKey: FeeOption }): Promise<
295
+ AssetValue | undefined
296
+ > {
299
297
  const { assetValue } = params;
300
298
  const { chain } = assetValue;
301
299
 
@@ -306,77 +304,56 @@ export function SwapKit<
306
304
 
307
305
  return match(chain as Chain)
308
306
  .returnType<Promise<AssetValue | undefined>>()
309
- .with(
310
- Chain.Arbitrum,
311
- Chain.Avalanche,
312
- Chain.Ethereum,
313
- Chain.BinanceSmartChain,
314
- Chain.Polygon,
315
- Chain.Base,
316
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: simplify this or use nested match
317
- async (chain) => {
318
- const wallet = getWallet(chain);
319
-
320
- if (type === "transfer") {
321
- const txObject = await wallet.createTransferTx(params as EVMCreateTransactionParams);
322
- return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });
323
- }
324
-
325
- if (type === "approve" && !assetValue.isGasAsset) {
326
- const approvalTx = await wallet.createApprovalTx({
307
+ .with(...EVMChains, async (chain) => {
308
+ const { address, ...wallet } = getWallet(chain);
309
+
310
+ const tx = match(type as ActionType)
311
+ .with("transfer", () => wallet.createTransferTx(params as EVMCreateTransactionParams))
312
+ .with("approve", (t) => {
313
+ const { contractAddress } = params as ActionParams<P>[typeof t];
314
+
315
+ return wallet.createApprovalTx({
327
316
  assetAddress: assetValue.address as string,
328
- spenderAddress: params.contractAddress as string,
317
+ spenderAddress: contractAddress,
329
318
  amount: assetValue.getBaseValue("bigint"),
330
- from: wallet.address,
319
+ from: address,
331
320
  });
321
+ })
322
+ .with("swap", (t) => {
323
+ const {
324
+ route: {
325
+ providers: [plugin],
326
+ tx,
327
+ },
328
+ } = params as ActionParams<P>[typeof t];
329
+
330
+ if (
331
+ plugin &&
332
+ [PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)
333
+ ) {
334
+ return wallet.createTransferTx({ sender: address, recipient: address, assetValue });
335
+ }
332
336
 
333
- return wallet.estimateTransactionFee({ ...approvalTx, chain, feeOption: feeOptionKey });
334
- }
335
-
336
- if (type === "swap") {
337
- const plugin = params.route.providers[0] as PluginNameEnum;
338
- if ([PluginNameEnum.CHAINFLIP, PluginNameEnum.CHAINFLIP_STREAMING].includes(plugin)) {
339
- const txObject = await wallet.createTransferTx({
340
- sender: wallet.address,
341
- recipient: wallet.address,
342
- assetValue,
343
- });
337
+ const evmTx = tx as EVMTransaction;
344
338
 
345
- return wallet.estimateTransactionFee({ ...txObject, chain, feeOption: feeOptionKey });
346
- }
339
+ return { ...evmTx, value: BigInt(evmTx.value) };
340
+ })
341
+ .otherwise(() => undefined);
347
342
 
348
- const tx = params.route.tx as EVMTransaction;
343
+ if (!tx) return baseValue;
349
344
 
350
- if (tx) {
351
- return wallet.estimateTransactionFee({
352
- ...tx,
353
- value: BigInt(tx.value),
354
- feeOption: feeOptionKey,
355
- chain,
356
- });
357
- }
358
- }
359
-
360
- return AssetValue.from({ chain });
361
- },
362
- )
363
- .with(
364
- Chain.Bitcoin,
365
- Chain.BitcoinCash,
366
- Chain.Dogecoin,
367
- Chain.Dash,
368
- Chain.Litecoin,
369
- (chain) => {
370
- const wallet = getWallet(chain);
371
- return wallet.estimateTransactionFee({
372
- ...params,
373
- feeOptionKey,
374
- recipient: wallet.address,
375
- sender: wallet.address,
376
- });
377
- },
378
- )
379
- .with(Chain.THORChain, Chain.Maya, Chain.Kujira, Chain.Cosmos, async () => {
345
+ return wallet.estimateTransactionFee({ ...tx, chain, feeOption: feeOptionKey });
346
+ })
347
+ .with(...UTXOChains, (chain) => {
348
+ const { address, ...wallet } = getWallet(chain);
349
+ return wallet.estimateTransactionFee({
350
+ ...params,
351
+ feeOptionKey,
352
+ recipient: address,
353
+ sender: address,
354
+ });
355
+ })
356
+ .with(...CosmosChains, async () => {
380
357
  const { estimateTransactionFee } = await import("@swapkit/toolboxes/cosmos");
381
358
  return estimateTransactionFee(params);
382
359
  })
@@ -384,18 +361,11 @@ export function SwapKit<
384
361
  const wallet = getWallet(chain);
385
362
  return wallet.estimateTransactionFee({ ...params, recipient: wallet.address });
386
363
  })
387
- .with(Chain.Ripple, (chain) => {
388
- const wallet = getWallet(chain);
389
- return wallet.estimateTransactionFee();
390
- })
391
364
  .with(Chain.Tron, (chain) => {
392
- const wallet = getWallet(chain);
393
- return wallet.estimateTransactionFee({
394
- ...params,
395
- recipient: wallet.address,
396
- sender: wallet.address,
397
- });
365
+ const { address, ...wallet } = getWallet(chain);
366
+ return wallet.estimateTransactionFee({ ...params, recipient: address, sender: address });
398
367
  })
368
+ .with(Chain.Ripple, (chain) => getWallet(chain).estimateTransactionFee())
399
369
  .otherwise(async () => baseValue);
400
370
  }
401
371
 
@@ -15,10 +15,13 @@ export function getExplorerTxUrl({ chain, txHash }: { txHash: string; chain: Cha
15
15
  )
16
16
  .with(
17
17
  Chain.Arbitrum,
18
+ Chain.Aurora,
18
19
  Chain.Avalanche,
19
20
  Chain.BinanceSmartChain,
20
21
  Chain.Base,
22
+ Chain.Berachain,
21
23
  Chain.Ethereum,
24
+ Chain.Gnosis,
22
25
  Chain.Optimism,
23
26
  Chain.Polkadot,
24
27
  Chain.Polygon,