import { getAddress } from 'viem'; import { PumTokenPrice } from '../../../types'; export const PUM_TOKEN_PRICES_QUERY = `query pumTokenPrices($token: Bytes!, $interval: String!, $offset: Int, $limit: Int) { pumTokenPrices( orderBy: startAt orderDirection: desc first: $limit skip: $offset where: { token: $token interval: $interval } ) { id token { id name symbol issuer { name address } } interval open high low close volume traderCount buyers { id name } sellers { id name } startAt createdAt updatedAt } }`; export interface PumTokenPricesEntities { pumTokenPrices: { id: string; token: { id: string; name: string; symbol: string; issuer: { name?: string; address: string; }; }; interval: 'HOUR' | 'DAY'; open: string; high: string; low: string; close: string; volume: string; traderCount: string; buyers: { id: string; name?: string; }[]; sellers: { id: string; name?: string; }[]; startAt: string; createdAt: string; updatedAt: string; }[]; } export function transform(entity: PumTokenPricesEntities): PumTokenPrice[] { return entity.pumTokenPrices.map((pumTokenPrice) => ({ id: pumTokenPrice.id, token: { address: getAddress(pumTokenPrice.token.id), name: pumTokenPrice.token.name, symbol: pumTokenPrice.token.symbol, issuer: { name: pumTokenPrice.token.issuer.name, address: getAddress(pumTokenPrice.token.issuer.address), }, }, interval: pumTokenPrice.interval, open: BigInt(pumTokenPrice.open), high: BigInt(pumTokenPrice.high), low: BigInt(pumTokenPrice.low), close: BigInt(pumTokenPrice.close), volume: BigInt(pumTokenPrice.volume), traderCount: Number(pumTokenPrice.traderCount), buyers: pumTokenPrice.buyers, sellers: pumTokenPrice.sellers, startAt: Number(pumTokenPrice.startAt), createdAt: Number(pumTokenPrice.createdAt), updatedAt: Number(pumTokenPrice.updatedAt), })); }