From af6deb99cd24a69a189b1fdd1df51c8f7816dcda Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Thu, 26 Mar 2026 00:05:30 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=94=AF=E6=8C=81=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E5=88=B0=E7=81=AB=E5=B1=B1=E4=BA=91tos=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=9F=9F=E5=90=8D=E8=AF=81=E4=B9=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/certd/certd/issues/693 --- .trae/skills/agent.md | 14 ++ packages/ui/certd-server/package.json | 1 + .../plugin-volcengine/plugins/index.ts | 1 + .../plugins/plugin-deploy-to-cdn.ts | 3 +- .../plugins/plugin-deploy-to-tos.ts | 199 ++++++++++++++++++ .../plugins/plugin-volcengine/ve-client.ts | 13 ++ pnpm-lock.yaml | 194 ++++++++++++----- 7 files changed, 377 insertions(+), 48 deletions(-) create mode 100644 .trae/skills/agent.md create mode 100644 packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-tos.ts diff --git a/.trae/skills/agent.md b/.trae/skills/agent.md new file mode 100644 index 000000000..c89feffc2 --- /dev/null +++ b/.trae/skills/agent.md @@ -0,0 +1,14 @@ +你是一名资深nodejs工程师,擅长开发Certd开源系统的任务插件。 +certd是一款全自动证书申请部署管理工具,基于流水线的方式,通过里面申请证书插件申请证书,然后将证书传递给下一个部署任务插件,不同的部署任务插件将证书部署到用户的各个应用系统当中。 + +certd插件分成以下几种类型: +Access:存储用户的第三放应用的授权数据,比如用户名密码,accessSecret 或 accessToken等。同时它里面的方法还负责对接第三方的api接口 +Task: 部署任务插件,它继承AbstractTaskPlugin类,被流水线调用execute方法,将证书部署到对应的应用上 +DnsProvider: DNS提供商插件,它用于在ACME申请证书时给域名添加txt解析记录。 + +在开始工作前,请阅读并加载.trae/skills下面的技能,根据skills进行相应的插件开发 +当开发过程中遇到问题,需要参考plugins目录下的其他插件,或者用户提醒你更好的做法时,你需要总结经验,更新相应的skills,让skills越来越完善,能够在以后得新插件开发中具备指导意义。 + +一般调用的api接口文档会比较复杂,你不知道接口是什么时,请务必询问用户,让用户提供API接口文档 + +完成开发后无需测试,通知用户自己去测试 \ No newline at end of file diff --git a/packages/ui/certd-server/package.json b/packages/ui/certd-server/package.json index 7662e95f0..3041fc083 100644 --- a/packages/ui/certd-server/package.json +++ b/packages/ui/certd-server/package.json @@ -87,6 +87,7 @@ "@simplewebauthn/server": "^13.2.3", "@ucloud-sdks/ucloud-sdk-js": "^0.2.4", "@volcengine/openapi": "^1.28.1", + "@volcengine/tos-sdk": "^2.9.1", "ali-oss": "^6.21.0", "alipay-sdk": "^4.13.0", "axios": "^1.9.0", diff --git a/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/index.ts b/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/index.ts index 21483913a..7fe79fa72 100644 --- a/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/index.ts @@ -5,3 +5,4 @@ export * from './plugin-deploy-to-alb.js' export * from './plugin-deploy-to-live.js' export * from './plugin-deploy-to-dcdn.js' export * from './plugin-deploy-to-vod.js' +export * from './plugin-deploy-to-tos.js' diff --git a/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-cdn.ts b/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-cdn.ts index 123eb9671..edac3338f 100644 --- a/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-cdn.ts +++ b/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-cdn.ts @@ -100,7 +100,8 @@ export class VolcengineDeployToCDN extends AbstractTaskPlugin { await service.UpdateCdnConfig({ Domain: domain, HTTPS: { - CertInfo: { CertId: certId }, + CertInfo: { CertId: certId as string }, + Switch: true, } }) this.logger.info(`部署域名${domain}证书成功`); diff --git a/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-tos.ts b/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-tos.ts new file mode 100644 index 000000000..dfdfedd42 --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-volcengine/plugins/plugin-deploy-to-tos.ts @@ -0,0 +1,199 @@ +import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from "@certd/pipeline"; +import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from "@certd/plugin-lib"; +import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert"; +import { optionsUtils } from "@certd/basic"; +import { VolcengineAccess } from "../access.js"; +import { VolcengineClient } from "../ve-client.js"; + +@IsTaskPlugin({ + name: 'VolcengineDeployToTOS', + title: '火山引擎-部署证书至TOS自定义域名', + icon: 'svg:icon-volcengine', + group: pluginGroups.volcengine.key, + desc: '支持TOS自定义域名的HTTPS证书部署', + default: { + strategy: { + runStrategy: RunStrategy.SkipWhenSucceed, + }, + }, +}) +export class VolcengineDeployToTOS extends AbstractTaskPlugin { + @TaskInput({ + title: '域名证书', + helper: '请选择前置任务输出的域名证书', + component: { + name: 'output-selector', + from: [...CertApplyPluginNames, 'VolcengineUploadToCertCenter'], + }, + required: true, + }) + cert!: CertInfo | string; + + @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) + certDomains!: string[]; + + + @TaskInput({ + title: 'Access授权', + helper: '火山引擎AccessKeyId、AccessKeySecret', + component: { + name: 'access-selector', + type: 'volcengine', + }, + required: true, + }) + accessId!: string; + + @TaskInput({ + title: '地域', + helper: 'TOS服务所在地域', + component: { + name: 'a-select', + options:[ + { label: "华北2(北京)", value: "cn-beijing" }, + { label: "华东2(上海)", value: "cn-shanghai" }, + { label: "华南1(广州)", value: "cn-guangzhou" }, + { label: "中国香港", value: "cn-hongkong" }, + { label: "亚太东南(柔佛)", value: "ap-southeast-1" }, + { label: "亚太东南(雅加达)", value: "ap-southeast-3" }, + ] + }, + value: 'cn-beijing', + required: true, + }) + region:string = "cn-beijing" + + @TaskInput({ + title: 'Bucket', + helper: '存储桶名称', + component: { + name: 'remote-auto-complete', + vModel: 'value', + type: 'plugin', + action: 'onGetBucketList', + search: false, + pager: false, + watches: ['accessId', 'region'] + }, + required: true, + }) + bucket!: string; + + @TaskInput( + createRemoteSelectInputDefine({ + title: 'TOS自定义域名', + helper: '你在火山引擎上配置的TOS自定义域名,比如:example.com', + action: VolcengineDeployToTOS.prototype.onGetDomainList.name, + watches: ['certDomains', 'accessId', 'region', 'bucket'], + required: true, + }) + ) + domainName!: string | string[]; + + + async onInstance() {} + async execute(): Promise { + this.logger.info('开始部署证书到火山引擎TOS自定义域名'); + const access = await this.getAccess(this.accessId); + + this.logger.info(`bucket: ${this.bucket}, region: ${this.region}, domainName: ${this.domainName}`); + + const client = new VolcengineClient({ + logger: this.logger, + access, + http: this.http + }); + + const tosService = await client.getTOSService({ region: this.region }); + + if (!this.cert) { + throw new Error('你还未选择证书'); + } + let certId = this.cert + if (typeof certId !== 'string') { + const certInfo = this.cert as CertInfo + this.logger.info(`开始上传证书`) + const certService = await client.getCertCenterService(); + certId = await certService.ImportCertificate({ + certName: this.appendTimeSuffix('certd'), + cert: certInfo + }) + this.logger.info(`上传证书成功:${certId}`); + }else{ + this.logger.info(`使用已有证书ID:${certId}`); + } + + for (const domain of this.domainName) { + this.logger.info(`开始部署域名${domain}证书`) + await tosService.putBucketCustomDomain({ + bucket: this.bucket, + customDomainRule: { + Domain: domain, + CertId: certId as string + } + }) + this.logger.info(`部署域名${domain}证书成功`); + await this.ctx.utils.sleep(1000) + } + + this.logger.info('部署完成'); + } + + async onGetDomainList(data: any) { + if (!this.accessId || !this.bucket) { + throw new Error('请选择Access授权和Bucket'); + } + const access = await this.getAccess(this.accessId); + + const client = new VolcengineClient({ + logger: this.logger, + access, + http: this.http + }); + + const tosService = await client.getTOSService({ region: this.region }); + + const res = await tosService.getBucketCustomDomain({ + bucket: this.bucket + }); + + const list = res?.data?.CustomDomainRules || []; + if (!list || list.length === 0) { + throw new Error('找不到TOS自定义域名,您可以手动输入'); + } + + const options = list.map((item: any) => { + return { + value: item.Domain, + label: item.Domain, + domain: item.Domain, + }; + }); + + return optionsUtils.buildGroupOptions(options, this.certDomains); + } + + async onGetBucketList(data: any) { + if (!this.accessId) { + throw new Error('请选择Access授权'); + } + const access = await this.getAccess(this.accessId); + + const client = new VolcengineClient({ + logger: this.logger, + access, + http: this.http + }); + + const tosService = await client.getTOSService({ region: this.region }); + + const res = await tosService.listBuckets(); + + const buckets = res?.data?.Buckets || []; + return buckets.map((bucket: any) => ({ + label: `${bucket.Name}<${bucket.Location}>`, + value: bucket.Name + })); + } +} +new VolcengineDeployToTOS(); \ No newline at end of file diff --git a/packages/ui/certd-server/src/plugins/plugin-volcengine/ve-client.ts b/packages/ui/certd-server/src/plugins/plugin-volcengine/ve-client.ts index 3ee02041d..00734ec35 100644 --- a/packages/ui/certd-server/src/plugins/plugin-volcengine/ve-client.ts +++ b/packages/ui/certd-server/src/plugins/plugin-volcengine/ve-client.ts @@ -124,6 +124,19 @@ export class VolcengineClient { return service; } + async getTOSService(opts: { region?: string }) { + const { TosClient } = await import("@volcengine/tos-sdk"); + + const client = new TosClient({ + accessKeyId: this.opts.access.accessKeyId, + accessKeySecret: this.opts.access.secretAccessKey, + region: opts.region, + endpoint: `tos-${opts.region}.volces.com` + }); + + return client; + } + async getStsService() { const CommonService = await this.getServiceCls(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c07d4fe3..9aea6b918 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,7 +49,7 @@ importers: packages/core/acme-client: dependencies: '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../basic '@peculiar/x509': specifier: ^1.11.0 @@ -213,10 +213,10 @@ importers: packages/core/pipeline: dependencies: '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../basic '@certd/plus-core': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../pro/plus-core dayjs: specifier: ^1.11.7 @@ -412,7 +412,7 @@ importers: packages/libs/lib-k8s: dependencies: '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/basic '@kubernetes/client-node': specifier: 0.21.0 @@ -452,19 +452,19 @@ importers: packages/libs/lib-server: dependencies: '@certd/acme-client': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/acme-client '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/basic '@certd/pipeline': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/pipeline '@certd/plugin-lib': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../plugins/plugin-lib '@certd/plus-core': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../pro/plus-core '@midwayjs/cache': specifier: 3.14.0 @@ -610,16 +610,16 @@ importers: packages/plugins/plugin-cert: dependencies: '@certd/acme-client': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/acme-client '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/basic '@certd/pipeline': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/pipeline '@certd/plugin-lib': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../plugin-lib psl: specifier: ^1.9.0 @@ -683,16 +683,16 @@ importers: specifier: ^3.964.0 version: 3.964.0(aws-crt@1.26.2) '@certd/acme-client': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/acme-client '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/basic '@certd/pipeline': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/pipeline '@certd/plus-core': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../pro/plus-core '@kubernetes/client-node': specifier: 0.21.0 @@ -783,16 +783,16 @@ importers: packages/pro/commercial-core: dependencies: '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/basic '@certd/lib-server': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../libs/lib-server '@certd/pipeline': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/pipeline '@certd/plus-core': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../plus-core '@midwayjs/core': specifier: 3.20.11 @@ -868,16 +868,16 @@ importers: packages/pro/plugin-plus: dependencies: '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/basic '@certd/pipeline': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/pipeline '@certd/plugin-lib': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../plugins/plugin-lib '@certd/plus-core': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../plus-core crypto-js: specifier: ^4.2.0 @@ -953,7 +953,7 @@ importers: packages/pro/plus-core: dependencies: '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/basic dayjs: specifier: ^1.11.7 @@ -1249,10 +1249,10 @@ importers: version: 0.1.3(zod@3.24.4) devDependencies: '@certd/lib-iframe': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../libs/lib-iframe '@certd/pipeline': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/pipeline '@rollup/plugin-commonjs': specifier: ^25.0.7 @@ -1447,46 +1447,46 @@ importers: specifier: ^3.990.0 version: 3.990.0(aws-crt@1.26.2) '@certd/acme-client': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/acme-client '@certd/basic': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/basic '@certd/commercial-core': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../pro/commercial-core '@certd/cv4pve-api-javascript': specifier: ^8.4.2 version: 8.4.2 '@certd/jdcloud': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../libs/lib-jdcloud '@certd/lib-huawei': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../libs/lib-huawei '@certd/lib-k8s': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../libs/lib-k8s '@certd/lib-server': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../libs/lib-server '@certd/midway-flyway-js': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../libs/midway-flyway-js '@certd/pipeline': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../core/pipeline '@certd/plugin-cert': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../plugins/plugin-cert '@certd/plugin-lib': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../plugins/plugin-lib '@certd/plugin-plus': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../pro/plugin-plus '@certd/plus-core': - specifier: ^1.39.2 + specifier: ^1.39.6 version: link:../../pro/plus-core '@google-cloud/publicca': specifier: ^1.3.0 @@ -1557,6 +1557,9 @@ importers: '@volcengine/openapi': specifier: ^1.28.1 version: 1.30.1(buffer@6.0.3) + '@volcengine/tos-sdk': + specifier: ^2.9.1 + version: 2.9.1 ali-oss: specifier: ^6.21.0 version: 6.23.0 @@ -4874,6 +4877,9 @@ packages: '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/http-proxy@1.17.17': + resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} + '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -5271,6 +5277,10 @@ packages: resolution: {integrity: sha512-W8R6+7UIhx06s2kpsJ0KF80IKAiIad71HUKssonMChyI37h5oFnPf6zONcX2ikXc5M8xdOiKFRxoCO8ChEob0g==} engines: {node: '>=12'} + '@volcengine/tos-sdk@2.9.1': + resolution: {integrity: sha512-hmrBzl7/LpJYezGWytPg6CZk5lvFgmDKUVZJLM3vwZgp3UKSZwgxFA7V0QmLnerPDRpLPAqh0bP8qUBSVHfmhA==} + engines: {node: '>=10'} + '@vue-macros/common@1.16.1': resolution: {integrity: sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==} engines: {node: '>=16.14.0'} @@ -5858,6 +5868,9 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + axios-adapter-uniapp@0.1.4: + resolution: {integrity: sha512-4je5JcWGrrTjPEJXVXJZnOkv+BsnYn/fKbQmjxzdCGFyoQw1gq3tfQ4/WhLzy+Gi9cQJl3K8EH26G7U0BK3wcw==} + axios-mock-adapter@1.22.0: resolution: {integrity: sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==} peerDependencies: @@ -5866,6 +5879,9 @@ packages: axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + axios@0.27.2: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + axios@1.9.0: resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} @@ -7469,6 +7485,9 @@ packages: eventemitter3@2.0.3: resolution: {integrity: sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -8117,6 +8136,19 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http-proxy-middleware@2.0.9: + resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + http-signature@1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} @@ -8420,6 +8452,10 @@ packages: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -10990,6 +11026,9 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + requizzle@0.2.4: resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==} @@ -11848,6 +11887,9 @@ packages: resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} engines: {node: '>=10'} + tos-crc64-js@0.0.1: + resolution: {integrity: sha512-l2Ndi9BaDH3gmAJ5VIS/1WeqFcucK41WCbw5dije24k2XtUCclYfvhntWIVHe+0S85QcED4vjqm3AO1izlQ30g==} + tough-cookie@2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} @@ -17722,6 +17764,10 @@ snapshots: '@types/http-errors@2.0.4': {} + '@types/http-proxy@1.17.17': + dependencies: + '@types/node': 20.17.47 + '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -17747,7 +17793,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 18.19.100 + '@types/node': 20.17.47 '@types/koa-compose@3.2.8': dependencies: @@ -17842,14 +17888,14 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 18.19.100 + '@types/node': 20.17.47 '@types/semver@7.7.0': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 18.19.100 + '@types/node': 20.17.47 '@types/serve-static@1.15.7': dependencies: @@ -18271,6 +18317,21 @@ snapshots: - buffer - supports-color + '@volcengine/tos-sdk@2.9.1': + dependencies: + axios: 0.21.4(debug@4.4.3) + axios-adapter-uniapp: 0.1.4(debug@4.4.3) + crypto-js: 4.2.0 + debug: 4.4.3(supports-color@8.1.1) + http-proxy-middleware: 2.0.9(debug@4.4.3) + lodash: 4.17.21 + qs: 6.14.0 + tos-crc64-js: 0.0.1 + type-fest: 1.4.0 + transitivePeerDependencies: + - '@types/express' + - supports-color + '@vue-macros/common@1.16.1(vue@3.5.14(typescript@5.9.3))': dependencies: '@vue/compiler-sfc': 3.5.14 @@ -18982,6 +19043,12 @@ snapshots: aws4@1.13.2: {} + axios-adapter-uniapp@0.1.4(debug@4.4.3): + dependencies: + axios: 0.27.2(debug@4.4.3) + transitivePeerDependencies: + - debug + axios-mock-adapter@1.22.0(axios@1.9.0): dependencies: axios: 1.9.0(debug@4.4.3) @@ -18994,6 +19061,13 @@ snapshots: transitivePeerDependencies: - debug + axios@0.27.2(debug@4.4.3): + dependencies: + follow-redirects: 1.15.9(debug@4.4.3) + form-data: 4.0.2 + transitivePeerDependencies: + - debug + axios@1.9.0(debug@4.4.3): dependencies: follow-redirects: 1.15.9(debug@4.4.3) @@ -20780,13 +20854,13 @@ snapshots: resolve: 1.22.10 semver: 6.3.1 - eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.10.0(eslint@8.57.0))(eslint@7.32.0)(prettier@2.8.8): + eslint-plugin-prettier@3.4.1(eslint-config-prettier@8.10.0(eslint@7.32.0))(eslint@7.32.0)(prettier@2.8.8): dependencies: eslint: 7.32.0 prettier: 2.8.8 prettier-linter-helpers: 1.0.0 optionalDependencies: - eslint-config-prettier: 8.10.0(eslint@8.57.0) + eslint-config-prettier: 8.10.0(eslint@7.32.0) eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8): dependencies: @@ -20985,6 +21059,8 @@ snapshots: eventemitter3@2.0.3: {} + eventemitter3@4.0.7: {} + eventemitter3@5.0.1: {} events@3.3.0: {} @@ -21746,6 +21822,24 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-middleware@2.0.9(debug@4.4.3): + dependencies: + '@types/http-proxy': 1.17.17 + http-proxy: 1.18.1(debug@4.4.3) + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - debug + + http-proxy@1.18.1(debug@4.4.3): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.9(debug@4.4.3) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + http-signature@1.2.0: dependencies: assert-plus: 1.0.0 @@ -22017,6 +22111,8 @@ snapshots: is-plain-obj@2.1.0: {} + is-plain-obj@3.0.0: {} + is-plain-obj@4.1.0: {} is-plain-object@2.0.4: @@ -23190,7 +23286,7 @@ snapshots: eslint: 7.32.0 eslint-config-prettier: 8.10.0(eslint@7.32.0) eslint-plugin-node: 11.1.0(eslint@7.32.0) - eslint-plugin-prettier: 3.4.1(eslint-config-prettier@8.10.0(eslint@8.57.0))(eslint@7.32.0)(prettier@2.8.8) + eslint-plugin-prettier: 3.4.1(eslint-config-prettier@8.10.0(eslint@7.32.0))(eslint@7.32.0)(prettier@2.8.8) execa: 5.1.1 inquirer: 7.3.3 json5: 2.2.3 @@ -24825,6 +24921,8 @@ snapshots: require-main-filename@2.0.0: {} + requires-port@1.0.0: {} + requizzle@0.2.4: dependencies: lodash: 4.17.21 @@ -25826,6 +25924,8 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + tos-crc64-js@0.0.1: {} + tough-cookie@2.5.0: dependencies: psl: 1.15.0