curvance 3.1.10 → 3.1.12

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 (47) hide show
  1. package/dist/abis/SimpleZapper.json +11 -0
  2. package/dist/chains/index.d.ts +26 -24
  3. package/dist/chains/index.d.ts.map +1 -1
  4. package/dist/chains/monad-mainnet.json +14 -13
  5. package/dist/classes/CToken.d.ts +4 -5
  6. package/dist/classes/CToken.d.ts.map +1 -1
  7. package/dist/classes/CToken.js +8 -8
  8. package/dist/classes/CToken.js.map +1 -1
  9. package/dist/classes/DexAggregators/IDexAgg.d.ts +29 -0
  10. package/dist/classes/DexAggregators/IDexAgg.d.ts.map +1 -0
  11. package/dist/classes/DexAggregators/IDexAgg.js +3 -0
  12. package/dist/classes/DexAggregators/IDexAgg.js.map +1 -0
  13. package/dist/classes/DexAggregators/Kuru.d.ts +34 -0
  14. package/dist/classes/DexAggregators/Kuru.d.ts.map +1 -0
  15. package/dist/classes/DexAggregators/Kuru.js +169 -0
  16. package/dist/classes/DexAggregators/Kuru.js.map +1 -0
  17. package/dist/classes/DexAggregators/KuruMainnet.d.ts +1 -0
  18. package/dist/classes/DexAggregators/KuruMainnet.d.ts.map +1 -0
  19. package/dist/classes/DexAggregators/KuruMainnet.js +228 -0
  20. package/dist/classes/DexAggregators/KuruMainnet.js.map +1 -0
  21. package/dist/classes/DexAggregators/KyberSwap.d.ts +102 -0
  22. package/dist/classes/DexAggregators/KyberSwap.d.ts.map +1 -0
  23. package/dist/classes/DexAggregators/KyberSwap.js +101 -0
  24. package/dist/classes/DexAggregators/KyberSwap.js.map +1 -0
  25. package/dist/classes/DexAggregators/index.d.ts +3 -0
  26. package/dist/classes/DexAggregators/index.d.ts.map +1 -0
  27. package/dist/classes/DexAggregators/index.js +19 -0
  28. package/dist/classes/DexAggregators/index.js.map +1 -0
  29. package/dist/classes/Market.d.ts +2 -2
  30. package/dist/classes/Market.d.ts.map +1 -1
  31. package/dist/classes/Market.js +1 -1
  32. package/dist/classes/Market.js.map +1 -1
  33. package/dist/classes/Zapper.d.ts +2 -2
  34. package/dist/classes/Zapper.d.ts.map +1 -1
  35. package/dist/classes/Zapper.js +6 -6
  36. package/dist/classes/Zapper.js.map +1 -1
  37. package/dist/helpers.d.ts +16 -15
  38. package/dist/helpers.d.ts.map +1 -1
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +1 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/setup.d.ts +17 -8
  44. package/dist/setup.d.ts.map +1 -1
  45. package/dist/setup.js +4 -8
  46. package/dist/setup.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Kuru = void 0;
7
+ const decimal_js_1 = __importDefault(require("decimal.js"));
8
+ const ERC20_1 = require("../ERC20");
9
+ const helpers_1 = require("../../helpers");
10
+ const cached_jwt = new Map();
11
+ const cached_requests = new Map();
12
+ class Kuru {
13
+ api;
14
+ router;
15
+ jwt = null;
16
+ rps;
17
+ dao;
18
+ constructor(dao = "0x0Acb7eF4D8733C719d60e0992B489b629bc55C02", rps = 1, router = "0xb3e6778480b2E488385E8205eA05E20060B813cb", apiUrl = "https://ws.kuru.io/api") {
19
+ this.api = apiUrl;
20
+ this.router = router;
21
+ this.rps = rps;
22
+ this.dao = dao;
23
+ }
24
+ async loadJWT(wallet) {
25
+ if (cached_jwt.has(wallet)) {
26
+ const cached = cached_jwt.get(wallet);
27
+ const currentTime = this.getCurrentTime();
28
+ if (cached.expires_at > currentTime) {
29
+ this.jwt = cached.token;
30
+ this.rps = cached.rate_limit.rps;
31
+ return;
32
+ }
33
+ else {
34
+ cached_jwt.delete(wallet);
35
+ }
36
+ }
37
+ const resp = await fetch(`${this.api}/generate-token`, {
38
+ method: "POST",
39
+ headers: {
40
+ "Content-Type": "application/json",
41
+ },
42
+ body: JSON.stringify({
43
+ user_address: wallet,
44
+ }),
45
+ keepalive: true
46
+ });
47
+ if (!resp.ok) {
48
+ throw new Error(`Failed to fetch JWT: ${resp.status} ${resp.statusText}`);
49
+ }
50
+ const data = await resp.json();
51
+ this.jwt = data.token;
52
+ this.rps = data.rate_limit.rps;
53
+ cached_jwt.set(wallet, data);
54
+ }
55
+ async rateLimitSleep(wallet) {
56
+ const now = this.getCurrentTime();
57
+ const requests = cached_requests.get(wallet) || [];
58
+ const windowStart = now - 2;
59
+ const recentRequests = requests.filter(timestamp => timestamp > windowStart);
60
+ if (recentRequests.length >= this.rps) {
61
+ const earliestRequest = Math.min(...recentRequests);
62
+ const sleepTime = (earliestRequest + 2) - now;
63
+ await new Promise(resolve => setTimeout(resolve, sleepTime * 2000));
64
+ }
65
+ }
66
+ async getAvailableTokens(provider, query = null) {
67
+ const signer = (0, helpers_1.validateProviderAsSigner)(provider);
68
+ const userAddress = signer.address;
69
+ let endpoint = `https://api.kuru.io/api/v2/tokens/search?limit=20&userAddress=${userAddress}`;
70
+ if (query) {
71
+ endpoint += `&q=${encodeURIComponent(query)}`;
72
+ }
73
+ const resp = await fetch(endpoint, {
74
+ method: "GET",
75
+ headers: {
76
+ "Content-Type": "application/json",
77
+ }
78
+ });
79
+ if (!resp.ok) {
80
+ throw new Error(`Failed to fetch available tokens: ${resp.status} ${resp.statusText}`);
81
+ }
82
+ const list = await resp.json();
83
+ let tokens = [];
84
+ for (const token of list.data.data) {
85
+ const erc20 = new ERC20_1.ERC20(provider, token.address, {
86
+ address: token.address,
87
+ name: token.name,
88
+ symbol: token.ticker,
89
+ decimals: BigInt(token.decimals ?? 18),
90
+ totalSupply: BigInt(token.total_supply ?? 0),
91
+ balance: BigInt(token.balance ?? 0),
92
+ image: token.imageurl,
93
+ price: (0, decimal_js_1.default)(token.last_price).div(helpers_1.WAD)
94
+ });
95
+ tokens.push({
96
+ interface: erc20,
97
+ type: 'simple',
98
+ quote: async (tokenIn, tokenOut, amount, slippage) => {
99
+ const raw_amount = (0, helpers_1.toBigInt)(amount, 18n);
100
+ const data = await this.quote(signer.address, tokenIn, tokenOut, raw_amount, slippage);
101
+ return {
102
+ out: (0, helpers_1.toDecimal)(BigInt(data.out ?? 0), BigInt(token.decimals ?? 18)),
103
+ min_out: (0, helpers_1.toDecimal)(BigInt(data.min_out ?? 0), BigInt(token.decimals ?? 18)),
104
+ };
105
+ }
106
+ });
107
+ }
108
+ return tokens;
109
+ }
110
+ // Get current time in seconds
111
+ getCurrentTime() {
112
+ return Math.floor(Date.now() / 1000);
113
+ }
114
+ async quoteAction(wallet, tokenIn, tokenOut, amount, slippage) {
115
+ const quote = await this.quote(wallet, tokenIn, tokenOut, amount, slippage);
116
+ const action = {
117
+ inputToken: tokenIn,
118
+ inputAmount: BigInt(amount),
119
+ outputToken: tokenOut,
120
+ target: quote.to,
121
+ slippage: slippage ?? 0n,
122
+ call: quote.calldata
123
+ };
124
+ return { action, quote };
125
+ }
126
+ async quoteMin(wallet, tokenIn, tokenOut, amount, slippage) {
127
+ const quote = await this.quote(wallet, tokenIn, tokenOut, amount, slippage);
128
+ return quote.out;
129
+ }
130
+ async quote(wallet, tokenIn, tokenOut, amount, slippage) {
131
+ await this.loadJWT(wallet);
132
+ await this.rateLimitSleep(wallet);
133
+ const payload = {
134
+ userAddress: wallet,
135
+ tokenIn: tokenIn,
136
+ tokenOut: tokenOut,
137
+ amount: amount.toString(),
138
+ referrerAddress: this.dao,
139
+ referrerFeeBps: 10,
140
+ slippage_tolerance: Number(slippage)
141
+ };
142
+ cached_requests.set(wallet, (cached_requests.get(wallet) || []).concat(this.getCurrentTime()));
143
+ const resp = await fetch(`${this.api}/quote`, {
144
+ method: "POST",
145
+ headers: {
146
+ "Content-Type": "application/json",
147
+ "Authorization": `Bearer ${this.jwt}`
148
+ },
149
+ body: JSON.stringify(payload),
150
+ });
151
+ if (!resp.ok) {
152
+ throw new Error(`Failed to fetch quote: ${resp.status} ${resp.statusText}`);
153
+ }
154
+ const data = await resp.json();
155
+ return {
156
+ to: data.transaction.to,
157
+ calldata: `0x${data.transaction.calldata}`,
158
+ min_out: BigInt(data.minOut),
159
+ out: BigInt(data.output)
160
+ };
161
+ }
162
+ getSlippage(output, min_output) {
163
+ const diff = output - min_output;
164
+ const decimal = (0, decimal_js_1.default)(diff).div(output).mul(100);
165
+ return decimal ?? (0, decimal_js_1.default)(100);
166
+ }
167
+ }
168
+ exports.Kuru = Kuru;
169
+ //# sourceMappingURL=Kuru.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Kuru.js","sourceRoot":"","sources":["../../../src/classes/DexAggregators/Kuru.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=KuruMainnet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KuruMainnet.d.ts","sourceRoot":"","sources":["../../../src/classes/DexAggregators/KuruMainnet.ts"],"names":[],"mappings":""}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ // import Decimal from "decimal.js";
3
+ // import { address, curvance_provider, TokenInput } from "../../types";
4
+ // import { ERC20 } from "../ERC20";
5
+ // import { toBigInt, toDecimal, validateProviderAsSigner, WAD } from "../../helpers";
6
+ // import { ZapToken } from "../CToken";
7
+ // import { Swap } from "../Zapper";
8
+ // interface KuruJWTResponse {
9
+ // token: string;
10
+ // expires_at: number;
11
+ // rate_limit: {
12
+ // rps: number;
13
+ // burst: number;
14
+ // }
15
+ // }
16
+ // interface KuruQuoteResponse {
17
+ // type: string;
18
+ // status: string;
19
+ // output: string;
20
+ // minOut: string;
21
+ // transaction: {
22
+ // calldata: string;
23
+ // value: string;
24
+ // to: string;
25
+ // };
26
+ // gasPrices: {
27
+ // slow: string;
28
+ // standard: string;
29
+ // fast: string;
30
+ // rapid: string;
31
+ // extreme: string;
32
+ // };
33
+ // }
34
+ // const cached_jwt = new Map<string, KuruJWTResponse>();
35
+ // const cached_requests = new Map<string, number[]>();
36
+ // export default class KuruMainnet {
37
+ // static api = "https://ws.kuru.io/api"
38
+ // static router = "0xb3e6778480b2E488385E8205eA05E20060B813cb" as address; // KuruFlowEntrypoint
39
+ // jwt: string | null = null;
40
+ // rps = 1;
41
+ // dao = "0x0Acb7eF4D8733C719d60e0992B489b629bc55C02" as address;
42
+ // async loadJWT(wallet: string) {
43
+ // if(cached_jwt.has(wallet)) {
44
+ // const cached = cached_jwt.get(wallet)!;
45
+ // const currentTime = KuruMainnet.getCurrentTime();
46
+ // if(cached.expires_at > currentTime) {
47
+ // this.jwt = cached.token;
48
+ // this.rps = cached.rate_limit.rps;
49
+ // return;
50
+ // } else {
51
+ // cached_jwt.delete(wallet);
52
+ // }
53
+ // }
54
+ // const resp = await fetch(`${KuruMainnet.api}/generate-token`, {
55
+ // method: "POST",
56
+ // headers: {
57
+ // "Content-Type": "application/json",
58
+ // },
59
+ // body: JSON.stringify({
60
+ // user_address: wallet,
61
+ // }),
62
+ // keepalive: true
63
+ // });
64
+ // if(!resp.ok) {
65
+ // throw new Error(`Failed to fetch JWT: ${resp.status} ${resp.statusText}`);
66
+ // }
67
+ // const data = await resp.json() as KuruJWTResponse;
68
+ // this.jwt = data.token;
69
+ // this.rps = data.rate_limit.rps;
70
+ // cached_jwt.set(wallet, data);
71
+ // }
72
+ // async rateLimitSleep(wallet: string) {
73
+ // const now = KuruMainnet.getCurrentTime();
74
+ // const requests = cached_requests.get(wallet) || [];
75
+ // const windowStart = now - 2;
76
+ // const recentRequests = requests.filter(timestamp => timestamp > windowStart);
77
+ // if(recentRequests.length >= this.rps) {
78
+ // const earliestRequest = Math.min(...recentRequests);
79
+ // const sleepTime = (earliestRequest + 2) - now;
80
+ // await new Promise(resolve => setTimeout(resolve, sleepTime * 2000));
81
+ // }
82
+ // }
83
+ // static async getAvailableTokens(provider: curvance_provider, query: string | null = null) {
84
+ // const signer = validateProviderAsSigner(provider);
85
+ // const userAddress = signer.address;
86
+ // let endpoint = `https://api.kuru.io/api/v2/tokens/search?limit=20&userAddress=${userAddress}`;
87
+ // if(query) {
88
+ // endpoint += `&q=${encodeURIComponent(query)}`;
89
+ // }
90
+ // const resp = await fetch(endpoint, {
91
+ // method: "GET",
92
+ // headers: {
93
+ // "Content-Type": "application/json",
94
+ // }
95
+ // });
96
+ // if(!resp.ok) {
97
+ // throw new Error(`Failed to fetch available tokens: ${resp.status} ${resp.statusText}`);
98
+ // }
99
+ // const list = await resp.json() as {
100
+ // success: boolean;
101
+ // code: number;
102
+ // timestamp: number;
103
+ // data: {
104
+ // data: Array<{
105
+ // address: string;
106
+ // decimals: number;
107
+ // name: string;
108
+ // ticker: string;
109
+ // imageurl: string,
110
+ // twitter: string,
111
+ // website: string,
112
+ // is_verified: boolean,
113
+ // contract_renounced: boolean,
114
+ // is_erc20: boolean,
115
+ // is_mintable: boolean,
116
+ // is_strict: boolean,
117
+ // balance: string,
118
+ // last_price: string,
119
+ // quote_asset: string,
120
+ // market_address: string,
121
+ // total_supply: string,
122
+ // burned_supply: string
123
+ // }>
124
+ // }
125
+ // };
126
+ // let tokens: ZapToken[] = [];
127
+ // for(const token of list.data.data) {
128
+ // const erc20 = new ERC20(
129
+ // provider,
130
+ // token.address as address,
131
+ // {
132
+ // address: token.address as address,
133
+ // name: token.name,
134
+ // symbol: token.ticker,
135
+ // decimals: BigInt(token.decimals ?? 18),
136
+ // totalSupply: BigInt(token.total_supply ?? 0),
137
+ // balance: BigInt(token.balance ?? 0),
138
+ // image: token.imageurl,
139
+ // price: Decimal(token.last_price).div(WAD)
140
+ // },
141
+ // );
142
+ // tokens.push({
143
+ // interface: erc20,
144
+ // type: 'simple',
145
+ // quote: async(tokenIn: string, tokenOut: string, amount: TokenInput, slippageTolerance: bigint | null = null) => {
146
+ // const raw_amount = toBigInt(amount, 18n);
147
+ // const data = await KuruMainnet.quote(signer.address, tokenIn, tokenOut, raw_amount.toString(), slippageTolerance);
148
+ // return {
149
+ // output: toDecimal(BigInt(data.output ?? 0), BigInt(token.decimals ?? 18)),
150
+ // minOut: toDecimal(BigInt(data.minOut ?? 0), BigInt(token.decimals ?? 18)),
151
+ // max_slippage: data.max_slippage
152
+ // };
153
+ // }
154
+ // });
155
+ // }
156
+ // return tokens;
157
+ // }
158
+ // // Get current time in seconds
159
+ // static getCurrentTime() {
160
+ // return Math.floor(Date.now() / 1000);
161
+ // }
162
+ // static async quoteAction(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance: bigint | null = null) {
163
+ // const quote = await KuruMainnet.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
164
+ // const action = {
165
+ // inputToken: tokenIn,
166
+ // inputAmount: BigInt(amount),
167
+ // outputToken: tokenOut,
168
+ // target: quote.transaction.to,
169
+ // slippage: slippageTolerance ?? 0n,
170
+ // call: `0x${quote.transaction.calldata}`
171
+ // } as Swap;
172
+ // return { action, quote };
173
+ // }
174
+ // static async quoteMin(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance: bigint | null = null) {
175
+ // const quote = await KuruMainnet.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
176
+ // return quote.minOut;
177
+ // }
178
+ // static async quote(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance: bigint | null = null) {
179
+ // const kuru = new this();
180
+ // await kuru.loadJWT(wallet);
181
+ // await kuru.rateLimitSleep(wallet);
182
+ // const payload: {
183
+ // userAddress: string;
184
+ // tokenIn: string;
185
+ // tokenOut: string;
186
+ // amount: string;
187
+ // referrerAddress?: string;
188
+ // referrerFeeBps?: number;
189
+ // slippage_tolerance?: number;
190
+ // autoSlippage?: boolean;
191
+ // } = {
192
+ // userAddress: wallet,
193
+ // tokenIn: tokenIn,
194
+ // tokenOut: tokenOut,
195
+ // amount: amount,
196
+ // referrerAddress: kuru.dao,
197
+ // referrerFeeBps: 10,
198
+ // };
199
+ // if(!slippageTolerance) {
200
+ // payload.autoSlippage = true;
201
+ // } else {
202
+ // payload.slippage_tolerance = Number(slippageTolerance);
203
+ // }
204
+ // cached_requests.set(wallet, (cached_requests.get(wallet) || []).concat(KuruMainnet.getCurrentTime()));
205
+ // const resp = await fetch(`${KuruMainnet.api}/quote`, {
206
+ // method: "POST",
207
+ // headers: {
208
+ // "Content-Type": "application/json",
209
+ // "Authorization": `Bearer ${kuru.jwt}`
210
+ // },
211
+ // body: JSON.stringify(payload),
212
+ // });
213
+ // if(!resp.ok) {
214
+ // throw new Error(`Failed to fetch quote: ${resp.status} ${resp.statusText}`);
215
+ // }
216
+ // const data = await resp.json() as KuruQuoteResponse;
217
+ // return {
218
+ // ...data,
219
+ // max_slippage: KuruMainnet.getSlippage(BigInt(data.output ?? 0), BigInt(data.minOut ?? 0))
220
+ // };
221
+ // }
222
+ // static getSlippage(output: bigint, min_output: bigint) {
223
+ // const diff = output - min_output;
224
+ // const decimal = Decimal(diff).div(output).mul(100);
225
+ // return decimal ?? Decimal(100);
226
+ // }
227
+ // }
228
+ //# sourceMappingURL=KuruMainnet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KuruMainnet.js","sourceRoot":"","sources":["../../../src/classes/DexAggregators/KuruMainnet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { address, bytes, curvance_provider } from "../../types";
2
+ import { ZapToken } from "../CToken";
3
+ import IDexAgg from "./IDexAgg";
4
+ import { Swap } from "../Zapper";
5
+ export interface KyperSwapErrorResponse {
6
+ code: number;
7
+ message: string;
8
+ requestId: string;
9
+ }
10
+ export interface KyberSwapQuoteResponse {
11
+ message: string;
12
+ data: {
13
+ routeSummary: {
14
+ tokenIn: string;
15
+ amountIn: string;
16
+ amountInUsd: string;
17
+ tokenOut: string;
18
+ amountOut: string;
19
+ amountOutUsd: string;
20
+ gas: string;
21
+ gasPrice: string;
22
+ gasUsd: string;
23
+ l1FeeUsd: string;
24
+ routeID: string;
25
+ checksum: string;
26
+ timestamp: number;
27
+ extraFee: {
28
+ feeAmount: string;
29
+ chargeFeeBy: string;
30
+ isInBps: boolean;
31
+ feeReceiver: string;
32
+ };
33
+ route: [
34
+ {
35
+ pool: string;
36
+ tokenIn: string;
37
+ tokenOut: string;
38
+ swapAmount: string;
39
+ amountOut: string;
40
+ exchange: string;
41
+ poolType: string;
42
+ poolExtra: any;
43
+ extra: any;
44
+ }[]
45
+ ];
46
+ };
47
+ routerAddress: string;
48
+ };
49
+ requestId: string;
50
+ }
51
+ export interface KyperSwapBuildResponse {
52
+ code: number;
53
+ message: string;
54
+ data: {
55
+ amountIn: string;
56
+ amountInUsd: string;
57
+ amountOut: string;
58
+ amountOutUsd: string;
59
+ gas: string;
60
+ gasUsd: string;
61
+ additionalCostUsd: string;
62
+ additionalCostMessage: string;
63
+ outputChange: {
64
+ amount: string;
65
+ percent: number;
66
+ level: number;
67
+ };
68
+ data: string;
69
+ routerAddress: string;
70
+ transactionValue: string;
71
+ };
72
+ requestId: string;
73
+ }
74
+ export declare class KyberSwap implements IDexAgg {
75
+ api: string;
76
+ dao: address;
77
+ router: address;
78
+ chain: string;
79
+ client_id: string;
80
+ constructor(dao?: address, router?: address, // TODO: Replace with actual KyberSwap router address
81
+ chain?: string, api?: string);
82
+ getAvailableTokens(provider: curvance_provider, query?: string | null): Promise<ZapToken[]>;
83
+ quoteAction(wallet: string, tokenIn: string, tokenOut: string, amount: bigint, slippage: bigint): Promise<{
84
+ action: Swap;
85
+ quote: {
86
+ to: address;
87
+ calldata: bytes;
88
+ min_out: bigint;
89
+ out: bigint;
90
+ raw: KyperSwapBuildResponse;
91
+ };
92
+ }>;
93
+ quoteMin(wallet: string, tokenIn: string, tokenOut: string, amount: bigint, slippage: bigint): Promise<bigint>;
94
+ quote(wallet: string, tokenIn: string, tokenOut: string, amount: bigint, slippage: bigint): Promise<{
95
+ to: address;
96
+ calldata: bytes;
97
+ min_out: bigint;
98
+ out: bigint;
99
+ raw: KyperSwapBuildResponse;
100
+ }>;
101
+ }
102
+ //# sourceMappingURL=KyberSwap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KyberSwap.d.ts","sourceRoot":"","sources":["../../../src/classes/DexAggregators/KyberSwap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KyberSwap = void 0;
4
+ ;
5
+ class KyberSwap {
6
+ api;
7
+ dao;
8
+ router;
9
+ chain;
10
+ client_id = "curvance-sdk";
11
+ constructor(dao = "0x0Acb7eF4D8733C719d60e0992B489b629bc55C02", router = "0x00", // TODO: Replace with actual KyberSwap router address
12
+ chain = "monad-mainnet", api = "https://aggregator-api.kyberswap.com") {
13
+ // KyberSwap uses 'monad' instead of 'monad-mainnet' like other providers, so we adjust here
14
+ if (chain == "monad-mainnet") {
15
+ chain = 'monad';
16
+ }
17
+ this.dao = dao;
18
+ this.router = router;
19
+ this.chain = chain;
20
+ this.api = `${api}/${this.chain}`;
21
+ }
22
+ async getAvailableTokens(provider, query = null) {
23
+ let tokens = [];
24
+ // https://ks-setting.kyberswap.com/api/v1/tokens?query=chog&chainIds=143&page=1&pageSize=20
25
+ return tokens;
26
+ }
27
+ async quoteAction(wallet, tokenIn, tokenOut, amount, slippage) {
28
+ const quote = await this.quote(wallet, tokenIn, tokenOut, amount, slippage);
29
+ const action = {
30
+ inputToken: tokenIn,
31
+ inputAmount: BigInt(amount),
32
+ outputToken: tokenOut,
33
+ target: quote.to,
34
+ slippage: slippage ?? 0n,
35
+ call: quote.calldata
36
+ };
37
+ return { action, quote };
38
+ }
39
+ async quoteMin(wallet, tokenIn, tokenOut, amount, slippage) {
40
+ const quote = await this.quote(wallet, tokenIn, tokenOut, amount, slippage);
41
+ return quote.out;
42
+ }
43
+ async quote(wallet, tokenIn, tokenOut, amount, slippage) {
44
+ const params = new URLSearchParams({
45
+ tokenIn,
46
+ tokenOut,
47
+ amountIn: amount.toString()
48
+ // feeAmount
49
+ // chargeFeeBy
50
+ // isInBps
51
+ // feeReceiver
52
+ });
53
+ const quote_response = await fetch(`${this.api}/api/v1/routes?${params.toString()}`, {
54
+ method: 'GET',
55
+ headers: {
56
+ 'X-Client-Id': this.client_id,
57
+ 'Content-Type': 'application/json'
58
+ }
59
+ });
60
+ if (!quote_response.ok) {
61
+ const error_return = await quote_response.json();
62
+ throw new Error(`KyberSwap API request failed [${error_return.requestId}]: ${error_return.message} (code: ${error_return.code})`);
63
+ }
64
+ const quote = await quote_response.json();
65
+ const build_response = await fetch(`${this.api}/api/v1/route/build`, {
66
+ method: 'POST',
67
+ headers: {
68
+ 'X-Client-Id': this.client_id,
69
+ 'Content-Type': 'application/json'
70
+ },
71
+ body: JSON.stringify({
72
+ routeSummary: quote.data.routeSummary,
73
+ origin: wallet,
74
+ sender: wallet,
75
+ recipient: wallet,
76
+ slippageTolerance: Number(slippage),
77
+ referral: this.dao
78
+ })
79
+ });
80
+ if (!build_response.ok) {
81
+ const error_return = await build_response.json();
82
+ throw new Error(`KyberSwap API build request failed [${error_return.requestId}]: ${error_return.message} (code: ${error_return.code})`);
83
+ }
84
+ const build_data = await build_response.json();
85
+ // I need to figure out what min_out is by applying the slippage which is in bps to build_data.amountOut
86
+ const min_out = BigInt(build_data.data.amountOut) * BigInt(10000n - slippage) / BigInt(10000);
87
+ // TODO: Uncomment once we have deployed calldata checker and are supporting the address
88
+ // if(build_data.data.routerAddress != this.router) {
89
+ // throw new Error(`KyberSwap returned unexpected router address: ${build_data.data.routerAddress}`);
90
+ // }
91
+ return {
92
+ to: build_data.data.routerAddress,
93
+ calldata: build_data.data.data,
94
+ min_out: min_out,
95
+ out: BigInt(build_data.data.amountOut),
96
+ raw: build_data
97
+ };
98
+ }
99
+ }
100
+ exports.KyberSwap = KyberSwap;
101
+ //# sourceMappingURL=KyberSwap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KyberSwap.js","sourceRoot":"","sources":["../../../src/classes/DexAggregators/KyberSwap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './Kuru';
2
+ export * from './KyberSwap';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/classes/DexAggregators/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}