From 7a49042d7f76b20fad82e9d75ae4e42d1605b67a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 07:29:24 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20Configure=20S3=20client?= =?UTF-8?q?=20to=20bypass=20proxy=20for=20reliable=20uploads?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: GeorgeDong32 <98630204+GeorgeDong32@users.noreply.github.com> --- src/main/services/S3Storage.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/services/S3Storage.ts b/src/main/services/S3Storage.ts index 1f0760de7f..fd6af1e6f8 100644 --- a/src/main/services/S3Storage.ts +++ b/src/main/services/S3Storage.ts @@ -6,9 +6,11 @@ import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3' +import { FetchHttpHandler } from '@smithy/fetch-http-handler' import { loggerService } from '@logger' import type { S3Config } from '@types' import * as net from 'net' +import { Agent as UndiciAgent } from 'undici' import { Readable } from 'stream' const logger = loggerService.withContext('S3Storage') @@ -57,6 +59,20 @@ export default class S3Storage { } })() + // Create a direct dispatcher for S3 to bypass proxy + // This prevents proxy interference with large file uploads that can cause incomplete transfers + const directDispatcher = new UndiciAgent({ + connect: { + timeout: 60000 // 60 second connection timeout + } + }) + + // Use FetchHttpHandler with direct dispatcher to bypass global proxy settings + const requestHandler = new FetchHttpHandler({ + requestTimeout: 300000, // 5 minute request timeout for large files + dispatcher: directDispatcher + }) + this.client = new S3Client({ region, endpoint: endpoint || undefined, @@ -64,7 +80,8 @@ export default class S3Storage { accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }, - forcePathStyle: usePathStyle + forcePathStyle: usePathStyle, + requestHandler }) this.bucket = bucket