@swapkit/core 1.0.0-rc.16 → 1.0.0-rc.161

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.
Files changed (45) hide show
  1. package/dist/index.js +217 -0
  2. package/dist/index.js.map +12 -0
  3. package/package.json +33 -47
  4. package/src/__tests__/helpers.test.ts +53 -0
  5. package/src/aggregator/contracts/avaxGeneric.ts +50 -50
  6. package/src/aggregator/contracts/avaxWoofi.ts +80 -80
  7. package/src/aggregator/contracts/bscGeneric.ts +59 -59
  8. package/src/aggregator/contracts/ethGeneric.ts +50 -50
  9. package/src/aggregator/contracts/index.ts +30 -28
  10. package/src/aggregator/contracts/pancakeV2.ts +80 -80
  11. package/src/aggregator/contracts/pangolin.ts +65 -65
  12. package/src/aggregator/contracts/routers/index.ts +58 -0
  13. package/src/aggregator/contracts/routers/kyber.ts +402 -0
  14. package/src/aggregator/contracts/routers/oneinch.ts +2188 -0
  15. package/src/aggregator/contracts/routers/pancakeswap.ts +340 -0
  16. package/src/aggregator/contracts/routers/pangolin.ts +340 -0
  17. package/src/aggregator/contracts/routers/sushiswap.ts +340 -0
  18. package/src/aggregator/contracts/routers/traderJoe.ts +340 -0
  19. package/src/aggregator/contracts/routers/uniswapv2.ts +340 -0
  20. package/src/aggregator/contracts/routers/uniswapv3.ts +254 -0
  21. package/src/aggregator/contracts/routers/woofi.ts +171 -0
  22. package/src/aggregator/contracts/sushiswap.ts +65 -65
  23. package/src/aggregator/contracts/traderJoe.ts +65 -65
  24. package/src/aggregator/contracts/uniswapV2.ts +65 -65
  25. package/src/aggregator/contracts/uniswapV2Leg.ts +70 -70
  26. package/src/aggregator/contracts/uniswapV3_100.ts +70 -70
  27. package/src/aggregator/contracts/uniswapV3_10000.ts +70 -70
  28. package/src/aggregator/contracts/uniswapV3_3000.ts +70 -70
  29. package/src/aggregator/contracts/uniswapV3_500.ts +70 -70
  30. package/src/aggregator/getSwapParams.ts +12 -12
  31. package/src/client.ts +279 -0
  32. package/src/helpers/explorerUrls.ts +38 -0
  33. package/src/index.ts +5 -4
  34. package/src/types.ts +43 -0
  35. package/LICENSE +0 -201
  36. package/dist/index-9e36735e.cjs +0 -1
  37. package/dist/index-cf1865cd.js +0 -649
  38. package/dist/index.cjs +0 -2
  39. package/dist/index.d.ts +0 -216
  40. package/dist/index.es.js +0 -4174
  41. package/src/client/__tests__/helpers.test.ts +0 -69
  42. package/src/client/explorerUrls.ts +0 -62
  43. package/src/client/index.ts +0 -699
  44. package/src/client/thornode.ts +0 -31
  45. package/src/client/types.ts +0 -103
package/dist/index.js ADDED
@@ -0,0 +1,217 @@
1
+ // src/index.ts
2
+ export * from "@swapkit/api";
3
+ export * from "@swapkit/helpers";
4
+
5
+ // src/client.ts
6
+ import {
7
+ ApproveMode,
8
+ AssetValue,
9
+ EVMChains,
10
+ SwapKitError
11
+ } from "@swapkit/helpers";
12
+
13
+ // src/helpers/explorerUrls.ts
14
+ import {Chain, ChainToExplorerUrl} from "@swapkit/helpers";
15
+ function getExplorerTxUrl({ chain, txHash }) {
16
+ const baseUrl = ChainToExplorerUrl[chain];
17
+ switch (chain) {
18
+ case Chain.Binance:
19
+ case Chain.Maya:
20
+ case Chain.Kujira:
21
+ case Chain.Cosmos:
22
+ case Chain.THORChain:
23
+ return `${baseUrl}/tx/${txHash.startsWith("0x") ? txHash.slice(2) : txHash}`;
24
+ case Chain.Arbitrum:
25
+ case Chain.Avalanche:
26
+ case Chain.BinanceSmartChain:
27
+ case Chain.Ethereum:
28
+ case Chain.Optimism:
29
+ case Chain.Polkadot:
30
+ case Chain.Polygon:
31
+ return `${baseUrl}/tx/${txHash.startsWith("0x") ? txHash : `0x${txHash}`}`;
32
+ case Chain.Litecoin:
33
+ case Chain.Bitcoin:
34
+ case Chain.BitcoinCash:
35
+ case Chain.Dogecoin:
36
+ return `${baseUrl}/transaction/${txHash.toLowerCase()}`;
37
+ default:
38
+ throw new Error(`Unsupported chain: ${chain}`);
39
+ }
40
+ }
41
+ function getExplorerAddressUrl({ chain, address }) {
42
+ const baseUrl = ChainToExplorerUrl[chain];
43
+ return `${baseUrl}/address/${address}`;
44
+ }
45
+
46
+ // src/client.ts
47
+ function SwapKit({
48
+ apis = {},
49
+ config = {},
50
+ plugins,
51
+ rpcUrls = {},
52
+ stagenet = false,
53
+ wallets
54
+ }) {
55
+ const compatPlugins = Array.isArray(plugins) ? plugins.reduce((acc, pluginInterface) => {
56
+ const { name, plugin } = Object.values(pluginInterface)?.[0] || {};
57
+ acc[name] = plugin;
58
+ return acc;
59
+ }, {}) : plugins;
60
+ const compatWallets = Array.isArray(wallets) ? wallets.reduce((acc, wallet) => {
61
+ const [walletName, connectWallet] = Object.entries(wallet)?.[0] || {};
62
+ acc[walletName] = connectWallet;
63
+ return acc;
64
+ }, {}) : wallets;
65
+ const connectedWallets = {};
66
+ const availablePlugins = Object.entries(compatPlugins).reduce((acc, [pluginName, { plugin, config: pluginConfig }]) => {
67
+ const methods = plugin({
68
+ wallets: connectedWallets,
69
+ stagenet,
70
+ config: pluginConfig ?? config
71
+ });
72
+ acc[pluginName] = methods;
73
+ return acc;
74
+ }, {});
75
+ const connectWalletMethods = Object.entries(compatWallets).reduce((acc, [walletName, wallet]) => {
76
+ const connectWallet = wallet({ addChain, config, apis, rpcUrls });
77
+ acc[walletName] = connectWallet;
78
+ return acc;
79
+ }, {});
80
+ function getSwapKitPlugin(pluginName) {
81
+ const plugin = availablePlugins[pluginName] || Object.values(availablePlugins)[0];
82
+ if (!plugin) {
83
+ throw new SwapKitError("core_plugin_not_found", "Could not find the requested plugin");
84
+ }
85
+ return plugin;
86
+ }
87
+ function getSwapKitPluginForSKProvider(pluginName) {
88
+ const plugin = Object.values(availablePlugins).find((plugin2) => plugin2.supportedSwapkitProviders?.includes(pluginName));
89
+ if (!plugin) {
90
+ throw new SwapKitError("core_plugin_not_found", "Could not find the requested plugin");
91
+ }
92
+ return plugin;
93
+ }
94
+ function addChain(connectWallet) {
95
+ connectedWallets[connectWallet.chain] = connectWallet;
96
+ }
97
+ function approve({
98
+ assetValue,
99
+ type = "checkOnly",
100
+ contractAddress: spenderAddress
101
+ }) {
102
+ const plugin = availablePlugins[spenderAddress];
103
+ if (plugin) {
104
+ if (type === ApproveMode.CheckOnly && "isAssetValueApproved" in plugin) {
105
+ return plugin.isAssetValueApproved({ assetValue });
106
+ }
107
+ if (type === ApproveMode.Approve && "approveAssetValue" in plugin) {
108
+ return plugin.approveAssetValue({ assetValue });
109
+ }
110
+ throw new SwapKitError("core_approve_asset_target_invalid", `Target ${String(spenderAddress)} cannot be used for approve operation`);
111
+ }
112
+ const { address, chain, isGasAsset, isSynthetic } = assetValue;
113
+ const isEVMChain = EVMChains.includes(chain);
114
+ const isNativeEVM = isEVMChain && isGasAsset;
115
+ if (isNativeEVM || !isEVMChain || isSynthetic) {
116
+ return Promise.resolve(type === "checkOnly" ? true : "approved");
117
+ }
118
+ const walletMethods = connectedWallets[chain];
119
+ const walletAction = type === "checkOnly" ? walletMethods?.isApproved : walletMethods?.approve;
120
+ if (!walletAction)
121
+ throw new SwapKitError("core_wallet_connection_not_found");
122
+ const from = getAddress(chain);
123
+ if (!(address && from && typeof spenderAddress === "string")) {
124
+ throw new SwapKitError("core_approve_asset_address_or_from_not_found");
125
+ }
126
+ return walletAction({
127
+ amount: assetValue.getBaseValue("bigint"),
128
+ assetAddress: address,
129
+ from,
130
+ spenderAddress
131
+ });
132
+ }
133
+ function getWallet(chain) {
134
+ return connectedWallets[chain];
135
+ }
136
+ function getAllWallets() {
137
+ return { ...connectedWallets };
138
+ }
139
+ function getAddress(chain) {
140
+ return getWallet(chain)?.address || "";
141
+ }
142
+ function validateAddress({ address, chain }) {
143
+ return getWallet(chain)?.validateAddress?.(address);
144
+ }
145
+ function getBalance(chain, refresh) {
146
+ if (refresh) {
147
+ return getWalletWithBalance(chain).then((wallet) => wallet.balance);
148
+ }
149
+ return getWallet(chain)?.balance || [];
150
+ }
151
+ async function getWalletWithBalance(chain, potentialScamFilter = true) {
152
+ const defaultBalance = [AssetValue.fromChainOrSignature(chain)];
153
+ const wallet = getWallet(chain);
154
+ if (!wallet) {
155
+ throw new SwapKitError("core_wallet_connection_not_found");
156
+ }
157
+ if ("getBalance" in wallet) {
158
+ const balance = await wallet.getBalance(wallet.address, potentialScamFilter);
159
+ wallet.balance = balance?.length ? balance : defaultBalance;
160
+ }
161
+ return wallet;
162
+ }
163
+ function approveAssetValue(assetValue, contractAddress) {
164
+ return approve({ assetValue, contractAddress, type: ApproveMode.Approve });
165
+ }
166
+ function isAssetValueApproved(assetValue, contractAddress) {
167
+ return approve({ assetValue, contractAddress, type: ApproveMode.CheckOnly });
168
+ }
169
+ function swap({ route, pluginName, ...rest }) {
170
+ const plugin = pluginName && getSwapKitPlugin(pluginName) || getSwapKitPluginForSKProvider(route.providers[0]);
171
+ if (!plugin)
172
+ throw new SwapKitError("core_swap_route_not_complete");
173
+ if ("swap" in plugin) {
174
+ return plugin.swap({ ...rest, route });
175
+ }
176
+ throw new SwapKitError("core_plugin_swap_not_found");
177
+ }
178
+ function disconnectAll() {
179
+ for (const chain of Object.keys(connectedWallets)) {
180
+ const wallet = connectedWallets[chain];
181
+ if ("disconnect" in wallet) {
182
+ wallet.disconnect();
183
+ }
184
+ delete connectedWallets[chain];
185
+ }
186
+ }
187
+ function disconnectChain(chain) {
188
+ const wallet = connectedWallets[chain];
189
+ const disconnect = wallet?.disconnect;
190
+ if (disconnect) {
191
+ disconnect();
192
+ }
193
+ delete connectedWallets[chain];
194
+ }
195
+ return {
196
+ ...availablePlugins,
197
+ ...connectWalletMethods,
198
+ approveAssetValue,
199
+ getAddress,
200
+ getBalance,
201
+ getExplorerAddressUrl,
202
+ getExplorerTxUrl,
203
+ getWallet,
204
+ getAllWallets,
205
+ getWalletWithBalance,
206
+ isAssetValueApproved,
207
+ swap,
208
+ validateAddress,
209
+ disconnectAll,
210
+ disconnectChain
211
+ };
212
+ }
213
+ export {
214
+ SwapKit
215
+ };
216
+
217
+ //# debugId=E0205D68B547A0FA64756e2164756e21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/client.ts", "../src/helpers/explorerUrls.ts"],
4
+ "sourcesContent": [
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: 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 * 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 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 validateAddress,\n disconnectAll,\n disconnectChain,\n };\n}\n",
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
+ ],
9
+ "mappings": "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",
10
+ "debugId": "E0205D68B547A0FA64756e2164756e21",
11
+ "names": []
12
+ }
package/package.json CHANGED
@@ -1,40 +1,26 @@
1
1
  {
2
- "author": "swapkit-oss-team",
2
+ "author": "swapkit-oss",
3
3
  "dependencies": {
4
- "@swapkit/types": "1.0.0-rc.6",
5
- "@swapkit/helpers": "1.0.0-rc.11"
4
+ "@swapkit/api": "1.0.0-rc.78",
5
+ "@swapkit/helpers": "1.0.0-rc.110"
6
6
  },
7
- "description": "SwapKit Lib core",
7
+ "description": "SwapKit - Core",
8
8
  "devDependencies": {
9
- "@vitest/coverage-istanbul": "0.34.4",
10
- "ethers": "6.7.1",
11
- "vite": "4.4.9",
12
- "vite-plugin-top-level-await": "1.3.1",
13
- "vite-plugin-wasm": "3.2.2",
14
- "vitest": "0.34.4",
15
- "@internal/config": "0.0.0-internal.0",
16
- "@swapkit/api": "1.0.0-rc.6",
17
- "@swapkit/tokens": "1.0.0-rc.6",
18
- "@swapkit/toolbox-cosmos": "1.0.0-rc.13",
19
- "@swapkit/toolbox-evm": "1.0.0-rc.12",
20
- "@swapkit/toolbox-utxo": "1.0.0-rc.12"
9
+ "@swapkit/tokens": "1.0.0-rc.53",
10
+ "@swapkit/toolbox-cosmos": "1.0.0-rc.136",
11
+ "@swapkit/toolbox-evm": "1.0.0-rc.116",
12
+ "@swapkit/toolbox-substrate": "1.0.0-rc.45",
13
+ "@swapkit/toolbox-utxo": "1.0.0-rc.119",
14
+ "bun-types": "1.1.8"
21
15
  },
22
16
  "peerDependencies": {
23
- "@swapkit/api": "1.0.0-rc.6",
24
- "@swapkit/tokens": "1.0.0-rc.6",
25
- "@swapkit/toolbox-cosmos": "1.0.0-rc.13",
26
- "@swapkit/toolbox-evm": "1.0.0-rc.12",
27
- "@swapkit/toolbox-utxo": "1.0.0-rc.12"
28
- },
29
- "eslintConfig": {
30
- "extends": "../../../internal/eslint-config"
31
- },
32
- "exports": {
33
- ".": {
34
- "import": "./dist/index.es.js",
35
- "require": "./dist/index.cjs",
36
- "types": "./dist/index.d.ts"
37
- }
17
+ "@swapkit/api": "1.0.0-rc.78",
18
+ "@swapkit/helpers": "1.0.0-rc.110",
19
+ "@swapkit/tokens": "1.0.0-rc.53",
20
+ "@swapkit/toolbox-cosmos": "1.0.0-rc.136",
21
+ "@swapkit/toolbox-evm": "1.0.0-rc.116",
22
+ "@swapkit/toolbox-substrate": "1.0.0-rc.45",
23
+ "@swapkit/toolbox-utxo": "1.0.0-rc.119"
38
24
  },
39
25
  "files": [
40
26
  "src/",
@@ -42,22 +28,22 @@
42
28
  ],
43
29
  "homepage": "https://github.com/thorswap/SwapKit",
44
30
  "license": "Apache-2.0",
45
- "main": "./dist/index.cjs",
46
- "module": "./dist/index.es.js",
31
+ "main": "./dist/index.js",
47
32
  "name": "@swapkit/core",
48
- "publishConfig": {
49
- "access": "public"
50
- },
51
33
  "react-native": "./src/index.ts",
52
- "repository": "https://github.com/thorswap/SwapKit.git",
53
- "type": "module",
54
- "types": "./dist/index.d.ts",
55
- "version": "1.0.0-rc.16",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/thorswap/SwapKit.git"
37
+ },
56
38
  "scripts": {
57
- "build": "NODE_OPTIONS=--max_old_space_size=16384 vite build",
58
- "clean": "rm -rf dist vite.config.ts.* .turbo node_modules",
59
- "lint": "eslint ./ --ext .ts,.tsx --fix; tsc --noEmit",
60
- "test": "vitest --run",
61
- "test:coverage": "vitest run --coverage"
62
- }
63
- }
39
+ "build": "bun run ./build.ts",
40
+ "clean": "rm -rf .turbo dist node_modules *.tsbuildinfo",
41
+ "lint": "biome check --apply ./src",
42
+ "test": "echo 'bun test'",
43
+ "test:coverage": "echo 'bun test --coverage'",
44
+ "type-check": "tsc --noEmit"
45
+ },
46
+ "type": "module",
47
+ "types": "./src/index.ts",
48
+ "version": "1.0.0-rc.161"
49
+ }
@@ -0,0 +1,53 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import { Chain, ChainToExplorerUrl, CosmosChains, EVMChains, UTXOChains } from "@swapkit/helpers";
3
+ import { getExplorerAddressUrl, getExplorerTxUrl } from "../helpers/explorerUrls.ts";
4
+
5
+ describe("Explorer URLs", () => {
6
+ describe("CosmosChains", () => {
7
+ for (const chain of CosmosChains) {
8
+ test(`getExplorerTxUrl returns correct URL for ${chain}`, () => {
9
+ expect(getExplorerTxUrl({ chain, txHash: "0x123456789" })).toBe(
10
+ `${ChainToExplorerUrl[chain]}/tx/123456789`,
11
+ );
12
+
13
+ expect(getExplorerAddressUrl({ chain, address: "asdfg" })).toBe(
14
+ `${ChainToExplorerUrl[chain]}/address/asdfg`,
15
+ );
16
+ });
17
+ }
18
+ });
19
+
20
+ describe("EVMChains & SubstrateChains", () => {
21
+ for (const chain of [...EVMChains, Chain.Polkadot]) {
22
+ test(`getExplorerTxUrl returns correct URL for ${chain}`, () => {
23
+ expect(getExplorerTxUrl({ chain, txHash: "0x123456789" })).toBe(
24
+ `${ChainToExplorerUrl[chain]}/tx/0x123456789`,
25
+ );
26
+
27
+ expect(getExplorerAddressUrl({ chain, address: "asdfg" })).toBe(
28
+ `${ChainToExplorerUrl[chain]}/address/asdfg`,
29
+ );
30
+ });
31
+ }
32
+
33
+ test("getExplorerTxUrl adds 0x for EVM like chains", () => {
34
+ expect(getExplorerTxUrl({ chain: Chain.Ethereum, txHash: "12345" })).toBe(
35
+ "https://etherscan.io/tx/0x12345",
36
+ );
37
+ });
38
+ });
39
+
40
+ describe("UTXOChains", () => {
41
+ for (const chain of UTXOChains.filter((c) => c !== Chain.Dash)) {
42
+ test(`getExplorerTxUrl returns correct URL for ${chain}`, () => {
43
+ expect(getExplorerTxUrl({ chain, txHash: "0x123456789" })).toBe(
44
+ `${ChainToExplorerUrl[chain]}/transaction/0x123456789`,
45
+ );
46
+
47
+ expect(getExplorerAddressUrl({ chain, address: "asdfg" })).toBe(
48
+ `${ChainToExplorerUrl[chain]}/address/asdfg`,
49
+ );
50
+ });
51
+ }
52
+ });
53
+ });
@@ -1,92 +1,92 @@
1
1
  export const avaxGeneric = [
2
2
  {
3
- inputs: [{ internalType: 'address', name: '_ttp', type: 'address' }],
4
- stateMutability: 'nonpayable',
5
- type: 'constructor',
3
+ inputs: [{ internalType: "address", name: "_ttp", type: "address" }],
4
+ stateMutability: "nonpayable",
5
+ type: "constructor",
6
6
  },
7
7
  {
8
8
  anonymous: false,
9
9
  inputs: [
10
- { indexed: false, internalType: 'uint256', name: 'fee', type: 'uint256' },
11
- { indexed: false, internalType: 'address', name: 'feeRecipient', type: 'address' },
10
+ { indexed: false, internalType: "uint256", name: "fee", type: "uint256" },
11
+ { indexed: false, internalType: "address", name: "feeRecipient", type: "address" },
12
12
  ],
13
- name: 'FeeSet',
14
- type: 'event',
13
+ name: "FeeSet",
14
+ type: "event",
15
15
  },
16
16
  {
17
17
  anonymous: false,
18
18
  inputs: [
19
- { indexed: true, internalType: 'address', name: 'owner', type: 'address' },
20
- { indexed: false, internalType: 'bool', name: 'active', type: 'bool' },
19
+ { indexed: true, internalType: "address", name: "owner", type: "address" },
20
+ { indexed: false, internalType: "bool", name: "active", type: "bool" },
21
21
  ],
22
- name: 'OwnerSet',
23
- type: 'event',
22
+ name: "OwnerSet",
23
+ type: "event",
24
24
  },
25
25
  {
26
26
  inputs: [],
27
- name: 'fee',
28
- outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
29
- stateMutability: 'view',
30
- type: 'function',
27
+ name: "fee",
28
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
29
+ stateMutability: "view",
30
+ type: "function",
31
31
  },
32
32
  {
33
33
  inputs: [],
34
- name: 'feeRecipient',
35
- outputs: [{ internalType: 'address', name: '', type: 'address' }],
36
- stateMutability: 'view',
37
- type: 'function',
34
+ name: "feeRecipient",
35
+ outputs: [{ internalType: "address", name: "", type: "address" }],
36
+ stateMutability: "view",
37
+ type: "function",
38
38
  },
39
39
  {
40
- inputs: [{ internalType: 'address', name: '', type: 'address' }],
41
- name: 'owners',
42
- outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
43
- stateMutability: 'view',
44
- type: 'function',
40
+ inputs: [{ internalType: "address", name: "", type: "address" }],
41
+ name: "owners",
42
+ outputs: [{ internalType: "bool", name: "", type: "bool" }],
43
+ stateMutability: "view",
44
+ type: "function",
45
45
  },
46
46
  {
47
47
  inputs: [
48
- { internalType: 'uint256', name: '_fee', type: 'uint256' },
49
- { internalType: 'address', name: '_feeRecipient', type: 'address' },
48
+ { internalType: "uint256", name: "_fee", type: "uint256" },
49
+ { internalType: "address", name: "_feeRecipient", type: "address" },
50
50
  ],
51
- name: 'setFee',
51
+ name: "setFee",
52
52
  outputs: [],
53
- stateMutability: 'nonpayable',
54
- type: 'function',
53
+ stateMutability: "nonpayable",
54
+ type: "function",
55
55
  },
56
56
  {
57
57
  inputs: [
58
- { internalType: 'address', name: 'owner', type: 'address' },
59
- { internalType: 'bool', name: 'active', type: 'bool' },
58
+ { internalType: "address", name: "owner", type: "address" },
59
+ { internalType: "bool", name: "active", type: "bool" },
60
60
  ],
61
- name: 'setOwner',
61
+ name: "setOwner",
62
62
  outputs: [],
63
- stateMutability: 'nonpayable',
64
- type: 'function',
63
+ stateMutability: "nonpayable",
64
+ type: "function",
65
65
  },
66
66
  {
67
67
  inputs: [
68
- { internalType: 'address', name: 'tcRouter', type: 'address' },
69
- { internalType: 'address', name: 'tcVault', type: 'address' },
70
- { internalType: 'string', name: 'tcMemo', type: 'string' },
71
- { internalType: 'address', name: 'token', type: 'address' },
72
- { internalType: 'uint256', name: 'amount', type: 'uint256' },
73
- { internalType: 'address', name: 'router', type: 'address' },
74
- { internalType: 'bytes', name: 'data', type: 'bytes' },
75
- { internalType: 'uint256', name: 'deadline', type: 'uint256' },
68
+ { internalType: "address", name: "tcRouter", type: "address" },
69
+ { internalType: "address", name: "tcVault", type: "address" },
70
+ { internalType: "string", name: "tcMemo", type: "string" },
71
+ { internalType: "address", name: "token", type: "address" },
72
+ { internalType: "uint256", name: "amount", type: "uint256" },
73
+ { internalType: "address", name: "router", type: "address" },
74
+ { internalType: "bytes", name: "data", type: "bytes" },
75
+ { internalType: "uint256", name: "deadline", type: "uint256" },
76
76
  ],
77
- name: 'swapIn',
77
+ name: "swapIn",
78
78
  outputs: [],
79
- stateMutability: 'nonpayable',
80
- type: 'function',
79
+ stateMutability: "nonpayable",
80
+ type: "function",
81
81
  },
82
82
  {
83
83
  inputs: [],
84
- name: 'tokenTransferProxy',
84
+ name: "tokenTransferProxy",
85
85
  outputs: [
86
- { internalType: 'contract TSAggregatorTokenTransferProxy', name: '', type: 'address' },
86
+ { internalType: "contract TSAggregatorTokenTransferProxy", name: "", type: "address" },
87
87
  ],
88
- stateMutability: 'view',
89
- type: 'function',
88
+ stateMutability: "view",
89
+ type: "function",
90
90
  },
91
- { stateMutability: 'payable', type: 'receive' },
91
+ { stateMutability: "payable", type: "receive" },
92
92
  ];