UNPKG

solana-dex-parser

Version:

Solana Dex Transaction Parser

106 lines 4.08 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFinalSwap = exports.getPubkeyString = exports.getTranferTokenMint = exports.getAMMs = exports.getTradeType = exports.absBigInt = exports.hexToUint8Array = exports.getProgramName = exports.getInstructionData = void 0; const bs58_1 = __importDefault(require("bs58")); const constants_1 = require("./constants"); const web3_js_1 = require("@solana/web3.js"); /** * Get instruction data */ const getInstructionData = (instruction) => { if ('data' in instruction) { if (typeof instruction.data === 'string') return Buffer.from(bs58_1.default.decode(instruction.data)); // compatible with both bs58 v4.0.1 and v6.0.0 if (instruction.data instanceof Uint8Array) return Buffer.from(instruction.data); } return instruction.data; }; exports.getInstructionData = getInstructionData; /** * Get the name of a program by its ID * @param programId - The program ID to look up * @returns The name of the program or 'Unknown' if not found */ const getProgramName = (programId) => Object.values(constants_1.DEX_PROGRAMS).find((dex) => dex.id === programId)?.name || 'Unknown'; exports.getProgramName = getProgramName; /** * Convert a hex string to Uint8Array * @param hex - Hex string to convert * @returns Uint8Array representation of the hex string */ const hexToUint8Array = (hex) => new Uint8Array(hex.match(/.{1,2}/g).map((byte) => parseInt(byte, 16))); exports.hexToUint8Array = hexToUint8Array; const absBigInt = (value) => { return value < 0n ? -value : value; }; exports.absBigInt = absBigInt; const getTradeType = (inMint, outMint) => { if (inMint == constants_1.TOKENS.SOL) return 'BUY'; if (outMint == constants_1.TOKENS.SOL) return 'SELL'; if (Object.values(constants_1.TOKENS).includes(inMint)) return 'BUY'; return 'SELL'; }; exports.getTradeType = getTradeType; const getAMMs = (transferActionKeys) => { const amms = Object.values(constants_1.DEX_PROGRAMS).filter((it) => it.tags.includes('amm')); return transferActionKeys .map((it) => { const item = Object.values(amms).find((amm) => it.split(':')[0] == amm.id); if (item) return item.name; return null; }) .filter((it) => it != null); }; exports.getAMMs = getAMMs; const getTranferTokenMint = (token1, token2) => { if (token1 == token2) return token1; if (token1 && token1 != constants_1.TOKENS.SOL) return token1; if (token2 && token2 != constants_1.TOKENS.SOL) return token2; return token1 || token2; }; exports.getTranferTokenMint = getTranferTokenMint; const getPubkeyString = (value) => { if (typeof value === 'string') return value; if (value instanceof web3_js_1.PublicKey) return value.toBase58(); if ('type' in value && value.type == 'Buffer') return bs58_1.default.encode(value.data); return value; }; exports.getPubkeyString = getPubkeyString; const getFinalSwap = (trades, dexInfo) => { if (trades.length == 1) return trades[0]; if (trades.length >= 2) { const inputTrade = trades[0]; const outputTrade = trades[trades.length - 1]; return { type: (0, exports.getTradeType)(inputTrade.inputToken.mint, outputTrade.outputToken.mint), inputToken: inputTrade.inputToken, outputToken: outputTrade.outputToken, user: inputTrade.user, programId: inputTrade.programId, amm: dexInfo?.amm || inputTrade.amm, route: dexInfo?.route || inputTrade.route || '', slot: inputTrade.slot, timestamp: inputTrade.timestamp, signature: inputTrade.signature, idx: inputTrade.idx, }; } return null; }; exports.getFinalSwap = getFinalSwap; //# sourceMappingURL=utils.js.map