diff --git a/packages/integrations/src/unifi-os/test/unifi-sm-api.spec.ts b/packages/integrations/src/unifi-os/test/unifi-sm-api.spec.ts index d634089bb..2fbe504a1 100644 --- a/packages/integrations/src/unifi-os/test/unifi-sm-api.spec.ts +++ b/packages/integrations/src/unifi-os/test/unifi-sm-api.spec.ts @@ -79,6 +79,39 @@ describe("UnifiSmApi getIspMetricsAsync", () => { }); }); + test("returns the newest period by metricTime even when periods arrive out of order", async () => { + const fetchAsync = vi.fn(async (url: string, _init?: RequestInit) => { + if (!url.includes("isp-metrics")) return jsonResponse(sitesBody); + + return jsonResponse({ + data: { + metrics: [ + { + periods: [ + { + metricTime: "2026-09-08T09:10:00Z", + data: { + wan: { avgLatency: 11, maxLatency: 12, packetLoss: 0, uptime: 100, ispName: "Example ISP" }, + }, + }, + { + metricTime: "2026-09-08T08:00:00Z", + data: { wan: { avgLatency: 99, maxLatency: 99, packetLoss: 5, uptime: 90, ispName: "Old" } }, + }, + ], + }, + ], + }, + }); + }); + const api = new UnifiSmApi("cloud-key", fetchAsync as never); + + const metrics = await api.getIspMetricsAsync(GATEWAY_MAC); + + expect(metrics?.latencyMs).toBe(11); + expect(metrics?.measuredAt).toEqual(new Date("2026-09-08T09:10:00Z")); + }); + test("returns null when no cloud site matches, never another account site", async () => { const { api } = createApi(); diff --git a/packages/integrations/src/unifi-os/unifi-sm-api.ts b/packages/integrations/src/unifi-os/unifi-sm-api.ts index 807c24126..5ddddd44d 100644 --- a/packages/integrations/src/unifi-os/unifi-sm-api.ts +++ b/packages/integrations/src/unifi-os/unifi-sm-api.ts @@ -115,7 +115,10 @@ export class UnifiSmApi { ); const periods = parsed.data.metrics[0]?.periods ?? []; - const latest = periods.at(-1); + const latest = periods.reduce<(typeof periods)[number] | undefined>((newest, period) => { + if (newest === undefined) return period; + return new Date(period.metricTime).getTime() > new Date(newest.metricTime).getTime() ? period : newest; + }, undefined); const wan = latest?.data.wan; if (latest === undefined || wan === undefined) return null;