import { lookup as lookupPublisher } from "@pythnetwork/known-publishers"; import { notFound } from "next/navigation"; import { PublishersCard } from "./publishers-card"; import { getRankingsBySymbol } from "../../services/clickhouse"; import { Cluster, ClusterToName, getFeeds, getPublishersForFeed, } from "../../services/pyth"; import { getStatus } from "../../status"; import { PublisherIcon } from "../PublisherIcon"; import { PublisherTag } from "../PublisherTag"; type Props = { params: Promise<{ slug: string; }>; }; export const Publishers = async ({ params }: Props) => { const { slug } = await params; const symbol = decodeURIComponent(slug); const [ feeds, pythnetPublishers, // , pythtestConformancePublishers ] = await Promise.all([ getFeeds(Cluster.Pythnet), getPublishers(Cluster.Pythnet, symbol), // getPublishers(Cluster.PythtestConformance, symbol), ]); const feed = feeds.find((feed) => feed.symbol === symbol); // const publishers = [...pythnetPublishers, ...pythtestConformancePublishers]; const publishers = [...pythnetPublishers]; const metricsTime = pythnetPublishers.find( (publisher) => publisher.ranking !== undefined, )?.ranking?.time; return feed === undefined ? ( notFound() ) : ( } priceComponents={publishers.map( ({ ranking, publisher, status, cluster, knownPublisher }) => ({ id: `${publisher}-${ClusterToName[Cluster.Pythnet]}`, feedKey: feed.product.price_account, score: ranking?.final_score, uptimeScore: ranking?.uptime_score, deviationScore: ranking?.deviation_score, stalledScore: ranking?.stalled_score, cluster, status, publisherKey: publisher, symbol, rank: ranking?.final_rank, name: ( , })} /> ), nameAsString: `${knownPublisher?.name ?? ""}${publisher}`, }), )} /> ); }; const getPublishers = async (cluster: Cluster, symbol: string) => { const [publishers, rankings] = await Promise.all([ getPublishersForFeed(cluster, symbol), getRankingsBySymbol(symbol), ]); return ( publishers?.map((publisher) => { const ranking = rankings.find( (ranking) => ranking.publisher === publisher && ranking.cluster === ClusterToName[cluster], ); return { ranking, publisher, status: getStatus(ranking), cluster, knownPublisher: lookupPublisher(publisher), }; }) ?? [] ); };