curvance 5.1.7 → 5.1.9

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 (50) hide show
  1. package/README.md +2 -5
  2. package/dist/classes/CToken.d.ts +8 -14
  3. package/dist/classes/CToken.d.ts.map +1 -1
  4. package/dist/classes/CToken.js +8 -81
  5. package/dist/classes/CToken.js.map +1 -1
  6. package/dist/classes/LendingOptimizer.d.ts +7 -0
  7. package/dist/classes/LendingOptimizer.d.ts.map +1 -1
  8. package/dist/classes/LendingOptimizer.js +4 -0
  9. package/dist/classes/LendingOptimizer.js.map +1 -1
  10. package/dist/classes/index.d.ts +0 -1
  11. package/dist/classes/index.d.ts.map +1 -1
  12. package/dist/classes/index.js +0 -1
  13. package/dist/classes/index.js.map +1 -1
  14. package/dist/contracts/index.d.ts +4 -0
  15. package/dist/contracts/index.d.ts.map +1 -1
  16. package/dist/contracts/monad-mainnet.json +4 -0
  17. package/dist/helpers.d.ts +4 -0
  18. package/dist/helpers.d.ts.map +1 -1
  19. package/package.json +1 -2
  20. package/dist/chains/arb-sepolia.json +0 -44
  21. package/dist/chains/monad-mainnet.json +0 -220
  22. package/dist/chains/monad-testnet.json +0 -83
  23. package/dist/classes/CVE.d.ts +0 -7
  24. package/dist/classes/CVE.d.ts.map +0 -1
  25. package/dist/classes/CVE.js +0 -7
  26. package/dist/classes/CVE.js.map +0 -1
  27. package/dist/classes/DexAggregators/KuruMainnet.d.ts +0 -1
  28. package/dist/classes/DexAggregators/KuruMainnet.d.ts.map +0 -1
  29. package/dist/classes/DexAggregators/KuruMainnet.js +0 -228
  30. package/dist/classes/DexAggregators/KuruMainnet.js.map +0 -1
  31. package/dist/classes/Faucet.d.ts +0 -23
  32. package/dist/classes/Faucet.d.ts.map +0 -1
  33. package/dist/classes/Faucet.js +0 -55
  34. package/dist/classes/Faucet.js.map +0 -1
  35. package/dist/classes/Kuru.d.ts +0 -59
  36. package/dist/classes/Kuru.d.ts.map +0 -1
  37. package/dist/classes/Kuru.js +0 -167
  38. package/dist/classes/Kuru.js.map +0 -1
  39. package/dist/classes/KuruMainnet.d.ts +0 -59
  40. package/dist/classes/KuruMainnet.d.ts.map +0 -1
  41. package/dist/classes/KuruMainnet.js +0 -167
  42. package/dist/classes/KuruMainnet.js.map +0 -1
  43. package/dist/classes/Redstone.d.ts +0 -15
  44. package/dist/classes/Redstone.d.ts.map +0 -1
  45. package/dist/classes/Redstone.js +0 -56
  46. package/dist/classes/Redstone.js.map +0 -1
  47. package/dist/snapshot.d.ts +0 -53
  48. package/dist/snapshot.d.ts.map +0 -1
  49. package/dist/snapshot.js +0 -103
  50. package/dist/snapshot.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"Faucet.js","sourceRoot":"","sources":["../../src/classes/Faucet.ts"],"names":[],"mappings":";;;AAAA,wCAA2C;AAI3C,oCAAwC;AASxC,MAAa,MAAM;IACf,QAAQ,CAAoB;IAC5B,OAAO,CAAU;IACjB,QAAQ,CAAqB;IAE7B,aAAa,GAAG;QACZ,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;KACT,CAAC;IAEF,YAAY,OAAgB,EAAE,WAA8B,oBAAY,CAAC,QAAQ;QAC7E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAU,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;YAC3D,8EAA8E;YAC9E,oFAAoF;YACpF,kEAAkE;YAClE,0CAA0C;SAC7C,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAa,EAAE,KAAc;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAa,EAAE,MAAiB;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAElE,IAAI,WAAW,GAAW,EAAE,CAAC;QAC7B,KAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAiB;QACnC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,GAAG,GAAgC,EAAE,CAAC;QAC1C,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;YACnC,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;QAC3B,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAgB;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;CACJ;AAxDD,wBAwDC"}
@@ -1,59 +0,0 @@
1
- import Decimal from "decimal.js";
2
- import { address, curvance_provider } from "../types";
3
- import { ZapToken } from "./CToken";
4
- import { Swap } from "./Zapper";
5
- export default class Kuru {
6
- api: string;
7
- static router: address;
8
- jwt: string | null;
9
- rps: number;
10
- dao: address;
11
- loadJWT(wallet: string): Promise<void>;
12
- rateLimitSleep(wallet: string): Promise<void>;
13
- static getAvailableTokens(provider: curvance_provider, query?: string | null): Promise<ZapToken[]>;
14
- static getCurrentTime(): number;
15
- static quoteAction(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<{
16
- action: Swap;
17
- quote: {
18
- max_slippage: Decimal;
19
- type: string;
20
- status: string;
21
- output: string;
22
- minOut: string;
23
- transaction: {
24
- calldata: string;
25
- value: string;
26
- to: string;
27
- };
28
- gasPrices: {
29
- slow: string;
30
- standard: string;
31
- fast: string;
32
- rapid: string;
33
- extreme: string;
34
- };
35
- };
36
- }>;
37
- static quoteMin(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<string>;
38
- static quote(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<{
39
- max_slippage: Decimal;
40
- type: string;
41
- status: string;
42
- output: string;
43
- minOut: string;
44
- transaction: {
45
- calldata: string;
46
- value: string;
47
- to: string;
48
- };
49
- gasPrices: {
50
- slow: string;
51
- standard: string;
52
- fast: string;
53
- rapid: string;
54
- extreme: string;
55
- };
56
- }>;
57
- static getSlippage(output: bigint, min_output: bigint): Decimal;
58
- }
59
- //# sourceMappingURL=Kuru.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Kuru.d.ts","sourceRoot":"","sources":["../../src/classes/Kuru.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAiChC,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,GAAG,SAAmC;IACtC,MAAM,CAAC,MAAM,EAAmD,OAAO,CAAC;IACxE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1B,GAAG,SAAK;IACR,GAAG,EAAmD,OAAO,CAAC;IAExD,OAAO,CAAC,MAAM,EAAE,MAAM;IAoCtB,cAAc,CAAC,MAAM,EAAE,MAAM;WAatB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW;IAoFxF,MAAM,CAAC,cAAc;WAIR,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;;;;kBArK7H,MAAM;oBACJ,MAAM;oBACN,MAAM;oBACN,MAAM;yBACD;gBACT,QAAQ,EAAE,MAAM,CAAC;gBACjB,KAAK,EAAE,MAAM,CAAC;gBACd,EAAE,EAAE,MAAM,CAAC;aACd;uBACU;gBACP,IAAI,EAAE,MAAM,CAAC;gBACb,QAAQ,EAAE,MAAM,CAAC;gBACjB,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,MAAM,CAAC;gBACd,OAAO,EAAE,MAAM,CAAC;aACnB;;;WAoKY,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;WAKnH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;;cAxLvH,MAAM;gBACJ,MAAM;gBACN,MAAM;gBACN,MAAM;qBACD;YACT,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,EAAE,EAAE,MAAM,CAAC;SACd;mBACU;YACP,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;SACnB;;IA4ND,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKxD"}
@@ -1,167 +0,0 @@
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
- const decimal_js_1 = __importDefault(require("decimal.js"));
7
- const ERC20_1 = require("./ERC20");
8
- const helpers_1 = require("../helpers");
9
- const cached_jwt = new Map();
10
- const cached_requests = new Map();
11
- class Kuru {
12
- api = "https://ws.staging.kuru.io/api";
13
- static router = "0x96eaC98928437496DdD0Cd2080E54Fe78BaC99b6"; // KuruFlowEntrypoint
14
- jwt = null;
15
- rps = 1;
16
- dao = "0x0Acb7eF4D8733C719d60e0992B489b629bc55C02";
17
- async loadJWT(wallet) {
18
- if (cached_jwt.has(wallet)) {
19
- const cached = cached_jwt.get(wallet);
20
- const currentTime = Kuru.getCurrentTime();
21
- if (cached.expires_at > currentTime) {
22
- this.jwt = cached.token;
23
- this.rps = cached.rate_limit.rps;
24
- return;
25
- }
26
- else {
27
- cached_jwt.delete(wallet);
28
- }
29
- }
30
- const resp = await fetch(`${this.api}/generate-token`, {
31
- method: "POST",
32
- headers: {
33
- "Content-Type": "application/json",
34
- },
35
- body: JSON.stringify({
36
- user_address: wallet,
37
- }),
38
- keepalive: true
39
- });
40
- if (!resp.ok) {
41
- throw new Error(`Failed to fetch JWT: ${resp.status} ${resp.statusText}`);
42
- }
43
- const data = await resp.json();
44
- this.jwt = data.token;
45
- this.rps = data.rate_limit.rps;
46
- cached_jwt.set(wallet, data);
47
- }
48
- async rateLimitSleep(wallet) {
49
- const now = Kuru.getCurrentTime();
50
- const requests = cached_requests.get(wallet) || [];
51
- const windowStart = now - 2;
52
- const recentRequests = requests.filter(timestamp => timestamp > windowStart);
53
- if (recentRequests.length >= this.rps) {
54
- const earliestRequest = Math.min(...recentRequests);
55
- const sleepTime = (earliestRequest + 2) - now;
56
- await new Promise(resolve => setTimeout(resolve, sleepTime * 2000));
57
- }
58
- }
59
- static async getAvailableTokens(provider, query = null) {
60
- const signer = (0, helpers_1.validateProviderAsSigner)(provider);
61
- const userAddress = signer.address;
62
- let endpoint = `https://api.kuru.io/api/v2/tokens/search?limit=20&userAddress=${userAddress}`;
63
- if (query) {
64
- endpoint += `&q=${encodeURIComponent(query)}`;
65
- }
66
- const resp = await fetch(endpoint, {
67
- method: "GET",
68
- headers: {
69
- "Content-Type": "application/json",
70
- }
71
- });
72
- if (!resp.ok) {
73
- throw new Error(`Failed to fetch available tokens: ${resp.status} ${resp.statusText}`);
74
- }
75
- const list = await resp.json();
76
- let tokens = [];
77
- for (const token of list.data.data) {
78
- const erc20 = new ERC20_1.ERC20(provider, token.address, {
79
- address: token.address,
80
- name: token.name,
81
- symbol: token.ticker,
82
- decimals: BigInt(token.decimals ?? 18),
83
- totalSupply: BigInt(token.total_supply ?? 0),
84
- balance: BigInt(token.balance ?? 0),
85
- image: token.imageurl,
86
- price: (0, decimal_js_1.default)(token.last_price).div(helpers_1.WAD)
87
- });
88
- tokens.push({
89
- interface: erc20,
90
- type: 'simple',
91
- quote: async (tokenIn, tokenOut, amount, slippageTolerance = null) => {
92
- const raw_amount = (0, helpers_1.toBigInt)(amount, 18n);
93
- const data = await Kuru.quote(signer.address, tokenIn, tokenOut, raw_amount.toString(), slippageTolerance);
94
- return {
95
- output: (0, helpers_1.toDecimal)(BigInt(data.output ?? 0), BigInt(token.decimals ?? 18)),
96
- minOut: (0, helpers_1.toDecimal)(BigInt(data.minOut ?? 0), BigInt(token.decimals ?? 18)),
97
- max_slippage: data.max_slippage
98
- };
99
- }
100
- });
101
- }
102
- return tokens;
103
- }
104
- // Get current time in seconds
105
- static getCurrentTime() {
106
- return Math.floor(Date.now() / 1000);
107
- }
108
- static async quoteAction(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
109
- const quote = await Kuru.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
110
- const action = {
111
- inputToken: tokenIn,
112
- inputAmount: BigInt(amount),
113
- outputToken: tokenOut,
114
- target: quote.transaction.to,
115
- slippage: slippageTolerance ?? 0n,
116
- call: `0x${quote.transaction.calldata}`
117
- };
118
- return { action, quote };
119
- }
120
- static async quoteMin(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
121
- const quote = await Kuru.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
122
- return quote.minOut;
123
- }
124
- static async quote(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
125
- const kuru = new this();
126
- await kuru.loadJWT(wallet);
127
- await kuru.rateLimitSleep(wallet);
128
- const payload = {
129
- userAddress: wallet,
130
- tokenIn: tokenIn,
131
- tokenOut: tokenOut,
132
- amount: amount,
133
- referrerAddress: kuru.dao,
134
- referrerFeeBps: 10,
135
- };
136
- if (!slippageTolerance) {
137
- payload.autoSlippage = true;
138
- }
139
- else {
140
- payload.slippage_tolerance = Number(slippageTolerance);
141
- }
142
- cached_requests.set(wallet, (cached_requests.get(wallet) || []).concat(Kuru.getCurrentTime()));
143
- const resp = await fetch(`${kuru.api}/quote`, {
144
- method: "POST",
145
- headers: {
146
- "Content-Type": "application/json",
147
- "Authorization": `Bearer ${kuru.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
- ...data,
157
- max_slippage: Kuru.getSlippage(BigInt(data.output ?? 0), BigInt(data.minOut ?? 0))
158
- };
159
- }
160
- static getSlippage(output, min_output) {
161
- const diff = output - min_output;
162
- const decimal = (0, decimal_js_1.default)(diff).div(output).mul(100);
163
- return decimal ?? (0, decimal_js_1.default)(100);
164
- }
165
- }
166
- exports.default = Kuru;
167
- //# sourceMappingURL=Kuru.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Kuru.js","sourceRoot":"","sources":["../../src/classes/Kuru.ts"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- import Decimal from "decimal.js";
2
- import { address, curvance_provider } from "../types";
3
- import { ZapToken } from "./CToken";
4
- import { Swap } from "./Zapper";
5
- export default class KuruMainnet {
6
- static api: string;
7
- static router: address;
8
- jwt: string | null;
9
- rps: number;
10
- dao: address;
11
- loadJWT(wallet: string): Promise<void>;
12
- rateLimitSleep(wallet: string): Promise<void>;
13
- static getAvailableTokens(provider: curvance_provider, query?: string | null): Promise<ZapToken[]>;
14
- static getCurrentTime(): number;
15
- static quoteAction(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<{
16
- action: Swap;
17
- quote: {
18
- max_slippage: Decimal;
19
- type: string;
20
- status: string;
21
- output: string;
22
- minOut: string;
23
- transaction: {
24
- calldata: string;
25
- value: string;
26
- to: string;
27
- };
28
- gasPrices: {
29
- slow: string;
30
- standard: string;
31
- fast: string;
32
- rapid: string;
33
- extreme: string;
34
- };
35
- };
36
- }>;
37
- static quoteMin(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<string>;
38
- static quote(wallet: string, tokenIn: string, tokenOut: string, amount: string, slippageTolerance?: bigint | null): Promise<{
39
- max_slippage: Decimal;
40
- type: string;
41
- status: string;
42
- output: string;
43
- minOut: string;
44
- transaction: {
45
- calldata: string;
46
- value: string;
47
- to: string;
48
- };
49
- gasPrices: {
50
- slow: string;
51
- standard: string;
52
- fast: string;
53
- rapid: string;
54
- extreme: string;
55
- };
56
- }>;
57
- static getSlippage(output: bigint, min_output: bigint): Decimal;
58
- }
59
- //# sourceMappingURL=KuruMainnet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KuruMainnet.d.ts","sourceRoot":"","sources":["../../src/classes/KuruMainnet.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAiChC,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,MAAM,CAAC,GAAG,SAA2B;IACrC,MAAM,CAAC,MAAM,EAAmD,OAAO,CAAC;IACxE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1B,GAAG,SAAK;IACR,GAAG,EAAmD,OAAO,CAAC;IAExD,OAAO,CAAC,MAAM,EAAE,MAAM;IAoCtB,cAAc,CAAC,MAAM,EAAE,MAAM;WAatB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW;IAoFxF,MAAM,CAAC,cAAc;WAIR,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;;;;kBArK7H,MAAM;oBACJ,MAAM;oBACN,MAAM;oBACN,MAAM;yBACD;gBACT,QAAQ,EAAE,MAAM,CAAC;gBACjB,KAAK,EAAE,MAAM,CAAC;gBACd,EAAE,EAAE,MAAM,CAAC;aACd;uBACU;gBACP,IAAI,EAAE,MAAM,CAAC;gBACb,QAAQ,EAAE,MAAM,CAAC;gBACjB,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,MAAM,CAAC;gBACd,OAAO,EAAE,MAAM,CAAC;aACnB;;;WAoKY,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;WAKnH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;;cAxLvH,MAAM;gBACJ,MAAM;gBACN,MAAM;gBACN,MAAM;qBACD;YACT,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,EAAE,EAAE,MAAM,CAAC;SACd;mBACU;YACP,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;SACnB;;IA4ND,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKxD"}
@@ -1,167 +0,0 @@
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
- const decimal_js_1 = __importDefault(require("decimal.js"));
7
- const ERC20_1 = require("./ERC20");
8
- const helpers_1 = require("../helpers");
9
- const cached_jwt = new Map();
10
- const cached_requests = new Map();
11
- class KuruMainnet {
12
- static api = "https://ws.kuru.io/api";
13
- static router = "0xb3e6778480b2E488385E8205eA05E20060B813cb"; // KuruFlowEntrypoint
14
- jwt = null;
15
- rps = 1;
16
- dao = "0x0Acb7eF4D8733C719d60e0992B489b629bc55C02";
17
- async loadJWT(wallet) {
18
- if (cached_jwt.has(wallet)) {
19
- const cached = cached_jwt.get(wallet);
20
- const currentTime = KuruMainnet.getCurrentTime();
21
- if (cached.expires_at > currentTime) {
22
- this.jwt = cached.token;
23
- this.rps = cached.rate_limit.rps;
24
- return;
25
- }
26
- else {
27
- cached_jwt.delete(wallet);
28
- }
29
- }
30
- const resp = await fetch(`${KuruMainnet.api}/generate-token`, {
31
- method: "POST",
32
- headers: {
33
- "Content-Type": "application/json",
34
- },
35
- body: JSON.stringify({
36
- user_address: wallet,
37
- }),
38
- keepalive: true
39
- });
40
- if (!resp.ok) {
41
- throw new Error(`Failed to fetch JWT: ${resp.status} ${resp.statusText}`);
42
- }
43
- const data = await resp.json();
44
- this.jwt = data.token;
45
- this.rps = data.rate_limit.rps;
46
- cached_jwt.set(wallet, data);
47
- }
48
- async rateLimitSleep(wallet) {
49
- const now = KuruMainnet.getCurrentTime();
50
- const requests = cached_requests.get(wallet) || [];
51
- const windowStart = now - 2;
52
- const recentRequests = requests.filter(timestamp => timestamp > windowStart);
53
- if (recentRequests.length >= this.rps) {
54
- const earliestRequest = Math.min(...recentRequests);
55
- const sleepTime = (earliestRequest + 2) - now;
56
- await new Promise(resolve => setTimeout(resolve, sleepTime * 2000));
57
- }
58
- }
59
- static async getAvailableTokens(provider, query = null) {
60
- const signer = (0, helpers_1.validateProviderAsSigner)(provider);
61
- const userAddress = signer.address;
62
- let endpoint = `https://api.kuru.io/api/v2/tokens/search?limit=20&userAddress=${userAddress}`;
63
- if (query) {
64
- endpoint += `&q=${encodeURIComponent(query)}`;
65
- }
66
- const resp = await fetch(endpoint, {
67
- method: "GET",
68
- headers: {
69
- "Content-Type": "application/json",
70
- }
71
- });
72
- if (!resp.ok) {
73
- throw new Error(`Failed to fetch available tokens: ${resp.status} ${resp.statusText}`);
74
- }
75
- const list = await resp.json();
76
- let tokens = [];
77
- for (const token of list.data.data) {
78
- const erc20 = new ERC20_1.ERC20(provider, token.address, {
79
- address: token.address,
80
- name: token.name,
81
- symbol: token.ticker,
82
- decimals: BigInt(token.decimals ?? 18),
83
- totalSupply: BigInt(token.total_supply ?? 0),
84
- balance: BigInt(token.balance ?? 0),
85
- image: token.imageurl,
86
- price: (0, decimal_js_1.default)(token.last_price).div(helpers_1.WAD)
87
- });
88
- tokens.push({
89
- interface: erc20,
90
- type: 'simple',
91
- quote: async (tokenIn, tokenOut, amount, slippageTolerance = null) => {
92
- const raw_amount = (0, helpers_1.toBigInt)(amount, 18n);
93
- const data = await KuruMainnet.quote(signer.address, tokenIn, tokenOut, raw_amount.toString(), slippageTolerance);
94
- return {
95
- output: (0, helpers_1.toDecimal)(BigInt(data.output ?? 0), BigInt(token.decimals ?? 18)),
96
- minOut: (0, helpers_1.toDecimal)(BigInt(data.minOut ?? 0), BigInt(token.decimals ?? 18)),
97
- max_slippage: data.max_slippage
98
- };
99
- }
100
- });
101
- }
102
- return tokens;
103
- }
104
- // Get current time in seconds
105
- static getCurrentTime() {
106
- return Math.floor(Date.now() / 1000);
107
- }
108
- static async quoteAction(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
109
- const quote = await KuruMainnet.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
110
- const action = {
111
- inputToken: tokenIn,
112
- inputAmount: BigInt(amount),
113
- outputToken: tokenOut,
114
- target: quote.transaction.to,
115
- slippage: slippageTolerance ?? 0n,
116
- call: `0x${quote.transaction.calldata}`
117
- };
118
- return { action, quote };
119
- }
120
- static async quoteMin(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
121
- const quote = await KuruMainnet.quote(wallet, tokenIn, tokenOut, amount, slippageTolerance);
122
- return quote.minOut;
123
- }
124
- static async quote(wallet, tokenIn, tokenOut, amount, slippageTolerance = null) {
125
- const kuru = new this();
126
- await kuru.loadJWT(wallet);
127
- await kuru.rateLimitSleep(wallet);
128
- const payload = {
129
- userAddress: wallet,
130
- tokenIn: tokenIn,
131
- tokenOut: tokenOut,
132
- amount: amount,
133
- referrerAddress: kuru.dao,
134
- referrerFeeBps: 10,
135
- };
136
- if (!slippageTolerance) {
137
- payload.autoSlippage = true;
138
- }
139
- else {
140
- payload.slippage_tolerance = Number(slippageTolerance);
141
- }
142
- cached_requests.set(wallet, (cached_requests.get(wallet) || []).concat(KuruMainnet.getCurrentTime()));
143
- const resp = await fetch(`${KuruMainnet.api}/quote`, {
144
- method: "POST",
145
- headers: {
146
- "Content-Type": "application/json",
147
- "Authorization": `Bearer ${kuru.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
- ...data,
157
- max_slippage: KuruMainnet.getSlippage(BigInt(data.output ?? 0), BigInt(data.minOut ?? 0))
158
- };
159
- }
160
- static getSlippage(output, min_output) {
161
- const diff = output - min_output;
162
- const decimal = (0, decimal_js_1.default)(diff).div(output).mul(100);
163
- return decimal ?? (0, decimal_js_1.default)(100);
164
- }
165
- }
166
- exports.default = KuruMainnet;
167
- //# sourceMappingURL=KuruMainnet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KuruMainnet.js","sourceRoot":"","sources":["../../src/classes/KuruMainnet.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { address, bytes } from "../types";
2
- import { TransactionResponse } from "ethers";
3
- import { MulticallAction } from "./CToken";
4
- import { MarketToken } from "./Market";
5
- export interface IRedstoneCoreAdaptor {
6
- writePrice(asset: address, inUSD: boolean, redstoneTimestamp: bigint): Promise<TransactionResponse>;
7
- }
8
- export declare class Redstone {
9
- static getPayload(symbol: string, log?: boolean): Promise<{
10
- payload: bytes;
11
- timestamp: number;
12
- }>;
13
- static buildMultiCallAction(ctoken: MarketToken): Promise<MulticallAction>;
14
- }
15
- //# sourceMappingURL=Redstone.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Redstone.d.ts","sourceRoot":"","sources":["../../src/classes/Redstone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAkB,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,oBAAoB;IACjC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACvG;AAED,qBAAa,QAAQ;WACJ,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,OAAe;iBAyBzB,KAAK;;;WAM3B,oBAAoB,CAAC,MAAM,EAAE,WAAW;CAkBxD"}
@@ -1,56 +0,0 @@
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.Redstone = void 0;
7
- const sdk_1 = require("@redstone-finance/sdk");
8
- const helpers_1 = require("../helpers");
9
- const ethers_1 = require("ethers");
10
- const RedstoneCoreAdaptor_json_1 = __importDefault(require("../abis/RedstoneCoreAdaptor.json"));
11
- class Redstone {
12
- static async getPayload(symbol, log = false) {
13
- let payload_params = {
14
- dataServiceId: "redstone-primary-prod",
15
- dataPackagesIds: [symbol],
16
- uniqueSignersCount: 3,
17
- authorizedSigners: [
18
- "0x8BB8F32Df04c8b654987DAaeD53D6B6091e3B774",
19
- "0xdEB22f54738d54976C4c0fe5ce6d408E40d88499",
20
- "0x51Ce04Be4b3E32572C4Ec9135221d0691Ba7d202",
21
- "0xDD682daEC5A90dD295d14DA4b0bec9281017b5bE"
22
- ]
23
- };
24
- const response = await (0, sdk_1.requestDataPackages)(payload_params);
25
- const [payload, timestamp] = await Promise.all([
26
- (0, sdk_1.convertDataPackagesResponse)(response),
27
- (0, sdk_1.getResponseTimestamp)(response)
28
- ]);
29
- if (log) {
30
- const json = await (0, sdk_1.convertDataPackagesResponse)(response, "json");
31
- console.log(json);
32
- }
33
- return {
34
- payload: `0x${payload}`,
35
- timestamp
36
- };
37
- }
38
- static async buildMultiCallAction(ctoken) {
39
- const adaptor = ctoken.market.setup.contracts.adaptors.RedstoneCoreAdaptor;
40
- const contract = (0, helpers_1.contractSetup)(ctoken.provider, adaptor, RedstoneCoreAdaptor_json_1.default);
41
- const { payload, timestamp } = await Redstone.getPayload(ctoken.asset.symbol);
42
- const writePrice = contract.interface.encodeFunctionData("writePrice", [
43
- ctoken.asset.address,
44
- true,
45
- timestamp
46
- ]);
47
- const encodedWritePrice = (0, ethers_1.solidityPacked)(["bytes", "bytes"], [writePrice, payload]);
48
- return {
49
- target: adaptor,
50
- isPriceUpdate: true,
51
- data: encodedWritePrice
52
- };
53
- }
54
- }
55
- exports.Redstone = Redstone;
56
- //# sourceMappingURL=Redstone.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Redstone.js","sourceRoot":"","sources":["../../src/classes/Redstone.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA+G;AAE/G,wCAA2C;AAC3C,mCAA6D;AAE7D,gGAAmD;AAOnD,MAAa,QAAQ;IACjB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,MAAe,KAAK;QACxD,IAAI,cAAc,GAAG;YACjB,aAAa,EAAE,uBAAuB;YACtC,eAAe,EAAE,CAAC,MAAM,CAAC;YACzB,kBAAkB,EAAE,CAAC;YACrB,iBAAiB,EAAE;gBACf,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C;aAC/C;SACJ,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAmB,EAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3C,IAAA,iCAA2B,EAAC,QAAQ,CAAC;YACrC,IAAA,0BAAoB,EAAC,QAAQ,CAAC;SACjC,CAAC,CAAC;QAEH,IAAG,GAAG,EAAE,CAAC;YACL,MAAM,IAAI,GAAG,MAAM,IAAA,iCAA2B,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,OAAO;YACH,OAAO,EAAE,KAAK,OAAO,EAAW;YAChC,SAAS;SACZ,CAAC;IAEN,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAmB;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAA8B,CAAC;QACtF,MAAM,QAAQ,GAAG,IAAA,uBAAa,EAAuB,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,kCAAG,CAAC,CAAC;QACpF,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE9E,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE;YACnE,MAAM,CAAC,KAAK,CAAC,OAAO;YACpB,IAAI;YACJ,SAAS;SACZ,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,IAAA,uBAAc,EAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAEpF,OAAO;YACH,MAAM,EAAE,OAAO;YACf,aAAa,EAAE,IAAI;YACnB,IAAI,EAAE,iBAAiB;SACP,CAAC;IACzB,CAAC;CACJ;AAlDD,4BAkDC"}
@@ -1,53 +0,0 @@
1
- import { Market } from "./classes/Market";
2
- import { address } from "./types";
3
- export interface PositionSnapshot {
4
- tokenAddress: string;
5
- tokenSymbol: string;
6
- isBorrowable: boolean;
7
- depositUSD: number;
8
- depositTokens: number;
9
- collateralUSD: number;
10
- collateralTokens: number;
11
- debtUSD: number;
12
- debtTokens: number;
13
- assetPriceUSD: number;
14
- supplyAPY: number;
15
- borrowRate: number;
16
- }
17
- export interface MarketSnapshot {
18
- marketAddress: string;
19
- marketName: string;
20
- totalDepositsUSD: number;
21
- totalDebtUSD: number;
22
- netUSD: number;
23
- positionHealth: number | null;
24
- dailyEarnings: number;
25
- dailyCost: number;
26
- positions: PositionSnapshot[];
27
- }
28
- export interface PortfolioSnapshot {
29
- account: string;
30
- chain: string;
31
- timestamp: number;
32
- totalDepositsUSD: number;
33
- totalDebtUSD: number;
34
- netUSD: number;
35
- dailyEarnings: number;
36
- dailyCost: number;
37
- markets: MarketSnapshot[];
38
- }
39
- /**
40
- * Snapshot a single market's user positions into plain numbers for JSON serialization.
41
- */
42
- export declare function snapshotMarket(market: Market): MarketSnapshot;
43
- /**
44
- * Take a full portfolio snapshot across all markets.
45
- *
46
- * @param account - Wallet address to snapshot
47
- * @param options.refresh - When true, reloads on-chain market + user data before reading cache.
48
- * Use this for indexer/cron jobs that need fresh data.
49
- */
50
- export declare function takePortfolioSnapshot(account: address, options?: {
51
- refresh?: boolean;
52
- }): Promise<PortfolioSnapshot>;
53
- //# sourceMappingURL=snapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,WAAW,gBAAgB;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC7B;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAqC7D;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAsD5B"}