UNPKG

fbonds-core

Version:

Banx protocol sdk

106 lines (105 loc) 4.97 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.fetchTokenOffers = fetchTokenOffers; exports.fetchTokenPriceVsCollateral = fetchTokenPriceVsCollateral; exports.fetchTokenDecimals = fetchTokenDecimals; exports.fetchUserVaults = fetchUserVaults; const types_1 = require("../types"); const utils_1 = require("./utils"); const anchor_1 = require("@coral-xyz/anchor"); const bs58_1 = __importDefault(require("bs58")); const lodash_1 = require("lodash"); const solana_transactions_parser_1 = require("solana-transactions-parser"); function fetchTokenOffers(_a) { return __awaiter(this, arguments, void 0, function* ({ program, market, bondingCurveType, }) { const rawAccounts = yield program.account.bondOfferV3.all([ { memcmp: { offset: 8, bytes: market.toBase58(), }, }, { memcmp: { offset: 8 + 32, bytes: bs58_1.default.encode( //? Fetch only active offers new anchor_1.BN((0, utils_1.getEnumIndex)(types_1.PairState, types_1.PairState.PerpetualBondingCurveOnMarket)).toBuffer()), }, }, { memcmp: { offset: 8 + 32 + 1 + 8, bytes: bs58_1.default.encode(new anchor_1.BN((0, utils_1.getEnumIndex)(types_1.BondingCurveType, bondingCurveType)).toBuffer()), }, }, ]); return ((0, lodash_1.chain)(rawAccounts) .map((rawAccount) => (0, solana_transactions_parser_1.parseEnumsInAccount)(Object.assign({ publicKey: rawAccount.publicKey }, rawAccount.account))) //? Just to make sure. Filter only token offers. .filter(({ validation }) => validation.bondFeatures === types_1.BondFeatures.AutoReceiveAndReceiveSpl) .value()); }); } function fetchTokenPriceVsCollateral(_a) { return __awaiter(this, arguments, void 0, function* ({ connection, tokenTicker, collateralTicker, }) { try { const response = yield fetch(`https://price.jup.ag/v6/price?ids=${tokenTicker}&vsToken=${collateralTicker}`); const { data } = (yield response.json()); const { price, vsToken } = data[tokenTicker]; const { value: { decimals: collateralDecimals }, } = yield connection.getTokenSupply(new anchor_1.web3.PublicKey(vsToken)); return new anchor_1.BN(price * Math.pow(10, collateralDecimals)); } catch (error) { console.error(error); throw new Error('Failed to fetch token price'); } }); } function fetchTokenDecimals(mint, connection) { return __awaiter(this, void 0, void 0, function* () { try { const { value: { decimals }, } = yield connection.getTokenSupply(mint); return decimals; } catch (error) { console.error(error); throw new Error('Failed to fetch token decimals'); } }); } function fetchUserVaults(_a) { return __awaiter(this, arguments, void 0, function* ({ program, lendingTokenType }) { const rawAccounts = yield program.account.userVault.all([ { memcmp: { offset: 8, bytes: bs58_1.default.encode( //? Fetch only active UserVaults new anchor_1.BN((0, utils_1.getEnumIndex)(types_1.UserVaultState, types_1.UserVaultState.Active)).toBuffer()), }, }, { memcmp: { offset: 8 + 1 + 32, bytes: bs58_1.default.encode(new anchor_1.BN((0, utils_1.getEnumIndex)(types_1.LendingTokenType, lendingTokenType)).toBuffer()), }, }, ]); return (0, lodash_1.chain)(rawAccounts) .map((rawAccount) => (0, solana_transactions_parser_1.parseEnumsInAccount)(Object.assign({ publicKey: rawAccount.publicKey }, rawAccount.account))) .value(); }); }