From e146126f86ff29a9492e021bdf46be34bd0c5568 Mon Sep 17 00:00:00 2001 From: Fredrik Johansson Date: Sun, 26 Jul 2026 18:48:39 +0200 Subject: [PATCH] Api endpoint added /api/latency-targets --- README.md | 20 ++++++++++++++++++++ src/checker.ts | 2 +- src/index.ts | 9 ++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb43a67..e77493b 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,26 @@ GET /api/status `status` is `"up"` for any response (including 4xx — the server is reachable), `"down"` for connection errors and 5xx, `"unknown"` before the first check completes. +``` +GET /api/latency-targets +``` + +```json +{ + "refreshedAt": "2026-07-26T18:00:00Z", + "targets": [ + { + "key": "wisp.dev.example.com", + "name": "Wisp", + "url": "https://wisp.dev.example.com/", + "source": "npm" + } + ] +} +``` + +`/api/latency-targets` exposes the current computed check list after include-pattern filtering plus admin overrides/manual targets, making it suitable as a source of truth for downstream probe consumers. + ### Admin API All routes below `/api/admin` (except `/auth/check`) require an `X-Admin-Password` header matching `ADMIN_PASSWORD`. Returns `503` for every route if `ADMIN_PASSWORD` is unset. diff --git a/src/checker.ts b/src/checker.ts index c40d9ea..f538ca5 100644 --- a/src/checker.ts +++ b/src/checker.ts @@ -60,7 +60,7 @@ async function refreshNpmHosts(): Promise { } } -function currentTargets(): CheckTarget[] { +export function currentTargets(): CheckTarget[] { return computeTargets(rawHosts, getAllOverrides(), listManualTargets()); } diff --git a/src/index.ts b/src/index.ts index 72e2422..3614fb7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ import express from 'express'; import { config } from './config.js'; -import { startChecker, getStore } from './checker.js'; +import { startChecker, getStore, currentTargets } from './checker.js'; import { renderPage } from './page.js'; import { renderAdminPage } from './adminPage.js'; import { router as adminRouter } from './admin.js'; @@ -13,6 +13,13 @@ app.get('/api/status', (_req, res) => { res.json(getStore()); }); +app.get('/api/latency-targets', (_req, res) => { + res.json({ + refreshedAt: new Date().toISOString(), + targets: currentTargets(), + }); +}); + app.use('/api/admin', adminRouter); app.get('/admin', (_req, res) => {