import { NextApiHandler, NextApiRequest, NextApiResponse } from "next"; import appStore from "@calcom/app-store"; import { getSession } from "@lib/auth"; import { HttpError } from "@lib/core/http/error"; const handler = async (req: NextApiRequest, res: NextApiResponse) => { // Check that user is authenticated req.session = await getSession({ req }); const { args } = req.query; if (!Array.isArray(args)) { return res.status(404).json({ message: `API route not found` }); } const [_appName, apiEndpoint] = args; const appName = _appName.split("_").join(""); // Transform `zoom_video` to `zoomvideo`; try { // TODO: Find a way to dynamically import these modules // const app = (await import(`@calcom/${appName}`)).default; const app = appStore[appName as keyof typeof appStore]; if (!(app && "api" in app && apiEndpoint in app.api)) throw new HttpError({ statusCode: 404, message: `API handler not found` }); const handler = app.api[apiEndpoint as keyof typeof app.api] as NextApiHandler; if (typeof handler !== "function") throw new HttpError({ statusCode: 404, message: `API handler not found` }); const response = await handler(req, res); return res.status(200); } catch (error) { console.error(error); if (error instanceof HttpError) { return res.status(error.statusCode).json({ message: error.message }); } return res.status(404).json({ message: `API handler not found` }); } }; export default handler;