defi-dash-sdk 0.1.4 → 0.1.5

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 (216) hide show
  1. package/dist/esm/index.js +40 -0
  2. package/dist/esm/index.js.map +1 -0
  3. package/dist/esm/protocols/base-adapter.js +78 -0
  4. package/dist/esm/protocols/base-adapter.js.map +1 -0
  5. package/dist/esm/protocols/index.js +8 -0
  6. package/dist/esm/protocols/index.js.map +1 -0
  7. package/dist/esm/protocols/navi/adapter.js +393 -0
  8. package/dist/esm/protocols/navi/adapter.js.map +1 -0
  9. package/dist/{protocols/scallop.js → esm/protocols/scallop/adapter.js} +252 -95
  10. package/dist/esm/protocols/scallop/adapter.js.map +1 -0
  11. package/dist/{lib/scallop/flash-loan-client.js → esm/protocols/scallop/flash-loan.js} +63 -8
  12. package/dist/esm/protocols/scallop/flash-loan.js.map +1 -0
  13. package/dist/esm/protocols/scallop/index.js +6 -0
  14. package/dist/esm/protocols/scallop/index.js.map +1 -0
  15. package/dist/esm/protocols/scallop/types.js +67 -0
  16. package/dist/esm/protocols/scallop/types.js.map +1 -0
  17. package/dist/esm/protocols/suilend/adapter.js +464 -0
  18. package/dist/esm/protocols/suilend/adapter.js.map +1 -0
  19. package/dist/{lib → esm/protocols}/suilend/calculators.js +41 -51
  20. package/dist/esm/protocols/suilend/calculators.js.map +1 -0
  21. package/dist/esm/protocols/suilend/constants.js +159 -0
  22. package/dist/{lib/suilend/const.js.map → esm/protocols/suilend/constants.js.map} +1 -1
  23. package/dist/{lib/suilend/suilend.js → esm/protocols/suilend/types.js} +7 -13
  24. package/dist/esm/protocols/suilend/types.js.map +1 -0
  25. package/dist/esm/sdk.js +569 -0
  26. package/dist/esm/sdk.js.map +1 -0
  27. package/dist/esm/strategies/common.js +75 -0
  28. package/dist/esm/strategies/common.js.map +1 -0
  29. package/dist/esm/strategies/deleverage.js +218 -0
  30. package/dist/esm/strategies/deleverage.js.map +1 -0
  31. package/dist/esm/strategies/index.js +10 -0
  32. package/dist/esm/strategies/index.js.map +1 -0
  33. package/dist/esm/strategies/leverage-preview.js +117 -0
  34. package/dist/esm/strategies/leverage-preview.js.map +1 -0
  35. package/dist/esm/strategies/leverage-route.js +109 -0
  36. package/dist/esm/strategies/leverage-route.js.map +1 -0
  37. package/dist/esm/strategies/leverage.js +156 -0
  38. package/dist/esm/strategies/leverage.js.map +1 -0
  39. package/dist/esm/strategies/scallop-leverage.js +140 -0
  40. package/dist/esm/strategies/scallop-leverage.js.map +1 -0
  41. package/dist/esm/types/common.js +13 -0
  42. package/dist/esm/types/common.js.map +1 -0
  43. package/dist/esm/types/config.js +5 -0
  44. package/dist/esm/types/config.js.map +1 -0
  45. package/dist/esm/types/constants.js +128 -0
  46. package/dist/esm/types/constants.js.map +1 -0
  47. package/dist/esm/types/index.js +10 -0
  48. package/dist/esm/types/index.js.map +1 -0
  49. package/dist/esm/types/position.js +5 -0
  50. package/dist/esm/types/position.js.map +1 -0
  51. package/dist/esm/types/protocol.js +5 -0
  52. package/dist/esm/types/protocol.js.map +1 -0
  53. package/dist/esm/types/strategy.js +5 -0
  54. package/dist/esm/types/strategy.js.map +1 -0
  55. package/dist/esm/utils/calculations.js +33 -0
  56. package/dist/esm/utils/calculations.js.map +1 -0
  57. package/dist/esm/utils/coin.js +54 -0
  58. package/dist/esm/utils/coin.js.map +1 -0
  59. package/dist/esm/utils/errors.js +111 -0
  60. package/dist/esm/utils/errors.js.map +1 -0
  61. package/dist/esm/utils/execution.js +106 -0
  62. package/dist/esm/utils/execution.js.map +1 -0
  63. package/dist/{lib → esm}/utils/format.js +2 -6
  64. package/dist/esm/utils/format.js.map +1 -0
  65. package/dist/esm/utils/gas.js +38 -0
  66. package/dist/esm/utils/gas.js.map +1 -0
  67. package/dist/esm/utils/index.js +13 -0
  68. package/dist/esm/utils/index.js.map +1 -0
  69. package/dist/{lib → esm}/utils/logger.js +17 -31
  70. package/dist/esm/utils/logger.js.map +1 -0
  71. package/package.json +11 -2
  72. package/dist/__tests__/deleverageEstimate.unit.test.d.ts +0 -10
  73. package/dist/__tests__/deleverageEstimate.unit.test.d.ts.map +0 -1
  74. package/dist/__tests__/deleverageEstimate.unit.test.js +0 -116
  75. package/dist/__tests__/deleverageEstimate.unit.test.js.map +0 -1
  76. package/dist/__tests__/findBestLeverageRoute.test.d.ts +0 -12
  77. package/dist/__tests__/findBestLeverageRoute.test.d.ts.map +0 -1
  78. package/dist/__tests__/findBestLeverageRoute.test.js +0 -177
  79. package/dist/__tests__/findBestLeverageRoute.test.js.map +0 -1
  80. package/dist/__tests__/getAssetApy.test.d.ts +0 -2
  81. package/dist/__tests__/getAssetApy.test.d.ts.map +0 -1
  82. package/dist/__tests__/getAssetApy.test.js +0 -133
  83. package/dist/__tests__/getAssetApy.test.js.map +0 -1
  84. package/dist/__tests__/getAssetRiskParams.test.d.ts +0 -11
  85. package/dist/__tests__/getAssetRiskParams.test.d.ts.map +0 -1
  86. package/dist/__tests__/getAssetRiskParams.test.js +0 -183
  87. package/dist/__tests__/getAssetRiskParams.test.js.map +0 -1
  88. package/dist/__tests__/internal.getAssetApy.test.d.ts +0 -2
  89. package/dist/__tests__/internal.getAssetApy.test.d.ts.map +0 -1
  90. package/dist/__tests__/internal.getAssetApy.test.js +0 -140
  91. package/dist/__tests__/internal.getAssetApy.test.js.map +0 -1
  92. package/dist/__tests__/internal.getAssetRiskParams.test.d.ts +0 -22
  93. package/dist/__tests__/internal.getAssetRiskParams.test.d.ts.map +0 -1
  94. package/dist/__tests__/internal.getAssetRiskParams.test.js +0 -194
  95. package/dist/__tests__/internal.getAssetRiskParams.test.js.map +0 -1
  96. package/dist/__tests__/internal.getPosition.test.d.ts +0 -22
  97. package/dist/__tests__/internal.getPosition.test.d.ts.map +0 -1
  98. package/dist/__tests__/internal.getPosition.test.js +0 -153
  99. package/dist/__tests__/internal.getPosition.test.js.map +0 -1
  100. package/dist/__tests__/leveragePreview.unit.test.d.ts +0 -10
  101. package/dist/__tests__/leveragePreview.unit.test.d.ts.map +0 -1
  102. package/dist/__tests__/leveragePreview.unit.test.js +0 -168
  103. package/dist/__tests__/leveragePreview.unit.test.js.map +0 -1
  104. package/dist/__tests__/leverageRoute.unit.test.d.ts +0 -10
  105. package/dist/__tests__/leverageRoute.unit.test.d.ts.map +0 -1
  106. package/dist/__tests__/leverageRoute.unit.test.js +0 -159
  107. package/dist/__tests__/leverageRoute.unit.test.js.map +0 -1
  108. package/dist/__tests__/previewLeverage.test.d.ts +0 -13
  109. package/dist/__tests__/previewLeverage.test.d.ts.map +0 -1
  110. package/dist/__tests__/previewLeverage.test.js +0 -217
  111. package/dist/__tests__/previewLeverage.test.js.map +0 -1
  112. package/dist/__tests__/sdk.bestRoute.test.d.ts +0 -22
  113. package/dist/__tests__/sdk.bestRoute.test.d.ts.map +0 -1
  114. package/dist/__tests__/sdk.bestRoute.test.js +0 -186
  115. package/dist/__tests__/sdk.bestRoute.test.js.map +0 -1
  116. package/dist/__tests__/sdk.bestRoute.unit.test.d.ts +0 -16
  117. package/dist/__tests__/sdk.bestRoute.unit.test.d.ts.map +0 -1
  118. package/dist/__tests__/sdk.bestRoute.unit.test.js +0 -165
  119. package/dist/__tests__/sdk.bestRoute.unit.test.js.map +0 -1
  120. package/dist/__tests__/sdk.deleverage.test.d.ts +0 -21
  121. package/dist/__tests__/sdk.deleverage.test.d.ts.map +0 -1
  122. package/dist/__tests__/sdk.deleverage.test.js +0 -130
  123. package/dist/__tests__/sdk.deleverage.test.js.map +0 -1
  124. package/dist/__tests__/sdk.deleverage.unit.test.d.ts +0 -21
  125. package/dist/__tests__/sdk.deleverage.unit.test.d.ts.map +0 -1
  126. package/dist/__tests__/sdk.deleverage.unit.test.js +0 -141
  127. package/dist/__tests__/sdk.deleverage.unit.test.js.map +0 -1
  128. package/dist/__tests__/sdk.leverage.test.d.ts +0 -19
  129. package/dist/__tests__/sdk.leverage.test.d.ts.map +0 -1
  130. package/dist/__tests__/sdk.leverage.test.js +0 -188
  131. package/dist/__tests__/sdk.leverage.test.js.map +0 -1
  132. package/dist/__tests__/sdk.portfolio.test.d.ts +0 -17
  133. package/dist/__tests__/sdk.portfolio.test.d.ts.map +0 -1
  134. package/dist/__tests__/sdk.portfolio.test.js +0 -162
  135. package/dist/__tests__/sdk.portfolio.test.js.map +0 -1
  136. package/dist/__tests__/sdk.position.test.d.ts +0 -16
  137. package/dist/__tests__/sdk.position.test.d.ts.map +0 -1
  138. package/dist/__tests__/sdk.position.test.js +0 -193
  139. package/dist/__tests__/sdk.position.test.js.map +0 -1
  140. package/dist/__tests__/sdk.preview.test.d.ts +0 -23
  141. package/dist/__tests__/sdk.preview.test.d.ts.map +0 -1
  142. package/dist/__tests__/sdk.preview.test.js +0 -226
  143. package/dist/__tests__/sdk.preview.test.js.map +0 -1
  144. package/dist/__tests__/sdk.preview.unit.test.d.ts +0 -18
  145. package/dist/__tests__/sdk.preview.unit.test.d.ts.map +0 -1
  146. package/dist/__tests__/sdk.preview.unit.test.js +0 -175
  147. package/dist/__tests__/sdk.preview.unit.test.js.map +0 -1
  148. package/dist/__tests__/utils.normalizeCoinType.test.d.ts +0 -7
  149. package/dist/__tests__/utils.normalizeCoinType.test.d.ts.map +0 -1
  150. package/dist/__tests__/utils.normalizeCoinType.test.js +0 -42
  151. package/dist/__tests__/utils.normalizeCoinType.test.js.map +0 -1
  152. package/dist/lib/navi_calculations.d.ts +0 -76
  153. package/dist/lib/navi_calculations.d.ts.map +0 -1
  154. package/dist/lib/navi_calculations.js +0 -185
  155. package/dist/lib/navi_calculations.js.map +0 -1
  156. package/dist/lib/scallop/flash-loan-client.d.ts +0 -88
  157. package/dist/lib/scallop/flash-loan-client.d.ts.map +0 -1
  158. package/dist/lib/scallop/flash-loan-client.js.map +0 -1
  159. package/dist/lib/scallop/flash-loan.d.ts +0 -30
  160. package/dist/lib/scallop/flash-loan.d.ts.map +0 -1
  161. package/dist/lib/scallop/flash-loan.js +0 -61
  162. package/dist/lib/scallop/flash-loan.js.map +0 -1
  163. package/dist/lib/scallop/index.d.ts +0 -3
  164. package/dist/lib/scallop/index.d.ts.map +0 -1
  165. package/dist/lib/scallop/index.js +0 -7
  166. package/dist/lib/scallop/index.js.map +0 -1
  167. package/dist/lib/scallop/scallop-addresses.d.ts +0 -24
  168. package/dist/lib/scallop/scallop-addresses.d.ts.map +0 -1
  169. package/dist/lib/scallop/scallop-addresses.js +0 -67
  170. package/dist/lib/scallop/scallop-addresses.js.map +0 -1
  171. package/dist/lib/scallop/scallop-builder.d.ts +0 -96
  172. package/dist/lib/scallop/scallop-builder.d.ts.map +0 -1
  173. package/dist/lib/scallop/scallop-builder.js +0 -163
  174. package/dist/lib/scallop/scallop-builder.js.map +0 -1
  175. package/dist/lib/suilend/calculators.d.ts +0 -44
  176. package/dist/lib/suilend/calculators.d.ts.map +0 -1
  177. package/dist/lib/suilend/calculators.js.map +0 -1
  178. package/dist/lib/suilend/const.d.ts +0 -9
  179. package/dist/lib/suilend/const.d.ts.map +0 -1
  180. package/dist/lib/suilend/const.js +0 -164
  181. package/dist/lib/suilend/suilend.d.ts +0 -15
  182. package/dist/lib/suilend/suilend.d.ts.map +0 -1
  183. package/dist/lib/suilend/suilend.js.map +0 -1
  184. package/dist/lib/utils/coin.d.ts +0 -21
  185. package/dist/lib/utils/coin.d.ts.map +0 -1
  186. package/dist/lib/utils/coin.js +0 -50
  187. package/dist/lib/utils/coin.js.map +0 -1
  188. package/dist/lib/utils/format.d.ts +0 -24
  189. package/dist/lib/utils/format.d.ts.map +0 -1
  190. package/dist/lib/utils/format.js.map +0 -1
  191. package/dist/lib/utils/index.d.ts +0 -9
  192. package/dist/lib/utils/index.d.ts.map +0 -1
  193. package/dist/lib/utils/index.js +0 -25
  194. package/dist/lib/utils/index.js.map +0 -1
  195. package/dist/lib/utils/logger.d.ts +0 -30
  196. package/dist/lib/utils/logger.d.ts.map +0 -1
  197. package/dist/lib/utils/logger.js.map +0 -1
  198. package/dist/protocols/interface.d.ts +0 -129
  199. package/dist/protocols/interface.d.ts.map +0 -1
  200. package/dist/protocols/interface.js +0 -8
  201. package/dist/protocols/interface.js.map +0 -1
  202. package/dist/protocols/navi.d.ts +0 -34
  203. package/dist/protocols/navi.d.ts.map +0 -1
  204. package/dist/protocols/navi.js +0 -263
  205. package/dist/protocols/navi.js.map +0 -1
  206. package/dist/protocols/scallop.d.ts +0 -297
  207. package/dist/protocols/scallop.d.ts.map +0 -1
  208. package/dist/protocols/scallop.js.map +0 -1
  209. package/dist/protocols/suilend.d.ts +0 -29
  210. package/dist/protocols/suilend.d.ts.map +0 -1
  211. package/dist/protocols/suilend.js +0 -313
  212. package/dist/protocols/suilend.js.map +0 -1
  213. package/dist/types.d.ts +0 -188
  214. package/dist/types.d.ts.map +0 -1
  215. package/dist/types.js +0 -22
  216. package/dist/types.js.map +0 -1
@@ -0,0 +1,40 @@
1
+ /**
2
+ * DeFi Dash SDK
3
+ *
4
+ * Multi-protocol DeFi SDK for Sui blockchain integrating leverage strategies,
5
+ * flash loans, and lending protocols.
6
+ *
7
+ * @module defi-dash-sdk
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { DefiDashSDK, LendingProtocol } from 'defi-dash-sdk';
12
+ *
13
+ * const sdk = await DefiDashSDK.create(suiClient, keypair);
14
+ *
15
+ * // Build leverage transaction
16
+ * const tx = new Transaction();
17
+ * tx.setSender(address);
18
+ * await sdk.buildLeverageTransaction(tx, {
19
+ * protocol: LendingProtocol.Suilend,
20
+ * depositAsset: 'LBTC',
21
+ * depositAmount: '0.001',
22
+ * multiplier: 2.0,
23
+ * });
24
+ *
25
+ * // Node.js: execute via SDK
26
+ * const result = await sdk.execute(tx);
27
+ *
28
+ * // Browser: execute via wallet adapter
29
+ * await signAndExecute({ transaction: tx });
30
+ * ```
31
+ */
32
+ // Main SDK
33
+ export { DefiDashSDK } from './sdk';
34
+ // Enums & Constants
35
+ export { LendingProtocol, USDC_COIN_TYPE, SUI_COIN_TYPE, COIN_TYPES, } from './types';
36
+ // Utilities (frontend-facing only)
37
+ export { formatUnits, parseUnits } from './utils/format';
38
+ export { normalizeCoinType } from './utils/coin';
39
+ export { DefiDashError, SDKNotInitializedError, InvalidParameterError, InvalidCoinTypeError, } from './utils/errors';
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEpC,oBAAoB;AACpB,OAAO,EACL,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,SAAS,CAAC;AA2BjB,mCAAmC;AACnC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Base Protocol Adapter
3
+ *
4
+ * Abstract base class for all lending protocol adapters.
5
+ * Implements ILendingProtocol to enforce compile-time method checks.
6
+ *
7
+ * Any class extending this MUST implement all abstract methods,
8
+ * otherwise TypeScript will produce a build error:
9
+ * "Non-abstract class 'XxxAdapter' does not implement inherited abstract member 'methodName'"
10
+ *
11
+ * This is the TypeScript equivalent of Go's interface compliance pattern:
12
+ * var _ ILendingProtocol = (*MyAdapter)(nil)
13
+ */
14
+ import { normalizeCoinType } from "../utils";
15
+ /**
16
+ * Abstract base class for protocol adapters.
17
+ *
18
+ * Provides common utilities (SuiClient management, coin normalization).
19
+ * All ILendingProtocol methods are declared abstract — subclasses MUST implement them.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * export class NewProtocolAdapter extends BaseProtocolAdapter {
24
+ * readonly name = "new-protocol";
25
+ * readonly consumesRepaymentCoin = false;
26
+ *
27
+ * async initialize(suiClient: SuiClient): Promise<void> {
28
+ * await super.initialize(suiClient);
29
+ * // protocol-specific init
30
+ * }
31
+ *
32
+ * // All abstract methods must be implemented:
33
+ * async getPosition(userAddress: string) { ... }
34
+ * async deposit(tx, coin, coinType, userAddress) { ... }
35
+ * async withdraw(tx, coinType, amount, userAddress) { ... }
36
+ * async borrow(tx, coinType, amount, userAddress) { ... }
37
+ * async repay(tx, coinType, coin, userAddress) { ... }
38
+ * async refreshOracles(tx, coinTypes, userAddress) { ... }
39
+ * async getAccountPortfolio(address) { ... }
40
+ * async getAssetRiskParams(coinType) { ... }
41
+ * async getAssetApy(coinType) { ... }
42
+ * }
43
+ * ```
44
+ */
45
+ export class BaseProtocolAdapter {
46
+ constructor() {
47
+ this.initialized = false;
48
+ }
49
+ // ── Base implementation ──────────────────────────────────────────────────
50
+ async initialize(suiClient) {
51
+ this.suiClient = suiClient;
52
+ this.initialized = true;
53
+ }
54
+ /**
55
+ * Optional: clear pending state between transactions.
56
+ * Override in subclass if needed (e.g., Scallop obligation tracking).
57
+ */
58
+ clearPendingState() {
59
+ // no-op by default
60
+ }
61
+ // ── Protected utilities ──────────────────────────────────────────────────
62
+ ensureInitialized() {
63
+ if (!this.initialized) {
64
+ throw new Error(`${this.name} adapter not initialized`);
65
+ }
66
+ }
67
+ normalizeCoin(coinType) {
68
+ return normalizeCoinType(coinType);
69
+ }
70
+ formatAmount(amount, decimals) {
71
+ return Number(amount) / Math.pow(10, decimals);
72
+ }
73
+ parseAmount(amount, decimals) {
74
+ const value = typeof amount === "string" ? parseFloat(amount) : amount;
75
+ return BigInt(Math.floor(value * Math.pow(10, decimals)));
76
+ }
77
+ }
78
+ //# sourceMappingURL=base-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../../../src/protocols/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,OAAgB,mBAAmB;IAAzC;QAEY,gBAAW,GAAG,KAAK,CAAC;IAuFhC,CAAC;IAnCC,4EAA4E;IAE5E,KAAK,CAAC,UAAU,CAAC,SAAoB;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,iBAAiB;QACf,mBAAmB;IACrB,CAAC;IAED,4EAA4E;IAElE,iBAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,0BAA0B,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAES,aAAa,CAAC,QAAgB;QACtC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAES,YAAY,CAAC,MAAc,EAAE,QAAgB;QACrD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAES,WAAW,CAAC,MAAuB,EAAE,QAAgB;QAC7D,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * DeFi Dash SDK - Protocol Adapters
3
+ */
4
+ export { BaseProtocolAdapter } from "./base-adapter";
5
+ export { SuilendAdapter } from "./suilend/adapter";
6
+ export { NaviAdapter } from "./navi/adapter";
7
+ export { ScallopAdapter } from "./scallop/adapter";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/protocols/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,393 @@
1
+ /**
2
+ * DeFi Dash SDK - Navi Protocol Adapter
3
+ *
4
+ * Implements ILendingProtocol for Navi
5
+ */
6
+ import { depositCoinPTB, withdrawCoinPTB, borrowCoinPTB, repayCoinPTB, getPools, getLendingState, updateOraclePricesPTB, getPriceFeeds, getHealthFactor, } from "@naviprotocol/lending";
7
+ import { USDC_COIN_TYPE, LendingProtocol, } from "../../types";
8
+ import { normalizeCoinType } from "../../utils";
9
+ import { getReserveByCoinType } from "../suilend/constants";
10
+ import { getTokenPrice } from "@7kprotocol/sdk-ts";
11
+ // Navi SDK returns balances with 9 decimal precision internally
12
+ const NAVI_BALANCE_DECIMALS = 9;
13
+ /**
14
+ * Navi lending protocol adapter
15
+ */
16
+ export class NaviAdapter {
17
+ constructor() {
18
+ this.name = "navi";
19
+ this.consumesRepaymentCoin = true; // Navi's repayCoinPTB consumes entire coin
20
+ this.pools = [];
21
+ this.priceFeeds = [];
22
+ this.initialized = false;
23
+ }
24
+ async initialize(suiClient) {
25
+ this.suiClient = suiClient;
26
+ // Fetch pools
27
+ const poolsResult = await getPools({ env: "prod" });
28
+ this.pools = Array.isArray(poolsResult)
29
+ ? poolsResult
30
+ : Object.values(poolsResult);
31
+ // Fetch price feeds
32
+ this.priceFeeds = await getPriceFeeds({ env: "prod" });
33
+ this.initialized = true;
34
+ }
35
+ ensureInitialized() {
36
+ if (!this.initialized) {
37
+ throw new Error("NaviAdapter not initialized. Call initialize() first.");
38
+ }
39
+ }
40
+ getPool(coinType) {
41
+ const normalized = normalizeCoinType(coinType);
42
+ return this.pools.find((p) => {
43
+ const poolCoinType = normalizeCoinType(p.coinType ?? p.suiCoinType ?? "");
44
+ return poolCoinType === normalized;
45
+ });
46
+ }
47
+ getPriceFeed(coinType) {
48
+ const normalized = normalizeCoinType(coinType);
49
+ return this.priceFeeds.find((f) => normalizeCoinType(f.coinType) === normalized);
50
+ }
51
+ async getPosition(userAddress) {
52
+ this.ensureInitialized();
53
+ const lendingState = await getLendingState(userAddress, { env: "prod" });
54
+ if (lendingState.length === 0)
55
+ return null;
56
+ const activePositions = lendingState.filter((p) => BigInt(p.supplyBalance) > 0 || BigInt(p.borrowBalance) > 0);
57
+ if (activePositions.length === 0)
58
+ return null;
59
+ // Build all supply and borrow positions
60
+ const supplies = [];
61
+ const allBorrows = [];
62
+ for (const pos of activePositions) {
63
+ const poolCoinType = normalizeCoinType(pos.pool.coinType);
64
+ const reserve = getReserveByCoinType(poolCoinType);
65
+ const decimals = reserve?.decimals || 9;
66
+ const symbol = reserve?.symbol || poolCoinType.split("::").pop() || "???";
67
+ if (BigInt(pos.supplyBalance) > 0) {
68
+ const amount = BigInt(pos.supplyBalance);
69
+ const price = await getTokenPrice(poolCoinType);
70
+ supplies.push({
71
+ amount,
72
+ symbol,
73
+ coinType: poolCoinType,
74
+ decimals: NAVI_BALANCE_DECIMALS, // Navi uses 9 decimals internally
75
+ valueUsd: (Number(amount) / Math.pow(10, NAVI_BALANCE_DECIMALS)) * price,
76
+ });
77
+ }
78
+ if (BigInt(pos.borrowBalance) > 0) {
79
+ const rawAmount = BigInt(pos.borrowBalance);
80
+ // Convert from Navi's 9 decimal precision to native decimals
81
+ const amount = rawAmount / BigInt(10 ** (NAVI_BALANCE_DECIMALS - decimals));
82
+ const price = await getTokenPrice(poolCoinType);
83
+ allBorrows.push({
84
+ amount,
85
+ symbol,
86
+ coinType: poolCoinType,
87
+ decimals,
88
+ valueUsd: (Number(amount) / Math.pow(10, decimals)) * price,
89
+ });
90
+ }
91
+ }
92
+ // Primary = largest by USD value
93
+ const collateral = [...supplies].sort((a, b) => b.valueUsd - a.valueUsd)[0] ?? null;
94
+ if (!collateral)
95
+ return null;
96
+ const debt = allBorrows.length > 0
97
+ ? [...allBorrows].sort((a, b) => b.valueUsd - a.valueUsd)[0]
98
+ : null;
99
+ const totalSupplyUsd = supplies.reduce((s, p) => s + p.valueUsd, 0);
100
+ const totalDebtUsd = allBorrows.reduce((s, p) => s + p.valueUsd, 0);
101
+ return {
102
+ collateral,
103
+ debt: debt || {
104
+ amount: 0n,
105
+ symbol: "USDC",
106
+ coinType: normalizeCoinType(USDC_COIN_TYPE),
107
+ decimals: 6,
108
+ valueUsd: 0,
109
+ },
110
+ supplies,
111
+ borrows: allBorrows,
112
+ netValueUsd: totalSupplyUsd - totalDebtUsd,
113
+ };
114
+ }
115
+ async deposit(tx, coin, coinType, userAddress) {
116
+ this.ensureInitialized();
117
+ const pool = this.getPool(coinType);
118
+ if (!pool) {
119
+ throw new Error(`Pool not found for ${coinType}`);
120
+ }
121
+ // Navi's depositCoinPTB expects the coin directly
122
+ await depositCoinPTB(tx, pool, coin, {
123
+ env: "prod",
124
+ });
125
+ }
126
+ async withdraw(tx, coinType, amount, userAddress) {
127
+ this.ensureInitialized();
128
+ const pool = this.getPool(coinType);
129
+ if (!pool) {
130
+ throw new Error(`Pool not found for ${coinType}`);
131
+ }
132
+ const withdrawnCoin = await withdrawCoinPTB(tx, pool, Number(amount), { env: "prod" });
133
+ return withdrawnCoin;
134
+ }
135
+ async borrow(tx, coinType, amount, userAddress, skipOracle = false) {
136
+ this.ensureInitialized();
137
+ const pool = this.getPool(coinType);
138
+ if (!pool) {
139
+ throw new Error(`Pool not found for ${coinType}`);
140
+ }
141
+ const borrowedCoin = await borrowCoinPTB(tx, pool, Number(amount), {
142
+ env: "prod",
143
+ });
144
+ return borrowedCoin;
145
+ }
146
+ async repay(tx, coinType, coin, userAddress) {
147
+ this.ensureInitialized();
148
+ const pool = this.getPool(coinType);
149
+ if (!pool) {
150
+ throw new Error(`Pool not found for ${coinType}`);
151
+ }
152
+ await repayCoinPTB(tx, pool, coin, {
153
+ env: "prod",
154
+ });
155
+ }
156
+ async refreshOracles(tx, coinTypes, _userAddress) {
157
+ this.ensureInitialized();
158
+ // Navi's calculator::calculate_value requires ALL pool oracles to be fresh,
159
+ // not just the assets being operated on. Refresh all available feeds to avoid
160
+ // abort 1502 during withdraw/borrow health factor checks.
161
+ const feedsToUpdate = this.priceFeeds.length > 0 ? this.priceFeeds : coinTypes
162
+ .map((ct) => this.getPriceFeed(ct))
163
+ .filter(Boolean);
164
+ if (feedsToUpdate.length > 0) {
165
+ await updateOraclePricesPTB(tx, feedsToUpdate, {
166
+ env: "prod",
167
+ updatePythPriceFeeds: true,
168
+ });
169
+ }
170
+ }
171
+ /**
172
+ * Get aggregated portfolio
173
+ */
174
+ async getAccountPortfolio(address) {
175
+ this.ensureInitialized();
176
+ const [lendingState, healthFactor] = await Promise.all([
177
+ getLendingState(address, { env: "prod" }),
178
+ getHealthFactor(address, { env: "prod" }),
179
+ ]);
180
+ const positions = [];
181
+ let totalCollateralUsd = 0;
182
+ let totalDebtUsd = 0;
183
+ let borrowLimitUsd = 0;
184
+ let liquidationThresholdUsd = 0;
185
+ for (const state of lendingState) {
186
+ const coinType = normalizeCoinType(state.coinType ?? state.pool?.coinType ?? "");
187
+ const reserve = getReserveByCoinType(coinType);
188
+ const symbol = reserve?.symbol || "UNKNOWN";
189
+ const price = parseFloat(state.pool?.oracle?.price ?? state.pool?.price ?? "0");
190
+ const supplyRaw = BigInt(state.supplyBalance ?? 0);
191
+ const borrowRaw = BigInt(state.borrowBalance ?? 0);
192
+ // Return APY as decimal (e.g., 0.03 for 3%) to match Suilend format
193
+ // Navi returns APY in percentage (e.g., 3.161 for 3.161%)
194
+ // Convert to decimal to match Suilend format
195
+ const getApy = (raw) => {
196
+ const val = parseFloat(raw ?? "0");
197
+ return val / 100;
198
+ };
199
+ if (supplyRaw > 0) {
200
+ // Navi internal balances are 9 decimals
201
+ const amount = Number(supplyRaw) / Math.pow(10, NAVI_BALANCE_DECIMALS);
202
+ const valueUsd = amount * price;
203
+ totalCollateralUsd += valueUsd;
204
+ // Get LTV and liquidation threshold from pool
205
+ const liqThreshold = parseFloat(state.pool?.liquidationFactor?.threshold ?? "0.8");
206
+ const ltv = liqThreshold - 0.05; // Safety margin, same as getMarkets
207
+ borrowLimitUsd += valueUsd * ltv;
208
+ liquidationThresholdUsd += valueUsd * liqThreshold;
209
+ const supplyApy = getApy(state.pool?.supplyApy ?? state.pool?.supplyIncentiveApyInfo?.apy);
210
+ positions.push({
211
+ protocol: LendingProtocol.Navi,
212
+ symbol,
213
+ coinType,
214
+ side: "supply",
215
+ amount,
216
+ valueUsd,
217
+ apy: supplyApy,
218
+ });
219
+ }
220
+ if (borrowRaw > 0) {
221
+ const amount = Number(borrowRaw) / Math.pow(10, NAVI_BALANCE_DECIMALS);
222
+ const valueUsd = amount * price;
223
+ totalDebtUsd += valueUsd;
224
+ const borrowApy = getApy(state.pool?.borrowApy ?? state.pool?.borrowIncentiveApyInfo?.apy);
225
+ positions.push({
226
+ protocol: LendingProtocol.Navi,
227
+ symbol,
228
+ coinType,
229
+ side: "borrow",
230
+ amount,
231
+ valueUsd,
232
+ apy: borrowApy,
233
+ });
234
+ }
235
+ }
236
+ // Calculate net APY and annual earnings
237
+ const netValueUsd = totalCollateralUsd - totalDebtUsd;
238
+ let weightedSupplyApy = 0;
239
+ let weightedBorrowApy = 0;
240
+ for (const pos of positions) {
241
+ if (pos.side === "supply" && totalCollateralUsd > 0) {
242
+ weightedSupplyApy += (pos.valueUsd / totalCollateralUsd) * pos.apy;
243
+ }
244
+ else if (pos.side === "borrow" && totalDebtUsd > 0) {
245
+ weightedBorrowApy += (pos.valueUsd / totalDebtUsd) * pos.apy;
246
+ }
247
+ }
248
+ // Net APY on equity = (supply earnings - borrow costs) / net value
249
+ const supplyEarnings = totalCollateralUsd * weightedSupplyApy;
250
+ const borrowCosts = totalDebtUsd * weightedBorrowApy;
251
+ const netApy = netValueUsd > 0 ? (supplyEarnings - borrowCosts) / netValueUsd : 0;
252
+ const totalAnnualNetEarningsUsd = supplyEarnings - borrowCosts;
253
+ return {
254
+ protocol: LendingProtocol.Navi,
255
+ address,
256
+ healthFactor: parseFloat(healthFactor.toString()),
257
+ netValueUsd,
258
+ totalCollateralUsd,
259
+ totalDepositedUsd: totalCollateralUsd,
260
+ totalDebtUsd,
261
+ weightedBorrowsUsd: totalDebtUsd, // Navi uses 1:1 weight for borrows
262
+ borrowLimitUsd,
263
+ liquidationThresholdUsd,
264
+ positions,
265
+ netApy,
266
+ totalAnnualNetEarningsUsd,
267
+ };
268
+ }
269
+ /**
270
+ * Get asset risk parameters for leverage calculations
271
+ *
272
+ * Navi uses:
273
+ * - ltv: Loan-to-Value ratio (RAY format, 10^27)
274
+ * - liquidation_threshold: Liquidation threshold from pool config
275
+ * - liquidation_bonus: Liquidation bonus from pool config
276
+ */
277
+ async getAssetRiskParams(coinType) {
278
+ this.ensureInitialized();
279
+ const pool = this.getPool(coinType);
280
+ if (!pool) {
281
+ // Fallback to conservative defaults
282
+ return {
283
+ ltv: 0.5,
284
+ liquidationThreshold: 0.6,
285
+ liquidationBonus: 0.05,
286
+ maxMultiplier: 2.0,
287
+ };
288
+ }
289
+ // Navi stores ltv as a string/number that may be in RAY format (10^27) or percentage
290
+ // Common values: 650000000000000000000000000 (65% in RAY) or 0.65 or 65
291
+ let ltv = 0.5;
292
+ if (pool.ltv) {
293
+ const ltvValue = parseFloat(pool.ltv.toString());
294
+ // If value is very large (RAY format: 10^27), normalize
295
+ if (ltvValue > 1e20) {
296
+ ltv = ltvValue / 1e27;
297
+ }
298
+ else if (ltvValue > 1) {
299
+ // Percentage format (e.g., 65 = 65%)
300
+ ltv = ltvValue / 100;
301
+ }
302
+ else {
303
+ // Already 0-1 format
304
+ ltv = ltvValue;
305
+ }
306
+ }
307
+ // Parse liquidation threshold similarly
308
+ let liquidationThreshold = 0.7;
309
+ if (pool.liquidationThreshold) {
310
+ const thresholdValue = parseFloat(pool.liquidationThreshold.toString());
311
+ if (thresholdValue > 1e20) {
312
+ liquidationThreshold = thresholdValue / 1e27;
313
+ }
314
+ else if (thresholdValue > 1) {
315
+ liquidationThreshold = thresholdValue / 100;
316
+ }
317
+ else {
318
+ liquidationThreshold = thresholdValue;
319
+ }
320
+ }
321
+ // Parse liquidation bonus
322
+ let liquidationBonus = 0.05;
323
+ if (pool.liquidationBonus) {
324
+ const bonusValue = parseFloat(pool.liquidationBonus.toString());
325
+ if (bonusValue > 1e20) {
326
+ liquidationBonus = bonusValue / 1e27;
327
+ }
328
+ else if (bonusValue > 1) {
329
+ liquidationBonus = bonusValue / 100;
330
+ }
331
+ else {
332
+ liquidationBonus = bonusValue;
333
+ }
334
+ }
335
+ // Calculate max multiplier: 1 / (1 - ltv)
336
+ const maxMultiplier = ltv > 0 && ltv < 1 ? 1 / (1 - ltv) : 1;
337
+ return {
338
+ ltv,
339
+ liquidationThreshold,
340
+ liquidationBonus,
341
+ maxMultiplier,
342
+ };
343
+ }
344
+ /**
345
+ * Get current supply/borrow APY for an asset.
346
+ *
347
+ * Navi's Pool object (from getPools) already contains:
348
+ * - currentBorrowRate: raw per-second borrow rate
349
+ * - currentSupplyRate: raw per-second supply rate
350
+ * - supplyIncentiveApyInfo.apy / borrowIncentiveApyInfo.apy: incentive APY (as a string percent)
351
+ *
352
+ * We convert raw per-second rates to per-year APR then add incentive APY.
353
+ */
354
+ async getAssetApy(coinType) {
355
+ this.ensureInitialized();
356
+ const pool = this.getPool(coinType);
357
+ if (!pool) {
358
+ throw new Error(`Navi: pool not found for ${normalizeCoinType(coinType)}`);
359
+ }
360
+ // Navi's Pool (from getPools) already exposes pre-computed APY info:
361
+ // supplyIncentiveApyInfo.apy = effective supply APY (% string, e.g. "2.96")
362
+ // supplyIncentiveApyInfo.vaultApr = base supply APR before incentives
363
+ // borrowIncentiveApyInfo.vaultApr = gross borrow cost (% string)
364
+ // borrowIncentiveApyInfo.apy = net borrow APY after borrow incentives
365
+ //
366
+ // We use vaultApr as the base supply APY and borrowIncentiveApyInfo.vaultApr
367
+ // as the borrow APY (gross cost to borrower).
368
+ // Reward APY = supplyIncentiveApyInfo.apy - supplyIncentiveApyInfo.vaultApr
369
+ // (difference attributable to staking yield, vault rewards, etc.)
370
+ const supplyInfo = pool.supplyIncentiveApyInfo ?? {};
371
+ const borrowInfo = pool.borrowIncentiveApyInfo ?? {};
372
+ // Base supply APR (e.g., "2.96" → 0.0296)
373
+ const baseSupplyApr = parseFloat(supplyInfo.vaultApr ?? "0") / 100;
374
+ // Total effective supply APY including staking/vault rewards
375
+ const totalSupplyApy = parseFloat(supplyInfo.apy ?? "0") / 100;
376
+ // Extra reward beyond base (staking yield etc.)
377
+ const rewardApy = Math.max(0, totalSupplyApy - baseSupplyApr);
378
+ // Gross borrow APR (what borrowers pay before incentives)
379
+ const grossBorrowApr = parseFloat(borrowInfo.vaultApr ?? "0") / 100;
380
+ // Net effective borrow cost after borrow incentive rebates
381
+ // borrowInfo.apy = grossBorrowApr - boostedApr (rebate from NAVX/reward tokens)
382
+ const netBorrowApy = parseFloat(borrowInfo.apy ?? borrowInfo.vaultApr ?? "0") / 100;
383
+ const borrowRewardApy = Math.max(0, grossBorrowApr - netBorrowApy);
384
+ return {
385
+ supplyApy: baseSupplyApr,
386
+ rewardApy,
387
+ totalSupplyApy,
388
+ borrowApy: netBorrowApy,
389
+ borrowRewardApy,
390
+ };
391
+ }
392
+ }
393
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/protocols/navi/adapter.ts"],"names":[],"mappings":"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"}