import type { NextApiRequest } from "next"; import { stringify } from "querystring"; import { z } from "zod"; import { WEBAPP_URL } from "@calcom/lib/constants"; import { defaultHandler, defaultResponder } from "@calcom/lib/server"; import getAppKeysFromSlug from "../../_utils/getAppKeysFromSlug"; import { encodeOAuthState } from "../../_utils/oauth/encodeOAuthState"; import { LARK_HOST } from "../common"; const larkKeysSchema = z.object({ app_id: z.string(), app_secret: z.string(), }); async function getHandler(req: NextApiRequest) { const appKeys = await getAppKeysFromSlug("lark-calendar"); const { app_secret, app_id } = larkKeysSchema.parse(appKeys); const state = encodeOAuthState(req); const params = { app_id, redirect_uri: `${WEBAPP_URL}/api/integrations/larkcalendar/callback`, state, }; const query = stringify(params); const url = `https://${LARK_HOST}/open-apis/authen/v1/index?${query}`; // trigger app_ticket_immediately fetch(`https://${LARK_HOST}/open-apis/auth/v3/app_ticket/resend`, { method: "POST", headers: { "Content-Type": "application/json; charset=utf-8", }, body: JSON.stringify({ app_id, app_secret, }), }); return { url }; } export default defaultHandler({ GET: Promise.resolve({ default: defaultResponder(getHandler) }), });