@carrot-protocol/clend-rpc 0.1.26-p-withdraw-dev-e12dfc4 → 0.1.27-group-refactor1-dev-5488543

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.
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JupiterSwapper = void 0;
4
+ const anchor_1 = require("@coral-xyz/anchor");
5
+ const api_1 = require("@jup-ag/api");
6
+ const QUOTE_URL = "https://quote-api.jup.ag/v6";
7
+ // This class now implements the new ISwapper interface
8
+ class JupiterSwapper {
9
+ constructor(apiKey) {
10
+ this.jupiterApi = (0, api_1.createJupiterApiClient)({
11
+ basePath: QUOTE_URL,
12
+ apiKey,
13
+ });
14
+ }
15
+ /**
16
+ * Implements the getQuote method from the ISwapper interface.
17
+ * It takes a standardized QuoteRequest and returns a standardized SwapQuote.
18
+ */
19
+ async getQuote(request) {
20
+ const { inputMint, outputMint, inputAmount, swapMode, slippageBps } = request;
21
+ const quoteResponse = await this.jupiterApi.quoteGet({
22
+ inputMint: inputMint.toBase58(),
23
+ outputMint: outputMint.toBase58(),
24
+ amount: inputAmount.toNumber(),
25
+ slippageBps,
26
+ swapMode,
27
+ onlyDirectRoutes: true, // Keep this for leverage looping safety
28
+ });
29
+ // Populate the standardized SwapQuote object
30
+ return {
31
+ payer: request.payer,
32
+ inAmount: new anchor_1.BN(quoteResponse.inAmount),
33
+ outAmount: new anchor_1.BN(quoteResponse.outAmount),
34
+ otherAmountThreshold: new anchor_1.BN(quoteResponse.otherAmountThreshold),
35
+ swapperData: quoteResponse,
36
+ };
37
+ }
38
+ /**
39
+ * Implements the getSwapIxns method from the ISwapper interface.
40
+ * It takes a standardized SwapQuote and returns standardized SwapIxns.
41
+ */
42
+ async getSwapIxns(quote) {
43
+ // Cast the swapperData object back to its specific type
44
+ const jupQuoteResponse = quote.swapperData;
45
+ const { swapInstruction, addressLookupTableAddresses, setupInstructions, cleanupInstruction, } = await this.jupiterApi.swapInstructionsPost({
46
+ swapRequest: {
47
+ userPublicKey: quote.payer.toBase58(),
48
+ quoteResponse: jupQuoteResponse,
49
+ computeUnitPriceMicroLamports: 1,
50
+ wrapAndUnwrapSol: false, // TODO: may need to change this
51
+ destinationTokenAccount: undefined,
52
+ useSharedAccounts: false,
53
+ feeAccount: undefined,
54
+ skipUserAccountsRpcCalls: true,
55
+ },
56
+ });
57
+ const allIxs = [
58
+ ...transformResponseIxs(setupInstructions ?? []),
59
+ transformResponseIx(swapInstruction),
60
+ ...transformResponseIxs(cleanupInstruction ? [cleanupInstruction] : []),
61
+ ];
62
+ // Populate the standardized SwapIxns object
63
+ return {
64
+ ixns: allIxs,
65
+ luts: addressLookupTableAddresses.map((key) => new anchor_1.web3.PublicKey(key)),
66
+ };
67
+ }
68
+ }
69
+ exports.JupiterSwapper = JupiterSwapper;
70
+ // Helper functions remain the same
71
+ function transformResponseIxs(instructions) {
72
+ return instructions.map(transformResponseIx);
73
+ }
74
+ function transformResponseIx(instruction) {
75
+ return new anchor_1.web3.TransactionInstruction({
76
+ programId: new anchor_1.web3.PublicKey(instruction.programId),
77
+ keys: instruction.accounts.map((account) => ({
78
+ pubkey: new anchor_1.web3.PublicKey(account.pubkey),
79
+ isSigner: account.isSigner,
80
+ isWritable: account.isWritable,
81
+ })),
82
+ data: Buffer.from(instruction.data, "base64"),
83
+ });
84
+ }
85
+ //# sourceMappingURL=jupiterSwapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jupiterSwapper.js","sourceRoot":"","sources":["../../src/swapper/jupiterSwapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { web3 } from "@coral-xyz/anchor";
2
+ import { ISwapper, QuoteRequest, SwapQuote, SwapIxns } from "./interface";
3
+ /**
4
+ * A fully self-contained mock for the ISwapper interface.
5
+ * It simulates swaps based on prices set in the test.
6
+ */
7
+ export declare class MockJupiterSwapper implements ISwapper {
8
+ private mockSwaps;
9
+ private mockPrices;
10
+ constructor();
11
+ setPrice(mint: web3.PublicKey, price: number): void;
12
+ setMockSwap(request: QuoteRequest, swapIxns: SwapIxns): void;
13
+ /**
14
+ * Generates a realistic SwapQuote based on the mock prices.
15
+ */
16
+ getQuote(request: QuoteRequest): Promise<SwapQuote>;
17
+ getSwapIxns(quote: SwapQuote): Promise<SwapIxns>;
18
+ private getQuoteKey;
19
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MockJupiterSwapper = void 0;
7
+ const anchor_1 = require("@coral-xyz/anchor");
8
+ const decimal_js_1 = __importDefault(require("decimal.js"));
9
+ const clend_common_1 = require("@carrot-protocol/clend-common");
10
+ /**
11
+ * A fully self-contained mock for the ISwapper interface.
12
+ * It simulates swaps based on prices set in the test.
13
+ */
14
+ class MockJupiterSwapper {
15
+ constructor() {
16
+ this.mockSwaps = new Map();
17
+ this.mockPrices = new Map();
18
+ }
19
+ // NEW: Method to set a mock price for a mint
20
+ setPrice(mint, price) {
21
+ this.mockPrices.set(mint.toString(), price);
22
+ }
23
+ setMockSwap(request, swapIxns) {
24
+ const key = this.getQuoteKey(request);
25
+ this.mockSwaps.set(key, swapIxns);
26
+ }
27
+ /**
28
+ * Generates a realistic SwapQuote based on the mock prices.
29
+ */
30
+ async getQuote(request) {
31
+ const inputPrice = this.mockPrices.get(request.inputMint.toString());
32
+ const outputPrice = this.mockPrices.get(request.outputMint.toString());
33
+ if (inputPrice === undefined || outputPrice === undefined) {
34
+ throw new Error(`MockJupiterSwapper: Price not set for mints ${request.inputMint.toString()} or ${request.outputMint.toString()}`);
35
+ }
36
+ let calculatedInAmount = request.inputAmount;
37
+ let calculatedOutAmount;
38
+ // Simulate the swap based on price and swap mode
39
+ if (request.swapMode === "ExactIn") {
40
+ const inputAmountUi = (0, clend_common_1.amountToUi)(request.inputAmount, request.inputMintDecimals);
41
+ const inputValue = new decimal_js_1.default(inputAmountUi).mul(inputPrice);
42
+ const outputAmountUi = inputValue.div(outputPrice);
43
+ calculatedOutAmount = (0, clend_common_1.uiToAmount)(outputAmountUi.toNumber(), request.outputMintDecimals);
44
+ }
45
+ else {
46
+ // ExactOut
47
+ const outputAmountUi = (0, clend_common_1.amountToUi)(request.inputAmount, request.outputMintDecimals);
48
+ const outputValue = new decimal_js_1.default(outputAmountUi).mul(outputPrice);
49
+ const inputAmountUi = outputValue.div(inputPrice);
50
+ calculatedInAmount = (0, clend_common_1.uiToAmount)(inputAmountUi.toNumber(), request.inputMintDecimals);
51
+ calculatedOutAmount = request.inputAmount;
52
+ }
53
+ // Calculate the otherAmountThreshold based on slippage
54
+ const slippageFactor = new decimal_js_1.default(request.slippageBps).div(10000);
55
+ const slippage = new decimal_js_1.default(calculatedOutAmount.toString()).mul(slippageFactor);
56
+ const otherAmountThreshold = new anchor_1.BN(new decimal_js_1.default(calculatedOutAmount.toString())
57
+ .minus(slippage)
58
+ .floor()
59
+ .toFixed());
60
+ return {
61
+ payer: request.payer,
62
+ inAmount: calculatedInAmount,
63
+ outAmount: calculatedOutAmount,
64
+ otherAmountThreshold: otherAmountThreshold,
65
+ swapperData: {
66
+ originalRequest: request,
67
+ },
68
+ };
69
+ }
70
+ // getSwapIxns and getQuoteKey remain the same as the previous version
71
+ async getSwapIxns(quote) {
72
+ const { originalRequest } = quote.swapperData;
73
+ if (!originalRequest) {
74
+ throw new Error("MockJupiterSwapper: swapperData is missing originalRequest. Ensure getQuote is implemented correctly in the mock.");
75
+ }
76
+ const key = this.getQuoteKey(originalRequest);
77
+ const swapIxns = this.mockSwaps.get(key);
78
+ if (!swapIxns) {
79
+ throw new Error(`MockJupiterSwapper: Mock swap not set for key: ${key}`);
80
+ }
81
+ return swapIxns;
82
+ }
83
+ getQuoteKey(request) {
84
+ const { inputMint, outputMint, swapMode } = request;
85
+ return `${inputMint.toString()}-${outputMint.toString()}-${swapMode}`;
86
+ }
87
+ }
88
+ exports.MockJupiterSwapper = MockJupiterSwapper;
89
+ //# sourceMappingURL=mockJupiterSwapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockJupiterSwapper.js","sourceRoot":"","sources":["../../src/swapper/mockJupiterSwapper.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { BN, web3 } from "@coral-xyz/anchor";
2
+ import Decimal from "decimal.js";
2
3
  import { WrappedI80F48, InterestRateConfig, BankConfig, Bank, ClendAccount, OracleSetup, RiskTier, BankOperationalState, AssetTag } from "./state";
3
4
  import winston from "winston";
4
5
  export declare const LIQUIDATION_LIQUIDATOR_FEE = 0.025;
@@ -23,3 +24,31 @@ export declare function getClendAccountActiveBanks(clendAccount: ClendAccount):
23
24
  export declare function getClendAccountRemainingAccounts(banks: Bank[]): web3.AccountMeta[];
24
25
  export declare function getLiquidateClendAccountRemainingAccounts(liquidateeClendAccount: ClendAccount, liquidatorClendAccount: ClendAccount, liabilityMint: web3.PublicKey, liabilityMintTokenProgram: web3.PublicKey, assetMint: web3.PublicKey, mintOracleMapping: Map<string, string>): web3.AccountMeta[];
25
26
  export declare const logger: winston.Logger;
27
+ export declare function calculatePriceUi(price: number, exponent: number): number;
28
+ export declare function calculatePriceUiDecimal(price: Decimal, exponent: number): number;
29
+ /**
30
+ * @interface OracleSubmission
31
+ * @notice Represents the structure of a single oracle submission within the PullFeedAccountData.
32
+ * @dev This matches the 'OracleSubmission' type defined in the Switchboard program's IDL.
33
+ */
34
+ interface OracleSubmission {
35
+ oracle: web3.PublicKey;
36
+ slot: BN;
37
+ landed_at: BN;
38
+ value: BN;
39
+ }
40
+ /**
41
+ * @interface ParsedPullFeedAccountData
42
+ * @notice Defines the structure for our manually parsed data.
43
+ */
44
+ interface ParsedPullFeedAccountData {
45
+ submissions: OracleSubmission[];
46
+ }
47
+ /**
48
+ * @function parsePullFeedAccountData
49
+ * @notice Manually parses the raw buffer of a Switchboard PullFeedAccountData account.
50
+ * @param data The raw account data buffer from connection.getAccountInfo().
51
+ * @returns An object containing the parsed submissions, sorted by slot descending.
52
+ */
53
+ export declare function parsePullFeedAccountData(data: Buffer): ParsedPullFeedAccountData;
54
+ export {};
package/dist/utils.js CHANGED
@@ -17,6 +17,9 @@ exports.parseBankConfig = parseBankConfig;
17
17
  exports.getClendAccountActiveBanks = getClendAccountActiveBanks;
18
18
  exports.getClendAccountRemainingAccounts = getClendAccountRemainingAccounts;
19
19
  exports.getLiquidateClendAccountRemainingAccounts = getLiquidateClendAccountRemainingAccounts;
20
+ exports.calculatePriceUi = calculatePriceUi;
21
+ exports.calculatePriceUiDecimal = calculatePriceUiDecimal;
22
+ exports.parsePullFeedAccountData = parsePullFeedAccountData;
20
23
  const anchor_1 = require("@coral-xyz/anchor");
21
24
  const decimal_js_1 = __importDefault(require("decimal.js"));
22
25
  const state_1 = require("./state");
@@ -35,6 +38,9 @@ function getTokenProgramForMint(mint) {
35
38
  else if (mint.equals(state_1.JLP_MINT)) {
36
39
  return state_1.TOKEN_PROGRAMS.JLP;
37
40
  }
41
+ else if (mint.equals(state_1.ALP_MINT)) {
42
+ return state_1.TOKEN_PROGRAMS.ALP;
43
+ }
38
44
  else {
39
45
  throw new Error(`Unsupported mint: ${mint.toString()}`);
40
46
  }
@@ -49,6 +55,9 @@ function getTokenDecimalsForMint(mint) {
49
55
  else if (mint.equals(state_1.JLP_MINT)) {
50
56
  return state_1.TOKEN_DECIMALS.JLP;
51
57
  }
58
+ else if (mint.equals(state_1.ALP_MINT)) {
59
+ return state_1.TOKEN_DECIMALS.ALP;
60
+ }
52
61
  else {
53
62
  throw new Error(`Unsupported mint: ${mint.toString()}`);
54
63
  }
@@ -183,6 +192,8 @@ function parseOracleSetup(data) {
183
192
  return state_1.OracleSetup.PythPushOracle;
184
193
  if (data === 3)
185
194
  return state_1.OracleSetup.StakedWithPythPush;
195
+ if (data === 4)
196
+ return state_1.OracleSetup.SwitchboardPull;
186
197
  throw new Error(`Invalid oracle setup number: ${data}`);
187
198
  }
188
199
  // Handle object format
@@ -198,6 +209,9 @@ function parseOracleSetup(data) {
198
209
  else if (data.stakedWithPythPush) {
199
210
  return state_1.OracleSetup.StakedWithPythPush;
200
211
  }
212
+ else if (data.switchboardPull) {
213
+ return state_1.OracleSetup.SwitchboardPull;
214
+ }
201
215
  throw new Error(`Invalid oracle setup format: ${JSON.stringify(data)}`);
202
216
  }
203
217
  function parseBankConfig(data) {
@@ -325,4 +339,57 @@ exports.logger = winston_1.default.createLogger({
325
339
  }), winston_1.default.format.json()),
326
340
  transports: [new winston_1.default.transports.Console()],
327
341
  });
342
+ // for oracles
343
+ function calculatePriceUi(price, exponent) {
344
+ return price / Math.pow(10, Math.abs(exponent));
345
+ }
346
+ function calculatePriceUiDecimal(price, exponent) {
347
+ return price
348
+ .dividedBy(new decimal_js_1.default(10).pow(exponent))
349
+ .toDecimalPlaces(6)
350
+ .toNumber();
351
+ }
352
+ /**
353
+ * @function parsePullFeedAccountData
354
+ * @notice Manually parses the raw buffer of a Switchboard PullFeedAccountData account.
355
+ * @param data The raw account data buffer from connection.getAccountInfo().
356
+ * @returns An object containing the parsed submissions, sorted by slot descending.
357
+ */
358
+ function parsePullFeedAccountData(data) {
359
+ // 1. Verify the 8-byte discriminator to ensure we're parsing the correct account type.
360
+ const discriminator = Buffer.from([196, 27, 108, 196, 10, 215, 219, 40]);
361
+ const accountDiscriminator = data.slice(0, 8);
362
+ //if (discriminator.compare(accountDiscriminator) !== 0) {
363
+ // throw new Error(
364
+ // "Invalid account discriminator. Expected PullFeedAccountData.",
365
+ // );
366
+ //}
367
+ // 2. Define the layout and size of an OracleSubmission struct based on the IDL.
368
+ // pubkey (32) + u64 (8) + u64 (8) + i128 (16) = 64 bytes
369
+ const submissionSize = 64;
370
+ const submissionsOffset = 8; // Data starts after the 8-byte discriminator.
371
+ const numSubmissions = 32; // The 'submissions' field is a fixed-size array [OracleSubmission; 32].
372
+ const submissions = [];
373
+ // 3. Loop through the buffer and parse each submission.
374
+ for (let i = 0; i < numSubmissions; i++) {
375
+ const currentOffset = submissionsOffset + i * submissionSize;
376
+ const submissionBuffer = data.slice(currentOffset, currentOffset + submissionSize);
377
+ // An empty submission slot will have a zeroed-out oracle public key.
378
+ const oraclePkBytes = submissionBuffer.slice(0, 32);
379
+ if (oraclePkBytes.every((byte) => byte === 0)) {
380
+ continue; // Skip empty/uninitialized submission slots.
381
+ }
382
+ // Parse the fields for a single submission.
383
+ const oracle = new anchor_1.web3.PublicKey(oraclePkBytes);
384
+ const slot = new anchor_1.BN(submissionBuffer.slice(32, 40), "le");
385
+ const landed_at = new anchor_1.BN(submissionBuffer.slice(40, 48), "le");
386
+ // For the signed 128-bit integer (i128), we read it as little-endian
387
+ // and then convert it from two's complement to get the correct signed value.
388
+ const value = new anchor_1.BN(submissionBuffer.slice(48, 64), "le").fromTwos(128);
389
+ submissions.push({ oracle, slot, landed_at, value });
390
+ }
391
+ // 4. Sort submissions by slot in descending order to easily find the latest.
392
+ submissions.sort((a, b) => b.slot.cmp(a.slot));
393
+ return { submissions };
394
+ }
328
395
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carrot-protocol/clend-rpc",
3
- "version": "0.1.26-p-withdraw-dev-e12dfc4",
3
+ "version": "0.1.27-group-refactor1-dev-5488543",
4
4
  "description": "Carrot Lend RPC Client",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,65 +0,0 @@
1
- import { web3 } from "@coral-xyz/anchor";
2
- import Decimal from "decimal.js";
3
- import { Instruction, QuoteResponse, ResponseError, SwapMode } from "@jup-ag/api";
4
- export type ErrorBody = {
5
- error: string;
6
- error_code: string;
7
- };
8
- export type SwapTxResponse = {
9
- swapTxs: SwapTxs;
10
- lookupTables: web3.PublicKey[];
11
- swapResponse: SwapResponse;
12
- };
13
- export type SwapResponse = {
14
- swapInAmountLamports: Decimal;
15
- swapOutAmountLamports: Decimal;
16
- swapMinOutAmountLamports: Decimal;
17
- };
18
- export type SwapTxs = {
19
- setupIxs: web3.TransactionInstruction[];
20
- swapIxs: web3.TransactionInstruction[];
21
- cleanupIxs: web3.TransactionInstruction[];
22
- };
23
- export type SwapConfig = {
24
- slippageBps: number;
25
- wrapAndUnwrapSol?: boolean;
26
- onlyDirectRoutes?: boolean;
27
- swapMode?: SwapMode;
28
- };
29
- export type SwapInputs = {
30
- inputMint: web3.PublicKey;
31
- outputMint: web3.PublicKey;
32
- inputAmountLamports: Decimal;
33
- };
34
- export type SwapIxs = {
35
- preActionIxs: web3.TransactionInstruction[];
36
- swapIxs: web3.TransactionInstruction[];
37
- lookupTables: web3.PublicKey[];
38
- };
39
- export type SwapQuote<T> = {
40
- priceAInB: Decimal;
41
- quoteResponse?: T;
42
- };
43
- export declare class JupSwapResponseError extends Error {
44
- error: ResponseError;
45
- body: ErrorBody;
46
- constructor(error: ResponseError, body: ErrorBody);
47
- }
48
- export interface IJupiterUtils {
49
- getJupiterPrice(mint: web3.PublicKey): Promise<number>;
50
- getJupiterQuote(inputMint: web3.PublicKey, outputMint: web3.PublicKey, inputMintDecimals: number, outputMintDecimals: number, inputAmountLamports: Decimal, slippageBps: number, swapMode?: SwapMode): Promise<SwapQuote<QuoteResponse>>;
51
- getJupiterSwap(payer: web3.PublicKey, inputs: SwapInputs, quote: SwapQuote<QuoteResponse>): Promise<SwapIxs>;
52
- }
53
- export declare class JupiterUtils implements IJupiterUtils {
54
- readonly baseUrl: string;
55
- readonly headers: Record<string, string>;
56
- constructor(apiKey?: string);
57
- getJupiterPrice(mint: web3.PublicKey | string): Promise<number>;
58
- getJupiterQuote(inputMint: web3.PublicKey, outputMint: web3.PublicKey, inputMintDecimals: number, outputMintDecimals: number, inputAmountLamports: Decimal, slippageBps: number, swapMode?: SwapMode): Promise<SwapQuote<QuoteResponse>>;
59
- getJupiterSwap(payer: web3.PublicKey, inputs: SwapInputs, quote: SwapQuote<QuoteResponse>): Promise<SwapIxs>;
60
- private quote;
61
- private swapTxFromQuote;
62
- }
63
- export declare function scaleJupQuoteResponse(quoteResponse: QuoteResponse, newAmount: Decimal): QuoteResponse;
64
- export declare function transformResponseIxs(instructions: Instruction[]): web3.TransactionInstruction[];
65
- export declare function transformResponseIx(instruction: Instruction): web3.TransactionInstruction;
@@ -1,174 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.JupiterUtils = exports.JupSwapResponseError = void 0;
7
- exports.scaleJupQuoteResponse = scaleJupQuoteResponse;
8
- exports.transformResponseIxs = transformResponseIxs;
9
- exports.transformResponseIx = transformResponseIx;
10
- const anchor_1 = require("@coral-xyz/anchor");
11
- const decimal_js_1 = __importDefault(require("decimal.js"));
12
- const api_1 = require("@jup-ag/api");
13
- const axios_1 = __importDefault(require("axios"));
14
- const BASE_URL_FREE = "https://lite-api.jup.ag";
15
- const BASE_URL_PAID = "https://api.jup.ag";
16
- const PRICE_PATH = "/price/v2";
17
- const QUOTE_PATH = "/swap/v1/quote";
18
- const QUOTE_URL = "https://quote-api.jup.ag/v6";
19
- class JupSwapResponseError extends Error {
20
- constructor(error, body) {
21
- super(`JupSwapResponseError: ${body.error} (${body.error_code})`);
22
- this.error = error;
23
- this.body = body;
24
- }
25
- }
26
- exports.JupSwapResponseError = JupSwapResponseError;
27
- // Default implementation of JupiterUtils
28
- class JupiterUtils {
29
- constructor(apiKey) {
30
- const defaultHeaders = {
31
- "Content-Type": "application/json",
32
- };
33
- this.baseUrl = apiKey ? BASE_URL_PAID : BASE_URL_FREE;
34
- this.headers = apiKey
35
- ? { ...defaultHeaders, "x-api-key": apiKey }
36
- : defaultHeaders;
37
- }
38
- async getJupiterPrice(mint) {
39
- const params = {
40
- ids: mint.toString(),
41
- };
42
- const res = await axios_1.default.get(`${this.baseUrl}${PRICE_PATH}`, {
43
- params,
44
- headers: this.headers,
45
- });
46
- return res.data.data[mint.toString()]?.price || 0;
47
- }
48
- async getJupiterQuote(inputMint, outputMint, inputMintDecimals, outputMintDecimals, inputAmountLamports, slippageBps, swapMode = "ExactIn") {
49
- const quoteResponse = await this.quote(inputMint, outputMint, inputAmountLamports, {
50
- slippageBps: slippageBps,
51
- wrapAndUnwrapSol: false,
52
- onlyDirectRoutes: true,
53
- swapMode,
54
- });
55
- const inAmount = new decimal_js_1.default(quoteResponse.inAmount).div(new decimal_js_1.default(10).pow(inputMintDecimals));
56
- const minAmountOut = new decimal_js_1.default(quoteResponse.otherAmountThreshold).div(new decimal_js_1.default(10).pow(outputMintDecimals));
57
- const priceDebtToColl = minAmountOut.div(inAmount);
58
- return {
59
- priceAInB: priceDebtToColl,
60
- quoteResponse,
61
- };
62
- }
63
- async getJupiterSwap(payer, inputs, quote) {
64
- const scaledQuoteResponse = scaleJupQuoteResponse(quote.quoteResponse, new decimal_js_1.default(inputs.inputAmountLamports));
65
- const { swapTxs, lookupTables } = await this.swapTxFromQuote(payer, scaledQuoteResponse, {
66
- slippageBps: quote.quoteResponse.slippageBps,
67
- wrapAndUnwrapSol: false,
68
- onlyDirectRoutes: true,
69
- swapMode: quote.quoteResponse.swapMode,
70
- });
71
- return {
72
- preActionIxs: [],
73
- swapIxs: [...swapTxs.swapIxs],
74
- lookupTables,
75
- };
76
- }
77
- // Helper functions
78
- async quote(inputMint, outputMint, amount, swapConfig) {
79
- const quoteApi = (0, api_1.createJupiterApiClient)({
80
- basePath: QUOTE_URL,
81
- apiKey: this.headers["x-api-key"] ?? undefined,
82
- });
83
- const quoteRequest = {
84
- inputMint: inputMint.toBase58(),
85
- outputMint: outputMint.toBase58(),
86
- amount: Number(amount),
87
- slippageBps: Number(swapConfig.slippageBps),
88
- swapMode: swapConfig.swapMode,
89
- onlyDirectRoutes: swapConfig.onlyDirectRoutes,
90
- };
91
- try {
92
- return await quoteApi.quoteGet(quoteRequest);
93
- }
94
- catch (e) {
95
- console.log(JSON.stringify(e, null, 2));
96
- if (e instanceof api_1.ResponseError) {
97
- const body = (await e.response.json());
98
- throw new JupSwapResponseError(e, body);
99
- }
100
- throw e;
101
- }
102
- }
103
- async swapTxFromQuote(payer, quote, swapConfig) {
104
- const quoteApi = (0, api_1.createJupiterApiClient)({
105
- basePath: QUOTE_URL,
106
- apiKey: this.headers["x-api-key"] ?? undefined,
107
- });
108
- try {
109
- const swapParameters = {
110
- swapRequest: {
111
- userPublicKey: payer.toBase58(),
112
- quoteResponse: quote,
113
- computeUnitPriceMicroLamports: 1,
114
- wrapAndUnwrapSol: swapConfig?.wrapAndUnwrapSol ?? false,
115
- destinationTokenAccount: undefined,
116
- useSharedAccounts: false,
117
- feeAccount: undefined,
118
- skipUserAccountsRpcCalls: true,
119
- },
120
- };
121
- const swap = await quoteApi.swapInstructionsPost(swapParameters);
122
- const swapIxs = [transformResponseIx(swap.swapInstruction)];
123
- return {
124
- swapTxs: {
125
- setupIxs: transformResponseIxs(swap.setupInstructions),
126
- swapIxs,
127
- cleanupIxs: transformResponseIxs(swap.cleanupInstruction ? [swap.cleanupInstruction] : []),
128
- },
129
- lookupTables: swap.addressLookupTableAddresses.map((k) => new anchor_1.web3.PublicKey(k)),
130
- swapResponse: {
131
- swapInAmountLamports: new decimal_js_1.default(quote.inAmount),
132
- swapOutAmountLamports: new decimal_js_1.default(quote.outAmount),
133
- swapMinOutAmountLamports: new decimal_js_1.default(quote.otherAmountThreshold),
134
- },
135
- };
136
- }
137
- catch (e) {
138
- if (e instanceof api_1.ResponseError) {
139
- const body = (await e.response.json());
140
- throw new JupSwapResponseError(e, body);
141
- }
142
- throw e;
143
- }
144
- }
145
- }
146
- exports.JupiterUtils = JupiterUtils;
147
- function scaleJupQuoteResponse(quoteResponse, newAmount) {
148
- const oldAmount = new decimal_js_1.default(quoteResponse.inAmount);
149
- const scaleFactor = newAmount.div(oldAmount);
150
- const newQuoteResponse = { ...quoteResponse };
151
- newQuoteResponse.inAmount = newAmount.toString();
152
- // Calculate the new output amount based on the price and scale factor
153
- const outputAmount = new decimal_js_1.default(quoteResponse.outAmount);
154
- newQuoteResponse.outAmount = outputAmount.mul(scaleFactor).toString();
155
- newQuoteResponse.otherAmountThreshold = new decimal_js_1.default(quoteResponse.otherAmountThreshold)
156
- .mul(scaleFactor)
157
- .toString();
158
- return newQuoteResponse;
159
- }
160
- function transformResponseIxs(instructions) {
161
- return instructions.map(transformResponseIx);
162
- }
163
- function transformResponseIx(instruction) {
164
- return new anchor_1.web3.TransactionInstruction({
165
- programId: new anchor_1.web3.PublicKey(instruction.programId),
166
- keys: instruction.accounts.map((account) => ({
167
- pubkey: new anchor_1.web3.PublicKey(account.pubkey),
168
- isSigner: account.isSigner,
169
- isWritable: account.isWritable,
170
- })),
171
- data: Buffer.from(instruction.data, "base64"),
172
- });
173
- }
174
- //# sourceMappingURL=jupiterUtils.js.map