45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
|
|
|
|
import { appRouter, createTRPCContext } from "@homarr/api";
|
|
import { auth } from "@homarr/auth/next";
|
|
import { logger } from "@homarr/log";
|
|
|
|
/**
|
|
* Configure basic CORS headers
|
|
* You should extend this to match your needs
|
|
*/
|
|
function setCorsHeaders(res: Response) {
|
|
res.headers.set("Access-Control-Allow-Origin", "*");
|
|
res.headers.set("Access-Control-Request-Method", "*");
|
|
res.headers.set("Access-Control-Allow-Methods", "OPTIONS, GET, POST");
|
|
res.headers.set("Access-Control-Allow-Headers", "*");
|
|
}
|
|
|
|
export function OPTIONS() {
|
|
const response = new Response(null, {
|
|
status: 204,
|
|
});
|
|
setCorsHeaders(response);
|
|
return response;
|
|
}
|
|
|
|
const handler = auth(async (req) => {
|
|
const response = await fetchRequestHandler({
|
|
endpoint: "/api/trpc",
|
|
router: appRouter,
|
|
req,
|
|
createContext: () =>
|
|
createTRPCContext({ session: req.auth, headers: req.headers }),
|
|
onError({ error, path, type }) {
|
|
logger.error(
|
|
`tRPC Error with ${type} on '${path}': (${error.code}) - ${error.message}`,
|
|
);
|
|
},
|
|
});
|
|
|
|
setCorsHeaders(response);
|
|
return response;
|
|
});
|
|
|
|
export { handler as GET, handler as POST };
|