mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
fix(storage): handle R2 CORS errors & use bundled aws-sdk
1. **Refactor R2 Verification**: Separated bucket existence checks from CORS configuration in `r2Service.js`. Previously, if `HeadBucket` failed (e.g., due to CORS restrictions), the CORS configuration step was skipped. Now, CORS setup is attempted independently, increasing the chance of successful auto-configuration. 2. **Improve Error Messaging**: Enhanced error handling in `verifyPublicAccess` to detect "Failed to fetch" errors and explicitly suggest checking Cloudflare R2 CORS settings in the UI. 3. **Fix AWS SDK Import**: Consolidated the AWS SDK import fix to use the `?bundle` version from `esm.sh` in `r2-s3.js`. This prevents `fs.readFile` runtime errors by ensuring a browser-compatible build is loaded.
This commit is contained in:
1 parent
857536c28f
commit
8097f64ba8
1 file changed
+26
-8
@@ -423,19 +423,29 @@ class R2Service {
|
||||
// 1. Initialize S3
|
||||
const s3 = makeR2Client({ accountId, accessKeyId, secretAccessKey });
|
||||
|
||||
// 2. Ensure bucket/cors (best effort)
|
||||
// 2. Ensure bucket (best effort)
|
||||
try {
|
||||
await ensureBucketExists({ s3, bucket: bucketName });
|
||||
const corsOrigins = this.getCorsOrigins();
|
||||
if (corsOrigins.length > 0) {
|
||||
await ensureBucketCors({ s3, bucket: bucketName, origins: corsOrigins });
|
||||
}
|
||||
} catch (setupErr) {
|
||||
userLogger.warn("Bucket setup warning during verification:", setupErr);
|
||||
userLogger.warn("Bucket creation/check warning during verification:", setupErr);
|
||||
// Continue, assuming bucket might already exist and be configured
|
||||
}
|
||||
|
||||
// 3. Upload Test File
|
||||
// 3. Ensure CORS (best effort)
|
||||
try {
|
||||
const corsOrigins = this.getCorsOrigins();
|
||||
if (corsOrigins.length > 0) {
|
||||
await ensureBucketCors({
|
||||
s3,
|
||||
bucket: bucketName,
|
||||
origins: corsOrigins,
|
||||
});
|
||||
}
|
||||
} catch (corsErr) {
|
||||
userLogger.warn("CORS setup warning during verification:", corsErr);
|
||||
}
|
||||
|
||||
// 4. Upload Test File
|
||||
const file = new File([verifyContent], "verify.txt", { type: "text/plain" });
|
||||
await multipartUpload({
|
||||
s3,
|
||||
@@ -474,7 +484,15 @@ class R2Service {
|
||||
|
||||
} catch (err) {
|
||||
userLogger.error("Verification failed:", err);
|
||||
return { success: false, error: err.message || "Unknown error during verification." };
|
||||
let errorMessage = err.message || "Unknown error during verification.";
|
||||
if (
|
||||
errorMessage.includes("Failed to fetch") ||
|
||||
errorMessage.includes("NetworkError")
|
||||
) {
|
||||
errorMessage +=
|
||||
" This is likely a CORS issue. Please enable CORS in your Cloudflare R2 bucket settings for this domain.";
|
||||
}
|
||||
return { success: false, error: errorMessage };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user