From 49a379ec6cd98412d58f9a18c551d91d8fa167cf Mon Sep 17 00:00:00 2001 From: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Date: Tue, 6 Sep 2022 00:43:49 +0530 Subject: [PATCH] fix: use json.parse to get id (#4001) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: use json.parse to get id * fix: type error * fix: add zod parse * chore: remove type Co-authored-by: Omar López Co-authored-by: Peer Richelsen --- packages/core/EventManager.ts | 16 ++++++++++++---- packages/prisma/zod-utils.ts | 8 ++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/core/EventManager.ts b/packages/core/EventManager.ts index b1f4a2dc18..344fbb70d5 100644 --- a/packages/core/EventManager.ts +++ b/packages/core/EventManager.ts @@ -2,11 +2,13 @@ import { Credential, DestinationCalendar } from "@prisma/client"; import async from "async"; import merge from "lodash/merge"; import { v5 as uuidv5 } from "uuid"; +import { z } from "zod"; import { FAKE_DAILY_CREDENTIAL } from "@calcom/app-store/dailyvideo/lib/VideoApiAdapter"; import { getEventLocationTypeFromApp } from "@calcom/app-store/locations"; import getApps from "@calcom/app-store/utils"; import prisma from "@calcom/prisma"; +import { createdEventSchema } from "@calcom/prisma/zod-utils"; import type { AdditionalInformation, CalendarEvent, NewCalendarEventType } from "@calcom/types/Calendar"; import type { Event } from "@calcom/types/Event"; import type { @@ -61,6 +63,8 @@ type EventManagerUser = { destinationCalendar: DestinationCalendar | null; }; +type createdEventSchema = z.infer; + export default class EventManager { calendarCredentials: Credential[]; videoCredentials: Credential[]; @@ -102,12 +106,16 @@ export default class EventManager { results.push(...(await this.createAllCalendarEvents(evt))); const referencesToCreate = results.map((result) => { + let createdEventObj: createdEventSchema | null = null; + if (typeof result?.createdEvent === "string") { + createdEventObj = createdEventSchema.parse(JSON.parse(result.createdEvent)); + } return { type: result.type, - uid: result.createdEvent?.id?.toString() ?? "", - meetingId: result.createdEvent?.id?.toString(), - meetingPassword: result.createdEvent?.password, - meetingUrl: result.createdEvent?.url, + uid: createdEventObj ? createdEventObj.id : result.createdEvent?.id?.toString() ?? "", + meetingId: createdEventObj ? createdEventObj.id : result.createdEvent?.id?.toString(), + meetingPassword: createdEventObj ? createdEventObj.password : result.createdEvent?.password, + meetingUrl: createdEventObj ? createdEventObj.onlineMeetingUrl : result.createdEvent?.url, externalCalendarId: evt.destinationCalendar?.externalId, credentialId: evt.destinationCalendar?.credentialId, }; diff --git a/packages/prisma/zod-utils.ts b/packages/prisma/zod-utils.ts index 6f810d155b..ee74ce8aec 100644 --- a/packages/prisma/zod-utils.ts +++ b/packages/prisma/zod-utils.ts @@ -112,6 +112,14 @@ export const vitalSettingsUpdateSchema = z.object({ sleepValue: z.number().optional(), }); +export const createdEventSchema = z + .object({ + id: z.string(), + password: z.union([z.string(), z.undefined()]), + onlineMeetingUrl: z.string().nullable(), + }) + .passthrough(); + export const userMetadata = z .object({ proPaidForByTeamId: z.number().optional(),