58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
|
import { Prisma } from "@prisma/client";
|
||
|
import type { NextApiRequest, NextApiResponse } from "next";
|
||
|
|
||
|
import { WEBAPP_URL } from "@calcom/lib/constants";
|
||
|
import prisma from "@calcom/prisma";
|
||
|
|
||
|
import { initVitalClient, vitalEnv } from "../lib/client";
|
||
|
|
||
|
/**
|
||
|
* This is will generate a user token for a client_user_id`
|
||
|
* @param req
|
||
|
* @param res
|
||
|
*/
|
||
|
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||
|
// Get user id
|
||
|
const calcomUserId = req.session?.user?.id;
|
||
|
if (!calcomUserId) {
|
||
|
return res.status(401).json({ message: "You must be logged in to do this" });
|
||
|
}
|
||
|
|
||
|
const vitalClient = await initVitalClient();
|
||
|
|
||
|
if (!vitalClient || !vitalEnv)
|
||
|
return res.status(400).json({ message: "Missing vital client, try calling `initVitalClient`" });
|
||
|
|
||
|
// Create a user on vital
|
||
|
let userVital;
|
||
|
try {
|
||
|
userVital = await vitalClient.User.create(`cal_${calcomUserId}`);
|
||
|
} catch (e) {
|
||
|
userVital = await vitalClient.User.resolve(`cal_${calcomUserId}`);
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
if (userVital?.user_id) {
|
||
|
await prisma.credential.create({
|
||
|
data: {
|
||
|
type: "vital_other",
|
||
|
key: { userVitalId: userVital.user_id } as unknown as Prisma.InputJsonObject,
|
||
|
userId: calcomUserId,
|
||
|
appId: "vital-automation",
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
const token = await vitalClient.Link.create(
|
||
|
userVital?.user_id,
|
||
|
undefined,
|
||
|
WEBAPP_URL + "/api/integrations/vital/callback"
|
||
|
);
|
||
|
return res.status(200).json({
|
||
|
token: token.link_token,
|
||
|
url: `https://link.tryvital.io/?env=${vitalEnv.mode}®ion=${vitalEnv.region}`,
|
||
|
});
|
||
|
} catch (e) {
|
||
|
return res.status(400).json({ error: JSON.stringify(e) });
|
||
|
}
|
||
|
}
|