mirror of
https://github.com/labring/FastGPT.git
synced 2025-12-25 20:02:47 +00:00
fix: update COS proxy
This commit is contained in:
parent
ae9f7bb993
commit
f4e4592a8e
|
|
@ -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
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
597
pnpm-lock.yaml
597
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
|
@ -2,3 +2,4 @@ packages:
|
||||||
- packages/*
|
- packages/*
|
||||||
- projects/*
|
- projects/*
|
||||||
- scripts/icon
|
- scripts/icon
|
||||||
|
- sdk/*
|
||||||
|
|
|
||||||
|
|
@ -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:*",
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue