@rabby-wallet/rabby-swap 0.0.1 → 0.0.3

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.
@@ -0,0 +1,24 @@
1
+ import { CHAINS_ENUM } from '@debank/common';
2
+ export declare enum DEX_ENUM {
3
+ ONEINCH = "1inch",
4
+ PARASWAP = "ParaSwap",
5
+ ZEROXAPI = "0xAPI",
6
+ WRAPTOKEN = "WrapToken"
7
+ }
8
+ export declare const WrapTokenAddressMap: {
9
+ ETH: string;
10
+ BSC: string;
11
+ POLYGON: string;
12
+ OP: string;
13
+ FTM: string;
14
+ AVAX: string;
15
+ ARBITRUM: string;
16
+ KLAY: string;
17
+ GNOSIS: string;
18
+ };
19
+ export declare const DEX_SUPPORT_CHAINS: {
20
+ WrapToken: CHAINS_ENUM[];
21
+ "1inch": CHAINS_ENUM[];
22
+ ParaSwap: CHAINS_ENUM[];
23
+ "0xAPI": CHAINS_ENUM[];
24
+ };
package/dist/consts.js ADDED
@@ -0,0 +1,29 @@
1
+ import { CHAINS_ENUM } from '@debank/common';
2
+ import { SUPPORT_CHAINS as wrapTokenSupportChains } from './dexs/wrapToken';
3
+ import { SUPPORT_CHAINS as zeroXSupportChains } from './dexs/0xapi';
4
+ import { SUPPORT_CHAINS as oneInchSupportChains } from './dexs/1inch';
5
+ import { SUPPORT_CHAINS as paraswapSupportChains } from './dexs/paraswap';
6
+ export var DEX_ENUM;
7
+ (function (DEX_ENUM) {
8
+ DEX_ENUM["ONEINCH"] = "1inch";
9
+ DEX_ENUM["PARASWAP"] = "ParaSwap";
10
+ DEX_ENUM["ZEROXAPI"] = "0xAPI";
11
+ DEX_ENUM["WRAPTOKEN"] = "WrapToken";
12
+ })(DEX_ENUM || (DEX_ENUM = {}));
13
+ export const WrapTokenAddressMap = {
14
+ [CHAINS_ENUM.ETH]: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
15
+ [CHAINS_ENUM.BSC]: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
16
+ [CHAINS_ENUM.POLYGON]: '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270',
17
+ [CHAINS_ENUM.OP]: '0x4200000000000000000000000000000000000006',
18
+ [CHAINS_ENUM.FTM]: '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83',
19
+ [CHAINS_ENUM.AVAX]: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7',
20
+ [CHAINS_ENUM.ARBITRUM]: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
21
+ [CHAINS_ENUM.KLAY]: '0xe4f05a66ec68b54a58b17c22107b02e0232cc817',
22
+ [CHAINS_ENUM.GNOSIS]: '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d',
23
+ };
24
+ export const DEX_SUPPORT_CHAINS = {
25
+ [DEX_ENUM.WRAPTOKEN]: wrapTokenSupportChains,
26
+ [DEX_ENUM.ONEINCH]: oneInchSupportChains,
27
+ [DEX_ENUM.PARASWAP]: paraswapSupportChains,
28
+ [DEX_ENUM.ZEROXAPI]: zeroXSupportChains,
29
+ };
@@ -0,0 +1,4 @@
1
+ import { CHAINS_ENUM } from "@debank/common";
2
+ import { QuoteParams, QuoteResult } from "../quote";
3
+ export declare const SUPPORT_CHAINS: CHAINS_ENUM[];
4
+ export declare const getQuote: (options: QuoteParams) => Promise<QuoteResult>;
@@ -0,0 +1,88 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import axios from "axios";
11
+ import { CHAINS_ENUM, CHAINS } from "@debank/common";
12
+ const NATIVE_TOKEN = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
13
+ const API_DOMAINS = {
14
+ [CHAINS_ENUM.ETH]: "https://api.0x.org",
15
+ [CHAINS_ENUM.POLYGON]: "https://polygon.api.0x.org",
16
+ [CHAINS_ENUM.BSC]: "https://bsc.api.0x.org",
17
+ [CHAINS_ENUM.OP]: "https://optimism.api.0x.org",
18
+ [CHAINS_ENUM.FTM]: "https://fantom.api.0x.org",
19
+ [CHAINS_ENUM.CELO]: "https://celo.api.0x.org",
20
+ [CHAINS_ENUM.AVAX]: "https://avalanche.api.0x.org",
21
+ [CHAINS_ENUM.ARBITRUM]: "https://arbitrum.api.0x.org",
22
+ };
23
+ export const SUPPORT_CHAINS = [
24
+ CHAINS_ENUM.ETH,
25
+ CHAINS_ENUM.POLYGON,
26
+ CHAINS_ENUM.BSC,
27
+ CHAINS_ENUM.OP,
28
+ CHAINS_ENUM.FTM,
29
+ CHAINS_ENUM.AVAX,
30
+ CHAINS_ENUM.ARBITRUM,
31
+ CHAINS_ENUM.CELO,
32
+ ];
33
+ export const getQuote = (options) => __awaiter(void 0, void 0, void 0, function* () {
34
+ if (!SUPPORT_CHAINS.includes(options.chain)) {
35
+ throw new Error(`${CHAINS[options.chain]} is not support on 1inch`);
36
+ }
37
+ const baseURL = API_DOMAINS[options.chain];
38
+ const request = axios.create({
39
+ baseURL,
40
+ });
41
+ request.interceptors.response.use((response) => {
42
+ var _a, _b;
43
+ const code = (_a = response.data) === null || _a === void 0 ? void 0 : _a.code;
44
+ const msg = (_b = response.data) === null || _b === void 0 ? void 0 : _b.reason;
45
+ if (code && code !== 200) {
46
+ if (msg) {
47
+ let err;
48
+ try {
49
+ err = new Error(JSON.parse(msg));
50
+ }
51
+ catch (e) {
52
+ err = new Error(msg);
53
+ }
54
+ throw err;
55
+ }
56
+ throw new Error(response.data);
57
+ }
58
+ return response;
59
+ });
60
+ const params = {
61
+ sellToken: options.fromToken === CHAINS[options.chain].nativeTokenAddress ? NATIVE_TOKEN : options.fromToken,
62
+ buyToken: options.toToken === CHAINS[options.chain].nativeTokenAddress ? NATIVE_TOKEN : options.toToken,
63
+ sellAmount: options.amount,
64
+ takerAddress: options.userAddress,
65
+ slippagePercentage: options.slippage / 100,
66
+ skipValidation: true,
67
+ };
68
+ if (options.feeRate) {
69
+ params.buyTokenPercentageFee = options.feeRate / 100;
70
+ params.feeRecipient = options.feeAddress;
71
+ }
72
+ const { data } = yield request.get('/swap/v1/quote', {
73
+ params,
74
+ });
75
+ return {
76
+ tx: {
77
+ data: data.data,
78
+ to: data.to,
79
+ value: data.value,
80
+ from: data.from,
81
+ },
82
+ fromToken: data.sellTokenAddress === NATIVE_TOKEN ? CHAINS[options.chain].nativeTokenAddress : data.sellTokenAddress,
83
+ spender: data.allowanceTarget,
84
+ fromTokenAmount: data.sellAmount,
85
+ toToken: data.buyTokenAddress === NATIVE_TOKEN ? CHAINS[options.chain].nativeTokenAddress : data.buyTokenAddress,
86
+ toTokenAmount: data.buyAmount
87
+ };
88
+ });
@@ -0,0 +1,4 @@
1
+ import { CHAINS_ENUM } from "@debank/common";
2
+ import { QuoteParams, QuoteResult } from "../quote";
3
+ export declare const SUPPORT_CHAINS: CHAINS_ENUM[];
4
+ export declare const getQuote: (options: QuoteParams) => Promise<QuoteResult>;
@@ -0,0 +1,76 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import axios from "axios";
11
+ import { CHAINS_ENUM, CHAINS } from "@debank/common";
12
+ const NATIVE_TOKEN = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
13
+ const request = axios.create({
14
+ baseURL: "https://api.1inch.io/v5.0",
15
+ });
16
+ request.interceptors.response.use((response) => {
17
+ var _a, _b, _c;
18
+ const code = (_a = response.data) === null || _a === void 0 ? void 0 : _a.statusCode;
19
+ const msg = ((_b = response.data) === null || _b === void 0 ? void 0 : _b.description) || ((_c = response.data) === null || _c === void 0 ? void 0 : _c.error);
20
+ if (code && code !== 200) {
21
+ if (msg) {
22
+ let err;
23
+ try {
24
+ err = new Error(JSON.parse(msg));
25
+ }
26
+ catch (e) {
27
+ err = new Error(msg);
28
+ }
29
+ throw err;
30
+ }
31
+ throw new Error(response.data);
32
+ }
33
+ return response;
34
+ });
35
+ export const SUPPORT_CHAINS = [
36
+ CHAINS_ENUM.ETH,
37
+ CHAINS_ENUM.POLYGON,
38
+ CHAINS_ENUM.BSC,
39
+ CHAINS_ENUM.OP,
40
+ CHAINS_ENUM.FTM,
41
+ CHAINS_ENUM.AVAX,
42
+ CHAINS_ENUM.ARBITRUM,
43
+ CHAINS_ENUM.KLAY,
44
+ CHAINS_ENUM.GNOSIS,
45
+ ];
46
+ export const getQuote = (options) => __awaiter(void 0, void 0, void 0, function* () {
47
+ const chainId = CHAINS[options.chain].id;
48
+ if (!SUPPORT_CHAINS.includes(options.chain)) {
49
+ throw new Error(`${CHAINS[options.chain]} is not support on 1inch`);
50
+ }
51
+ const params = {
52
+ fromTokenAddress: options.fromToken === CHAINS[options.chain].nativeTokenAddress ? NATIVE_TOKEN : options.fromToken,
53
+ toTokenAddress: options.toToken === CHAINS[options.chain].nativeTokenAddress ? NATIVE_TOKEN : options.toToken,
54
+ amount: options.amount,
55
+ fromAddress: options.userAddress,
56
+ slippage: options.slippage,
57
+ disableEstimate: true,
58
+ };
59
+ if (options.feeRate) {
60
+ params.fee = options.feeRate;
61
+ params.referrerAddress = options.feeAddress;
62
+ }
63
+ const { data } = yield request.get(`/${chainId}/swap`, {
64
+ params,
65
+ });
66
+ return {
67
+ tx: data.tx,
68
+ fromToken: data.fromToken.address === NATIVE_TOKEN ? CHAINS[options.chain].nativeTokenAddress : data.fromToken.address,
69
+ fromTokenAmount: data.fromTokenAmount,
70
+ fromTokenDecimals: data.fromToken.decimals,
71
+ toToken: data.toToken.address === NATIVE_TOKEN ? CHAINS[options.chain].nativeTokenAddress : data.toToken.address,
72
+ toTokenAmount: data.toTokenAmount,
73
+ toTokenDecimals: data.toToken.decimals,
74
+ spender: data.tx.to,
75
+ };
76
+ });
@@ -0,0 +1,4 @@
1
+ import { CHAINS_ENUM } from "@debank/common";
2
+ import { QuoteParams, QuoteResult } from "../quote";
3
+ export declare const SUPPORT_CHAINS: CHAINS_ENUM[];
4
+ export declare const getQuote: (options: QuoteParams) => Promise<QuoteResult>;
@@ -0,0 +1,102 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import axios from "axios";
11
+ import { CHAINS_ENUM, CHAINS } from "@debank/common";
12
+ const NATIVE_TOKEN = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
13
+ const request = axios.create({
14
+ baseURL: "https://apiv5.paraswap.io",
15
+ });
16
+ request.interceptors.response.use((response) => {
17
+ var _a, _b, _c;
18
+ const code = (_a = response.data) === null || _a === void 0 ? void 0 : _a.statusCode;
19
+ const msg = ((_b = response.data) === null || _b === void 0 ? void 0 : _b.description) || ((_c = response.data) === null || _c === void 0 ? void 0 : _c.error);
20
+ if (code && code !== 200) {
21
+ if (msg) {
22
+ let err;
23
+ try {
24
+ err = new Error(JSON.parse(msg));
25
+ }
26
+ catch (e) {
27
+ err = new Error(msg);
28
+ }
29
+ throw err;
30
+ }
31
+ throw new Error(response.data);
32
+ }
33
+ return response;
34
+ });
35
+ export const SUPPORT_CHAINS = [
36
+ CHAINS_ENUM.ETH,
37
+ CHAINS_ENUM.POLYGON,
38
+ CHAINS_ENUM.BSC,
39
+ CHAINS_ENUM.AVAX,
40
+ ];
41
+ const getPriceRoute = (params) => __awaiter(void 0, void 0, void 0, function* () {
42
+ const { data } = yield request.get("/prices", {
43
+ params,
44
+ });
45
+ return data;
46
+ });
47
+ export const getQuote = (options) => __awaiter(void 0, void 0, void 0, function* () {
48
+ const chainId = CHAINS[options.chain].id;
49
+ if (!SUPPORT_CHAINS.includes(options.chain)) {
50
+ throw new Error(`${CHAINS[options.chain]} is not support on 1inch`);
51
+ }
52
+ const { priceRoute } = yield getPriceRoute({
53
+ srcDecimals: options.fromTokenDecimals,
54
+ srcToken: options.fromToken === CHAINS[options.chain].nativeTokenAddress
55
+ ? NATIVE_TOKEN
56
+ : options.fromToken,
57
+ destToken: options.toToken === CHAINS[options.chain].nativeTokenAddress
58
+ ? NATIVE_TOKEN
59
+ : options.toToken,
60
+ amount: options.amount,
61
+ userAddress: options.userAddress,
62
+ network: chainId,
63
+ includeContractMethods: "simpleSwap,multiSwap,megaSwap",
64
+ });
65
+ const params = {
66
+ srcToken: options.fromToken === CHAINS[options.chain].nativeTokenAddress
67
+ ? NATIVE_TOKEN
68
+ : options.fromToken,
69
+ srcDecimals: options.fromTokenDecimals,
70
+ destToken: options.toToken === CHAINS[options.chain].nativeTokenAddress
71
+ ? NATIVE_TOKEN
72
+ : options.toToken,
73
+ srcAmount: options.amount,
74
+ userAddress: options.userAddress,
75
+ slippage: Math.floor(options.slippage * 100),
76
+ priceRoute: priceRoute,
77
+ };
78
+ if (options.feeRate) {
79
+ params.partnerFeeBps = (options.feeRate * 100).toString();
80
+ params.partnerAddress = options.feeAddress;
81
+ }
82
+ const { data } = yield request.post(`/transactions/${chainId}`, params, {
83
+ params: {
84
+ ignoreChecks: true,
85
+ ignoreGasEstimate: true,
86
+ },
87
+ });
88
+ return {
89
+ tx: data,
90
+ fromToken: priceRoute.srcToken === NATIVE_TOKEN
91
+ ? CHAINS[options.chain].nativeTokenAddress
92
+ : priceRoute.srcToken,
93
+ fromTokenAmount: priceRoute.srcAmount,
94
+ fromTokenDecimals: priceRoute.srcDecimals,
95
+ toToken: priceRoute.destToken === NATIVE_TOKEN
96
+ ? CHAINS[options.chain].nativeTokenAddress
97
+ : priceRoute.destToken,
98
+ toTokenAmount: priceRoute.destAmount,
99
+ toTokenDecimals: priceRoute.destDecimals,
100
+ spender: data.to,
101
+ };
102
+ });
@@ -0,0 +1,4 @@
1
+ import { CHAINS_ENUM } from "@debank/common";
2
+ import { QuoteParams, QuoteResult } from "../quote";
3
+ export declare const SUPPORT_CHAINS: CHAINS_ENUM[];
4
+ export declare const getQuote: (options: QuoteParams) => Promise<QuoteResult>;
@@ -0,0 +1,71 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import abiCoder from "web3-eth-abi";
11
+ import { CHAINS_ENUM, CHAINS } from "@debank/common";
12
+ import { WrapTokenAddressMap } from "../consts";
13
+ import { isSameAddress } from "../utils";
14
+ export const SUPPORT_CHAINS = [
15
+ CHAINS_ENUM.ETH,
16
+ CHAINS_ENUM.POLYGON,
17
+ CHAINS_ENUM.BSC,
18
+ CHAINS_ENUM.OP,
19
+ CHAINS_ENUM.FTM,
20
+ CHAINS_ENUM.AVAX,
21
+ CHAINS_ENUM.ARBITRUM,
22
+ CHAINS_ENUM.KLAY,
23
+ CHAINS_ENUM.GNOSIS,
24
+ CHAINS_ENUM.CELO,
25
+ ];
26
+ export const getQuote = (options) => __awaiter(void 0, void 0, void 0, function* () {
27
+ const chain = CHAINS[options.chain];
28
+ if (!SUPPORT_CHAINS.includes(options.chain)) {
29
+ throw new Error(`${CHAINS[options.chain]} is not support on 1inch`);
30
+ }
31
+ const wrapTokenAddress = WrapTokenAddressMap[options.chain];
32
+ let calldata = "";
33
+ let value = "0";
34
+ if (options.fromToken === chain.nativeTokenAddress &&
35
+ isSameAddress(options.toToken, wrapTokenAddress)) {
36
+ calldata = abiCoder.encodeFunctionCall({
37
+ constant: false,
38
+ inputs: [],
39
+ name: "deposit",
40
+ outputs: [],
41
+ payable: true,
42
+ stateMutability: "payable",
43
+ type: "function",
44
+ }, []);
45
+ value = options.amount;
46
+ }
47
+ else {
48
+ calldata = abiCoder.encodeFunctionCall({
49
+ constant: false,
50
+ inputs: [{ name: "wad", type: "uint256" }],
51
+ name: "withdraw",
52
+ outputs: [],
53
+ payable: false,
54
+ stateMutability: "nonpayable",
55
+ type: "function",
56
+ }, [options.amount]);
57
+ }
58
+ return {
59
+ tx: {
60
+ from: options.userAddress,
61
+ to: wrapTokenAddress,
62
+ value,
63
+ data: calldata,
64
+ },
65
+ fromToken: options.fromToken,
66
+ fromTokenAmount: options.amount,
67
+ toToken: options.toToken,
68
+ toTokenAmount: options.amount,
69
+ spender: wrapTokenAddress,
70
+ };
71
+ });
@@ -0,0 +1,3 @@
1
+ import { WrapTokenAddressMap, DEX_ENUM, DEX_SUPPORT_CHAINS } from './consts';
2
+ import { getQuote } from './quote';
3
+ export { WrapTokenAddressMap, DEX_ENUM, DEX_SUPPORT_CHAINS, getQuote };
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import { WrapTokenAddressMap, DEX_ENUM, DEX_SUPPORT_CHAINS } from './consts';
2
+ import { getQuote } from './quote';
3
+ export { WrapTokenAddressMap, DEX_ENUM, DEX_SUPPORT_CHAINS, getQuote };
@@ -0,0 +1,33 @@
1
+ import { CHAINS_ENUM } from '@debank/common';
2
+ import { DEX_ENUM } from './consts';
3
+ export interface QuoteParams {
4
+ fromToken: string;
5
+ fromTokenDecimals: number;
6
+ toToken: string;
7
+ amount: string;
8
+ userAddress: string;
9
+ slippage: number;
10
+ feeRate?: number;
11
+ feeAddress?: string;
12
+ chain: CHAINS_ENUM;
13
+ }
14
+ export interface Tx {
15
+ from: string;
16
+ to: string;
17
+ data: string;
18
+ value: string;
19
+ chainId?: number;
20
+ gas?: number;
21
+ gasPrice?: string;
22
+ }
23
+ export interface QuoteResult {
24
+ tx: Tx;
25
+ fromToken: string;
26
+ fromTokenDecimals?: number;
27
+ fromTokenAmount: string;
28
+ toToken: string;
29
+ toTokenDecimals?: number;
30
+ toTokenAmount: string;
31
+ spender: string;
32
+ }
33
+ export declare const getQuote: (id: DEX_ENUM, params: QuoteParams) => Promise<QuoteResult>;
package/dist/quote.js ADDED
@@ -0,0 +1,28 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { DEX_ENUM } from './consts';
11
+ import { getQuote as wrapTokenGetQuote } from './dexs/wrapToken';
12
+ import { getQuote as oneInchGetQuote } from './dexs/1inch';
13
+ import { getQuote as zeroXGetQuote } from './dexs/0xapi';
14
+ import { getQuote as paraSwapGetQuote } from './dexs/paraswap';
15
+ export const getQuote = (id, params) => __awaiter(void 0, void 0, void 0, function* () {
16
+ switch (id) {
17
+ case DEX_ENUM.WRAPTOKEN:
18
+ return yield wrapTokenGetQuote(params);
19
+ case DEX_ENUM.ONEINCH:
20
+ return yield oneInchGetQuote(params);
21
+ case DEX_ENUM.PARASWAP:
22
+ return yield paraSwapGetQuote(params);
23
+ case DEX_ENUM.ZEROXAPI:
24
+ return yield zeroXGetQuote(params);
25
+ default:
26
+ throw new Error(`${id} is not supported!`);
27
+ }
28
+ });
@@ -0,0 +1 @@
1
+ export declare const isSameAddress: (addr1: string, addr2: string) => boolean;
package/dist/utils.js ADDED
@@ -0,0 +1,5 @@
1
+ export const isSameAddress = (addr1, addr2) => {
2
+ if (typeof addr1 !== 'string' || typeof addr2 !== 'string')
3
+ return false;
4
+ return addr1.toLowerCase() === addr2.toLowerCase();
5
+ };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@rabby-wallet/rabby-swap",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "",
5
- "main": "index.js",
5
+ "main": "dist/index.js",
6
6
  "scripts": {
7
7
  "test": "jest",
8
8
  "build": "rimraf dist && tsc",
package/src/dexs/0xapi.ts CHANGED
@@ -2,7 +2,7 @@ import axios from "axios";
2
2
  import { CHAINS_ENUM, CHAINS } from "@debank/common";
3
3
  import { QuoteParams, Tx, QuoteResult } from "../quote";
4
4
 
5
- const NATIVE_TOKEN = 'ETH';
5
+ const NATIVE_TOKEN = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
6
6
 
7
7
  const API_DOMAINS = {
8
8
  [CHAINS_ENUM.ETH]: "https://api.0x.org",
@@ -83,7 +83,7 @@ export const getQuote = async (options: QuoteParams): Promise<QuoteResult> => {
83
83
  };
84
84
 
85
85
  if (options.feeRate) {
86
- params.buyTokenPercentageFee = options.feeRate;
86
+ params.buyTokenPercentageFee = options.feeRate / 100;
87
87
  params.feeRecipient = options.feeAddress;
88
88
  }
89
89
 
@@ -100,18 +100,30 @@ export const getQuote = async (options: QuoteParams): Promise<QuoteResult> => {
100
100
 
101
101
  const { priceRoute } = await getPriceRoute({
102
102
  srcDecimals: options.fromTokenDecimals,
103
- srcToken: options.fromToken === CHAINS[options.chain].nativeTokenAddress ? NATIVE_TOKEN : options.fromToken,
104
- destToken: options.toToken === CHAINS[options.chain].nativeTokenAddress ? NATIVE_TOKEN : options.toToken,
103
+ srcToken:
104
+ options.fromToken === CHAINS[options.chain].nativeTokenAddress
105
+ ? NATIVE_TOKEN
106
+ : options.fromToken,
107
+ destToken:
108
+ options.toToken === CHAINS[options.chain].nativeTokenAddress
109
+ ? NATIVE_TOKEN
110
+ : options.toToken,
105
111
  amount: options.amount,
106
112
  userAddress: options.userAddress,
107
113
  network: chainId,
108
- includeContractMethods: 'simpleSwap,multiSwap,megaSwap',
114
+ includeContractMethods: "simpleSwap,multiSwap,megaSwap",
109
115
  });
110
116
 
111
117
  const params: SwapParams = {
112
- srcToken: options.fromToken === CHAINS[options.chain].nativeTokenAddress ? NATIVE_TOKEN : options.fromToken,
118
+ srcToken:
119
+ options.fromToken === CHAINS[options.chain].nativeTokenAddress
120
+ ? NATIVE_TOKEN
121
+ : options.fromToken,
113
122
  srcDecimals: options.fromTokenDecimals,
114
- destToken: options.toToken === CHAINS[options.chain].nativeTokenAddress ? NATIVE_TOKEN : options.toToken,
123
+ destToken:
124
+ options.toToken === CHAINS[options.chain].nativeTokenAddress
125
+ ? NATIVE_TOKEN
126
+ : options.toToken,
115
127
  srcAmount: options.amount,
116
128
  userAddress: options.userAddress,
117
129
  slippage: Math.floor(options.slippage * 100),
@@ -123,20 +135,25 @@ export const getQuote = async (options: QuoteParams): Promise<QuoteResult> => {
123
135
  params.partnerAddress = options.feeAddress;
124
136
  }
125
137
 
126
- const { data } = await request.get<Tx>(`/transactions/${chainId}`, {
138
+ const { data } = await request.post<Tx>(`/transactions/${chainId}`, params, {
127
139
  params: {
128
140
  ignoreChecks: true,
129
141
  ignoreGasEstimate: true,
130
142
  },
131
- data: params,
132
143
  });
133
-
144
+
134
145
  return {
135
146
  tx: data,
136
- fromToken: priceRoute.srcToken === NATIVE_TOKEN ? CHAINS[options.chain].nativeTokenAddress : priceRoute.srcToken,
147
+ fromToken:
148
+ priceRoute.srcToken === NATIVE_TOKEN
149
+ ? CHAINS[options.chain].nativeTokenAddress
150
+ : priceRoute.srcToken,
137
151
  fromTokenAmount: priceRoute.srcAmount,
138
152
  fromTokenDecimals: priceRoute.srcDecimals,
139
- toToken: priceRoute.destToken === NATIVE_TOKEN ? CHAINS[options.chain].nativeTokenAddress : priceRoute.destToken,
153
+ toToken:
154
+ priceRoute.destToken === NATIVE_TOKEN
155
+ ? CHAINS[options.chain].nativeTokenAddress
156
+ : priceRoute.destToken,
140
157
  toTokenAmount: priceRoute.destAmount,
141
158
  toTokenDecimals: priceRoute.destDecimals,
142
159
  spender: data.to,