@exponent-labs/exponent-sdk 0.9.0 → 0.9.1

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 (153) hide show
  1. package/build/client/vaults/index.d.ts +2 -0
  2. package/build/client/vaults/index.js +2 -0
  3. package/build/client/vaults/index.js.map +1 -1
  4. package/build/client/vaults/types/index.d.ts +2 -0
  5. package/build/client/vaults/types/index.js +2 -0
  6. package/build/client/vaults/types/index.js.map +1 -1
  7. package/build/client/vaults/types/kaminoFarmEntry.d.ts +15 -0
  8. package/build/client/vaults/types/kaminoFarmEntry.js +17 -0
  9. package/build/client/vaults/types/kaminoFarmEntry.js.map +1 -0
  10. package/build/client/vaults/types/kaminoObligationEntry.d.ts +24 -7
  11. package/build/client/vaults/types/kaminoObligationEntry.js +2 -1
  12. package/build/client/vaults/types/kaminoObligationEntry.js.map +1 -1
  13. package/build/client/vaults/types/obligationType.d.ts +1 -1
  14. package/build/client/vaults/types/positionUpdate.d.ts +9 -0
  15. package/build/client/vaults/types/positionUpdate.js +23 -0
  16. package/build/client/vaults/types/positionUpdate.js.map +1 -1
  17. package/build/client/vaults/types/proposalAction.d.ts +54 -54
  18. package/build/client/vaults/types/proposalAction.js +0 -3
  19. package/build/client/vaults/types/proposalAction.js.map +1 -1
  20. package/build/client/vaults/types/reserveFarmMapping.d.ts +19 -0
  21. package/build/client/vaults/types/reserveFarmMapping.js +18 -0
  22. package/build/client/vaults/types/reserveFarmMapping.js.map +1 -0
  23. package/build/client/vaults/types/strategyPosition.d.ts +6 -1
  24. package/build/client/vaults/types/strategyPosition.js +5 -0
  25. package/build/client/vaults/types/strategyPosition.js.map +1 -1
  26. package/build/exponentVaults/aumCalculator.d.ts +25 -4
  27. package/build/exponentVaults/aumCalculator.js +236 -15
  28. package/build/exponentVaults/aumCalculator.js.map +1 -1
  29. package/build/exponentVaults/fetcher.d.ts +52 -0
  30. package/build/exponentVaults/fetcher.js +199 -0
  31. package/build/exponentVaults/fetcher.js.map +1 -0
  32. package/build/exponentVaults/index.d.ts +10 -9
  33. package/build/exponentVaults/index.js +25 -8
  34. package/build/exponentVaults/index.js.map +1 -1
  35. package/build/exponentVaults/kamino-farms.d.ts +144 -0
  36. package/build/exponentVaults/kamino-farms.js +396 -0
  37. package/build/exponentVaults/kamino-farms.js.map +1 -0
  38. package/build/exponentVaults/loopscale/client.d.ts +240 -0
  39. package/build/exponentVaults/loopscale/client.js +590 -0
  40. package/build/exponentVaults/loopscale/client.js.map +1 -0
  41. package/build/exponentVaults/loopscale/client.test.d.ts +1 -0
  42. package/build/exponentVaults/loopscale/client.test.js +183 -0
  43. package/build/exponentVaults/loopscale/client.test.js.map +1 -0
  44. package/build/exponentVaults/loopscale/helpers.d.ts +29 -0
  45. package/build/exponentVaults/loopscale/helpers.js +119 -0
  46. package/build/exponentVaults/loopscale/helpers.js.map +1 -0
  47. package/build/exponentVaults/loopscale/index.d.ts +3 -0
  48. package/build/exponentVaults/loopscale/index.js +12 -0
  49. package/build/exponentVaults/loopscale/index.js.map +1 -0
  50. package/build/exponentVaults/loopscale/prepared-transactions.d.ts +13 -0
  51. package/build/exponentVaults/loopscale/prepared-transactions.js +271 -0
  52. package/build/exponentVaults/loopscale/prepared-transactions.js.map +1 -0
  53. package/build/exponentVaults/loopscale/prepared-transactions.test.d.ts +1 -0
  54. package/build/exponentVaults/loopscale/prepared-transactions.test.js +400 -0
  55. package/build/exponentVaults/loopscale/prepared-transactions.test.js.map +1 -0
  56. package/build/exponentVaults/loopscale/prepared-types.d.ts +62 -0
  57. package/build/exponentVaults/loopscale/prepared-types.js +3 -0
  58. package/build/exponentVaults/loopscale/prepared-types.js.map +1 -0
  59. package/build/exponentVaults/loopscale/response-plan.d.ts +69 -0
  60. package/build/exponentVaults/loopscale/response-plan.js +141 -0
  61. package/build/exponentVaults/loopscale/response-plan.js.map +1 -0
  62. package/build/exponentVaults/loopscale/response-plan.test.d.ts +1 -0
  63. package/build/exponentVaults/loopscale/response-plan.test.js +139 -0
  64. package/build/exponentVaults/loopscale/response-plan.test.js.map +1 -0
  65. package/build/exponentVaults/loopscale/send-plan.d.ts +75 -0
  66. package/build/exponentVaults/loopscale/send-plan.js +235 -0
  67. package/build/exponentVaults/loopscale/send-plan.js.map +1 -0
  68. package/build/exponentVaults/loopscale/types.d.ts +443 -0
  69. package/build/exponentVaults/loopscale/types.js +3 -0
  70. package/build/exponentVaults/loopscale/types.js.map +1 -0
  71. package/build/exponentVaults/loopscale-client.d.ts +113 -524
  72. package/build/exponentVaults/loopscale-client.js +296 -539
  73. package/build/exponentVaults/loopscale-client.js.map +1 -1
  74. package/build/exponentVaults/loopscale-client.test.d.ts +1 -0
  75. package/build/exponentVaults/loopscale-client.test.js +162 -0
  76. package/build/exponentVaults/loopscale-client.test.js.map +1 -0
  77. package/build/exponentVaults/loopscale-client.types.d.ts +425 -0
  78. package/build/exponentVaults/loopscale-client.types.js +3 -0
  79. package/build/exponentVaults/loopscale-client.types.js.map +1 -0
  80. package/build/exponentVaults/loopscale-execution.d.ts +125 -0
  81. package/build/exponentVaults/loopscale-execution.js +341 -0
  82. package/build/exponentVaults/loopscale-execution.js.map +1 -0
  83. package/build/exponentVaults/loopscale-execution.test.d.ts +1 -0
  84. package/build/exponentVaults/loopscale-execution.test.js +139 -0
  85. package/build/exponentVaults/loopscale-execution.test.js.map +1 -0
  86. package/build/exponentVaults/loopscale-vault.d.ts +115 -0
  87. package/build/exponentVaults/loopscale-vault.js +275 -0
  88. package/build/exponentVaults/loopscale-vault.js.map +1 -0
  89. package/build/exponentVaults/loopscale-vault.test.d.ts +1 -0
  90. package/build/exponentVaults/loopscale-vault.test.js +102 -0
  91. package/build/exponentVaults/loopscale-vault.test.js.map +1 -0
  92. package/build/exponentVaults/policyBuilders.d.ts +62 -0
  93. package/build/exponentVaults/policyBuilders.js +119 -2
  94. package/build/exponentVaults/policyBuilders.js.map +1 -1
  95. package/build/exponentVaults/pricePathResolver.d.ts +45 -0
  96. package/build/exponentVaults/pricePathResolver.js +198 -0
  97. package/build/exponentVaults/pricePathResolver.js.map +1 -0
  98. package/build/exponentVaults/pricePathResolver.test.d.ts +1 -0
  99. package/build/exponentVaults/pricePathResolver.test.js +369 -0
  100. package/build/exponentVaults/pricePathResolver.test.js.map +1 -0
  101. package/build/exponentVaults/syncTransaction.js +4 -1
  102. package/build/exponentVaults/syncTransaction.js.map +1 -1
  103. package/build/exponentVaults/titan-quote.js +170 -36
  104. package/build/exponentVaults/titan-quote.js.map +1 -1
  105. package/build/exponentVaults/vault-instruction-types.d.ts +363 -0
  106. package/build/exponentVaults/vault-instruction-types.js +128 -0
  107. package/build/exponentVaults/vault-instruction-types.js.map +1 -0
  108. package/build/exponentVaults/vault-interaction.d.ts +156 -313
  109. package/build/exponentVaults/vault-interaction.js +1581 -353
  110. package/build/exponentVaults/vault-interaction.js.map +1 -1
  111. package/build/exponentVaults/vault.d.ts +51 -2
  112. package/build/exponentVaults/vault.js +324 -48
  113. package/build/exponentVaults/vault.js.map +1 -1
  114. package/build/exponentVaults/vaultTransactionBuilder.d.ts +100 -134
  115. package/build/exponentVaults/vaultTransactionBuilder.js +359 -266
  116. package/build/exponentVaults/vaultTransactionBuilder.js.map +1 -1
  117. package/build/exponentVaults/vaultTransactionBuilder.test.d.ts +1 -0
  118. package/build/exponentVaults/vaultTransactionBuilder.test.js +214 -0
  119. package/build/exponentVaults/vaultTransactionBuilder.test.js.map +1 -0
  120. package/build/marketThree.d.ts +6 -2
  121. package/build/marketThree.js +10 -8
  122. package/build/marketThree.js.map +1 -1
  123. package/package.json +32 -32
  124. package/src/client/vaults/index.ts +2 -0
  125. package/src/client/vaults/types/index.ts +2 -0
  126. package/src/client/vaults/types/kaminoFarmEntry.ts +32 -0
  127. package/src/client/vaults/types/kaminoObligationEntry.ts +6 -3
  128. package/src/client/vaults/types/positionUpdate.ts +62 -0
  129. package/src/client/vaults/types/proposalAction.ts +0 -3
  130. package/src/client/vaults/types/reserveFarmMapping.ts +35 -0
  131. package/src/client/vaults/types/strategyPosition.ts +18 -1
  132. package/src/exponentVaults/aumCalculator.ts +353 -16
  133. package/src/exponentVaults/fetcher.ts +257 -0
  134. package/src/exponentVaults/index.ts +64 -40
  135. package/src/exponentVaults/kamino-farms.ts +538 -0
  136. package/src/exponentVaults/loopscale/client.ts +808 -0
  137. package/src/exponentVaults/loopscale/helpers.ts +172 -0
  138. package/src/exponentVaults/loopscale/index.ts +57 -0
  139. package/src/exponentVaults/loopscale/prepared-transactions.ts +435 -0
  140. package/src/exponentVaults/loopscale/prepared-types.ts +73 -0
  141. package/src/exponentVaults/loopscale/types.ts +466 -0
  142. package/src/exponentVaults/policyBuilders.ts +170 -0
  143. package/src/exponentVaults/pricePathResolver.test.ts +466 -0
  144. package/src/exponentVaults/pricePathResolver.ts +273 -0
  145. package/src/exponentVaults/syncTransaction.ts +6 -1
  146. package/src/exponentVaults/titan-quote.ts +231 -45
  147. package/src/exponentVaults/vault-instruction-types.ts +493 -0
  148. package/src/exponentVaults/vault-interaction.ts +2227 -636
  149. package/src/exponentVaults/vault.ts +474 -63
  150. package/src/exponentVaults/vaultTransactionBuilder.test.ts +256 -0
  151. package/src/exponentVaults/vaultTransactionBuilder.ts +555 -413
  152. package/src/marketThree.ts +14 -6
  153. package/src/exponentVaults/loopscale-client.ts +0 -1373
@@ -0,0 +1,590 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.identifyLoopscaleInstruction = exports.getLoopscaleTransactionResponses = exports.extractCreatedStrategyNonce = exports.extractCreatedStrategyAddress = exports.deserializeLoopscaleTransactionResponse = exports.deserializeLoopscaleTransactionBatchResponse = exports.LoopscaleClient = void 0;
4
+ /**
5
+ * Loopscale manager flow:
6
+ *
7
+ * 1. Call a raw Loopscale endpoint such as `createStrategy(...)`,
8
+ * `createLoan(...)`, or `borrowPrincipal(...)`.
9
+ * 2. Hand the raw response back to this client.
10
+ * 3. Choose one of two paths:
11
+ * - `prepareVaultTransactions(...)` when you want appendable instruction
12
+ * pieces you can compose with your own transaction building logic.
13
+ * - `buildVaultTransactions(...)` when you want locally signed
14
+ * `VersionedTransaction`s that are ready for optional Loopscale
15
+ * co-signing and then `connection.sendTransaction(...)`.
16
+ * 4. Call `coSign(...)` only on returned transactions where
17
+ * `requiresLoopscaleCoSign === true`.
18
+ *
19
+ * This distinction is intentional:
20
+ *
21
+ * - Wrapped Loopscale sync transactions require Loopscale MPC because they
22
+ * represent Loopscale-authored flows that expect Loopscale's signature.
23
+ * - Setup transactions and other top-level non-Loopscale transactions must
24
+ * stay local. They are constructed by the SDK to make the manager flow
25
+ * complete, but they are not Loopscale-signed transactions and should not
26
+ * be sent to Loopscale's MPC endpoint.
27
+ *
28
+ * In other words, `requiresLoopscaleCoSign` is not a convenience flag. It is
29
+ * the contract that tells the caller which transactions belong to Loopscale's
30
+ * signing domain and which ones do not.
31
+ *
32
+ * Example:
33
+ *
34
+ * ```ts
35
+ * const client = new LoopscaleClient({
36
+ * connection,
37
+ * userWallet: squadsVault,
38
+ * payer: squadsVault,
39
+ * })
40
+ *
41
+ * const response = await client.createStrategy({
42
+ * principalMint,
43
+ * lender: squadsVault,
44
+ * amount: 0,
45
+ * })
46
+ *
47
+ * const builtTransactions = await client.buildVaultTransactions({
48
+ * response,
49
+ * context: {
50
+ * connection,
51
+ * signer: manager.publicKey,
52
+ * signers: [manager],
53
+ * vaultPda: squadsVault,
54
+ * vaultAddress,
55
+ * squadsProgram,
56
+ * },
57
+ * })
58
+ *
59
+ * for (const built of builtTransactions) {
60
+ * const transaction = built.requiresLoopscaleCoSign
61
+ * ? await client.coSign(built.transaction)
62
+ * : built.transaction
63
+ *
64
+ * await connection.sendTransaction(transaction, { skipPreflight: false })
65
+ * }
66
+ * ```
67
+ */
68
+ const web3_js_1 = require("@solana/web3.js");
69
+ const helpers_1 = require("./helpers");
70
+ Object.defineProperty(exports, "deserializeLoopscaleTransactionBatchResponse", { enumerable: true, get: function () { return helpers_1.deserializeLoopscaleTransactionBatchResponse; } });
71
+ Object.defineProperty(exports, "deserializeLoopscaleTransactionResponse", { enumerable: true, get: function () { return helpers_1.deserializeLoopscaleTransactionResponse; } });
72
+ Object.defineProperty(exports, "extractCreatedStrategyAddress", { enumerable: true, get: function () { return helpers_1.extractCreatedStrategyAddress; } });
73
+ Object.defineProperty(exports, "extractCreatedStrategyNonce", { enumerable: true, get: function () { return helpers_1.extractCreatedStrategyNonce; } });
74
+ Object.defineProperty(exports, "getLoopscaleTransactionResponses", { enumerable: true, get: function () { return helpers_1.getLoopscaleTransactionResponses; } });
75
+ Object.defineProperty(exports, "identifyLoopscaleInstruction", { enumerable: true, get: function () { return helpers_1.identifyLoopscaleInstruction; } });
76
+ const prepared_transactions_1 = require("./prepared-transactions");
77
+ const LOOPSCALE_API_BASE_URL = "https://tars.loopscale.com/v1";
78
+ function toBase58(value) {
79
+ return typeof value === "string" ? value : value.toBase58();
80
+ }
81
+ function toSafeNumber(value, field) {
82
+ if (typeof value === "bigint") {
83
+ if (value < 0n)
84
+ throw new Error(`${field} must be non-negative`);
85
+ if (value > BigInt(Number.MAX_SAFE_INTEGER))
86
+ throw new Error(`${field} is too large for a JSON number`);
87
+ return Number(value);
88
+ }
89
+ if (!Number.isInteger(value) || value < 0) {
90
+ throw new Error(`${field} must be a non-negative integer`);
91
+ }
92
+ return value;
93
+ }
94
+ function hasSignature(signature) {
95
+ return signature.some((value) => value !== 0);
96
+ }
97
+ function withPayerHeader(headers, payer) {
98
+ if (!payer)
99
+ return headers;
100
+ return { ...headers, payer };
101
+ }
102
+ function mergeCoSignedTransaction(transaction, coSignedTransaction) {
103
+ const left = Buffer.from(transaction.message.serialize());
104
+ const right = Buffer.from(coSignedTransaction.message.serialize());
105
+ if (!left.equals(right)) {
106
+ throw new Error("Loopscale returned a different transaction message; refusing to merge signatures");
107
+ }
108
+ const signerKeys = coSignedTransaction.message.staticAccountKeys
109
+ .slice(0, coSignedTransaction.message.header.numRequiredSignatures);
110
+ const inputSignerKeys = transaction.message.staticAccountKeys
111
+ .slice(0, transaction.message.header.numRequiredSignatures);
112
+ for (let index = 0; index < inputSignerKeys.length; index += 1) {
113
+ const inputSignature = transaction.signatures[index];
114
+ if (!hasSignature(inputSignature))
115
+ continue;
116
+ const signerIndex = signerKeys.findIndex((candidate) => candidate.equals(inputSignerKeys[index]));
117
+ if (signerIndex >= 0 && !hasSignature(coSignedTransaction.signatures[signerIndex])) {
118
+ coSignedTransaction.signatures[signerIndex] = inputSignature;
119
+ }
120
+ }
121
+ return coSignedTransaction;
122
+ }
123
+ function dedupeLookupTableAccounts(lookupTableAccounts) {
124
+ const seen = new Set();
125
+ return lookupTableAccounts.filter((account) => {
126
+ const key = account.key.toBase58();
127
+ if (seen.has(key)) {
128
+ return false;
129
+ }
130
+ seen.add(key);
131
+ return true;
132
+ });
133
+ }
134
+ function dedupeSigners(signers) {
135
+ const seen = new Set();
136
+ return signers.filter((signer) => {
137
+ const key = signer.publicKey.toBase58();
138
+ if (seen.has(key)) {
139
+ return false;
140
+ }
141
+ seen.add(key);
142
+ return true;
143
+ });
144
+ }
145
+ async function resolveLookupTableAccounts(connection, addresses) {
146
+ const results = await Promise.all(addresses.map((address) => connection.getAddressLookupTable(address)));
147
+ return dedupeLookupTableAccounts(results
148
+ .map((result) => result.value)
149
+ .filter((value) => value !== null));
150
+ }
151
+ async function buildSignedTransaction(connection, signer, instructions, lookupTableAddresses, signers) {
152
+ const addressLookupTableAccounts = await resolveLookupTableAccounts(connection, lookupTableAddresses);
153
+ const { blockhash } = await connection.getLatestBlockhash("confirmed");
154
+ const message = new web3_js_1.TransactionMessage({
155
+ payerKey: signer,
156
+ recentBlockhash: blockhash,
157
+ instructions: [...instructions],
158
+ }).compileToV0Message(addressLookupTableAccounts);
159
+ const transaction = new web3_js_1.VersionedTransaction(message);
160
+ transaction.sign(dedupeSigners(signers));
161
+ return transaction;
162
+ }
163
+ /**
164
+ * Thin docs-aligned Loopscale client for strategies, loans, and related query endpoints.
165
+ *
166
+ * Transaction methods intentionally return the raw Loopscale response shapes
167
+ * instead of derived sync-action bundles. Use
168
+ * {@link LoopscaleClient.prepareVaultTransactions} when you need appendable
169
+ * transaction pieces, or {@link LoopscaleClient.buildVaultTransactions} when
170
+ * you want locally signed transactions that are ready for optional
171
+ * `client.coSign(...)` and `connection.sendTransaction(...)`.
172
+ *
173
+ * Refinancing and other lock/unlock maintenance flows remain intentionally
174
+ * excluded. The client only covers strategies, loans, and cleanup endpoints
175
+ * that can be represented as raw transaction responses.
176
+ *
177
+ * Typical usage:
178
+ *
179
+ * - Query Loopscale data through the read methods on this client.
180
+ * - Build raw Loopscale transactions through the strategy and loan methods.
181
+ * - Turn raw responses into appendable instruction pieces with
182
+ * {@link LoopscaleClient.prepareVaultTransactions}.
183
+ * - Or compile ready-to-send transactions with
184
+ * {@link LoopscaleClient.buildVaultTransactions}.
185
+ * - Call {@link LoopscaleClient.coSign} only for transactions flagged with
186
+ * `requiresLoopscaleCoSign`.
187
+ */
188
+ class LoopscaleClient {
189
+ connection;
190
+ baseUrl;
191
+ userWallet;
192
+ payer;
193
+ debug;
194
+ constructor(config) {
195
+ this.connection = config.connection;
196
+ this.baseUrl = config.baseUrl ?? LOOPSCALE_API_BASE_URL;
197
+ this.userWallet = toBase58(config.userWallet);
198
+ this.payer = toBase58(config.payer ?? config.userWallet);
199
+ this.debug = config.debug ?? false;
200
+ }
201
+ /**
202
+ * Load Loopscale quotes for a principal/collateral pair.
203
+ */
204
+ async getQuotes(params) {
205
+ const body = {
206
+ durationType: params.durationType,
207
+ duration: params.duration,
208
+ principal: toBase58(params.principal),
209
+ collateral: params.collateral.map(toBase58),
210
+ limit: params.limit ?? 10,
211
+ offset: params.offset ?? 0,
212
+ };
213
+ if (params.minPrincipalAmount !== undefined) {
214
+ body.minPrincipalAmount = toSafeNumber(params.minPrincipalAmount, "minPrincipalAmount");
215
+ }
216
+ return this.post("/markets/quote", body, {
217
+ "user-wallet": this.userWallet,
218
+ });
219
+ }
220
+ /**
221
+ * Load the best quote for one or more specific collateral assets.
222
+ */
223
+ async getMaxQuote(params) {
224
+ return this.post("/markets/quote/max", {
225
+ durationType: params.durationType,
226
+ duration: params.duration,
227
+ principalMint: toBase58(params.principalMint),
228
+ collateralFilter: params.collateralFilter.map((item) => ({
229
+ amount: toSafeNumber(item.amount, "amount"),
230
+ assetData: item.assetData,
231
+ })),
232
+ }, {
233
+ "user-wallet": this.userWallet,
234
+ });
235
+ }
236
+ /**
237
+ * Load Loopscale loan positions.
238
+ */
239
+ async getLoanInfo(params) {
240
+ return this.post("/markets/loans/info", params);
241
+ }
242
+ /**
243
+ * Load Loopscale lending strategies.
244
+ */
245
+ async getStrategies(params) {
246
+ return this.post("/markets/strategy/infos", params);
247
+ }
248
+ /**
249
+ * Build a raw Loopscale `createStrategy` transaction batch.
250
+ */
251
+ async createStrategy(params) {
252
+ const body = {
253
+ principalMint: toBase58(params.principalMint),
254
+ lender: toBase58(params.lender),
255
+ amount: toSafeNumber(params.amount, "amount"),
256
+ };
257
+ if (params.originationsEnabled !== undefined)
258
+ body.originationsEnabled = params.originationsEnabled;
259
+ if (params.liquidityBuffer !== undefined)
260
+ body.liquidityBuffer = params.liquidityBuffer;
261
+ if (params.interestFee !== undefined)
262
+ body.interestFee = params.interestFee;
263
+ if (params.originationFee !== undefined)
264
+ body.originationFee = params.originationFee;
265
+ if (params.originationCap !== undefined)
266
+ body.originationCap = params.originationCap;
267
+ if (params.collateralTerms)
268
+ body.collateralTerms = params.collateralTerms;
269
+ if (params.marketInformation)
270
+ body.marketInformation = toBase58(params.marketInformation);
271
+ if (params.externalYieldSourceArgs)
272
+ body.externalYieldSourceArgs = params.externalYieldSourceArgs;
273
+ return this.post("/markets/strategy/create", body, { payer: this.payer });
274
+ }
275
+ /**
276
+ * Build a raw Loopscale `depositStrategy` transaction.
277
+ */
278
+ async depositStrategy(params) {
279
+ return this.post("/markets/strategy/deposit", {
280
+ strategy: toBase58(params.strategy),
281
+ amount: toSafeNumber(params.amount, "amount"),
282
+ }, withPayerHeader({
283
+ "User-Wallet": this.userWallet,
284
+ }, this.payer));
285
+ }
286
+ /**
287
+ * Build a raw Loopscale `withdrawStrategy` transaction.
288
+ */
289
+ async withdrawStrategy(params) {
290
+ return this.post("/markets/strategy/withdraw", {
291
+ strategy: toBase58(params.strategy),
292
+ amount: toSafeNumber(params.amount, "amount"),
293
+ withdrawAll: params.withdrawAll,
294
+ }, withPayerHeader({
295
+ "User-Wallet": this.userWallet,
296
+ }, this.payer));
297
+ }
298
+ /**
299
+ * Build a raw Loopscale `closeStrategy` transaction.
300
+ */
301
+ async closeStrategy(params) {
302
+ return this.post(`/markets/strategy/close/${toBase58(params.strategy)}`, undefined, { payer: this.payer });
303
+ }
304
+ /**
305
+ * Build raw Loopscale `updateStrategy` transactions.
306
+ */
307
+ async updateStrategy(params) {
308
+ const body = {
309
+ strategy: toBase58(params.strategy),
310
+ };
311
+ if (params.collateralTerms)
312
+ body.collateralTerms = params.collateralTerms;
313
+ if (params.updateParams)
314
+ body.updateParams = params.updateParams;
315
+ return this.post("/markets/strategy/update", body, withPayerHeader({
316
+ "User-Wallet": this.userWallet,
317
+ }, this.payer));
318
+ }
319
+ /**
320
+ * Build a raw Loopscale `createLoan` transaction.
321
+ */
322
+ async createLoan(params) {
323
+ const body = {
324
+ borrower: toBase58(params.borrower),
325
+ depositCollateral: params.depositCollateral.map((item) => ({
326
+ collateralAmount: toSafeNumber(item.collateralAmount, "collateralAmount"),
327
+ collateralAssetData: item.collateralAssetData,
328
+ })),
329
+ principalRequested: params.principalRequested.map((item) => ({
330
+ ledgerIndex: item.ledgerIndex,
331
+ principalAmount: toSafeNumber(item.principalAmount, "principalAmount"),
332
+ principalMint: toBase58(item.principalMint),
333
+ strategy: toBase58(item.strategy),
334
+ durationIndex: item.durationIndex,
335
+ expectedLoanValues: item.expectedLoanValues ?? { expectedApy: 0, expectedLqt: [0, 0, 0, 0, 0] },
336
+ })),
337
+ };
338
+ if (params.assetIndexGuidance)
339
+ body.assetIndexGuidance = params.assetIndexGuidance;
340
+ if (params.loanNonce)
341
+ body.loanNonce = params.loanNonce;
342
+ if (params.isLoop !== undefined)
343
+ body.isLoop = params.isLoop;
344
+ return this.post("/markets/creditbook/create", body, { payer: this.payer });
345
+ }
346
+ /**
347
+ * Build a raw Loopscale `borrowPrincipal` transaction.
348
+ *
349
+ * The published OpenAPI schema currently documents a single serialized
350
+ * transaction response, but live responses can also return a wrapped
351
+ * `transactions` array with `expectedLoanInfo` when Loopscale inserts
352
+ * additional internal maintenance steps.
353
+ */
354
+ async borrowPrincipal(params) {
355
+ const body = {
356
+ loan: toBase58(params.loan),
357
+ borrowParams: {
358
+ amount: toSafeNumber(params.borrowParams.amount, "amount"),
359
+ duration: params.borrowParams.durationIndex,
360
+ },
361
+ strategy: toBase58(params.strategy),
362
+ };
363
+ if (params.borrowParams.expectedLoanValues) {
364
+ body.borrowParams = {
365
+ ...body.borrowParams,
366
+ expectedLoanValues: params.borrowParams.expectedLoanValues,
367
+ };
368
+ }
369
+ if (params.refinanceParams)
370
+ body.refinanceParams = params.refinanceParams;
371
+ if (params.isLoop !== undefined)
372
+ body.isLoop = params.isLoop;
373
+ return this.post("/markets/creditbook/borrow", body, { payer: this.payer });
374
+ }
375
+ /**
376
+ * Build a raw Loopscale `depositCollateral` transaction.
377
+ */
378
+ async depositCollateral(params) {
379
+ const body = {
380
+ loan: toBase58(params.loan),
381
+ depositMint: toBase58(params.depositMint),
382
+ amount: toSafeNumber(params.amount, "amount"),
383
+ assetType: params.assetType,
384
+ assetIdentifier: toBase58(params.assetIdentifier),
385
+ };
386
+ if (params.assetIndexGuidance)
387
+ body.assetIndexGuidance = params.assetIndexGuidance;
388
+ if (params.expectedLoanValues)
389
+ body.expectedLoanValues = params.expectedLoanValues;
390
+ return this.post("/markets/creditbook/collateral/deposit", body, withPayerHeader({
391
+ "user-wallet": this.userWallet,
392
+ }, this.payer));
393
+ }
394
+ /**
395
+ * Build a raw Loopscale `withdrawCollateral` transaction.
396
+ *
397
+ * Full collateral removal can trigger internal loan-maintenance instructions,
398
+ * so callers should accept either a single serialized transaction or a wrapped
399
+ * `transactions` array.
400
+ */
401
+ async withdrawCollateral(params) {
402
+ const body = {
403
+ loan: toBase58(params.loan),
404
+ collateralMint: toBase58(params.collateralMint),
405
+ amount: toSafeNumber(params.amount, "amount"),
406
+ collateralIndex: params.collateralIndex,
407
+ expectedLoanValues: params.expectedLoanValues,
408
+ };
409
+ if (params.assetIndexGuidance)
410
+ body.assetIndexGuidance = params.assetIndexGuidance;
411
+ return this.post("/markets/creditbook/collateral/withdraw", body, withPayerHeader({
412
+ "user-wallet": this.userWallet,
413
+ }, this.payer));
414
+ }
415
+ /**
416
+ * Build a raw Loopscale `repay_simple` transaction response.
417
+ */
418
+ async repayLoanSimple(params) {
419
+ return this.post("/markets/creditbook/repay_simple", {
420
+ loan: toBase58(params.loan),
421
+ repayParams: {
422
+ amount: toSafeNumber(params.repayParams.amount, "amount"),
423
+ ledgerIndex: params.repayParams.ledgerIndex,
424
+ repayAll: params.repayParams.repayAll,
425
+ },
426
+ strategy: toBase58(params.strategy),
427
+ }, { payer: this.payer });
428
+ }
429
+ /**
430
+ * Build a raw Loopscale `close_loan` transaction response.
431
+ */
432
+ async closeLoan(params) {
433
+ return this.post("/markets/creditbook/close_loan", { loan: toBase58(params.loan) }, { "user-wallet": this.userWallet });
434
+ }
435
+ /**
436
+ * Convert a raw Loopscale response into manager-ready vault transaction pieces.
437
+ *
438
+ * This is the lower-level, appendable "lego" API.
439
+ *
440
+ * Each returned entry represents one manager-facing transaction:
441
+ * send `setupInstructions` first when present, then send the main
442
+ * `instructions`. Wrapped sync transactions are already flattened into one
443
+ * instruction list, so callers do not need to manually inspect the raw
444
+ * Loopscale response to figure out which instructions should be wrapped.
445
+ *
446
+ * Use this when you want to compose Loopscale output with your own custom
447
+ * transaction building logic.
448
+ */
449
+ async prepareVaultTransactions({ response, context, }) {
450
+ return (0, prepared_transactions_1.prepareLoopscaleVaultTransactions)({ response, context });
451
+ }
452
+ /**
453
+ * Build locally signed transactions from a raw Loopscale response.
454
+ *
455
+ * This is the simplest manager-facing API.
456
+ *
457
+ * The returned transactions are ready for:
458
+ * 1. `await client.coSign(tx)` when `requiresLoopscaleCoSign === true`
459
+ * 2. `connection.sendTransaction(tx)`
460
+ *
461
+ * The co-signing flag is deliberately per-transaction, not global. A single
462
+ * Loopscale response can produce:
463
+ *
464
+ * - local setup transactions that must be sent as-is,
465
+ * - local top-level transactions that do not belong to Loopscale's signing
466
+ * domain,
467
+ * - one wrapped Loopscale sync transaction that does require Loopscale MPC.
468
+ *
469
+ * The client returns all of them in send order and marks only the wrapped
470
+ * Loopscale transaction for MPC co-signing. This is the correct boundary:
471
+ * callers should not guess which transactions need Loopscale's signature.
472
+ *
473
+ * The first signer in `context.signers` must match `context.signer`, since
474
+ * that signer is used as the fee payer for the compiled transactions.
475
+ */
476
+ async buildVaultTransactions({ response, context, }) {
477
+ const feePayer = context.signers[0];
478
+ if (!feePayer) {
479
+ throw new Error("buildVaultTransactions requires at least one signer");
480
+ }
481
+ if (!feePayer.publicKey.equals(context.signer)) {
482
+ throw new Error("buildVaultTransactions requires signers[0] to match context.signer");
483
+ }
484
+ const preparedTransactions = await this.prepareVaultTransactions({ response, context });
485
+ const builtTransactions = [];
486
+ for (const preparedTransaction of preparedTransactions) {
487
+ if (preparedTransaction.setupInstructions.length > 0) {
488
+ const setupTransaction = await buildSignedTransaction(context.connection, context.signer, preparedTransaction.setupInstructions, [], context.signers);
489
+ builtTransactions.push({
490
+ transaction: setupTransaction,
491
+ requiresLoopscaleCoSign: false,
492
+ });
493
+ }
494
+ const mainTransaction = await buildSignedTransaction(context.connection, context.signer, preparedTransaction.instructions, preparedTransaction.addressLookupTableAddresses, [...context.signers, ...preparedTransaction.signers]);
495
+ builtTransactions.push({
496
+ transaction: mainTransaction,
497
+ requiresLoopscaleCoSign: preparedTransaction.requiresLoopscaleCoSign,
498
+ });
499
+ }
500
+ return builtTransactions;
501
+ }
502
+ /**
503
+ * Co-sign a prepared transaction with Loopscale's back-end signer.
504
+ *
505
+ * This uses Loopscale's public MPC co-signing endpoint. The returned
506
+ * transaction is required to keep the exact same message as the locally
507
+ * signed input, and any local signatures that are missing from the response
508
+ * are copied back onto the returned transaction before it is handed to the
509
+ * caller.
510
+ *
511
+ * Only call this for transactions flagged with
512
+ * `requiresLoopscaleCoSign === true`. Transactions not flagged that way do
513
+ * not belong to Loopscale's signing domain and should be sent directly.
514
+ */
515
+ async coSign(transaction) {
516
+ const serializedTransaction = Buffer.from(transaction.serialize()).toString("base64");
517
+ const data = await this.post("/mpc/txns/gen", {
518
+ batches: [{
519
+ transactions: [{
520
+ identifier: "loopscale-cosign",
521
+ transaction: serializedTransaction,
522
+ transactionType: 1,
523
+ }],
524
+ }],
525
+ });
526
+ const transactionEntry = data.batches?.[0]?.transactions?.[0];
527
+ if (!transactionEntry) {
528
+ throw new Error("Loopscale MPC co-signing returned no transaction");
529
+ }
530
+ const coSignedTransaction = web3_js_1.VersionedTransaction.deserialize(Buffer.from(transactionEntry.transaction, "base64"));
531
+ return mergeCoSignedTransaction(transaction, coSignedTransaction);
532
+ }
533
+ /**
534
+ * Extract the strategy PDA from a `createStrategy` response using the client's connection.
535
+ */
536
+ async extractCreatedStrategyAddress(response) {
537
+ return (0, helpers_1.extractCreatedStrategyAddress)(this.connection, response);
538
+ }
539
+ /**
540
+ * Extract the strategy nonce from a `createStrategy` response using the client's connection.
541
+ */
542
+ async extractCreatedStrategyNonce(response) {
543
+ return (0, helpers_1.extractCreatedStrategyNonce)(this.connection, response);
544
+ }
545
+ async post(path, body, extraHeaders) {
546
+ const url = `${this.baseUrl}${path}`;
547
+ const headers = {
548
+ "Content-Type": "application/json",
549
+ ...extraHeaders,
550
+ };
551
+ if (this.debug) {
552
+ console.log(`\n[LoopscaleClient] POST ${url}`);
553
+ if (body !== undefined) {
554
+ console.log(` body: ${JSON.stringify(body, null, 2).split("\n").slice(0, 10).join("\n")}...`);
555
+ }
556
+ }
557
+ let response;
558
+ const maxRetries = 3;
559
+ for (let attempt = 0; attempt <= maxRetries; attempt += 1) {
560
+ response = await fetch(url, {
561
+ method: "POST",
562
+ headers,
563
+ body: body !== undefined ? JSON.stringify(body) : undefined,
564
+ });
565
+ if (response.status === 429 && attempt < maxRetries) {
566
+ const delayMs = 2_000 * (attempt + 1);
567
+ if (this.debug) {
568
+ console.log(` RATE LIMITED (429), retrying in ${delayMs}ms (attempt ${attempt + 1}/${maxRetries})...`);
569
+ }
570
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
571
+ continue;
572
+ }
573
+ break;
574
+ }
575
+ if (!response?.ok) {
576
+ const text = await response?.text();
577
+ if (this.debug) {
578
+ console.log(` ERROR ${response?.status}: ${text}`);
579
+ }
580
+ throw new Error(`Loopscale API ${path} failed (${response?.status}): ${text}`);
581
+ }
582
+ const data = await response.json();
583
+ if (this.debug) {
584
+ console.log(` OK ${response.status}`);
585
+ }
586
+ return data;
587
+ }
588
+ }
589
+ exports.LoopscaleClient = LoopscaleClient;
590
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/exponentVaults/loopscale/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};