V4.14.1 feature (#5880)

* feat: app split (#5858)

* feat: app split script

* fix: app split

* chore: app split script try-catch

* adjust dashborad page (#5872)

* create page

* create page

* create button

* router name

* bot

* template

* create page

* mobile

* toolfolder

* fix

* fix

* fix build

* split tool select

* img

* doc

* rename enum

* fix page adjust (#5883)

* fix page adjust

* fix ad store

* fix: initv4141 (#5886)

* fix: create app

* doc

* hide api

* doc

* feat: payment pause interactive (#5892)

* fix: copy clbs (#5889)

* fix: copy clbs

* fix: copy clbs

* fix: http protocol handling in baseURL (#5890)

* fix: http protocol handling in baseURL

* ui fix

* auto saved version

* fix

* auto save

* fix: model permission modal (#5895)

* folder

* fix: del app

* navbar

* fix: plugin file selector (#5893)

* fix: plugin file selector

* fix: plugin file selector

* workflow tool inputform

* pick

---------

Co-authored-by: archer <545436317@qq.com>

* fix: workflow tool time

* doc

* fix workorder button (#5896)

* add inform track (#5897)

* remove invalid track

* comment

* feat: marketplace refresh api (#5884)

* marketplace refresh

* fix: helper bot menu button (#5898)

---------

Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com>
Co-authored-by: heheer <heheer@sealos.io>
Co-authored-by: 伍闲犬 <whoeverimf5@gmail.com>
This commit is contained in:
Archer
2025-11-11 14:05:02 +08:00
committed by GitHub
parent 74e16204e3
commit d571c768ea
188 changed files with 8246 additions and 2560 deletions
+18 -1
View File
@@ -79,7 +79,24 @@ export class S3BaseBucket {
return this.delete(src);
}
copy(src: string, dst: string, options?: CopyConditions): ReturnType<Client['copyObject']> {
async copy({
src,
dst,
ttl,
options
}: {
src: string;
dst: string;
ttl: boolean;
options?: CopyConditions;
}): ReturnType<Client['copyObject']> {
if (ttl) {
await MongoS3TTL.create({
minioKey: dst,
bucketName: this.name,
expiredTime: addHours(new Date(), 24)
});
}
return this.client.copyObject(this.name, src, dst, options);
}
@@ -66,6 +66,23 @@ class S3AvatarSource {
await this.deleteAvatar(oldAvatar, session);
}
}
async copyAvatar({
sourceKey,
targetKey,
ttl
}: {
sourceKey: string;
targetKey: string;
ttl: boolean;
}) {
await this.bucket.copy({
src: sourceKey,
dst: targetKey,
ttl
});
return targetKey;
}
}
export function getS3AvatarSource() {
@@ -22,6 +22,10 @@ class S3ChatSource {
return (this.instance ??= new S3ChatSource());
}
static isChatFileKey(key?: string): key is `${typeof S3Sources.chat}/${string}` {
return key?.startsWith(`${S3Sources.chat}/`) ?? false;
}
async createGetChatFileURL(params: { key: string; expiredHours?: number; external: boolean }) {
const { key, expiredHours = 1, external = false } = params; // 默认一个小时