* wip * update layoutHOC * wip * remove app router related code no longer used * remove more * await cookies, headers, params, serachparams * update yarn.lock * await cookies, headers, params, serachparams more * update yarn lock again * downgrade next-auth to 4.22.1 * update yarn lock * fix * update yarn lock * fix type checks * update yarn lock * await headers and cookies * restore pages folder * restore yarn.lock * update yarn.lock * await headers and cookies * remove * await params in API routes * updates * restore next.config.js * remove i18n from next.config.js * Fixed tests * Fixed types * Removed duplicate favicon.ico * Fixing more types * ImageResponse moved to next/og * Fixed prisma import issues * dynamic import for @ewsjs/xhr * remove deasync dep * dynamic import for @tryvital/vital-node * fix type checks * add back turbopack command * Type fix * Removed unneeded file * fix turbopack relative path errors * add comments * remove unneeded code * Fixed build errors * await apis * use Promise<Params> type in defaultResponderForAppDir util * refactor scim api route * fix type checks * separate app-routing.config into client-config and server-config * wip * refactor routing forms components * revert unneeded changes for easier review * fix * fix * use CustomTrans * fix type * fix unit tests * fix type error * fix build error * fix build error * fix build error * fix warnings * fix warnings * upgrade @tremor/react and tailwindcss * numCols -> numItems * fix forgot-password e2e test * fix 1 more e2e test * fix login e2e test * fix e2e tests * fix e2e tests * clean up * remove error * use tremor/react 2.11.0 * fix * rename CustomTrans to ServerTrans * address comment * fix test * fix ServerTrans * fix * fix type * fix ServerTrans usages 1 * fix translations * fix type checks * fix type checks * link styling * fix --------- Co-authored-by: Keith Williams <keithwillcode@gmail.com> Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import { wrapApiHandlerWithSentry } from "@sentry/nextjs";
|
|
import type { Params } from "app/_types";
|
|
import { ApiError } from "next/dist/server/api-utils";
|
|
import type { NextRequest } from "next/server";
|
|
import { NextResponse } from "next/server";
|
|
|
|
import { getServerErrorFromUnknown } from "@calcom/lib/server/getServerErrorFromUnknown";
|
|
import { performance } from "@calcom/lib/server/perfObserver";
|
|
|
|
type Handler<T extends NextResponse | Response = NextResponse> = (
|
|
req: NextRequest,
|
|
{ params }: { params: Promise<Params> }
|
|
) => Promise<T>;
|
|
|
|
export const defaultResponderForAppDir = <T extends NextResponse | Response = NextResponse>(
|
|
handler: Handler<T>,
|
|
endpointRoute?: string
|
|
) => {
|
|
return async (req: NextRequest, { params }: { params: Promise<Params> }) => {
|
|
let ok = false;
|
|
try {
|
|
performance.mark("Start");
|
|
|
|
const result = endpointRoute
|
|
? await wrapApiHandlerWithSentry(async () => await handler(req, { params }), endpointRoute)()
|
|
: await handler(req, { params });
|
|
|
|
ok = true;
|
|
if (result) {
|
|
return result;
|
|
}
|
|
|
|
return NextResponse.json({});
|
|
} catch (error) {
|
|
let serverError;
|
|
|
|
if (error instanceof ApiError) {
|
|
serverError = {
|
|
message: error.message,
|
|
statusCode: error.statusCode,
|
|
url: req.url,
|
|
method: req.method,
|
|
};
|
|
} else {
|
|
serverError = getServerErrorFromUnknown(error);
|
|
}
|
|
|
|
// Don't report 400-499 errors to Sentry/console
|
|
if (!(serverError.statusCode >= 400 && serverError.statusCode < 500)) {
|
|
console.error(serverError);
|
|
const captureException = (await import("@sentry/nextjs")).captureException;
|
|
captureException(error);
|
|
}
|
|
|
|
return NextResponse.json(
|
|
{
|
|
message: serverError.message,
|
|
url: serverError.url,
|
|
method: serverError.method,
|
|
},
|
|
{
|
|
status: serverError.statusCode,
|
|
}
|
|
);
|
|
} finally {
|
|
performance.mark("End");
|
|
performance.measure(`[${ok ? "OK" : "ERROR"}][${req.method}] '${req.url}'`, "Start", "End");
|
|
}
|
|
};
|
|
};
|