From 496fcdfabc6eee323e41b1e4d37e09a48c144af0 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Mon, 5 Jul 2021 19:50:54 +0000 Subject: [PATCH] Minimized msgraph calls while event listing by batching --- lib/calendarClient.ts | 54 +++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/lib/calendarClient.ts b/lib/calendarClient.ts index 4d8d7421b6..3cebe97c7e 100644 --- a/lib/calendarClient.ts +++ b/lib/calendarClient.ts @@ -225,28 +225,38 @@ const MicrosoftOffice365Calendar = (credential): CalendarApiAdapter => { ? listCalendars().then((cals) => cals.map((e) => e.externalId)) : Promise.resolve(selectedCalendarIds).then((x) => x) ).then((ids: string[]) => { - const urls = ids.map( - (calendarId) => - "https://graph.microsoft.com/v1.0/me/calendars/" + calendarId + "/events" + filter - ); - return Promise.all( - urls.map((url) => - fetch(url, { - method: "get", - headers: { - Authorization: "Bearer " + accessToken, - Prefer: 'outlook.timezone="Etc/GMT"', - }, - }) - .then(handleErrorsJson) - .then((responseBody) => - responseBody.value.map((evt) => ({ - start: evt.start.dateTime + "Z", - end: evt.end.dateTime + "Z", - })) - ) - ) - ).then((results) => results.reduce((acc, events) => acc.concat(events), [])); + const requests = ids.map((calendarId, id) => ({ + id, + method: "GET", + headers: { + Prefer: 'outlook.timezone="Etc/GMT"', + }, + url: `/me/calendars/${calendarId}/events${filter}`, + })); + + return fetch("https://graph.microsoft.com/v1.0/$batch", { + method: "POST", + headers: { + Authorization: "Bearer " + accessToken, + "Content-Type": "application/json", + }, + body: JSON.stringify({ requests }), + }) + .then(handleErrorsJson) + .then((responseBody) => + responseBody.responses.reduce( + (acc, subResponse) => + acc.concat( + subResponse.body.value.map((evt) => { + return { + start: evt.start.dateTime + "Z", + end: evt.end.dateTime + "Z", + }; + }) + ), + [] + ) + ); }); }) .catch((err) => {