fix: update COS proxy

This commit is contained in:
xqvvu 2025-12-25 13:17:43 +08:00
parent ae9f7bb993
commit f4e4592a8e
No known key found for this signature in database
GPG Key ID: 8CDDE20C9D911EE4
9 changed files with 591 additions and 123 deletions

View File

@ -7,6 +7,7 @@ import {
type IOssStorageOptions,
type IStorageOptions
} from '@fastgpt-sdk/storage';
import { addLog } from '../../system/log';
export class S3PrivateBucket extends S3BaseBucket {
constructor() {
@ -87,9 +88,20 @@ export class S3PrivateBucket extends S3BaseBucket {
super(client, externalClient);
client.ensureBucket();
if (externalClient) {
externalClient.ensureBucket();
}
client
.ensureBucket()
.then((data) => {
console.info(`Bucket "${client.bucketName}" exists:`, data);
})
.catch((error) => {
addLog.error(`Failed to ensure bucket "${client.bucketName}" exists:`, error);
});
externalClient?.ensureBucket().catch((error) => {
addLog.error(
`Failed to ensure external bucket "${externalClient.bucketName}" exists:`,
error
);
});
}
}

View File

@ -8,6 +8,7 @@ import {
MinioStorageAdapter,
type IStorageOptions
} from '@fastgpt-sdk/storage';
import { addLog } from '../../system/log';
export class S3PublicBucket extends S3BaseBucket {
constructor() {
@ -88,19 +89,30 @@ export class S3PublicBucket extends S3BaseBucket {
super(client, externalClient);
client.ensureBucket().then(() => {
if (client instanceof MinioStorageAdapter) {
client.ensurePublicBucketPolicy();
}
});
client
.ensureBucket()
.then(() => {
if (client instanceof MinioStorageAdapter) {
client.ensurePublicBucketPolicy();
}
})
.catch((error) => {
addLog.error(`Failed to ensure bucket "${client.bucketName}" exists:`, error);
});
if (externalClient) {
externalClient.ensureBucket().then(() => {
externalClient
?.ensureBucket()
.then(() => {
if (externalClient instanceof MinioStorageAdapter) {
externalClient.ensurePublicBucketPolicy();
}
})
.catch((error) => {
addLog.error(
`Failed to ensure external bucket "${externalClient.bucketName}" exists:`,
error
);
});
}
}
createPublicUrl(objectKey: string): string {

View File

@ -3,7 +3,7 @@
"version": "1.0.0",
"type": "module",
"dependencies": {
"@fastgpt-sdk/storage": "0.5.4",
"@fastgpt-sdk/storage": "0.5.7",
"@fastgpt/global": "workspace:*",
"@maxmind/geoip2-node": "^6.3.4",
"@modelcontextprotocol/sdk": "^1.24.0",

File diff suppressed because it is too large Load Diff

View File

@ -2,3 +2,4 @@ packages:
- packages/*
- projects/*
- scripts/icon
- sdk/*

View File

@ -20,7 +20,7 @@
"@dagrejs/dagre": "^1.1.4",
"@emotion/react": "11.11.1",
"@emotion/styled": "11.11.0",
"@fastgpt-sdk/storage": "0.5.4",
"@fastgpt-sdk/storage": "0.5.7",
"@fastgpt/global": "workspace:*",
"@fastgpt/service": "workspace:*",
"@fastgpt/web": "workspace:*",

View File

@ -1,7 +1,7 @@
import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@fastgpt/service/common/response';
import { request } from 'http';
import { Agent, request } from 'http';
import { FastGPTProUrl } from '@fastgpt/service/common/system/constants';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
@ -25,7 +25,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
port: parsedUrl.port,
path: requestPath,
method: req.method,
headers: req.headers
headers: req.headers,
agent: new Agent()
});
req.pipe(requestResult);

View File

@ -1,7 +1,7 @@
{
"name": "@fastgpt-sdk/storage",
"private": false,
"version": "0.5.4",
"version": "0.5.7",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",

View File

@ -49,10 +49,17 @@ export class CosStorageAdapter implements IStorage {
SecretKey: options.credentials.secretAccessKey,
UseAccelerate: options.useAccelerate,
Protocol: options.protocol,
Domain: options.domain
Domain: options.domain,
Proxy: options.proxy
});
}
private handleCosError(err: any): Error {
const error = new Error(err.message || 'Unknown COS error');
Object.assign(error, { ...err });
return error;
}
async checkObjectExists(params: ExistsObjectParams): Promise<ExistsObjectResult> {
const { key } = params;
@ -64,14 +71,14 @@ export class CosStorageAdapter implements IStorage {
Region: this.options.region,
Key: key
},
function (err, _data) {
(err, _data) => {
if (err && err.statusCode === 404) {
exists = false;
return resolve();
}
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
exists = true;
@ -97,9 +104,9 @@ export class CosStorageAdapter implements IStorage {
Bucket: this.options.bucket,
Region: this.options.region
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
resolve(data);
@ -135,9 +142,9 @@ export class CosStorageAdapter implements IStorage {
Bucket: this.options.bucket,
Region: this.options.region
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
resolve(data);
@ -176,9 +183,9 @@ export class CosStorageAdapter implements IStorage {
ContentLength: contentLength,
Headers: Object.keys(headers).length ? headers : undefined
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
resolve(data);
}
@ -201,9 +208,9 @@ export class CosStorageAdapter implements IStorage {
Key: params.key,
Output: passThrough
},
function (err, _data) {
(err, _data) => {
if (err) {
passThrough.destroy(isError(err.error) ? err.error : new Error(err.message));
passThrough.destroy(isError(err.error) ? err.error : this.handleCosError(err));
}
}
);
@ -225,9 +232,9 @@ export class CosStorageAdapter implements IStorage {
Region: this.options.region,
Key: key
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
resolve(data);
}
@ -250,9 +257,9 @@ export class CosStorageAdapter implements IStorage {
Region: this.options.region,
Objects: keys.map((key) => ({ Key: key }))
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
resolve(data);
}
@ -286,7 +293,7 @@ export class CosStorageAdapter implements IStorage {
},
(listErr, listData) => {
if (listErr) {
return reject(listErr);
return reject(this.handleCosError(listErr));
}
if (!listData.Contents || listData.Contents.length === 0) {
@ -301,7 +308,7 @@ export class CosStorageAdapter implements IStorage {
Region: this.options.region,
Objects: objectsToDelete
},
function (deleteErr, deleteData) {
(deleteErr, deleteData) => {
if (deleteErr) {
fails.push(...objectsToDelete.map((content) => content.Key));
if (listData.IsTruncated === 'true') {
@ -362,9 +369,9 @@ export class CosStorageAdapter implements IStorage {
Sign: true,
Method: 'PUT'
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
resolve(data.Url);
}
@ -393,9 +400,9 @@ export class CosStorageAdapter implements IStorage {
Sign: true,
Method: 'GET'
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
resolve(data.Url);
}
@ -442,9 +449,9 @@ export class CosStorageAdapter implements IStorage {
Marker: marker,
MaxKeys: 1000
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
keys = keys.concat(data.Contents?.map((content) => content.Key).filter(isNotNil) ?? []);
@ -481,9 +488,9 @@ export class CosStorageAdapter implements IStorage {
Key: targetKey,
CopySource: copySource
},
function (err, data) {
(err, data) => {
if (err) {
return reject(err);
return reject(this.handleCosError(err));
}
resolve(data);
}