@enkryptcom/swap 0.0.3 → 0.0.4

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.mjs DELETED
@@ -1,1337 +0,0 @@
1
- // src/index.ts
2
- import fetch4 from "node-fetch";
3
- import { merge } from "lodash";
4
- import EventEmitter from "eventemitter3";
5
-
6
- // src/configs.ts
7
- import { NetworkNames as NetworkNames2 } from "@enkryptcom/types";
8
- import { numberToHex } from "web3-utils";
9
-
10
- // src/types/index.ts
11
- import { NetworkNames } from "@enkryptcom/types";
12
- var SupportedNetworkName = ((SupportedNetworkName3) => {
13
- SupportedNetworkName3[SupportedNetworkName3["Ethereum"] = NetworkNames.Ethereum] = "Ethereum";
14
- SupportedNetworkName3[SupportedNetworkName3["Binance"] = NetworkNames.Binance] = "Binance";
15
- SupportedNetworkName3[SupportedNetworkName3["Matic"] = NetworkNames.Matic] = "Matic";
16
- SupportedNetworkName3[SupportedNetworkName3["Optimism"] = NetworkNames.Optimism] = "Optimism";
17
- SupportedNetworkName3[SupportedNetworkName3["Polkadot"] = NetworkNames.Polkadot] = "Polkadot";
18
- SupportedNetworkName3[SupportedNetworkName3["Kusama"] = NetworkNames.Kusama] = "Kusama";
19
- SupportedNetworkName3[SupportedNetworkName3["Bitcoin"] = NetworkNames.Bitcoin] = "Bitcoin";
20
- SupportedNetworkName3[SupportedNetworkName3["EthereumClassic"] = NetworkNames.EthereumClassic] = "EthereumClassic";
21
- SupportedNetworkName3[SupportedNetworkName3["Moonbeam"] = NetworkNames.Moonbeam] = "Moonbeam";
22
- SupportedNetworkName3[SupportedNetworkName3["Arbitrum"] = NetworkNames.Arbitrum] = "Arbitrum";
23
- SupportedNetworkName3[SupportedNetworkName3["Gnosis"] = NetworkNames.Gnosis] = "Gnosis";
24
- SupportedNetworkName3[SupportedNetworkName3["Avalanche"] = NetworkNames.Avalanche] = "Avalanche";
25
- SupportedNetworkName3[SupportedNetworkName3["Fantom"] = NetworkNames.Fantom] = "Fantom";
26
- SupportedNetworkName3[SupportedNetworkName3["Klaytn"] = NetworkNames.Klaytn] = "Klaytn";
27
- SupportedNetworkName3[SupportedNetworkName3["Aurora"] = NetworkNames.Aurora] = "Aurora";
28
- return SupportedNetworkName3;
29
- })(SupportedNetworkName || {});
30
- var NetworkType = /* @__PURE__ */ ((NetworkType2) => {
31
- NetworkType2["EVM"] = "evm";
32
- NetworkType2["Substrate"] = "substrate";
33
- NetworkType2["Bitcoin"] = "bitcoin";
34
- return NetworkType2;
35
- })(NetworkType || {});
36
- var WalletIdentifier = /* @__PURE__ */ ((WalletIdentifier2) => {
37
- WalletIdentifier2["enkrypt"] = "enkrypt";
38
- WalletIdentifier2["mew"] = "mew";
39
- return WalletIdentifier2;
40
- })(WalletIdentifier || {});
41
- var TransactionStatus = /* @__PURE__ */ ((TransactionStatus2) => {
42
- TransactionStatus2["pending"] = "pending";
43
- TransactionStatus2["failed"] = "failed";
44
- TransactionStatus2["success"] = "success";
45
- return TransactionStatus2;
46
- })(TransactionStatus || {});
47
- var TransactionType = /* @__PURE__ */ ((TransactionType2) => {
48
- TransactionType2["evm"] = "evm";
49
- TransactionType2["generic"] = "generic";
50
- return TransactionType2;
51
- })(TransactionType || {});
52
- var ProviderClass = class {
53
- constructor(_web3eth, network) {
54
- this.network = network;
55
- }
56
- };
57
-
58
- // src/configs.ts
59
- var FEE_CONFIGS = {
60
- ["oneInch" /* oneInch */]: {
61
- ["enkrypt" /* enkrypt */]: {
62
- referrer: "0x551d9d8eb02e1c713009da8f7c194870d651054a",
63
- fee: 875e-5
64
- },
65
- ["mew" /* mew */]: {
66
- referrer: "0x87A265C93D2A92C6EEEC002283bEaEbb4564Fd20",
67
- fee: 0.025
68
- }
69
- },
70
- ["paraswap" /* paraswap */]: {
71
- ["enkrypt" /* enkrypt */]: {
72
- referrer: "0x9d24aceac6fbfb3f7ff4c751217d41afc12f43b6",
73
- fee: 875e-5
74
- },
75
- ["mew" /* mew */]: {
76
- referrer: "0xb80a5ea0ec9732cc1875d088495df8c8782dd6b7",
77
- fee: 0.025
78
- }
79
- },
80
- ["zerox" /* zerox */]: {
81
- ["enkrypt" /* enkrypt */]: {
82
- referrer: "0x485a5ec817711874e49bc01d6c63a7ca9db33653",
83
- fee: 875e-5
84
- },
85
- ["mew" /* mew */]: {
86
- referrer: "0xD6135f846dbC86d34E69F138b86E87d3eF2A56D0",
87
- fee: 0.025
88
- }
89
- }
90
- };
91
- var TOKEN_LISTS = {
92
- [NetworkNames2.Ethereum]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Ethereum}.json`,
93
- [NetworkNames2.Binance]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Binance}.json`,
94
- [NetworkNames2.Matic]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Matic}.json`,
95
- [NetworkNames2.Optimism]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Optimism}.json`,
96
- [NetworkNames2.Arbitrum]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Arbitrum}.json`,
97
- [NetworkNames2.Aurora]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Aurora}.json`,
98
- [NetworkNames2.Avalanche]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Avalanche}.json`,
99
- [NetworkNames2.EthereumClassic]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.EthereumClassic}.json`,
100
- [NetworkNames2.Fantom]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Fantom}.json`,
101
- [NetworkNames2.Moonbeam]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Moonbeam}.json`,
102
- [NetworkNames2.Gnosis]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Gnosis}.json`,
103
- [NetworkNames2.Klaytn]: `https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/${SupportedNetworkName.Klaytn}.json`
104
- };
105
- var CHANGELLY_LIST = "https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/changelly.json";
106
- var TOP_TOKEN_INFO_LIST = "https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/swaplists/top-tokens.json";
107
- var GAS_LIMITS = {
108
- approval: numberToHex(3e5),
109
- transferToken: numberToHex(3e5),
110
- swap: numberToHex(1e6)
111
- };
112
- var NATIVE_TOKEN_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
113
- var DEFAULT_SLIPPAGE = "0.5";
114
-
115
- // src/providers/oneInch/index.ts
116
- import { numberToHex as numberToHex3, toBN as toBN3 } from "web3-utils";
117
-
118
- // src/utils/approvals.ts
119
- import Web3Eth from "web3-eth";
120
- import { toBN } from "web3-utils";
121
-
122
- // src/utils/abi/erc20.ts
123
- var erc20_default = [
124
- {
125
- constant: false,
126
- inputs: [
127
- {
128
- name: "_spender",
129
- type: "address"
130
- },
131
- {
132
- name: "_value",
133
- type: "uint256"
134
- }
135
- ],
136
- name: "approve",
137
- outputs: [
138
- {
139
- name: "",
140
- type: "bool"
141
- }
142
- ],
143
- payable: false,
144
- stateMutability: "nonpayable",
145
- type: "function"
146
- },
147
- {
148
- constant: true,
149
- inputs: [
150
- {
151
- name: "_owner",
152
- type: "address"
153
- }
154
- ],
155
- name: "balanceOf",
156
- outputs: [
157
- {
158
- name: "balance",
159
- type: "uint256"
160
- }
161
- ],
162
- payable: false,
163
- stateMutability: "view",
164
- type: "function"
165
- },
166
- {
167
- constant: false,
168
- inputs: [
169
- {
170
- name: "_to",
171
- type: "address"
172
- },
173
- {
174
- name: "_value",
175
- type: "uint256"
176
- }
177
- ],
178
- name: "transfer",
179
- outputs: [
180
- {
181
- name: "",
182
- type: "bool"
183
- }
184
- ],
185
- payable: false,
186
- stateMutability: "nonpayable",
187
- type: "function"
188
- },
189
- {
190
- constant: true,
191
- inputs: [
192
- {
193
- name: "_owner",
194
- type: "address"
195
- },
196
- {
197
- name: "_spender",
198
- type: "address"
199
- }
200
- ],
201
- name: "allowance",
202
- outputs: [
203
- {
204
- name: "",
205
- type: "uint256"
206
- }
207
- ],
208
- payable: false,
209
- stateMutability: "view",
210
- type: "function"
211
- }
212
- ];
213
-
214
- // src/utils/approvals.ts
215
- var TOKEN_AMOUNT_INFINITY_AND_BEYOND = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
216
- var getAllowance = (options) => {
217
- const contract = new options.web3eth.Contract(
218
- erc20_default,
219
- options.contract
220
- );
221
- return contract.methods.allowance(options.owner, options.spender).call();
222
- };
223
- var getTransfer = (options) => {
224
- const web3Eth = new Web3Eth();
225
- const contract = new web3Eth.Contract(erc20_default);
226
- return {
227
- from: options.from,
228
- data: contract.methods.transfer(options.to, options.value).encodeABI(),
229
- gasLimit: GAS_LIMITS.transferToken,
230
- to: options.contract,
231
- value: "0x0",
232
- type: "evm" /* evm */
233
- };
234
- };
235
- var getApproval = (options) => {
236
- const web3Eth = new Web3Eth();
237
- const contract = new web3Eth.Contract(erc20_default);
238
- return {
239
- from: options.from,
240
- data: contract.methods.approve(options.spender, options.value).encodeABI(),
241
- gasLimit: GAS_LIMITS.approval,
242
- to: options.contract,
243
- value: "0x0",
244
- type: "evm" /* evm */
245
- };
246
- };
247
- var getAllowanceTransactions = async (options) => {
248
- const transactions = [];
249
- const approvedAmount = toBN(
250
- await getAllowance({
251
- contract: options.fromToken.address,
252
- owner: options.fromAddress,
253
- spender: options.spender,
254
- web3eth: options.web3eth
255
- })
256
- );
257
- if (approvedAmount.lt(options.amount)) {
258
- if (approvedAmount.eqn(0)) {
259
- transactions.push(
260
- getApproval({
261
- from: options.fromAddress,
262
- spender: options.spender,
263
- value: options.infinityApproval ? TOKEN_AMOUNT_INFINITY_AND_BEYOND : options.amount.toString(),
264
- contract: options.fromToken.address
265
- })
266
- );
267
- } else {
268
- transactions.push(
269
- getApproval({
270
- from: options.fromAddress,
271
- spender: options.spender,
272
- value: "0",
273
- contract: options.fromToken.address
274
- })
275
- );
276
- transactions.push(
277
- getApproval({
278
- from: options.fromAddress,
279
- spender: options.spender,
280
- value: options.infinityApproval ? TOKEN_AMOUNT_INFINITY_AND_BEYOND : options.amount.toString(),
281
- contract: options.fromToken.address
282
- })
283
- );
284
- }
285
- }
286
- return transactions;
287
- };
288
-
289
- // src/common/estimateGasList.ts
290
- import fetch2 from "node-fetch";
291
- import { numberToHex as numberToHex2, toBN as toBN2 } from "web3-utils";
292
- var supportedNetworks = {
293
- [SupportedNetworkName.Ethereum]: {
294
- url: "https://estimategas.mewapi.io/eth"
295
- },
296
- [SupportedNetworkName.Binance]: {
297
- url: "https://estimategas.mewapi.io/bsc"
298
- },
299
- [SupportedNetworkName.Matic]: {
300
- url: "https://estimategas.mewapi.io/matic"
301
- },
302
- [SupportedNetworkName.Arbitrum]: {
303
- url: "https://nodes.mewapi.io/rpc/arb"
304
- }
305
- };
306
- var useStandardEstimate = (transactions, network) => fetch2(supportedNetworks[network].url, {
307
- method: "POST",
308
- body: JSON.stringify({
309
- jsonrpc: "2.0",
310
- id: 0,
311
- method: "eth_estimateGas",
312
- params: [transactions[0]]
313
- }),
314
- headers: {
315
- "Content-Type": "application/json"
316
- }
317
- }).then((res) => {
318
- if (res.ok)
319
- return res.json();
320
- throw new Error("Something went wrong");
321
- }).then((json) => {
322
- if (json.error)
323
- return {
324
- isError: true,
325
- errorMessage: json.error.message
326
- };
327
- const isApproval = transactions[0].data.startsWith("0x095ea7b3");
328
- const genericTx0Gas = isApproval ? toBN2(GAS_LIMITS.approval) : toBN2(GAS_LIMITS.swap);
329
- const tx0gas = toBN2(json.result);
330
- if (genericTx0Gas.gt(tx0gas)) {
331
- if (isApproval) {
332
- return {
333
- result: transactions.length === 2 ? [json.result, GAS_LIMITS.swap] : [json.result, GAS_LIMITS.approval, GAS_LIMITS.swap]
334
- };
335
- }
336
- return {
337
- result: [json.result]
338
- };
339
- }
340
- const multiplier = tx0gas.div(genericTx0Gas);
341
- if (isApproval) {
342
- return {
343
- result: transactions.length === 2 ? [
344
- json.result,
345
- numberToHex2(toBN2(GAS_LIMITS.swap).mul(multiplier.addn(3)))
346
- ] : [
347
- json.result,
348
- numberToHex2(toBN2(GAS_LIMITS.approval).mul(multiplier)),
349
- numberToHex2(toBN2(GAS_LIMITS.swap).mul(multiplier.addn(3)))
350
- ]
351
- };
352
- }
353
- return {
354
- result: [json.result]
355
- };
356
- }).catch(() => null);
357
- var estimateGasList = (transactions, network) => {
358
- if (!Object.keys(supportedNetworks).includes(network))
359
- return null;
360
- if (network === SupportedNetworkName.Arbitrum)
361
- return useStandardEstimate(transactions, network);
362
- const strippedTxs = transactions.map((tx) => {
363
- const { from, to, data, value } = tx;
364
- return {
365
- from,
366
- to,
367
- data,
368
- value
369
- };
370
- });
371
- return fetch2(supportedNetworks[network].url, {
372
- method: "POST",
373
- body: JSON.stringify({
374
- jsonrpc: "2.0",
375
- id: 0,
376
- method: "eth_estimateGasList",
377
- params: [strippedTxs]
378
- }),
379
- headers: {
380
- "Content-Type": "application/json"
381
- }
382
- }).then((res) => {
383
- if (res.ok)
384
- return res.json();
385
- throw new Error("Something went wrong");
386
- }).then((json) => {
387
- if (json.error)
388
- return {
389
- isError: true,
390
- errorMessage: json.error.message
391
- };
392
- return {
393
- result: json.result
394
- };
395
- }).catch(() => null);
396
- };
397
- var estimateGasList_default = estimateGasList;
398
-
399
- // src/utils/common.ts
400
- import { polkadotEncodeAddress } from "@enkryptcom/utils";
401
- import { isAddress } from "web3-utils";
402
- var isPolkadotAddress = (address, prefix) => {
403
- try {
404
- return polkadotEncodeAddress(address, prefix) === address;
405
- } catch {
406
- return false;
407
- }
408
- };
409
- var isEVMAddress = (address) => {
410
- try {
411
- return isAddress(address);
412
- } catch {
413
- return false;
414
- }
415
- };
416
- var sortByRank = (x, y) => {
417
- if (!x.rank)
418
- x.rank = 1e7;
419
- if (!y.rank)
420
- y.rank = 1e7;
421
- return x.rank - y.rank;
422
- };
423
- var sortNativeToFront = (x, y) => (
424
- // eslint-disable-next-line no-nested-ternary
425
- x.address === NATIVE_TOKEN_ADDRESS ? -1 : y.address === NATIVE_TOKEN_ADDRESS ? 1 : 0
426
- );
427
-
428
- // src/providers/oneInch/index.ts
429
- var ONEINCH_APPROVAL_ADDRESS = "0x1111111254eeb25477b68fb85ed929f73a960582";
430
- var supportedNetworks2 = {
431
- [SupportedNetworkName.Ethereum]: {
432
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
433
- chainId: "1"
434
- },
435
- [SupportedNetworkName.Binance]: {
436
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
437
- chainId: "56"
438
- },
439
- [SupportedNetworkName.Matic]: {
440
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
441
- chainId: "137"
442
- },
443
- [SupportedNetworkName.Optimism]: {
444
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
445
- chainId: "10"
446
- },
447
- [SupportedNetworkName.Avalanche]: {
448
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
449
- chainId: "43114"
450
- },
451
- [SupportedNetworkName.Fantom]: {
452
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
453
- chainId: "250"
454
- },
455
- [SupportedNetworkName.Klaytn]: {
456
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
457
- chainId: "8217"
458
- },
459
- [SupportedNetworkName.Aurora]: {
460
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
461
- chainId: "1313161554"
462
- },
463
- [SupportedNetworkName.Gnosis]: {
464
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
465
- chainId: "100"
466
- },
467
- [SupportedNetworkName.Arbitrum]: {
468
- approvalAddress: ONEINCH_APPROVAL_ADDRESS,
469
- chainId: "42161"
470
- }
471
- };
472
- var BASE_URL = "https://api.1inch.io/v5.0/";
473
- var OneInch = class extends ProviderClass {
474
- constructor(web3eth, network) {
475
- super(web3eth, network);
476
- this.network = network;
477
- this.tokenList = [];
478
- this.web3eth = web3eth;
479
- this.name = "oneInch" /* oneInch */;
480
- this.fromTokens = {};
481
- this.toTokens = {};
482
- }
483
- init(tokenList) {
484
- if (!OneInch.isSupported(this.network))
485
- return;
486
- tokenList.forEach((t) => {
487
- this.fromTokens[t.address] = t;
488
- if (!this.toTokens[this.network])
489
- this.toTokens[this.network] = {};
490
- this.toTokens[this.network][t.address] = {
491
- ...t,
492
- networkInfo: {
493
- name: this.network,
494
- isAddress: (address) => Promise.resolve(isEVMAddress(address))
495
- }
496
- };
497
- });
498
- }
499
- static isSupported(network) {
500
- return Object.keys(supportedNetworks2).includes(
501
- network
502
- );
503
- }
504
- getFromTokens() {
505
- return this.fromTokens;
506
- }
507
- getToTokens() {
508
- return this.toTokens;
509
- }
510
- getMinMaxAmount() {
511
- return Promise.resolve({
512
- minimumFrom: toBN3("1"),
513
- maximumFrom: toBN3(TOKEN_AMOUNT_INFINITY_AND_BEYOND),
514
- minimumTo: toBN3("1"),
515
- maximumTo: toBN3(TOKEN_AMOUNT_INFINITY_AND_BEYOND)
516
- });
517
- }
518
- getOneInchSwap(options, meta, accurateEstimate) {
519
- if (!OneInch.isSupported(
520
- options.toToken.networkInfo.name
521
- ) || this.network !== options.toToken.networkInfo.name)
522
- return Promise.resolve(null);
523
- const feeConfig = FEE_CONFIGS[this.name][meta.walletIdentifier];
524
- const params = new URLSearchParams({
525
- fromTokenAddress: options.fromToken.address,
526
- toTokenAddress: options.toToken.address,
527
- amount: options.amount.toString(),
528
- fromAddress: options.fromAddress,
529
- destReceiver: options.toAddress,
530
- slippage: meta.slippage ? meta.slippage : DEFAULT_SLIPPAGE,
531
- fee: feeConfig ? (feeConfig.fee * 100).toFixed(3) : "0",
532
- referrerAddress: feeConfig ? feeConfig.referrer : "",
533
- disableEstimate: "true"
534
- });
535
- return fetch(
536
- `${BASE_URL}${supportedNetworks2[this.network].chainId}/swap?${params.toString()}`
537
- ).then((res) => res.json()).then(async (response) => {
538
- if (response.error) {
539
- console.error(response.error, response.description);
540
- return Promise.resolve(null);
541
- }
542
- const transactions = [];
543
- if (options.fromToken.address !== NATIVE_TOKEN_ADDRESS) {
544
- const approvalTxs = await getAllowanceTransactions({
545
- infinityApproval: meta.infiniteApproval,
546
- spender: supportedNetworks2[this.network].approvalAddress,
547
- web3eth: this.web3eth,
548
- amount: options.amount,
549
- fromAddress: options.fromAddress,
550
- fromToken: options.fromToken
551
- });
552
- transactions.push(...approvalTxs);
553
- }
554
- transactions.push({
555
- from: options.fromAddress,
556
- gasLimit: GAS_LIMITS.swap,
557
- to: response.tx.to,
558
- value: numberToHex3(response.tx.value),
559
- data: response.tx.data,
560
- type: "evm" /* evm */
561
- });
562
- if (accurateEstimate) {
563
- const accurateGasEstimate = await estimateGasList_default(
564
- transactions,
565
- this.network
566
- );
567
- if (accurateGasEstimate) {
568
- if (accurateGasEstimate.isError)
569
- return null;
570
- transactions.forEach((tx, idx) => {
571
- tx.gasLimit = accurateGasEstimate.result[idx];
572
- });
573
- }
574
- }
575
- return {
576
- transactions,
577
- toTokenAmount: toBN3(response.toTokenAmount),
578
- fromTokenAmount: toBN3(response.fromTokenAmount)
579
- };
580
- });
581
- }
582
- getQuote(options, meta) {
583
- return this.getOneInchSwap(options, meta, false).then(async (res) => {
584
- if (!res)
585
- return null;
586
- const response = {
587
- fromTokenAmount: res.fromTokenAmount,
588
- toTokenAmount: res.toTokenAmount,
589
- provider: this.name,
590
- quote: {
591
- meta,
592
- options,
593
- provider: this.name
594
- },
595
- totalGaslimit: res.transactions.reduce(
596
- (total, curVal) => total + toBN3(curVal.gasLimit).toNumber(),
597
- 0
598
- ),
599
- minMax: await this.getMinMaxAmount()
600
- };
601
- return response;
602
- });
603
- }
604
- getSwap(quote) {
605
- return this.getOneInchSwap(quote.options, quote.meta, true).then((res) => {
606
- if (!res)
607
- return null;
608
- const feeConfig = FEE_CONFIGS[this.name][quote.meta.walletIdentifier].fee || 0;
609
- const response = {
610
- fromTokenAmount: res.fromTokenAmount,
611
- provider: this.name,
612
- toTokenAmount: res.toTokenAmount,
613
- transactions: res.transactions,
614
- slippage: quote.meta.slippage || DEFAULT_SLIPPAGE,
615
- fee: feeConfig * 100,
616
- getStatusObject: async (options) => ({
617
- options,
618
- provider: this.name
619
- })
620
- };
621
- return response;
622
- });
623
- }
624
- getStatus(options) {
625
- const promises = options.transactionHashes.map(
626
- (hash) => this.web3eth.getTransactionReceipt(hash)
627
- );
628
- return Promise.all(promises).then((receipts) => {
629
- for (const receipt of receipts) {
630
- if (!receipt || receipt && !receipt.blockNumber) {
631
- return "pending" /* pending */;
632
- }
633
- if (receipt && !receipt.status)
634
- return "failed" /* failed */;
635
- }
636
- return "success" /* success */;
637
- });
638
- }
639
- };
640
- var oneInch_default = OneInch;
641
-
642
- // src/providers/changelly/index.ts
643
- import { v4 as uuidv4 } from "uuid";
644
- import fetch3 from "node-fetch";
645
- import { fromBase, toBase } from "@enkryptcom/utils";
646
- import { numberToHex as numberToHex4, toBN as toBN4 } from "web3-utils";
647
-
648
- // src/providers/changelly/supported.ts
649
- var supportedNetworks3 = {
650
- [SupportedNetworkName.Ethereum]: {
651
- changellyName: "ethereum",
652
- isAddress: (address) => Promise.resolve(isEVMAddress(address))
653
- },
654
- [SupportedNetworkName.Binance]: {
655
- changellyName: "binance_smart_chain",
656
- isAddress: (address) => Promise.resolve(isEVMAddress(address))
657
- },
658
- [SupportedNetworkName.Matic]: {
659
- changellyName: "polygon",
660
- isAddress: (address) => Promise.resolve(isEVMAddress(address))
661
- },
662
- [SupportedNetworkName.EthereumClassic]: {
663
- changellyName: "ethereum_classic",
664
- isAddress: (address) => Promise.resolve(isEVMAddress(address))
665
- },
666
- [SupportedNetworkName.Optimism]: {
667
- changellyName: "optimism",
668
- isAddress: (address) => Promise.resolve(isEVMAddress(address))
669
- },
670
- [SupportedNetworkName.Moonbeam]: {
671
- changellyName: "glmr",
672
- isAddress: (address) => Promise.resolve(isEVMAddress(address))
673
- },
674
- [SupportedNetworkName.Polkadot]: {
675
- changellyName: "polkadot",
676
- isAddress: (address) => Promise.resolve(isPolkadotAddress(address, 0))
677
- },
678
- [SupportedNetworkName.Kusama]: {
679
- changellyName: "kusama",
680
- isAddress: (address) => Promise.resolve(isPolkadotAddress(address, 2))
681
- },
682
- [SupportedNetworkName.Bitcoin]: {
683
- changellyName: "bitcoin"
684
- }
685
- };
686
- var supported_default = supportedNetworks3;
687
-
688
- // src/providers/changelly/index.ts
689
- var BASE_URL2 = "https://swap.mewapi.io/changelly";
690
- var Changelly = class extends ProviderClass {
691
- constructor(_web3eth, network) {
692
- super(_web3eth, network);
693
- this.network = network;
694
- this.tokenList = [];
695
- this.name = "changelly" /* changelly */;
696
- this.fromTokens = {};
697
- this.toTokens = {};
698
- this.contractToTicker = {};
699
- }
700
- async init() {
701
- if (!Changelly.isSupported(this.network))
702
- return;
703
- this.changellyList = await fetch3(CHANGELLY_LIST).then((res) => res.json());
704
- const changellyToNetwork = {};
705
- Object.keys(supported_default).forEach((net) => {
706
- changellyToNetwork[supported_default[net].changellyName] = net;
707
- });
708
- const supportedChangellyNames = Object.values(supported_default).map(
709
- (s) => s.changellyName
710
- );
711
- this.changellyList.forEach((cur) => {
712
- if (!supportedChangellyNames.includes(cur.blockchain))
713
- return;
714
- if (cur.enabledFrom && cur.fixRateEnabled && cur.token && changellyToNetwork[cur.blockchain] === this.network) {
715
- this.fromTokens[cur.token.address] = cur.token;
716
- }
717
- if (cur.enabledTo && cur.fixRateEnabled && cur.token) {
718
- if (!this.toTokens[changellyToNetwork[cur.blockchain]])
719
- this.toTokens[changellyToNetwork[cur.blockchain]] = {};
720
- this.toTokens[changellyToNetwork[cur.blockchain]][cur.token.address] = {
721
- ...cur.token,
722
- networkInfo: {
723
- name: changellyToNetwork[cur.blockchain],
724
- isAddress: supported_default[changellyToNetwork[cur.blockchain]].isAddress ? supported_default[changellyToNetwork[cur.blockchain]].isAddress : (address) => this.isValidAddress(address, cur.ticker)
725
- }
726
- };
727
- }
728
- if (cur.token)
729
- this.setTicker(
730
- cur.token,
731
- changellyToNetwork[cur.blockchain],
732
- cur.ticker
733
- );
734
- });
735
- }
736
- setTicker(token, network, ticker) {
737
- this.contractToTicker[`${network}-${token.address}`] = ticker;
738
- }
739
- getTicker(token, network) {
740
- return this.contractToTicker[`${network}-${token.address}`];
741
- }
742
- static isSupported(network) {
743
- return Object.keys(supported_default).includes(
744
- network
745
- );
746
- }
747
- changellyRequest(method, params) {
748
- return fetch3(`${BASE_URL2}`, {
749
- method: "POST",
750
- body: JSON.stringify({
751
- id: uuidv4(),
752
- jsonrpc: "2.0",
753
- method,
754
- params
755
- }),
756
- headers: { "Content-Type": "application/json" }
757
- }).then((res) => res.json());
758
- }
759
- isValidAddress(address, ticker) {
760
- return this.changellyRequest("validateAddress", {
761
- currency: ticker,
762
- address
763
- }).then((response) => {
764
- if (response.error)
765
- return false;
766
- return response.result.result;
767
- });
768
- }
769
- getFromTokens() {
770
- return this.fromTokens;
771
- }
772
- getToTokens() {
773
- if (Object.keys(this.fromTokens).length)
774
- return this.toTokens;
775
- return {};
776
- }
777
- getMinMaxAmount({
778
- fromToken,
779
- toToken
780
- }) {
781
- const emptyResponse = {
782
- minimumFrom: toBN4("0"),
783
- maximumFrom: toBN4("0"),
784
- minimumTo: toBN4("0"),
785
- maximumTo: toBN4("0")
786
- };
787
- return this.changellyRequest("getFixRate", {
788
- from: this.getTicker(fromToken, this.network),
789
- to: this.getTicker(
790
- toToken,
791
- toToken.networkInfo.name
792
- )
793
- }).then((response) => {
794
- if (response.error)
795
- return emptyResponse;
796
- const { result } = response;
797
- return {
798
- minimumFrom: toBN4(toBase(result.minFrom, fromToken.decimals)),
799
- maximumFrom: toBN4(toBase(result.maxFrom, fromToken.decimals)),
800
- minimumTo: toBN4(toBase(result.minTo, toToken.decimals)),
801
- maximumTo: toBN4(toBase(result.maxTo, toToken.decimals))
802
- };
803
- }).catch(() => emptyResponse);
804
- }
805
- async getQuote(options, meta) {
806
- if (!Changelly.isSupported(
807
- options.toToken.networkInfo.name
808
- ) || !Changelly.isSupported(this.network) || !this.getTicker(options.fromToken, this.network) || !this.getTicker(
809
- options.toToken,
810
- options.toToken.networkInfo.name
811
- ))
812
- return Promise.resolve(null);
813
- const minMax = await this.getMinMaxAmount({
814
- fromToken: options.fromToken,
815
- toToken: options.toToken
816
- });
817
- let quoteRequestAmount = options.amount;
818
- if (quoteRequestAmount.lt(minMax.minimumFrom))
819
- quoteRequestAmount = minMax.minimumFrom;
820
- else if (quoteRequestAmount.gt(minMax.maximumFrom))
821
- quoteRequestAmount = minMax.maximumFrom;
822
- if (quoteRequestAmount.toString() === "0")
823
- return null;
824
- return this.changellyRequest("getFixRateForAmount", {
825
- from: this.getTicker(options.fromToken, this.network),
826
- to: this.getTicker(
827
- options.toToken,
828
- options.toToken.networkInfo.name
829
- ),
830
- amountFrom: fromBase(
831
- quoteRequestAmount.toString(),
832
- options.fromToken.decimals
833
- )
834
- }).then(async (response) => {
835
- if (response.error || !response.result.id)
836
- return null;
837
- const { result } = response;
838
- const evmGasLimit = options.fromToken.address === NATIVE_TOKEN_ADDRESS && options.fromToken.type === "evm" /* EVM */ ? 21e3 : toBN4(GAS_LIMITS.transferToken).toNumber();
839
- const retResponse = {
840
- fromTokenAmount: quoteRequestAmount,
841
- toTokenAmount: toBN4(
842
- toBase(result.amountTo, options.toToken.decimals)
843
- ),
844
- provider: this.name,
845
- quote: {
846
- meta: {
847
- ...meta,
848
- changellyQuoteId: result.id
849
- },
850
- options: {
851
- ...options,
852
- amount: quoteRequestAmount
853
- },
854
- provider: this.name
855
- },
856
- totalGaslimit: options.fromToken.type === "evm" /* EVM */ ? evmGasLimit : 0,
857
- minMax
858
- };
859
- return retResponse;
860
- }).catch(() => null);
861
- }
862
- getSwap(quote) {
863
- if (!Changelly.isSupported(
864
- quote.options.toToken.networkInfo.name
865
- ) || !Changelly.isSupported(this.network))
866
- return Promise.resolve(null);
867
- return this.changellyRequest("createFixTransaction", {
868
- from: this.getTicker(quote.options.fromToken, this.network),
869
- to: this.getTicker(
870
- quote.options.toToken,
871
- quote.options.toToken.networkInfo.name
872
- ),
873
- refundAddress: quote.options.fromAddress,
874
- address: quote.options.toAddress,
875
- amountFrom: fromBase(
876
- quote.options.amount.toString(),
877
- quote.options.fromToken.decimals
878
- ),
879
- rateId: quote.meta.changellyQuoteId
880
- }).then(async (response) => {
881
- if (response.error || !response.result.id)
882
- return null;
883
- const { result } = response;
884
- let transaction;
885
- if (quote.options.fromToken.type === "evm" /* EVM */) {
886
- if (quote.options.fromToken.address === NATIVE_TOKEN_ADDRESS)
887
- transaction = {
888
- from: quote.options.fromAddress,
889
- data: "0x",
890
- gasLimit: numberToHex4(21e3),
891
- to: result.payinAddress,
892
- value: numberToHex4(quote.options.amount),
893
- type: "evm" /* evm */
894
- };
895
- else
896
- transaction = getTransfer({
897
- from: quote.options.fromAddress,
898
- contract: quote.options.fromToken.address,
899
- to: result.payinAddress,
900
- value: quote.options.amount.toString()
901
- });
902
- const accurateGasEstimate = await estimateGasList_default(
903
- [transaction],
904
- this.network
905
- );
906
- if (accurateGasEstimate) {
907
- if (accurateGasEstimate.isError)
908
- return null;
909
- const [txGaslimit] = accurateGasEstimate.result;
910
- transaction.gasLimit = txGaslimit;
911
- }
912
- } else {
913
- transaction = {
914
- from: quote.options.fromAddress,
915
- to: result.payinAddress,
916
- value: numberToHex4(quote.options.amount),
917
- type: "generic" /* generic */
918
- };
919
- }
920
- const fee = 1;
921
- const retResponse = {
922
- fromTokenAmount: quote.options.amount,
923
- provider: this.name,
924
- toTokenAmount: toBN4(
925
- toBase(result.amountTo, quote.options.toToken.decimals)
926
- ),
927
- transactions: [transaction],
928
- slippage: quote.meta.slippage || DEFAULT_SLIPPAGE,
929
- fee,
930
- getStatusObject: async (options) => ({
931
- options: {
932
- ...options,
933
- swapId: result.id
934
- },
935
- provider: this.name
936
- })
937
- };
938
- return retResponse;
939
- }).catch(() => null);
940
- }
941
- getStatus(options) {
942
- return this.changellyRequest("getStatus", {
943
- id: options.swapId
944
- }).then(async (response) => {
945
- if (response.error)
946
- return "pending" /* pending */;
947
- const completedStatuses = ["finished"];
948
- const pendingStatuses = [
949
- "confirming",
950
- "exchanging",
951
- "sending",
952
- "waiting",
953
- "new"
954
- ];
955
- const failedStatuses = ["failed", "refunded", "hold", "expired"];
956
- const status = response.result;
957
- if (pendingStatuses.includes(status))
958
- return "pending" /* pending */;
959
- if (completedStatuses.includes(status))
960
- return "success" /* success */;
961
- if (failedStatuses.includes(status))
962
- return "failed" /* failed */;
963
- return "pending" /* pending */;
964
- });
965
- }
966
- };
967
- var changelly_default = Changelly;
968
-
969
- // src/common/supportedNetworks.ts
970
- import { SignerType as SignerType2 } from "@enkryptcom/types";
971
- var NetworkDetails = {
972
- [SupportedNetworkName.Bitcoin]: {
973
- id: SupportedNetworkName.Bitcoin,
974
- decimals: 8,
975
- logoURI: "https://assets.coingecko.com/coins/images/1/thumb/bitcoin.png",
976
- name: "Bitcoin",
977
- symbol: "BTC",
978
- cgId: "bitcoin",
979
- rank: 1,
980
- signerType: [SignerType2.secp256k1btc],
981
- type: "bitcoin" /* Bitcoin */
982
- },
983
- [SupportedNetworkName.Ethereum]: {
984
- id: SupportedNetworkName.Ethereum,
985
- cgId: "ethereum",
986
- decimals: 18,
987
- logoURI: "https://tokens.1inch.io/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.png",
988
- name: "Ethereum",
989
- symbol: "ETH",
990
- rank: 2,
991
- signerType: [SignerType2.secp256k1],
992
- type: "evm" /* EVM */
993
- },
994
- [SupportedNetworkName.Binance]: {
995
- id: SupportedNetworkName.Binance,
996
- cgId: "binancecoin",
997
- decimals: 18,
998
- logoURI: "https://tokens.1inch.io/0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c_1.png",
999
- name: "BNB",
1000
- symbol: "BNB",
1001
- rank: 3,
1002
- signerType: [SignerType2.secp256k1],
1003
- type: "evm" /* EVM */
1004
- },
1005
- [SupportedNetworkName.Matic]: {
1006
- id: SupportedNetworkName.Matic,
1007
- cgId: "matic-network",
1008
- decimals: 18,
1009
- logoURI: "https://tokens.1inch.io/0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0.png",
1010
- name: "Polygon",
1011
- symbol: "MATIC",
1012
- rank: 4,
1013
- signerType: [SignerType2.secp256k1],
1014
- type: "evm" /* EVM */
1015
- },
1016
- [SupportedNetworkName.Optimism]: {
1017
- id: SupportedNetworkName.Optimism,
1018
- cgId: "optimism",
1019
- decimals: 18,
1020
- logoURI: "https://tokens.1inch.io/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.png",
1021
- name: "Optimism",
1022
- symbol: "ETH",
1023
- rank: 5,
1024
- signerType: [SignerType2.secp256k1],
1025
- type: "evm" /* EVM */
1026
- },
1027
- [SupportedNetworkName.Arbitrum]: {
1028
- id: SupportedNetworkName.Arbitrum,
1029
- cgId: "ethereum",
1030
- decimals: 18,
1031
- logoURI: "https://tokens.1inch.io/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.png",
1032
- name: "Arbitrum",
1033
- symbol: "ETH",
1034
- rank: 6,
1035
- signerType: [SignerType2.secp256k1],
1036
- type: "evm" /* EVM */
1037
- },
1038
- [SupportedNetworkName.Gnosis]: {
1039
- id: SupportedNetworkName.Gnosis,
1040
- cgId: "dai",
1041
- decimals: 18,
1042
- logoURI: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B175474E89094C44Da98b954EedeAC495271d0F/logo.png",
1043
- name: "Gnosis",
1044
- symbol: "xDAI",
1045
- rank: 7,
1046
- signerType: [SignerType2.secp256k1],
1047
- type: "evm" /* EVM */
1048
- },
1049
- [SupportedNetworkName.Avalanche]: {
1050
- id: SupportedNetworkName.Avalanche,
1051
- cgId: "avalanche-2",
1052
- decimals: 18,
1053
- logoURI: "https://tokens.1inch.io/0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7.png",
1054
- name: "Avalanche",
1055
- symbol: "AVAX",
1056
- rank: 8,
1057
- signerType: [SignerType2.secp256k1],
1058
- type: "evm" /* EVM */
1059
- },
1060
- [SupportedNetworkName.Fantom]: {
1061
- id: SupportedNetworkName.Fantom,
1062
- cgId: "fantom",
1063
- decimals: 18,
1064
- logoURI: "https://tokens.1inch.io/0x4e15361fd6b4bb609fa63c81a2be19d873717870.png",
1065
- name: "Fantom",
1066
- symbol: "FTM",
1067
- rank: 9,
1068
- signerType: [SignerType2.secp256k1],
1069
- type: "evm" /* EVM */
1070
- },
1071
- [SupportedNetworkName.Klaytn]: {
1072
- id: SupportedNetworkName.Klaytn,
1073
- cgId: "klay-token",
1074
- decimals: 18,
1075
- logoURI: "https://tokens.1inch.io/0xe4f05a66ec68b54a58b17c22107b02e0232cc817.png",
1076
- name: "Klaytn",
1077
- symbol: "KLAY",
1078
- rank: 10,
1079
- signerType: [SignerType2.secp256k1],
1080
- type: "evm" /* EVM */
1081
- },
1082
- [SupportedNetworkName.Moonbeam]: {
1083
- id: SupportedNetworkName.Moonbeam,
1084
- cgId: "moonbeam",
1085
- decimals: 18,
1086
- logoURI: "https://assets.coingecko.com/coins/images/22459/thumb/glmr.png",
1087
- name: "Moonbeam",
1088
- symbol: "GLMR",
1089
- rank: 11,
1090
- signerType: [SignerType2.secp256k1],
1091
- type: "evm" /* EVM */
1092
- },
1093
- [SupportedNetworkName.Kusama]: {
1094
- id: SupportedNetworkName.Kusama,
1095
- decimals: 12,
1096
- logoURI: "https://assets.coingecko.com/coins/images/9568/thumb/m4zRhP5e_400x400.jpg",
1097
- name: "Kusama",
1098
- symbol: "ksm",
1099
- cgId: "kusama",
1100
- rank: 12,
1101
- signerType: [SignerType2.sr25519, SignerType2.ed25519],
1102
- type: "substrate" /* Substrate */
1103
- },
1104
- [SupportedNetworkName.Polkadot]: {
1105
- id: SupportedNetworkName.Polkadot,
1106
- decimals: 10,
1107
- logoURI: "https://assets.coingecko.com/coins/images/12171/thumb/polkadot.png",
1108
- name: "Polkadot",
1109
- symbol: "DOT",
1110
- cgId: "polkadot",
1111
- rank: 13,
1112
- signerType: [SignerType2.sr25519, SignerType2.ed25519],
1113
- type: "substrate" /* Substrate */
1114
- },
1115
- [SupportedNetworkName.EthereumClassic]: {
1116
- id: SupportedNetworkName.EthereumClassic,
1117
- cgId: "ethereum-classic",
1118
- decimals: 18,
1119
- logoURI: "https://assets.coingecko.com/coins/images/453/thumb/ethereum-classic-logo.png",
1120
- name: "Ethereum Classic",
1121
- signerType: [SignerType2.secp256k1],
1122
- type: "evm" /* EVM */,
1123
- rank: 14,
1124
- symbol: "ETC"
1125
- },
1126
- [SupportedNetworkName.Aurora]: {
1127
- id: SupportedNetworkName.Aurora,
1128
- cgId: "ethereum",
1129
- decimals: 18,
1130
- logoURI: "https://tokens.1inch.io/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.png",
1131
- name: "Ethereum",
1132
- signerType: [SignerType2.secp256k1],
1133
- type: "evm" /* EVM */,
1134
- rank: 15,
1135
- symbol: "ETH"
1136
- }
1137
- };
1138
- var isSupportedNetwork = (networkName) => !!NetworkDetails[networkName];
1139
- var getSupportedNetworks = () => Object.values(NetworkDetails);
1140
- var getNetworkInfoByName = (networkName) => NetworkDetails[networkName];
1141
- var supportedNetworks_default = NetworkDetails;
1142
-
1143
- // src/swapToken.ts
1144
- import { fromBase as fromBase2, toBase as toBase2 } from "@enkryptcom/utils";
1145
- import BigNumber from "bignumber.js";
1146
- import { toBN as toBN5 } from "web3-utils";
1147
- var SwapToken = class {
1148
- constructor(token) {
1149
- this.token = token;
1150
- }
1151
- setBalance(balance) {
1152
- this.token.balance = balance;
1153
- }
1154
- getBalanceReadable() {
1155
- if (!this.token.balance)
1156
- return "0";
1157
- return this.toReadable(this.token.balance);
1158
- }
1159
- getBalanceRaw() {
1160
- if (!this.token.balance)
1161
- return toBN5("0");
1162
- return this.token.balance;
1163
- }
1164
- toReadable(amount) {
1165
- return fromBase2(amount.toString(), this.token.decimals);
1166
- }
1167
- toRaw(amount) {
1168
- return toBN5(toBase2(amount, this.token.decimals));
1169
- }
1170
- getFiatTotal() {
1171
- if (!this.token.balance || !this.token.price)
1172
- return 0;
1173
- return BigNumber(this.getBalanceReadable()).times(this.token.price).toNumber();
1174
- }
1175
- getFiatValue() {
1176
- if (!this.token.price)
1177
- return 0;
1178
- return this.token.price;
1179
- }
1180
- getReadableToFiat(value) {
1181
- if (!this.token.price)
1182
- return 0;
1183
- return BigNumber(value).times(this.token.price).toNumber();
1184
- }
1185
- getRawToFiat(value) {
1186
- if (!this.token.price)
1187
- return 0;
1188
- return BigNumber(this.toReadable(value)).times(this.token.price).toNumber();
1189
- }
1190
- };
1191
- var swapToken_default = SwapToken;
1192
-
1193
- // src/index.ts
1194
- var Swap = class extends EventEmitter {
1195
- constructor(options) {
1196
- super();
1197
- this.network = options.network;
1198
- this.evmOptions = options.evmOptions ? options.evmOptions : {
1199
- infiniteApproval: true
1200
- };
1201
- this.api = options.api;
1202
- this.walletId = options.walletIdentifier;
1203
- this.providerClasses = [oneInch_default, changelly_default];
1204
- this.topTokenInfo = {
1205
- contractsToId: {},
1206
- topTokens: {},
1207
- trendingTokens: {}
1208
- };
1209
- this.tokenList = {
1210
- all: [],
1211
- top: [],
1212
- trending: []
1213
- };
1214
- this.toTokens = {
1215
- all: {},
1216
- top: {},
1217
- trending: {}
1218
- };
1219
- this.fromTokens = {
1220
- all: [],
1221
- top: [],
1222
- trending: []
1223
- };
1224
- this.initPromise = this.init();
1225
- }
1226
- async init() {
1227
- if (TOKEN_LISTS[this.network])
1228
- this.tokenList = await fetch4(TOKEN_LISTS[this.network]).then(
1229
- (res) => res.json()
1230
- );
1231
- this.topTokenInfo = await fetch4(TOP_TOKEN_INFO_LIST).then(
1232
- (res) => res.json()
1233
- );
1234
- this.providers = this.providerClasses.map(
1235
- (Provider) => new Provider(this.api, this.network)
1236
- );
1237
- await Promise.all(
1238
- this.providers.map((Provider) => Provider.init(this.tokenList.all))
1239
- );
1240
- const allFromTokens = {};
1241
- [...this.providers].reverse().forEach((p) => {
1242
- Object.assign(allFromTokens, p.getFromTokens());
1243
- });
1244
- this.fromTokens = {
1245
- all: Object.values(allFromTokens).sort(sortNativeToFront),
1246
- top: this.tokenList.top.filter((topt) => !!allFromTokens[topt.address]),
1247
- trending: this.tokenList.trending.filter(
1248
- (trendt) => !!allFromTokens[trendt.address]
1249
- )
1250
- };
1251
- const native = this.fromTokens.all.shift();
1252
- this.fromTokens.all.sort(sortByRank);
1253
- this.fromTokens.all.unshift(native);
1254
- const allToTokens = {};
1255
- [...this.providers].reverse().forEach((p) => {
1256
- merge(allToTokens, p.getToTokens());
1257
- });
1258
- Object.keys(allToTokens).forEach((nName) => {
1259
- const values = Object.values(allToTokens[nName]);
1260
- values.sort(sortNativeToFront);
1261
- const nativeTo = values.shift();
1262
- values.sort(sortByRank);
1263
- values.unshift(nativeTo);
1264
- values.forEach((val) => {
1265
- if (val.cgId && this.topTokenInfo.topTokens[val.cgId]) {
1266
- if (!this.toTokens.top[nName])
1267
- this.toTokens.top[nName] = [];
1268
- this.toTokens.top[nName].push({
1269
- ...val,
1270
- rank: this.topTokenInfo.topTokens[val.cgId].rank
1271
- });
1272
- }
1273
- if (val.cgId && this.topTokenInfo.trendingTokens[val.cgId]) {
1274
- if (!this.toTokens.trending[nName])
1275
- this.toTokens.trending[nName] = [];
1276
- this.toTokens.trending[nName].push({
1277
- ...val,
1278
- rank: this.topTokenInfo.trendingTokens[val.cgId]
1279
- });
1280
- }
1281
- });
1282
- if (this.toTokens.top[nName])
1283
- this.toTokens.top[nName].sort(sortByRank);
1284
- if (this.toTokens.trending[nName])
1285
- this.toTokens.trending[nName].sort(sortByRank);
1286
- this.toTokens.all[nName] = values;
1287
- });
1288
- }
1289
- getFromTokens() {
1290
- return this.fromTokens;
1291
- }
1292
- getToTokens() {
1293
- return this.toTokens;
1294
- }
1295
- async getQuotes(options) {
1296
- const response = await Promise.all(
1297
- this.providers.map(
1298
- (Provider) => Provider.getQuote(options, {
1299
- infiniteApproval: this.evmOptions.infiniteApproval,
1300
- walletIdentifier: this.walletId
1301
- }).then((res) => {
1302
- if (!res)
1303
- return res;
1304
- this.emit("quote-update" /* QuoteUpdate */, res.toTokenAmount);
1305
- return res;
1306
- })
1307
- )
1308
- );
1309
- return response.filter((res) => res !== null).sort((a, b) => b.toTokenAmount.gt(a.toTokenAmount) ? 1 : -1);
1310
- }
1311
- getSwap(quote) {
1312
- const provider = this.providers.find((p) => p.name === quote.provider);
1313
- return provider.getSwap(quote);
1314
- }
1315
- getStatus(options) {
1316
- const provider = this.providers.find((p) => p.name === options.provider);
1317
- return provider.getStatus(options.options);
1318
- }
1319
- static networkNameToInfo(networkName) {
1320
- return supportedNetworks_default[networkName];
1321
- }
1322
- };
1323
- var src_default = Swap;
1324
- export {
1325
- NetworkType,
1326
- SupportedNetworkName,
1327
- swapToken_default as SwapToken,
1328
- TransactionStatus,
1329
- TransactionType,
1330
- WalletIdentifier,
1331
- src_default as default,
1332
- getNetworkInfoByName,
1333
- getSupportedNetworks,
1334
- isSupportedNetwork,
1335
- sortByRank,
1336
- sortNativeToFront
1337
- };