cal.pub0.org/packages/app-store/jitsivideo/lib/VideoApiAdapter.ts

54 lines
1.9 KiB
TypeScript

import { v4 as uuidv4 } from "uuid";
import type { CalendarEvent } from "@calcom/types/Calendar";
import type { PartialReference } from "@calcom/types/EventManager";
import type { VideoApiAdapter, VideoCallData } from "@calcom/types/VideoApiAdapter";
import getAppKeysFromSlug from "../../_utils/getAppKeysFromSlug";
import { metadata } from "../_metadata";
const JitsiVideoApiAdapter = (): VideoApiAdapter => {
return {
getAvailability: () => {
return Promise.resolve([]);
},
createMeeting: async (eventData: CalendarEvent): Promise<VideoCallData> => {
const appKeys = await getAppKeysFromSlug(metadata.slug);
const meetingPattern = (appKeys.jitsiPathPattern as string) || "{uuid}";
const hostUrl = (appKeys.jitsiHost as string) || "https://meet.jit.si/cal";
//Allows "/{Type}-with-{Attendees}" slug
const meetingID = meetingPattern
.replaceAll("{uuid}", uuidv4())
.replaceAll("{Title}", eventData.title)
.replaceAll("{Event Type Title}", eventData.type)
.replaceAll("{Scheduler}", eventData.attendees.map((a) => a.name).join("-"))
.replaceAll("{Organizer}", eventData.organizer.name)
.replaceAll("{Location}", eventData.location || "")
.replaceAll("{Team}", eventData.team?.name || "")
.replaceAll(" ", "-"); //Last Rule! - Replace all blanks (%20) with dashes;
return Promise.resolve({
type: metadata.type,
id: meetingID,
password: "",
url: hostUrl + "/" + encodeURIComponent(meetingID),
});
},
deleteMeeting: async (): Promise<void> => {
Promise.resolve();
},
updateMeeting: (bookingRef: PartialReference): Promise<VideoCallData> => {
return Promise.resolve({
type: "jitsi_video",
id: bookingRef.meetingId as string,
password: bookingRef.meetingPassword as string,
url: bookingRef.meetingUrl as string,
});
},
};
};
export default JitsiVideoApiAdapter;