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,141 @@
1
+ "use strict";
2
+ /**
3
+ * SDK Method: sdk.buildDeleverageTransaction() [Unit]
4
+ *
5
+ * Tests calculateDeleverageEstimate() with mocked swap quotes. No mainnet RPC.
6
+ *
7
+ * Internal dependencies (mocked):
8
+ * - ScallopFlashLoanClient.calculateFee() → flash loan fee calculation
9
+ * - swapClient.quote() → swap rate for collateral → USDC
10
+ * - getTokenPrice() → collateral price for profit calc
11
+ *
12
+ * Verified behavior:
13
+ * - Flash loan amount includes 0.1% buffer
14
+ * - Flash loan fee correctly computed
15
+ * - Swap amount covers repayment + 2% buffer
16
+ * - keepCollateral = total - swapped
17
+ * - Profit = kept collateral value + USDC surplus
18
+ *
19
+ * Run: npx vitest run src/__tests__/sdk.deleverage.unit.test.ts
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ const vitest_1 = require("vitest");
23
+ const deleverage_1 = require("../strategies/deleverage");
24
+ const types_1 = require("../types");
25
+ // Mock external dependencies
26
+ vitest_1.vi.mock("@7kprotocol/sdk-ts", () => ({
27
+ MetaAg: vitest_1.vi.fn(),
28
+ getTokenPrice: vitest_1.vi.fn().mockResolvedValue(3.5), // SUI at $3.50
29
+ }));
30
+ // ── Helpers ──────────────────────────────────────────────────────────────────
31
+ function createMockParams(overrides = {}) {
32
+ const debtAmount = overrides.debtAmount ?? 100000000n; // 100 USDC
33
+ const collateralAmount = overrides.collateralAmount ?? 100000000000n; // 100 SUI
34
+ const swapAmountOut = overrides.swapAmountOut ?? "120000000"; // 120 USDC out for full collateral
35
+ const mockSwapClient = {
36
+ quote: vitest_1.vi.fn().mockResolvedValue([
37
+ {
38
+ amountOut: swapAmountOut,
39
+ amountIn: collateralAmount.toString(),
40
+ route: [],
41
+ },
42
+ ]),
43
+ };
44
+ const mockProtocol = {
45
+ name: "suilend",
46
+ consumesRepaymentCoin: false,
47
+ };
48
+ return {
49
+ protocol: mockProtocol,
50
+ flashLoanClient: {},
51
+ swapClient: mockSwapClient,
52
+ suiClient: {},
53
+ userAddress: "0xtest",
54
+ position: {
55
+ collateral: {
56
+ coinType: types_1.COIN_TYPES.SUI,
57
+ symbol: "SUI",
58
+ decimals: 9,
59
+ amount: collateralAmount,
60
+ valueUsd: 350,
61
+ },
62
+ debt: {
63
+ coinType: types_1.COIN_TYPES.USDC,
64
+ symbol: "USDC",
65
+ decimals: 6,
66
+ amount: debtAmount,
67
+ valueUsd: 100,
68
+ },
69
+ supplies: [{
70
+ coinType: types_1.COIN_TYPES.SUI,
71
+ symbol: "SUI",
72
+ decimals: 9,
73
+ amount: collateralAmount,
74
+ valueUsd: 350,
75
+ }],
76
+ borrows: [{
77
+ coinType: types_1.COIN_TYPES.USDC,
78
+ symbol: "USDC",
79
+ decimals: 6,
80
+ amount: debtAmount,
81
+ valueUsd: 100,
82
+ }],
83
+ healthFactor: 2.0,
84
+ netValueUsd: 250,
85
+ },
86
+ };
87
+ }
88
+ // ── Tests ────────────────────────────────────────────────────────────────────
89
+ (0, vitest_1.describe)("calculateDeleverageEstimate (unit)", () => {
90
+ (0, vitest_1.it)("calculates flash loan with small buffer", async () => {
91
+ const params = createMockParams();
92
+ const estimate = await (0, deleverage_1.calculateDeleverageEstimate)(params);
93
+ // Flash loan = debt * 1001/1000 (0.1% buffer)
94
+ const expectedFlashLoan = (100000000n * 1001n) / 1000n;
95
+ (0, vitest_1.expect)(estimate.flashLoanUsdc).toBe(expectedFlashLoan);
96
+ });
97
+ (0, vitest_1.it)("calculates flash loan fee", async () => {
98
+ const params = createMockParams();
99
+ const estimate = await (0, deleverage_1.calculateDeleverageEstimate)(params);
100
+ // Fee should be non-negative
101
+ (0, vitest_1.expect)(estimate.flashLoanFee).toBeGreaterThanOrEqual(0n);
102
+ // Total repayment = flash loan + fee
103
+ (0, vitest_1.expect)(estimate.totalRepayment).toBe(estimate.flashLoanUsdc + estimate.flashLoanFee);
104
+ });
105
+ (0, vitest_1.it)("calculates swap amount to cover repayment", async () => {
106
+ const params = createMockParams();
107
+ const estimate = await (0, deleverage_1.calculateDeleverageEstimate)(params);
108
+ // swapAmount should be positive and <= total collateral
109
+ (0, vitest_1.expect)(estimate.swapAmount).toBeGreaterThan(0n);
110
+ (0, vitest_1.expect)(estimate.swapAmount).toBeLessThanOrEqual(100000000000n);
111
+ });
112
+ (0, vitest_1.it)("calculates keepCollateral correctly", async () => {
113
+ const params = createMockParams();
114
+ const estimate = await (0, deleverage_1.calculateDeleverageEstimate)(params);
115
+ // keepCollateral = withdrawAmount - swapAmount
116
+ (0, vitest_1.expect)(estimate.keepCollateral).toBe(100000000000n - estimate.swapAmount);
117
+ });
118
+ (0, vitest_1.it)("total profit includes kept collateral and USDC surplus", async () => {
119
+ const params = createMockParams();
120
+ const estimate = await (0, deleverage_1.calculateDeleverageEstimate)(params);
121
+ // Total profit should be positive when collateral value > debt
122
+ (0, vitest_1.expect)(estimate.totalProfitUsd).toBeGreaterThan(0);
123
+ });
124
+ (0, vitest_1.it)("caps swap amount at full collateral when needed", async () => {
125
+ // Scenario: swap rate is bad, need all collateral
126
+ const params = createMockParams({
127
+ debtAmount: 500000000n, // 500 USDC debt
128
+ collateralAmount: 100000000000n, // 100 SUI
129
+ swapAmountOut: "200000000", // Only get 200 USDC for full collateral
130
+ });
131
+ const estimate = await (0, deleverage_1.calculateDeleverageEstimate)(params);
132
+ // swapAmount should not exceed collateral
133
+ (0, vitest_1.expect)(estimate.swapAmount).toBeLessThanOrEqual(100000000000n);
134
+ });
135
+ (0, vitest_1.it)("throws when no swap quotes available", async () => {
136
+ const params = createMockParams();
137
+ params.swapClient.quote.mockResolvedValue([]);
138
+ await (0, vitest_1.expect)((0, deleverage_1.calculateDeleverageEstimate)(params)).rejects.toThrow("No swap quotes found");
139
+ });
140
+ });
141
+ //# sourceMappingURL=sdk.deleverage.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.deleverage.unit.test.js","sourceRoot":"","sources":["../../src/__tests__/sdk.deleverage.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * SDK Method: sdk.buildLeverageTransaction() + sdk.dryRun() [Integration]
3
+ *
4
+ * Verifies that buildLeverageTransaction builds a valid PTB
5
+ * and dryRun successfully simulates it on mainnet.
6
+ *
7
+ * Internal dependencies:
8
+ * - buildLeverageTransaction() → strategies/leverage.ts
9
+ * - calculateLeveragePreview() → flash loan amount calculation
10
+ * - ScallopFlashLoanClient → flash loan borrow/repay
11
+ * - 7k Protocol swap → USDC → collateral swap
12
+ * - protocol.deposit() → lending deposit
13
+ * - protocol.borrow() → USDC borrow for repayment
14
+ * - protocol.refreshOracles() → oracle price update
15
+ *
16
+ * Run: npx vitest run src/__tests__/sdk.leverage.test.ts
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=sdk.leverage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.leverage.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sdk.leverage.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ /**
3
+ * SDK Method: sdk.buildLeverageTransaction() + sdk.dryRun() [Integration]
4
+ *
5
+ * Verifies that buildLeverageTransaction builds a valid PTB
6
+ * and dryRun successfully simulates it on mainnet.
7
+ *
8
+ * Internal dependencies:
9
+ * - buildLeverageTransaction() → strategies/leverage.ts
10
+ * - calculateLeveragePreview() → flash loan amount calculation
11
+ * - ScallopFlashLoanClient → flash loan borrow/repay
12
+ * - 7k Protocol swap → USDC → collateral swap
13
+ * - protocol.deposit() → lending deposit
14
+ * - protocol.borrow() → USDC borrow for repayment
15
+ * - protocol.refreshOracles() → oracle price update
16
+ *
17
+ * Run: npx vitest run src/__tests__/sdk.leverage.test.ts
18
+ */
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ const vitest_1 = require("vitest");
54
+ const dotenv = __importStar(require("dotenv"));
55
+ dotenv.config({ path: '.env' });
56
+ const __1 = require("..");
57
+ const client_1 = require("@mysten/sui/client");
58
+ const ed25519_1 = require("@mysten/sui/keypairs/ed25519");
59
+ const transactions_1 = require("@mysten/sui/transactions");
60
+ // ── SDK Setup ─────────────────────────────────────────────────────────────────
61
+ let sdk;
62
+ let address;
63
+ const SECRET_KEY = process.env.SECRET_KEY || process.env.SUI_SECRET_KEY;
64
+ (0, vitest_1.beforeAll)(async () => {
65
+ if (!SECRET_KEY)
66
+ throw new Error('SECRET_KEY env is required');
67
+ const suiClient = new client_1.SuiClient({
68
+ url: process.env.SUI_FULLNODE_URL || (0, client_1.getFullnodeUrl)('mainnet'),
69
+ });
70
+ const keypair = ed25519_1.Ed25519Keypair.fromSecretKey(SECRET_KEY);
71
+ address = keypair.getPublicKey().toSuiAddress();
72
+ sdk = await __1.DefiDashSDK.create(suiClient, keypair);
73
+ }, 60000);
74
+ // ── Tests ─────────────────────────────────────────────────────────────────────
75
+ (0, vitest_1.describe)('sdk.buildLeverageTransaction + dryRun', () => {
76
+ (0, vitest_1.it)('Suilend SUI $1 2x — dryRun succeeds', async () => {
77
+ const tx = new transactions_1.Transaction();
78
+ tx.setSender(address);
79
+ await sdk.buildLeverageTransaction(tx, {
80
+ protocol: __1.LendingProtocol.Suilend,
81
+ depositAsset: 'SUI',
82
+ depositValueUsd: 1,
83
+ multiplier: 2.0,
84
+ });
85
+ const result = await sdk.dryRun(tx);
86
+ console.log(` Suilend SUI 2x → ${result.success ? 'SUCCESS' : 'FAILED: ' + result.error}` +
87
+ `${result.gasUsed ? ` (gas: ${(Number(result.gasUsed) / 1e9).toFixed(4)} SUI)` : ''}`);
88
+ (0, vitest_1.expect)(result.success).toBe(true);
89
+ (0, vitest_1.expect)(result.gasUsed).toBeDefined();
90
+ (0, vitest_1.expect)(result.gasUsed).toBeGreaterThan(0n);
91
+ }, 120000);
92
+ (0, vitest_1.it)('Navi SUI $1 2x — builds transaction', async () => {
93
+ const tx = new transactions_1.Transaction();
94
+ tx.setSender(address);
95
+ // Navi may fail dryRun due to oracle timing issues;
96
+ // we verify the transaction builds without throwing
97
+ await sdk.buildLeverageTransaction(tx, {
98
+ protocol: __1.LendingProtocol.Navi,
99
+ depositAsset: 'SUI',
100
+ depositValueUsd: 1,
101
+ multiplier: 2.0,
102
+ });
103
+ const result = await sdk.dryRun(tx);
104
+ console.log(` Navi SUI 2x → ${result.success ? 'SUCCESS' : 'FAILED: ' + result.error}` +
105
+ `${result.gasUsed ? ` (gas: ${(Number(result.gasUsed) / 1e9).toFixed(4)} SUI)` : ''}`);
106
+ // Build succeeded (dryRun may fail due to oracle staleness)
107
+ (0, vitest_1.expect)(result).toBeDefined();
108
+ }, 120000);
109
+ (0, vitest_1.it)('Scallop SUI $1 2x — builds transaction', async () => {
110
+ const tx = new transactions_1.Transaction();
111
+ tx.setSender(address);
112
+ // Scallop requires updateAssetPricesQuick via its SDK builder for oracle updates.
113
+ // The generic buildLeverageTransaction path may fail dryRun with
114
+ // MoveAbort in price::get_price if oracles are stale.
115
+ await sdk.buildLeverageTransaction(tx, {
116
+ protocol: __1.LendingProtocol.Scallop,
117
+ depositAsset: 'SUI',
118
+ depositValueUsd: 1,
119
+ multiplier: 2.0,
120
+ });
121
+ const result = await sdk.dryRun(tx);
122
+ console.log(` Scallop SUI 2x → ${result.success ? 'SUCCESS' : 'FAILED: ' + result.error}` +
123
+ `${result.gasUsed ? ` (gas: ${(Number(result.gasUsed) / 1e9).toFixed(4)} SUI)` : ''}`);
124
+ // Build succeeded (dryRun may fail due to Scallop oracle requirements)
125
+ (0, vitest_1.expect)(result).toBeDefined();
126
+ }, 120000);
127
+ (0, vitest_1.it)('rejects depositAmount with depositValueUsd simultaneously', async () => {
128
+ const tx = new transactions_1.Transaction();
129
+ tx.setSender(address);
130
+ await (0, vitest_1.expect)(sdk.buildLeverageTransaction(tx, {
131
+ protocol: __1.LendingProtocol.Suilend,
132
+ depositAsset: 'SUI',
133
+ depositAmount: '1',
134
+ depositValueUsd: 1,
135
+ multiplier: 2.0,
136
+ })).rejects.toThrow('Cannot provide both');
137
+ });
138
+ (0, vitest_1.it)('rejects when neither depositAmount nor depositValueUsd provided', async () => {
139
+ const tx = new transactions_1.Transaction();
140
+ tx.setSender(address);
141
+ await (0, vitest_1.expect)(sdk.buildLeverageTransaction(tx, {
142
+ protocol: __1.LendingProtocol.Suilend,
143
+ depositAsset: 'SUI',
144
+ multiplier: 2.0,
145
+ })).rejects.toThrow('Either depositAmount or depositValueUsd');
146
+ });
147
+ (0, vitest_1.it)('rejects multiplier <= 1', async () => {
148
+ const tx = new transactions_1.Transaction();
149
+ tx.setSender(address);
150
+ await (0, vitest_1.expect)(sdk.buildLeverageTransaction(tx, {
151
+ protocol: __1.LendingProtocol.Suilend,
152
+ depositAsset: 'SUI',
153
+ depositValueUsd: 1,
154
+ multiplier: 1.0,
155
+ })).rejects.toThrow('Multiplier must be greater than 1');
156
+ });
157
+ (0, vitest_1.it)('rejects multiplier > protocol max', async () => {
158
+ const tx = new transactions_1.Transaction();
159
+ tx.setSender(address);
160
+ await (0, vitest_1.expect)(sdk.buildLeverageTransaction(tx, {
161
+ protocol: __1.LendingProtocol.Suilend,
162
+ depositAsset: 'SUI',
163
+ depositValueUsd: 1,
164
+ multiplier: 99.0,
165
+ })).rejects.toThrow('exceeds protocol max');
166
+ }, 60000);
167
+ (0, vitest_1.it)('rejects depositValueUsd = 0', async () => {
168
+ const tx = new transactions_1.Transaction();
169
+ tx.setSender(address);
170
+ await (0, vitest_1.expect)(sdk.buildLeverageTransaction(tx, {
171
+ protocol: __1.LendingProtocol.Suilend,
172
+ depositAsset: 'SUI',
173
+ depositValueUsd: 0,
174
+ multiplier: 2.0,
175
+ })).rejects.toThrow('depositValueUsd must be positive');
176
+ });
177
+ (0, vitest_1.it)('rejects negative depositAmount', async () => {
178
+ const tx = new transactions_1.Transaction();
179
+ tx.setSender(address);
180
+ await (0, vitest_1.expect)(sdk.buildLeverageTransaction(tx, {
181
+ protocol: __1.LendingProtocol.Suilend,
182
+ depositAsset: 'SUI',
183
+ depositAmount: '-1',
184
+ multiplier: 2.0,
185
+ })).rejects.toThrow('depositAmount must be positive');
186
+ });
187
+ });
188
+ //# sourceMappingURL=sdk.leverage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.leverage.test.js","sourceRoot":"","sources":["../../src/__tests__/sdk.leverage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SDK Method: sdk.getAggregatedPortfolio() [Integration]
3
+ *
4
+ * Verifies the public portfolio aggregation method with live mainnet data.
5
+ *
6
+ * Internal dependencies (tested separately):
7
+ * - protocol.getAccountPortfolio() → each adapter's portfolio query
8
+ *
9
+ * Verified output fields:
10
+ * - Returns AccountPortfolio[] for all 3 protocols (Suilend, Navi, Scallop)
11
+ * - Each portfolio has valid healthFactor, netValueUsd, totalCollateralUsd, totalDebtUsd
12
+ * - positions[] entries have correct side, amount, apy
13
+ *
14
+ * Run: npx vitest run src/__tests__/sdk.portfolio.test.ts
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=sdk.portfolio.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.portfolio.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sdk.portfolio.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ /**
3
+ * SDK Method: sdk.getAggregatedPortfolio() [Integration]
4
+ *
5
+ * Verifies the public portfolio aggregation method with live mainnet data.
6
+ *
7
+ * Internal dependencies (tested separately):
8
+ * - protocol.getAccountPortfolio() → each adapter's portfolio query
9
+ *
10
+ * Verified output fields:
11
+ * - Returns AccountPortfolio[] for all 3 protocols (Suilend, Navi, Scallop)
12
+ * - Each portfolio has valid healthFactor, netValueUsd, totalCollateralUsd, totalDebtUsd
13
+ * - positions[] entries have correct side, amount, apy
14
+ *
15
+ * Run: npx vitest run src/__tests__/sdk.portfolio.test.ts
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ const vitest_1 = require("vitest");
52
+ const dotenv = __importStar(require("dotenv"));
53
+ dotenv.config({ path: ".env" });
54
+ const __1 = require("..");
55
+ const client_1 = require("@mysten/sui/client");
56
+ const ed25519_1 = require("@mysten/sui/keypairs/ed25519");
57
+ // ── Print helpers ────────────────────────────────────────────────────────────
58
+ function printPortfolio(portfolio) {
59
+ const usd = (v) => `$${v.toFixed(4)}`;
60
+ const pct = (v) => `${(v * 100).toFixed(2)}%`;
61
+ const lines = [
62
+ `\n┌─ [${portfolio.protocol}] Portfolio ──────────────────────────────`,
63
+ `│ Health Factor : ${portfolio.healthFactor === Infinity ? "∞ (no debt)" : portfolio.healthFactor.toFixed(4)}`,
64
+ `│ Net Value USD : ${usd(portfolio.netValueUsd)}`,
65
+ `│ Total Collateral : ${usd(portfolio.totalCollateralUsd)}`,
66
+ `│ Total Debt : ${usd(portfolio.totalDebtUsd)}`,
67
+ ];
68
+ if (portfolio.netApy != null) {
69
+ lines.push(`│ Net APY : ${pct(portfolio.netApy)}`);
70
+ }
71
+ if (portfolio.totalAnnualNetEarningsUsd != null) {
72
+ lines.push(`│ Annual Earnings : ${usd(portfolio.totalAnnualNetEarningsUsd)}`);
73
+ }
74
+ if (portfolio.positions.length === 0) {
75
+ lines.push(`│ Positions : (none)`);
76
+ }
77
+ else {
78
+ lines.push(`│ Positions (${portfolio.positions.length}):`);
79
+ for (const p of portfolio.positions) {
80
+ lines.push(`│ ${p.side.padEnd(7)} ${p.symbol.padEnd(6)} ${p.amount.toFixed(6)} (${usd(p.valueUsd)}) APY: ${pct(p.apy)}`);
81
+ }
82
+ }
83
+ lines.push(`└──────────────────────────────────────────────────────────\n`);
84
+ console.log(lines.join("\n"));
85
+ }
86
+ // ── SDK Setup ────────────────────────────────────────────────────────────────
87
+ let sdk;
88
+ const SECRET_KEY = process.env.SECRET_KEY || process.env.SUI_SECRET_KEY;
89
+ (0, vitest_1.beforeAll)(async () => {
90
+ if (!SECRET_KEY)
91
+ throw new Error("SECRET_KEY env is required");
92
+ const suiClient = new client_1.SuiClient({
93
+ url: process.env.SUI_FULLNODE_URL || (0, client_1.getFullnodeUrl)("mainnet"),
94
+ });
95
+ const keypair = ed25519_1.Ed25519Keypair.fromSecretKey(SECRET_KEY);
96
+ sdk = await __1.DefiDashSDK.create(suiClient, keypair);
97
+ console.log(`\nWallet: ${keypair.getPublicKey().toSuiAddress()}\n`);
98
+ }, 60000);
99
+ // ── Shared assertions ────────────────────────────────────────────────────────
100
+ function assertValidPortfolio(portfolio) {
101
+ // Must have a valid protocol
102
+ (0, vitest_1.expect)(Object.values(__1.LendingProtocol)).toContain(portfolio.protocol);
103
+ // Address must be non-empty
104
+ (0, vitest_1.expect)(portfolio.address).toBeTruthy();
105
+ // Health factor: positive number or Infinity
106
+ (0, vitest_1.expect)(portfolio.healthFactor).toBeGreaterThan(0);
107
+ // USD values must be non-negative
108
+ (0, vitest_1.expect)(portfolio.netValueUsd).toBeGreaterThanOrEqual(0);
109
+ (0, vitest_1.expect)(portfolio.totalCollateralUsd).toBeGreaterThanOrEqual(0);
110
+ (0, vitest_1.expect)(portfolio.totalDebtUsd).toBeGreaterThanOrEqual(0);
111
+ // Net value = collateral - debt (approximate)
112
+ if (portfolio.totalCollateralUsd > 0 || portfolio.totalDebtUsd > 0) {
113
+ (0, vitest_1.expect)(portfolio.netValueUsd).toBeCloseTo(portfolio.totalCollateralUsd - portfolio.totalDebtUsd, 1);
114
+ }
115
+ // Positions array
116
+ (0, vitest_1.expect)(Array.isArray(portfolio.positions)).toBe(true);
117
+ for (const pos of portfolio.positions) {
118
+ (0, vitest_1.expect)(pos.symbol).toBeTruthy();
119
+ (0, vitest_1.expect)(pos.coinType).toContain("::");
120
+ (0, vitest_1.expect)(["supply", "borrow"]).toContain(pos.side);
121
+ (0, vitest_1.expect)(pos.valueUsd).toBeGreaterThanOrEqual(0);
122
+ (0, vitest_1.expect)(typeof pos.apy).toBe("number");
123
+ }
124
+ }
125
+ // ── Tests ────────────────────────────────────────────────────────────────────
126
+ (0, vitest_1.describe)("sdk.getAggregatedPortfolio()", () => {
127
+ (0, vitest_1.it)("returns portfolios for all 3 protocols", async () => {
128
+ const portfolios = await sdk.getAggregatedPortfolio();
129
+ (0, vitest_1.expect)(portfolios).toHaveLength(3);
130
+ for (const portfolio of portfolios) {
131
+ printPortfolio(portfolio);
132
+ assertValidPortfolio(portfolio);
133
+ }
134
+ }, 60000);
135
+ (0, vitest_1.it)("always includes all protocols even with no positions", async () => {
136
+ const portfolios = await sdk.getAggregatedPortfolio();
137
+ const protocols = portfolios.map((p) => p.protocol);
138
+ (0, vitest_1.expect)(protocols).toContain(__1.LendingProtocol.Suilend);
139
+ (0, vitest_1.expect)(protocols).toContain(__1.LendingProtocol.Navi);
140
+ (0, vitest_1.expect)(protocols).toContain(__1.LendingProtocol.Scallop);
141
+ }, 60000);
142
+ (0, vitest_1.it)("does not return duplicate protocols", async () => {
143
+ const portfolios = await sdk.getAggregatedPortfolio();
144
+ const protocols = portfolios.map((p) => p.protocol);
145
+ const unique = new Set(protocols);
146
+ (0, vitest_1.expect)(unique.size).toBe(protocols.length);
147
+ }, 60000);
148
+ (0, vitest_1.it)("empty protocol returns safe defaults", async () => {
149
+ const portfolios = await sdk.getAggregatedPortfolio();
150
+ for (const portfolio of portfolios) {
151
+ if (portfolio.positions.length === 0) {
152
+ // Protocol with no positions should have zero values
153
+ (0, vitest_1.expect)(portfolio.totalCollateralUsd).toBe(0);
154
+ (0, vitest_1.expect)(portfolio.totalDebtUsd).toBe(0);
155
+ (0, vitest_1.expect)(portfolio.netValueUsd).toBe(0);
156
+ // Health factor should be Infinity (no debt risk)
157
+ (0, vitest_1.expect)(portfolio.healthFactor).toBe(Infinity);
158
+ }
159
+ }
160
+ }, 60000);
161
+ });
162
+ //# sourceMappingURL=sdk.portfolio.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.portfolio.test.js","sourceRoot":"","sources":["../../src/__tests__/sdk.portfolio.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,mCAAyD;AACzD,+CAAiC;AACjC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhC,0BAAkD;AAGlD,+CAA+D;AAC/D,0DAA8D;AAE9D,gFAAgF;AAEhF,SAAS,cAAc,CAAC,SAA2B;IACjD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAEtD,MAAM,KAAK,GAAG;QACZ,SAAS,SAAS,CAAC,QAAQ,4CAA4C;QACvE,2BAA2B,SAAS,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACpH,2BAA2B,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;QACvD,2BAA2B,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE;QAC9D,2BAA2B,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;KACzD,CAAC;IAEF,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,SAAS,CAAC,yBAAyB,IAAI,IAAI,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAChH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,gFAAgF;AAEhF,IAAI,GAAgB,CAAC;AAErB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAExE,IAAA,kBAAS,EAAC,KAAK,IAAI,EAAE;IACnB,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,kBAAS,CAAC;QAC9B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAA,uBAAc,EAAC,SAAS,CAAC;KAC/D,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,wBAAc,CAAC,aAAa,CAAC,UAAiB,CAAC,CAAC;IAChE,GAAG,GAAG,MAAM,eAAW,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CACT,aAAa,OAAO,CAAC,YAAY,EAAE,CAAC,YAAY,EAAE,IAAI,CACvD,CAAC;AACJ,CAAC,EAAE,KAAM,CAAC,CAAC;AAEX,gFAAgF;AAEhF,SAAS,oBAAoB,CAAC,SAA2B;IACvD,6BAA6B;IAC7B,IAAA,eAAM,EAAC,MAAM,CAAC,MAAM,CAAC,mBAAe,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAErE,4BAA4B;IAC5B,IAAA,eAAM,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;IAEvC,6CAA6C;IAC7C,IAAA,eAAM,EAAC,SAAS,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAElD,kCAAkC;IAClC,IAAA,eAAM,EAAC,SAAS,CAAC,WAAW,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACxD,IAAA,eAAM,EAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAA,eAAM,EAAC,SAAS,CAAC,YAAY,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAEzD,8CAA8C;IAC9C,IAAI,SAAS,CAAC,kBAAkB,GAAG,CAAC,IAAI,SAAS,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QACnE,IAAA,eAAM,EAAC,SAAS,CAAC,WAAW,CAAC,CAAC,WAAW,CACvC,SAAS,CAAC,kBAAkB,GAAG,SAAS,CAAC,YAAY,EACrD,CAAC,CACF,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,IAAA,eAAM,EAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtD,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACtC,IAAA,eAAM,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QAChC,IAAA,eAAM,EAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAA,eAAM,EAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAA,eAAM,EAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAA,eAAM,EAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,IAAA,iBAAQ,EAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAA,WAAE,EAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAEtD,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEnC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC1B,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,EAAE,KAAM,CAAC,CAAC;IAEX,IAAA,WAAE,EAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAEtD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,SAAS,CAAC,mBAAe,CAAC,OAAO,CAAC,CAAC;QACrD,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,SAAS,CAAC,mBAAe,CAAC,IAAI,CAAC,CAAC;QAClD,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,SAAS,CAAC,mBAAe,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,EAAE,KAAM,CAAC,CAAC;IAEX,IAAA,WAAE,EAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAEtD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAClC,IAAA,eAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,EAAE,KAAM,CAAC,CAAC;IAEX,IAAA,WAAE,EAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAEtD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,qDAAqD;gBACrD,IAAA,eAAM,EAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAA,eAAM,EAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAA,eAAM,EAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtC,kDAAkD;gBAClD,IAAA,eAAM,EAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,KAAM,CAAC,CAAC;AACb,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * SDK Method: sdk.getPosition() / sdk.getOpenPositions() [Integration]
3
+ *
4
+ * Verifies the public position query methods with live mainnet data.
5
+ *
6
+ * Internal dependencies (tested separately):
7
+ * - protocol.getPosition() → see internal.getPosition.test.ts
8
+ *
9
+ * Verified output fields:
10
+ * - getPosition(): PositionInfo | null per protocol
11
+ * - getOpenPositions(): array of { protocol, position } across all protocols
12
+ *
13
+ * Run: npx vitest run src/__tests__/sdk.position.test.ts
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=sdk.position.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.position.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sdk.position.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}