Fix integration failures due to profile picture 403 errors #1085
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When connecting LinkedIn Pages, LinkedIn Personal, Discord, and other platforms, the integration fails completely with a 403 Forbidden error when trying to download profile pictures from Cloudflare-protected CDNs.
This affects users who are not using Cloudflare R2 storage, preventing them from connecting these platforms at all.
Related issues:
Root Cause
The
IntegrationService.createOrUpdateIntegrationmethod inintegration.service.tsattempts to download and store profile pictures usingthis.storage.uploadSimple(picture). When the profile picture URL is protected by Cloudflare (as is the case with LinkedIn and Discord), this request fails with a 403 Forbidden error, causing the entire integration process to crash.Solution
This PR wraps the profile picture upload in a try/catch block to gracefully handle 403 errors and other download failures. When the profile picture cannot be downloaded, the integration continues without the picture instead of failing completely.
Changes Made
Modified
libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts:this.storage.uploadSimple(picture)in a try/catch blockuploadedPictureto remainundefinedwhen download failsBenefits
Testing
Tested locally with LinkedIn Page integration:
Alternative Solutions Considered
This solution provides the best user experience by allowing integrations to succeed while maintaining simplicity.