From c24a040c19cacafc79228d7a7649af93837d94a1 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Fri, 5 Sep 2025 21:16:09 +0800 Subject: [PATCH 01/21] =?UTF-8?q?perf:=20ssh=20=E5=A2=9E=E5=8A=A0=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E6=96=AD=E5=BC=80=E8=BF=9E=E6=8E=A5=EF=BC=8C=E9=BB=98?= =?UTF-8?q?=E8=AE=A410=E5=88=86=E9=92=9F=E8=B6=85=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/plugins/plugin-lib/src/ssh/ssh-access.ts | 9 +++++++++ packages/plugins/plugin-lib/src/ssh/ssh.ts | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/plugins/plugin-lib/src/ssh/ssh-access.ts b/packages/plugins/plugin-lib/src/ssh/ssh-access.ts index 15bd6fa8f..3af65770e 100644 --- a/packages/plugins/plugin-lib/src/ssh/ssh-access.ts +++ b/packages/plugins/plugin-lib/src/ssh/ssh-access.ts @@ -86,6 +86,15 @@ export class SshAccess extends BaseAccess { }) socksProxy!: string; + @AccessInput({ + title: "超时时间", + helper: "执行命令的超时时间,单位秒,默认10分钟", + component: { + name: "a-input-number", + }, + }) + timeout: number; + @AccessInput({ title: "是否Windows", helper: "如果是Windows主机,请勾选此项\n并且需要windows[安装OpenSSH](https://certd.docmirror.cn/guide/use/host/windows.html)", diff --git a/packages/plugins/plugin-lib/src/ssh/ssh.ts b/packages/plugins/plugin-lib/src/ssh/ssh.ts index d148d8f1f..7e6e14aa0 100644 --- a/packages/plugins/plugin-lib/src/ssh/ssh.ts +++ b/packages/plugins/plugin-lib/src/ssh/ssh.ts @@ -588,10 +588,15 @@ export class SshClient { } throw e; } - + let timeoutId = null; try { + timeoutId = setTimeout(() => { + this.logger.info("执行超时,断开连接"); + conn.end(); + }, 1000 * (connectConf.timeout || 600)); return await callable(conn); } finally { + clearTimeout(timeoutId); conn.end(); } } From 0c8e3262fe63cb76e35413b46f6db36d9c618173 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Fri, 5 Sep 2025 21:17:15 +0800 Subject: [PATCH 02/21] chore: --- packages/plugins/plugin-lib/src/ssh/ssh-access.ts | 2 +- packages/plugins/plugin-lib/src/ssh/ssh.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugins/plugin-lib/src/ssh/ssh-access.ts b/packages/plugins/plugin-lib/src/ssh/ssh-access.ts index 3af65770e..882071e44 100644 --- a/packages/plugins/plugin-lib/src/ssh/ssh-access.ts +++ b/packages/plugins/plugin-lib/src/ssh/ssh-access.ts @@ -88,7 +88,7 @@ export class SshAccess extends BaseAccess { @AccessInput({ title: "超时时间", - helper: "执行命令的超时时间,单位秒,默认10分钟", + helper: "执行命令的超时时间,单位秒,默认30分钟", component: { name: "a-input-number", }, diff --git a/packages/plugins/plugin-lib/src/ssh/ssh.ts b/packages/plugins/plugin-lib/src/ssh/ssh.ts index 7e6e14aa0..32d83f303 100644 --- a/packages/plugins/plugin-lib/src/ssh/ssh.ts +++ b/packages/plugins/plugin-lib/src/ssh/ssh.ts @@ -593,7 +593,7 @@ export class SshClient { timeoutId = setTimeout(() => { this.logger.info("执行超时,断开连接"); conn.end(); - }, 1000 * (connectConf.timeout || 600)); + }, 1000 * (connectConf.timeout || 1800)); return await callable(conn); } finally { clearTimeout(timeoutId); From 79ebabfcfb9e5a534049c84f5f1a642b357fc856 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Fri, 5 Sep 2025 21:32:34 +0800 Subject: [PATCH 03/21] =?UTF-8?q?perf:=20=E5=88=9B=E5=BB=BAk8s=20secret=20?= =?UTF-8?q?=E6=97=B6=E8=AE=BE=E7=BD=AEtype=E4=B8=BAtls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/libs/lib-k8s/src/lib/k8s.client.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/libs/lib-k8s/src/lib/k8s.client.ts b/packages/libs/lib-k8s/src/lib/k8s.client.ts index 0e2fac476..0af5ebc51 100644 --- a/packages/libs/lib-k8s/src/lib/k8s.client.ts +++ b/packages/libs/lib-k8s/src/lib/k8s.client.ts @@ -119,7 +119,13 @@ export class K8sClient { this.logger.warn(`secret ${secretName} 不存在`); if (opts.createOnNotFound) { //没有找到,则创建 - const res = await this.createSecret({ namespace, body: opts.body }); + const body = merge( + { + type: "type: kubernetes.io/tls", + }, + opts.body + ); + const res = await this.createSecret({ namespace, body }); this.logger.info(`secret ${secretName} 已创建`); return res; } From 6cbb0739f8428d51b0712f718fe4d236cc087cf9 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Fri, 5 Sep 2025 22:19:03 +0800 Subject: [PATCH 04/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E6=95=B0=E6=8D=AE=E9=80=89=E6=8B=A9=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/libs/lib-k8s/src/lib/k8s.client.ts | 6 +++--- .../src/components/plugins/common/remote-select.vue | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/libs/lib-k8s/src/lib/k8s.client.ts b/packages/libs/lib-k8s/src/lib/k8s.client.ts index 0af5ebc51..5a980bf75 100644 --- a/packages/libs/lib-k8s/src/lib/k8s.client.ts +++ b/packages/libs/lib-k8s/src/lib/k8s.client.ts @@ -1,7 +1,7 @@ import { CoreV1Api, KubeConfig, NetworkingV1Api, V1Ingress, V1Secret } from "@kubernetes/client-node"; import dns from "dns"; import { ILogger } from "@certd/basic"; -import _ from "lodash-es"; +import { merge } from "lodash-es"; export type K8sClientOpts = { kubeConfigStr: string; @@ -133,7 +133,7 @@ export class K8sClient { throw e; } - const newSecret = _.merge(oldSecret.body, opts.body); + const newSecret = merge(oldSecret.body, opts.body); const res = await this.client.replaceNamespacedSecret(secretName, namespace, newSecret); this.logger.info(`secret ${secretName} 已更新`); return res.body; @@ -167,7 +167,7 @@ export class K8sClient { this.logger.info("patch ingress:", ingressName, namespace); const client = this.kubeconfig.makeApiClient(NetworkingV1Api); const oldIngress = await client.readNamespacedIngress(ingressName, namespace); - const newIngress = _.merge(oldIngress.body, opts.body); + const newIngress = merge(oldIngress.body, opts.body); const res = await client.replaceNamespacedIngress(ingressName, namespace, newIngress); this.logger.info("ingress patched", opts.body); return res; diff --git a/packages/ui/certd-client/src/components/plugins/common/remote-select.vue b/packages/ui/certd-client/src/components/plugins/common/remote-select.vue index 7e1e9da05..b2b40d898 100644 --- a/packages/ui/certd-client/src/components/plugins/common/remote-select.vue +++ b/packages/ui/certd-client/src/components/plugins/common/remote-select.vue @@ -169,7 +169,7 @@ const getOptions = async () => { }; const filterOption = (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 || String(option.value).toLowerCase().indexOf(input.toLowerCase()); + return option.label.toLowerCase().includes(input.toLowerCase()) || String(option.value).toLowerCase().includes(input.toLowerCase()); }; async function onClick() { From fe9c4f3391ff07c01dd9a252225f69a129c39050 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:01:17 +0800 Subject: [PATCH 05/21] =?UTF-8?q?perf:=20=E6=94=AF=E6=8C=81=E6=A0=B9?= =?UTF-8?q?=E6=8D=AEid=E6=9B=B4=E6=96=B0=E8=AF=81=E4=B9=A6=EF=BC=88?= =?UTF-8?q?=E8=AF=81=E4=B9=A6Id=E4=B8=8D=E5=8F=98=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=89=EF=BC=8C=E4=B8=8D=E8=BF=87=E8=AF=A5=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=B8=BA=E7=99=BD=E5=90=8D=E5=8D=95=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E6=99=AE=E9=80=9A=E8=85=BE=E8=AE=AF=E4=BA=91=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/common/remote-auto-complete.vue | 2 +- .../plugins/common/remote-select.vue | 2 +- .../plugins/common/remote-tree-select.vue | 192 ++++++++++++++++++ .../src/components/plugins/index.ts | 2 + packages/ui/certd-server/package.json | 2 +- .../plugins/plugin-tencent/plugin/index.ts | 1 + pnpm-lock.yaml | 104 ++++++---- 7 files changed, 259 insertions(+), 46 deletions(-) create mode 100644 packages/ui/certd-client/src/components/plugins/common/remote-tree-select.vue diff --git a/packages/ui/certd-client/src/components/plugins/common/remote-auto-complete.vue b/packages/ui/certd-client/src/components/plugins/common/remote-auto-complete.vue index 2a5eb790d..a46c3d66b 100644 --- a/packages/ui/certd-client/src/components/plugins/common/remote-auto-complete.vue +++ b/packages/ui/certd-client/src/components/plugins/common/remote-auto-complete.vue @@ -66,7 +66,7 @@ const getOptions = async () => { const input = (pluginType === "plugin" ? form?.input : form) || {}; for (let key in define.input) { - const inWatches = props.watches.includes(key); + const inWatches = props.watches?.includes(key); const inputDefine = define.input[key]; if (inWatches && inputDefine.required) { const value = input[key]; diff --git a/packages/ui/certd-client/src/components/plugins/common/remote-select.vue b/packages/ui/certd-client/src/components/plugins/common/remote-select.vue index b2b40d898..707f118a4 100644 --- a/packages/ui/certd-client/src/components/plugins/common/remote-select.vue +++ b/packages/ui/certd-client/src/components/plugins/common/remote-select.vue @@ -105,7 +105,7 @@ const getOptions = async () => { const input = (pluginType === "plugin" ? form?.input : form) || {}; for (let key in define.input) { - const inWatches = props.watches.includes(key); + const inWatches = props.watches?.includes(key); const inputDefine = define.input[key]; if (inWatches && inputDefine.required) { const value = input[key]; diff --git a/packages/ui/certd-client/src/components/plugins/common/remote-tree-select.vue b/packages/ui/certd-client/src/components/plugins/common/remote-tree-select.vue new file mode 100644 index 000000000..49fe5c35e --- /dev/null +++ b/packages/ui/certd-client/src/components/plugins/common/remote-tree-select.vue @@ -0,0 +1,192 @@ + + + + diff --git a/packages/ui/certd-client/src/components/plugins/index.ts b/packages/ui/certd-client/src/components/plugins/index.ts index 61fadc997..be4697212 100644 --- a/packages/ui/certd-client/src/components/plugins/index.ts +++ b/packages/ui/certd-client/src/components/plugins/index.ts @@ -2,6 +2,7 @@ import SynologyIdDeviceGetter from "./synology/device-id-getter.vue"; import RemoteAutoComplete from "./common/remote-auto-complete.vue"; import RemoteSelect from "./common/remote-select.vue"; import RemoteInput from "./common/remote-input.vue"; +import RemoteTreeSelect from "./common/remote-tree-select.vue"; import CertDomainsGetter from "./common/cert-domains-getter.vue"; import OutputSelector from "/@/components/plugins/common/output-selector/index.vue"; import DnsProviderSelector from "/@/components/plugins/cert/dns-provider-selector/index.vue"; @@ -24,6 +25,7 @@ export default { app.component("SynologyDeviceIdGetter", SynologyIdDeviceGetter); app.component("RemoteAutoComplete", RemoteAutoComplete); app.component("RemoteSelect", RemoteSelect); + app.component("RemoteTreeSelect", RemoteTreeSelect); app.component("RemoteInput", RemoteInput); app.component("CertDomainsGetter", CertDomainsGetter); app.component("InputPassword", InputPassword); diff --git a/packages/ui/certd-server/package.json b/packages/ui/certd-server/package.json index af21a922e..7616e4d2b 100644 --- a/packages/ui/certd-server/package.json +++ b/packages/ui/certd-server/package.json @@ -118,7 +118,7 @@ "socks-proxy-agent": "^8.0.4", "strip-ansi": "^7.1.0", "svg-captcha": "^1.4.0", - "tencentcloud-sdk-nodejs": "^4.0.983", + "tencentcloud-sdk-nodejs": "^4.1.112", "typeorm": "^0.3.20", "uuid": "^10.0.0" }, diff --git a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/index.ts b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/index.ts index 60db3827b..b8f9220da 100644 --- a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/index.ts @@ -9,3 +9,4 @@ export * from './delete-expiring-cert/index.js'; export * from './deploy-to-tke-ingress/index.js'; export * from './deploy-to-live/index.js'; export * from './start-instances/index.js'; +export * from './refresh-cert/index.js'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2901b81b..1735c82cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,7 +49,7 @@ importers: packages/core/acme-client: dependencies: '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../basic '@peculiar/x509': specifier: ^1.11.0 @@ -210,10 +210,10 @@ importers: packages/core/pipeline: dependencies: '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../basic '@certd/plus-core': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../pro/plus-core dayjs: specifier: ^1.11.7 @@ -418,7 +418,7 @@ importers: packages/libs/lib-k8s: dependencies: '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/basic '@kubernetes/client-node': specifier: 0.21.0 @@ -458,16 +458,16 @@ importers: packages/libs/lib-server: dependencies: '@certd/acme-client': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/acme-client '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/basic '@certd/pipeline': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/pipeline '@certd/plus-core': - specifier: ^1.36.17 + specifier: ^1.36.18 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.36.17 + specifier: ^1.36.18 version: link:../../core/acme-client '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/basic '@certd/pipeline': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/pipeline '@certd/plugin-lib': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../plugin-lib '@google-cloud/publicca': specifier: ^1.3.0 @@ -701,10 +701,10 @@ importers: specifier: ^3.787.0 version: 3.810.0(aws-crt@1.26.2) '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/basic '@certd/pipeline': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/pipeline '@kubernetes/client-node': specifier: 0.21.0 @@ -792,19 +792,19 @@ importers: packages/pro/commercial-core: dependencies: '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/basic '@certd/lib-server': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../libs/lib-server '@certd/pipeline': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/pipeline '@certd/plugin-plus': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../plugin-plus '@certd/plus-core': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../plus-core '@midwayjs/core': specifier: ~3.20.3 @@ -889,22 +889,22 @@ importers: specifier: ^1.0.2 version: 1.0.3 '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/basic '@certd/lib-k8s': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../libs/lib-k8s '@certd/pipeline': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/pipeline '@certd/plugin-cert': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../plugins/plugin-cert '@certd/plugin-lib': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../plugins/plugin-lib '@certd/plus-core': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../plus-core ali-oss: specifier: ^6.21.0 @@ -1007,7 +1007,7 @@ importers: packages/pro/plus-core: dependencies: '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/basic dayjs: specifier: ^1.11.7 @@ -1297,10 +1297,10 @@ importers: version: 0.1.3(zod@3.24.4) devDependencies: '@certd/lib-iframe': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../libs/lib-iframe '@certd/pipeline': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/pipeline '@rollup/plugin-commonjs': specifier: ^25.0.7 @@ -1483,46 +1483,46 @@ importers: specifier: ^3.705.0 version: 3.810.0(aws-crt@1.26.2) '@certd/acme-client': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/acme-client '@certd/basic': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/basic '@certd/commercial-core': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../pro/commercial-core '@certd/cv4pve-api-javascript': specifier: ^8.4.2 version: 8.4.2 '@certd/jdcloud': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../libs/lib-jdcloud '@certd/lib-huawei': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../libs/lib-huawei '@certd/lib-k8s': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../libs/lib-k8s '@certd/lib-server': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../libs/lib-server '@certd/midway-flyway-js': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../libs/midway-flyway-js '@certd/pipeline': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../core/pipeline '@certd/plugin-cert': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../plugins/plugin-cert '@certd/plugin-lib': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../plugins/plugin-lib '@certd/plugin-plus': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../pro/plugin-plus '@certd/plus-core': - specifier: ^1.36.17 + specifier: ^1.36.18 version: link:../../pro/plus-core '@huaweicloud/huaweicloud-sdk-cdn': specifier: ^3.1.120 @@ -1708,8 +1708,8 @@ importers: specifier: ^1.4.0 version: 1.4.0 tencentcloud-sdk-nodejs: - specifier: ^4.0.983 - version: 4.1.37(encoding@0.1.13) + specifier: ^4.1.112 + version: 4.1.112(encoding@0.1.13) typeorm: specifier: ^0.3.20 version: 0.3.24(better-sqlite3@11.10.0)(mysql2@3.14.1)(pg@8.16.0)(reflect-metadata@0.2.2)(ts-node@10.9.2(@types/node@18.19.100)(typescript@5.8.3)) @@ -12242,6 +12242,10 @@ packages: temp-path@1.0.0: resolution: {integrity: sha512-TvmyH7kC6ZVTYkqCODjJIbgvu0FKiwQpZ4D1aknE7xpcDf/qEOB8KZEK5ef2pfbVoiBhNWs3yx4y+ESMtNYmlg==} + tencentcloud-sdk-nodejs@4.1.112: + resolution: {integrity: sha512-30Ju53bTd3OjMRwfieDvEYvjHhHVg2Eqc0EM7H8gKEWq0y3xMEdrxgYRrjhIkRo5Doc5YEOl6uUJUCfeT7dmFA==} + engines: {node: '>=10'} + tencentcloud-sdk-nodejs@4.1.37: resolution: {integrity: sha512-rQV/jaUHGsB71JarqFdDJTl5tC2kIavgSUqlh8JoOUNpfJoAD4qHm1GLdDTUTEPKhv3qF9Is3qo6lj4cG9kKuw==} engines: {node: '>=10'} @@ -27035,6 +27039,20 @@ snapshots: temp-path@1.0.0: {} + tencentcloud-sdk-nodejs@4.1.112(encoding@0.1.13): + dependencies: + form-data: 3.0.3 + get-stream: 6.0.1 + https-proxy-agent: 5.0.1 + is-stream: 2.0.1 + json-bigint: 1.0.0 + node-fetch: 2.7.0(encoding@0.1.13) + tslib: 1.13.0 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + tencentcloud-sdk-nodejs@4.1.37(encoding@0.1.13): dependencies: form-data: 3.0.3 From a24ef48ad1a9ff6c5000edcb4fd81b354a5ea4ac Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:01:45 +0800 Subject: [PATCH 06/21] chore: --- .../plugin-lib/src/tencent/lib/ssl-client.ts | 21 +- .../plugin/plugin-refresh-cert.ts | 113 ------ .../plugin/refresh-cert/index.ts | 340 ++++++++++++++++++ 3 files changed, 359 insertions(+), 115 deletions(-) delete mode 100644 packages/ui/certd-server/src/plugins/plugin-tencent/plugin/plugin-refresh-cert.ts create mode 100644 packages/ui/certd-server/src/plugins/plugin-tencent/plugin/refresh-cert/index.ts diff --git a/packages/plugins/plugin-lib/src/tencent/lib/ssl-client.ts b/packages/plugins/plugin-lib/src/tencent/lib/ssl-client.ts index 4846ee1ae..2075d4705 100644 --- a/packages/plugins/plugin-lib/src/tencent/lib/ssl-client.ts +++ b/packages/plugins/plugin-lib/src/tencent/lib/ssl-client.ts @@ -76,9 +76,26 @@ export class TencentSslClient { return res; } - async DescribeCertificates(params: any) { + async DescribeHostUploadUpdateRecordDetail(params: any) { const client = await this.getSslClient(); - const res = await client.DescribeCertificates(params); + const res = await client.request("DescribeHostUploadUpdateRecordDetail", params); + this.checkRet(res); + return res; + } + + async UploadUpdateCertificateInstance(params: any) { + const client = await this.getSslClient(); + const res = await client.request("UploadUpdateCertificateInstance", params); + this.checkRet(res); + return res; + } + + async DescribeCertificates(params: { Limit?: number; Offset?: number; SearchKey?: string }) { + const client = await this.getSslClient(); + const res = await client.DescribeCertificates({ + ExpirationSort: "ASC", + ...params, + }); this.checkRet(res); return res; } diff --git a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/plugin-refresh-cert.ts b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/plugin-refresh-cert.ts deleted file mode 100644 index eaac810c2..000000000 --- a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/plugin-refresh-cert.ts +++ /dev/null @@ -1,113 +0,0 @@ -// import { AbstractTaskPlugin, IsTaskPlugin, PageSearch, pluginGroups, RunStrategy, TaskInput } from "@certd/pipeline"; -// import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert"; -// import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from "@certd/plugin-lib"; -// import { TencentAccess, TencentSslClient } from "@certd/plugin-lib"; -// @IsTaskPlugin({ -// //命名规范,插件类型+功能(就是目录plugin-demo中的demo),大写字母开头,驼峰命名 -// name: "TencentRefreshCert", -// title: "腾讯云-更新证书", -// desc: "根据证书id一键更新腾讯云证书并自动部署", -// icon: "svg:icon-tencentcloud", -// //插件分组 -// group: pluginGroups.tencent.key, -// needPlus: false, -// default: { -// //默认值配置照抄即可 -// strategy: { -// runStrategy: RunStrategy.SkipWhenSucceed -// } -// } -// }) -// //类名规范,跟上面插件名称(name)一致 -// export class TencentRefreshCert extends AbstractTaskPlugin { -// //证书选择,此项必须要有 -// @TaskInput({ -// title: "域名证书", -// helper: "请选择前置任务输出的域名证书", -// component: { -// name: "output-selector", -// from: [...CertApplyPluginNames] -// } -// // required: true, // 必填 -// }) -// cert!: CertInfo; -// -// @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) -// certDomains!: string[]; -// -// //授权选择框 -// @TaskInput({ -// title: "腾讯云授权", -// component: { -// name: "access-selector", -// type: "tencent" //固定授权类型 -// }, -// required: true //必填 -// }) -// accessId!: string; -// // -// -// @TaskInput( -// createRemoteSelectInputDefine({ -// title: "证书Id", -// helper: "要更新的证书id,如果这里没有,请先给手动绑定一次证书", -// action: TencentRefreshCert.prototype.onGetCertList.name, -// pager: false, -// search: false -// }) -// ) -// certList!: string[]; -// -// //插件实例化时执行的方法 -// async onInstance() { -// } -// -// //插件执行方法 -// async execute(): Promise { -// const access = await this.getAccess(this.accessId); -// -// // await access.createCert({cert:this.cert}) -// -// for (const certId of this.certList) { -// this.logger.info(`----------- 开始更新证书:${certId}`); -// -// await access.updateCert({ -// id: certId, -// cert: this.cert -// }); -// this.logger.info(`----------- 更新证书${certId}成功`); -// } -// -// this.logger.info("部署完成"); -// } -// -// async onGetCertList(data: PageSearch = {}) { -// const access = await this.getAccess(this.accessId); -// -// const res = await access.getCertList() -// const list = res.list -// if (!list || list.length === 0) { -// throw new Error("没有找到证书,你可以直接手动输入id,如果id不存在将自动创建"); -// } -// -// -// /** -// * certificate-id -// * name -// * dns-names -// */ -// const options = list.map((item: any) => { -// return { -// label: `${item.value.snis[0]}<${item.value.id}>`, -// value: item.value.id, -// domain: item.value.snis -// }; -// }); -// return { -// list: this.ctx.utils.options.buildGroupOptions(options, this.certDomains), -// }; -// } -// } -// -// //实例化一下,注册插件 -// new TencentRefreshCert(); diff --git a/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/refresh-cert/index.ts b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/refresh-cert/index.ts new file mode 100644 index 000000000..445fd4488 --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-tencent/plugin/refresh-cert/index.ts @@ -0,0 +1,340 @@ +import { + AbstractTaskPlugin, + IsTaskPlugin, + Pager, + PageSearch, + pluginGroups, + RunStrategy, + TaskInput +} from "@certd/pipeline"; +import { CertApplyPluginNames, CertInfo } from "@certd/plugin-cert"; +import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from "@certd/plugin-lib"; +import { TencentAccess, TencentSslClient } from "@certd/plugin-lib"; +import { omit } from "lodash-es"; +@IsTaskPlugin({ + //命名规范,插件类型+功能(就是目录plugin-demo中的demo),大写字母开头,驼峰命名 + name: "TencentRefreshCert", + title: "腾讯云-更新证书(Id不变)", + desc: "根据证书id一键更新腾讯云证书并自动部署(Id不变),注意该接口为腾讯云白名单功能,非白名单用户无法使用该功能", + icon: "svg:icon-tencentcloud", + //插件分组 + group: pluginGroups.tencent.key, + needPlus: false, + default: { + //默认值配置照抄即可 + strategy: { + runStrategy: RunStrategy.SkipWhenSucceed + } + } +}) +//类名规范,跟上面插件名称(name)一致 +export class TencentRefreshCert extends AbstractTaskPlugin { + //证书选择,此项必须要有 + @TaskInput({ + title: "域名证书", + helper: "请选择前置任务输出的域名证书", + component: { + name: "output-selector", + from: [...CertApplyPluginNames] + } + // required: true, // 必填 + }) + cert!: CertInfo; + + @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } })) + certDomains!: string[]; + + //授权选择框 + @TaskInput({ + title: "腾讯云授权", + component: { + name: "access-selector", + type: "tencent" //固定授权类型 + }, + required: true //必填 + }) + accessId!: string; + // + + @TaskInput( + createRemoteSelectInputDefine({ + title: "证书Id", + helper: "要更新的证书id,如果这里没有,请先给手动绑定一次证书", + action: TencentRefreshCert.prototype.onGetCertList.name, + pager: false, + search: false + }) + ) + certList!: string[]; + + // @TaskInput({ + // title: '资源类型', + // component: { + // name: 'a-select', + // vModel: 'value', + // allowClear: true, + // mode: "tags", + // options: [ + // { value: 'clb',label: '负载均衡'}, + // { value: 'cdn',label: 'CDN'}, + // { value: 'ddos',label: 'DDoS'}, + // { value: 'live',label: '直播'}, + // { value: 'vod',label: '点播'}, + // { value: 'waf',label: 'Web应用防火墙'}, + // { value: 'apigateway',label: 'API网关'}, + // { value: 'teo',label: 'TEO'}, + // { value: 'tke',label: '容器服务'}, + // { value: 'cos',label: '对象存储'}, + // { value: 'lighthouse',label: '轻应用服务器'}, + // { value: 'tse',label: '云原生微服务'}, + // { value: 'tcb',label: '云开发'}, + // ] + // }, + // helper: '', + // required: true, + // }) + // resourceTypes!: string[]; + + @TaskInput({ + title: '资源区域', + helper:"如果云资源类型区分区域,请选择区域,如果区域在选项中不存在,请手动输入", + component: { + name: 'remote-tree-select', + vModel: 'value', + action: TencentRefreshCert.prototype.onGetRegionsTree.name, + pager: false, + search: false, + watches: ['certList'], + }, + required: false, + }) + resourceTypesRegions!: string[]; + //插件实例化时执行的方法 + async onInstance() { + } + + //插件执行方法 + async execute(): Promise { + const access = await this.getAccess(this.accessId); + const sslClient = new TencentSslClient({ + access:access, + logger: this.logger, + }); + // await access.createCert({cert:this.cert}) + + let resourceTypes = [] + const resourceTypesRegions = [] + for (const item of this.resourceTypesRegions) { + const [type,region] = item.split("_") + if (!resourceTypes.includes( type)){ + resourceTypes.push(type) + } + if (!region){ + continue; + } + const resourceType = resourceTypesRegions.find(item => item.ResourceType == type) + if (!resourceType){ + resourceTypesRegions.push({ + ResourceType: type, + Regions: [region] + }) + }else{ + resourceType.Regions.push(region) + } + } + // resourceTypes = ["clb"] //固定clb + const maxRetry = 10 + for (const certId of this.certList) { + this.logger.info(`----------- 开始更新证书:${certId}`); + + let deployRes = null + + let retryCount = 0 + while(true){ + if (retryCount>maxRetry){ + this.logger.error(`任务创建失败`); + break; + } + retryCount++ + deployRes = await sslClient.UploadUpdateCertificateInstance({ + OldCertificateId: certId, + "ResourceTypes": resourceTypes, + "CertificatePublicKey": this.cert.crt, + "CertificatePrivateKey": this.cert.key, + "ResourceTypesRegions":resourceTypesRegions + }); + if (deployRes && deployRes.DeployRecordId>0){ + this.logger.info(`任务创建成功,开始检查结果:${JSON.stringify(deployRes)}`); + break; + }else{ + this.logger.info(`任务创建中,稍后查询:${JSON.stringify(deployRes)}`); + } + await this.ctx.utils.sleep(3000); + } + this.logger.info(`开始查询部署结果`); + + retryCount=0 + while(true){ + if (retryCount>maxRetry){ + this.logger.error(`任务结果检查失败`); + break; + } + retryCount++ + //查询部署状态 + const deployStatus = await sslClient.DescribeHostUploadUpdateRecordDetail({ + "DeployRecordId":deployRes.DeployRecordId + }) + const details = deployStatus.DeployRecordDetail + let allSuccess = true + for (const item of details) { + this.logger.info(`查询结果:${JSON.stringify(omit(item,"RecordDetailList"))}`); + if (item.Status === 2) { + throw new Error(`任务失败:${JSON.stringify(item.RecordDetailList)}`) + }else if (item.Status !== 1) { + //如果不是成功状态 + allSuccess = false + } + } + if (allSuccess) { + break; + } + await this.ctx.utils.sleep(10000); + } + this.logger.info(`----------- 更新证书${certId}成功`); + } + + } + + async onGetRegionsTree(data: PageSearch = {}){ + + const commonRegions = [ + /** + * 华南地区(广州) waf.ap-guangzhou.tencentcloudapi.com + * 华东地区(上海) waf.ap-shanghai.tencentcloudapi.com + * 华东地区(南京) waf.ap-nanjing.tencentcloudapi.com + * 华北地区(北京) waf.ap-beijing.tencentcloudapi.com + * 西南地区(成都) waf.ap-chengdu.tencentcloudapi.com + * 西南地区(重庆) waf.ap-chongqing.tencentcloudapi.com + * 港澳台地区(中国香港) waf.ap-hongkong.tencentcloudapi.com + * 亚太东南(新加坡) waf.ap-singapore.tencentcloudapi.com + * 亚太东南(雅加达) waf.ap-jakarta.tencentcloudapi.com + * 亚太东南(曼谷) waf.ap-bangkok.tencentcloudapi.com + * 亚太东北(首尔) waf.ap-seoul.tencentcloudapi.com + * 亚太东北(东京) waf.ap-tokyo.tencentcloudapi.com + * 美国东部(弗吉尼亚) waf.na-ashburn.tencentcloudapi.com + * 美国西部(硅谷) waf.na-siliconvalley.tencentcloudapi.com + * 南美地区(圣保罗) waf.sa-saopaulo.tencentcloudapi.com + * 欧洲地区(法兰克福) waf.eu-frankfurt.tencentcloudapi.com + */ + {value:"ap-guangzhou", label:"广州"}, + {value:"ap-shanghai", label:"上海"}, + {value:"ap-nanjing", label:"南京"}, + {value:"ap-beijing", label:"北京"}, + {value:"ap-chengdu", label:"成都"}, + {value:"ap-chongqing", label:"重庆"}, + {value:"ap-hongkong", label:"香港"}, + {value:"ap-singapore", label:"新加坡"}, + {value:"ap-jakarta", label:"雅加达"}, + {value:"ap-bangkok", label:"曼谷"}, + {value:"ap-tokyo", label:"东京"}, + {value:"ap-seoul", label:"首尔"}, + {value:"na-ashburn", label:"弗吉尼亚"}, + {value:"na-siliconvalley", label:"硅谷"}, + {value:"sa-saopaulo", label:"圣保罗"}, + {value:"eu-frankfurt", label:"法兰克福"}, + ] + + function buildTypeRegions(type: string) { + const options :any[]= [] + for (const region of commonRegions) { + options.push({ + label: type + "_" + region.label, + value: type + "_" + region.value, + }); + } + return options + } + + return [ + { value: 'cdn',label: 'CDN'}, + { value: 'ddos',label: 'DDoS'}, + { value: 'live',label: '直播'}, + { value: 'vod',label: '点播'}, + { value: 'teo',label: 'TEO'}, + { value: 'lighthouse',label: '轻应用服务器'}, + { + label: "负载均衡(clb)", + value: "clb", + children: buildTypeRegions("clb"), + }, + { + label: "Web应用防火墙(waf)", + value: "waf", + children: buildTypeRegions("waf"), + }, + { + label: "API网关(apigateway)", + value: "apigateway", + children: buildTypeRegions("apigateway"), + }, + { + label: "对象存储(COS)", + value: "cos", + children: buildTypeRegions("cos"), + }, + { + label: "容器服务(tke)", + value: "tke", + children: buildTypeRegions("tke"), + }, + { + label: "云原生微服务(tse)", + value: "tse", + children: buildTypeRegions("tse"), + }, + { + label: "云开发(tcb)", + value: "tcb", + children: buildTypeRegions("tcb"), + }, + ] + } + + async onGetCertList(data: PageSearch = {}) { + + const access = await this.getAccess(this.accessId) + const sslClient = new TencentSslClient({ + access:access, + logger: this.logger, + }); + + const pager = new Pager(data); + const offset = pager.getOffset(); + const limit = pager.pageSize + const res = await sslClient.DescribeCertificates({Limit:limit,Offset:offset,SearchKey:data.searchKey}) + const list = res.Certificates + if (!list || list.length === 0) { + throw new Error("没有找到证书,你可以直接手动输入id"); + } + + + /** + * certificate-id + * name + * dns-names + */ + const options = list.map((item: any) => { + return { + label: `${item.Alias}<${item.Domain}_${item.CertificateId}>`, + value: item.CertificateId, + domain: item.SubjectAltName, + }; + }); + return { + list: this.ctx.utils.options.buildGroupOptions(options, this.certDomains), + }; + } +} + +//实例化一下,注册插件 +new TencentRefreshCert(); From 0e96bfdfa377824d204e72923d1176408ae6b300 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:12:16 +0800 Subject: [PATCH 07/21] =?UTF-8?q?perf:=20=E5=88=9B=E5=BB=BA=E8=AF=81?= =?UTF-8?q?=E4=B9=A6=E6=97=B6=E6=94=AF=E6=8C=81=E9=80=89=E6=8B=A9=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=97=B6=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/locales/langs/en-US/certd.ts | 1 + .../src/locales/langs/zh-CN/certd.ts | 1 + .../views/certd/pipeline/certd-form/use.tsx | 23 +++++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts index 63390d5f7..19e35501a 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts @@ -219,6 +219,7 @@ export default { triggerCronHelper: "Click the button above to choose a daily execution time.\nIt is recommended to trigger once per day. The task will be skipped if the certificate has not expired and will not be executed repeatedly.", notificationTitle: "Failure Notification", + notificationWhen: "Notification Timing", notificationHelper: "Get real-time alerts when the task fails", groupIdTitle: "Pipeline Group", }, diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts index 4b667d64a..a2966391c 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts @@ -224,6 +224,7 @@ export default { triggerCronTitle: "定时触发", triggerCronHelper: "点击上面的按钮,选择每天几点定时执行。\n建议设置为每天触发一次,证书未到期之前任务会跳过,不会重复执行", notificationTitle: "失败通知", + notificationWhen: "通知时机", notificationHelper: "任务执行失败实时提醒", groupIdTitle: "流水线分组", }, diff --git a/packages/ui/certd-client/src/views/certd/pipeline/certd-form/use.tsx b/packages/ui/certd-client/src/views/certd/pipeline/certd-form/use.tsx index dd6ff4d57..5b10b8ca5 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/certd-form/use.tsx +++ b/packages/ui/certd-client/src/views/certd/pipeline/certd-form/use.tsx @@ -22,7 +22,7 @@ export function fillPipelineByDefaultForm(pipeline: any, form: any) { if (form.notification != null) { notifications.push({ type: "custom", - when: ["error", "turnToSuccess", "success"], + when: form.notificationWhen || ["error", "turnToSuccess"], notificationId: form.notification, title: form.notificationTarget?.name || "自定义通知", }); @@ -223,6 +223,25 @@ export function useCertPipelineCreator() { helper: t("certd.pipelineForm.notificationHelper"), }, }, + notificationWhen: { + title: t("certd.pipelineForm.notificationWhen"), + type: "text", + form: { + value: ["error", "turnToSuccess"], + component: { + name: "a-select", + vModel: "value", + mode: "multiple", + options: [ + { value: "start", label: t("certd.start_time") }, + { value: "success", label: t("certd.success_time") }, + { value: "turnToSuccess", label: t("certd.fail_to_success_time") }, + { value: "error", label: t("certd.fail_time") }, + ], + }, + order: 102, + }, + }, groupId: { title: t("certd.pipelineForm.groupIdTitle"), type: "dict-select", @@ -268,7 +287,7 @@ export function useCertPipelineCreator() { async function doSubmit({ form }: any) { // const certDetail = readCertDetail(form.cert.crt); // 添加certd pipeline - const pluginInput = omit(form, ["triggerCron", "notification", "notificationTarget", "certApplyPlugin", "groupId"]); + const pluginInput = omit(form, ["triggerCron", "notification", "notificationTarget", "notificationWhen", "certApplyPlugin", "groupId"]); let pipeline: any = { title: form.domains[0] + "证书自动化", runnableType: "pipeline", From cff233692323ed8f2569e1a70134d19d94c38a9e Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:17:10 +0800 Subject: [PATCH 08/21] build: prepare to build --- packages/core/basic/build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/basic/build.md b/packages/core/basic/build.md index 4316bd657..ee14c1f16 100644 --- a/packages/core/basic/build.md +++ b/packages/core/basic/build.md @@ -1 +1 @@ -00:39 +00:17 From 4d875a18decb2e52a060ef0fb21d5bfbf914287d Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:26:29 +0800 Subject: [PATCH 09/21] chore: --- packages/core/basic/src/utils/util.log.ts | 51 ++++++++++++++++++++++- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/packages/core/basic/src/utils/util.log.ts b/packages/core/basic/src/utils/util.log.ts index ce93a481d..3821900fe 100644 --- a/packages/core/basic/src/utils/util.log.ts +++ b/packages/core/basic/src/utils/util.log.ts @@ -1,4 +1,4 @@ -import log4js, { CallStack, Level, Logger } from "log4js"; +import log4js, { CallStack, Level } from "log4js"; let logFilePath = "./logs/app.log"; export function resetLogConfigure() { @@ -28,7 +28,54 @@ export function buildLogger(write: (text: string) => void) { return new PipelineLogger("pipeline", write); } -export type ILogger = Logger; +export type ILogger = { + log(level: Level | string, ...args: any[]): void; + + isLevelEnabled(level?: string): boolean; + + isTraceEnabled(): boolean; + isDebugEnabled(): boolean; + isInfoEnabled(): boolean; + isWarnEnabled(): boolean; + isErrorEnabled(): boolean; + isFatalEnabled(): boolean; + + _log(level: Level, data: any): void; + + addContext(key: string, value: any): void; + + removeContext(key: string): void; + + clearContext(): void; + + /** + * Replace the basic parse function with a new custom one + * - Note that linesToSkip will be based on the origin of the Error object in addition to the callStackLinesToSkip (at least 1) + * @param parseFunction the new parseFunction. Use `undefined` to reset to the base implementation + */ + setParseCallStackFunction(parseFunction: (error: Error, linesToSkip: number) => CallStack | undefined): void; + + /** + * Adjust the value of linesToSkip when the parseFunction is called. + * + * Cannot be less than 0. + */ + callStackLinesToSkip: number; + + trace(message: any, ...args: any[]): void; + + debug(message: any, ...args: any[]): void; + + info(message: any, ...args: any[]): void; + + warn(message: any, ...args: any[]): void; + + error(message: any, ...args: any[]): void; + + fatal(message: any, ...args: any[]): void; + + mark(message: any, ...args: any[]): void; +}; const locale = Intl.DateTimeFormat().resolvedOptions().locale; const formatter = new Intl.DateTimeFormat(locale, { From 02ab343e22ec71d1e6f32fb82c1c02fac9de23f8 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:26:48 +0800 Subject: [PATCH 10/21] build: prepare to build --- packages/core/basic/build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/basic/build.md b/packages/core/basic/build.md index ee14c1f16..b8bc32e06 100644 --- a/packages/core/basic/build.md +++ b/packages/core/basic/build.md @@ -1 +1 @@ -00:17 +00:26 From 8bb7e8bfb286a406fa59fab5e3d9893716d8d746 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:28:43 +0800 Subject: [PATCH 11/21] chore: --- packages/core/basic/src/utils/util.log.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/basic/src/utils/util.log.ts b/packages/core/basic/src/utils/util.log.ts index 3821900fe..6a290ff41 100644 --- a/packages/core/basic/src/utils/util.log.ts +++ b/packages/core/basic/src/utils/util.log.ts @@ -1,4 +1,4 @@ -import log4js, { CallStack, Level } from "log4js"; +import log4js, { CallStack, Level, Logger } from "log4js"; let logFilePath = "./logs/app.log"; export function resetLogConfigure() { @@ -29,6 +29,8 @@ export function buildLogger(write: (text: string) => void) { } export type ILogger = { + readonly category: string; + level: Level | string; log(level: Level | string, ...args: any[]): void; isLevelEnabled(level?: string): boolean; From c7b6a6df794b5f423c0ec72f421290aa74a38b89 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:28:50 +0800 Subject: [PATCH 12/21] chore: --- packages/core/basic/src/utils/util.log.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/basic/src/utils/util.log.ts b/packages/core/basic/src/utils/util.log.ts index 6a290ff41..fbcc87e2e 100644 --- a/packages/core/basic/src/utils/util.log.ts +++ b/packages/core/basic/src/utils/util.log.ts @@ -1,4 +1,4 @@ -import log4js, { CallStack, Level, Logger } from "log4js"; +import log4js, { CallStack, Level } from "log4js"; let logFilePath = "./logs/app.log"; export function resetLogConfigure() { From 96677ff8bf67e93acb136bffb722d10827d96f84 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:28:54 +0800 Subject: [PATCH 13/21] build: prepare to build --- packages/core/basic/build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/basic/build.md b/packages/core/basic/build.md index b8bc32e06..facabcbc0 100644 --- a/packages/core/basic/build.md +++ b/packages/core/basic/build.md @@ -1 +1 @@ -00:26 +00:28 From bb80bc0c0775c2f7a3a08368b3024e6bde6cea84 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:29:55 +0800 Subject: [PATCH 14/21] chore: --- packages/core/basic/src/utils/util.request.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/basic/src/utils/util.request.ts b/packages/core/basic/src/utils/util.request.ts index 39f41a2ad..b3cbb2a89 100644 --- a/packages/core/basic/src/utils/util.request.ts +++ b/packages/core/basic/src/utils/util.request.ts @@ -1,6 +1,5 @@ import axios, { AxiosHeaders, AxiosRequestConfig } from "axios"; import { ILogger, logger } from "./util.log.js"; -import { Logger } from "log4js"; import { HttpProxyAgent } from "http-proxy-agent"; import { HttpsProxyAgent } from "https-proxy-agent"; import nodeHttp from "http"; @@ -84,7 +83,7 @@ export function getGlobalAgents() { /** * @description 创建请求实例 */ -export function createAxiosService({ logger }: { logger: Logger }) { +export function createAxiosService({ logger }: { logger: ILogger }) { // 创建一个 axios 实例 const service = axios.create(); From f339bc9f7fe7f4b94257fe266cf10a014dbfc0d9 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:30:00 +0800 Subject: [PATCH 15/21] build: prepare to build --- packages/core/basic/build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/basic/build.md b/packages/core/basic/build.md index facabcbc0..52e26d31c 100644 --- a/packages/core/basic/build.md +++ b/packages/core/basic/build.md @@ -1 +1 @@ -00:28 +00:30 From 6d8981479517b5de9634e242c1ebf22e70527ec4 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:33:10 +0800 Subject: [PATCH 16/21] v1.36.19 --- CHANGELOG.md | 23 +++++++++++++++++ lerna.json | 2 +- packages/core/acme-client/CHANGELOG.md | 6 +++++ packages/core/acme-client/package.json | 4 +-- packages/core/basic/CHANGELOG.md | 10 ++++++++ packages/core/basic/package.json | 2 +- packages/core/pipeline/CHANGELOG.md | 11 ++++++++ packages/core/pipeline/package.json | 6 ++--- packages/libs/lib-huawei/CHANGELOG.md | 4 +++ packages/libs/lib-huawei/package.json | 2 +- packages/libs/lib-iframe/CHANGELOG.md | 4 +++ packages/libs/lib-iframe/package.json | 2 +- packages/libs/lib-jdcloud/CHANGELOG.md | 4 +++ packages/libs/lib-jdcloud/package.json | 2 +- packages/libs/lib-k8s/CHANGELOG.md | 10 ++++++++ packages/libs/lib-k8s/package.json | 4 +-- packages/libs/lib-server/CHANGELOG.md | 4 +++ packages/libs/lib-server/package.json | 10 ++++---- packages/libs/midway-flyway-js/CHANGELOG.md | 4 +++ packages/libs/midway-flyway-js/package.json | 2 +- packages/plugins/plugin-cert/CHANGELOG.md | 7 ++++++ packages/plugins/plugin-cert/package.json | 10 ++++---- packages/plugins/plugin-lib/CHANGELOG.md | 6 +++++ packages/plugins/plugin-lib/package.json | 6 ++--- packages/ui/certd-client/CHANGELOG.md | 16 ++++++++++++ packages/ui/certd-client/package.json | 6 ++--- packages/ui/certd-server/CHANGELOG.md | 14 +++++++++++ packages/ui/certd-server/package.json | 28 ++++++++++----------- 28 files changed, 166 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 317406481..10ff8c38c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,29 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Bug Fixes + +* 前置任务输出不存在时输出警告提示 ([b59052c](https://github.com/certd/certd/commit/b59052cc43b7b070fabd8b8e914e4c2a5e0ad61c)) +* 修复批量流水线执行时日志显示错乱的问题 ([4372adc](https://github.com/certd/certd/commit/4372adc703b9a4c785664054ab2a533626d815a8)) +* 修复远程数据选择无法过滤的bug ([6cbb073](https://github.com/certd/certd/commit/6cbb0739f8428d51b0712f718fe4d236cc087cf9)) +* 修复mysql下购买套餐加量包无效的bug ([c26ad4c](https://github.com/certd/certd/commit/c26ad4c8075f0606d45b8da13915737968d6191a)) + +### Performance Improvements + +* 创建证书时支持选择通知时机 ([0e96bfd](https://github.com/certd/certd/commit/0e96bfdfa377824d204e72923d1176408ae6b300)) +* 创建k8s secret 时设置type为tls ([79ebabf](https://github.com/certd/certd/commit/79ebabfcfb9e5a534049c84f5f1a642b357fc856)) +* 去掉宝塔url后面的斜杠 ([8a0c2b9](https://github.com/certd/certd/commit/8a0c2b9b13628da750c25757e0cb8ed3038775ba)) +* 商业版隐藏文档相关链接 ([4443a1c](https://github.com/certd/certd/commit/4443a1c0308fa6b95a05efd73d15d24b65d641c9)) +* 商业版隐藏文档相关链接 ([db89561](https://github.com/certd/certd/commit/db8956148083bc4f988226ccf719940d08158a27)) +* 增加健康检查探针 /health/liveliness 和 /health/readiness ([44019e1](https://github.com/certd/certd/commit/44019e104289fedd32a867db00e9c6cb71b389cc)) +* 支持根据id更新证书(证书Id不变接口),不过该接口为白名单功能,普通腾讯云账户无法使用 ([fe9c4f3](https://github.com/certd/certd/commit/fe9c4f3391ff07c01dd9a252225f69a129c39050)) +* 支持godaddy ([b7980aa](https://github.com/certd/certd/commit/b7980aad5ab50f58662eaddf5d84aa82876a98eb)) +* 支持ssl.com证书颁发机构 ([27b6dfa](https://github.com/certd/certd/commit/27b6dfa4d2ab3bddd284c3a34511a72e1a513a4c)) +* 子域名托管说明 ([39a0223](https://github.com/certd/certd/commit/39a02235cf4416bb5bd1acd3831241efeaa2f602)) +* ssh 增加超时断开连接,默认10分钟超时 ([c24a040](https://github.com/certd/certd/commit/c24a040c19cacafc79228d7a7649af93837d94a1)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 26a7f3583..20b55aad1 100644 --- a/lerna.json +++ b/lerna.json @@ -9,5 +9,5 @@ } }, "npmClient": "pnpm", - "version": "1.36.18" + "version": "1.36.19" } diff --git a/packages/core/acme-client/CHANGELOG.md b/packages/core/acme-client/CHANGELOG.md index 329ae74ae..d9cff0293 100644 --- a/packages/core/acme-client/CHANGELOG.md +++ b/packages/core/acme-client/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/publishlab/node-acme-client/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Performance Improvements + +* 支持ssl.com证书颁发机构 ([27b6dfa](https://github.com/publishlab/node-acme-client/commit/27b6dfa4d2ab3bddd284c3a34511a72e1a513a4c)) + ## [1.36.18](https://github.com/publishlab/node-acme-client/compare/v1.36.17...v1.36.18) (2025-08-28) **Note:** Version bump only for package @certd/acme-client diff --git a/packages/core/acme-client/package.json b/packages/core/acme-client/package.json index d77cfec87..fe59cc4cd 100644 --- a/packages/core/acme-client/package.json +++ b/packages/core/acme-client/package.json @@ -3,7 +3,7 @@ "description": "Simple and unopinionated ACME client", "private": false, "author": "nmorsman", - "version": "1.36.18", + "version": "1.36.19", "type": "module", "module": "scr/index.js", "main": "src/index.js", @@ -18,7 +18,7 @@ "types" ], "dependencies": { - "@certd/basic": "^1.36.18", + "@certd/basic": "^1.36.19", "@peculiar/x509": "^1.11.0", "asn1js": "^3.0.5", "axios": "^1.7.2", diff --git a/packages/core/basic/CHANGELOG.md b/packages/core/basic/CHANGELOG.md index d8c3f8a14..b3503bc8d 100644 --- a/packages/core/basic/CHANGELOG.md +++ b/packages/core/basic/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Bug Fixes + +* 修复批量流水线执行时日志显示错乱的问题 ([4372adc](https://github.com/certd/certd/commit/4372adc703b9a4c785664054ab2a533626d815a8)) + +### Performance Improvements + +* 去掉宝塔url后面的斜杠 ([8a0c2b9](https://github.com/certd/certd/commit/8a0c2b9b13628da750c25757e0cb8ed3038775ba)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) **Note:** Version bump only for package @certd/basic diff --git a/packages/core/basic/package.json b/packages/core/basic/package.json index def44d2fe..341795920 100644 --- a/packages/core/basic/package.json +++ b/packages/core/basic/package.json @@ -1,7 +1,7 @@ { "name": "@certd/basic", "private": false, - "version": "1.36.18", + "version": "1.36.19", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", diff --git a/packages/core/pipeline/CHANGELOG.md b/packages/core/pipeline/CHANGELOG.md index d954ea085..c8c7396e3 100644 --- a/packages/core/pipeline/CHANGELOG.md +++ b/packages/core/pipeline/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Bug Fixes + +* 前置任务输出不存在时输出警告提示 ([b59052c](https://github.com/certd/certd/commit/b59052cc43b7b070fabd8b8e914e4c2a5e0ad61c)) + +### Performance Improvements + +* 支持godaddy ([b7980aa](https://github.com/certd/certd/commit/b7980aad5ab50f58662eaddf5d84aa82876a98eb)) +* 支持ssl.com证书颁发机构 ([27b6dfa](https://github.com/certd/certd/commit/27b6dfa4d2ab3bddd284c3a34511a72e1a513a4c)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) **Note:** Version bump only for package @certd/pipeline diff --git a/packages/core/pipeline/package.json b/packages/core/pipeline/package.json index 0dcf7704e..572a7aba2 100644 --- a/packages/core/pipeline/package.json +++ b/packages/core/pipeline/package.json @@ -1,7 +1,7 @@ { "name": "@certd/pipeline", "private": false, - "version": "1.36.18", + "version": "1.36.19", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -17,8 +17,8 @@ "pub": "npm publish" }, "dependencies": { - "@certd/basic": "^1.36.18", - "@certd/plus-core": "^1.36.18", + "@certd/basic": "^1.36.19", + "@certd/plus-core": "^1.36.19", "dayjs": "^1.11.7", "lodash-es": "^4.17.21", "reflect-metadata": "^0.1.13" diff --git a/packages/libs/lib-huawei/CHANGELOG.md b/packages/libs/lib-huawei/CHANGELOG.md index 5e582f6bd..fb1dba6aa 100644 --- a/packages/libs/lib-huawei/CHANGELOG.md +++ b/packages/libs/lib-huawei/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +**Note:** Version bump only for package @certd/lib-huawei + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) **Note:** Version bump only for package @certd/lib-huawei diff --git a/packages/libs/lib-huawei/package.json b/packages/libs/lib-huawei/package.json index bb3a33df8..3c8918849 100644 --- a/packages/libs/lib-huawei/package.json +++ b/packages/libs/lib-huawei/package.json @@ -1,7 +1,7 @@ { "name": "@certd/lib-huawei", "private": false, - "version": "1.36.18", + "version": "1.36.19", "main": "./dist/bundle.js", "module": "./dist/bundle.js", "types": "./dist/d/index.d.ts", diff --git a/packages/libs/lib-iframe/CHANGELOG.md b/packages/libs/lib-iframe/CHANGELOG.md index f2a0a6938..e3608ca1e 100644 --- a/packages/libs/lib-iframe/CHANGELOG.md +++ b/packages/libs/lib-iframe/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +**Note:** Version bump only for package @certd/lib-iframe + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) **Note:** Version bump only for package @certd/lib-iframe diff --git a/packages/libs/lib-iframe/package.json b/packages/libs/lib-iframe/package.json index 8466cce21..b95f12c3a 100644 --- a/packages/libs/lib-iframe/package.json +++ b/packages/libs/lib-iframe/package.json @@ -1,7 +1,7 @@ { "name": "@certd/lib-iframe", "private": false, - "version": "1.36.18", + "version": "1.36.19", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", diff --git a/packages/libs/lib-jdcloud/CHANGELOG.md b/packages/libs/lib-jdcloud/CHANGELOG.md index ffaf02e09..852315b23 100644 --- a/packages/libs/lib-jdcloud/CHANGELOG.md +++ b/packages/libs/lib-jdcloud/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +**Note:** Version bump only for package @certd/jdcloud + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) **Note:** Version bump only for package @certd/jdcloud diff --git a/packages/libs/lib-jdcloud/package.json b/packages/libs/lib-jdcloud/package.json index df4e817ef..0e7bebc33 100644 --- a/packages/libs/lib-jdcloud/package.json +++ b/packages/libs/lib-jdcloud/package.json @@ -1,6 +1,6 @@ { "name": "@certd/jdcloud", - "version": "1.36.18", + "version": "1.36.19", "description": "jdcloud openApi sdk", "main": "./dist/bundle.js", "module": "./dist/bundle.js", diff --git a/packages/libs/lib-k8s/CHANGELOG.md b/packages/libs/lib-k8s/CHANGELOG.md index f7570468a..0c147305c 100644 --- a/packages/libs/lib-k8s/CHANGELOG.md +++ b/packages/libs/lib-k8s/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Bug Fixes + +* 修复远程数据选择无法过滤的bug ([6cbb073](https://github.com/certd/certd/commit/6cbb0739f8428d51b0712f718fe4d236cc087cf9)) + +### Performance Improvements + +* 创建k8s secret 时设置type为tls ([79ebabf](https://github.com/certd/certd/commit/79ebabfcfb9e5a534049c84f5f1a642b357fc856)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) ### Performance Improvements diff --git a/packages/libs/lib-k8s/package.json b/packages/libs/lib-k8s/package.json index 2ae6f74a0..f559c2e52 100644 --- a/packages/libs/lib-k8s/package.json +++ b/packages/libs/lib-k8s/package.json @@ -1,7 +1,7 @@ { "name": "@certd/lib-k8s", "private": false, - "version": "1.36.18", + "version": "1.36.19", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -17,7 +17,7 @@ "pub": "npm publish" }, "dependencies": { - "@certd/basic": "^1.36.18", + "@certd/basic": "^1.36.19", "@kubernetes/client-node": "0.21.0" }, "devDependencies": { diff --git a/packages/libs/lib-server/CHANGELOG.md b/packages/libs/lib-server/CHANGELOG.md index 213e6268e..9b9a0c16f 100644 --- a/packages/libs/lib-server/CHANGELOG.md +++ b/packages/libs/lib-server/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +**Note:** Version bump only for package @certd/lib-server + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) **Note:** Version bump only for package @certd/lib-server diff --git a/packages/libs/lib-server/package.json b/packages/libs/lib-server/package.json index 329dfa97d..1ab87cfec 100644 --- a/packages/libs/lib-server/package.json +++ b/packages/libs/lib-server/package.json @@ -1,6 +1,6 @@ { "name": "@certd/lib-server", - "version": "1.36.18", + "version": "1.36.19", "description": "midway with flyway, sql upgrade way ", "private": false, "type": "module", @@ -27,10 +27,10 @@ ], "license": "AGPL", "dependencies": { - "@certd/acme-client": "^1.36.18", - "@certd/basic": "^1.36.18", - "@certd/pipeline": "^1.36.18", - "@certd/plus-core": "^1.36.18", + "@certd/acme-client": "^1.36.19", + "@certd/basic": "^1.36.19", + "@certd/pipeline": "^1.36.19", + "@certd/plus-core": "^1.36.19", "@midwayjs/cache": "~3.14.0", "@midwayjs/core": "~3.20.3", "@midwayjs/i18n": "~3.20.3", diff --git a/packages/libs/midway-flyway-js/CHANGELOG.md b/packages/libs/midway-flyway-js/CHANGELOG.md index 771525204..a1b5e56ea 100644 --- a/packages/libs/midway-flyway-js/CHANGELOG.md +++ b/packages/libs/midway-flyway-js/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +**Note:** Version bump only for package @certd/midway-flyway-js + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) **Note:** Version bump only for package @certd/midway-flyway-js diff --git a/packages/libs/midway-flyway-js/package.json b/packages/libs/midway-flyway-js/package.json index ab01b2a23..a45c0eb5a 100644 --- a/packages/libs/midway-flyway-js/package.json +++ b/packages/libs/midway-flyway-js/package.json @@ -1,6 +1,6 @@ { "name": "@certd/midway-flyway-js", - "version": "1.36.18", + "version": "1.36.19", "description": "midway with flyway, sql upgrade way ", "private": false, "type": "module", diff --git a/packages/plugins/plugin-cert/CHANGELOG.md b/packages/plugins/plugin-cert/CHANGELOG.md index 3e8521a58..43fbde4e5 100644 --- a/packages/plugins/plugin-cert/CHANGELOG.md +++ b/packages/plugins/plugin-cert/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Performance Improvements + +* 支持ssl.com证书颁发机构 ([27b6dfa](https://github.com/certd/certd/commit/27b6dfa4d2ab3bddd284c3a34511a72e1a513a4c)) +* 子域名托管说明 ([39a0223](https://github.com/certd/certd/commit/39a02235cf4416bb5bd1acd3831241efeaa2f602)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) ### Performance Improvements diff --git a/packages/plugins/plugin-cert/package.json b/packages/plugins/plugin-cert/package.json index c6d56d933..a96723024 100644 --- a/packages/plugins/plugin-cert/package.json +++ b/packages/plugins/plugin-cert/package.json @@ -1,7 +1,7 @@ { "name": "@certd/plugin-cert", "private": false, - "version": "1.36.18", + "version": "1.36.19", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -16,10 +16,10 @@ "pub": "npm publish" }, "dependencies": { - "@certd/acme-client": "^1.36.18", - "@certd/basic": "^1.36.18", - "@certd/pipeline": "^1.36.18", - "@certd/plugin-lib": "^1.36.18", + "@certd/acme-client": "^1.36.19", + "@certd/basic": "^1.36.19", + "@certd/pipeline": "^1.36.19", + "@certd/plugin-lib": "^1.36.19", "@google-cloud/publicca": "^1.3.0", "dayjs": "^1.11.7", "jszip": "^3.10.1", diff --git a/packages/plugins/plugin-lib/CHANGELOG.md b/packages/plugins/plugin-lib/CHANGELOG.md index d2c403c37..c9c150593 100644 --- a/packages/plugins/plugin-lib/CHANGELOG.md +++ b/packages/plugins/plugin-lib/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Performance Improvements + +* ssh 增加超时断开连接,默认10分钟超时 ([c24a040](https://github.com/certd/certd/commit/c24a040c19cacafc79228d7a7649af93837d94a1)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) ### Performance Improvements diff --git a/packages/plugins/plugin-lib/package.json b/packages/plugins/plugin-lib/package.json index 7d96007cf..e569111fa 100644 --- a/packages/plugins/plugin-lib/package.json +++ b/packages/plugins/plugin-lib/package.json @@ -1,7 +1,7 @@ { "name": "@certd/plugin-lib", "private": false, - "version": "1.36.18", + "version": "1.36.19", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -21,8 +21,8 @@ "@alicloud/pop-core": "^1.7.10", "@alicloud/tea-util": "^1.4.10", "@aws-sdk/client-s3": "^3.787.0", - "@certd/basic": "^1.36.18", - "@certd/pipeline": "^1.36.18", + "@certd/basic": "^1.36.19", + "@certd/pipeline": "^1.36.19", "@kubernetes/client-node": "0.21.0", "ali-oss": "^6.22.0", "basic-ftp": "^5.0.5", diff --git a/packages/ui/certd-client/CHANGELOG.md b/packages/ui/certd-client/CHANGELOG.md index c91dfd093..b83431421 100644 --- a/packages/ui/certd-client/CHANGELOG.md +++ b/packages/ui/certd-client/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Bug Fixes + +* 修复批量流水线执行时日志显示错乱的问题 ([4372adc](https://github.com/certd/certd/commit/4372adc703b9a4c785664054ab2a533626d815a8)) +* 修复远程数据选择无法过滤的bug ([6cbb073](https://github.com/certd/certd/commit/6cbb0739f8428d51b0712f718fe4d236cc087cf9)) +* 修复mysql下购买套餐加量包无效的bug ([c26ad4c](https://github.com/certd/certd/commit/c26ad4c8075f0606d45b8da13915737968d6191a)) + +### Performance Improvements + +* 创建证书时支持选择通知时机 ([0e96bfd](https://github.com/certd/certd/commit/0e96bfdfa377824d204e72923d1176408ae6b300)) +* 商业版隐藏文档相关链接 ([4443a1c](https://github.com/certd/certd/commit/4443a1c0308fa6b95a05efd73d15d24b65d641c9)) +* 商业版隐藏文档相关链接 ([db89561](https://github.com/certd/certd/commit/db8956148083bc4f988226ccf719940d08158a27)) +* 支持根据id更新证书(证书Id不变接口),不过该接口为白名单功能,普通腾讯云账户无法使用 ([fe9c4f3](https://github.com/certd/certd/commit/fe9c4f3391ff07c01dd9a252225f69a129c39050)) +* 子域名托管说明 ([39a0223](https://github.com/certd/certd/commit/39a02235cf4416bb5bd1acd3831241efeaa2f602)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) ### Bug Fixes diff --git a/packages/ui/certd-client/package.json b/packages/ui/certd-client/package.json index 156fb9e60..a64fe5975 100644 --- a/packages/ui/certd-client/package.json +++ b/packages/ui/certd-client/package.json @@ -1,6 +1,6 @@ { "name": "@certd/ui-client", - "version": "1.36.18", + "version": "1.36.19", "private": true, "scripts": { "dev": "vite --open", @@ -103,8 +103,8 @@ "zod-defaults": "^0.1.3" }, "devDependencies": { - "@certd/lib-iframe": "^1.36.18", - "@certd/pipeline": "^1.36.18", + "@certd/lib-iframe": "^1.36.19", + "@certd/pipeline": "^1.36.19", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@types/chai": "^4.3.12", diff --git a/packages/ui/certd-server/CHANGELOG.md b/packages/ui/certd-server/CHANGELOG.md index 61b7ed361..6ab273d6f 100644 --- a/packages/ui/certd-server/CHANGELOG.md +++ b/packages/ui/certd-server/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Bug Fixes + +* 前置任务输出不存在时输出警告提示 ([b59052c](https://github.com/certd/certd/commit/b59052cc43b7b070fabd8b8e914e4c2a5e0ad61c)) +* 修复mysql下购买套餐加量包无效的bug ([c26ad4c](https://github.com/certd/certd/commit/c26ad4c8075f0606d45b8da13915737968d6191a)) + +### Performance Improvements + +* 增加健康检查探针 /health/liveliness 和 /health/readiness ([44019e1](https://github.com/certd/certd/commit/44019e104289fedd32a867db00e9c6cb71b389cc)) +* 支持根据id更新证书(证书Id不变接口),不过该接口为白名单功能,普通腾讯云账户无法使用 ([fe9c4f3](https://github.com/certd/certd/commit/fe9c4f3391ff07c01dd9a252225f69a129c39050)) +* 支持godaddy ([b7980aa](https://github.com/certd/certd/commit/b7980aad5ab50f58662eaddf5d84aa82876a98eb)) +* 支持ssl.com证书颁发机构 ([27b6dfa](https://github.com/certd/certd/commit/27b6dfa4d2ab3bddd284c3a34511a72e1a513a4c)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) ### Bug Fixes diff --git a/packages/ui/certd-server/package.json b/packages/ui/certd-server/package.json index 7616e4d2b..1b675ef0b 100644 --- a/packages/ui/certd-server/package.json +++ b/packages/ui/certd-server/package.json @@ -1,6 +1,6 @@ { "name": "@certd/ui-server", - "version": "1.36.18", + "version": "1.36.19", "description": "fast-server base midway", "private": true, "type": "module", @@ -43,20 +43,20 @@ "@aws-sdk/client-cloudfront": "^3.699.0", "@aws-sdk/client-iam": "^3.699.0", "@aws-sdk/client-s3": "^3.705.0", - "@certd/acme-client": "^1.36.18", - "@certd/basic": "^1.36.18", - "@certd/commercial-core": "^1.36.18", + "@certd/acme-client": "^1.36.19", + "@certd/basic": "^1.36.19", + "@certd/commercial-core": "^1.36.19", "@certd/cv4pve-api-javascript": "^8.4.2", - "@certd/jdcloud": "^1.36.18", - "@certd/lib-huawei": "^1.36.18", - "@certd/lib-k8s": "^1.36.18", - "@certd/lib-server": "^1.36.18", - "@certd/midway-flyway-js": "^1.36.18", - "@certd/pipeline": "^1.36.18", - "@certd/plugin-cert": "^1.36.18", - "@certd/plugin-lib": "^1.36.18", - "@certd/plugin-plus": "^1.36.18", - "@certd/plus-core": "^1.36.18", + "@certd/jdcloud": "^1.36.19", + "@certd/lib-huawei": "^1.36.19", + "@certd/lib-k8s": "^1.36.19", + "@certd/lib-server": "^1.36.19", + "@certd/midway-flyway-js": "^1.36.19", + "@certd/pipeline": "^1.36.19", + "@certd/plugin-cert": "^1.36.19", + "@certd/plugin-lib": "^1.36.19", + "@certd/plugin-plus": "^1.36.19", + "@certd/plus-core": "^1.36.19", "@huaweicloud/huaweicloud-sdk-cdn": "^3.1.120", "@huaweicloud/huaweicloud-sdk-core": "^3.1.120", "@koa/cors": "^5.0.0", From 1dec3f000e0c09b94c89b39aeab5a0d3e60ab13d Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:34:58 +0800 Subject: [PATCH 17/21] build: trigger build image --- build.trigger | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.trigger b/build.trigger index bacbe4702..222b6abb3 100644 --- a/build.trigger +++ b/build.trigger @@ -1 +1 @@ -00:43 +00:34 From bb4d5f1e935f4f7dc375a2e02c6343fa53e7c3fa Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 00:35:14 +0800 Subject: [PATCH 18/21] build: publish --- docs/guide/changelogs/CHANGELOG.md | 23 +++++++++++++++++++++ packages/core/acme-client/package.json | 2 +- packages/core/basic/package.json | 2 +- packages/core/pipeline/package.json | 2 +- packages/libs/lib-huawei/package.json | 2 +- packages/libs/lib-iframe/package.json | 2 +- packages/libs/lib-jdcloud/package.json | 2 +- packages/libs/lib-k8s/package.json | 2 +- packages/libs/lib-server/package.json | 2 +- packages/libs/midway-flyway-js/package.json | 2 +- packages/plugins/plugin-cert/package.json | 2 +- packages/plugins/plugin-lib/package.json | 2 +- 12 files changed, 34 insertions(+), 11 deletions(-) diff --git a/docs/guide/changelogs/CHANGELOG.md b/docs/guide/changelogs/CHANGELOG.md index 317406481..10ff8c38c 100644 --- a/docs/guide/changelogs/CHANGELOG.md +++ b/docs/guide/changelogs/CHANGELOG.md @@ -3,6 +3,29 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.36.19](https://github.com/certd/certd/compare/v1.36.18...v1.36.19) (2025-09-05) + +### Bug Fixes + +* 前置任务输出不存在时输出警告提示 ([b59052c](https://github.com/certd/certd/commit/b59052cc43b7b070fabd8b8e914e4c2a5e0ad61c)) +* 修复批量流水线执行时日志显示错乱的问题 ([4372adc](https://github.com/certd/certd/commit/4372adc703b9a4c785664054ab2a533626d815a8)) +* 修复远程数据选择无法过滤的bug ([6cbb073](https://github.com/certd/certd/commit/6cbb0739f8428d51b0712f718fe4d236cc087cf9)) +* 修复mysql下购买套餐加量包无效的bug ([c26ad4c](https://github.com/certd/certd/commit/c26ad4c8075f0606d45b8da13915737968d6191a)) + +### Performance Improvements + +* 创建证书时支持选择通知时机 ([0e96bfd](https://github.com/certd/certd/commit/0e96bfdfa377824d204e72923d1176408ae6b300)) +* 创建k8s secret 时设置type为tls ([79ebabf](https://github.com/certd/certd/commit/79ebabfcfb9e5a534049c84f5f1a642b357fc856)) +* 去掉宝塔url后面的斜杠 ([8a0c2b9](https://github.com/certd/certd/commit/8a0c2b9b13628da750c25757e0cb8ed3038775ba)) +* 商业版隐藏文档相关链接 ([4443a1c](https://github.com/certd/certd/commit/4443a1c0308fa6b95a05efd73d15d24b65d641c9)) +* 商业版隐藏文档相关链接 ([db89561](https://github.com/certd/certd/commit/db8956148083bc4f988226ccf719940d08158a27)) +* 增加健康检查探针 /health/liveliness 和 /health/readiness ([44019e1](https://github.com/certd/certd/commit/44019e104289fedd32a867db00e9c6cb71b389cc)) +* 支持根据id更新证书(证书Id不变接口),不过该接口为白名单功能,普通腾讯云账户无法使用 ([fe9c4f3](https://github.com/certd/certd/commit/fe9c4f3391ff07c01dd9a252225f69a129c39050)) +* 支持godaddy ([b7980aa](https://github.com/certd/certd/commit/b7980aad5ab50f58662eaddf5d84aa82876a98eb)) +* 支持ssl.com证书颁发机构 ([27b6dfa](https://github.com/certd/certd/commit/27b6dfa4d2ab3bddd284c3a34511a72e1a513a4c)) +* 子域名托管说明 ([39a0223](https://github.com/certd/certd/commit/39a02235cf4416bb5bd1acd3831241efeaa2f602)) +* ssh 增加超时断开连接,默认10分钟超时 ([c24a040](https://github.com/certd/certd/commit/c24a040c19cacafc79228d7a7649af93837d94a1)) + ## [1.36.18](https://github.com/certd/certd/compare/v1.36.17...v1.36.18) (2025-08-28) ### Bug Fixes diff --git a/packages/core/acme-client/package.json b/packages/core/acme-client/package.json index fe59cc4cd..3ff1e30cd 100644 --- a/packages/core/acme-client/package.json +++ b/packages/core/acme-client/package.json @@ -69,5 +69,5 @@ "bugs": { "url": "https://github.com/publishlab/node-acme-client/issues" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/core/basic/package.json b/packages/core/basic/package.json index 341795920..68eefa3d9 100644 --- a/packages/core/basic/package.json +++ b/packages/core/basic/package.json @@ -45,5 +45,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/core/pipeline/package.json b/packages/core/pipeline/package.json index 572a7aba2..7025c7cd1 100644 --- a/packages/core/pipeline/package.json +++ b/packages/core/pipeline/package.json @@ -44,5 +44,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/libs/lib-huawei/package.json b/packages/libs/lib-huawei/package.json index 3c8918849..37cd34dcd 100644 --- a/packages/libs/lib-huawei/package.json +++ b/packages/libs/lib-huawei/package.json @@ -24,5 +24,5 @@ "prettier": "^2.8.8", "tslib": "^2.8.1" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/libs/lib-iframe/package.json b/packages/libs/lib-iframe/package.json index b95f12c3a..468ba05b2 100644 --- a/packages/libs/lib-iframe/package.json +++ b/packages/libs/lib-iframe/package.json @@ -31,5 +31,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/libs/lib-jdcloud/package.json b/packages/libs/lib-jdcloud/package.json index 0e7bebc33..00bed88fb 100644 --- a/packages/libs/lib-jdcloud/package.json +++ b/packages/libs/lib-jdcloud/package.json @@ -61,5 +61,5 @@ "fetch" ] }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/libs/lib-k8s/package.json b/packages/libs/lib-k8s/package.json index f559c2e52..2965a546c 100644 --- a/packages/libs/lib-k8s/package.json +++ b/packages/libs/lib-k8s/package.json @@ -32,5 +32,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/libs/lib-server/package.json b/packages/libs/lib-server/package.json index 1ab87cfec..2181257bd 100644 --- a/packages/libs/lib-server/package.json +++ b/packages/libs/lib-server/package.json @@ -61,5 +61,5 @@ "typeorm": "^0.3.11", "typescript": "^5.4.2" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/libs/midway-flyway-js/package.json b/packages/libs/midway-flyway-js/package.json index a45c0eb5a..34b30dec1 100644 --- a/packages/libs/midway-flyway-js/package.json +++ b/packages/libs/midway-flyway-js/package.json @@ -46,5 +46,5 @@ "typeorm": "^0.3.11", "typescript": "^5.4.2" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/plugins/plugin-cert/package.json b/packages/plugins/plugin-cert/package.json index a96723024..6904eb4a3 100644 --- a/packages/plugins/plugin-cert/package.json +++ b/packages/plugins/plugin-cert/package.json @@ -43,5 +43,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } diff --git a/packages/plugins/plugin-lib/package.json b/packages/plugins/plugin-lib/package.json index e569111fa..ab7dd9717 100644 --- a/packages/plugins/plugin-lib/package.json +++ b/packages/plugins/plugin-lib/package.json @@ -53,5 +53,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "ea18a5ad151b296fda54fb5bcbe64c7d80cdff2f" + "gitHead": "6d8981479517b5de9634e242c1ebf22e70527ec4" } From 902359f24ed12eee4f9b65178f1d6a60378351d2 Mon Sep 17 00:00:00 2001 From: Zero Clover <13190004+ZeroClover@users.noreply.github.com> Date: Sat, 6 Sep 2025 00:41:03 +0800 Subject: [PATCH 19/21] perf: add preferred chain option (#519) @ZeroClover --- .../src/plugin/cert-plugin/acme.ts | 4 +++- .../src/plugin/cert-plugin/index.ts | 24 +++++++++++++++++++ .../pipeline/service/pipeline-service.ts | 1 + 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts b/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts index 0362c6c96..8b5f04c77 100644 --- a/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts +++ b/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts @@ -329,8 +329,9 @@ export class AcmeService { isTest?: boolean; privateKeyType?: string; profile?: string; + preferredChain?: string; }): Promise { - const { email, isTest, csrInfo, dnsProvider, domainsVerifyPlan, profile } = options; + const { email, isTest, csrInfo, dnsProvider, domainsVerifyPlan, profile, preferredChain } = options; const client: acme.Client = await this.getAcmeClient(email, isTest); let domains = options.domains; @@ -404,6 +405,7 @@ export class AcmeService { }, signal: this.options.signal, profile, + preferredChain, }); const crtString = crt.toString(); diff --git a/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts b/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts index 1b9e452dc..1d6086480 100644 --- a/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts +++ b/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts @@ -292,6 +292,29 @@ export class CertApplyPlugin extends CertApplyBasePlugin { }) certProfile!: string; + @TaskInput({ + title: "首选链", + value: "ISRG Root X1", + component: { + name: "a-select", + vModel: "value", + options: [ + { value: "ISRG Root X1", label: "ISRG Root X1" }, + { value: "ISRG Root X2", label: "ISRG Root X2" }, + ], + }, + helper: "仅 Let's Encrypt 可选,默认为 ISRG Root X1", + required: false, + mergeScript: ` + return { + show: ctx.compute(({form})=>{ + return form.sslProvider === 'letsencrypt' + }) + } + `, + }) + preferredChain!: string; + @TaskInput({ title: "使用代理", value: false, @@ -438,6 +461,7 @@ export class CertApplyPlugin extends CertApplyBasePlugin { isTest: false, privateKeyType: this.privateKeyType, profile: this.certProfile, + preferredChain: this.preferredChain, }); const certInfo = this.formatCerts(cert); diff --git a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts index a4937cd04..3d5b9420c 100644 --- a/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts +++ b/packages/ui/certd-server/src/modules/pipeline/service/pipeline-service.ts @@ -934,6 +934,7 @@ export class PipelineService extends BaseService { "sslProvider": "letsencrypt", "privateKeyType": "rsa_2048", "certProfile": "classic", + "preferredChain": "ISRG Root X1", "useProxy": false, "skipLocalVerify": false, "maxCheckRetryCount": 20, From f6ea9c1300e024d764c843746f25d2e47081cf80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?COYG=E2=9A=A1=EF=B8=8F?= <67215517+1411430556@users.noreply.github.com> Date: Sat, 6 Sep 2025 00:43:08 +0800 Subject: [PATCH 20/21] =?UTF-8?q?docs:=20=E6=9B=B4=E6=94=B9=E4=B8=AD?= =?UTF-8?q?=E8=8B=B1=E6=96=87=E6=A1=A3=E8=B7=B3=E8=BD=AC=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=BD=A2=E5=BC=8F=20(#518)=20@1411430556?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update README.md * Update README_en.md --- README.md | 2 +- README_en.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fc5be4673..4ebbc0d07 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Certd -[English](./README_en.md) | [中文](./README.md) +中文 | [English](./README_en.md) Certd® 是一个免费的全自动证书管理系统,让你的网站证书永不过期。 后缀d取自linux守护进程的命名风格,意为证书守护进程 diff --git a/README_en.md b/README_en.md index 57f8ea3aa..66f67a04c 100644 --- a/README_en.md +++ b/README_en.md @@ -1,6 +1,6 @@ # Certd -[English](./README_en.md) | [中文](./README.md) +[中文](./README.md) | English Certd® is a free, fully automated certificate management system that ensures your website certificates never expire. The suffix 'd' is inspired by the naming convention of Linux daemons, representing a certificate daemon. From 40475e02ec65c489e28045cfe51eac5a7ebedbba Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 6 Sep 2025 20:07:50 +0800 Subject: [PATCH 21/21] chore: --- packages/ui/certd-server/src/plugins/plugin-upyun/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/certd-server/src/plugins/plugin-upyun/client.ts b/packages/ui/certd-server/src/plugins/plugin-upyun/client.ts index 05c9c4e53..262d247d1 100644 --- a/packages/ui/certd-server/src/plugins/plugin-upyun/client.ts +++ b/packages/ui/certd-server/src/plugins/plugin-upyun/client.ts @@ -65,7 +65,7 @@ export class UpyunClient { Cookie: req.cookie } }); - if (res.msg.errors.length > 0) { + if (res.msg?.errors?.length > 0) { throw new Error(JSON.stringify(res.msg)); } if(res.data?.error_code){