UNPKG

@thespidercode/openbook-swap

Version:
94 lines (93 loc) 4.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initialAccountDetails = exports.getWalletToken = exports.getOpenOrderAccount = exports.getAccountDetail = void 0; const web3_js_1 = require("@solana/web3.js"); const token_account_1 = require("./token-account"); const spl_token_1 = require("@solana/spl-token"); const getAccountDetail = async (marketDetails, market, transaction, owner, connection, lamports = 0) => { try { const accountDetails = { ...exports.initialAccountDetails }; const baseTokenAccount = await (0, token_account_1.getOrCreateTokenAccount)(owner, marketDetails.base.mint, transaction, connection, lamports); if (baseTokenAccount && baseTokenAccount?.publicKey) { accountDetails.baseTokenAccount = baseTokenAccount.publicKey; accountDetails.signers ? accountDetails.signers.push(baseTokenAccount) : accountDetails.signers = [baseTokenAccount]; } else { if (!baseTokenAccount) { console.log('Could not get or create base token account.'); return null; } accountDetails.baseTokenAccount = baseTokenAccount; } const quoteTokenAccount = await (0, token_account_1.getOrCreateTokenAccount)(owner, marketDetails.quote.mint, transaction, connection, lamports); if (quoteTokenAccount && quoteTokenAccount?.publicKey) { accountDetails.quoteTokenAccount = quoteTokenAccount.publicKey; accountDetails.signers ? accountDetails.signers.push(quoteTokenAccount) : accountDetails.signers = [quoteTokenAccount]; } else { if (!quoteTokenAccount) { console.log('Could not get or create quote token account.'); return null; } accountDetails.quoteTokenAccount = quoteTokenAccount; } accountDetails.openOrders = await (0, exports.getOpenOrderAccount)(market, owner, connection); return accountDetails; } catch (error) { console.log(error); return null; } }; exports.getAccountDetail = getAccountDetail; const getOpenOrderAccount = async (market, owner, connection) => { try { let openOrdersAccounts = await market.findOpenOrdersAccountsForOwner(connection, owner); if (openOrdersAccounts && openOrdersAccounts.filter(oo => oo.market.toString() == market.address.toString()).length == 1) { return openOrdersAccounts.filter(oo => oo.market.toString() == market.address.toString())[0].address; } else { // TODO: SEE IF THAT CAN BE THE CASE if (openOrdersAccounts.filter(oo => oo.market.toString() == market.address.toString()).length > 1) { console.log('Weird, possible to have multiple Open Orders accounts?'); } else { const openOrdersAccount = new web3_js_1.Keypair(); return openOrdersAccount; } } } catch (error) { console.log(error); return undefined; } }; exports.getOpenOrderAccount = getOpenOrderAccount; const getSolBalance = async (owner, connection) => { try { return (await connection.getBalance(owner)) / web3_js_1.LAMPORTS_PER_SOL; } catch (error) { throw (error); } }; const getSplTokenBalance = async (owner, mint, connection) => { const splTokenAccounts = await connection.getParsedTokenAccountsByOwner(owner, { mint }); return splTokenAccounts.value.length > 0 ? splTokenAccounts.value[0].account.data.parsed.info.tokenAmount.uiAmount : 0; }; const getWalletToken = async (owner, marketDetails, connection) => { const nativeMint = spl_token_1.NATIVE_MINT.toString(); const baseMint = marketDetails.base.mint.toString(); const quoteMint = marketDetails.quote.mint.toString(); return { amountBaseToken: baseMint == nativeMint ? await getSolBalance(owner, connection) : await getSplTokenBalance(owner, marketDetails.base.mint, connection), amountQuoteToken: quoteMint == nativeMint ? await getSolBalance(owner, connection) : await getSplTokenBalance(owner, marketDetails.quote.mint, connection) }; }; exports.getWalletToken = getWalletToken; exports.initialAccountDetails = { baseTokenAccount: undefined, openOrders: undefined, quoteTokenAccount: undefined, signers: undefined };