@swapkit/helpers 1.0.0-rc.11 → 1.0.0-rc.111

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 (42) hide show
  1. package/dist/index.js +2900 -0
  2. package/dist/index.js.map +31 -0
  3. package/package.json +26 -37
  4. package/src/helpers/__tests__/asset.test.ts +186 -103
  5. package/src/helpers/__tests__/memo.test.ts +53 -41
  6. package/src/helpers/__tests__/others.test.ts +44 -37
  7. package/src/helpers/__tests__/validators.test.ts +24 -0
  8. package/src/helpers/asset.ts +184 -95
  9. package/src/helpers/derivationPath.ts +53 -0
  10. package/src/helpers/liquidity.ts +50 -43
  11. package/src/helpers/memo.ts +34 -31
  12. package/src/helpers/others.ts +46 -12
  13. package/src/helpers/validators.ts +15 -6
  14. package/src/helpers/web3wallets.ts +200 -0
  15. package/src/index.ts +14 -9
  16. package/src/modules/__tests__/assetValue.test.ts +486 -129
  17. package/src/modules/__tests__/bigIntArithmetics.test.ts +30 -0
  18. package/src/modules/__tests__/swapKitNumber.test.ts +306 -183
  19. package/src/modules/assetValue.ts +220 -162
  20. package/src/modules/bigIntArithmetics.ts +214 -165
  21. package/src/modules/requestClient.ts +38 -0
  22. package/src/modules/swapKitError.ts +41 -5
  23. package/src/modules/swapKitNumber.ts +1 -1
  24. package/src/types/abis/erc20.ts +99 -0
  25. package/src/types/abis/mayaEvmVaults.ts +331 -0
  26. package/src/types/abis/tcEthVault.ts +496 -0
  27. package/src/types/chains.ts +226 -0
  28. package/src/types/commonTypes.ts +123 -0
  29. package/src/types/derivationPath.ts +58 -0
  30. package/src/types/errors/apiV1.ts +0 -0
  31. package/src/types/index.ts +12 -0
  32. package/src/types/network.ts +45 -0
  33. package/src/types/quotes.ts +391 -0
  34. package/src/types/radix.ts +14 -0
  35. package/src/types/sdk.ts +126 -0
  36. package/src/types/tokens.ts +30 -0
  37. package/src/types/wallet.ts +72 -0
  38. package/LICENSE +0 -201
  39. package/dist/index.cjs +0 -1
  40. package/dist/index.d.ts +0 -356
  41. package/dist/index.es.js +0 -1071
  42. package/src/helpers/request.ts +0 -16
@@ -0,0 +1,226 @@
1
+ import { ExplorerUrl, RPCUrl } from "./network";
2
+
3
+ export enum Chain {
4
+ Arbitrum = "ARB",
5
+ Avalanche = "AVAX",
6
+ Binance = "BNB",
7
+ BinanceSmartChain = "BSC",
8
+ Bitcoin = "BTC",
9
+ BitcoinCash = "BCH",
10
+ Cosmos = "GAIA",
11
+ Dash = "DASH",
12
+ Dogecoin = "DOGE",
13
+ Ethereum = "ETH",
14
+ Kujira = "KUJI",
15
+ Litecoin = "LTC",
16
+ Maya = "MAYA",
17
+ Optimism = "OP",
18
+ Polkadot = "DOT",
19
+ Chainflip = "FLIP",
20
+ Polygon = "MATIC",
21
+ Radix = "XRD",
22
+ THORChain = "THOR",
23
+ }
24
+
25
+ export type WalletChain = Exclude<Chain, Chain.Chainflip | Chain.Radix>;
26
+
27
+ export enum ChainId {
28
+ Arbitrum = "42161",
29
+ ArbitrumHex = "0xa4b1",
30
+ Avalanche = "43114",
31
+ AvalancheHex = "0xa86a",
32
+ Binance = "Binance-Chain-Tigris",
33
+ BinanceSmartChain = "56",
34
+ BinanceSmartChainHex = "0x38",
35
+ Bitcoin = "bitcoin",
36
+ BitcoinCash = "bitcoincash",
37
+ Chainflip = "chainflip",
38
+ Cosmos = "cosmoshub-4",
39
+ Dash = "dash",
40
+ Dogecoin = "dogecoin",
41
+ Kujira = "kaiyo-1",
42
+ Ethereum = "1",
43
+ EthereumHex = "0x1",
44
+ Litecoin = "litecoin",
45
+ Maya = "mayachain-mainnet-v1",
46
+ MayaStagenet = "mayachain-stagenet-v1",
47
+ Optimism = "10",
48
+ OptimismHex = "0xa",
49
+ Polkadot = "polkadot",
50
+ Polygon = "137",
51
+ PolygonHex = "0x89",
52
+ Radix = "radix-mainnet",
53
+ THORChain = "thorchain-mainnet-v1",
54
+ THORChainStagenet = "thorchain-stagenet-v2",
55
+ }
56
+
57
+ export const ChainIdToChain: Record<ChainId, Chain> = {
58
+ [ChainId.ArbitrumHex]: Chain.Arbitrum,
59
+ [ChainId.Arbitrum]: Chain.Arbitrum,
60
+ [ChainId.AvalancheHex]: Chain.Avalanche,
61
+ [ChainId.Avalanche]: Chain.Avalanche,
62
+ [ChainId.BinanceSmartChainHex]: Chain.BinanceSmartChain,
63
+ [ChainId.BinanceSmartChain]: Chain.BinanceSmartChain,
64
+ [ChainId.Binance]: Chain.Binance,
65
+ [ChainId.BitcoinCash]: Chain.BitcoinCash,
66
+ [ChainId.Bitcoin]: Chain.Bitcoin,
67
+ [ChainId.Chainflip]: Chain.Chainflip,
68
+ [ChainId.Cosmos]: Chain.Cosmos,
69
+ [ChainId.Dash]: Chain.Dash,
70
+ [ChainId.Dogecoin]: Chain.Dogecoin,
71
+ [ChainId.EthereumHex]: Chain.Ethereum,
72
+ [ChainId.Kujira]: Chain.Kujira,
73
+ [ChainId.Ethereum]: Chain.Ethereum,
74
+ [ChainId.Litecoin]: Chain.Litecoin,
75
+ [ChainId.MayaStagenet]: Chain.Maya,
76
+ [ChainId.Maya]: Chain.Maya,
77
+ [ChainId.OptimismHex]: Chain.Optimism,
78
+ [ChainId.Optimism]: Chain.Optimism,
79
+ [ChainId.Polkadot]: Chain.Polkadot,
80
+ [ChainId.PolygonHex]: Chain.Polygon,
81
+ [ChainId.Polygon]: Chain.Polygon,
82
+ [ChainId.Radix]: Chain.Radix,
83
+ [ChainId.THORChainStagenet]: Chain.THORChain,
84
+ [ChainId.THORChain]: Chain.THORChain,
85
+ };
86
+
87
+ type ChainNameType = keyof typeof Chain;
88
+ const chainNames = Object.keys(Chain) as ChainNameType[];
89
+ const chains = Object.values(Chain) as Chain[];
90
+
91
+ export enum BaseDecimal {
92
+ ARB = 18,
93
+ AVAX = 18,
94
+ BCH = 8,
95
+ BNB = 8,
96
+ BSC = 18,
97
+ BTC = 8,
98
+ DASH = 8,
99
+ DOGE = 8,
100
+ DOT = 10,
101
+ ETH = 18,
102
+ FLIP = 18,
103
+ GAIA = 6,
104
+ KUJI = 6,
105
+ LTC = 8,
106
+ MATIC = 18,
107
+ MAYA = 10,
108
+ OP = 18,
109
+ THOR = 8,
110
+ ZEC = 8,
111
+ XRD = 18,
112
+ }
113
+
114
+ export type SubstrateChain = Chain.Polkadot | Chain.Chainflip;
115
+ export const SubstrateChains = [Chain.Polkadot, Chain.Chainflip];
116
+
117
+ export type EVMChain =
118
+ | Chain.Ethereum
119
+ | Chain.Avalanche
120
+ | Chain.BinanceSmartChain
121
+ | Chain.Arbitrum
122
+ | Chain.Optimism
123
+ | Chain.Polygon;
124
+ export const EVMChains = [
125
+ Chain.Ethereum,
126
+ Chain.Avalanche,
127
+ Chain.BinanceSmartChain,
128
+ Chain.Arbitrum,
129
+ Chain.Optimism,
130
+ Chain.Polygon,
131
+ ] as const;
132
+
133
+ export type UTXOChain =
134
+ | Chain.Bitcoin
135
+ | Chain.BitcoinCash
136
+ | Chain.Dash
137
+ | Chain.Dogecoin
138
+ | Chain.Litecoin;
139
+ export const UTXOChains = [
140
+ Chain.Bitcoin,
141
+ Chain.BitcoinCash,
142
+ Chain.Dash,
143
+ Chain.Dogecoin,
144
+ Chain.Litecoin,
145
+ ] as const;
146
+
147
+ export type CosmosChain =
148
+ | Chain.Cosmos
149
+ | Chain.THORChain
150
+ | Chain.Binance
151
+ | Chain.Maya
152
+ | Chain.Kujira;
153
+ export const CosmosChains = [
154
+ Chain.Cosmos,
155
+ Chain.THORChain,
156
+ Chain.Binance,
157
+ Chain.Maya,
158
+ Chain.Kujira,
159
+ ] as const;
160
+
161
+ export const TCSupportedChains = [
162
+ Chain.Avalanche,
163
+ Chain.Binance,
164
+ Chain.BinanceSmartChain,
165
+ Chain.Bitcoin,
166
+ Chain.BitcoinCash,
167
+ Chain.Cosmos,
168
+ Chain.Dogecoin,
169
+ Chain.Ethereum,
170
+ Chain.Litecoin,
171
+ Chain.THORChain,
172
+ ] as const;
173
+
174
+ export const MAYASupportedChains = [
175
+ Chain.Arbitrum,
176
+ Chain.Dash,
177
+ Chain.Ethereum,
178
+ Chain.Kujira,
179
+ Chain.Maya,
180
+ Chain.THORChain,
181
+ ] as const;
182
+
183
+ const ChainToChainName = chains.reduce(
184
+ (acc, chain) => {
185
+ const chainName = chainNames.find((key) => Chain[key as ChainNameType] === chain);
186
+
187
+ if (chainName) acc[chain] = chainName;
188
+
189
+ return acc;
190
+ },
191
+ {} as { [key in Chain]: ChainNameType },
192
+ );
193
+
194
+ export const ChainToChainId = chains.reduce(
195
+ (acc, chain) => {
196
+ acc[chain] = ChainId[ChainToChainName[chain]];
197
+ return acc;
198
+ },
199
+ {} as { [key in Chain]: ChainId },
200
+ );
201
+
202
+ export const ChainToRPC = chains.reduce(
203
+ (acc, chain) => {
204
+ acc[chain] = RPCUrl[ChainToChainName[chain]];
205
+ return acc;
206
+ },
207
+ {} as { [key in Chain]: RPCUrl },
208
+ );
209
+
210
+ export const ChainToHexChainId = chains.reduce(
211
+ (acc, chain) => {
212
+ const chainString = `${ChainToChainName[chain]}Hex` as keyof typeof ChainId;
213
+
214
+ acc[chain] = ChainId[chainString];
215
+ return acc;
216
+ },
217
+ {} as { [key in Chain]: ChainId },
218
+ );
219
+
220
+ export const ChainToExplorerUrl = chains.reduce(
221
+ (acc, chain) => {
222
+ acc[chain] = ExplorerUrl[ChainToChainName[chain]];
223
+ return acc;
224
+ },
225
+ {} as { [key in Chain]: string },
226
+ );
@@ -0,0 +1,123 @@
1
+ import type { AssetValue } from "../modules/assetValue.ts";
2
+ import type { Chain, CosmosChain, EVMChain, UTXOChain } from "./chains.ts";
3
+ import type { WalletOption } from "./wallet.ts";
4
+
5
+ export type ConnectConfig = {
6
+ stagenet?: boolean;
7
+ /**
8
+ * @required
9
+ */
10
+ thorswapApiKey?: string;
11
+ /**
12
+ * @required for AVAX & BSC
13
+ */
14
+ covalentApiKey?: string;
15
+ /**
16
+ * @required for ETH
17
+ */
18
+ ethplorerApiKey?: string;
19
+ /**
20
+ * @required for BTC, BCH, LTC, DOGE
21
+ */
22
+ blockchairApiKey?: string;
23
+ /**
24
+ * @required for Walletconnect
25
+ */
26
+ walletConnectProjectId?: string;
27
+ /**
28
+ * @optional for Trezor config
29
+ */
30
+ trezorManifest?: {
31
+ email: string;
32
+ appUrl: string;
33
+ };
34
+ /**
35
+ * @optional for KeepKey config
36
+ */
37
+ keepkeyConfig?: {
38
+ apiKey: string;
39
+ pairingInfo: {
40
+ name: string;
41
+ imageUrl: string;
42
+ basePath: string;
43
+ url: string;
44
+ };
45
+ };
46
+ /**
47
+ * @optional for setting the chainflip broker url
48
+ */
49
+ chainflipBrokerUrl?: string;
50
+ };
51
+
52
+ export type AddChainWalletParams<T extends Chain> = {
53
+ address: string;
54
+ balance: AssetValue[];
55
+ walletType: WalletOption;
56
+ chain: T;
57
+ [key: string]: Todo;
58
+ };
59
+
60
+ type ApisType = { [key in UTXOChain]?: string | Todo } & {
61
+ [key in EVMChain]?: string | Todo;
62
+ } & {
63
+ [key in CosmosChain]?: string;
64
+ };
65
+
66
+ export type ConnectWalletParams = {
67
+ addChain: <T extends Chain>(params: AddChainWalletParams<T>) => void;
68
+ apis: ApisType;
69
+ config: ConnectConfig;
70
+ rpcUrls: { [chain in Chain]?: string };
71
+ };
72
+
73
+ export type Witness = {
74
+ value: number;
75
+ script: Buffer;
76
+ };
77
+
78
+ export enum QuoteMode {
79
+ TC_SUPPORTED_TO_TC_SUPPORTED = "TC-TC",
80
+ TC_SUPPORTED_TO_ETH = "TC-ERC20",
81
+ TC_SUPPORTED_TO_AVAX = "TC-ARC20",
82
+ TC_SUPPORTED_TO_BSC = "TC-BEP20",
83
+ ETH_TO_TC_SUPPORTED = "ERC20-TC",
84
+ ETH_TO_ETH = "ERC20-ERC20",
85
+ ETH_TO_AVAX = "ERC20-ARC20",
86
+ ETH_TO_BSC = "ERC20-BEP20",
87
+ AVAX_TO_TC_SUPPORTED = "ARC20-TC",
88
+ AVAX_TO_ETH = "ARC20-ERC20",
89
+ AVAX_TO_AVAX = "ARC20-ARC20",
90
+ AVAX_TO_BSC = "ARC20-BEP20",
91
+ BSC_TO_TC_SUPPORTED = "BEP20-TC",
92
+ BSC_TO_ETH = "BEP20-ERC20",
93
+ BSC_TO_AVAX = "BEP20-ARC20",
94
+ BSC_TO_BSC = "BEP20-BEP20",
95
+ }
96
+
97
+ export type Asset = {
98
+ chain: Chain;
99
+ symbol: string;
100
+ ticker: string;
101
+ synth?: boolean;
102
+ };
103
+
104
+ export const AGG_SWAP = [QuoteMode.ETH_TO_ETH, QuoteMode.AVAX_TO_AVAX, QuoteMode.BSC_TO_BSC];
105
+
106
+ export const SWAP_IN = [
107
+ QuoteMode.ETH_TO_TC_SUPPORTED,
108
+ QuoteMode.ETH_TO_AVAX,
109
+ QuoteMode.ETH_TO_BSC,
110
+ QuoteMode.AVAX_TO_TC_SUPPORTED,
111
+ QuoteMode.AVAX_TO_ETH,
112
+ QuoteMode.AVAX_TO_BSC,
113
+ QuoteMode.BSC_TO_TC_SUPPORTED,
114
+ QuoteMode.BSC_TO_ETH,
115
+ QuoteMode.BSC_TO_AVAX,
116
+ ];
117
+
118
+ export const SWAP_OUT = [
119
+ QuoteMode.TC_SUPPORTED_TO_TC_SUPPORTED,
120
+ QuoteMode.TC_SUPPORTED_TO_ETH,
121
+ QuoteMode.TC_SUPPORTED_TO_AVAX,
122
+ QuoteMode.TC_SUPPORTED_TO_BSC,
123
+ ];
@@ -0,0 +1,58 @@
1
+ import type { Chain } from "./chains";
2
+
3
+ export enum ContractAddress {
4
+ ARB = "0x0000000000000000000000000000000000000000",
5
+ AVAX = "0x0000000000000000000000000000000000000000",
6
+ ETH = "0x0000000000000000000000000000000000000000",
7
+ BSC = "0x0000000000000000000000000000000000000000",
8
+ MATIC = "0x0000000000000000000000000000000000001010",
9
+ OP = "0x4200000000000000000000000000000000000042",
10
+ }
11
+
12
+ export enum DerivationPath {
13
+ ARB = "m/44'/60'/0'/0",
14
+ AVAX = "m/44'/60'/0'/0",
15
+ BCH = "m/44'/145'/0'/0",
16
+ BNB = "m/44'/714'/0'/0",
17
+ BSC = "m/44'/60'/0'/0",
18
+ BTC = "m/84'/0'/0'/0",
19
+ DASH = "m/44'/5'/0'/0",
20
+ DOGE = "m/44'/3'/0'/0",
21
+ DOT = "////",
22
+ ETH = "m/44'/60'/0'/0",
23
+ FLIP = "////",
24
+ GAIA = "m/44'/118'/0'/0",
25
+ KUJI = "m/44'/118'/0'/0",
26
+ LTC = "m/84'/2'/0'/0",
27
+ MATIC = "m/44'/60'/0'/0",
28
+ MAYA = "m/44'/931'/0'/0",
29
+ OP = "m/44'/60'/0'/0",
30
+ XRD = "////",
31
+ THOR = "m/44'/931'/0'/0",
32
+ }
33
+
34
+ export type DerivationPathArray = [number, number, number, number, number?];
35
+
36
+ export const NetworkDerivationPath: Record<Chain, DerivationPathArray> = {
37
+ ARB: [44, 60, 0, 0, 0],
38
+ AVAX: [44, 60, 0, 0, 0],
39
+ BCH: [44, 145, 0, 0, 0],
40
+ BNB: [44, 714, 0, 0, 0],
41
+ BSC: [44, 60, 0, 0, 0],
42
+ BTC: [84, 0, 0, 0, 0],
43
+ DASH: [44, 5, 0, 0, 0],
44
+ DOGE: [44, 3, 0, 0, 0],
45
+ ETH: [44, 60, 0, 0, 0],
46
+ GAIA: [44, 118, 0, 0, 0],
47
+ KUJI: [44, 118, 0, 0, 0],
48
+ LTC: [84, 2, 0, 0, 0],
49
+ MATIC: [44, 60, 0, 0, 0],
50
+ MAYA: [44, 931, 0, 0, 0],
51
+ OP: [44, 60, 0, 0, 0],
52
+ THOR: [44, 931, 0, 0, 0],
53
+
54
+ // Polkadot and related network derivation path is not number based
55
+ XRD: [0, 0, 0, 0, 0],
56
+ DOT: [0, 0, 0, 0, 0],
57
+ FLIP: [0, 0, 0, 0, 0],
58
+ };
File without changes
@@ -0,0 +1,12 @@
1
+ export * from "./abis/erc20";
2
+ export * from "./abis/mayaEvmVaults";
3
+ export * from "./abis/tcEthVault";
4
+ export * from "./chains";
5
+ export * from "./commonTypes";
6
+ export * from "./derivationPath";
7
+ export * from "./network";
8
+ export * from "./tokens";
9
+ export * from "./wallet";
10
+ export * from "./sdk";
11
+ export * from "./quotes";
12
+ export * from "./radix";
@@ -0,0 +1,45 @@
1
+ export enum RPCUrl {
2
+ Arbitrum = "https://arb1.arbitrum.io/rpc",
3
+ Avalanche = "https://node-router.thorswap.net/avalanche-c",
4
+ Binance = "",
5
+ BinanceSmartChain = "https://bsc-dataseed.binance.org",
6
+ Bitcoin = "https://node-router.thorswap.net/bitcoin",
7
+ BitcoinCash = "https://node-router.thorswap.net/bitcoin-cash",
8
+ Chainflip = "wss://mainnet-archive.chainflip.io",
9
+ Cosmos = "https://node-router.thorswap.net/cosmos/rpc",
10
+ Dash = "https://node-router.thorswap.net/dash",
11
+ Dogecoin = "https://node-router.thorswap.net/dogecoin",
12
+ Ethereum = "https://node-router.thorswap.net/ethereum",
13
+ Kujira = "https://rpc-kujira.synergynodes.com/",
14
+ Litecoin = "https://node-router.thorswap.net/litecoin",
15
+ Maya = "https://tendermint.mayachain.info",
16
+ MayaStagenet = "https://stagenet.tendermint.mayachain.info",
17
+ Optimism = "https://mainnet.optimism.io",
18
+ Polkadot = "wss://rpc.polkadot.io",
19
+ Polygon = "https://polygon-rpc.com",
20
+ Radix = "https://radix-mainnet.rpc.grove.city/v1/326002fc/core",
21
+ THORChain = "https://rpc.thorswap.net",
22
+ THORChainStagenet = "https://stagenet-rpc.ninerealms.com",
23
+ }
24
+
25
+ export enum ExplorerUrl {
26
+ Arbitrum = "https://arbiscan.io",
27
+ Avalanche = "https://snowtrace.io",
28
+ Binance = "https://explorer.binance.org",
29
+ BinanceSmartChain = "https://bscscan.com",
30
+ Bitcoin = "https://blockchair.com/bitcoin",
31
+ BitcoinCash = "https://www.blockchair.com/bitcoin-cash",
32
+ Chainflip = "https://explorer.polkascan.io/polkadot",
33
+ Cosmos = "https://www.mintscan.io/cosmos",
34
+ Dash = "https://blockchair.com/dash",
35
+ Dogecoin = "https://blockchair.com/dogecoin",
36
+ Ethereum = "https://etherscan.io",
37
+ Kujira = "https://finder.kujira.network/kaiyo-1",
38
+ Litecoin = "https://blockchair.com/litecoin",
39
+ Maya = "https://www.mayascan.org",
40
+ Optimism = "https://optimistic.etherscan.io",
41
+ Polkadot = "https://polkadot.subscan.io/",
42
+ Polygon = "https://polygonscan.com",
43
+ Radix = "https://dashboard.radixdlt.com",
44
+ THORChain = "https://runescan.io",
45
+ }