get-price-feeds.tsx 930 B

12345678910111213141516171819202122232425262728293031
  1. import { getRankingsByPublisher } from "../../services/clickhouse";
  2. import { type Cluster, ClusterToName, getData } from "../../services/pyth";
  3. import { getStatus } from "../../status";
  4. export const getPriceFeeds = async (cluster: Cluster, key: string) => {
  5. const [data, rankings] = await Promise.all([
  6. getData(cluster),
  7. getRankingsByPublisher(key),
  8. ]);
  9. return data
  10. .filter((feed) =>
  11. feed.price.priceComponents.some(
  12. (component) => component.publisher === key,
  13. ),
  14. )
  15. .map((feed) => {
  16. const ranking = rankings.find(
  17. (ranking) =>
  18. ranking.symbol === feed.symbol &&
  19. ranking.cluster === ClusterToName[cluster],
  20. );
  21. //if (!ranking) {
  22. // console.log(`No ranking for feed: ${feed.symbol} in cluster ${ClusterToName[cluster]}`);
  23. //}
  24. return {
  25. ranking,
  26. feed,
  27. status: getStatus(ranking),
  28. };
  29. });
  30. };