block / block/buzz

Proposal: Graceful cloud storage fallback (Google Drive / S3) when media servers return 5xx errors

Open
#7,098 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
32.7k
Forks
4.3k
Avg merge
1d 13h
Merged PRs (30d)
253

Description

### Problem Statement

During Blossom / NIP-96 / relay media store outages, quota exhaustion, or server errors (HTTP 500, 502, 503, 504), attachment uploads fail completely with a hard error.

When a media server goes down:
- Users cannot share documents, images, or media files within the chat timeline.
- The workflow is interrupted, forcing users to manually upload files via a third-party service, copy links, and paste raw URLs into the message composer.

### Proposed Solution

Introduce an intelligent fallback mechanism in the desktop media upload pipeline:

1. **Availability Error Detection**: Pure detector (\isRelayUnavailableError\) that intercepts HTTP 5xx responses (500, 502, 503, 504) and server availability timeouts while leaving 4xx client rejections untouched.
2. **Graceful Cloud Routing**:
- If an external cloud storage provider (e.g., Google Drive, S3/R2) is connected, automatically route the upload to the user's storage provider.
- Format the resulting upload link into the standard timeline attachment schema so other community members can preview or download the file seamlessly.
3. **Opt-in / Configuration**:
- If no provider is configured, surface a non-blocking toast with a direct action to link external cloud storage in Settings for fallback resilience.

### Architecture

- **Detector**: Lightweight status checker in the upload pipeline.
- **Provider Interface**: Pluggable storage abstraction allowing multiple storage adapters (Google Drive, S3-compatible endpoints, etc.).
- **Timeline Integration**: Rich attachment card formatting for externally hosted files.

### Discussion & Maintainer Feedback

- Would upstream prefer a general pluggable storage fallback interface in \desktop/\?
- What cloud storage providers would be most beneficial as default reference implementations (e.g., Google Drive, S3/R2 presigned uploads)?

We have implemented and validated this pattern in our builds during live relay outages with zero regressions in the standard Blossom/relay path. Happy to open a dedicated PR based on maintainer guidance.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.