hybrid-status.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * Hybrid stack status from the local indexer.
  3. */
  4. const INDEXER =
  5. process.env.NEXT_PUBLIC_INDEXER_URL?.trim() || "http://127.0.0.1:4091";
  6. export type RpcProbe = {
  7. url: string;
  8. ok: boolean;
  9. chainId?: number;
  10. blockNumber?: number;
  11. error?: string;
  12. };
  13. export type HybridStatus = {
  14. ok: boolean;
  15. offline?: boolean;
  16. service?: string;
  17. mode?: string;
  18. privateLayer?: RpcProbe;
  19. publicLayer?: RpcProbe;
  20. sim?: {
  21. privateHeight: number;
  22. txCount: number;
  23. blockCount: number;
  24. pendingAnchors: number;
  25. postedAnchors: number;
  26. };
  27. note?: string;
  28. };
  29. export async function fetchHybridStatus(): Promise<HybridStatus> {
  30. try {
  31. const res = await fetch(`${INDEXER}/v1/hybrid`, {
  32. next: { revalidate: 0 },
  33. signal: AbortSignal.timeout(2000),
  34. });
  35. if (!res.ok) return { ok: false, offline: true, note: "Indexer returned an error." };
  36. return (await res.json()) as HybridStatus;
  37. } catch {
  38. return {
  39. ok: false,
  40. offline: true,
  41. note: "Indexer is not running. Start with: bun run dev:indexer",
  42. };
  43. }
  44. }