IKHSAN
EN Read in EnglishID

homeio

Publik

Fork dari doctor-io/homeio

Branch
main
Commit terakhir
958d74616 Oktober 2026

useNetworkStatus.ts

Buka raw
"use client";

import { useQuery } from "@tanstack/react-query";
import type { NetworkStatus } from "@/lib/shared/contracts/network";
import { queryKeys } from "@/lib/shared/query-keys";

type NetworkStatusResponse = {
  data: NetworkStatus;
  meta?: {
    source?: "helper" | "fallback";
  };
};

async function fetchNetworkStatus() {
  const response = await fetch("/api/v1/network/status", {
    cache: "no-store",
  });

  if (!response.ok) {
    throw new Error(`Failed to fetch network status (${response.status})`);
  }

  const json = (await response.json()) as NetworkStatusResponse;
  return json.data;
}

export function useNetworkStatus() {
  return useQuery({
    queryKey: queryKeys.networkStatus,
    queryFn: fetchNetworkStatus,
    refetchInterval: (query) => {
      if (query.state.status !== "error") {
        // SSE-driven invalidation keeps this fresh; polling is fallback only.
        return 120_000;
      }

      const failureCount = Math.max(1, query.state.fetchFailureCount);
      const exponentialBackoffMs = 60_000 * 2 ** Math.min(failureCount - 1, 2);
      return Math.min(exponentialBackoffMs, 300_000);
    },
    staleTime: 10_000,
    retry: 0,
    refetchOnWindowFocus: false,
  });
}
byte
1.225
baris
46
Jenis
ts
Commit terakhir
16 Oktober 2026