import { NextResponse } from "next/server"; import { auth } from "@/auth"; import { ApiError } from "@/lib/errors"; import { logger } from "@/lib/logger"; export type ApiHandlerContext
= { params: Promise
; t0: number; }; export function withApiHandler
>( ctx: string, handler: (req: Request, ctx: ApiHandlerContext
) => Promise }
): Promise = {
params: routeContext?.params ?? (Promise.resolve({}) as Promise ),
t0,
};
try {
return await handler(request, handlerCtx);
} catch (error) {
if (error instanceof ApiError) {
const level = error.statusCode >= 500 ? "error" : "warn";
logger[level](ctx, error.message, {
status: error.statusCode,
duration: Date.now() - t0,
});
return NextResponse.json(
{ message: error.message },
{ status: error.statusCode }
);
}
logger.error(ctx, "unexpected error", {
error: String(error),
duration: Date.now() - t0,
});
return NextResponse.json(
{ message: "Internal server error" },
{ status: 500 }
);
}
};
}