zo-sdk 0.1.2 → 0.1.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.
Files changed (183) hide show
  1. package/dist/abstract/BaseAPI.cjs +3 -4
  2. package/dist/abstract/BaseAPI.cjs.map +1 -1
  3. package/dist/abstract/BaseAPI.d.cts +13 -13
  4. package/dist/abstract/BaseAPI.d.cts.map +1 -1
  5. package/dist/abstract/BaseAPI.d.mts +13 -13
  6. package/dist/abstract/BaseAPI.d.mts.map +1 -1
  7. package/dist/abstract/BaseAPI.mjs +3 -4
  8. package/dist/abstract/BaseAPI.mjs.map +1 -1
  9. package/dist/abstract/BaseDataAPI.cjs +2 -2
  10. package/dist/abstract/BaseDataAPI.cjs.map +1 -1
  11. package/dist/abstract/BaseDataAPI.d.cts +2 -2
  12. package/dist/abstract/BaseDataAPI.d.cts.map +1 -1
  13. package/dist/abstract/BaseDataAPI.d.mts +2 -2
  14. package/dist/abstract/BaseDataAPI.d.mts.map +1 -1
  15. package/dist/abstract/BaseDataAPI.mjs +2 -2
  16. package/dist/abstract/BaseDataAPI.mjs.map +1 -1
  17. package/dist/abstract/index.cjs +3 -3
  18. package/dist/abstract/index.cjs.map +1 -1
  19. package/dist/abstract/index.d.cts +1 -1
  20. package/dist/abstract/index.d.cts.map +1 -1
  21. package/dist/abstract/index.d.mts +1 -1
  22. package/dist/abstract/index.d.mts.map +1 -1
  23. package/dist/abstract/index.mjs +1 -1
  24. package/dist/abstract/index.mjs.map +1 -1
  25. package/dist/api.cjs +2 -1
  26. package/dist/api.cjs.map +1 -1
  27. package/dist/api.d.cts.map +1 -1
  28. package/dist/api.d.mts.map +1 -1
  29. package/dist/api.mjs +2 -1
  30. package/dist/api.mjs.map +1 -1
  31. package/dist/bcs.cjs.map +1 -1
  32. package/dist/bcs.d.cts.map +1 -1
  33. package/dist/bcs.d.mts.map +1 -1
  34. package/dist/bcs.mjs.map +1 -1
  35. package/dist/consts/deployments-slp-mainnet.json +0 -70
  36. package/dist/consts/deployments-usdz-mainnet.json +1 -133
  37. package/dist/consts/index.cjs +21 -14
  38. package/dist/consts/index.cjs.map +1 -1
  39. package/dist/consts/index.d.cts.map +1 -1
  40. package/dist/consts/index.d.mts.map +1 -1
  41. package/dist/consts/index.mjs +21 -14
  42. package/dist/consts/index.mjs.map +1 -1
  43. package/dist/factory/SDKFactory.cjs +21 -14
  44. package/dist/factory/SDKFactory.cjs.map +1 -1
  45. package/dist/factory/SDKFactory.d.cts +4 -4
  46. package/dist/factory/SDKFactory.d.cts.map +1 -1
  47. package/dist/factory/SDKFactory.d.mts +4 -4
  48. package/dist/factory/SDKFactory.d.mts.map +1 -1
  49. package/dist/factory/SDKFactory.mjs +22 -15
  50. package/dist/factory/SDKFactory.mjs.map +1 -1
  51. package/dist/implementations/SLPAPI.cjs +143 -110
  52. package/dist/implementations/SLPAPI.cjs.map +1 -1
  53. package/dist/implementations/SLPAPI.d.cts +49 -47
  54. package/dist/implementations/SLPAPI.d.cts.map +1 -1
  55. package/dist/implementations/SLPAPI.d.mts +49 -47
  56. package/dist/implementations/SLPAPI.d.mts.map +1 -1
  57. package/dist/implementations/SLPAPI.mjs +143 -110
  58. package/dist/implementations/SLPAPI.mjs.map +1 -1
  59. package/dist/implementations/SLPDataAPI.cjs +98 -89
  60. package/dist/implementations/SLPDataAPI.cjs.map +1 -1
  61. package/dist/implementations/SLPDataAPI.d.cts +21 -21
  62. package/dist/implementations/SLPDataAPI.d.cts.map +1 -1
  63. package/dist/implementations/SLPDataAPI.d.mts +21 -21
  64. package/dist/implementations/SLPDataAPI.d.mts.map +1 -1
  65. package/dist/implementations/SLPDataAPI.mjs +98 -89
  66. package/dist/implementations/SLPDataAPI.mjs.map +1 -1
  67. package/dist/implementations/USDZAPI.cjs +128 -84
  68. package/dist/implementations/USDZAPI.cjs.map +1 -1
  69. package/dist/implementations/USDZAPI.d.cts +46 -45
  70. package/dist/implementations/USDZAPI.d.cts.map +1 -1
  71. package/dist/implementations/USDZAPI.d.mts +46 -45
  72. package/dist/implementations/USDZAPI.d.mts.map +1 -1
  73. package/dist/implementations/USDZAPI.mjs +128 -84
  74. package/dist/implementations/USDZAPI.mjs.map +1 -1
  75. package/dist/implementations/USDZDataAPI.cjs +48 -47
  76. package/dist/implementations/USDZDataAPI.cjs.map +1 -1
  77. package/dist/implementations/USDZDataAPI.d.cts +19 -19
  78. package/dist/implementations/USDZDataAPI.d.cts.map +1 -1
  79. package/dist/implementations/USDZDataAPI.d.mts +19 -19
  80. package/dist/implementations/USDZDataAPI.d.mts.map +1 -1
  81. package/dist/implementations/USDZDataAPI.mjs +49 -48
  82. package/dist/implementations/USDZDataAPI.mjs.map +1 -1
  83. package/dist/implementations/ZLPAPI.cjs +137 -89
  84. package/dist/implementations/ZLPAPI.cjs.map +1 -1
  85. package/dist/implementations/ZLPAPI.d.cts +50 -48
  86. package/dist/implementations/ZLPAPI.d.cts.map +1 -1
  87. package/dist/implementations/ZLPAPI.d.mts +50 -48
  88. package/dist/implementations/ZLPAPI.d.mts.map +1 -1
  89. package/dist/implementations/ZLPAPI.mjs +137 -89
  90. package/dist/implementations/ZLPAPI.mjs.map +1 -1
  91. package/dist/implementations/ZLPDataAPI.cjs +62 -63
  92. package/dist/implementations/ZLPDataAPI.cjs.map +1 -1
  93. package/dist/implementations/ZLPDataAPI.d.cts +19 -19
  94. package/dist/implementations/ZLPDataAPI.d.cts.map +1 -1
  95. package/dist/implementations/ZLPDataAPI.d.mts +19 -19
  96. package/dist/implementations/ZLPDataAPI.d.mts.map +1 -1
  97. package/dist/implementations/ZLPDataAPI.mjs +63 -64
  98. package/dist/implementations/ZLPDataAPI.mjs.map +1 -1
  99. package/dist/implementations/index.cjs +5 -5
  100. package/dist/implementations/index.cjs.map +1 -1
  101. package/dist/implementations/index.d.cts +2 -2
  102. package/dist/implementations/index.d.cts.map +1 -1
  103. package/dist/implementations/index.d.mts +2 -2
  104. package/dist/implementations/index.d.mts.map +1 -1
  105. package/dist/implementations/index.mjs +2 -2
  106. package/dist/implementations/index.mjs.map +1 -1
  107. package/dist/index.cjs +9 -9
  108. package/dist/index.cjs.map +1 -1
  109. package/dist/index.d.cts +6 -6
  110. package/dist/index.d.cts.map +1 -1
  111. package/dist/index.d.mts +6 -6
  112. package/dist/index.d.mts.map +1 -1
  113. package/dist/index.mjs +6 -6
  114. package/dist/index.mjs.map +1 -1
  115. package/dist/interfaces/base.cjs +0 -1
  116. package/dist/interfaces/base.cjs.map +1 -1
  117. package/dist/interfaces/base.d.cts +57 -57
  118. package/dist/interfaces/base.d.cts.map +1 -1
  119. package/dist/interfaces/base.d.mts +57 -57
  120. package/dist/interfaces/base.d.mts.map +1 -1
  121. package/dist/interfaces/base.mjs +1 -1
  122. package/dist/interfaces/base.mjs.map +1 -1
  123. package/dist/interfaces/index.d.cts +4 -4
  124. package/dist/interfaces/index.d.cts.map +1 -1
  125. package/dist/interfaces/index.d.mts +4 -4
  126. package/dist/interfaces/index.d.mts.map +1 -1
  127. package/dist/interfaces/slp.cjs +0 -2
  128. package/dist/interfaces/slp.cjs.map +1 -1
  129. package/dist/interfaces/slp.d.cts +5 -5
  130. package/dist/interfaces/slp.d.cts.map +1 -1
  131. package/dist/interfaces/slp.d.mts +5 -5
  132. package/dist/interfaces/slp.d.mts.map +1 -1
  133. package/dist/interfaces/slp.mjs +1 -2
  134. package/dist/interfaces/slp.mjs.map +1 -1
  135. package/dist/interfaces/usdz.d.cts +1 -1
  136. package/dist/interfaces/usdz.d.cts.map +1 -1
  137. package/dist/interfaces/usdz.d.mts +1 -1
  138. package/dist/interfaces/usdz.d.mts.map +1 -1
  139. package/dist/interfaces/zlp.d.cts +5 -5
  140. package/dist/interfaces/zlp.d.cts.map +1 -1
  141. package/dist/interfaces/zlp.d.mts +5 -5
  142. package/dist/interfaces/zlp.d.mts.map +1 -1
  143. package/dist/oracle.cjs +12 -2
  144. package/dist/oracle.cjs.map +1 -1
  145. package/dist/oracle.d.cts +4 -3
  146. package/dist/oracle.d.cts.map +1 -1
  147. package/dist/oracle.d.mts +4 -3
  148. package/dist/oracle.d.mts.map +1 -1
  149. package/dist/oracle.mjs +13 -3
  150. package/dist/oracle.mjs.map +1 -1
  151. package/dist/utils.cjs +1 -1
  152. package/dist/utils.cjs.map +1 -1
  153. package/dist/utils.d.cts.map +1 -1
  154. package/dist/utils.d.mts.map +1 -1
  155. package/dist/utils.mjs +1 -1
  156. package/dist/utils.mjs.map +1 -1
  157. package/eslint.config.mjs +18 -0
  158. package/package.json +16 -15
  159. package/src/abstract/BaseAPI.ts +55 -49
  160. package/src/abstract/BaseDataAPI.ts +19 -17
  161. package/src/abstract/index.ts +1 -1
  162. package/src/api.ts +3 -1
  163. package/src/bcs.ts +9 -9
  164. package/src/consts/deployments-slp-mainnet.json +0 -70
  165. package/src/consts/deployments-usdz-mainnet.json +1 -133
  166. package/src/consts/index.ts +22 -15
  167. package/src/factory/SDKFactory.ts +49 -41
  168. package/src/implementations/SLPAPI.ts +299 -210
  169. package/src/implementations/SLPDataAPI.ts +163 -146
  170. package/src/implementations/USDZAPI.ts +238 -133
  171. package/src/implementations/USDZDataAPI.ts +79 -74
  172. package/src/implementations/ZLPAPI.ts +296 -174
  173. package/src/implementations/ZLPDataAPI.ts +93 -88
  174. package/src/implementations/index.ts +3 -3
  175. package/src/index.ts +17 -17
  176. package/src/interfaces/base.ts +123 -116
  177. package/src/interfaces/index.ts +14 -17
  178. package/src/interfaces/slp.ts +20 -19
  179. package/src/interfaces/usdz.ts +13 -13
  180. package/src/interfaces/zlp.ts +22 -21
  181. package/src/oracle.ts +25 -5
  182. package/src/utils.ts +9 -9
  183. package/tsconfig.json +1 -1
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ /* eslint-disable no-await-in-loop */
3
+ /* eslint-disable @stylistic/indent-binary-ops */
4
+ /* eslint-disable @stylistic/indent */
2
5
  /**
3
6
  * SLP DataAPI implementation
4
7
  * Implements SLP-specific data access methods for Sudo SDK
@@ -7,10 +10,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
10
  exports.SLPDataAPI = void 0;
8
11
  const transactions_1 = require("@mysten/sui/transactions");
9
12
  const utils_1 = require("@mysten/sui/utils");
10
- const consts_1 = require("../consts/index.cjs");
11
13
  const abstract_1 = require("../abstract/index.cjs");
12
- const utils_2 = require("../utils.cjs");
13
14
  const bcs_1 = require("../bcs.cjs");
15
+ const consts_1 = require("../consts/index.cjs");
16
+ const utils_2 = require("../utils.cjs");
14
17
  let aprResponse = {};
15
18
  const SECONDS_PER_EIGHT_HOUR = 8 * 60 * 60; // 28800 seconds
16
19
  class SLPDataAPI extends abstract_1.BaseDataAPI {
@@ -28,7 +31,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
28
31
  showContent: true,
29
32
  },
30
33
  });
31
- return this.parseRebaseFeeModel(rawData);
34
+ return SLPDataAPI.parseRebaseFeeModel(rawData);
32
35
  }
33
36
  /**
34
37
  * Creates vaults valuation for SLP using Sudo SDK approach
@@ -136,9 +139,9 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
136
139
  const vaultsValuation = bcs_1.VaultsValuation.parse(new Uint8Array(res.results[(res.results?.length || 0) - symbolsValuationOffset - 1].mutableReferenceOutputs[1][1]));
137
140
  const symbolsValuation = bcs_1.SymbolsValuation.parse(new Uint8Array(res.results[(res.results?.length || 0) - 1]
138
141
  .mutableReferenceOutputs[1][1]));
139
- const result = Number(BigInt(vaultsValuation.value) +
140
- BigInt(symbolsValuation.value.value) *
141
- BigInt(symbolsValuation.value.is_positive ? 1 : -1)) / 1e18;
142
+ const result = Number(BigInt(vaultsValuation.value)
143
+ + BigInt(symbolsValuation.value.value)
144
+ * BigInt(symbolsValuation.value.is_positive ? 1 : -1)) / 1e18;
142
145
  return result;
143
146
  }
144
147
  /**
@@ -164,8 +167,8 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
164
167
  throw new Error('Sudo Core configuration not found');
165
168
  }
166
169
  const marketInfo = await this.getMarketInfo();
167
- let value = await this.simValuateVaults(this.consts.sudoCore.adminCap);
168
- let slpPrice = value / marketInfo.lpSupplyWithDecimals;
170
+ const value = await this.simValuateVaults(this.consts.sudoCore.adminCap);
171
+ const slpPrice = value / marketInfo.lpSupplyWithDecimals;
169
172
  return {
170
173
  marketCap: value,
171
174
  price: slpPrice,
@@ -189,7 +192,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
189
192
  });
190
193
  const apr = await this.getCumulativeApr();
191
194
  return {
192
- ...this.parseMarketInfo(rawData),
195
+ ...SLPDataAPI.parseMarketInfo(rawData),
193
196
  apr,
194
197
  };
195
198
  }
@@ -283,7 +286,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
283
286
  async getStaked(owner) {
284
287
  let rawCredentialsData = [];
285
288
  let queryNextPage = true;
286
- let queryCursor = undefined;
289
+ let queryCursor;
287
290
  const limit = 50;
288
291
  while (queryNextPage) {
289
292
  const { data, hasNextPage, nextCursor } = await this.provider.getOwnedObjects({
@@ -308,7 +311,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
308
311
  rawCredentialsData = [...rawCredentialsData, ...data];
309
312
  }
310
313
  const pool = await this.getStakePool();
311
- const credentials = rawCredentialsData.map((item) => this.parseCredential(item, pool));
314
+ const credentials = rawCredentialsData.map((item) => SLPDataAPI.parseCredential(item, pool));
312
315
  return {
313
316
  credentials,
314
317
  amount: credentials.reduce((acc, cur) => acc + cur.amount, BigInt(0)),
@@ -322,12 +325,15 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
322
325
  showContent: true,
323
326
  },
324
327
  });
325
- return this.parseStakePool(raw);
328
+ return SLPDataAPI.parseStakePool(raw);
326
329
  }
327
330
  async fundingFeeRate(indexToken, long, sender) {
331
+ if (!sender) {
332
+ throw new Error('Sender address is required for fundingFeeRate calculation');
333
+ }
328
334
  const tx = await this.initOracleTxb([indexToken]);
329
335
  const symbol_ = (0, utils_2.joinSymbol)(long ? 'long' : 'short', indexToken);
330
- const currentTimestamp = parseInt((+new Date() / 1000).toFixed(0));
336
+ const currentTimestamp = Number.parseInt((Date.now() / 1000).toFixed(0), 10);
331
337
  const symbol = tx.moveCall({
332
338
  target: `${this.consts.sudoCore.package}::market::symbol`,
333
339
  typeArguments: [
@@ -378,10 +384,13 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
378
384
  transactionBlock: tx,
379
385
  sender,
380
386
  });
381
- const de = bcs_1.SRate.parse(new Uint8Array(res.results[res.results.length - 1].returnValues[0][0]));
387
+ const de = bcs_1.SRate.parse(new Uint8Array(res.results.at(-1).returnValues[0][0]));
382
388
  return (Number(BigInt(de.value)) / 1e18) * (de.is_positive ? 1 : -1);
383
389
  }
384
390
  async rebaseFeeRate(collateralToken, increase, amount, sender) {
391
+ if (!sender) {
392
+ throw new Error('Sender address is required for rebaseFeeRate calculation');
393
+ }
385
394
  const tx1 = await this.initOracleTxb(Object.keys(this.consts.pythFeeder.feeder));
386
395
  this.valuateVaults(tx1);
387
396
  const res1 = await this.provider.devInspectTransactionBlock({
@@ -391,7 +400,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
391
400
  const vaultsValuation = bcs_1.VaultsValuation.parse(new Uint8Array(res1.results[(res1.results?.length || 0) - 1]
392
401
  .mutableReferenceOutputs[1][1]));
393
402
  const singleVaultValue = BigInt(
394
- // @ts-ignore
403
+ // @ts-expect-error: vaultsValuation.handled type is not properly defined in BCS schema
395
404
  vaultsValuation.handled.find((item) => (item.key || '').includes(this.consts.coins[collateralToken].module.slice(2)) || false)?.value.value) + BigInt(Math.floor(amount));
396
405
  const allVaultValue = BigInt(vaultsValuation.value) + BigInt(Math.floor(amount));
397
406
  const singleVaultWeight = BigInt(this.consts.sudoCore.vaults[collateralToken].weight);
@@ -412,17 +421,20 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
412
421
  transactionBlock: tx2,
413
422
  sender,
414
423
  });
415
- const de = bcs_1.Rate.parse(new Uint8Array(res2.results[res2.results.length - 1].returnValues[0][0]));
424
+ const de = bcs_1.Rate.parse(new Uint8Array(res2.results.at(-1).returnValues[0][0]));
416
425
  return Number(BigInt(de)) / 1e18;
417
426
  }
418
427
  async reservingFeeRate(collateralToken, amount, sender) {
428
+ if (!sender) {
429
+ throw new Error('Sender address is required for reservingFeeRate calculation');
430
+ }
419
431
  const vaultInfo = await this.getVaultInfo(collateralToken);
420
- const vaultSupply = vaultInfo.liquidity +
421
- vaultInfo.reservedAmount +
422
- vaultInfo.unrealisedReservingFeeAmount +
423
- amount;
432
+ const vaultSupply = vaultInfo.liquidity
433
+ + vaultInfo.reservedAmount
434
+ + vaultInfo.unrealisedReservingFeeAmount
435
+ + amount;
424
436
  const utilization = vaultSupply
425
- ? parseInt((((vaultInfo.reservedAmount + amount) / vaultSupply) * 1e18).toFixed(0))
437
+ ? Number.parseInt((((vaultInfo.reservedAmount + amount) / vaultSupply) * 1e18).toFixed(0), 10)
426
438
  : 0;
427
439
  const tx = new transactions_1.Transaction();
428
440
  tx.moveCall({
@@ -437,7 +449,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
437
449
  transactionBlock: tx,
438
450
  sender,
439
451
  });
440
- const de = bcs_1.Rate.parse(new Uint8Array(res.results[res.results.length - 1].returnValues[0][0]));
452
+ const de = bcs_1.Rate.parse(new Uint8Array(res.results.at(-1).returnValues[0][0]));
441
453
  return Number(BigInt(de)) / 1e18;
442
454
  }
443
455
  async getPositionConfig(indexToken, long) {
@@ -452,12 +464,12 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
452
464
  showContent: true,
453
465
  },
454
466
  });
455
- return this.parsePositionConfig(rawData);
467
+ return SLPDataAPI.parsePositionConfig(rawData);
456
468
  }
457
469
  async getOpenPositions(batchSize = 50, symbol = 'sui') {
458
470
  let positionDynamicFields = [];
459
471
  let _continue = true;
460
- let cursor = undefined;
472
+ let cursor;
461
473
  while (_continue) {
462
474
  // data here will be a list of dynamic fields containing name and value
463
475
  const { data, nextCursor, hasNextPage } = await this.provider.getDynamicFields({
@@ -469,23 +481,21 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
469
481
  cursor = nextCursor;
470
482
  }
471
483
  // Filter by symbol if provided
472
- if (symbol && this.consts.coins[symbol]) {
473
- const coinModule = symbol === 'sui' ? '0x2::sui::SUI' : this.consts.coins[symbol].module;
474
- positionDynamicFields = positionDynamicFields.filter(field => {
475
- // Extract the second coin module from PositionName<coin1, coin2, direction>
476
- const typeStr = field.name?.type;
477
- if (!typeStr)
478
- return false;
479
- const match = typeStr.match(/PositionName<([^,]+),\s*([^,]+),\s*([^>]+)>/);
480
- if (!match)
481
- return false;
482
- const secondCoin = match[2].trim();
483
- return secondCoin === coinModule;
484
- });
485
- }
486
- else {
484
+ if (!(symbol && this.consts.coins[symbol])) {
487
485
  return [];
488
486
  }
487
+ const coinModule = symbol === 'sui' ? '0x2::sui::SUI' : this.consts.coins[symbol].module;
488
+ positionDynamicFields = positionDynamicFields.filter((field) => {
489
+ // Extract the second coin module from PositionName<coin1, coin2, direction>
490
+ const typeStr = field.name?.type;
491
+ if (!typeStr)
492
+ return false;
493
+ const match = typeStr.match(/PositionName<([^,]+),([^,]+),([^>]+)>/);
494
+ if (!match)
495
+ return false;
496
+ const secondCoin = match[2].trim();
497
+ return secondCoin === coinModule;
498
+ });
489
499
  // then we query by dynamic field names and order by time
490
500
  const positionInfoList = [];
491
501
  for (let i = 0; i < positionDynamicFields.length; i += batchSize) {
@@ -496,7 +506,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
496
506
  name: positionDynamicField.name,
497
507
  });
498
508
  if (positionRaw?.data?.content) {
499
- // @ts-ignore
509
+ // @ts-expect-error: content fields type is not properly defined
500
510
  if (positionRaw?.data?.content?.fields?.value?.fields?.closed) {
501
511
  // skip closed positions
502
512
  return;
@@ -513,7 +523,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
513
523
  .sort((a, b) => (a.openTimestamp > b.openTimestamp ? 1 : -1));
514
524
  }
515
525
  async getPositionCapInfoList(owner) {
516
- let cursor = undefined;
526
+ let cursor;
517
527
  let hasNextPage = true;
518
528
  const positionCapInfoList = [];
519
529
  while (hasNextPage) {
@@ -547,7 +557,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
547
557
  return positionCapInfoList;
548
558
  }
549
559
  async getOrderCapInfoList(owner) {
550
- let cursor = undefined;
560
+ let cursor;
551
561
  let hasNextPage = true;
552
562
  const orderCapInfoList = [];
553
563
  while (hasNextPage) {
@@ -605,7 +615,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
605
615
  const orderRaw = await this.provider.getDynamicFieldObject({
606
616
  parentId: this.consts.sudoCore.ordersParent,
607
617
  name: {
608
- type: `${this.consts.sudoCore.package}::market::OrderName<${orderCapInfo.symbol0}, ${orderCapInfo.symbol1}, ${this.consts.sudoCore.package}::market::${orderCapInfo.long ? 'LONG' : 'SHORT'}, ${this.consts.coins['sui'].module}>`,
618
+ type: `${this.consts.sudoCore.package}::market::OrderName<${orderCapInfo.symbol0}, ${orderCapInfo.symbol1}, ${this.consts.sudoCore.package}::market::${orderCapInfo.long ? 'LONG' : 'SHORT'}, ${this.consts.coins.sui.module}>`,
609
619
  value: {
610
620
  owner,
611
621
  id: orderCapInfo.orderCapId,
@@ -622,9 +632,9 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
622
632
  async getCumulativeApr() {
623
633
  const refetchDate = new Date(Date.now() - 3600000);
624
634
  // fetch new every hour
625
- if (!aprResponse?.generatedAt ||
626
- (aprResponse?.generatedAt &&
627
- refetchDate > new Date(aprResponse?.generatedAt))) {
635
+ if (!aprResponse?.generatedAt
636
+ || (aprResponse?.generatedAt
637
+ && refetchDate > new Date(aprResponse?.generatedAt))) {
628
638
  try {
629
639
  const url = `${this.apiEndpoint}/cumulativeApr`;
630
640
  const res = await fetch(url, {
@@ -634,64 +644,63 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
634
644
  },
635
645
  });
636
646
  const data = await res.json();
647
+ // eslint-disable-next-line require-atomic-updates
637
648
  aprResponse = { ...data };
638
649
  return data.cumulativeApr;
639
650
  }
640
- catch (e) {
651
+ catch {
641
652
  console.error('Failed to get cumulative APR');
642
653
  }
643
654
  return 0;
644
655
  }
645
- else {
646
- return aprResponse.apr;
647
- }
656
+ return aprResponse.apr;
648
657
  }
649
658
  // Private helper methods
650
- calculatePositionFundingFee(position, symbol, model, price, lpSupplyAmount, timestamp) {
659
+ static calculatePositionFundingFee(position, symbol, model, price, lpSupplyAmount, timestamp) {
651
660
  const accFundingRate = this.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp, position.long);
652
661
  return position.fundingFeeValue + (accFundingRate - position.lastFundingRate) * position.positionSize;
653
662
  }
654
- calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp, isLong) {
663
+ static calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp, isLong) {
655
664
  if (symbol.lastUpdate > 0) {
656
665
  const elapsed = timestamp - symbol.lastUpdate;
657
666
  if (elapsed > 0) {
658
667
  const deltaSize = this.calcDeltaSize(symbol, price, isLong);
659
668
  const pnlPerLp = (symbol.realisedPnl + symbol.unrealisedFundingFeeValue + deltaSize) / lpSupplyAmount;
660
- return symbol.accFundingRate + this.calcFundingFeeRate(model, pnlPerLp, elapsed);
669
+ return symbol.accFundingRate + SLPDataAPI.calcFundingFeeRate(model, pnlPerLp, elapsed);
661
670
  }
662
671
  }
663
672
  return symbol.accFundingRate;
664
673
  }
665
- calcDeltaSize(symbol, price, isLong) {
674
+ static calcDeltaSize(symbol, price, isLong) {
666
675
  const latestSize = symbol.openingAmount * price;
667
676
  return isLong ? symbol.openingSize - latestSize : latestSize - symbol.openingSize;
668
677
  }
669
- calcFundingFeeRate(model, pnlPerRate, elapsed) {
678
+ static calcFundingFeeRate(model, pnlPerRate, elapsed) {
670
679
  const dailyRate = Math.min(model.multiplier * Math.abs(pnlPerRate), model.max);
671
680
  const secondsRate = dailyRate * elapsed / SECONDS_PER_EIGHT_HOUR;
672
681
  return pnlPerRate >= 0 ? -secondsRate : secondsRate;
673
682
  }
674
- calculatePositionReserveFee(position, vault, model, timestamp) {
675
- const accReservingRate = this.calcAccReservingFeeRate(vault, model, timestamp);
683
+ static calculatePositionReserveFee(position, vault, model, timestamp) {
684
+ const accReservingRate = SLPDataAPI.calcAccReservingFeeRate(vault, model, timestamp);
676
685
  return position.reservingFeeAmount + (accReservingRate - position.lastReservingRate) * position.collateralAmount;
677
686
  }
678
- calcAccReservingFeeRate(vault, model, timestamp) {
687
+ static calcAccReservingFeeRate(vault, model, timestamp) {
679
688
  if (vault.lastUpdate > 0) {
680
689
  const elapsed = timestamp - vault.lastUpdate;
681
690
  if (elapsed > 0) {
682
- const utilization = this.vaultUtilization(vault);
683
- return vault.accReservingRate + this.calcReservingFeeRate(model, utilization, elapsed);
691
+ const utilization = SLPDataAPI.vaultUtilization(vault);
692
+ return vault.accReservingRate + SLPDataAPI.calcReservingFeeRate(model, utilization, elapsed);
684
693
  }
685
694
  }
686
695
  return vault.accReservingRate;
687
696
  }
688
- vaultUtilization(vault) {
697
+ static vaultUtilization(vault) {
689
698
  return vault.liquidity > 0 ? vault.reservedAmount / vault.liquidity : 0;
690
699
  }
691
- calcReservingFeeRate(model, utilization, elapsed) {
700
+ static calcReservingFeeRate(model, utilization, elapsed) {
692
701
  return model.multiplier * utilization * elapsed / SECONDS_PER_EIGHT_HOUR;
693
702
  }
694
- parsePositionConfig(raw) {
703
+ static parsePositionConfig(raw) {
695
704
  const positionConfigFields = raw.data.content.fields.inner.fields;
696
705
  return {
697
706
  decreaseFeeBps: (0, utils_2.parseValue)(positionConfigFields.decrease_fee_bps),
@@ -704,21 +713,21 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
704
713
  minCollateralValue: (0, utils_2.parseValue)(positionConfigFields.min_collateral_value),
705
714
  };
706
715
  }
707
- parseRebaseFeeModel(raw) {
716
+ static parseRebaseFeeModel(raw) {
708
717
  const { fields } = raw.data.content;
709
718
  return {
710
719
  base: (0, utils_2.parseValue)(fields.base),
711
720
  multiplier: (0, utils_2.parseValue)(fields.multiplier),
712
721
  };
713
722
  }
714
- parseFundingFeeModel(raw) {
723
+ static parseFundingFeeModel(raw) {
715
724
  const { fields } = raw.data.content;
716
725
  return {
717
726
  multiplier: (0, utils_2.parseValue)(fields.multiplier),
718
727
  max: (0, utils_2.parseValue)(fields.max),
719
728
  };
720
729
  }
721
- parseMarketInfo(raw) {
730
+ static parseMarketInfo(raw) {
722
731
  const content = raw.data.content.fields;
723
732
  return {
724
733
  lpSupply: content.lp_supply.fields.value,
@@ -737,7 +746,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
737
746
  showContent: true,
738
747
  },
739
748
  });
740
- const reservingFeeModel = this.parseReservingFeeModel(reservingFeeModelRaw);
749
+ const reservingFeeModel = SLPDataAPI.parseReservingFeeModel(reservingFeeModelRaw);
741
750
  return {
742
751
  liquidity: (0, utils_2.parseValue)(vaultFields.liquidity),
743
752
  reservedAmount: (0, utils_2.parseValue)(vaultFields.reserved_amount),
@@ -755,14 +764,14 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
755
764
  },
756
765
  };
757
766
  }
758
- parseReservingFeeModel(raw) {
767
+ static parseReservingFeeModel(raw) {
759
768
  const content = raw.data.content.fields;
760
769
  return {
761
770
  multiplier: (0, utils_2.parseValue)(content.multiplier),
762
771
  };
763
772
  }
764
773
  async parseSymbolInfo(raw, long) {
765
- const fields = raw.data.content.fields.value.fields;
774
+ const { fields } = raw.data.content.fields.value;
766
775
  const fundingFeeModelAddr = fields.funding_fee_model;
767
776
  const fundingFeeModelRaw = await this.provider.getObject({
768
777
  id: fundingFeeModelAddr,
@@ -770,7 +779,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
770
779
  showContent: true,
771
780
  },
772
781
  });
773
- const fundingFeeModel = this.parseFundingFeeModel(fundingFeeModelRaw);
782
+ const fundingFeeModel = SLPDataAPI.parseFundingFeeModel(fundingFeeModelRaw);
774
783
  return {
775
784
  openingSize: (0, utils_2.parseValue)(fields.opening_size),
776
785
  openingAmount: (0, utils_2.parseValue)(fields.opening_amount),
@@ -792,15 +801,15 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
792
801
  };
793
802
  }
794
803
  async parsePositionInfo(raw, id_) {
795
- const content = raw.data.content;
796
- const fields = content.fields;
804
+ const { content } = raw.data;
805
+ const { fields } = content;
797
806
  const positionFields = fields.value.fields;
798
807
  const dataType = fields.name.type;
799
808
  const positionInfo = {
800
809
  id: id_,
801
810
  long: dataType.includes('::market::LONG'),
802
811
  owner: fields.name.fields.owner,
803
- version: parseInt(raw.data.version, 10),
812
+ version: Number.parseInt(raw.data.version, 10),
804
813
  collateralToken: (0, utils_2.suiSymbolToSymbol)(dataType.split('<')[1].split(',')[0].trim(), this.consts),
805
814
  indexToken: (0, utils_2.suiSymbolToSymbol)(dataType.split(',')[1].trim(), this.consts),
806
815
  collateralAmount: (0, utils_2.parseValue)(positionFields.collateral),
@@ -817,8 +826,8 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
817
826
  };
818
827
  if (!positionFields.closed) {
819
828
  try {
820
- positionInfo.reservingFeeAmount = this.calculatePositionReserveFee(positionInfo, await this.getVaultInfo(positionInfo.collateralToken), (await this.getVaultInfo(positionInfo.collateralToken)).reservingFeeModel, Date.now() / 1000);
821
- positionInfo.fundingFeeValue = this.calculatePositionFundingFee(positionInfo, await this.getSymbolInfo(positionInfo.indexToken, positionInfo.long), (await this.getSymbolInfo(positionInfo.indexToken, positionInfo.long)).fundingFeeModel, (await this.getOraclePrice(positionInfo.indexToken)).getPriceUnchecked().getPriceAsNumberUnchecked(), (await this.getMarketInfo()).lpSupplyWithDecimals, Date.now() / 1000);
829
+ positionInfo.reservingFeeAmount = SLPDataAPI.calculatePositionReserveFee(positionInfo, await this.getVaultInfo(positionInfo.collateralToken), (await this.getVaultInfo(positionInfo.collateralToken)).reservingFeeModel, Date.now() / 1000);
830
+ positionInfo.fundingFeeValue = SLPDataAPI.calculatePositionFundingFee(positionInfo, await this.getSymbolInfo(positionInfo.indexToken, positionInfo.long), (await this.getSymbolInfo(positionInfo.indexToken, positionInfo.long)).fundingFeeModel, (await this.getOraclePrice(positionInfo.indexToken)).getPriceUnchecked().getPriceAsNumberUnchecked(), (await this.getMarketInfo()).lpSupplyWithDecimals, Date.now() / 1000);
822
831
  }
823
832
  catch (e) {
824
833
  console.error(e);
@@ -829,14 +838,14 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
829
838
  return positionInfo;
830
839
  }
831
840
  parseOrderInfo(raw, capId) {
832
- let content = raw.data.content;
833
- let fields = content.fields.value.fields;
841
+ const { content } = raw.data;
842
+ const { fields } = content.fields.value;
834
843
  // Extract tokens from dataType
835
- let dataType = content.type;
844
+ const dataType = content.type;
836
845
  const orderType = content.fields.value.type.includes('OpenPositionOrder')
837
846
  ? 'OPEN_POSITION'
838
847
  : 'DECREASE_POSITION';
839
- let ret = {
848
+ const ret = {
840
849
  id: content.fields.id.id,
841
850
  capId,
842
851
  executed: fields.executed,
@@ -866,7 +875,7 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
866
875
  }
867
876
  return ret;
868
877
  }
869
- parseCredential(raw, pool) {
878
+ static parseCredential(raw, pool) {
870
879
  const stakedAmount = BigInt(raw.data.content.fields.stake);
871
880
  const accRewardPerShare = BigInt(raw.data.content.fields.acc_reward_per_share);
872
881
  return {
@@ -874,11 +883,11 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
874
883
  lockUntil: (0, utils_2.parseValue)(raw.data.content.fields.lock_until),
875
884
  amount: stakedAmount,
876
885
  accRewardPerShare,
877
- claimable: ((pool.accRewardPerShare - accRewardPerShare) * stakedAmount) /
878
- BigInt(1e18),
886
+ claimable: ((pool.accRewardPerShare - accRewardPerShare) * stakedAmount)
887
+ / BigInt(1e18),
879
888
  };
880
889
  }
881
- parseStakePool(raw) {
890
+ static parseStakePool(raw) {
882
891
  const content = raw.data.content.fields;
883
892
  const pool = {
884
893
  id: content.id.id,
@@ -891,22 +900,22 @@ class SLPDataAPI extends abstract_1.BaseDataAPI {
891
900
  accRewardPerShare: BigInt(content.acc_reward_per_share),
892
901
  lockDuration: (0, utils_2.parseValue)(content.lock_duration),
893
902
  };
894
- this.refreshPool(pool, Math.floor(Date.now() / 1000));
903
+ SLPDataAPI.refreshPool(pool, Math.floor(Date.now() / 1000));
895
904
  return pool;
896
905
  }
897
- refreshPool(pool, timestamp) {
906
+ static refreshPool(pool, timestamp) {
898
907
  if (timestamp === pool.lastUpdatedTime || timestamp < pool.startTime) {
899
908
  return;
900
909
  }
901
- if (pool.lastUpdatedTime === pool.endTime ||
902
- pool.stakedAmount === BigInt(0)) {
910
+ if (pool.lastUpdatedTime === pool.endTime
911
+ || pool.stakedAmount === BigInt(0)) {
903
912
  return;
904
913
  }
905
914
  if (timestamp > pool.endTime) {
906
915
  timestamp = pool.endTime;
907
916
  }
908
- const rewardAmount = (pool.reward * BigInt(timestamp - pool.lastUpdatedTime)) /
909
- BigInt(pool.endTime - pool.lastUpdatedTime);
917
+ const rewardAmount = (pool.reward * BigInt(timestamp - pool.lastUpdatedTime))
918
+ / BigInt(pool.endTime - pool.lastUpdatedTime);
910
919
  pool.lastUpdatedTime = timestamp;
911
920
  const rewardPerShare = (rewardAmount * BigInt(1e18)) / pool.stakedAmount;
912
921
  pool.accRewardPerShare += rewardPerShare;