fix: token address prompt

This commit is contained in:
aryan
2024-12-19 05:36:03 +05:30
parent 28a7952797
commit b078cc3b37
3 changed files with 68 additions and 49 deletions

View File

@@ -1,14 +1,12 @@
import { PublicKey } from "@solana/web3.js";
import { JupiterTokenData } from "../types";
export async function fetchTokenData(
name?: string,
symbol?: string,
mint?: PublicKey,
export async function getTokenDataByAddress(
mint: PublicKey,
): Promise<JupiterTokenData | undefined> {
try {
if (!mint && !symbol && !name) {
throw new Error("Either mint address, name or symbol is required");
if (!mint) {
throw new Error("Mint address is required");
}
const response = await fetch("https://tokens.jup.ag/tokens?tags=verified", {
@@ -20,19 +18,53 @@ export async function fetchTokenData(
const data = (await response.json()) as JupiterTokenData[];
const token = data.find((token: JupiterTokenData) => {
if (mint) {
return token.address === mint.toBase58();
}
if (symbol) {
return token.symbol === symbol;
}
if (name) {
return token.name === name;
}
return false;
return token.address === mint.toBase58();
});
return token;
} catch (error: any) {
throw new Error(`Error fetching token data: ${error.message}`);
}
}
export async function getTokenAddressFromTicker(
ticker: string
): Promise<string | null> {
try {
const response = await fetch(
`https://api.dexscreener.com/latest/dex/search?q=${ticker}`
);
const data = await response.json();
if (!data.pairs || data.pairs.length === 0) {
return null;
}
// Filter for Solana pairs only and sort by FDV
let solanaPairs = data.pairs
.filter((pair: any) => pair.chainId === "solana")
.sort((a: any, b: any) => (b.fdv || 0) - (a.fdv || 0));
console.log("solanaPairs", solanaPairs);
solanaPairs = solanaPairs.filter(
(pair: any) =>
pair.baseToken.symbol.toLowerCase() === ticker.toLowerCase()
);
// Return the address of the highest FDV Solana pair
return solanaPairs[0].baseToken.address;
} catch (error) {
console.error("Error fetching token address from DexScreener:", error);
return null;
}
}
export async function getTokenDataByTicker(
ticker: string
): Promise<JupiterTokenData | undefined> {
const address = await getTokenAddressFromTicker(ticker);
if (!address) {
throw new Error(`Token address not found for ticker: ${ticker}`);
}
return getTokenDataByAddress(new PublicKey(address));
}