zo-sdk 0.1.2 → 0.1.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 (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 +56 -15
  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 +56 -15
  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 +61 -16
  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,3 +1,4 @@
1
+ /* eslint-disable no-await-in-loop */
1
2
  /**
2
3
  * ZLP DataAPI implementation
3
4
  * Implements ZLP-specific data access methods
@@ -6,45 +7,46 @@
6
7
  import type { DynamicFieldInfo, SuiClient } from '@mysten/sui/client'
7
8
  import type { Transaction } from '@mysten/sui/transactions'
8
9
  import { SUI_CLOCK_OBJECT_ID } from '@mysten/sui/utils'
10
+
11
+ import { BaseDataAPI } from '../abstract'
9
12
  import type { Network } from '../consts'
10
- import { LPToken, ZLP_TOKEN_DECIMALS, SECONDS_PER_EIGHT_HOUR } from '../consts'
13
+ import { LPToken, SECONDS_PER_EIGHT_HOUR, ZLP_TOKEN_DECIMALS } from '../consts'
11
14
  import type {
15
+ IBaseHistoryResponse,
16
+ IBaseStaked,
17
+ IBaseStakePool,
12
18
  IZLPDataAPI,
13
- IZLPMarketValuationInfo,
19
+ IZLPFundingFeeModel,
14
20
  IZLPMarketInfo,
15
- IZLPVaultInfo,
16
- IZLPSymbolInfo,
17
- IZLPPositionInfo,
21
+ IZLPMarketValuationInfo,
22
+ IZLPOrderCapInfo,
18
23
  IZLPOrderInfo,
19
- IZLPFundingFeeModel,
20
- IZLPPositionConfig,
21
24
  IZLPPositionCapInfo,
22
- IZLPReservingFeeModel,
23
- IZLPOrderCapInfo,
25
+ IZLPPositionConfig,
26
+ IZLPPositionInfo,
24
27
  IZLPRebaseFeeModel,
25
- IBaseHistoryResponse,
26
- IBaseStaked,
27
- IBaseStakePool
28
+ IZLPReservingFeeModel,
29
+ IZLPSymbolInfo,
30
+ IZLPVaultInfo,
28
31
  } from '../interfaces'
29
- import { BaseDataAPI } from '../abstract'
30
- import { parseSymbolKey, parseValue, suiSymbolToSymbol, joinSymbol } from '../utils'
32
+ import { joinSymbol, parseSymbolKey, parseValue, suiSymbolToSymbol } from '../utils'
31
33
 
32
34
  export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
33
35
  constructor(
34
36
  network: Network,
35
37
  provider: SuiClient,
36
38
  apiEndpoint: string,
37
- connectionURL: string
39
+ connectionURL: string,
38
40
  ) {
39
41
  super(network, provider, apiEndpoint, connectionURL, LPToken.ZLP)
40
42
  }
41
43
 
42
- public getStaked(owner: string): Promise<IBaseStaked> {
43
- throw new Error('Method not implemented.')
44
+ public getStaked(_owner: string): Promise<IBaseStaked> {
45
+ throw new Error(`${this.constructor.name}: Method not implemented.`)
44
46
  }
45
47
 
46
48
  public getStakePool(): Promise<IBaseStakePool> {
47
- throw new Error('Method not implemented.')
49
+ throw new Error(`${this.constructor.name}: Method not implemented.`)
48
50
  }
49
51
 
50
52
  /**
@@ -134,22 +136,22 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
134
136
 
135
137
  const vaultPromises = Object.keys(this.consts.zoCore.vaults).map(async (vault) => {
136
138
  const vaultInfo = await this.getVaultInfo(vault)
137
- const reservingFeeDelta = this.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, Date.now() / 1000)
139
+ const reservingFeeDelta = ZLPDataAPI.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, Date.now() / 1000)
138
140
  return (reservingFeeDelta + vaultInfo.liquidity + vaultInfo.reservedAmount) * (await this.getOraclePrice(vault)).getPriceUnchecked().getPriceAsNumberUnchecked() / (10 ** this.consts.coins[vault].decimals)
139
141
  })
140
142
 
141
143
  const symbolPromises = Object.keys(this.consts.zoCore.symbols).map(async (symbol) => {
142
144
  const [direction, tokenId] = parseSymbolKey(symbol)
143
145
  const symbolInfo = await this.getSymbolInfo(tokenId, direction === 'long')
144
- const deltaSize = this.calcDeltaSize(symbolInfo, (await this.getOraclePrice(tokenId)).getPriceUnchecked().getPriceAsNumberUnchecked())
145
- const fundingFeeDelta = this.calculateSymbolFundingFee(symbolInfo, symbolInfo.fundingFeeModel, (await this.getOraclePrice(tokenId)).getPriceUnchecked().getPriceAsNumberUnchecked(), marketInfo.lpSupplyWithDecimals, Date.now() / 1000)
146
+ const deltaSize = ZLPDataAPI.calcDeltaSize(symbolInfo, (await this.getOraclePrice(tokenId)).getPriceUnchecked().getPriceAsNumberUnchecked())
147
+ const fundingFeeDelta = ZLPDataAPI.calculateSymbolFundingFee(symbolInfo, symbolInfo.fundingFeeModel, (await this.getOraclePrice(tokenId)).getPriceUnchecked().getPriceAsNumberUnchecked(), marketInfo.lpSupplyWithDecimals, Date.now() / 1000)
146
148
  return fundingFeeDelta + deltaSize
147
149
  })
148
150
 
149
151
  const [vaultValues, symbolValues] = await Promise.all([Promise.all(vaultPromises), Promise.all(symbolPromises)])
150
152
 
151
- value = vaultValues.reduce((acc, curr) => acc + curr, 0)
152
- value += symbolValues.reduce((acc, curr) => acc + curr, 0)
153
+ value = vaultValues.reduce((acc: number, curr: number) => acc + curr, 0)
154
+ value += symbolValues.reduce((acc: number, curr: number) => acc + curr, 0)
153
155
 
154
156
  zlpPrice = value / marketInfo.lpSupplyWithDecimals
155
157
 
@@ -175,7 +177,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
175
177
  showContent: true,
176
178
  },
177
179
  })
178
- return this.parseMarketInfo(rawData)
180
+ return ZLPDataAPI.parseMarketInfo(rawData)
179
181
  }
180
182
 
181
183
  /**
@@ -228,12 +230,12 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
228
230
  showContent: true,
229
231
  },
230
232
  })
231
- return this.parsePositionConfig(rawData)
233
+ return ZLPDataAPI.parsePositionConfig(rawData)
232
234
  }
233
235
 
234
236
  public async getPositionCapInfoList(owner: string): Promise<IZLPPositionCapInfo[]> {
235
237
  const positionCapInfoList: IZLPPositionCapInfo[] = []
236
- let cursor: string | undefined | null = undefined
238
+ let cursor: string | undefined | null
237
239
  let hasNextPage = true
238
240
 
239
241
  while (hasNextPage) {
@@ -270,7 +272,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
270
272
  return positionCapInfoList
271
273
  }
272
274
 
273
- public async getPositionInfoList(positionCapInfoList: IZLPPositionCapInfo[], owner: string, batchSize: number = 10) {
275
+ public async getPositionInfoList(positionCapInfoList: IZLPPositionCapInfo[], owner: string, batchSize = 10) {
274
276
  const positionInfoList: IZLPPositionInfo[] = []
275
277
 
276
278
  // Process in batches of 10
@@ -290,7 +292,8 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
290
292
  },
291
293
  })
292
294
  positionInfoList.push(await this.parsePositionInfo(positionRaw, positionCapInfo.positionCapId))
293
- } catch (error) {
295
+ }
296
+ catch (error) {
294
297
  // Position might have been deleted after force settlement
295
298
  console.warn(`Failed to parse position info for position cap ID ${positionCapInfo.positionCapId}: ${error}`)
296
299
  // Continue with next position without adding this one to the list
@@ -301,14 +304,14 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
301
304
  return positionInfoList.sort((a, b) => a.openTimestamp > b.openTimestamp ? 1 : -1)
302
305
  }
303
306
 
304
- public async getOpenPositions(batchSize: number = 50, symbol: string = 'sui'): Promise<IZLPPositionInfo[]> {
307
+ public async getOpenPositions(batchSize = 50, symbol = 'sui'): Promise<IZLPPositionInfo[]> {
305
308
  let positionDynamicFields: DynamicFieldInfo[] = []
306
309
  let _continue = true
307
- let cursor = undefined
310
+ let cursor
308
311
  while (_continue) {
309
312
  // data here will be a list of dynamic fields containing name and value
310
- const { data, nextCursor, hasNextPage } =
311
- await this.provider.getDynamicFields({
313
+ const { data, nextCursor, hasNextPage }
314
+ = await this.provider.getDynamicFields({
312
315
  parentId: this.consts.zoCore.positionsParent,
313
316
  cursor,
314
317
  })
@@ -319,22 +322,23 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
319
322
  }
320
323
 
321
324
  // Filter by symbol if provided
322
- if (symbol && this.consts.coins[symbol]) {
323
- const coinModule = symbol === 'sui' ? '0x2::sui::SUI' : this.consts.coins[symbol].module
324
- positionDynamicFields = positionDynamicFields.filter(field => {
325
- // Extract the second coin module from PositionName<coin1, coin2, direction>
326
- const typeStr = field.name?.type
327
- if (!typeStr) return false
328
-
329
- const match = typeStr.match(/PositionName<([^,]+),\s*([^,]+),\s*([^>]+)>/)
330
- if (!match) return false
331
-
332
- const secondCoin = match[2].trim()
333
- return secondCoin === coinModule
334
- })
335
- } else {
325
+ if (!(symbol && this.consts.coins[symbol])) {
336
326
  return []
337
327
  }
328
+ const coinModule = symbol === 'sui' ? '0x2::sui::SUI' : this.consts.coins[symbol].module
329
+ positionDynamicFields = positionDynamicFields.filter((field) => {
330
+ // Extract the second coin module from PositionName<coin1, coin2, direction>
331
+ const typeStr = field.name?.type
332
+ if (!typeStr)
333
+ return false
334
+
335
+ const match = typeStr.match(/PositionName<([^,]+),([^,]+),([^>]+)>/)
336
+ if (!match)
337
+ return false
338
+
339
+ const secondCoin = match[2].trim()
340
+ return secondCoin === coinModule
341
+ })
338
342
 
339
343
  // then we query by dynamic field names and order by time
340
344
  const positionInfoList: IZLPPositionInfo[] = []
@@ -344,14 +348,14 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
344
348
  const batch = positionDynamicFields.slice(i, i + batchSize)
345
349
 
346
350
  await Promise.all(
347
- batch.map(async positionDynamicField => {
351
+ batch.map(async (positionDynamicField) => {
348
352
  const positionRaw = await this.provider.getDynamicFieldObject({
349
353
  parentId: this.consts.zoCore.positionsParent,
350
354
  name: positionDynamicField.name,
351
355
  })
352
356
 
353
357
  if (positionRaw?.data?.content) {
354
- // @ts-ignore
358
+ // @ts-expect-error: content fields type is not properly defined
355
359
  if (positionRaw?.data?.content?.fields?.value?.fields?.closed) {
356
360
  // skip closed positions
357
361
  return
@@ -375,7 +379,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
375
379
 
376
380
  public async getOrderCapInfoList(owner: string): Promise<IZLPOrderCapInfo[]> {
377
381
  const orderCapInfoList: IZLPOrderCapInfo[] = []
378
- let cursor: string | undefined | null = undefined
382
+ let cursor: string | undefined | null
379
383
  let hasNextPage = true
380
384
 
381
385
  while (hasNextPage) {
@@ -413,7 +417,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
413
417
  return orderCapInfoList
414
418
  }
415
419
 
416
- public async getOrderInfoList(orderCapInfoList: IZLPOrderCapInfo[], owner: string, batchSize: number = 10) {
420
+ public async getOrderInfoList(orderCapInfoList: IZLPOrderCapInfo[], owner: string, batchSize = 10) {
417
421
  const orderInfoList: IZLPOrderInfo[] = []
418
422
 
419
423
  // Process in batches of 10
@@ -437,7 +441,8 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
437
441
  },
438
442
  })
439
443
  orderInfoList.push(this.parseOrderInfo(orderRaw, orderCapInfo.orderCapId))
440
- } catch (error) {
444
+ }
445
+ catch (error) {
441
446
  // Order might have been deleted
442
447
  console.warn(`Failed to parse order info for order cap ID ${orderCapInfo.orderCapId}: ${error}`)
443
448
  // Continue with next order without adding this one to the list
@@ -478,7 +483,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
478
483
  showContent: true,
479
484
  },
480
485
  })
481
- return this.parseRebaseFeeModel(rawData)
486
+ return ZLPDataAPI.parseRebaseFeeModel(rawData)
482
487
  }
483
488
 
484
489
  public async fundingFeeRate(indexToken: string, long: boolean): Promise<number> {
@@ -491,9 +496,9 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
491
496
  const model = symbol.fundingFeeModel
492
497
  const elapsed = SECONDS_PER_EIGHT_HOUR
493
498
 
494
- const deltaSize = this.calcDeltaSize(symbol, price)
499
+ const deltaSize = ZLPDataAPI.calcDeltaSize(symbol, price)
495
500
  const pnlPerLp = (symbol.realisedPnl + symbol.unrealisedFundingFeeValue + deltaSize) / lpSupplyAmount
496
- return this.calcFundingFeeRate(model, pnlPerLp, elapsed)
501
+ return ZLPDataAPI.calcFundingFeeRate(model, pnlPerLp, elapsed)
497
502
  }
498
503
 
499
504
  public async rebaseFeeRate(collateralToken: string, increase: boolean, amount: number): Promise<number> {
@@ -504,7 +509,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
504
509
  const value = amount * (await this.getOraclePrice(collateralToken)).getPriceUnchecked().getPriceAsNumberUnchecked() / (10 ** this.consts.coins[collateralToken].decimals)
505
510
  const vaultPromises = Object.keys(this.consts.zoCore.vaults).map(async (vault) => {
506
511
  const vaultInfo = await this.getVaultInfo(vault)
507
- const reservingFeeDelta = this.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, Date.now() / 1000)
512
+ const reservingFeeDelta = ZLPDataAPI.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, Date.now() / 1000)
508
513
  const res = (reservingFeeDelta + vaultInfo.liquidity + vaultInfo.reservedAmount) * (await this.getOraclePrice(vault)).getPriceUnchecked().getPriceAsNumberUnchecked() / (10 ** this.consts.coins[vault].decimals)
509
514
  if (collateralToken === vault) {
510
515
  vaultValue = res
@@ -521,7 +526,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
521
526
  .map(e => Number.parseInt(e.weight, 10))
522
527
  .reduce((acc, curr) => acc + curr, 0)
523
528
 
524
- return this.calcRebaseFeeRate(
529
+ return ZLPDataAPI.calcRebaseFeeRate(
525
530
  await this.getRebaseFeeModel(),
526
531
  increase,
527
532
  (vaultValue + value) / (totalVaultValue + value),
@@ -533,7 +538,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
533
538
  const vaultInfo = await this.getVaultInfo(collateralToken)
534
539
  const vaultSupply = vaultInfo.liquidity + vaultInfo.reservedAmount + vaultInfo.unrealisedReservingFeeAmount + amount
535
540
  const utilization = vaultSupply ? ((vaultInfo.reservedAmount + amount) / vaultSupply) : 0
536
- return this.calcReservingFeeRate(vaultInfo.reservingFeeModel, utilization, SECONDS_PER_EIGHT_HOUR)
541
+ return ZLPDataAPI.calcReservingFeeRate(vaultInfo.reservingFeeModel, utilization, SECONDS_PER_EIGHT_HOUR)
537
542
  }
538
543
 
539
544
  public async getHistory(trader: string, page: number, limit: number, orderType?: string, symbol?: string): Promise<IBaseHistoryResponse> {
@@ -572,53 +577,53 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
572
577
  }
573
578
 
574
579
  // Private helper methods
575
- private calcFundingFeeRate(model: IZLPFundingFeeModel, pnlPerRate: number, elapsed: number): number {
580
+ private static calcFundingFeeRate(model: IZLPFundingFeeModel, pnlPerRate: number, elapsed: number): number {
576
581
  const dailyRate = Math.min(model.multiplier * Math.abs(pnlPerRate), model.max)
577
582
  const secondsRate = dailyRate * elapsed / SECONDS_PER_EIGHT_HOUR
578
583
  return pnlPerRate >= 0 ? -secondsRate : secondsRate
579
584
  }
580
585
 
581
- private calcAccFundingFeeRate(symbol: IZLPSymbolInfo, model: IZLPFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
586
+ private static calcAccFundingFeeRate(symbol: IZLPSymbolInfo, model: IZLPFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
582
587
  if (symbol.lastUpdate > 0) {
583
588
  const elapsed = timestamp - symbol.lastUpdate
584
589
  if (elapsed > 0) {
585
- const deltaSize = this.calcDeltaSize(symbol, price)
590
+ const deltaSize = ZLPDataAPI.calcDeltaSize(symbol, price)
586
591
  const pnlPerLp = (symbol.realisedPnl + symbol.unrealisedFundingFeeValue + deltaSize) / lpSupplyAmount
587
- return symbol.accFundingRate + this.calcFundingFeeRate(model, pnlPerLp, elapsed)
592
+ return symbol.accFundingRate + ZLPDataAPI.calcFundingFeeRate(model, pnlPerLp, elapsed)
588
593
  }
589
594
  }
590
595
  return symbol.accFundingRate
591
596
  }
592
597
 
593
- private calculateSymbolFundingFee(symbol: IZLPSymbolInfo, model: IZLPFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
594
- const accFundingRate = this.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp)
598
+ private static calculateSymbolFundingFee(symbol: IZLPSymbolInfo, model: IZLPFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
599
+ const accFundingRate = ZLPDataAPI.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp)
595
600
  return symbol.unrealisedFundingFeeValue + (accFundingRate - symbol.accFundingRate) * symbol.openingSize
596
601
  }
597
602
 
598
- private calculatePositionReserveFee(position: IZLPPositionInfo, vault: IZLPVaultInfo, model: IZLPReservingFeeModel, timestamp: number): number {
599
- const accReservingRate = this.calcAccReservingFeeRate(vault, model, timestamp)
603
+ private static calculatePositionReserveFee(position: IZLPPositionInfo, vault: IZLPVaultInfo, model: IZLPReservingFeeModel, timestamp: number): number {
604
+ const accReservingRate = ZLPDataAPI.calcAccReservingFeeRate(vault, model, timestamp)
600
605
  return position.reservingFeeAmount + (accReservingRate - position.lastReservingRate) * position.collateralAmount
601
606
  }
602
607
 
603
- private calcAccReservingFeeRate(vault: IZLPVaultInfo, model: IZLPReservingFeeModel, timestamp: number): number {
608
+ private static calcAccReservingFeeRate(vault: IZLPVaultInfo, model: IZLPReservingFeeModel, timestamp: number): number {
604
609
  if (vault.lastUpdate > 0) {
605
610
  const elapsed = timestamp - vault.lastUpdate
606
611
  if (elapsed > 0) {
607
- const utilization = this.vaultUtilization(vault)
608
- return vault.accReservingRate + this.calcReservingFeeRate(model, utilization, elapsed)
612
+ const utilization = ZLPDataAPI.vaultUtilization(vault)
613
+ return vault.accReservingRate + ZLPDataAPI.calcReservingFeeRate(model, utilization, elapsed)
609
614
  }
610
615
  }
611
616
  return vault.accReservingRate
612
617
  }
613
618
 
614
- private calcRebaseFeeRate(model: IZLPRebaseFeeModel, increase: boolean, ratio: number, targetRatio: number): number {
619
+ private static calcRebaseFeeRate(model: IZLPRebaseFeeModel, increase: boolean, ratio: number, targetRatio: number): number {
615
620
  if ((increase && ratio <= targetRatio) || (!increase && ratio >= targetRatio)) {
616
621
  return model.base
617
622
  }
618
623
  return model.base + model.multiplier * Math.abs(ratio - targetRatio)
619
624
  }
620
625
 
621
- private vaultUtilization(vault: IZLPVaultInfo): number {
626
+ private static vaultUtilization(vault: IZLPVaultInfo): number {
622
627
  const supplyAmount = vault.liquidity + vault.reservedAmount + vault.unrealisedReservingFeeAmount
623
628
  if (supplyAmount === 0) {
624
629
  return 0
@@ -626,16 +631,16 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
626
631
  return vault.reservedAmount / supplyAmount
627
632
  }
628
633
 
629
- private calcReservingFeeRate(model: IZLPReservingFeeModel, utilization: number, elapsed: number): number {
634
+ private static calcReservingFeeRate(model: IZLPReservingFeeModel, utilization: number, elapsed: number): number {
630
635
  return model.multiplier * utilization * elapsed / SECONDS_PER_EIGHT_HOUR
631
636
  }
632
637
 
633
- private calcDeltaSize(symbol: IZLPSymbolInfo, price: number): number {
638
+ private static calcDeltaSize(symbol: IZLPSymbolInfo, price: number): number {
634
639
  const latestSize = symbol.openingAmount / symbol.priceConfig.precision * price
635
640
  return symbol.long ? symbol.openingSize - latestSize : latestSize - symbol.openingSize
636
641
  }
637
642
 
638
- private parseMarketInfo(raw: any): IZLPMarketInfo {
643
+ private static parseMarketInfo(raw: any): IZLPMarketInfo {
639
644
  const content = raw.data.content.fields
640
645
 
641
646
  return {
@@ -659,7 +664,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
659
664
  showContent: true,
660
665
  },
661
666
  })
662
- const reservingFeeModel = this.parseReservingFeeModel(reservingFeeModelRaw)
667
+ const reservingFeeModel = ZLPDataAPI.parseReservingFeeModel(reservingFeeModelRaw)
663
668
 
664
669
  return {
665
670
  liquidity: parseValue(vaultFields.liquidity),
@@ -690,7 +695,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
690
695
  showContent: true,
691
696
  },
692
697
  })
693
- const fundingFeeModel = this.parseFundingFeeModel(fundingFeeModelRaw)
698
+ const fundingFeeModel = ZLPDataAPI.parseFundingFeeModel(fundingFeeModelRaw)
694
699
 
695
700
  return {
696
701
  openingSize: parseValue(fields.opening_size),
@@ -713,7 +718,7 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
713
718
  }
714
719
  }
715
720
 
716
- private parsePositionConfig(raw: any): IZLPPositionConfig {
721
+ private static parsePositionConfig(raw: any): IZLPPositionConfig {
717
722
  const positionConfigFields = raw.data.content.fields.inner.fields
718
723
 
719
724
  return {
@@ -753,18 +758,18 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
753
758
  openTimestamp: parseValue(positionFields.open_timestamp),
754
759
  }
755
760
 
756
- positionInfo.reservingFeeAmount = this.calculatePositionReserveFee(positionInfo, await this.getVaultInfo(positionInfo.collateralToken), (await this.getVaultInfo(positionInfo.collateralToken)).reservingFeeModel, Date.now() / 1000)
757
- 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)
761
+ positionInfo.reservingFeeAmount = ZLPDataAPI.calculatePositionReserveFee(positionInfo, await this.getVaultInfo(positionInfo.collateralToken), (await this.getVaultInfo(positionInfo.collateralToken)).reservingFeeModel, Date.now() / 1000)
762
+ positionInfo.fundingFeeValue = ZLPDataAPI.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)
758
763
 
759
764
  return positionInfo
760
765
  }
761
766
 
762
- private calculatePositionFundingFee(position: IZLPPositionInfo, symbol: IZLPSymbolInfo, model: IZLPFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
763
- const accFundingRate = this.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp)
767
+ private static calculatePositionFundingFee(position: IZLPPositionInfo, symbol: IZLPSymbolInfo, model: IZLPFundingFeeModel, price: number, lpSupplyAmount: number, timestamp: number): number {
768
+ const accFundingRate = ZLPDataAPI.calcAccFundingFeeRate(symbol, model, price, lpSupplyAmount, timestamp)
764
769
  return position.fundingFeeValue + (accFundingRate - position.lastFundingRate) * position.positionSize
765
770
  }
766
771
 
767
- private parseRebaseFeeModel(raw: any): { base: number; multiplier: number } {
772
+ private static parseRebaseFeeModel(raw: any): { base: number, multiplier: number } {
768
773
  const { fields } = raw.data.content
769
774
 
770
775
  return {
@@ -773,14 +778,14 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
773
778
  }
774
779
  }
775
780
 
776
- private parseReservingFeeModel(raw: any): { multiplier: number } {
781
+ private static parseReservingFeeModel(raw: any): { multiplier: number } {
777
782
  const content = raw.data.content.fields
778
783
  return {
779
784
  multiplier: parseValue(content.multiplier),
780
785
  }
781
786
  }
782
787
 
783
- private parseFundingFeeModel(raw: any): { multiplier: number; max: number } {
788
+ private static parseFundingFeeModel(raw: any): { multiplier: number, max: number } {
784
789
  const content = raw.data.content.fields
785
790
  return {
786
791
  multiplier: parseValue(content.multiplier),
@@ -843,14 +848,14 @@ export class ZLPDataAPI extends BaseDataAPI implements IZLPDataAPI {
843
848
  return Number.parseFloat(await res.text() || '0')
844
849
  }
845
850
 
846
- private calculateVaultReservingFee(
851
+ private static calculateVaultReservingFee(
847
852
  vaultInfo: IZLPVaultInfo,
848
853
  reservingFeeModel: { multiplier: number },
849
- currentTime: number
854
+ currentTime: number,
850
855
  ): number {
851
856
  const timeDelta = currentTime - vaultInfo.lastUpdate
852
857
  const periods = Math.floor(timeDelta / SECONDS_PER_EIGHT_HOUR)
853
- return vaultInfo.unrealisedReservingFeeAmount +
854
- (vaultInfo.reservedAmount * reservingFeeModel.multiplier * periods) / 1e18
858
+ return vaultInfo.unrealisedReservingFeeAmount
859
+ + (vaultInfo.reservedAmount * reservingFeeModel.multiplier * periods) / 1e18
855
860
  }
856
- }
861
+ }
@@ -4,11 +4,11 @@
4
4
  */
5
5
 
6
6
  // Data API implementations
7
- export { ZLPDataAPI } from './ZLPDataAPI'
8
7
  export { SLPDataAPI } from './SLPDataAPI'
9
8
  export { USDZDataAPI } from './USDZDataAPI'
9
+ export { ZLPDataAPI } from './ZLPDataAPI'
10
10
 
11
11
  // API implementations
12
- export { ZLPAPI } from './ZLPAPI'
13
12
  export { SLPAPI } from './SLPAPI'
14
- export { USDZAPI } from './USDZAPI'
13
+ export { USDZAPI } from './USDZAPI'
14
+ export { ZLPAPI } from './ZLPAPI'
package/src/index.ts CHANGED
@@ -1,20 +1,25 @@
1
1
  /**
2
2
  * ZO SDK - Re-architected Multi-LP Token SDK
3
- *
3
+ *
4
4
  * This SDK provides a unified interface for interacting with multiple LP tokens:
5
5
  * - ZLP (ZO Liquidity Provider)
6
- * - SLP (Sudo Liquidity Provider)
6
+ * - SLP (Sudo Liquidity Provider)
7
7
  * - USDZ (USD Stablecoin)
8
- *
8
+ *
9
9
  * The architecture follows a common interface pattern with specific implementations
10
10
  * for each LP token type, allowing for easy extension to support future LP tokens.
11
11
  */
12
12
 
13
13
  // Export new re-architected interfaces and implementations
14
- export * from './interfaces'
14
+ /**
15
+ * Default SDK instance for backward compatibility and convenience
16
+ */
17
+ import { SDKFactory } from './factory/SDKFactory'
18
+
15
19
  export * from './abstract'
16
- export * from './implementations'
17
20
  export * from './factory/SDKFactory'
21
+ export * from './implementations'
22
+ export * from './interfaces'
18
23
 
19
24
  // Export legacy components for backward compatibility
20
25
  export * from './api'
@@ -30,29 +35,24 @@ export type { Transaction } from '@mysten/sui/transactions'
30
35
 
31
36
  /**
32
37
  * Main SDK Factory instance for convenient access
33
- *
38
+ *
34
39
  * Usage examples:
35
- *
40
+ *
36
41
  * ```typescript
37
42
  * import { SDK, LPToken } from '@zo/sdk'
38
- *
43
+ *
39
44
  * // Create ZLP API instance
40
45
  * const zlpAPI = SDK.createZLPAPI(network, provider, apiEndpoint, connectionURL)
41
- *
42
- * // Create SLP API instance
46
+ *
47
+ * // Create SLP API instance
43
48
  * const slpAPI = SDK.createSLPAPI(network, provider, apiEndpoint, connectionURL)
44
- *
49
+ *
45
50
  * // Create USDZ API instance
46
51
  * const usdzAPI = SDK.createUSDZAPI(network, provider, apiEndpoint, connectionURL)
47
- *
52
+ *
48
53
  * // Or use the generic factory method
49
54
  * const api = SDK.createAPI(LPToken.ZLP, network, provider, apiEndpoint, connectionURL)
50
55
  * ```
51
56
  */
52
57
  export { SDKFactory as SDK } from './factory/SDKFactory'
53
-
54
- /**
55
- * Default SDK instance for backward compatibility and convenience
56
- */
57
- import { SDKFactory } from './factory/SDKFactory'
58
58
  export const defaultSDK = SDKFactory.getInstance()