From ff4850354c92aa19fe5f9944d08d56d01df6f0e8 Mon Sep 17 00:00:00 2001 From: Nicolo Stanciu Date: Sat, 29 Nov 2025 18:20:55 +0000 Subject: [PATCH] Fix integration failures due to profile picture 403 errors Wraps profile picture upload in try/catch block to gracefully handle 403 Forbidden errors from Cloudflare-protected CDNs (LinkedIn, Discord). When profile picture download fails, the integration continues without the picture instead of failing completely. This allows users to connect LinkedIn Pages, LinkedIn Personal, Discord and other platforms without requiring Cloudflare R2 storage. Fixes #972 --- .../integrations/integration.service.ts | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts index 554c6c350..b46f99b75 100644 --- a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts @@ -104,11 +104,23 @@ export class IntegrationService { timezone?: number, customInstanceDetails?: string ) { - const uploadedPicture = picture - ? picture?.indexOf('imagedelivery.net') > -1 - ? picture - : await this.storage.uploadSimple(picture) - : undefined; + let uploadedPicture = undefined; + + if (picture) { + if (picture?.indexOf('imagedelivery.net') > -1) { + uploadedPicture = picture; + } else { + try { + uploadedPicture = await this.storage.uploadSimple(picture); + } catch (error) { + console.error( + 'Failed to upload profile picture, continuing without it:', + error.message || error + ); + // uploadedPicture remains undefined - integration continues + } + } + } return this._integrationRepository.createOrUpdateIntegration( additionalSettings,