import { Hono } from 'hono'; import type { PrekeyStore } from './store.js'; /** * Health check endpoint for production deployments. * * GET /health → 200 if storage backend reachable, 503 otherwise */ export function createHealthRoutes(store: PrekeyStore, version: string): Hono { const startTime = Date.now(); const app = new Hono(); app.get('/health', async (c) => { try { // Probe the store with a no-op operation await store.getOneTimePreKeyCount('__health__'); return c.json({ status: 'ok', version, uptimeSeconds: Math.floor((Date.now() - startTime) / 1000), }); } catch (err) { return c.json( { status: 'error', version, error: err instanceof Error ? err.message : String(err), }, 503, ); } }); // Kubernetes-style probes app.get('/healthz', async (c) => { try { await store.getOneTimePreKeyCount('__health__'); return c.text('ok'); } catch { return c.text('error', 503); } }); app.get('/ready', async (c) => { try { await store.getOneTimePreKeyCount('__health__'); return c.text('ready'); } catch { return c.text('not ready', 503); } }); return app; }