@exponent-labs/exponent-sdk 0.9.0 → 0.9.2

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 (155) 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 +21 -4
  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/positionUpdate.d.ts +9 -0
  14. package/build/client/vaults/types/positionUpdate.js +23 -0
  15. package/build/client/vaults/types/positionUpdate.js.map +1 -1
  16. package/build/client/vaults/types/proposalAction.js +0 -3
  17. package/build/client/vaults/types/proposalAction.js.map +1 -1
  18. package/build/client/vaults/types/reserveFarmMapping.d.ts +19 -0
  19. package/build/client/vaults/types/reserveFarmMapping.js +18 -0
  20. package/build/client/vaults/types/reserveFarmMapping.js.map +1 -0
  21. package/build/client/vaults/types/strategyPosition.d.ts +5 -0
  22. package/build/client/vaults/types/strategyPosition.js +5 -0
  23. package/build/client/vaults/types/strategyPosition.js.map +1 -1
  24. package/build/exponentVaults/aumCalculator.d.ts +25 -4
  25. package/build/exponentVaults/aumCalculator.js +236 -15
  26. package/build/exponentVaults/aumCalculator.js.map +1 -1
  27. package/build/exponentVaults/fetcher.d.ts +52 -0
  28. package/build/exponentVaults/fetcher.js +199 -0
  29. package/build/exponentVaults/fetcher.js.map +1 -0
  30. package/build/exponentVaults/index.d.ts +10 -9
  31. package/build/exponentVaults/index.js +26 -8
  32. package/build/exponentVaults/index.js.map +1 -1
  33. package/build/exponentVaults/kamino-farms.d.ts +144 -0
  34. package/build/exponentVaults/kamino-farms.js +396 -0
  35. package/build/exponentVaults/kamino-farms.js.map +1 -0
  36. package/build/exponentVaults/loopscale/client.d.ts +240 -0
  37. package/build/exponentVaults/loopscale/client.js +590 -0
  38. package/build/exponentVaults/loopscale/client.js.map +1 -0
  39. package/build/exponentVaults/loopscale/client.test.d.ts +1 -0
  40. package/build/exponentVaults/loopscale/client.test.js +183 -0
  41. package/build/exponentVaults/loopscale/client.test.js.map +1 -0
  42. package/build/exponentVaults/loopscale/helpers.d.ts +29 -0
  43. package/build/exponentVaults/loopscale/helpers.js +119 -0
  44. package/build/exponentVaults/loopscale/helpers.js.map +1 -0
  45. package/build/exponentVaults/loopscale/index.d.ts +3 -0
  46. package/build/exponentVaults/loopscale/index.js +12 -0
  47. package/build/exponentVaults/loopscale/index.js.map +1 -0
  48. package/build/exponentVaults/loopscale/prepared-transactions.d.ts +13 -0
  49. package/build/exponentVaults/loopscale/prepared-transactions.js +271 -0
  50. package/build/exponentVaults/loopscale/prepared-transactions.js.map +1 -0
  51. package/build/exponentVaults/loopscale/prepared-transactions.test.d.ts +1 -0
  52. package/build/exponentVaults/loopscale/prepared-transactions.test.js +400 -0
  53. package/build/exponentVaults/loopscale/prepared-transactions.test.js.map +1 -0
  54. package/build/exponentVaults/loopscale/prepared-types.d.ts +62 -0
  55. package/build/exponentVaults/loopscale/prepared-types.js +3 -0
  56. package/build/exponentVaults/loopscale/prepared-types.js.map +1 -0
  57. package/build/exponentVaults/loopscale/response-plan.d.ts +69 -0
  58. package/build/exponentVaults/loopscale/response-plan.js +141 -0
  59. package/build/exponentVaults/loopscale/response-plan.js.map +1 -0
  60. package/build/exponentVaults/loopscale/response-plan.test.d.ts +1 -0
  61. package/build/exponentVaults/loopscale/response-plan.test.js +139 -0
  62. package/build/exponentVaults/loopscale/response-plan.test.js.map +1 -0
  63. package/build/exponentVaults/loopscale/send-plan.d.ts +75 -0
  64. package/build/exponentVaults/loopscale/send-plan.js +235 -0
  65. package/build/exponentVaults/loopscale/send-plan.js.map +1 -0
  66. package/build/exponentVaults/loopscale/types.d.ts +443 -0
  67. package/build/exponentVaults/loopscale/types.js +3 -0
  68. package/build/exponentVaults/loopscale/types.js.map +1 -0
  69. package/build/exponentVaults/loopscale-client.d.ts +113 -524
  70. package/build/exponentVaults/loopscale-client.js +296 -539
  71. package/build/exponentVaults/loopscale-client.js.map +1 -1
  72. package/build/exponentVaults/loopscale-client.test.d.ts +1 -0
  73. package/build/exponentVaults/loopscale-client.test.js +162 -0
  74. package/build/exponentVaults/loopscale-client.test.js.map +1 -0
  75. package/build/exponentVaults/loopscale-client.types.d.ts +425 -0
  76. package/build/exponentVaults/loopscale-client.types.js +3 -0
  77. package/build/exponentVaults/loopscale-client.types.js.map +1 -0
  78. package/build/exponentVaults/loopscale-execution.d.ts +125 -0
  79. package/build/exponentVaults/loopscale-execution.js +341 -0
  80. package/build/exponentVaults/loopscale-execution.js.map +1 -0
  81. package/build/exponentVaults/loopscale-execution.test.d.ts +1 -0
  82. package/build/exponentVaults/loopscale-execution.test.js +139 -0
  83. package/build/exponentVaults/loopscale-execution.test.js.map +1 -0
  84. package/build/exponentVaults/loopscale-vault.d.ts +115 -0
  85. package/build/exponentVaults/loopscale-vault.js +275 -0
  86. package/build/exponentVaults/loopscale-vault.js.map +1 -0
  87. package/build/exponentVaults/loopscale-vault.test.d.ts +1 -0
  88. package/build/exponentVaults/loopscale-vault.test.js +102 -0
  89. package/build/exponentVaults/loopscale-vault.test.js.map +1 -0
  90. package/build/exponentVaults/policyBuilders.d.ts +62 -0
  91. package/build/exponentVaults/policyBuilders.js +119 -2
  92. package/build/exponentVaults/policyBuilders.js.map +1 -1
  93. package/build/exponentVaults/pricePathResolver.d.ts +45 -0
  94. package/build/exponentVaults/pricePathResolver.js +198 -0
  95. package/build/exponentVaults/pricePathResolver.js.map +1 -0
  96. package/build/exponentVaults/pricePathResolver.test.d.ts +1 -0
  97. package/build/exponentVaults/pricePathResolver.test.js +369 -0
  98. package/build/exponentVaults/pricePathResolver.test.js.map +1 -0
  99. package/build/exponentVaults/syncTransaction.js +4 -1
  100. package/build/exponentVaults/syncTransaction.js.map +1 -1
  101. package/build/exponentVaults/titan-quote.js +170 -36
  102. package/build/exponentVaults/titan-quote.js.map +1 -1
  103. package/build/exponentVaults/vault-instruction-types.d.ts +363 -0
  104. package/build/exponentVaults/vault-instruction-types.js +128 -0
  105. package/build/exponentVaults/vault-instruction-types.js.map +1 -0
  106. package/build/exponentVaults/vault-interaction.d.ts +203 -343
  107. package/build/exponentVaults/vault-interaction.js +1894 -426
  108. package/build/exponentVaults/vault-interaction.js.map +1 -1
  109. package/build/exponentVaults/vault-interaction.kamino-vault.test.d.ts +1 -0
  110. package/build/exponentVaults/vault-interaction.kamino-vault.test.js +143 -0
  111. package/build/exponentVaults/vault-interaction.kamino-vault.test.js.map +1 -0
  112. package/build/exponentVaults/vault.d.ts +51 -2
  113. package/build/exponentVaults/vault.js +324 -48
  114. package/build/exponentVaults/vault.js.map +1 -1
  115. package/build/exponentVaults/vaultTransactionBuilder.d.ts +100 -134
  116. package/build/exponentVaults/vaultTransactionBuilder.js +383 -285
  117. package/build/exponentVaults/vaultTransactionBuilder.js.map +1 -1
  118. package/build/exponentVaults/vaultTransactionBuilder.test.d.ts +1 -0
  119. package/build/exponentVaults/vaultTransactionBuilder.test.js +297 -0
  120. package/build/exponentVaults/vaultTransactionBuilder.test.js.map +1 -0
  121. package/build/marketThree.d.ts +6 -2
  122. package/build/marketThree.js +10 -8
  123. package/build/marketThree.js.map +1 -1
  124. package/package.json +34 -32
  125. package/src/client/vaults/index.ts +2 -0
  126. package/src/client/vaults/types/index.ts +2 -0
  127. package/src/client/vaults/types/kaminoFarmEntry.ts +32 -0
  128. package/src/client/vaults/types/kaminoObligationEntry.ts +6 -3
  129. package/src/client/vaults/types/positionUpdate.ts +62 -0
  130. package/src/client/vaults/types/proposalAction.ts +0 -3
  131. package/src/client/vaults/types/reserveFarmMapping.ts +35 -0
  132. package/src/client/vaults/types/strategyPosition.ts +18 -1
  133. package/src/exponentVaults/aumCalculator.ts +353 -16
  134. package/src/exponentVaults/fetcher.ts +257 -0
  135. package/src/exponentVaults/index.ts +65 -40
  136. package/src/exponentVaults/kamino-farms.ts +538 -0
  137. package/src/exponentVaults/loopscale/client.ts +808 -0
  138. package/src/exponentVaults/loopscale/helpers.ts +172 -0
  139. package/src/exponentVaults/loopscale/index.ts +57 -0
  140. package/src/exponentVaults/loopscale/prepared-transactions.ts +435 -0
  141. package/src/exponentVaults/loopscale/prepared-types.ts +73 -0
  142. package/src/exponentVaults/loopscale/types.ts +466 -0
  143. package/src/exponentVaults/policyBuilders.ts +170 -0
  144. package/src/exponentVaults/pricePathResolver.test.ts +466 -0
  145. package/src/exponentVaults/pricePathResolver.ts +273 -0
  146. package/src/exponentVaults/syncTransaction.ts +6 -1
  147. package/src/exponentVaults/titan-quote.ts +231 -45
  148. package/src/exponentVaults/vault-instruction-types.ts +493 -0
  149. package/src/exponentVaults/vault-interaction.kamino-vault.test.ts +149 -0
  150. package/src/exponentVaults/vault-interaction.ts +2818 -799
  151. package/src/exponentVaults/vault.ts +474 -63
  152. package/src/exponentVaults/vaultTransactionBuilder.test.ts +349 -0
  153. package/src/exponentVaults/vaultTransactionBuilder.ts +581 -433
  154. package/src/marketThree.ts +14 -6
  155. package/src/exponentVaults/loopscale-client.ts +0 -1373
@@ -5,62 +5,116 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getTitanQuote = void 0;
7
7
  const web3_js_1 = require("@solana/web3.js");
8
+ const spl_token_1 = require("@solana/spl-token");
8
9
  const msgpack_1 = require("@msgpack/msgpack");
9
10
  const ws_1 = __importDefault(require("ws"));
10
11
  const TITAN_WS_SUBPROTOCOL = "v1.api.titan.ag";
11
12
  const SWAP_ROUTE_V2_DISCRIMINATOR = Buffer.from([249, 91, 84, 33, 69, 22, 0, 135]);
12
13
  const QUOTE_TIMEOUT_MS = 45_000;
14
+ const INCOMPATIBLE_ROUTE_RETRY_ATTEMPTS = 3;
15
+ const INCOMPATIBLE_ROUTE_RETRY_DELAY_MS = 750;
16
+ const TITAN_QUOTE_STREAM_ROUTE_COUNT = 6;
17
+ const TITAN_INPUT_MINT_ACCOUNT_INDEX = 2;
18
+ const TITAN_INPUT_TOKEN_ACCOUNT_INDEX = 3;
19
+ const TITAN_OUTPUT_MINT_ACCOUNT_INDEX = 4;
20
+ const TITAN_OUTPUT_TOKEN_ACCOUNT_INDEX = 5;
21
+ const TITAN_INPUT_TOKEN_PROGRAM_ACCOUNT_INDEX = 6;
22
+ const TITAN_OUTPUT_TOKEN_PROGRAM_ACCOUNT_INDEX = 7;
23
+ const TITAN_VAULT_INCOMPATIBLE_PROGRAM_IDS = new Set([
24
+ "ALPHAQmeA7bjrVuccPsYPiCvsi428SNwte66Srvs4pHA",
25
+ ]);
13
26
  const JITO_BUNDLE_BLOCKED_ACCOUNT_PREFIXES = ["jitodontfront", "jitonobundle"];
14
27
  /**
15
28
  * Fetch a single Titan swap quote and return the SwapRouteV2 instruction
16
29
  * along with any Address Lookup Table addresses needed for transaction compression.
17
30
  */
18
31
  async function getTitanQuote(connection, auth, params) {
19
- const route = await fetchBestRoute(auth, params);
20
- const addressLookupTableAddresses = (route.addressLookupTables ?? []).map((bytes) => new web3_js_1.PublicKey(bytes));
21
- // Path 1: Full transaction bytes — deserialize and extract the swap ix
22
- if (route.transaction) {
23
- const vTx = web3_js_1.VersionedTransaction.deserialize(new Uint8Array(route.transaction));
24
- const instruction = await extractSwapInstruction(connection, vTx);
25
- return { instruction, addressLookupTableAddresses };
26
- }
27
- // Path 2: Reconstruct from the route's instructions array
28
- if (route.instructions && route.instructions.length > 0) {
29
- const swapIx = route.instructions.find((ix) => {
30
- return ix.d.length >= 8 && Buffer.from(ix.d.subarray(0, 8)).equals(SWAP_ROUTE_V2_DISCRIMINATOR);
31
- });
32
- if (swapIx) {
33
- const instruction = new web3_js_1.TransactionInstruction({
34
- programId: new web3_js_1.PublicKey(swapIx.p),
35
- keys: swapIx.a.map((acc) => ({
36
- pubkey: new web3_js_1.PublicKey(acc.p),
37
- isSigner: acc.s,
38
- isWritable: acc.w,
39
- })),
40
- data: Buffer.from(swapIx.d),
41
- });
42
- return { instruction: sanitizeTitanInstructionForBundles(instruction), addressLookupTableAddresses };
32
+ const candidates = buildQuoteCandidates(params.userPublicKey);
33
+ let lastBlockedRoute = null;
34
+ let lastError = null;
35
+ for (let attempt = 1; attempt <= INCOMPATIBLE_ROUTE_RETRY_ATTEMPTS; attempt++) {
36
+ for (const candidate of candidates) {
37
+ try {
38
+ const routes = await fetchUsableRoutes(auth, {
39
+ ...params,
40
+ userPublicKey: candidate.quoteUserPublicKey,
41
+ });
42
+ for (const route of routes) {
43
+ const quote = await buildQuoteResult(connection, route);
44
+ const normalizedQuote = candidate.rewriteToUserPublicKey
45
+ ? rewriteTitanQuoteForOwner({
46
+ quote,
47
+ quotedUserPublicKey: candidate.quoteUserPublicKey,
48
+ actualUserPublicKey: candidate.rewriteToUserPublicKey,
49
+ })
50
+ : quote;
51
+ if (isVaultCompatibleQuote(normalizedQuote.instruction, params.userPublicKey)) {
52
+ return normalizedQuote;
53
+ }
54
+ lastBlockedRoute = normalizedQuote;
55
+ }
56
+ }
57
+ catch (error) {
58
+ lastError = asError(error);
59
+ }
60
+ }
61
+ if (attempt < INCOMPATIBLE_ROUTE_RETRY_ATTEMPTS && (lastBlockedRoute || lastError)) {
62
+ await sleep(INCOMPATIBLE_ROUTE_RETRY_DELAY_MS);
43
63
  }
44
64
  }
65
+ if (lastBlockedRoute) {
66
+ throw new Error(`Titan returned only routes incompatible with vault-owned execution after ${INCOMPATIBLE_ROUTE_RETRY_ATTEMPTS} attempts`);
67
+ }
68
+ if (lastError) {
69
+ throw lastError;
70
+ }
45
71
  throw new Error("Titan route has neither transaction bytes nor a SwapRouteV2 instruction");
46
72
  }
47
73
  exports.getTitanQuote = getTitanQuote;
48
- // --- Internals ---
49
- function fetchBestRoute(auth, params) {
74
+ function buildQuoteCandidates(userPublicKey) {
75
+ if (!web3_js_1.PublicKey.isOnCurve(userPublicKey.toBytes())) {
76
+ return [
77
+ { quoteUserPublicKey: userPublicKey },
78
+ {
79
+ quoteUserPublicKey: deriveTitanQuoteSurrogateUser(userPublicKey),
80
+ rewriteToUserPublicKey: userPublicKey,
81
+ },
82
+ ];
83
+ }
84
+ return [{ quoteUserPublicKey: userPublicKey }];
85
+ }
86
+ function deriveTitanQuoteSurrogateUser(userPublicKey) {
87
+ return web3_js_1.Keypair.fromSeed(userPublicKey.toBytes()).publicKey;
88
+ }
89
+ function fetchUsableRoutes(auth, params) {
50
90
  return new Promise((resolve, reject) => {
51
91
  const url = `${auth.wsUrl}?auth=${auth.authToken}`;
52
92
  const ws = new ws_1.default(url, [TITAN_WS_SUBPROTOCOL]);
53
93
  ws.binaryType = "arraybuffer";
94
+ const collectedRoutes = [];
95
+ let settled = false;
54
96
  const timeout = setTimeout(() => {
55
- ws.close();
97
+ cleanup();
98
+ if (collectedRoutes.length > 0) {
99
+ resolve(selectUsableRoutes(collectedRoutes));
100
+ return;
101
+ }
56
102
  reject(new Error("Titan quote timed out after " + QUOTE_TIMEOUT_MS + "ms"));
57
103
  }, QUOTE_TIMEOUT_MS);
58
104
  const cleanup = () => {
105
+ settled = true;
59
106
  clearTimeout(timeout);
60
107
  ws.close();
61
108
  };
62
109
  ws.on("error", (err) => {
110
+ if (settled) {
111
+ return;
112
+ }
63
113
  cleanup();
114
+ if (collectedRoutes.length > 0) {
115
+ resolve(selectUsableRoutes(collectedRoutes));
116
+ return;
117
+ }
64
118
  reject(new Error("Titan WebSocket error: " + err.message));
65
119
  });
66
120
  ws.on("open", () => {
@@ -78,7 +132,7 @@ function fetchBestRoute(auth, params) {
78
132
  userPublicKey: params.userPublicKey.toBytes(),
79
133
  },
80
134
  update: {
81
- num_quotes: 3,
135
+ num_quotes: TITAN_QUOTE_STREAM_ROUTE_COUNT,
82
136
  },
83
137
  },
84
138
  },
@@ -86,9 +140,16 @@ function fetchBestRoute(auth, params) {
86
140
  ws.send((0, msgpack_1.encode)(request, { useBigInt64: true }));
87
141
  });
88
142
  ws.on("message", (data) => {
143
+ if (settled) {
144
+ return;
145
+ }
89
146
  const msg = (0, msgpack_1.decode)(new Uint8Array(data), { useBigInt64: true });
90
147
  if (msg.Error) {
91
148
  cleanup();
149
+ if (collectedRoutes.length > 0) {
150
+ resolve(selectUsableRoutes(collectedRoutes));
151
+ return;
152
+ }
92
153
  reject(new Error(`Titan API error [${msg.Error.code}]: ${msg.Error.message}`));
93
154
  return;
94
155
  }
@@ -96,15 +157,14 @@ function fetchBestRoute(auth, params) {
96
157
  const quotes = msg.StreamData.payload?.SwapQuotes;
97
158
  if (!quotes)
98
159
  return;
99
- const best = selectBestUsableRoute(Object.values(quotes.quotes));
100
- if (best) {
101
- cleanup();
102
- resolve(best);
103
- return;
104
- }
160
+ collectedRoutes.push(...Object.values(quotes.quotes).filter(isUsableTitanRoute));
105
161
  }
106
162
  if (msg.StreamEnd) {
107
163
  cleanup();
164
+ if (collectedRoutes.length > 0) {
165
+ resolve(selectUsableRoutes(collectedRoutes));
166
+ return;
167
+ }
108
168
  const err = msg.StreamEnd.errorMessage
109
169
  ? `Titan stream ended with error [${msg.StreamEnd.errorCode}]: ${msg.StreamEnd.errorMessage}`
110
170
  : "Titan stream ended unexpectedly";
@@ -113,10 +173,10 @@ function fetchBestRoute(auth, params) {
113
173
  });
114
174
  });
115
175
  }
116
- function selectBestUsableRoute(routes) {
176
+ function selectUsableRoutes(routes) {
117
177
  return [...routes]
118
178
  .sort((a, b) => (a.outAmount > b.outAmount ? -1 : a.outAmount < b.outAmount ? 1 : 0))
119
- .find(isUsableTitanRoute);
179
+ .filter(isUsableTitanRoute);
120
180
  }
121
181
  function isUsableTitanRoute(route) {
122
182
  if (route.transaction) {
@@ -126,6 +186,80 @@ function isUsableTitanRoute(route) {
126
186
  return ix.d.length >= 8 && Buffer.from(ix.d.subarray(0, 8)).equals(SWAP_ROUTE_V2_DISCRIMINATOR);
127
187
  }) ?? false);
128
188
  }
189
+ function sleep(ms) {
190
+ return new Promise((resolve) => setTimeout(resolve, ms));
191
+ }
192
+ function asError(error) {
193
+ return error instanceof Error ? error : new Error(String(error));
194
+ }
195
+ async function buildQuoteResult(connection, route) {
196
+ const addressLookupTableAddresses = (route.addressLookupTables ?? []).map((bytes) => new web3_js_1.PublicKey(bytes));
197
+ if (route.transaction) {
198
+ const vTx = web3_js_1.VersionedTransaction.deserialize(new Uint8Array(route.transaction));
199
+ const instruction = await extractSwapInstruction(connection, vTx);
200
+ return { instruction, addressLookupTableAddresses };
201
+ }
202
+ if (route.instructions && route.instructions.length > 0) {
203
+ const swapIx = route.instructions.find((ix) => {
204
+ return ix.d.length >= 8 && Buffer.from(ix.d.subarray(0, 8)).equals(SWAP_ROUTE_V2_DISCRIMINATOR);
205
+ });
206
+ if (swapIx) {
207
+ const instruction = new web3_js_1.TransactionInstruction({
208
+ programId: new web3_js_1.PublicKey(swapIx.p),
209
+ keys: swapIx.a.map((acc) => ({
210
+ pubkey: new web3_js_1.PublicKey(acc.p),
211
+ isSigner: acc.s,
212
+ isWritable: acc.w,
213
+ })),
214
+ data: Buffer.from(swapIx.d),
215
+ });
216
+ return { instruction: sanitizeTitanInstructionForBundles(instruction), addressLookupTableAddresses };
217
+ }
218
+ }
219
+ throw new Error("Titan route has neither transaction bytes nor a SwapRouteV2 instruction");
220
+ }
221
+ function rewriteTitanQuoteForOwner(params) {
222
+ return {
223
+ instruction: rewriteTitanInstructionForOwner(params.quote.instruction, params.quotedUserPublicKey, params.actualUserPublicKey),
224
+ addressLookupTableAddresses: params.quote.addressLookupTableAddresses,
225
+ };
226
+ }
227
+ function rewriteTitanInstructionForOwner(instruction, quotedUserPublicKey, actualUserPublicKey) {
228
+ const rewrittenKeys = instruction.keys.map((key) => ({
229
+ pubkey: key.pubkey,
230
+ isSigner: key.isSigner,
231
+ isWritable: key.isWritable,
232
+ }));
233
+ const inputMint = instruction.keys[TITAN_INPUT_MINT_ACCOUNT_INDEX]?.pubkey;
234
+ const outputMint = instruction.keys[TITAN_OUTPUT_MINT_ACCOUNT_INDEX]?.pubkey;
235
+ const inputTokenProgram = instruction.keys[TITAN_INPUT_TOKEN_PROGRAM_ACCOUNT_INDEX]?.pubkey ?? spl_token_1.TOKEN_PROGRAM_ID;
236
+ const outputTokenProgram = instruction.keys[TITAN_OUTPUT_TOKEN_PROGRAM_ACCOUNT_INDEX]?.pubkey ?? spl_token_1.TOKEN_PROGRAM_ID;
237
+ const replacePubkey = (from, to) => {
238
+ for (const key of rewrittenKeys) {
239
+ if (key.pubkey.equals(from)) {
240
+ key.pubkey = to;
241
+ }
242
+ }
243
+ };
244
+ replacePubkey(quotedUserPublicKey, actualUserPublicKey);
245
+ if (inputMint) {
246
+ replacePubkey((0, spl_token_1.getAssociatedTokenAddressSync)(inputMint, quotedUserPublicKey, true, inputTokenProgram), (0, spl_token_1.getAssociatedTokenAddressSync)(inputMint, actualUserPublicKey, true, inputTokenProgram));
247
+ }
248
+ if (outputMint) {
249
+ replacePubkey((0, spl_token_1.getAssociatedTokenAddressSync)(outputMint, quotedUserPublicKey, true, outputTokenProgram), (0, spl_token_1.getAssociatedTokenAddressSync)(outputMint, actualUserPublicKey, true, outputTokenProgram));
250
+ }
251
+ return new web3_js_1.TransactionInstruction({
252
+ programId: instruction.programId,
253
+ keys: rewrittenKeys,
254
+ data: instruction.data,
255
+ });
256
+ }
257
+ function isVaultCompatibleQuote(instruction, userPublicKey) {
258
+ if (instruction.keys.some((key) => TITAN_VAULT_INCOMPATIBLE_PROGRAM_IDS.has(key.pubkey.toBase58()))) {
259
+ return false;
260
+ }
261
+ return !instruction.keys.some((key) => key.isSigner && !key.pubkey.equals(userPublicKey));
262
+ }
129
263
  async function extractSwapInstruction(connection, vTx) {
130
264
  const message = vTx.message;
131
265
  let lookupTableAccounts = [];
@@ -1 +1 @@
1
- {"version":3,"file":"titan-quote.js","sourceRoot":"","sources":["../../src/exponentVaults/titan-quote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"titan-quote.js","sourceRoot":"","sources":["../../src/exponentVaults/titan-quote.ts"],"names":[],"mappings":"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"}