diff --git a/packages/app-store/googlecalendar/lib/CalendarService.ts b/packages/app-store/googlecalendar/lib/CalendarService.ts index 55f2ee3e6f..03cf9b17eb 100644 --- a/packages/app-store/googlecalendar/lib/CalendarService.ts +++ b/packages/app-store/googlecalendar/lib/CalendarService.ts @@ -120,36 +120,36 @@ export default class GoogleCalendarService implements Calendar { const calendar = google.calendar({ version: "v3", }); + const selectedCalendar = calEventRaw.destinationCalendar?.externalId + ? calEventRaw.destinationCalendar.externalId + : "primary"; calendar.events.insert( { auth: myGoogleAuth, - calendarId: calEventRaw.destinationCalendar?.externalId - ? calEventRaw.destinationCalendar.externalId - : "primary", + calendarId: selectedCalendar, requestBody: payload, conferenceDataVersion: 1, }, - function (err, event) { - if (err || !event?.data) { - console.error("There was an error contacting google calendar service: ", err); - return reject(err); + function (error, event) { + if (error || !event?.data) { + console.error("There was an error contacting google calendar service: ", error); + return reject(error); } - calendar.events.patch({ - // Update the same event but this time we know the hangout link - calendarId: calEventRaw.destinationCalendar?.externalId - ? calEventRaw.destinationCalendar.externalId - : "primary", - auth: myGoogleAuth, - eventId: event.data.id || "", - requestBody: { - description: getRichDescription({ - ...calEventRaw, - additionalInformation: { hangoutLink: event.data.hangoutLink || "" }, - }), - }, - }); - + if (event && event.data.id && event.data.hangoutLink) { + calendar.events.patch({ + // Update the same event but this time we know the hangout link + calendarId: selectedCalendar, + auth: myGoogleAuth, + eventId: event.data.id || "", + requestBody: { + description: getRichDescription({ + ...calEventRaw, + additionalInformation: { hangoutLink: event.data.hangoutLink }, + }), + }, + }); + } return resolve({ uid: "", ...event.data, diff --git a/packages/core/CalendarManager.ts b/packages/core/CalendarManager.ts index e945313e0b..b8739d4a0b 100644 --- a/packages/core/CalendarManager.ts +++ b/packages/core/CalendarManager.ts @@ -160,10 +160,17 @@ export const createEvent = async ( // TODO: Surfice success/error messages coming from apps to improve end user visibility const creationResult = calendar - ? await calendar.createEvent(calEvent).catch(async (e) => { - await sendBrokenIntegrationEmail(calEvent, "calendar"); - log.error("createEvent failed", e, calEvent); + ? await calendar.createEvent(calEvent).catch(async (error) => { success = false; + /** + * There is a time when selectedCalendar externalId doesn't match witch certain credential + * so google returns 404. + * */ + if (error?.code === 404) { + return undefined; + } + await sendBrokenIntegrationEmail(calEvent, "calendar"); + log.error("createEvent failed", error, calEvent); return undefined; }) : undefined; diff --git a/packages/core/EventManager.ts b/packages/core/EventManager.ts index 2ac4e09020..59064232ee 100644 --- a/packages/core/EventManager.ts +++ b/packages/core/EventManager.ts @@ -141,8 +141,8 @@ export default class EventManager { const referencesToCreate = results.map((result) => { return { type: result.type, - uid: result.createdEvent?.id.toString() ?? "", - meetingId: result.createdEvent?.id.toString(), + uid: result.createdEvent?.id?.toString() ?? "", + meetingId: result.createdEvent?.id?.toString(), meetingPassword: result.createdEvent?.password, meetingUrl: result.createdEvent?.url, externalCalendarId: evt.destinationCalendar?.externalId,