@swapkit/core 1.0.0-rc.160 → 1.0.0-rc.162
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 +80 -5
- package/dist/index.js.map +3 -3
- package/package.json +13 -13
- package/src/client.ts +87 -9
package/dist/index.js
CHANGED
|
@@ -6,9 +6,18 @@ export * from "@swapkit/helpers";
|
|
|
6
6
|
import {
|
|
7
7
|
ApproveMode,
|
|
8
8
|
AssetValue,
|
|
9
|
+
Chain as Chain2,
|
|
9
10
|
EVMChains,
|
|
10
11
|
SwapKitError
|
|
11
12
|
} from "@swapkit/helpers";
|
|
13
|
+
import {
|
|
14
|
+
evmValidateAddress
|
|
15
|
+
} from "@swapkit/toolbox-evm";
|
|
16
|
+
import {
|
|
17
|
+
cosmosValidateAddress
|
|
18
|
+
} from "@swapkit/toolbox-cosmos";
|
|
19
|
+
import {substrateValidateAddress} from "@swapkit/toolbox-substrate";
|
|
20
|
+
import {utxoValidateAddress} from "@swapkit/toolbox-utxo";
|
|
12
21
|
|
|
13
22
|
// src/helpers/explorerUrls.ts
|
|
14
23
|
import {Chain, ChainToExplorerUrl} from "@swapkit/helpers";
|
|
@@ -63,8 +72,12 @@ function SwapKit({
|
|
|
63
72
|
return acc;
|
|
64
73
|
}, {}) : wallets;
|
|
65
74
|
const connectedWallets = {};
|
|
66
|
-
const availablePlugins = Object.entries(compatPlugins).reduce((acc, [pluginName, { plugin, config:
|
|
67
|
-
const methods = plugin({
|
|
75
|
+
const availablePlugins = Object.entries(compatPlugins).reduce((acc, [pluginName, { plugin, config: pluginConfig }]) => {
|
|
76
|
+
const methods = plugin({
|
|
77
|
+
wallets: connectedWallets,
|
|
78
|
+
stagenet,
|
|
79
|
+
config: pluginConfig ?? config
|
|
80
|
+
});
|
|
68
81
|
acc[pluginName] = methods;
|
|
69
82
|
return acc;
|
|
70
83
|
}, {});
|
|
@@ -129,11 +142,40 @@ function SwapKit({
|
|
|
129
142
|
function getWallet(chain) {
|
|
130
143
|
return connectedWallets[chain];
|
|
131
144
|
}
|
|
145
|
+
function getAllWallets() {
|
|
146
|
+
return { ...connectedWallets };
|
|
147
|
+
}
|
|
132
148
|
function getAddress(chain) {
|
|
133
149
|
return getWallet(chain)?.address || "";
|
|
134
150
|
}
|
|
135
151
|
function validateAddress({ address, chain }) {
|
|
136
|
-
|
|
152
|
+
switch (chain) {
|
|
153
|
+
case Chain2.Arbitrum:
|
|
154
|
+
case Chain2.Avalanche:
|
|
155
|
+
case Chain2.Optimism:
|
|
156
|
+
case Chain2.BinanceSmartChain:
|
|
157
|
+
case Chain2.Polygon:
|
|
158
|
+
case Chain2.Ethereum: {
|
|
159
|
+
return evmValidateAddress({ address });
|
|
160
|
+
}
|
|
161
|
+
case Chain2.Polkadot: {
|
|
162
|
+
return substrateValidateAddress({ address, chain });
|
|
163
|
+
}
|
|
164
|
+
case Chain2.Litecoin:
|
|
165
|
+
case Chain2.Dash:
|
|
166
|
+
case Chain2.Dogecoin:
|
|
167
|
+
case Chain2.BitcoinCash:
|
|
168
|
+
case Chain2.Bitcoin: {
|
|
169
|
+
return utxoValidateAddress({ address, chain });
|
|
170
|
+
}
|
|
171
|
+
case Chain2.Cosmos:
|
|
172
|
+
case Chain2.Kujira:
|
|
173
|
+
case Chain2.Maya:
|
|
174
|
+
case Chain2.THORChain: {
|
|
175
|
+
return cosmosValidateAddress({ address, chain });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return false;
|
|
137
179
|
}
|
|
138
180
|
function getBalance(chain, refresh) {
|
|
139
181
|
if (refresh) {
|
|
@@ -168,6 +210,35 @@ function SwapKit({
|
|
|
168
210
|
}
|
|
169
211
|
throw new SwapKitError("core_plugin_swap_not_found");
|
|
170
212
|
}
|
|
213
|
+
function transfer({
|
|
214
|
+
from,
|
|
215
|
+
recipient,
|
|
216
|
+
assetValue,
|
|
217
|
+
feeOptionKey
|
|
218
|
+
}) {
|
|
219
|
+
const chain = assetValue.chain;
|
|
220
|
+
const wallet = connectedWallets[chain];
|
|
221
|
+
if (!wallet)
|
|
222
|
+
throw new SwapKitError("core_wallet_connection_not_found");
|
|
223
|
+
return wallet.transfer({ from, recipient, assetValue, feeOptionKey });
|
|
224
|
+
}
|
|
225
|
+
function disconnectAll() {
|
|
226
|
+
for (const chain of Object.keys(connectedWallets)) {
|
|
227
|
+
const wallet = connectedWallets[chain];
|
|
228
|
+
if ("disconnect" in wallet) {
|
|
229
|
+
wallet.disconnect();
|
|
230
|
+
}
|
|
231
|
+
delete connectedWallets[chain];
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function disconnectChain(chain) {
|
|
235
|
+
const wallet = connectedWallets[chain];
|
|
236
|
+
const disconnect = wallet?.disconnect;
|
|
237
|
+
if (disconnect) {
|
|
238
|
+
disconnect();
|
|
239
|
+
}
|
|
240
|
+
delete connectedWallets[chain];
|
|
241
|
+
}
|
|
171
242
|
return {
|
|
172
243
|
...availablePlugins,
|
|
173
244
|
...connectWalletMethods,
|
|
@@ -177,14 +248,18 @@ function SwapKit({
|
|
|
177
248
|
getExplorerAddressUrl,
|
|
178
249
|
getExplorerTxUrl,
|
|
179
250
|
getWallet,
|
|
251
|
+
getAllWallets,
|
|
180
252
|
getWalletWithBalance,
|
|
181
253
|
isAssetValueApproved,
|
|
182
254
|
swap,
|
|
183
|
-
|
|
255
|
+
transfer,
|
|
256
|
+
validateAddress,
|
|
257
|
+
disconnectAll,
|
|
258
|
+
disconnectChain
|
|
184
259
|
};
|
|
185
260
|
}
|
|
186
261
|
export {
|
|
187
262
|
SwapKit
|
|
188
263
|
};
|
|
189
264
|
|
|
190
|
-
//# debugId=
|
|
265
|
+
//# debugId=F6D931ECC10E5F9864756e2164756e21
|
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/api\";\nexport * from \"@swapkit/helpers\";\n\nexport * from \"./client.ts\";\nexport * from \"./types.ts\";\n",
|
|
6
|
-
"import {\n type AddChainWalletParams,\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n type Chain,\n type ConnectConfig,\n type EVMChain,\n EVMChains,\n type ProviderName as PluginNameEnum,\n SwapKitError,\n type SwapParams,\n} from \"@swapkit/helpers\";\nimport type { BaseEVMWallet } from \"@swapkit/toolbox-evm\";\n\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls.ts\";\nimport type { Apis, SwapKitPluginInterface, SwapKitWallet, Wallet } from \"./types.ts\";\n\nexport function SwapKit<\n Plugins extends { [key in string]: SwapKitPluginInterface<{ [key in string]: Todo }> },\n Wallets extends { [key in string]: SwapKitWallet<NotWorth[]> },\n>({\n apis = {},\n config = {},\n plugins,\n rpcUrls = {},\n stagenet = false,\n wallets,\n}: {\n apis?: Apis;\n config?: ConnectConfig;\n plugins: Plugins;\n rpcUrls?: { [key in Chain]?: string };\n stagenet?: boolean;\n wallets: Wallets;\n}) {\n type PluginName = keyof Plugins;\n\n /**\n * @REMOVE (V1)\n * Compatibility layer for plugins and wallets for easier migration and backwards compatibility\n */\n const compatPlugins: Plugins = Array.isArray(plugins)\n ? plugins.reduce((acc, pluginInterface) => {\n // @ts-ignore Ignore until we remove the compatibility layer\n const { name, plugin } = Object.values(pluginInterface)?.[0] || {};\n acc[name] = plugin;\n return acc;\n }, {})\n : plugins;\n const compatWallets: Wallets = Array.isArray(wallets)\n ? wallets.reduce((acc, wallet) => {\n // @ts-ignore Ignore until we remove the compatibility layer\n const [walletName, connectWallet] = Object.entries(wallet)?.[0] || {};\n acc[walletName] = connectWallet;\n return acc;\n }, {})\n : wallets;\n\n const connectedWallets = {} as Wallet;\n const availablePlugins = Object.entries(compatPlugins).reduce(\n (acc, [pluginName, { plugin, config }]) => {\n const methods = plugin({ wallets: connectedWallets, stagenet, config });\n\n // @ts-expect-error\n acc[pluginName] = methods;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key][\"plugin\"]> },\n );\n\n const connectWalletMethods = Object.entries(compatWallets).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet({ addChain, config, apis, rpcUrls });\n\n // @ts-expect-error\n acc[walletName] = connectWallet;\n return acc;\n },\n {} as { [key in keyof Wallets]: ReturnType<Wallets[key]> },\n );\n\n /**\n * @Private\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\", \"Could not find the requested plugin\");\n }\n\n return plugin;\n }\n\n /**\n * @Private\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\", \"Could not find the requested plugin\");\n }\n\n return plugin;\n }\n\n function addChain<T extends Chain>(connectWallet: AddChainWalletParams<T>) {\n // @ts-expect-error: TODO\n connectedWallets[connectWallet.chain] = connectWallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError(\n \"core_approve_asset_target_invalid\",\n `Target ${String(spenderAddress)} cannot be used for approve operation`,\n );\n }\n\n const { address, chain, isGasAsset, isSynthetic } = assetValue;\n const isEVMChain = EVMChains.includes(chain as EVMChain);\n const isNativeEVM = isEVMChain && isGasAsset;\n\n if (isNativeEVM || !isEVMChain || isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const walletMethods = connectedWallets[chain] as BaseEVMWallet;\n const walletAction = type === \"checkOnly\" ? walletMethods?.isApproved : walletMethods?.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const from = getAddress(chain);\n if (!(address && from && 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: address,\n from,\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 function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n /**\n * TODO: Figure out validation without connecting to wallet\n */\n function validateAddress({ address, chain }: { address: string; chain: Chain }) {\n // @ts-expect-error TODO add validate address to radix\n return getWallet(chain)?.validateAddress?.(address);\n }\n\n function getBalance<T extends Chain>(chain: T, refresh?: boolean) {\n if (refresh) {\n return getWalletWithBalance(chain).then((wallet) => wallet.balance);\n }\n\n return getWallet(chain)?.balance || [];\n }\n\n async function getWalletWithBalance<T extends Chain>(chain: T, potentialScamFilter = true) {\n const defaultBalance = [AssetValue.fromChainOrSignature(chain)];\n const wallet = getWallet(chain);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n if (\"getBalance\" in wallet) {\n // @ts-expect-error TODO add getBalance to radix\n const balance = await wallet.getBalance(wallet.address, potentialScamFilter);\n wallet.balance = balance?.length ? balance : defaultBalance;\n }\n\n return wallet;\n }\n\n function 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 swap<T extends PluginName>({ route, pluginName, ...rest }: SwapParams<T>) {\n const plugin =\n (pluginName && getSwapKitPlugin(pluginName)) ||\n getSwapKitPluginForSKProvider(route.providers[0] as PluginNameEnum);\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 return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n approveAssetValue,\n getAddress,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getWalletWithBalance,\n isAssetValueApproved,\n swap,\n validateAddress,\n };\n}\n",
|
|
6
|
+
"import {\n type AddChainWalletParams,\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type ConnectConfig,\n type EVMChain,\n EVMChains,\n type ProviderName as PluginNameEnum,\n SwapKitError,\n type SwapParams,\n type WalletChain,\n} from \"@swapkit/helpers\";\nimport {\n type BaseEVMWallet,\n type TransferParams as EVMTransferParams,\n evmValidateAddress,\n} from \"@swapkit/toolbox-evm\";\n\nimport {\n type TransferParams as CosmosTransferParams,\n cosmosValidateAddress,\n} from \"@swapkit/toolbox-cosmos\";\nimport { substrateValidateAddress } from \"@swapkit/toolbox-substrate\";\nimport { type UTXOTransferParams, utxoValidateAddress } from \"@swapkit/toolbox-utxo\";\nimport {\n getExplorerAddressUrl as getAddressUrl,\n getExplorerTxUrl as getTxUrl,\n} from \"./helpers/explorerUrls.ts\";\nimport type { Apis, SwapKitPluginInterface, SwapKitWallet, Wallet } from \"./types.ts\";\n\nexport function SwapKit<\n Plugins extends { [key in string]: SwapKitPluginInterface<{ [key in string]: Todo }> },\n Wallets extends { [key in string]: SwapKitWallet<NotWorth[]> },\n>({\n apis = {},\n config = {},\n plugins,\n rpcUrls = {},\n stagenet = false,\n wallets,\n}: {\n apis?: Apis;\n config?: ConnectConfig;\n plugins: Plugins;\n rpcUrls?: { [key in Chain]?: string };\n stagenet?: boolean;\n wallets: Wallets;\n}) {\n type PluginName = keyof Plugins;\n\n /**\n * @REMOVE (V1)\n * Compatibility layer for plugins and wallets for easier migration and backwards compatibility\n */\n const compatPlugins: Plugins = Array.isArray(plugins)\n ? plugins.reduce((acc, pluginInterface) => {\n // @ts-ignore Ignore until we remove the compatibility layer\n const { name, plugin } = Object.values(pluginInterface)?.[0] || {};\n acc[name] = plugin;\n return acc;\n }, {})\n : plugins;\n const compatWallets: Wallets = Array.isArray(wallets)\n ? wallets.reduce((acc, wallet) => {\n // @ts-ignore Ignore until we remove the compatibility layer\n const [walletName, connectWallet] = Object.entries(wallet)?.[0] || {};\n acc[walletName] = connectWallet;\n return acc;\n }, {})\n : wallets;\n\n const connectedWallets = {} as Wallet;\n const availablePlugins = Object.entries(compatPlugins).reduce(\n (acc, [pluginName, { plugin, config: pluginConfig }]) => {\n const methods = plugin({\n wallets: connectedWallets,\n stagenet,\n config: pluginConfig ?? config,\n });\n\n // @ts-expect-error\n acc[pluginName] = methods;\n return acc;\n },\n {} as { [key in PluginName]: ReturnType<Plugins[key][\"plugin\"]> },\n );\n\n const connectWalletMethods = Object.entries(compatWallets).reduce(\n (acc, [walletName, wallet]) => {\n const connectWallet = wallet({ addChain, config, apis, rpcUrls });\n\n // @ts-expect-error\n acc[walletName] = connectWallet;\n return acc;\n },\n {} as { [key in keyof Wallets]: ReturnType<Wallets[key]> },\n );\n\n /**\n * @Private\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\", \"Could not find the requested plugin\");\n }\n\n return plugin;\n }\n\n /**\n * @Private\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\", \"Could not find the requested plugin\");\n }\n\n return plugin;\n }\n\n function addChain<T extends Chain>(connectWallet: AddChainWalletParams<T>) {\n // @ts-expect-error: TODO\n connectedWallets[connectWallet.chain] = connectWallet;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n contractAddress: spenderAddress,\n }: {\n type: T;\n assetValue: AssetValue;\n contractAddress: string | PluginName;\n }) {\n const plugin = availablePlugins[spenderAddress];\n\n if (plugin) {\n if (type === ApproveMode.CheckOnly && \"isAssetValueApproved\" in plugin) {\n return plugin.isAssetValueApproved({ assetValue }) as ApproveReturnType<T>;\n }\n if (type === ApproveMode.Approve && \"approveAssetValue\" in plugin) {\n return plugin.approveAssetValue({ assetValue }) as ApproveReturnType<T>;\n }\n\n throw new SwapKitError(\n \"core_approve_asset_target_invalid\",\n `Target ${String(spenderAddress)} cannot be used for approve operation`,\n );\n }\n\n const { address, chain, isGasAsset, isSynthetic } = assetValue;\n const isEVMChain = EVMChains.includes(chain as EVMChain);\n const isNativeEVM = isEVMChain && isGasAsset;\n\n if (isNativeEVM || !isEVMChain || isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const walletMethods = connectedWallets[chain] as BaseEVMWallet;\n const walletAction = type === \"checkOnly\" ? walletMethods?.isApproved : walletMethods?.approve;\n if (!walletAction) throw new SwapKitError(\"core_wallet_connection_not_found\");\n\n const from = getAddress(chain);\n if (!(address && from && 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: address,\n from,\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 function getAllWallets() {\n return { ...connectedWallets };\n }\n function getAddress<T extends Chain>(chain: T) {\n return getWallet(chain)?.address || \"\";\n }\n\n function validateAddress({ address, chain }: { address: string; chain: Chain }) {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Optimism:\n case Chain.BinanceSmartChain:\n case Chain.Polygon:\n case Chain.Ethereum: {\n return evmValidateAddress({ address });\n }\n case Chain.Polkadot: {\n return substrateValidateAddress({ address, chain });\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 return false;\n }\n\n function getBalance<T extends Chain>(chain: T, refresh?: boolean) {\n if (refresh) {\n return getWalletWithBalance(chain).then((wallet) => wallet.balance);\n }\n\n return getWallet(chain)?.balance || [];\n }\n\n async function getWalletWithBalance<T extends Chain>(chain: T, potentialScamFilter = true) {\n const defaultBalance = [AssetValue.fromChainOrSignature(chain)];\n const wallet = getWallet(chain);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n if (\"getBalance\" in wallet) {\n // @ts-expect-error TODO add getBalance to radix\n const balance = await wallet.getBalance(wallet.address, potentialScamFilter);\n wallet.balance = balance?.length ? balance : defaultBalance;\n }\n\n return wallet;\n }\n\n function 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 swap<T extends PluginName>({ route, pluginName, ...rest }: SwapParams<T>) {\n const plugin =\n (pluginName && getSwapKitPlugin(pluginName)) ||\n getSwapKitPluginForSKProvider(route.providers[0] as PluginNameEnum);\n if (!plugin) throw new SwapKitError(\"core_swap_route_not_complete\");\n\n if (\"swap\" in plugin) {\n return plugin.swap({ ...rest, route });\n }\n\n throw new SwapKitError(\"core_plugin_swap_not_found\");\n }\n\n function transfer({\n from,\n recipient,\n assetValue,\n feeOptionKey,\n }: UTXOTransferParams | EVMTransferParams | CosmosTransferParams) {\n const chain = assetValue.chain as WalletChain;\n const wallet = connectedWallets[chain];\n if (!wallet) throw new SwapKitError(\"core_wallet_connection_not_found\");\n return wallet.transfer({ from, recipient, assetValue, feeOptionKey });\n }\n\n function disconnectAll() {\n for (const chain of Object.keys(connectedWallets)) {\n // @ts-expect-error: TODO\n const wallet = connectedWallets[chain];\n if (\"disconnect\" in wallet) {\n wallet.disconnect();\n }\n // @ts-expect-error: TODO\n delete connectedWallets[chain];\n }\n }\n\n function disconnectChain(chain: Chain) {\n const wallet = connectedWallets[chain];\n const disconnect = wallet?.disconnect;\n if (disconnect) {\n disconnect();\n }\n delete connectedWallets[chain];\n }\n\n return {\n ...availablePlugins,\n ...connectWalletMethods,\n\n approveAssetValue,\n getAddress,\n getBalance,\n getExplorerAddressUrl: getAddressUrl,\n getExplorerTxUrl: getTxUrl,\n getWallet,\n getAllWallets,\n getWalletWithBalance,\n isAssetValueApproved,\n swap,\n transfer,\n validateAddress,\n disconnectAll,\n disconnectChain,\n };\n}\n",
|
|
7
7
|
"import { Chain, ChainToExplorerUrl } 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.Binance:\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos:\n case Chain.THORChain:\n return `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash.slice(2) : txHash}`;\n\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.BinanceSmartChain:\n case Chain.Ethereum:\n case Chain.Optimism:\n case Chain.Polkadot:\n case Chain.Polygon:\n return `${baseUrl}/tx/${txHash.startsWith(\"0x\") ? txHash : `0x${txHash}`}`;\n\n case Chain.Litecoin:\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n return `${baseUrl}/transaction/${txHash.toLowerCase()}`;\n\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n}\n\nexport function getExplorerAddressUrl({ chain, address }: { address: string; chain: Chain }) {\n const baseUrl = ChainToExplorerUrl[chain];\n\n return `${baseUrl}/address/${address}`;\n}\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": ";AAAA;AACA;;;ACDA;AAAA;AAAA;AAAA;AAAA;AAAA;;;
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "F6D931ECC10E5F9864756e2164756e21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "swapkit-oss",
|
|
3
3
|
"dependencies": {
|
|
4
|
-
"@swapkit/api": "1.0.0-rc.
|
|
5
|
-
"@swapkit/helpers": "1.0.0-rc.
|
|
4
|
+
"@swapkit/api": "1.0.0-rc.79",
|
|
5
|
+
"@swapkit/helpers": "1.0.0-rc.111"
|
|
6
6
|
},
|
|
7
7
|
"description": "SwapKit - Core",
|
|
8
8
|
"devDependencies": {
|
|
9
9
|
"@swapkit/tokens": "1.0.0-rc.53",
|
|
10
|
-
"@swapkit/toolbox-cosmos": "1.0.0-rc.
|
|
11
|
-
"@swapkit/toolbox-evm": "1.0.0-rc.
|
|
12
|
-
"@swapkit/toolbox-substrate": "1.0.0-rc.
|
|
13
|
-
"@swapkit/toolbox-utxo": "1.0.0-rc.
|
|
10
|
+
"@swapkit/toolbox-cosmos": "1.0.0-rc.137",
|
|
11
|
+
"@swapkit/toolbox-evm": "1.0.0-rc.117",
|
|
12
|
+
"@swapkit/toolbox-substrate": "1.0.0-rc.46",
|
|
13
|
+
"@swapkit/toolbox-utxo": "1.0.0-rc.120",
|
|
14
14
|
"bun-types": "1.1.8"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
|
-
"@swapkit/api": "1.0.0-rc.
|
|
18
|
-
"@swapkit/helpers": "1.0.0-rc.
|
|
17
|
+
"@swapkit/api": "1.0.0-rc.79",
|
|
18
|
+
"@swapkit/helpers": "1.0.0-rc.111",
|
|
19
19
|
"@swapkit/tokens": "1.0.0-rc.53",
|
|
20
|
-
"@swapkit/toolbox-cosmos": "1.0.0-rc.
|
|
21
|
-
"@swapkit/toolbox-evm": "1.0.0-rc.
|
|
22
|
-
"@swapkit/toolbox-substrate": "1.0.0-rc.
|
|
23
|
-
"@swapkit/toolbox-utxo": "1.0.0-rc.
|
|
20
|
+
"@swapkit/toolbox-cosmos": "1.0.0-rc.137",
|
|
21
|
+
"@swapkit/toolbox-evm": "1.0.0-rc.117",
|
|
22
|
+
"@swapkit/toolbox-substrate": "1.0.0-rc.46",
|
|
23
|
+
"@swapkit/toolbox-utxo": "1.0.0-rc.120"
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
"src/",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
},
|
|
46
46
|
"type": "module",
|
|
47
47
|
"types": "./src/index.ts",
|
|
48
|
-
"version": "1.0.0-rc.
|
|
48
|
+
"version": "1.0.0-rc.162"
|
|
49
49
|
}
|
package/src/client.ts
CHANGED
|
@@ -3,16 +3,27 @@ import {
|
|
|
3
3
|
ApproveMode,
|
|
4
4
|
type ApproveReturnType,
|
|
5
5
|
AssetValue,
|
|
6
|
-
|
|
6
|
+
Chain,
|
|
7
7
|
type ConnectConfig,
|
|
8
8
|
type EVMChain,
|
|
9
9
|
EVMChains,
|
|
10
10
|
type ProviderName as PluginNameEnum,
|
|
11
11
|
SwapKitError,
|
|
12
12
|
type SwapParams,
|
|
13
|
+
type WalletChain,
|
|
13
14
|
} from "@swapkit/helpers";
|
|
14
|
-
import
|
|
15
|
+
import {
|
|
16
|
+
type BaseEVMWallet,
|
|
17
|
+
type TransferParams as EVMTransferParams,
|
|
18
|
+
evmValidateAddress,
|
|
19
|
+
} from "@swapkit/toolbox-evm";
|
|
15
20
|
|
|
21
|
+
import {
|
|
22
|
+
type TransferParams as CosmosTransferParams,
|
|
23
|
+
cosmosValidateAddress,
|
|
24
|
+
} from "@swapkit/toolbox-cosmos";
|
|
25
|
+
import { substrateValidateAddress } from "@swapkit/toolbox-substrate";
|
|
26
|
+
import { type UTXOTransferParams, utxoValidateAddress } from "@swapkit/toolbox-utxo";
|
|
16
27
|
import {
|
|
17
28
|
getExplorerAddressUrl as getAddressUrl,
|
|
18
29
|
getExplorerTxUrl as getTxUrl,
|
|
@@ -62,8 +73,12 @@ export function SwapKit<
|
|
|
62
73
|
|
|
63
74
|
const connectedWallets = {} as Wallet;
|
|
64
75
|
const availablePlugins = Object.entries(compatPlugins).reduce(
|
|
65
|
-
(acc, [pluginName, { plugin, config }]) => {
|
|
66
|
-
const methods = plugin({
|
|
76
|
+
(acc, [pluginName, { plugin, config: pluginConfig }]) => {
|
|
77
|
+
const methods = plugin({
|
|
78
|
+
wallets: connectedWallets,
|
|
79
|
+
stagenet,
|
|
80
|
+
config: pluginConfig ?? config,
|
|
81
|
+
});
|
|
67
82
|
|
|
68
83
|
// @ts-expect-error
|
|
69
84
|
acc[pluginName] = methods;
|
|
@@ -173,15 +188,41 @@ export function SwapKit<
|
|
|
173
188
|
function getWallet<T extends Chain>(chain: T) {
|
|
174
189
|
return connectedWallets[chain];
|
|
175
190
|
}
|
|
191
|
+
function getAllWallets() {
|
|
192
|
+
return { ...connectedWallets };
|
|
193
|
+
}
|
|
176
194
|
function getAddress<T extends Chain>(chain: T) {
|
|
177
195
|
return getWallet(chain)?.address || "";
|
|
178
196
|
}
|
|
179
|
-
|
|
180
|
-
* TODO: Figure out validation without connecting to wallet
|
|
181
|
-
*/
|
|
197
|
+
|
|
182
198
|
function validateAddress({ address, chain }: { address: string; chain: Chain }) {
|
|
183
|
-
|
|
184
|
-
|
|
199
|
+
switch (chain) {
|
|
200
|
+
case Chain.Arbitrum:
|
|
201
|
+
case Chain.Avalanche:
|
|
202
|
+
case Chain.Optimism:
|
|
203
|
+
case Chain.BinanceSmartChain:
|
|
204
|
+
case Chain.Polygon:
|
|
205
|
+
case Chain.Ethereum: {
|
|
206
|
+
return evmValidateAddress({ address });
|
|
207
|
+
}
|
|
208
|
+
case Chain.Polkadot: {
|
|
209
|
+
return substrateValidateAddress({ address, chain });
|
|
210
|
+
}
|
|
211
|
+
case Chain.Litecoin:
|
|
212
|
+
case Chain.Dash:
|
|
213
|
+
case Chain.Dogecoin:
|
|
214
|
+
case Chain.BitcoinCash:
|
|
215
|
+
case Chain.Bitcoin: {
|
|
216
|
+
return utxoValidateAddress({ address, chain });
|
|
217
|
+
}
|
|
218
|
+
case Chain.Cosmos:
|
|
219
|
+
case Chain.Kujira:
|
|
220
|
+
case Chain.Maya:
|
|
221
|
+
case Chain.THORChain: {
|
|
222
|
+
return cosmosValidateAddress({ address, chain });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return false;
|
|
185
226
|
}
|
|
186
227
|
|
|
187
228
|
function getBalance<T extends Chain>(chain: T, refresh?: boolean) {
|
|
@@ -230,6 +271,39 @@ export function SwapKit<
|
|
|
230
271
|
throw new SwapKitError("core_plugin_swap_not_found");
|
|
231
272
|
}
|
|
232
273
|
|
|
274
|
+
function transfer({
|
|
275
|
+
from,
|
|
276
|
+
recipient,
|
|
277
|
+
assetValue,
|
|
278
|
+
feeOptionKey,
|
|
279
|
+
}: UTXOTransferParams | EVMTransferParams | CosmosTransferParams) {
|
|
280
|
+
const chain = assetValue.chain as WalletChain;
|
|
281
|
+
const wallet = connectedWallets[chain];
|
|
282
|
+
if (!wallet) throw new SwapKitError("core_wallet_connection_not_found");
|
|
283
|
+
return wallet.transfer({ from, recipient, assetValue, feeOptionKey });
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function disconnectAll() {
|
|
287
|
+
for (const chain of Object.keys(connectedWallets)) {
|
|
288
|
+
// @ts-expect-error: TODO
|
|
289
|
+
const wallet = connectedWallets[chain];
|
|
290
|
+
if ("disconnect" in wallet) {
|
|
291
|
+
wallet.disconnect();
|
|
292
|
+
}
|
|
293
|
+
// @ts-expect-error: TODO
|
|
294
|
+
delete connectedWallets[chain];
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function disconnectChain(chain: Chain) {
|
|
299
|
+
const wallet = connectedWallets[chain];
|
|
300
|
+
const disconnect = wallet?.disconnect;
|
|
301
|
+
if (disconnect) {
|
|
302
|
+
disconnect();
|
|
303
|
+
}
|
|
304
|
+
delete connectedWallets[chain];
|
|
305
|
+
}
|
|
306
|
+
|
|
233
307
|
return {
|
|
234
308
|
...availablePlugins,
|
|
235
309
|
...connectWalletMethods,
|
|
@@ -240,9 +314,13 @@ export function SwapKit<
|
|
|
240
314
|
getExplorerAddressUrl: getAddressUrl,
|
|
241
315
|
getExplorerTxUrl: getTxUrl,
|
|
242
316
|
getWallet,
|
|
317
|
+
getAllWallets,
|
|
243
318
|
getWalletWithBalance,
|
|
244
319
|
isAssetValueApproved,
|
|
245
320
|
swap,
|
|
321
|
+
transfer,
|
|
246
322
|
validateAddress,
|
|
323
|
+
disconnectAll,
|
|
324
|
+
disconnectChain,
|
|
247
325
|
};
|
|
248
326
|
}
|