From fcdf209296ff3048df8306622262f15cbbb0b7f3 Mon Sep 17 00:00:00 2001 From: xhamzax Date: Tue, 14 Apr 2026 06:33:35 +0100 Subject: [PATCH] fix: add retry config for Google Calendar PATCH requests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Google Calendar client was created without a retryConfig, so it used gaxios defaults which don't include PATCH in httpMethodsToRetry and don't include 403 in statusCodesToRetry. When Google returns a transient 403 rateLimitExceeded on a PATCH request (used to update event description, location, and conference data after creation), the request was silently dropped — causing calendar/booking desync. Add an explicit retryConfig that includes PATCH in the retryable methods and 403 in the retryable status codes, matching Google's error handling docs which state that rateLimitExceeded can return either 403 or 429. Fixes #28834 --- .../app-store/googlecalendar/lib/CalendarAuth.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/app-store/googlecalendar/lib/CalendarAuth.ts b/packages/app-store/googlecalendar/lib/CalendarAuth.ts index 6ead261afb5a02..79251c3fe42e8a 100644 --- a/packages/app-store/googlecalendar/lib/CalendarAuth.ts +++ b/packages/app-store/googlecalendar/lib/CalendarAuth.ts @@ -303,6 +303,21 @@ export class CalendarAuth { return new calendar_v3.Calendar({ auth: googleAuthClient, + // Override gaxios retry defaults so that transient Google API errors + // on PATCH requests (used to update event description, location, and + // conference data after creation) are retried instead of silently + // dropped. Google returns 403 for rateLimitExceeded in addition to + // 429 — both should trigger exponential backoff. See #28834. + retryConfig: { + retry: 3, + httpMethodsToRetry: ["GET", "HEAD", "PUT", "OPTIONS", "DELETE", "PATCH"], + statusCodesToRetry: [ + [100, 199], + [403, 403], + [429, 429], + [500, 599], + ], + }, }); } }