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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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