import type { NextApiRequest } from "next"; import { symmetricEncrypt } from "@calcom/lib/crypto"; import { CALCOM_APP_CREDENTIAL_ENCRYPTION_KEY, CALCOM_CREDENTIAL_SYNC_SECRET, CALCOM_CREDENTIAL_SYNC_HEADER_NAME, CALCOM_ADMIN_API_KEY, } from "../../constants"; import { generateGoogleCalendarAccessToken, generateZoomAccessToken } from "../../lib/integrations"; export default async function handler(req: NextApiRequest, res) { const isInvalid = req.query["invalid"] === "1"; const userId = parseInt(req.query["userId"] as string); const appSlug = req.query["appSlug"]; try { let accessToken; if (appSlug === "google-calendar") { accessToken = await generateGoogleCalendarAccessToken(); } else if (appSlug === "zoom") { accessToken = await generateZoomAccessToken(); } else { throw new Error(`Unhandled appSlug: ${appSlug}`); } if (!accessToken) { return res.status(500).json({ error: "Could not get access token" }); } const result = await fetch( `http://localhost:3002/api/v1/credential-sync?apiKey=${CALCOM_ADMIN_API_KEY}&userId=${userId}`, { method: "POST", headers: { "Content-Type": "application/json", [CALCOM_CREDENTIAL_SYNC_HEADER_NAME]: CALCOM_CREDENTIAL_SYNC_SECRET, }, body: JSON.stringify({ appSlug, encryptedKey: symmetricEncrypt( JSON.stringify({ access_token: isInvalid ? "1233231231231" : accessToken, }), CALCOM_APP_CREDENTIAL_ENCRYPTION_KEY ), }), } ); const clonedResult = result.clone(); try { if (result.ok) { const json = await result.json(); return res.status(200).json(json); } else { return res.status(400).json({ error: await clonedResult.text() }); } } catch (e) { return res.status(400).json({ error: await clonedResult.text() }); } } catch (error) { console.error(error); return res.status(400).json({ message: "Internal Server Error", error: error.message }); } }