From aaa5531a3a49c03b9ec1cef72be6ab0fe6ae55f1 Mon Sep 17 00:00:00 2001 From: Benny Joo Date: Wed, 30 Oct 2024 07:58:44 -0400 Subject: [PATCH] fix: main google calendar not being connected (#17404) --- .../app-store/googlecalendar/api/callback.ts | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/app-store/googlecalendar/api/callback.ts b/packages/app-store/googlecalendar/api/callback.ts index 1983d91095..798e609146 100644 --- a/packages/app-store/googlecalendar/api/callback.ts +++ b/packages/app-store/googlecalendar/api/callback.ts @@ -1,4 +1,4 @@ -import type { Auth } from "googleapis"; +import type { Auth, calendar_v3 } from "googleapis"; import { google } from "googleapis"; import type { NextApiRequest, NextApiResponse } from "next"; @@ -72,16 +72,12 @@ async function getHandler(req: NextApiRequest, res: NextApiResponse) { auth: oAuth2Client, }); - const cals = await calendar.calendarList.list({ fields: "items(id,summary,primary,accessRole)" }); - const tokenInfo = key.access_token ? await oAuth2Client.getTokenInfo(key.access_token) : null; - const userEmail = tokenInfo?.email ?? null; + const cals = await getAllCalendars(calendar); - let primaryCal = cals.data.items?.find( - (cal) => cal.primary || cal.accessRole === "owner" || cal.id === userEmail - ); + let primaryCal = cals.find((cal) => cal.primary); if (!primaryCal?.id) { // If the primary calendar is not set, set it to the first calendar - primaryCal = cals.data.items?.[0]; + primaryCal = cals[0]; } // Only attempt to update the user's profile photo if the user has granted the required scope @@ -208,6 +204,24 @@ async function updateProfilePhoto(oAuth2Client: Auth.OAuth2Client, userId: numbe } } +async function getAllCalendars(calendar: calendar_v3.Calendar) { + let allCalendars: calendar_v3.Schema$CalendarListEntry[] = []; + let pageToken = null; + + do { + const response: any = await calendar.calendarList.list({ + fields: "items(id,summary,primary,accessRole),nextPageToken", + pageToken: pageToken, + maxResults: 250, // 250 is max + }); + + allCalendars = [...allCalendars, ...(response.data.items ?? [])]; + pageToken = response.data.nextPageToken; + } while (pageToken); + + return allCalendars; +} + export default defaultHandler({ GET: Promise.resolve({ default: defaultResponder(getHandler) }), });