diff --git a/lib/services/microsoft-calendar-sync.ts b/lib/services/microsoft-calendar-sync.ts index 9cbf96e..d10c0ae 100644 --- a/lib/services/microsoft-calendar-sync.ts +++ b/lib/services/microsoft-calendar-sync.ts @@ -435,6 +435,10 @@ export async function updateMicrosoftEvent( eventId, }); } catch (error: any) { + // Check if it's a permissions error (403) - likely missing Calendars.ReadWrite scope + const isPermissionError = error.response?.status === 403; + const errorCode = error.response?.data?.error?.code; + logger.error('Error updating Microsoft event', { userId, email, @@ -443,6 +447,11 @@ export async function updateMicrosoftEvent( error: error instanceof Error ? error.message : String(error), responseStatus: error.response?.status, responseData: error.response?.data, + isPermissionError, + errorCode, + suggestion: isPermissionError + ? 'Token likely missing Calendars.ReadWrite scope. User needs to re-authenticate the Microsoft account in Courrier page to get new permissions.' + : undefined, }); throw error; } @@ -483,6 +492,10 @@ export async function deleteMicrosoftEvent( eventId, }); } catch (error: any) { + // Check if it's a permissions error (403) - likely missing Calendars.ReadWrite scope + const isPermissionError = error.response?.status === 403; + const errorCode = error.response?.data?.error?.code; + logger.error('Error deleting Microsoft event', { userId, email, @@ -491,6 +504,11 @@ export async function deleteMicrosoftEvent( error: error instanceof Error ? error.message : String(error), responseStatus: error.response?.status, responseData: error.response?.data, + isPermissionError, + errorCode, + suggestion: isPermissionError + ? 'Token likely missing Calendars.ReadWrite scope. User needs to re-authenticate the Microsoft account in Courrier page to get new permissions.' + : undefined, }); throw error; }