defi-dash-sdk 0.1.3 → 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 (181) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +199 -97
  3. package/dist/__tests__/deleverageEstimate.unit.test.d.ts +10 -0
  4. package/dist/__tests__/deleverageEstimate.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/deleverageEstimate.unit.test.js +116 -0
  6. package/dist/__tests__/deleverageEstimate.unit.test.js.map +1 -0
  7. package/dist/__tests__/findBestLeverageRoute.test.d.ts +12 -0
  8. package/dist/__tests__/findBestLeverageRoute.test.d.ts.map +1 -0
  9. package/dist/__tests__/findBestLeverageRoute.test.js +177 -0
  10. package/dist/__tests__/findBestLeverageRoute.test.js.map +1 -0
  11. package/dist/__tests__/getAssetApy.test.d.ts +2 -0
  12. package/dist/__tests__/getAssetApy.test.d.ts.map +1 -0
  13. package/dist/__tests__/getAssetApy.test.js +133 -0
  14. package/dist/__tests__/getAssetApy.test.js.map +1 -0
  15. package/dist/__tests__/getAssetRiskParams.test.d.ts +11 -0
  16. package/dist/__tests__/getAssetRiskParams.test.d.ts.map +1 -0
  17. package/dist/__tests__/getAssetRiskParams.test.js +183 -0
  18. package/dist/__tests__/getAssetRiskParams.test.js.map +1 -0
  19. package/dist/__tests__/internal.getAssetApy.test.d.ts +2 -0
  20. package/dist/__tests__/internal.getAssetApy.test.d.ts.map +1 -0
  21. package/dist/__tests__/internal.getAssetApy.test.js +140 -0
  22. package/dist/__tests__/internal.getAssetApy.test.js.map +1 -0
  23. package/dist/__tests__/internal.getAssetRiskParams.test.d.ts +22 -0
  24. package/dist/__tests__/internal.getAssetRiskParams.test.d.ts.map +1 -0
  25. package/dist/__tests__/internal.getAssetRiskParams.test.js +194 -0
  26. package/dist/__tests__/internal.getAssetRiskParams.test.js.map +1 -0
  27. package/dist/__tests__/internal.getPosition.test.d.ts +22 -0
  28. package/dist/__tests__/internal.getPosition.test.d.ts.map +1 -0
  29. package/dist/__tests__/internal.getPosition.test.js +153 -0
  30. package/dist/__tests__/internal.getPosition.test.js.map +1 -0
  31. package/dist/__tests__/leveragePreview.unit.test.d.ts +10 -0
  32. package/dist/__tests__/leveragePreview.unit.test.d.ts.map +1 -0
  33. package/dist/__tests__/leveragePreview.unit.test.js +168 -0
  34. package/dist/__tests__/leveragePreview.unit.test.js.map +1 -0
  35. package/dist/__tests__/leverageRoute.unit.test.d.ts +10 -0
  36. package/dist/__tests__/leverageRoute.unit.test.d.ts.map +1 -0
  37. package/dist/__tests__/leverageRoute.unit.test.js +159 -0
  38. package/dist/__tests__/leverageRoute.unit.test.js.map +1 -0
  39. package/dist/__tests__/previewLeverage.test.d.ts +13 -0
  40. package/dist/__tests__/previewLeverage.test.d.ts.map +1 -0
  41. package/dist/__tests__/previewLeverage.test.js +217 -0
  42. package/dist/__tests__/previewLeverage.test.js.map +1 -0
  43. package/dist/__tests__/sdk.bestRoute.test.d.ts +22 -0
  44. package/dist/__tests__/sdk.bestRoute.test.d.ts.map +1 -0
  45. package/dist/__tests__/sdk.bestRoute.test.js +186 -0
  46. package/dist/__tests__/sdk.bestRoute.test.js.map +1 -0
  47. package/dist/__tests__/sdk.bestRoute.unit.test.d.ts +16 -0
  48. package/dist/__tests__/sdk.bestRoute.unit.test.d.ts.map +1 -0
  49. package/dist/__tests__/sdk.bestRoute.unit.test.js +165 -0
  50. package/dist/__tests__/sdk.bestRoute.unit.test.js.map +1 -0
  51. package/dist/__tests__/sdk.deleverage.test.d.ts +21 -0
  52. package/dist/__tests__/sdk.deleverage.test.d.ts.map +1 -0
  53. package/dist/__tests__/sdk.deleverage.test.js +130 -0
  54. package/dist/__tests__/sdk.deleverage.test.js.map +1 -0
  55. package/dist/__tests__/sdk.deleverage.unit.test.d.ts +21 -0
  56. package/dist/__tests__/sdk.deleverage.unit.test.d.ts.map +1 -0
  57. package/dist/__tests__/sdk.deleverage.unit.test.js +141 -0
  58. package/dist/__tests__/sdk.deleverage.unit.test.js.map +1 -0
  59. package/dist/__tests__/sdk.leverage.test.d.ts +19 -0
  60. package/dist/__tests__/sdk.leverage.test.d.ts.map +1 -0
  61. package/dist/__tests__/sdk.leverage.test.js +188 -0
  62. package/dist/__tests__/sdk.leverage.test.js.map +1 -0
  63. package/dist/__tests__/sdk.portfolio.test.d.ts +17 -0
  64. package/dist/__tests__/sdk.portfolio.test.d.ts.map +1 -0
  65. package/dist/__tests__/sdk.portfolio.test.js +162 -0
  66. package/dist/__tests__/sdk.portfolio.test.js.map +1 -0
  67. package/dist/__tests__/sdk.position.test.d.ts +16 -0
  68. package/dist/__tests__/sdk.position.test.d.ts.map +1 -0
  69. package/dist/__tests__/sdk.position.test.js +193 -0
  70. package/dist/__tests__/sdk.position.test.js.map +1 -0
  71. package/dist/__tests__/sdk.preview.test.d.ts +23 -0
  72. package/dist/__tests__/sdk.preview.test.d.ts.map +1 -0
  73. package/dist/__tests__/sdk.preview.test.js +226 -0
  74. package/dist/__tests__/sdk.preview.test.js.map +1 -0
  75. package/dist/__tests__/sdk.preview.unit.test.d.ts +18 -0
  76. package/dist/__tests__/sdk.preview.unit.test.d.ts.map +1 -0
  77. package/dist/__tests__/sdk.preview.unit.test.js +175 -0
  78. package/dist/__tests__/sdk.preview.unit.test.js.map +1 -0
  79. package/dist/__tests__/utils.normalizeCoinType.test.d.ts +7 -0
  80. package/dist/__tests__/utils.normalizeCoinType.test.d.ts.map +1 -0
  81. package/dist/__tests__/utils.normalizeCoinType.test.js +42 -0
  82. package/dist/__tests__/utils.normalizeCoinType.test.js.map +1 -0
  83. package/dist/index.d.ts +19 -11
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +24 -40
  86. package/dist/index.js.map +1 -1
  87. package/dist/protocols/base-adapter.d.ts +42 -75
  88. package/dist/protocols/base-adapter.d.ts.map +1 -1
  89. package/dist/protocols/base-adapter.js +34 -77
  90. package/dist/protocols/base-adapter.js.map +1 -1
  91. package/dist/protocols/navi/adapter.d.ts +22 -2
  92. package/dist/protocols/navi/adapter.d.ts.map +1 -1
  93. package/dist/protocols/navi/adapter.js +145 -11
  94. package/dist/protocols/navi/adapter.js.map +1 -1
  95. package/dist/protocols/scallop/adapter.d.ts +26 -6
  96. package/dist/protocols/scallop/adapter.d.ts.map +1 -1
  97. package/dist/protocols/scallop/adapter.js +206 -43
  98. package/dist/protocols/scallop/adapter.js.map +1 -1
  99. package/dist/protocols/scallop/flash-loan.d.ts +18 -3
  100. package/dist/protocols/scallop/flash-loan.d.ts.map +1 -1
  101. package/dist/protocols/scallop/flash-loan.js +79 -20
  102. package/dist/protocols/scallop/flash-loan.js.map +1 -1
  103. package/dist/protocols/scallop/types.d.ts.map +1 -1
  104. package/dist/protocols/scallop/types.js +4 -1
  105. package/dist/protocols/scallop/types.js.map +1 -1
  106. package/dist/protocols/suilend/adapter.d.ts +19 -1
  107. package/dist/protocols/suilend/adapter.d.ts.map +1 -1
  108. package/dist/protocols/suilend/adapter.js +196 -51
  109. package/dist/protocols/suilend/adapter.js.map +1 -1
  110. package/dist/sdk.d.ts +107 -148
  111. package/dist/sdk.d.ts.map +1 -1
  112. package/dist/sdk.js +171 -523
  113. package/dist/sdk.js.map +1 -1
  114. package/dist/strategies/common.d.ts +42 -0
  115. package/dist/strategies/common.d.ts.map +1 -0
  116. package/dist/strategies/common.js +81 -0
  117. package/dist/strategies/common.js.map +1 -0
  118. package/dist/strategies/deleverage.d.ts.map +1 -1
  119. package/dist/strategies/deleverage.js +44 -62
  120. package/dist/strategies/deleverage.js.map +1 -1
  121. package/dist/strategies/index.d.ts +9 -1
  122. package/dist/strategies/index.d.ts.map +1 -1
  123. package/dist/strategies/index.js +11 -2
  124. package/dist/strategies/index.js.map +1 -1
  125. package/dist/strategies/leverage-preview.d.ts +27 -0
  126. package/dist/strategies/leverage-preview.d.ts.map +1 -0
  127. package/dist/strategies/leverage-preview.js +120 -0
  128. package/dist/strategies/leverage-preview.js.map +1 -0
  129. package/dist/strategies/leverage-route.d.ts +29 -0
  130. package/dist/strategies/leverage-route.d.ts.map +1 -0
  131. package/dist/strategies/leverage-route.js +112 -0
  132. package/dist/strategies/leverage-route.js.map +1 -0
  133. package/dist/strategies/leverage.d.ts +4 -44
  134. package/dist/strategies/leverage.d.ts.map +1 -1
  135. package/dist/strategies/leverage.js +43 -112
  136. package/dist/strategies/leverage.js.map +1 -1
  137. package/dist/strategies/scallop-leverage.d.ts +34 -0
  138. package/dist/strategies/scallop-leverage.d.ts.map +1 -0
  139. package/dist/strategies/scallop-leverage.js +143 -0
  140. package/dist/strategies/scallop-leverage.js.map +1 -0
  141. package/dist/types/config.d.ts +0 -7
  142. package/dist/types/config.d.ts.map +1 -1
  143. package/dist/types/constants.d.ts +8 -0
  144. package/dist/types/constants.d.ts.map +1 -1
  145. package/dist/types/constants.js +9 -1
  146. package/dist/types/constants.js.map +1 -1
  147. package/dist/types/index.d.ts +3 -3
  148. package/dist/types/index.d.ts.map +1 -1
  149. package/dist/types/index.js +2 -1
  150. package/dist/types/index.js.map +1 -1
  151. package/dist/types/position.d.ts +7 -3
  152. package/dist/types/position.d.ts.map +1 -1
  153. package/dist/types/protocol.d.ts +101 -0
  154. package/dist/types/protocol.d.ts.map +1 -1
  155. package/dist/types/strategy.d.ts +82 -38
  156. package/dist/types/strategy.d.ts.map +1 -1
  157. package/dist/utils/calculations.d.ts +10 -137
  158. package/dist/utils/calculations.d.ts.map +1 -1
  159. package/dist/utils/calculations.js +11 -162
  160. package/dist/utils/calculations.js.map +1 -1
  161. package/dist/utils/coin.d.ts +16 -7
  162. package/dist/utils/coin.d.ts.map +1 -1
  163. package/dist/utils/coin.js +32 -25
  164. package/dist/utils/coin.js.map +1 -1
  165. package/dist/utils/errors.d.ts +0 -18
  166. package/dist/utils/errors.d.ts.map +1 -1
  167. package/dist/utils/errors.js +2 -40
  168. package/dist/utils/errors.js.map +1 -1
  169. package/dist/utils/execution.d.ts +38 -0
  170. package/dist/utils/execution.d.ts.map +1 -0
  171. package/dist/utils/execution.js +110 -0
  172. package/dist/utils/execution.js.map +1 -0
  173. package/dist/utils/gas.d.ts +0 -37
  174. package/dist/utils/gas.d.ts.map +1 -1
  175. package/dist/utils/gas.js +2 -60
  176. package/dist/utils/gas.js.map +1 -1
  177. package/dist/utils/index.d.ts +1 -1
  178. package/dist/utils/index.d.ts.map +1 -1
  179. package/dist/utils/index.js +1 -1
  180. package/dist/utils/index.js.map +1 -1
  181. package/package.json +15 -45
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * SDK Method: sdk.getPosition() / sdk.getOpenPositions() [Integration]
4
+ *
5
+ * Verifies the public position query methods with live mainnet data.
6
+ *
7
+ * Internal dependencies (tested separately):
8
+ * - protocol.getPosition() → see internal.getPosition.test.ts
9
+ *
10
+ * Verified output fields:
11
+ * - getPosition(): PositionInfo | null per protocol
12
+ * - getOpenPositions(): array of { protocol, position } across all protocols
13
+ *
14
+ * Run: npx vitest run src/__tests__/sdk.position.test.ts
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ const vitest_1 = require("vitest");
51
+ const dotenv = __importStar(require("dotenv"));
52
+ dotenv.config({ path: ".env" });
53
+ const __1 = require("..");
54
+ const client_1 = require("@mysten/sui/client");
55
+ const ed25519_1 = require("@mysten/sui/keypairs/ed25519");
56
+ // ── Print helpers ────────────────────────────────────────────────────────────
57
+ function printPosition(protocol, position) {
58
+ if (!position) {
59
+ console.log(` [${protocol}] No position`);
60
+ return;
61
+ }
62
+ const usd = (v) => `$${v.toFixed(4)}`;
63
+ const amt = (v, d) => (Number(v) / Math.pow(10, d)).toFixed(6);
64
+ const lines = [` [${protocol}]`];
65
+ for (const s of position.supplies) {
66
+ lines.push(` Supply: ${amt(s.amount, s.decimals)} ${s.symbol} (${usd(s.valueUsd)})`);
67
+ }
68
+ for (const b of position.borrows) {
69
+ lines.push(` Borrow: ${amt(b.amount, b.decimals)} ${b.symbol} (${usd(b.valueUsd)})`);
70
+ }
71
+ lines.push(` Net: ${usd(position.netValueUsd)}`);
72
+ console.log(lines.join("\n"));
73
+ }
74
+ function printOpenPositions(results) {
75
+ console.log(`\n┌─ Open Positions (${results.length} found) ──────────────────────`);
76
+ if (results.length === 0) {
77
+ console.log(`│ No open positions across any protocol`);
78
+ }
79
+ for (const { protocol, position } of results) {
80
+ printPosition(protocol, position);
81
+ }
82
+ console.log(`└──────────────────────────────────────────────────────────\n`);
83
+ }
84
+ // ── SDK Setup ────────────────────────────────────────────────────────────────
85
+ let sdk;
86
+ const SECRET_KEY = process.env.SECRET_KEY || process.env.SUI_SECRET_KEY;
87
+ (0, vitest_1.beforeAll)(async () => {
88
+ if (!SECRET_KEY)
89
+ throw new Error("SECRET_KEY env is required");
90
+ const suiClient = new client_1.SuiClient({
91
+ url: process.env.SUI_FULLNODE_URL || (0, client_1.getFullnodeUrl)("mainnet"),
92
+ });
93
+ const keypair = ed25519_1.Ed25519Keypair.fromSecretKey(SECRET_KEY);
94
+ sdk = await __1.DefiDashSDK.create(suiClient, keypair);
95
+ console.log(`\nWallet: ${keypair.getPublicKey().toSuiAddress()}\n`);
96
+ }, 60000);
97
+ // ── Shared assertions ────────────────────────────────────────────────────────
98
+ function assertValidPosition(position) {
99
+ // Supplies array
100
+ (0, vitest_1.expect)(Array.isArray(position.supplies)).toBe(true);
101
+ (0, vitest_1.expect)(position.supplies.length).toBeGreaterThan(0);
102
+ for (const s of position.supplies) {
103
+ (0, vitest_1.expect)(s.amount).toBeGreaterThanOrEqual(0n);
104
+ (0, vitest_1.expect)(s.symbol).toBeTruthy();
105
+ (0, vitest_1.expect)(s.coinType).toContain("::");
106
+ (0, vitest_1.expect)(s.decimals).toBeGreaterThanOrEqual(0);
107
+ (0, vitest_1.expect)(s.valueUsd).toBeGreaterThanOrEqual(0);
108
+ }
109
+ // Borrows array
110
+ (0, vitest_1.expect)(Array.isArray(position.borrows)).toBe(true);
111
+ for (const b of position.borrows) {
112
+ (0, vitest_1.expect)(b.amount).toBeGreaterThanOrEqual(0n);
113
+ (0, vitest_1.expect)(b.symbol).toBeTruthy();
114
+ (0, vitest_1.expect)(b.coinType).toContain("::");
115
+ (0, vitest_1.expect)(b.decimals).toBeGreaterThanOrEqual(0);
116
+ (0, vitest_1.expect)(b.valueUsd).toBeGreaterThanOrEqual(0);
117
+ }
118
+ // Primary collateral = largest supply by USD
119
+ (0, vitest_1.expect)(position.collateral).toBeDefined();
120
+ const maxSupply = [...position.supplies].sort((a, b) => b.valueUsd - a.valueUsd)[0];
121
+ (0, vitest_1.expect)(position.collateral.symbol).toBe(maxSupply.symbol);
122
+ // Primary debt = largest borrow by USD (if borrows exist)
123
+ (0, vitest_1.expect)(position.debt).toBeDefined();
124
+ if (position.borrows.length > 0) {
125
+ const maxBorrow = [...position.borrows].sort((a, b) => b.valueUsd - a.valueUsd)[0];
126
+ (0, vitest_1.expect)(position.debt.symbol).toBe(maxBorrow.symbol);
127
+ }
128
+ // Net value = total supplies - total borrows
129
+ const totalSupplyUsd = position.supplies.reduce((sum, s) => sum + s.valueUsd, 0);
130
+ const totalBorrowUsd = position.borrows.reduce((sum, b) => sum + b.valueUsd, 0);
131
+ (0, vitest_1.expect)(position.netValueUsd).toBeCloseTo(totalSupplyUsd - totalBorrowUsd, 1);
132
+ }
133
+ // ── Tests: getPosition() ─────────────────────────────────────────────────────
134
+ (0, vitest_1.describe)("sdk.getPosition()", () => {
135
+ vitest_1.it.each([
136
+ [__1.LendingProtocol.Suilend, "Suilend"],
137
+ [__1.LendingProtocol.Navi, "Navi"],
138
+ [__1.LendingProtocol.Scallop, "Scallop"],
139
+ ])("%s — returns null or valid PositionInfo", async (protocol, label) => {
140
+ const position = await sdk.getPosition(protocol);
141
+ printPosition(label, position);
142
+ if (position) {
143
+ assertValidPosition(position);
144
+ }
145
+ else {
146
+ (0, vitest_1.expect)(position).toBeNull();
147
+ }
148
+ }, 30000);
149
+ });
150
+ // ── Tests: getOpenPositions() ────────────────────────────────────────────────
151
+ (0, vitest_1.describe)("sdk.getOpenPositions()", () => {
152
+ (0, vitest_1.it)("returns array of active positions", async () => {
153
+ const results = await sdk.getOpenPositions();
154
+ printOpenPositions(results);
155
+ (0, vitest_1.expect)(Array.isArray(results)).toBe(true);
156
+ for (const { protocol, position } of results) {
157
+ // Protocol must be a valid LendingProtocol value
158
+ (0, vitest_1.expect)(Object.values(__1.LendingProtocol)).toContain(protocol);
159
+ // Position must have valid fields
160
+ assertValidPosition(position);
161
+ // Active position should have at least one supply or borrow
162
+ (0, vitest_1.expect)(position.supplies.length > 0 || position.borrows.length > 0).toBe(true);
163
+ }
164
+ }, 60000);
165
+ (0, vitest_1.it)("does not return duplicate protocols", async () => {
166
+ const results = await sdk.getOpenPositions();
167
+ const protocols = results.map((r) => r.protocol);
168
+ const unique = new Set(protocols);
169
+ (0, vitest_1.expect)(unique.size).toBe(protocols.length);
170
+ }, 60000);
171
+ (0, vitest_1.it)("consistent with individual getPosition calls", async () => {
172
+ const openPositions = await sdk.getOpenPositions();
173
+ for (const protocol of [
174
+ __1.LendingProtocol.Suilend,
175
+ __1.LendingProtocol.Navi,
176
+ __1.LendingProtocol.Scallop,
177
+ ]) {
178
+ const individual = await sdk.getPosition(protocol);
179
+ const fromOpen = openPositions.find((r) => r.protocol === protocol);
180
+ if (individual) {
181
+ // If getPosition returns a position, getOpenPositions should include it
182
+ (0, vitest_1.expect)(fromOpen).toBeDefined();
183
+ (0, vitest_1.expect)(fromOpen.position.collateral.symbol).toBe(individual.collateral.symbol);
184
+ (0, vitest_1.expect)(fromOpen.position.debt.symbol).toBe(individual.debt.symbol);
185
+ }
186
+ else {
187
+ // If getPosition returns null, getOpenPositions should not include it
188
+ (0, vitest_1.expect)(fromOpen).toBeUndefined();
189
+ }
190
+ }
191
+ }, 90000);
192
+ });
193
+ //# sourceMappingURL=sdk.position.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.position.test.js","sourceRoot":"","sources":["../../src/__tests__/sdk.position.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * SDK Method: sdk.previewLeverage() [Integration]
3
+ *
4
+ * Verifies all output fields across protocols with live mainnet data.
5
+ *
6
+ * Internal dependencies (tested separately):
7
+ * - protocol.getAssetRiskParams() → see internal.getAssetRiskParams.test.ts
8
+ * - protocol.getAssetApy() → see internal.getAssetApy.test.ts
9
+ * - ScallopFlashLoanClient.fetchFlashLoanFeeRate()
10
+ * - 7k Protocol swap quote (live slippage)
11
+ *
12
+ * Verified output fields:
13
+ * - Position metrics (equity, flash loan, LTV, liquidation price)
14
+ * - APY breakdown (supply base/reward, borrow gross/rebate/net)
15
+ * - Flash loan fee (on-chain from Scallop)
16
+ * - Swap slippage (from live 7k quote)
17
+ *
18
+ * Unit test counterpart: sdk.preview.unit.test.ts
19
+ *
20
+ * Run: npx vitest run src/__tests__/sdk.preview.test.ts
21
+ */
22
+ export {};
23
+ //# sourceMappingURL=sdk.preview.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.preview.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sdk.preview.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ /**
3
+ * SDK Method: sdk.previewLeverage() [Integration]
4
+ *
5
+ * Verifies all output fields across protocols with live mainnet data.
6
+ *
7
+ * Internal dependencies (tested separately):
8
+ * - protocol.getAssetRiskParams() → see internal.getAssetRiskParams.test.ts
9
+ * - protocol.getAssetApy() → see internal.getAssetApy.test.ts
10
+ * - ScallopFlashLoanClient.fetchFlashLoanFeeRate()
11
+ * - 7k Protocol swap quote (live slippage)
12
+ *
13
+ * Verified output fields:
14
+ * - Position metrics (equity, flash loan, LTV, liquidation price)
15
+ * - APY breakdown (supply base/reward, borrow gross/rebate/net)
16
+ * - Flash loan fee (on-chain from Scallop)
17
+ * - Swap slippage (from live 7k quote)
18
+ *
19
+ * Unit test counterpart: sdk.preview.unit.test.ts
20
+ *
21
+ * Run: npx vitest run src/__tests__/sdk.preview.test.ts
22
+ */
23
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ var desc = Object.getOwnPropertyDescriptor(m, k);
26
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
27
+ desc = { enumerable: true, get: function() { return m[k]; } };
28
+ }
29
+ Object.defineProperty(o, k2, desc);
30
+ }) : (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ o[k2] = m[k];
33
+ }));
34
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
36
+ }) : function(o, v) {
37
+ o["default"] = v;
38
+ });
39
+ var __importStar = (this && this.__importStar) || (function () {
40
+ var ownKeys = function(o) {
41
+ ownKeys = Object.getOwnPropertyNames || function (o) {
42
+ var ar = [];
43
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
44
+ return ar;
45
+ };
46
+ return ownKeys(o);
47
+ };
48
+ return function (mod) {
49
+ if (mod && mod.__esModule) return mod;
50
+ var result = {};
51
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
52
+ __setModuleDefault(result, mod);
53
+ return result;
54
+ };
55
+ })();
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ const vitest_1 = require("vitest");
58
+ const dotenv = __importStar(require("dotenv"));
59
+ dotenv.config({ path: '.env' });
60
+ const __1 = require("..");
61
+ // ── Print helper ─────────────────────────────────────────────────────────────
62
+ function printPreview(protocol, asset, mult, p) {
63
+ const pct = (v) => `${(v * 100).toFixed(3)}%`;
64
+ const usd = (v) => `$${v.toFixed(4)}`;
65
+ console.log([
66
+ `\n┌─ [${protocol}] ${asset} ${mult}x ──────────────────────────────────────`,
67
+ `│ Risk Params (from getAssetRiskParams):`,
68
+ `│ Asset LTV : ${pct(p.assetLtv)}`,
69
+ `│ Liq. Threshold : ${pct(p.liquidationThreshold)}`,
70
+ `│ Max Multiplier : ${p.maxMultiplier.toFixed(2)}x`,
71
+ `│`,
72
+ `│ Position:`,
73
+ `│ Initial Equity : ${usd(p.initialEquityUsd)}`,
74
+ `│ Flash Loan (USDC): ${(Number(p.flashLoanUsdc) / 1e6).toFixed(4)} USDC`,
75
+ `│ Flash Loan Fee : ${usd(p.flashLoanFeeUsd)}`,
76
+ `│ Total Position : ${usd(p.totalPositionUsd)}`,
77
+ `│ Total Debt : ${usd(p.debtUsd)}`,
78
+ `│ Effective Mult : ${p.effectiveMultiplier.toFixed(3)}x`,
79
+ `│ Position LTV : ${p.ltvPercent.toFixed(2)}%`,
80
+ `│ Liq. Price : ${usd(p.liquidationPrice)}`,
81
+ `│ Price Drop Buf : ${p.priceDropBuffer.toFixed(2)}%`,
82
+ `│`,
83
+ `│ Supply APY (${asset}):`,
84
+ `│ Base : ${pct(p.supplyApyBreakdown.base)}`,
85
+ `│ Reward : ${pct(p.supplyApyBreakdown.reward)}`,
86
+ `│ Total : ${pct(p.supplyApyBreakdown.total)}`,
87
+ `│`,
88
+ `│ Borrow APY (USDC):`,
89
+ `│ Gross : ${pct(p.borrowApyBreakdown.gross)}`,
90
+ `│ Rebate : ${pct(p.borrowApyBreakdown.rebate)}`,
91
+ `│ Net : ${pct(p.borrowApyBreakdown.net)}`,
92
+ `│`,
93
+ `│ Earnings:`,
94
+ `│ Net Position APY : ${pct(p.netApy)}`,
95
+ `│ Annual Earnings : ${usd(p.annualNetEarningsUsd)}`,
96
+ `│ Swap Slippage : ${p.swapSlippagePct.toFixed(4)}%`,
97
+ `└──────────────────────────────────────────────────────────────────`,
98
+ ].join('\n'));
99
+ }
100
+ const client_1 = require("@mysten/sui/client");
101
+ const ed25519_1 = require("@mysten/sui/keypairs/ed25519");
102
+ // ── SDK Setup ─────────────────────────────────────────────────────────────────
103
+ let sdk;
104
+ const SECRET_KEY = process.env.SECRET_KEY || process.env.SUI_SECRET_KEY;
105
+ (0, vitest_1.beforeAll)(async () => {
106
+ if (!SECRET_KEY)
107
+ throw new Error('SECRET_KEY env is required');
108
+ const suiClient = new client_1.SuiClient({
109
+ url: process.env.SUI_FULLNODE_URL || (0, client_1.getFullnodeUrl)('mainnet'),
110
+ });
111
+ const keypair = ed25519_1.Ed25519Keypair.fromSecretKey(SECRET_KEY);
112
+ sdk = await __1.DefiDashSDK.create(suiClient, keypair);
113
+ }, 60000);
114
+ // ── Helpers ───────────────────────────────────────────────────────────────────
115
+ async function getPreview(protocol, asset, multiplier = 2.0) {
116
+ return sdk.previewLeverage({
117
+ protocol,
118
+ depositAsset: asset,
119
+ depositValueUsd: 100,
120
+ multiplier,
121
+ });
122
+ }
123
+ function assertBaseFields(p, multiplier) {
124
+ // ── Risk Params (from getAssetRiskParams) ─────────────────────────────────
125
+ // These must match the protocol adapter's on-chain values
126
+ (0, vitest_1.expect)(p.assetLtv).toBeGreaterThan(0);
127
+ (0, vitest_1.expect)(p.assetLtv).toBeLessThan(1);
128
+ (0, vitest_1.expect)(p.liquidationThreshold).toBeGreaterThan(0);
129
+ (0, vitest_1.expect)(p.liquidationThreshold).toBeLessThanOrEqual(1);
130
+ // maxMultiplier = 1 / (1 - ltv)
131
+ (0, vitest_1.expect)(p.maxMultiplier).toBeCloseTo(1 / (1 - p.assetLtv), 2);
132
+ (0, vitest_1.expect)(p.maxMultiplier).toBeGreaterThan(1);
133
+ // ── Position sanity ───────────────────────────────────────────────────────
134
+ (0, vitest_1.expect)(p.initialEquityUsd).toBeGreaterThan(0);
135
+ (0, vitest_1.expect)(p.totalPositionUsd).toBeCloseTo(p.initialEquityUsd * multiplier, 0);
136
+ (0, vitest_1.expect)(p.flashLoanFeeUsd).toBeGreaterThanOrEqual(0);
137
+ (0, vitest_1.expect)(p.debtUsd).toBeGreaterThan(0);
138
+ (0, vitest_1.expect)(p.ltvPercent).toBeGreaterThan(0);
139
+ (0, vitest_1.expect)(p.ltvPercent).toBeLessThan(100);
140
+ (0, vitest_1.expect)(p.liquidationPrice).toBeGreaterThan(0);
141
+ (0, vitest_1.expect)(p.priceDropBuffer).toBeGreaterThan(0);
142
+ (0, vitest_1.expect)(p.effectiveMultiplier).toBeGreaterThan(1);
143
+ // ── APY sanity (base can be 0 for some assets like LBTC) ─────────────────
144
+ (0, vitest_1.expect)(p.supplyApyBreakdown.base).toBeGreaterThanOrEqual(0);
145
+ (0, vitest_1.expect)(p.supplyApyBreakdown.total).toBeGreaterThanOrEqual(p.supplyApyBreakdown.base);
146
+ (0, vitest_1.expect)(p.borrowApyBreakdown.gross).toBeGreaterThanOrEqual(p.borrowApyBreakdown.net);
147
+ // Net APY = (totalPosition × supplyApy - debt × borrowApy) / equity
148
+ const expectedNetApy = (p.totalPositionUsd * p.supplyApyBreakdown.total -
149
+ p.debtUsd * p.borrowApyBreakdown.net) /
150
+ p.initialEquityUsd;
151
+ (0, vitest_1.expect)(p.netApy).toBeCloseTo(expectedNetApy, 5);
152
+ // Swap slippage should be in [0, 10%] (sometimes up to 5-6% on live pools)
153
+ (0, vitest_1.expect)(p.swapSlippagePct).toBeGreaterThanOrEqual(0);
154
+ (0, vitest_1.expect)(p.swapSlippagePct).toBeLessThan(10);
155
+ }
156
+ // ── Tests ─────────────────────────────────────────────────────────────────────
157
+ (0, vitest_1.describe)('previewLeverage Integration', () => {
158
+ (0, vitest_1.describe)('Suilend', () => {
159
+ (0, vitest_1.it)('SUI 2x – all fields valid', async () => {
160
+ const p = await getPreview(__1.LendingProtocol.Suilend, 'SUI', 2.0);
161
+ printPreview('Suilend', 'SUI', 2.0, p);
162
+ assertBaseFields(p, 2.0);
163
+ // Risk params consistency (verified in getAssetRiskParams.test.ts)
164
+ // Suilend SUI: LTV ~70%, LT ~75%, maxMult ~3.33x
165
+ (0, vitest_1.expect)(p.assetLtv).toBeGreaterThanOrEqual(0.5);
166
+ (0, vitest_1.expect)(p.assetLtv).toBeLessThanOrEqual(0.85);
167
+ (0, vitest_1.expect)(p.liquidationThreshold).toBeGreaterThanOrEqual(p.assetLtv);
168
+ // APY: Suilend SUI known supply ≈ 2.89%
169
+ (0, vitest_1.expect)(p.supplyApyBreakdown.base).toBeGreaterThan(0.01); // > 1%
170
+ }, 60000);
171
+ (0, vitest_1.it)('XBTC 2x – BTC leverage', async () => {
172
+ const p = await getPreview(__1.LendingProtocol.Suilend, 'XBTC', 2.0);
173
+ printPreview('Suilend', 'XBTC', 2.0, p);
174
+ assertBaseFields(p, 2.0);
175
+ // Risk params: Suilend XBTC LTV ~60%, LT ~65%
176
+ (0, vitest_1.expect)(p.assetLtv).toBeGreaterThanOrEqual(0.4);
177
+ (0, vitest_1.expect)(p.assetLtv).toBeLessThanOrEqual(0.8);
178
+ (0, vitest_1.expect)(p.liquidationThreshold).toBeGreaterThanOrEqual(p.assetLtv);
179
+ // XBTC price >$50k → liquidation price should be high
180
+ (0, vitest_1.expect)(p.liquidationPrice).toBeGreaterThan(1000);
181
+ }, 60000);
182
+ });
183
+ (0, vitest_1.describe)('Navi', () => {
184
+ (0, vitest_1.it)('SUI 2x – all fields valid', async () => {
185
+ const p = await getPreview(__1.LendingProtocol.Navi, 'SUI', 2.0);
186
+ printPreview('Navi', 'SUI', 2.0, p);
187
+ assertBaseFields(p, 2.0);
188
+ // Risk params: Navi SUI LTV ~75%, LT ~70% (Navi: LT can be < LTV)
189
+ (0, vitest_1.expect)(p.assetLtv).toBeGreaterThanOrEqual(0.5);
190
+ (0, vitest_1.expect)(p.assetLtv).toBeLessThanOrEqual(0.85);
191
+ }, 60000);
192
+ (0, vitest_1.it)('XBTC 2x – BTC leverage', async () => {
193
+ const p = await getPreview(__1.LendingProtocol.Navi, 'XBTC', 2.0);
194
+ printPreview('Navi', 'XBTC', 2.0, p);
195
+ assertBaseFields(p, 2.0);
196
+ // Risk params: Navi XBTC LTV ~67%, LT ~70%
197
+ (0, vitest_1.expect)(p.assetLtv).toBeCloseTo(0.67, 1);
198
+ (0, vitest_1.expect)(p.liquidationThreshold).toBeCloseTo(0.70, 1);
199
+ }, 60000);
200
+ });
201
+ (0, vitest_1.describe)('Scallop', () => {
202
+ (0, vitest_1.it)('SUI 2x – all fields valid + flash loan fee from on-chain', async () => {
203
+ const p = await getPreview(__1.LendingProtocol.Scallop, 'SUI', 2.0);
204
+ printPreview('Scallop', 'SUI', 2.0, p);
205
+ assertBaseFields(p, 2.0);
206
+ // Risk params: Scallop SUI LTV ~85%, LT ~90%, maxMult ~6.67x
207
+ (0, vitest_1.expect)(p.assetLtv).toBeGreaterThanOrEqual(0.7);
208
+ (0, vitest_1.expect)(p.assetLtv).toBeLessThanOrEqual(0.9);
209
+ (0, vitest_1.expect)(p.liquidationThreshold).toBeGreaterThanOrEqual(p.assetLtv);
210
+ // Flash loan fee is 0% on Scallop currently (verified on-chain)
211
+ (0, vitest_1.expect)(p.flashLoanFeeUsd).toBe(0);
212
+ }, 60000);
213
+ (0, vitest_1.it)('XBTC 2x – BTC leverage', async () => {
214
+ const p = await getPreview(__1.LendingProtocol.Scallop, 'XBTC', 2.0);
215
+ printPreview('Scallop', 'XBTC', 2.0, p);
216
+ assertBaseFields(p, 2.0);
217
+ // Risk params: Scallop XBTC LTV varies (may fallback to 50% if not a native collateral)
218
+ (0, vitest_1.expect)(p.assetLtv).toBeGreaterThanOrEqual(0.4);
219
+ (0, vitest_1.expect)(p.assetLtv).toBeLessThanOrEqual(0.85);
220
+ (0, vitest_1.expect)(p.liquidationThreshold).toBeGreaterThanOrEqual(p.assetLtv);
221
+ // XBTC price >$50k → liquidation price should be high
222
+ (0, vitest_1.expect)(p.liquidationPrice).toBeGreaterThan(1000);
223
+ }, 60000);
224
+ });
225
+ });
226
+ //# sourceMappingURL=sdk.preview.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.preview.test.js","sourceRoot":"","sources":["../../src/__tests__/sdk.preview.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * SDK Method: sdk.previewLeverage() [Unit]
3
+ *
4
+ * Tests previewLeverage() with mocked dependencies. No mainnet RPC.
5
+ *
6
+ * Mocked internal dependencies:
7
+ * - protocol.getAssetRiskParams() → returns { ltv: 0.75, maxMultiplier: 4.0 }
8
+ * - protocol.getAssetApy() → returns mock supply/borrow APY
9
+ * - ScallopFlashLoanClient → returns 0% fee
10
+ * - 7k Protocol swap quote → returns mock swap output
11
+ * - getTokenPrice() → returns $3.50
12
+ *
13
+ * Integration test counterpart: sdk.preview.test.ts
14
+ *
15
+ * Run: npx vitest run src/__tests__/sdk.preview.unit.test.ts
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=sdk.preview.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.preview.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sdk.preview.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}