From 203a36e2b54ddcfe1f5568416b7cc022f55f191c Mon Sep 17 00:00:00 2001 From: Jakob <9266151+chief-nerd@users.noreply.github.com> Date: Wed, 10 May 2023 16:46:14 +0200 Subject: [PATCH] Make Jitsi Host configurable (#8636) * Closes #1847 - adds an environment variable `JITSI_HOST_URL` to configure the Host URL for self hosted instances * Closes #1847 - adds an environment variable `JITSI_HOST_URL` to configure the Host URL for self hosted instances * Closes #1847 - adds an environment variable `JITSI_HOST_URL` to configure the Host URL for self hosted instances * Replace Tab with spaces * Add JITSI_HOST_URL env * Remote Tabs for Spaces * Support jitsi_host key * Remove ENV, add Interface jitsi host URL and fallback * Fix linting issues * Clean code * add missing await * Add configurable meeting slug * Refactor to jitsiHost, remove slug generator * zod default doesnt work right now. So remove it --------- Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Co-authored-by: Hariom Balhara --- packages/app-store/apps.keys-schemas.generated.ts | 2 ++ packages/app-store/apps.schemas.generated.ts | 2 ++ packages/app-store/jitsivideo/DESCRIPTION.md | 2 +- .../app-store/jitsivideo/lib/VideoApiAdapter.ts | 13 +++++++++++-- packages/app-store/jitsivideo/zod.ts | 7 +++++++ .../server/routers/viewer/apps/listLocal.handler.ts | 2 +- 6 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 packages/app-store/jitsivideo/zod.ts diff --git a/packages/app-store/apps.keys-schemas.generated.ts b/packages/app-store/apps.keys-schemas.generated.ts index fe57bb2d9d..e02d3d6e25 100644 --- a/packages/app-store/apps.keys-schemas.generated.ts +++ b/packages/app-store/apps.keys-schemas.generated.ts @@ -9,6 +9,7 @@ import { appKeysSchema as giphy_zod_ts } from "./giphy/zod"; import { appKeysSchema as googlecalendar_zod_ts } from "./googlecalendar/zod"; import { appKeysSchema as gtm_zod_ts } from "./gtm/zod"; import { appKeysSchema as hubspot_zod_ts } from "./hubspot/zod"; +import { appKeysSchema as jitsivideo_zod_ts } from "./jitsivideo/zod"; import { appKeysSchema as larkcalendar_zod_ts } from "./larkcalendar/zod"; import { appKeysSchema as metapixel_zod_ts } from "./metapixel/zod"; import { appKeysSchema as office365calendar_zod_ts } from "./office365calendar/zod"; @@ -37,6 +38,7 @@ export const appKeysSchemas = { googlecalendar: googlecalendar_zod_ts, gtm: gtm_zod_ts, hubspot: hubspot_zod_ts, + jitsivideo: jitsivideo_zod_ts, larkcalendar: larkcalendar_zod_ts, metapixel: metapixel_zod_ts, office365calendar: office365calendar_zod_ts, diff --git a/packages/app-store/apps.schemas.generated.ts b/packages/app-store/apps.schemas.generated.ts index 4362a31744..624e59935b 100644 --- a/packages/app-store/apps.schemas.generated.ts +++ b/packages/app-store/apps.schemas.generated.ts @@ -9,6 +9,7 @@ import { appDataSchema as giphy_zod_ts } from "./giphy/zod"; import { appDataSchema as googlecalendar_zod_ts } from "./googlecalendar/zod"; import { appDataSchema as gtm_zod_ts } from "./gtm/zod"; import { appDataSchema as hubspot_zod_ts } from "./hubspot/zod"; +import { appDataSchema as jitsivideo_zod_ts } from "./jitsivideo/zod"; import { appDataSchema as larkcalendar_zod_ts } from "./larkcalendar/zod"; import { appDataSchema as metapixel_zod_ts } from "./metapixel/zod"; import { appDataSchema as office365calendar_zod_ts } from "./office365calendar/zod"; @@ -37,6 +38,7 @@ export const appDataSchemas = { googlecalendar: googlecalendar_zod_ts, gtm: gtm_zod_ts, hubspot: hubspot_zod_ts, + jitsivideo: jitsivideo_zod_ts, larkcalendar: larkcalendar_zod_ts, metapixel: metapixel_zod_ts, office365calendar: office365calendar_zod_ts, diff --git a/packages/app-store/jitsivideo/DESCRIPTION.md b/packages/app-store/jitsivideo/DESCRIPTION.md index ee6231b3bb..596f97de6f 100644 --- a/packages/app-store/jitsivideo/DESCRIPTION.md +++ b/packages/app-store/jitsivideo/DESCRIPTION.md @@ -3,4 +3,4 @@ items: - jitsi1.jpg --- -Jitsi is a free open-source video conferencing software for web and mobile. Make a call, launch on your own servers, integrate into your app, and more. +Jitsi is a free open-source video conferencing software for web and mobile. Make a call, launch on your own servers, integrate into your app, and more. \ No newline at end of file diff --git a/packages/app-store/jitsivideo/lib/VideoApiAdapter.ts b/packages/app-store/jitsivideo/lib/VideoApiAdapter.ts index cc11262572..9513e96005 100644 --- a/packages/app-store/jitsivideo/lib/VideoApiAdapter.ts +++ b/packages/app-store/jitsivideo/lib/VideoApiAdapter.ts @@ -3,18 +3,27 @@ import { v4 as uuidv4 } from "uuid"; 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 (): Promise => { + const appKeys = await getAppKeysFromSlug(metadata.slug); + const meetingID = uuidv4(); + + // Default Value + const hostUrl = appKeys.jitsiHost || "https://meet.jit.si/cal"; + return Promise.resolve({ - type: "jitsi_video", + type: metadata.type, id: meetingID, password: "", - url: "https://meet.jit.si/cal/" + meetingID, + url: hostUrl + "/" + meetingID, }); }, deleteMeeting: async (): Promise => { diff --git a/packages/app-store/jitsivideo/zod.ts b/packages/app-store/jitsivideo/zod.ts new file mode 100644 index 0000000000..825da51594 --- /dev/null +++ b/packages/app-store/jitsivideo/zod.ts @@ -0,0 +1,7 @@ +import { z } from "zod"; + +export const appKeysSchema = z.object({ + jitsiHost: z.string().optional(), +}); + +export const appDataSchema = z.object({}); diff --git a/packages/trpc/server/routers/viewer/apps/listLocal.handler.ts b/packages/trpc/server/routers/viewer/apps/listLocal.handler.ts index 874f0f9a08..0f2022fdd7 100644 --- a/packages/trpc/server/routers/viewer/apps/listLocal.handler.ts +++ b/packages/trpc/server/routers/viewer/apps/listLocal.handler.ts @@ -67,7 +67,7 @@ export const listLocalHandler = async ({ ctx, input }: ListLocalOptions) => { // `typeof val === 'undefined'` is always slower than !== undefined comparison // it is important to avoid string to string comparisons as much as we can if (keysSchema !== undefined) { - // TODO: Remove the Object.values and reduce to improve the performance. + // TODO: Why don't we parse with schema here? Not doing it makes default() not work in schema. Object.values(keysSchema.keyof()._def.values).reduce((keysObject, key) => { keys[key as string] = ""; return keysObject;