import type { NextApiRequest, NextApiResponse } from "next"; import { getServerErrorFromUnknown } from "./getServerErrorFromUnknown"; import { performance } from "./perfObserver"; type Handle = (req: NextApiRequest, res: NextApiResponse) => Promise; /** Allows us to get type inference from API handler responses */ export function defaultResponder(f: Handle) { return async (req: NextApiRequest, res: NextApiResponse) => { let ok = false; try { performance.mark("Start"); const result = await f(req, res); ok = true; if (result) res.json(result); } catch (err) { console.error(err); const error = getServerErrorFromUnknown(err); res.statusCode = error.statusCode; res.json({ message: error.message }); } finally { performance.mark("End"); performance.measure(`[${ok ? "OK" : "ERROR"}][$1] ${req.method} '${req.url}'`, "Start", "End"); } }; }