curvance 4.0.2 → 4.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.
Files changed (61) hide show
  1. package/dist/abis/ProtocolReader.json +64 -0
  2. package/dist/chains/monad-mainnet.json +1 -26
  3. package/dist/classes/CToken.d.ts +33 -6
  4. package/dist/classes/CToken.d.ts.map +1 -1
  5. package/dist/classes/CToken.js +325 -51
  6. package/dist/classes/CToken.js.map +1 -1
  7. package/dist/classes/DexAggregators/IDexAgg.d.ts +3 -1
  8. package/dist/classes/DexAggregators/IDexAgg.d.ts.map +1 -1
  9. package/dist/classes/DexAggregators/Kuru.d.ts +3 -3
  10. package/dist/classes/DexAggregators/Kuru.d.ts.map +1 -1
  11. package/dist/classes/DexAggregators/Kuru.js +19 -9
  12. package/dist/classes/DexAggregators/Kuru.js.map +1 -1
  13. package/dist/classes/DexAggregators/KyberSwap.d.ts +3 -3
  14. package/dist/classes/DexAggregators/KyberSwap.d.ts.map +1 -1
  15. package/dist/classes/DexAggregators/KyberSwap.js +97 -14
  16. package/dist/classes/DexAggregators/KyberSwap.js.map +1 -1
  17. package/dist/classes/DexAggregators/MultiDexAgg.d.ts +3 -3
  18. package/dist/classes/DexAggregators/MultiDexAgg.d.ts.map +1 -1
  19. package/dist/classes/DexAggregators/MultiDexAgg.js +13 -13
  20. package/dist/classes/DexAggregators/MultiDexAgg.js.map +1 -1
  21. package/dist/classes/OracleManager.js.map +1 -1
  22. package/dist/classes/ProtocolReader.d.ts +10 -0
  23. package/dist/classes/ProtocolReader.d.ts.map +1 -1
  24. package/dist/classes/ProtocolReader.js +4 -0
  25. package/dist/classes/ProtocolReader.js.map +1 -1
  26. package/dist/classes/Zapper.d.ts.map +1 -1
  27. package/dist/classes/Zapper.js +39 -2
  28. package/dist/classes/Zapper.js.map +1 -1
  29. package/dist/contracts/monad-mainnet.json +1 -1
  30. package/dist/feePolicy.d.ts +182 -0
  31. package/dist/feePolicy.d.ts.map +1 -0
  32. package/dist/feePolicy.js +110 -0
  33. package/dist/feePolicy.js.map +1 -0
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/retry-provider.js +3 -3
  39. package/dist/retry-provider.js.map +1 -1
  40. package/dist/setup.d.ts +8 -1
  41. package/dist/setup.d.ts.map +1 -1
  42. package/dist/setup.js +3 -1
  43. package/dist/setup.js.map +1 -1
  44. package/package.json +1 -1
  45. package/dist/chains/arb-sepolia.json +0 -44
  46. package/dist/classes/DexAggregators/KuruMainnet.d.ts +0 -1
  47. package/dist/classes/DexAggregators/KuruMainnet.d.ts.map +0 -1
  48. package/dist/classes/DexAggregators/KuruMainnet.js +0 -228
  49. package/dist/classes/DexAggregators/KuruMainnet.js.map +0 -1
  50. package/dist/classes/Kuru.d.ts +0 -59
  51. package/dist/classes/Kuru.d.ts.map +0 -1
  52. package/dist/classes/Kuru.js +0 -167
  53. package/dist/classes/Kuru.js.map +0 -1
  54. package/dist/classes/KuruMainnet.d.ts +0 -59
  55. package/dist/classes/KuruMainnet.d.ts.map +0 -1
  56. package/dist/classes/KuruMainnet.js +0 -167
  57. package/dist/classes/KuruMainnet.js.map +0 -1
  58. package/dist/snapshot.d.ts +0 -53
  59. package/dist/snapshot.d.ts.map +0 -1
  60. package/dist/snapshot.js +0 -103
  61. package/dist/snapshot.js.map +0 -1
@@ -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,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"}
package/dist/snapshot.js DELETED
@@ -1,103 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.snapshotMarket = snapshotMarket;
4
- exports.takePortfolioSnapshot = takePortfolioSnapshot;
5
- const setup_1 = require("./setup");
6
- // ── Functions ────────────────────────────────────────────────────────────────
7
- /**
8
- * Snapshot a single market's user positions into plain numbers for JSON serialization.
9
- */
10
- function snapshotMarket(market) {
11
- const positions = [];
12
- for (const token of market.tokens) {
13
- const isBorrowable = token.isBorrowable;
14
- positions.push({
15
- tokenAddress: token.address,
16
- tokenSymbol: token.symbol,
17
- isBorrowable,
18
- depositUSD: token.getUserAssetBalance(true).toNumber(),
19
- depositTokens: token.getUserAssetBalance(false).toNumber(),
20
- collateralUSD: token.getUserCollateral(true).toNumber(),
21
- collateralTokens: token.getUserCollateral(false).toNumber(),
22
- debtUSD: token.getUserDebt(true).toNumber(),
23
- debtTokens: token.getUserDebt(false).toNumber(),
24
- assetPriceUSD: token.getPrice(true).toNumber(),
25
- supplyAPY: token.getApy().toNumber(),
26
- borrowRate: isBorrowable
27
- ? token.getBorrowRate(true).toNumber()
28
- : 0,
29
- });
30
- }
31
- const health = market.positionHealth;
32
- return {
33
- marketAddress: market.address,
34
- marketName: market.name,
35
- totalDepositsUSD: market.userDeposits.toNumber(),
36
- totalDebtUSD: market.userDebt.toNumber(),
37
- netUSD: market.userNet.toNumber(),
38
- positionHealth: health !== null ? health.toNumber() : null,
39
- dailyEarnings: market.getUserDepositsChange("day").toNumber(),
40
- dailyCost: market.getUserDebtChange("day").toNumber(),
41
- positions,
42
- };
43
- }
44
- /**
45
- * Take a full portfolio snapshot across all markets.
46
- *
47
- * @param account - Wallet address to snapshot
48
- * @param options.refresh - When true, reloads on-chain market + user data before reading cache.
49
- * Use this for indexer/cron jobs that need fresh data.
50
- */
51
- async function takePortfolioSnapshot(account, options) {
52
- if (options?.refresh && setup_1.all_markets.length > 0) {
53
- // Fetch all dynamic + user data in 2 RPC calls (not 2×N).
54
- // Each market's reload fetches ALL markets then filters — so we call
55
- // once via the shared reader and distribute results ourselves.
56
- const reader = setup_1.all_markets[0].reader;
57
- const [dynamicData, userData] = await Promise.all([
58
- reader.getDynamicMarketData(),
59
- reader.getUserData(account),
60
- ]);
61
- for (const market of setup_1.all_markets) {
62
- const dynamic = dynamicData.find((m) => m.address === market.address);
63
- const user = userData.markets.find((m) => m.address === market.address);
64
- if (!dynamic || !user)
65
- continue;
66
- market.cache.dynamic = dynamic;
67
- market.cache.user = user;
68
- for (const token of market.tokens) {
69
- const dynToken = dynamic.tokens.find((t) => t.address === token.address);
70
- const usrToken = user.tokens.find((t) => t.address === token.address);
71
- if (dynToken)
72
- token.cache = { ...token.cache, ...dynToken };
73
- if (usrToken)
74
- token.cache = { ...token.cache, ...usrToken };
75
- }
76
- }
77
- }
78
- const marketSnapshots = [];
79
- let totalDepositsUSD = 0;
80
- let totalDebtUSD = 0;
81
- let dailyEarnings = 0;
82
- let dailyCost = 0;
83
- for (const market of setup_1.all_markets) {
84
- const snap = snapshotMarket(market);
85
- marketSnapshots.push(snap);
86
- totalDepositsUSD += snap.totalDepositsUSD;
87
- totalDebtUSD += snap.totalDebtUSD;
88
- dailyEarnings += snap.dailyEarnings;
89
- dailyCost += snap.dailyCost;
90
- }
91
- return {
92
- account,
93
- chain: setup_1.setup_config.chain,
94
- timestamp: Date.now(),
95
- totalDepositsUSD,
96
- totalDebtUSD,
97
- netUSD: totalDepositsUSD - totalDebtUSD,
98
- dailyEarnings,
99
- dailyCost,
100
- markets: marketSnapshots,
101
- };
102
- }
103
- //# sourceMappingURL=snapshot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}