simple list of pds servers with open registration
at main 49 lines 1.4 kB view raw
1import { Hono } from "https://esm.sh/hono@4.4.0"; 2import { 3 getAllServers, 4 getMetadata, 5 getServerCount, 6} from "../database/queries.ts"; 7import { getTrackedSoftware } from "../../shared/constants.ts"; 8import type { LatestVersionMap } from "../../shared/types.ts"; 9 10const api = new Hono(); 11 12api.get("/servers", async (c) => { 13 // Fetch per-software latest versions 14 const tracked = getTrackedSoftware(); 15 const latestVersions: LatestVersionMap = {}; 16 const versionPromises = tracked.map(async (sw) => { 17 const v = await getMetadata(`latest_version:${sw.id}`); 18 if (v) latestVersions[sw.id] = v; 19 }); 20 21 const [servers, , counts] = await Promise.all([ 22 getAllServers(), 23 Promise.all(versionPromises), 24 getServerCount(), 25 ]); 26 27 // Backward compat: fall back to legacy key until cron populates new keys 28 if (!latestVersions["bluesky-pds"]) { 29 const legacy = await getMetadata("latest_pds_version"); 30 if (legacy) latestVersions["bluesky-pds"] = legacy; 31 } 32 33 c.header( 34 "Cache-Control", 35 "public, max-age=3600, stale-while-revalidate=3600", 36 ); 37 return c.json({ 38 meta: { 39 latest_pds_version: latestVersions["bluesky-pds"] ?? null, 40 latest_versions: latestVersions, 41 total_known: counts.total, 42 total_open: counts.open, 43 updated_at: new Date().toISOString(), 44 }, 45 servers, 46 }); 47}); 48 49export { api };