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,177 @@
1
+ "use strict";
2
+ /**
3
+ * Integration Tests: findBestLeverageRoute
4
+ *
5
+ * Verifies the best-route-finding logic across all protocols:
6
+ * - Returns two distinct routes (bestMaxMultiplier, bestApy)
7
+ * - Safe multiplier is correctly calculated
8
+ * - Graceful degradation when a protocol fails
9
+ *
10
+ * Run: npx vitest run src/__tests__/findBestLeverageRoute.test.ts
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ const vitest_1 = require("vitest");
47
+ const dotenv = __importStar(require("dotenv"));
48
+ dotenv.config({ path: '.env' });
49
+ const __1 = require("..");
50
+ const types_1 = require("../types");
51
+ const client_1 = require("@mysten/sui/client");
52
+ const ed25519_1 = require("@mysten/sui/keypairs/ed25519");
53
+ const transactions_1 = require("@mysten/sui/transactions");
54
+ // ── Print helper ──────────────────────────────────────────────────────────────
55
+ function printRouteResult(asset, result) {
56
+ const pct = (v) => `${(v * 100).toFixed(3)}%`;
57
+ const usd = (v) => `$${v.toFixed(2)}`;
58
+ console.log([
59
+ `\n┌─ Best Routes for ${asset} ──────────────────────────────────────`,
60
+ `│ Safe Multiplier : ${result.safeMultiplier.toFixed(2)}x`,
61
+ `│ Protocols OK : ${result.allPreviews.length}`,
62
+ `│ Protocols Failed: ${result.failedProtocols.length}${result.failedProtocols.length > 0 ? ` (${result.failedProtocols.map((f) => f.protocol).join(', ')})` : ''}`,
63
+ `│`,
64
+ `│ ── Best Max Multiplier ──────────────────────────────`,
65
+ `│ Protocol : ${result.bestMaxMultiplier.protocol}`,
66
+ `│ Max Multiplier : ${result.bestMaxMultiplier.preview.maxMultiplier.toFixed(2)}x`,
67
+ `│ Used Multiplier: ${result.bestMaxMultiplier.multiplier.toFixed(2)}x`,
68
+ `│ Net APY : ${pct(result.bestMaxMultiplier.preview.netApy)}`,
69
+ `│ Annual Earnings: ${usd(result.bestMaxMultiplier.preview.annualNetEarningsUsd)}`,
70
+ `│`,
71
+ `│ ── Best APY (at safe mult) ──────────────────────────`,
72
+ `│ Protocol : ${result.bestApy.protocol}`,
73
+ `│ Multiplier : ${result.bestApy.multiplier.toFixed(2)}x`,
74
+ `│ Net APY : ${pct(result.bestApy.preview.netApy)}`,
75
+ `│ Annual Earnings: ${usd(result.bestApy.preview.annualNetEarningsUsd)}`,
76
+ `│`,
77
+ `│ ── All Previews (at safe mult) ──────────────────────`,
78
+ ...result.allPreviews.map((p) => `│ ${p.protocol.padEnd(8)} → Net APY: ${pct(p.preview.netApy)}, Max: ${p.preview.maxMultiplier.toFixed(2)}x`),
79
+ `└──────────────────────────────────────────────────────────────────`,
80
+ ].join('\n'));
81
+ }
82
+ // ── Shared assertions ─────────────────────────────────────────────────────────
83
+ function assertValidRoute(route) {
84
+ (0, vitest_1.expect)(Object.values(__1.LendingProtocol)).toContain(route.protocol);
85
+ (0, vitest_1.expect)(route.multiplier).toBeGreaterThan(1);
86
+ (0, vitest_1.expect)(route.preview.maxMultiplier).toBeGreaterThan(1);
87
+ (0, vitest_1.expect)(route.preview.initialEquityUsd).toBeGreaterThan(0);
88
+ (0, vitest_1.expect)(route.preview.totalPositionUsd).toBeGreaterThan(0);
89
+ (0, vitest_1.expect)(route.preview.netApy).toBeDefined();
90
+ }
91
+ // ── SDK Setup ─────────────────────────────────────────────────────────────────
92
+ let sdk;
93
+ const SECRET_KEY = process.env.SECRET_KEY || process.env.SUI_SECRET_KEY;
94
+ (0, vitest_1.beforeAll)(async () => {
95
+ if (!SECRET_KEY)
96
+ throw new Error('SECRET_KEY env is required');
97
+ const suiClient = new client_1.SuiClient({
98
+ url: process.env.SUI_FULLNODE_URL || (0, client_1.getFullnodeUrl)('mainnet'),
99
+ });
100
+ const keypair = ed25519_1.Ed25519Keypair.fromSecretKey(SECRET_KEY);
101
+ sdk = new __1.DefiDashSDK({ secretKey: SECRET_KEY });
102
+ await sdk.initialize(suiClient, keypair);
103
+ }, 60000);
104
+ // ── Tests ─────────────────────────────────────────────────────────────────────
105
+ (0, vitest_1.describe)('findBestLeverageRoute Integration', () => {
106
+ (0, vitest_1.it)('SUI $100 – returns two valid routes', async () => {
107
+ const result = await sdk.findBestLeverageRoute({
108
+ depositAsset: 'SUI',
109
+ depositValueUsd: 100,
110
+ });
111
+ printRouteResult('SUI', result);
112
+ assertValidRoute(result.bestMaxMultiplier);
113
+ assertValidRoute(result.bestApy);
114
+ // Safe multiplier = min(maxMults) - buffer
115
+ const minMax = Math.min(...result.allPreviews.map((p) => p.preview.maxMultiplier));
116
+ (0, vitest_1.expect)(result.safeMultiplier).toBeCloseTo(Math.max(1.1, minMax - types_1.LEVERAGE_MULTIPLIER_BUFFER), 1);
117
+ // bestMaxMultiplier should have the highest maxMultiplier
118
+ for (const p of result.allPreviews) {
119
+ (0, vitest_1.expect)(result.bestMaxMultiplier.preview.maxMultiplier).toBeGreaterThanOrEqual(p.preview.maxMultiplier);
120
+ }
121
+ // bestApy should have the highest netApy among all safe previews
122
+ for (const p of result.allPreviews) {
123
+ (0, vitest_1.expect)(result.bestApy.preview.netApy).toBeGreaterThanOrEqual(p.preview.netApy);
124
+ }
125
+ }, 120000);
126
+ (0, vitest_1.it)('XBTC $100 – valid routes for BTC leverage', async () => {
127
+ const result = await sdk.findBestLeverageRoute({
128
+ depositAsset: 'XBTC',
129
+ depositValueUsd: 100,
130
+ });
131
+ printRouteResult('XBTC', result);
132
+ assertValidRoute(result.bestMaxMultiplier);
133
+ assertValidRoute(result.bestApy);
134
+ // At least 2 protocols should succeed for XBTC
135
+ (0, vitest_1.expect)(result.allPreviews.length).toBeGreaterThanOrEqual(2);
136
+ }, 120000);
137
+ (0, vitest_1.it)('bestApy multiplier equals safeMultiplier', async () => {
138
+ const result = await sdk.findBestLeverageRoute({
139
+ depositAsset: 'SUI',
140
+ depositValueUsd: 100,
141
+ });
142
+ (0, vitest_1.expect)(result.bestApy.multiplier).toBe(result.safeMultiplier);
143
+ }, 120000);
144
+ // ── Dryrun: verify best APY route builds a valid transaction on-chain ──────
145
+ (0, vitest_1.it)('SUI $1 – dryrun leverage with best APY route succeeds', async () => {
146
+ const route = await sdk.findBestLeverageRoute({
147
+ depositAsset: 'SUI',
148
+ depositValueUsd: 1,
149
+ });
150
+ const tx = new transactions_1.Transaction();
151
+ tx.setSender(sdk.getUserAddress());
152
+ await sdk.buildLeverageTransaction(tx, {
153
+ protocol: route.bestApy.protocol,
154
+ depositAsset: 'SUI',
155
+ depositValueUsd: 1,
156
+ multiplier: route.bestApy.multiplier,
157
+ });
158
+ const result = await sdk.dryRun(tx);
159
+ console.log(`\n Dryrun: ${route.bestApy.protocol} SUI ${route.bestApy.multiplier.toFixed(2)}x → ` +
160
+ `${result.success ? 'SUCCESS' : 'FAILED: ' + result.error}` +
161
+ `${result.gasUsed ? ` (gas: ${(Number(result.gasUsed) / 1e9).toFixed(4)} SUI)` : ''}`);
162
+ (0, vitest_1.expect)(result.success).toBe(true);
163
+ (0, vitest_1.expect)(result.gasUsed).toBeDefined();
164
+ (0, vitest_1.expect)(result.gasUsed).toBeGreaterThan(0n);
165
+ }, 180000);
166
+ // ── Error cases ──────────────────────────────────────────────────────────────
167
+ (0, vitest_1.it)('rejects when neither depositAmount nor depositValueUsd provided', async () => {
168
+ await (0, vitest_1.expect)(sdk.findBestLeverageRoute({ depositAsset: 'SUI' })).rejects.toThrow('Either depositAmount or depositValueUsd must be provided');
169
+ });
170
+ (0, vitest_1.it)('rejects unknown asset', async () => {
171
+ await (0, vitest_1.expect)(sdk.findBestLeverageRoute({
172
+ depositAsset: 'FAKECOIN',
173
+ depositValueUsd: 100,
174
+ })).rejects.toThrow();
175
+ });
176
+ });
177
+ //# sourceMappingURL=findBestLeverageRoute.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findBestLeverageRoute.test.js","sourceRoot":"","sources":["../../src/__tests__/findBestLeverageRoute.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getAssetApy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAssetApy.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/getAssetApy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * getAssetApy test — verifies each protocol adapter returns valid APY data.
5
+ *
6
+ * NOTE: These tests make live RPC calls to mainnet and may be slow (~10s each).
7
+ * Run with: npx vitest run src/__tests__/getAssetApy.test.ts
8
+ *
9
+ * ──────────────────────────────────────────────────────────────────────────────
10
+ * CONSTRAINT 1) Cross-protocol APY sanity check (Suilend USDC reference values)
11
+ * ──────────────────────────────────────────────────────────────────────────────
12
+ * Asset: USDC in Suilend (2026-02-26)
13
+ *
14
+ * Supply side:
15
+ * Interest (base supply APR) : 2.65%
16
+ * Reward (sSUI reward APR) : 0.49%
17
+ * ─────────────────────────────────────
18
+ * Deposit APR (total) : 3.13% ← totalSupplyApy should match this
19
+ *
20
+ * Borrow side:
21
+ * Interest (gross borrow APR): 5.83%
22
+ * Reward (sSUI borrow rebate): 2.00% (reduces net cost)
23
+ * ─────────────────────────────────────
24
+ * Borrow APR (gross) : 3.83% ← borrowApy should match this
25
+ *
26
+ * ──────────────────────────────────────────────────────────────────────────────
27
+ * CONSTRAINT 2) Wrapped BTC assets
28
+ * ──────────────────────────────────────────────────────────────────────────────
29
+ * TODO: Add LBTC and XBTC supply APY checks.
30
+ * These wrapped BTC assets are important for SDK completeness on Sui.
31
+ */
32
+ const vitest_1 = require("vitest");
33
+ const client_1 = require("@mysten/sui/client");
34
+ const adapter_1 = require("../protocols/suilend/adapter");
35
+ const adapter_2 = require("../protocols/navi/adapter");
36
+ const adapter_3 = require("../protocols/scallop/adapter");
37
+ const types_1 = require("../types");
38
+ /** Pretty-print APY results in the Suilend USDC style (see CONSTRAINT 1) */
39
+ function printApy(protocol, asset, apy) {
40
+ const pct = (v) => `${(v * 100).toFixed(3)}%`;
41
+ console.log([
42
+ `\n┌─ [${protocol}] ${asset} APY ─────────────────────────`,
43
+ `│ Supply side:`,
44
+ `│ Interest (base) : ${pct(apy.supplyApy)}`,
45
+ `│ Reward : ${pct(apy.rewardApy)}`,
46
+ `│ ─────────────────────────────────`,
47
+ `│ Total supply : ${pct(apy.totalSupplyApy)}`,
48
+ `│`,
49
+ `│ Borrow side:`,
50
+ `│ Gross borrow APR: ${pct(apy.borrowApy + apy.borrowRewardApy)}`,
51
+ `│ Reward (rebate) : ${pct(apy.borrowRewardApy)}`,
52
+ `│ ─────────────────────────────────`,
53
+ `│ Net borrow APR : ${pct(apy.borrowApy)}`,
54
+ `└─────────────────────────────────────────────────`,
55
+ ].join("\n"));
56
+ }
57
+ (0, vitest_1.describe)("Protocol getAssetApy", () => {
58
+ let suiClient;
59
+ (0, vitest_1.beforeAll)(() => {
60
+ suiClient = new client_1.SuiClient({ url: (0, client_1.getFullnodeUrl)("mainnet") });
61
+ });
62
+ // ── Suilend ─────────────────────────────────────────────────────────────────
63
+ (0, vitest_1.describe)("Suilend", () => {
64
+ let adapter;
65
+ (0, vitest_1.beforeAll)(async () => {
66
+ adapter = new adapter_1.SuilendAdapter();
67
+ await adapter.initialize(suiClient);
68
+ }, 30000);
69
+ (0, vitest_1.it)("should return valid APY for SUI", async () => {
70
+ const apy = await adapter.getAssetApy(types_1.COIN_TYPES.SUI);
71
+ printApy("Suilend", "SUI", apy);
72
+ (0, vitest_1.expect)(apy.supplyApy).toBeGreaterThanOrEqual(0);
73
+ (0, vitest_1.expect)(apy.borrowApy).toBeGreaterThanOrEqual(0);
74
+ (0, vitest_1.expect)(apy.rewardApy).toBeGreaterThanOrEqual(0);
75
+ (0, vitest_1.expect)(apy.totalSupplyApy).toBeCloseTo(apy.supplyApy + apy.rewardApy, 10);
76
+ }, 30000);
77
+ (0, vitest_1.it)("should return valid APY for USDC (CONSTRAINT 1: total supply ≈ 3.13%)", async () => {
78
+ const apy = await adapter.getAssetApy(types_1.COIN_TYPES.USDC);
79
+ printApy("Suilend", "USDC", apy);
80
+ (0, vitest_1.expect)(apy.supplyApy).toBeGreaterThan(0);
81
+ (0, vitest_1.expect)(apy.borrowApy).toBeGreaterThan(0);
82
+ // Deposit APR (total) = Interest + Reward ≥ base APR
83
+ // Reference: ~3.13% (2.65% interest + 0.49% sSUI reward)
84
+ (0, vitest_1.expect)(apy.totalSupplyApy).toBeGreaterThanOrEqual(apy.supplyApy);
85
+ (0, vitest_1.expect)(apy.totalSupplyApy).toBeCloseTo(apy.supplyApy + apy.rewardApy, 10);
86
+ }, 30000);
87
+ });
88
+ // ── Navi ────────────────────────────────────────────────────────────────────
89
+ (0, vitest_1.describe)("Navi", () => {
90
+ let adapter;
91
+ (0, vitest_1.beforeAll)(async () => {
92
+ adapter = new adapter_2.NaviAdapter();
93
+ await adapter.initialize(suiClient);
94
+ }, 30000);
95
+ (0, vitest_1.it)("should return valid APY for SUI", async () => {
96
+ const apy = await adapter.getAssetApy(types_1.COIN_TYPES.SUI);
97
+ printApy("Navi", "SUI", apy);
98
+ (0, vitest_1.expect)(apy.supplyApy).toBeGreaterThan(0);
99
+ (0, vitest_1.expect)(apy.borrowApy).toBeGreaterThan(0);
100
+ (0, vitest_1.expect)(apy.rewardApy).toBeGreaterThanOrEqual(0);
101
+ (0, vitest_1.expect)(apy.totalSupplyApy).toBeCloseTo(apy.supplyApy + apy.rewardApy, 10);
102
+ }, 30000);
103
+ (0, vitest_1.it)("should return valid APY for USDC", async () => {
104
+ const apy = await adapter.getAssetApy(types_1.COIN_TYPES.USDC);
105
+ printApy("Navi", "USDC", apy);
106
+ (0, vitest_1.expect)(apy.supplyApy).toBeGreaterThan(0);
107
+ (0, vitest_1.expect)(apy.borrowApy).toBeGreaterThan(0);
108
+ }, 30000);
109
+ });
110
+ // ── Scallop ─────────────────────────────────────────────────────────────────
111
+ (0, vitest_1.describe)("Scallop", () => {
112
+ let adapter;
113
+ (0, vitest_1.beforeAll)(async () => {
114
+ adapter = new adapter_3.ScallopAdapter();
115
+ await adapter.initialize(suiClient);
116
+ }, 30000);
117
+ (0, vitest_1.it)("should return valid APY for SUI", async () => {
118
+ const apy = await adapter.getAssetApy(types_1.COIN_TYPES.SUI);
119
+ printApy("Scallop", "SUI", apy);
120
+ (0, vitest_1.expect)(apy.supplyApy).toBeGreaterThan(0);
121
+ (0, vitest_1.expect)(apy.borrowApy).toBeGreaterThan(0);
122
+ (0, vitest_1.expect)(apy.rewardApy).toBeGreaterThanOrEqual(0);
123
+ (0, vitest_1.expect)(apy.totalSupplyApy).toBeCloseTo(apy.supplyApy + apy.rewardApy, 10);
124
+ }, 30000);
125
+ (0, vitest_1.it)("should return valid APY for USDC", async () => {
126
+ const apy = await adapter.getAssetApy(types_1.COIN_TYPES.USDC);
127
+ printApy("Scallop", "USDC", apy);
128
+ (0, vitest_1.expect)(apy.supplyApy).toBeGreaterThan(0);
129
+ (0, vitest_1.expect)(apy.borrowApy).toBeGreaterThan(0);
130
+ }, 30000);
131
+ });
132
+ });
133
+ //# sourceMappingURL=getAssetApy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAssetApy.test.js","sourceRoot":"","sources":["../../src/__tests__/getAssetApy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * getAssetRiskParams — Integration tests
3
+ *
4
+ * Tests each protocol adapter's on-chain LTV query for all SUPPORTED_COIN_TYPES.
5
+ * Validates returned values are within sane ranges and maxMultiplier is
6
+ * correctly derived from LTV.
7
+ *
8
+ * Requires: .env with SUI_FULLNODE_URL (or defaults to public mainnet)
9
+ */
10
+ import "dotenv/config";
11
+ //# sourceMappingURL=getAssetRiskParams.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAssetRiskParams.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/getAssetRiskParams.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,eAAe,CAAC"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ /**
3
+ * getAssetRiskParams — Integration tests
4
+ *
5
+ * Tests each protocol adapter's on-chain LTV query for all SUPPORTED_COIN_TYPES.
6
+ * Validates returned values are within sane ranges and maxMultiplier is
7
+ * correctly derived from LTV.
8
+ *
9
+ * Requires: .env with SUI_FULLNODE_URL (or defaults to public mainnet)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ require("dotenv/config");
13
+ const vitest_1 = require("vitest");
14
+ const client_1 = require("@mysten/sui/client");
15
+ const adapter_1 = require("../protocols/suilend/adapter");
16
+ const adapter_2 = require("../protocols/navi/adapter");
17
+ const adapter_3 = require("../protocols/scallop/adapter");
18
+ const constants_1 = require("../types/constants");
19
+ const SUI_FULLNODE_URL = process.env.SUI_FULLNODE_URL || (0, client_1.getFullnodeUrl)("mainnet");
20
+ const COIN_LABELS = {
21
+ [constants_1.COIN_TYPES.SUI]: "SUI",
22
+ [constants_1.COIN_TYPES.LBTC]: "LBTC",
23
+ [constants_1.COIN_TYPES.XBTC]: "XBTC",
24
+ };
25
+ const FALLBACK = {
26
+ ltv: 0.5,
27
+ liquidationThreshold: 0.6,
28
+ liquidationBonus: 0.05,
29
+ maxMultiplier: 2.0,
30
+ };
31
+ function isFallback(p) {
32
+ return (p.ltv === FALLBACK.ltv &&
33
+ p.liquidationThreshold === FALLBACK.liquidationThreshold &&
34
+ p.liquidationBonus === FALLBACK.liquidationBonus &&
35
+ p.maxMultiplier === FALLBACK.maxMultiplier);
36
+ }
37
+ // ─── Pretty-print helper ────────────────────────────────────────────
38
+ function printRiskParams(protocol, asset, params) {
39
+ const pct = (v) => `${(v * 100).toFixed(2)}%`;
40
+ const fb = isFallback(params) ? " (FALLBACK)" : "";
41
+ console.log([
42
+ `\n┌─ [${protocol}] ${asset} Risk Params${fb} ──────────────`,
43
+ `│ LTV (borrow limit) : ${pct(params.ltv)}`,
44
+ `│ Liquidation Threshold : ${pct(params.liquidationThreshold)}`,
45
+ `│ Liquidation Bonus : ${pct(params.liquidationBonus)}`,
46
+ `│ Max Multiplier : ${params.maxMultiplier.toFixed(2)}x`,
47
+ `└──────────────────────────────────────────────────`,
48
+ ].join("\n"));
49
+ }
50
+ // ─── Shared assertion helpers ────────────────────────────────────────
51
+ function assertValidRiskParams(params) {
52
+ // LTV: 0 < ltv < 1
53
+ (0, vitest_1.expect)(params.ltv).toBeGreaterThan(0);
54
+ (0, vitest_1.expect)(params.ltv).toBeLessThan(1);
55
+ // Liquidation threshold: 0 < threshold <= 1
56
+ // NOTE: Not all protocols guarantee threshold >= LTV.
57
+ // Navi defines liquidationThreshold independently (can be < ltv).
58
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeGreaterThan(0);
59
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeLessThanOrEqual(1);
60
+ // Liquidation bonus: 0 < bonus < 1
61
+ (0, vitest_1.expect)(params.liquidationBonus).toBeGreaterThan(0);
62
+ (0, vitest_1.expect)(params.liquidationBonus).toBeLessThan(1);
63
+ // Max multiplier = 1 / (1 - ltv), tolerance 0.01
64
+ const expected = 1 / (1 - params.ltv);
65
+ (0, vitest_1.expect)(params.maxMultiplier).toBeCloseTo(expected, 2);
66
+ // Max multiplier must be > 1
67
+ (0, vitest_1.expect)(params.maxMultiplier).toBeGreaterThan(1);
68
+ }
69
+ // ─── Test suites ─────────────────────────────────────────────────────
70
+ (0, vitest_1.describe)("getAssetRiskParams", () => {
71
+ let suiClient;
72
+ (0, vitest_1.beforeAll)(() => {
73
+ suiClient = new client_1.SuiClient({ url: SUI_FULLNODE_URL });
74
+ });
75
+ // ── Suilend ──────────────────────────────────────────────────────
76
+ (0, vitest_1.describe)("Suilend", () => {
77
+ let adapter;
78
+ (0, vitest_1.beforeAll)(async () => {
79
+ adapter = new adapter_1.SuilendAdapter();
80
+ await adapter.initialize(suiClient);
81
+ });
82
+ vitest_1.it.each(constants_1.SUPPORTED_COIN_TYPES.map((ct) => [COIN_LABELS[ct], ct]))("%s — returns valid risk params", async (label, coinType) => {
83
+ const params = await adapter.getAssetRiskParams(coinType);
84
+ printRiskParams("Suilend", label, params);
85
+ assertValidRiskParams(params);
86
+ });
87
+ (0, vitest_1.it)("SUI — returns real on-chain LTV, not fallback", async () => {
88
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.SUI);
89
+ (0, vitest_1.expect)(isFallback(params)).toBe(false);
90
+ // Suilend SUI LTV is known to be ~70%
91
+ (0, vitest_1.expect)(params.ltv).toBeGreaterThanOrEqual(0.5);
92
+ (0, vitest_1.expect)(params.ltv).toBeLessThanOrEqual(0.85);
93
+ });
94
+ (0, vitest_1.it)("SUI — liquidationThreshold >= LTV", async () => {
95
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.SUI);
96
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeGreaterThanOrEqual(params.ltv);
97
+ });
98
+ (0, vitest_1.it)("LBTC — returns real on-chain LTV, not fallback", async () => {
99
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.LBTC);
100
+ (0, vitest_1.expect)(isFallback(params)).toBe(false);
101
+ (0, vitest_1.expect)(params.ltv).toBeGreaterThanOrEqual(0.4);
102
+ (0, vitest_1.expect)(params.ltv).toBeLessThanOrEqual(0.8);
103
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeGreaterThanOrEqual(params.ltv);
104
+ });
105
+ (0, vitest_1.it)("XBTC — returns real on-chain LTV, not fallback", async () => {
106
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.XBTC);
107
+ (0, vitest_1.expect)(isFallback(params)).toBe(false);
108
+ (0, vitest_1.expect)(params.ltv).toBeGreaterThanOrEqual(0.4);
109
+ (0, vitest_1.expect)(params.ltv).toBeLessThanOrEqual(0.8);
110
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeGreaterThanOrEqual(params.ltv);
111
+ });
112
+ });
113
+ // ── Navi ─────────────────────────────────────────────────────────
114
+ (0, vitest_1.describe)("Navi", () => {
115
+ let adapter;
116
+ (0, vitest_1.beforeAll)(async () => {
117
+ adapter = new adapter_2.NaviAdapter();
118
+ await adapter.initialize(suiClient);
119
+ });
120
+ vitest_1.it.each(constants_1.SUPPORTED_COIN_TYPES.map((ct) => [COIN_LABELS[ct], ct]))("%s — returns valid risk params", async (label, coinType) => {
121
+ const params = await adapter.getAssetRiskParams(coinType);
122
+ printRiskParams("Navi", label, params);
123
+ assertValidRiskParams(params);
124
+ });
125
+ (0, vitest_1.it)("SUI — returns real on-chain LTV, not fallback", async () => {
126
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.SUI);
127
+ (0, vitest_1.expect)(isFallback(params)).toBe(false);
128
+ (0, vitest_1.expect)(params.ltv).toBeGreaterThanOrEqual(0.5);
129
+ (0, vitest_1.expect)(params.ltv).toBeLessThanOrEqual(0.85);
130
+ });
131
+ (0, vitest_1.it)("SUI — liquidationThreshold is within valid range", async () => {
132
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.SUI);
133
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeGreaterThan(0.5);
134
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeLessThan(1);
135
+ });
136
+ (0, vitest_1.it)("LBTC — LTV ~55%, LT ~70%", async () => {
137
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.LBTC);
138
+ (0, vitest_1.expect)(isFallback(params)).toBe(false);
139
+ (0, vitest_1.expect)(params.ltv).toBeCloseTo(0.55, 1);
140
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeCloseTo(0.70, 1);
141
+ });
142
+ (0, vitest_1.it)("XBTC — LTV ~67%, LT ~70%", async () => {
143
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.XBTC);
144
+ (0, vitest_1.expect)(isFallback(params)).toBe(false);
145
+ (0, vitest_1.expect)(params.ltv).toBeCloseTo(0.67, 1);
146
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeCloseTo(0.70, 1);
147
+ });
148
+ });
149
+ // ── Scallop ──────────────────────────────────────────────────────
150
+ (0, vitest_1.describe)("Scallop", () => {
151
+ let adapter;
152
+ (0, vitest_1.beforeAll)(async () => {
153
+ adapter = new adapter_3.ScallopAdapter();
154
+ await adapter.initialize(suiClient);
155
+ });
156
+ vitest_1.it.each(constants_1.SUPPORTED_COIN_TYPES.map((ct) => [COIN_LABELS[ct], ct]))("%s — returns valid risk params (may be fallback)", async (label, coinType) => {
157
+ const params = await adapter.getAssetRiskParams(coinType);
158
+ printRiskParams("Scallop", label, params);
159
+ assertValidRiskParams(params);
160
+ });
161
+ (0, vitest_1.it)("SUI — returns real on-chain LTV via direct contract query", async () => {
162
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.SUI);
163
+ (0, vitest_1.expect)(isFallback(params)).toBe(false);
164
+ // Scallop SUI: LTV ~85%, LT ~90%
165
+ (0, vitest_1.expect)(params.ltv).toBeGreaterThanOrEqual(0.7);
166
+ (0, vitest_1.expect)(params.ltv).toBeLessThanOrEqual(0.9);
167
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeGreaterThanOrEqual(params.ltv);
168
+ });
169
+ (0, vitest_1.it)("LBTC — returns fallback (not a Scallop collateral)", async () => {
170
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.LBTC);
171
+ (0, vitest_1.expect)(isFallback(params)).toBe(true);
172
+ });
173
+ (0, vitest_1.it)("XBTC — returns real on-chain LTV", async () => {
174
+ const params = await adapter.getAssetRiskParams(constants_1.COIN_TYPES.XBTC);
175
+ (0, vitest_1.expect)(isFallback(params)).toBe(false);
176
+ // Scallop XBTC: LTV ~75%, LT ~80%
177
+ (0, vitest_1.expect)(params.ltv).toBeGreaterThanOrEqual(0.6);
178
+ (0, vitest_1.expect)(params.ltv).toBeLessThanOrEqual(0.85);
179
+ (0, vitest_1.expect)(params.liquidationThreshold).toBeGreaterThanOrEqual(params.ltv);
180
+ });
181
+ });
182
+ });
183
+ //# sourceMappingURL=getAssetRiskParams.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAssetRiskParams.test.js","sourceRoot":"","sources":["../../src/__tests__/getAssetRiskParams.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAEH,yBAAuB;AACvB,mCAAyD;AACzD,+CAA+D;AAC/D,0DAA8D;AAC9D,uDAAwD;AACxD,0DAA8D;AAE9D,kDAAsE;AAEtE,MAAM,gBAAgB,GACpB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAA,uBAAc,EAAC,SAAS,CAAC,CAAC;AAE5D,MAAM,WAAW,GAA2B;IAC1C,CAAC,sBAAU,CAAC,GAAG,CAAC,EAAE,KAAK;IACvB,CAAC,sBAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IACzB,CAAC,sBAAU,CAAC,IAAI,CAAC,EAAE,MAAM;CAC1B,CAAC;AAEF,MAAM,QAAQ,GAAoB;IAChC,GAAG,EAAE,GAAG;IACR,oBAAoB,EAAE,GAAG;IACzB,gBAAgB,EAAE,IAAI;IACtB,aAAa,EAAE,GAAG;CACnB,CAAC;AAEF,SAAS,UAAU,CAAC,CAAkB;IACpC,OAAO,CACL,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;QACtB,CAAC,CAAC,oBAAoB,KAAK,QAAQ,CAAC,oBAAoB;QACxD,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB;QAChD,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,aAAa,CAC3C,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,SAAS,eAAe,CACtB,QAAgB,EAChB,KAAa,EACb,MAAuB;IAEvB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtD,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CACT;QACE,SAAS,QAAQ,KAAK,KAAK,eAAe,EAAE,iBAAiB;QAC7D,gCAAgC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QACjD,gCAAgC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE;QAClE,gCAAgC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;QAC9D,gCAAgC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAClE,qDAAqD;KACtD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,qBAAqB,CAAC,MAAuB;IACpD,mBAAmB;IACnB,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACtC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEnC,4CAA4C;IAC5C,sDAAsD;IACtD,kEAAkE;IAClE,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACvD,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAE3D,mCAAmC;IACnC,IAAA,eAAM,EAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACnD,IAAA,eAAM,EAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEhD,iDAAiD;IACjD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,IAAA,eAAM,EAAC,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEtD,6BAA6B;IAC7B,IAAA,eAAM,EAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,wEAAwE;AAExE,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,SAAoB,CAAC;IAEzB,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,SAAS,GAAG,IAAI,kBAAS,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,oEAAoE;IAEpE,IAAA,iBAAQ,EAAC,SAAS,EAAE,GAAG,EAAE;QACvB,IAAI,OAAuB,CAAC;QAE5B,IAAA,kBAAS,EAAC,KAAK,IAAI,EAAE;YACnB,OAAO,GAAG,IAAI,wBAAc,EAAE,CAAC;YAC/B,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,WAAE,CAAC,IAAI,CAAC,gCAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAC9D,gCAAgC,EAChC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC1D,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC1C,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC,CACF,CAAC;QAEF,IAAA,WAAE,EAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,GAAG,CAAC,CAAC;YAChE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,sCAAsC;YACtC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,GAAG,CAAC,CAAC;YAChE,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;YACjE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;YACjE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,oEAAoE;IAEpE,IAAA,iBAAQ,EAAC,MAAM,EAAE,GAAG,EAAE;QACpB,IAAI,OAAoB,CAAC;QAEzB,IAAA,kBAAS,EAAC,KAAK,IAAI,EAAE;YACnB,OAAO,GAAG,IAAI,qBAAW,EAAE,CAAC;YAC5B,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,WAAE,CAAC,IAAI,CAAC,gCAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAC9D,gCAAgC,EAChC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC1D,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACvC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC,CACF,CAAC;QAEF,IAAA,WAAE,EAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,GAAG,CAAC,CAAC;YAChE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,GAAG,CAAC,CAAC;YAChE,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACzD,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;YACjE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;YACjE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,oEAAoE;IAEpE,IAAA,iBAAQ,EAAC,SAAS,EAAE,GAAG,EAAE;QACvB,IAAI,OAAuB,CAAC;QAE5B,IAAA,kBAAS,EAAC,KAAK,IAAI,EAAE;YACnB,OAAO,GAAG,IAAI,wBAAc,EAAE,CAAC;YAC/B,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,WAAE,CAAC,IAAI,CAAC,gCAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAC9D,kDAAkD,EAClD,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC1D,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC1C,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC,CACF,CAAC;QAEF,IAAA,WAAE,EAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,GAAG,CAAC,CAAC;YAChE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,iCAAiC;YACjC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;YACjE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,sBAAU,CAAC,IAAI,CAAC,CAAC;YACjE,IAAA,eAAM,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,kCAAkC;YAClC,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAA,eAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAA,eAAM,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=internal.getAssetApy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.getAssetApy.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/internal.getAssetApy.test.ts"],"names":[],"mappings":""}