UNPKG

@symmetry-hq/baskets-v2-sdk

Version:

Symmetry Baskets V2 SDK

78 lines (77 loc) 3.56 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getQuoteResponseHandler = getQuoteResponseHandler; exports.processInstruction = processInstruction; exports.generateSwapInstruction = generateSwapInstruction; const web3_js_1 = require("@solana/web3.js"); const axios_1 = __importDefault(require("axios")); /** * Gets a quote from Jupiter for swapping tokens */ function getQuoteResponseHandler(quoteParams) { return __awaiter(this, void 0, void 0, function* () { // Build URL with required parameters const baseRequestURL = `${quoteParams.jupiterApiKey}quote?` + `inputMint=${quoteParams.fromToken.toBase58()}&` + `outputMint=${quoteParams.toToken.toBase58()}&` + `amount=${quoteParams.amount}&` + `slippageBps=${quoteParams.slippageBps}`; // Add maxAccounts if not using default 64 const requestURL = quoteParams.maxAllowedAccounts !== 64 ? `${baseRequestURL}&maxAccounts=${quoteParams.maxAllowedAccounts}` : baseRequestURL; try { const response = yield axios_1.default.get(requestURL); return response.data; } catch (error) { //@ts-ignore console.log("Jupiter quote error on:", baseRequestURL, error.message); return { data: null }; } }); } /** * Converts Jupiter instruction format to Solana TransactionInstruction */ function processInstruction(instruction) { return { programId: new web3_js_1.PublicKey(instruction.programId), keys: instruction.accounts.map((a) => (Object.assign(Object.assign({}, a), { pubkey: new web3_js_1.PublicKey(a.pubkey) }))), data: Buffer.from(instruction.data, "base64") }; } /** * Generates a swap instruction using Jupiter */ function generateSwapInstruction(quoteParams) { return __awaiter(this, void 0, void 0, function* () { const { payer, jupiterApiKey, quoteResponse, } = quoteParams; // Get swap instructions from Jupiter API const rawResponse = yield axios_1.default.post(`${jupiterApiKey}swap-instructions`, { quoteResponse: quoteResponse, userPublicKey: payer.toBase58(), wrapAndUnwrapSol: false, }, { headers: { 'Content-Type': 'application/json' } }).catch((e) => { // console.log(e.message, quoteResponse); throw new Error("Jupiter swap instructions error"); }); const instructions = rawResponse.data; return { ix: processInstruction(instructions.swapInstruction), luts: instructions.addressLookupTableAddresses.map((a) => new web3_js_1.PublicKey(a)), }; }); }