diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 79e014396..8b073e35e 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -44,7 +44,7 @@ jobs: # cache: 'npm' # working-directory: ./packages/ui/certd-client - run: | - npm install -g pnpm + npm install -g pnpm@10.33.4 pnpm install npm run build working-directory: ./packages/ui/certd-client diff --git a/.github/workflows/publish-atom.yaml b/.github/workflows/publish-atom.yaml index 999da8b49..2b7114810 100644 --- a/.github/workflows/publish-atom.yaml +++ b/.github/workflows/publish-atom.yaml @@ -46,7 +46,7 @@ jobs: console.log("certd_version:",pkg.version); return pkg.version - run: | - npm install -g pnpm + npm install -g pnpm@10.33.4 pnpm install npm run build working-directory: ./packages/ui/certd-client diff --git a/.github/workflows/publish-gitee.yaml b/.github/workflows/publish-gitee.yaml index 6bc0581ba..9b86fee23 100644 --- a/.github/workflows/publish-gitee.yaml +++ b/.github/workflows/publish-gitee.yaml @@ -35,7 +35,7 @@ jobs: run: | export GITEE_TOKEN=${{ secrets.GITEE_TOKEN }} rm -rf ./pnpm*.yaml - npm install -g pnpm + npm install -g pnpm@10.33.4 pnpm install npm run publish_to_gitee working-directory: ./ diff --git a/.github/workflows/publish-github.yaml b/.github/workflows/publish-github.yaml index ec740352d..5af6c2a55 100644 --- a/.github/workflows/publish-github.yaml +++ b/.github/workflows/publish-github.yaml @@ -35,7 +35,7 @@ jobs: run: | export GITHUB_TOKEN=${{ secrets.GH_TOKEN }} rm -rf ./pnpm*.yaml - npm install -g pnpm + npm install -g pnpm@10.33.4 pnpm install npm run publish_to_github working-directory: ./ diff --git a/.github/workflows/release-image.yml b/.github/workflows/release-image.yml index acbf73cbc..98c56e45b 100644 --- a/.github/workflows/release-image.yml +++ b/.github/workflows/release-image.yml @@ -50,7 +50,7 @@ jobs: # cache: 'npm' # working-directory: ./packages/ui/certd-client - run: | - npm install -g pnpm + npm install -g pnpm@10.33.4 pnpm install npm run build working-directory: ./packages/ui/certd-client diff --git a/.gitignore b/.gitignore index e3c1e6bf4..b9c2e515e 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,7 @@ test/**/*.js /packages/pro/ test.js .history -/logs \ No newline at end of file +/logs +.pnpm-lock.yaml +pnpm-lock.yaml +.studio/ \ No newline at end of file diff --git a/.trae/skills/fast-crud-page-dev/SKILL.md b/.trae/skills/fast-crud-page-dev/SKILL.md index a5b48bf2f..35f18a7ac 100644 --- a/.trae/skills/fast-crud-page-dev/SKILL.md +++ b/.trae/skills/fast-crud-page-dev/SKILL.md @@ -33,6 +33,44 @@ version: 1.0.0 7. 删除、审核通过、拒绝等危险操作必须保留确认弹窗和错误提示,成功后刷新当前 CRUD 列表。 8. 对话框里只做纯确认时可以使用 `Modal.confirm`;只要需要字段输入、表单校验或提交字段,统一使用 `useFormDialog` / `openFormDialog`,不要在 `Modal.confirm` 的 `content` 里手写输入框。 + +## crud 配置 + +const crudOptions ={ + id: string, //表格唯一标识,同一个页面的多个表格的列设置和字段设置会根据id进行区分保存 + request:{}, //http请求 + columns:{ //字段配置 + key:{ //字段key + column:{}, //对应table-column配置 + form:{}, //表单中该字段的公共配置,viewForm、addForm、editForm、search会集成此配置,支持对应ui的form-item配置 + viewForm:{}, //查看表单中该字段的配置,支持对应ui的form-item配置 + addForm:{}, // 添加表单中该字段的配置,支持对应ui的form-item配置 + editForm:{}, //编辑表单中该字段的配置,支持对应ui的form-item配置 + search:{} //对应查询表单的form-item配置 + } + }, + search:{ //查询框配置 ,对应fs-search组件 + options:{} //查询表单配置 ,对应el-from, a-form配置 + }, + actionbar:{}, //动作条,添加按钮,对应fs-actionbar组件 + toolbar:{}, //工具条 ,对应fs-toolbar组件 + table:{ //表格配置,对应fs-table + // 对应 el-table / a-table的配置 + slots:{} // 对应el-table ,a-table的插槽 + }, + data:{}, //列表数据,无需配置,自动从pageRequest中获取 + // 如果你要手动改变表格数据,可以通过crudBinding.value.data直接赋值修改表格数据 + rowHandle:{}, //操作列配置,对应fs-row-handle + form:{ //表单的公共配置,对应el-form,a-form配置 + wrapper:{} //表单外部容器(对话框)的配置,对应el-dialog,el-drawer,a-model,a-drawer的配置 + }, + viewForm:{}, //查看表单的独立配置 + editForm:{}, //编辑表单的独立配置 + addForm:{}, //添加表单的独立配置 + pagination:{}, //分页配置 ,对应el-pagination / a-pagination + container:{}, //容器配置 ,对应fs-container +} + ## 布局高度 - Fast Crud 表格依赖外部容器高度计算。虽然表格本身有默认约 200px 高度,但页面内嵌 `fs-crud` 时,为了获得稳定可用的列表区域,必须让外层容器提供明确高度或剩余高度。 diff --git a/.vscode/settings.json b/.vscode/settings.json index 8414615d6..6ef8e544e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,5 +20,6 @@ "scm.repositories.visible": 9, "scm.repositories.explorer": false, "scm.repositories.selectionMode": "multiple", - "scm.repositories.sortOrder": "discovery time" + "scm.repositories.sortOrder": "discovery time", + "git.ignoreLimitWarning": true } \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index f2f1c7c8a..43cc830b9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,4 +1,4 @@ -# Certd 开发 Agent 上下文 +# Certd 开发 Agent 上下文 这个文件是给在本仓库工作的开发 agent 看的常驻项目说明。后续会话进入仓库后,应先读取它,再按任务需要查看具体代码,避免每次都重新全量扫描项目。 @@ -230,3 +230,6 @@ Get-ChildItem packages\ui\certd-client\src\views\certd - 单个 monorepo 包运行单元测试时,优先使用 `corepack pnpm --dir <包目录> test:unit`,例如 `corepack pnpm --dir packages\ui\certd-server test:unit`、`corepack pnpm --dir packages\core\basic test:unit`、`corepack pnpm --dir packages\plugins\plugin-lib test:unit`;也可以用包名过滤,例如 `corepack pnpm --filter @certd/ui-server test:unit`。前端 `packages\ui\certd-client` 暂时不跑单元测试。 - 前端 TS/Vue/locale 等文件改动后,优先只对本次改动文件运行项目现有自动格式化/修复;Windows/PowerShell 下 Prettier 已验证可用命令为 `packages\ui\certd-client\node_modules\.bin\prettier.cmd --write `,ESLint 可用命令为 `packages\ui\certd-client\node_modules\.bin\eslint.cmd --fix `;不要运行 `vue-tsc` / `pnpm tsc`;不要为了格式化无关文件而扩大 diff。项目保留了 `tslint` 依赖,但当前主要使用 ESLint + Prettier。 - 优先对改动包运行聚焦的测试;后端可按包运行单元测试,前端优先使用 Prettier/ESLint 做改动文件验证。只有跨包影响明显时再考虑全 monorepo 构建。 + +- 不要主动运行 `pnpm install` 安装依赖:用户会事先准备好 `node_modules`。如果 `pnpm install` 或 `test:unit` 因缺少依赖、TTY 或网络问题失败,立即停止尝试,告知用户解决环境问题。 + diff --git a/CHANGELOG.md b/CHANGELOG.md index 1145a96fa..586865785 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,26 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +### Bug Fixes + +* 修复暗黑模式下注册页面验证码看不清的问题 ([5ba33be](https://github.com/certd/certd/commit/5ba33be30f765f06cafbfcc04f5e25320db01449)) + +### Performance Improvements + +* 修复商业版套餐添加和修改时的字段显示 ([fb5b00d](https://github.com/certd/certd/commit/fb5b00d73f925036a65ce5003c57c1199578c34d)) + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +### Bug Fixes + +* **certd-server:** 调整首页缓存控制头的判断逻辑 ([0499347](https://github.com/certd/certd/commit/0499347588ee544862420ab9a5afd2546d61bc6c)) + +### Performance Improvements + +* **controller:** 更换版本获取源并添加版本标准化处理 ([cb08e06](https://github.com/certd/certd/commit/cb08e061d257ba23a0fefdbfb046a8c759def828)) + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) ### Bug Fixes diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 66bfb9145..0c6998914 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -119,6 +119,7 @@ export default defineConfig({ {text: "Certd本身的证书更新", link: "/guide/use/https/index.md"}, {text: "js脚本插件使用", link: "/guide/use/custom-script/index.md"}, {text: "邮箱配置", link: "/guide/use/email/index.md"}, + {text: "证书复用", link: "/guide/use/pretask/"}, {text: "IPv6支持", link: "/guide/use/setting/ipv6.md"}, {text: "ESXi", link: "/guide/use/ESXi/index.md"}, {text: "宝塔动态IP白名单", link: "/guide/use/baota/white_list.md"}, diff --git a/docs/guide/changelogs/CHANGELOG.md b/docs/guide/changelogs/CHANGELOG.md index 1145a96fa..586865785 100644 --- a/docs/guide/changelogs/CHANGELOG.md +++ b/docs/guide/changelogs/CHANGELOG.md @@ -3,6 +3,26 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +### Bug Fixes + +* 修复暗黑模式下注册页面验证码看不清的问题 ([5ba33be](https://github.com/certd/certd/commit/5ba33be30f765f06cafbfcc04f5e25320db01449)) + +### Performance Improvements + +* 修复商业版套餐添加和修改时的字段显示 ([fb5b00d](https://github.com/certd/certd/commit/fb5b00d73f925036a65ce5003c57c1199578c34d)) + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +### Bug Fixes + +* **certd-server:** 调整首页缓存控制头的判断逻辑 ([0499347](https://github.com/certd/certd/commit/0499347588ee544862420ab9a5afd2546d61bc6c)) + +### Performance Improvements + +* **controller:** 更换版本获取源并添加版本标准化处理 ([cb08e06](https://github.com/certd/certd/commit/cb08e061d257ba23a0fefdbfb046a8c759def828)) + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) ### Bug Fixes diff --git a/docs/guide/qa/use.md b/docs/guide/qa/use.md index c2c4df077..28652cd52 100644 --- a/docs/guide/qa/use.md +++ b/docs/guide/qa/use.md @@ -59,4 +59,7 @@ DNS problem: NXDOMAIN looking up TXT for _acme-challenge.xxxxx - check that a D 证书颁发机构向域名ns查询TXT验证记录失败,有以下几种可能 1、域名的ns服务器修改成别的了,但申请证书时的DNS提供商选择错误(检查确认,配置正确的DNS提供商) 2、证书颁发机构与ns域名服务器之间访问不通,无法查询到TXT记录(尝试更换证书颁发机构) -3、ns服务商解析值生效慢(尝试修改证书申请任务里面的等待生效时长600-1000s) \ No newline at end of file +3、ns服务商解析值生效慢(尝试修改证书申请任务里面的等待生效时长600-1000s) + +## 8. 同一份证书上传多次的问题 +同一份证书在阿里云、腾讯云中上传多次,[请使用证书复用功能](../use/pretask/index.md),避免重复上传。 \ No newline at end of file diff --git a/docs/guide/use/pretask/index.md b/docs/guide/use/pretask/index.md index 96b6df8e1..681493cc6 100644 --- a/docs/guide/use/pretask/index.md +++ b/docs/guide/use/pretask/index.md @@ -1,13 +1,13 @@ -# 带输出的前置任务 +# 证书复用 前置任务输出可以在后续任务中使用 比如上传证书到阿里云,会返回阿里云的CertId,之后其他阿里云的部署任务可以选择复用这个证书 -## 复用证书 +## 使用方法 ![img.png](images/pretask1.png) 在后续任务中可以选择前置任务的输出 -![img.png](images/pretask2.png) \ No newline at end of file +![img.png](images/pretask2.png) diff --git a/lerna.json b/lerna.json index 380643bc5..c372042d0 100644 --- a/lerna.json +++ b/lerna.json @@ -9,5 +9,5 @@ } }, "npmClient": "pnpm", - "version": "1.40.1" + "version": "1.40.3" } diff --git a/package.json b/package.json index ab2d70812..02bd9c538 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "devb": "lerna run dev-build", "i-all": "lerna link && lerna exec npm install ", "publish": "pnpm run prepublishOnly2 && lerna publish --force-publish=pro/plus-core --conventional-commits && pnpm run afterpublishOnly ", + "publish2":" npm run pub_all && pnpm run afterpublishOnly", "afterpublishOnly": "pnpm run copylogs && time /t >trigger/build.trigger && git add ./trigger/build.trigger && git commit -m \"build: trigger build image\" && TIMEOUT /T 10 && pnpm run commitAll", "transform-sql": "cd ./packages/ui/certd-server/db/ && node --experimental-json-modules transform.js", "plugin-doc-gen": "cd ./packages/ui/certd-server/ && pnpm run export-metadata", @@ -39,7 +40,7 @@ "test:unit": "cross-env NODE_ENV=unittest pnpm -r --workspace-concurrency=1 run test:unit", "pub": "echo 1", "dev": "pnpm run -r --parallel compile ", - "pub_all":"pnpm run -r --parallel pub ", + "pub_all": "node ./scripts/pub-all.js", "release": "time /t >trigger/release.trigger && git add trigger/release.trigger && git commit -m \"build: release\" && git push", "publish_to_atomgit": "node --experimental-json-modules ./scripts/publish-atomgit.js", "publish_to_gitee": "node --experimental-json-modules ./scripts/publish-gitee.js", diff --git a/packages/core/acme-client/CHANGELOG.md b/packages/core/acme-client/CHANGELOG.md index e16227252..70091ff37 100644 --- a/packages/core/acme-client/CHANGELOG.md +++ b/packages/core/acme-client/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/publishlab/node-acme-client/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/acme-client + +## [1.40.2](https://github.com/publishlab/node-acme-client/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/acme-client + ## [1.40.1](https://github.com/publishlab/node-acme-client/compare/v1.40.0...v1.40.1) (2026-05-18) **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 fd291efb6..74d5ba2b9 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.40.1", + "version": "1.40.3", "type": "module", "module": "./dist/index.js", "main": "./dist/index.js", @@ -18,7 +18,7 @@ "types" ], "dependencies": { - "@certd/basic": "^1.40.1", + "@certd/basic": "^1.40.3", "@peculiar/x509": "^1.11.0", "asn1js": "^3.0.5", "axios": "^1.9.0", @@ -76,5 +76,5 @@ "bugs": { "url": "https://github.com/publishlab/node-acme-client/issues" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/core/acme-client/src/client.ts b/packages/core/acme-client/src/client.ts index 76eadbf97..6fa1684ca 100644 --- a/packages/core/acme-client/src/client.ts +++ b/packages/core/acme-client/src/client.ts @@ -467,6 +467,10 @@ class AcmeClient { return createHash('sha256').update(result).digest('base64url'); } + if (challenge.type === 'dns-persist-01') { + return ''; + } + /* https://datatracker.ietf.org/doc/html/rfc8737 */ if (challenge.type === 'tls-alpn-01') { return result; diff --git a/packages/core/acme-client/src/rfc8555.ts b/packages/core/acme-client/src/rfc8555.ts index 675163445..559fbf37e 100644 --- a/packages/core/acme-client/src/rfc8555.ts +++ b/packages/core/acme-client/src/rfc8555.ts @@ -97,7 +97,11 @@ export interface DnsChallenge extends ChallengeAbstract { token: string; } -export type Challenge = HttpChallenge | DnsChallenge; +export interface DnsPersistChallenge extends ChallengeAbstract { + type: "dns-persist-01"; +} + +export type Challenge = HttpChallenge | DnsChallenge | DnsPersistChallenge; /** * Certificate diff --git a/packages/core/acme-client/src/verify.ts b/packages/core/acme-client/src/verify.ts index efcff1f4b..ecdc53d9b 100644 --- a/packages/core/acme-client/src/verify.ts +++ b/packages/core/acme-client/src/verify.ts @@ -170,7 +170,7 @@ export function createChallengeFn(opts = {}) { if (txtRecords.length === 0) { - throw new Error(`没有找到TXT解析记录(${recordName})`); + throw new Error(`没有找到TXT解析记录(${recordName}),请稍后重试`); } return txtRecords; } @@ -203,6 +203,24 @@ export function createChallengeFn(opts = {}) { return true; } + async function verifyDnsPersistChallenge(authz, challenge, keyAuthorization, prefix = '_validation-persist.') { + const recordName = `${prefix}${authz.identifier.value.replace(/^\*\./, '')}`; + log(`本地校验DNS持久验证TXT记录: ${recordName}`); + let recordValues = await walkTxtRecord(recordName, 0, walkFromAuthoritative); + recordValues = [...new Set(recordValues)]; + const expected = challenge.expectedRecordValue; + if (!expected) { + log(`未提供dns-persist-01本地校验期望值,跳过精确匹配,仅确认TXT记录存在`); + return true; + } + log(`DNS查询成功, 找到 ${recordValues.length} 条TXT记录:${recordValues}`); + if (!recordValues.length || !recordValues.includes(expected)) { + throw new Error(`没有找到需要的DNS持久验证TXT记录: ${recordName},请稍后重试,期望:${expected},结果:${recordValues}`); + } + log(`DNS持久验证记录匹配成功(${challenge.type}/${recordName}):${expected}`); + return true; + } + /** * Verify ACME TLS ALPN challenge * @@ -234,6 +252,7 @@ export function createChallengeFn(opts = {}) { challenges: { 'http-01': verifyHttpChallenge, 'dns-01': verifyDnsChallenge, + 'dns-persist-01': verifyDnsPersistChallenge, 'tls-alpn-01': verifyTlsAlpnChallenge, }, walkTxtRecord, diff --git a/packages/core/acme-client/types/index.d.ts b/packages/core/acme-client/types/index.d.ts index 7bb1f620f..5e082f93d 100644 --- a/packages/core/acme-client/types/index.d.ts +++ b/packages/core/acme-client/types/index.d.ts @@ -57,7 +57,7 @@ export interface ClientExternalAccountBindingOptions { export interface ClientAutoOptions { csr: CsrBuffer | CsrString; - challengeCreateFn: (authz: Authorization, keyAuthorization: (challenge:rfc8555.Challenge)=>Promise) => Promise<{recordReq?:any,recordRes?:any,dnsProvider?:any,challenge: rfc8555.Challenge,keyAuthorization:string}>; + challengeCreateFn: (authz: Authorization, keyAuthorization: (challenge:rfc8555.Challenge)=>Promise) => Promise<{recordReq?:any,recordRes?:any,dnsProvider?:any,challenge: rfc8555.Challenge,keyAuthorization:string,httpUploader?:any}>; challengeRemoveFn: (authz: Authorization, challenge: rfc8555.Challenge, keyAuthorization: string,recordReq:any, recordRes:any,dnsProvider:any,httpUploader:any) => Promise; email?: string; termsOfServiceAgreed?: boolean; diff --git a/packages/core/acme-client/types/rfc8555.d.ts b/packages/core/acme-client/types/rfc8555.d.ts index 26b759bbd..0e1fa7fcc 100644 --- a/packages/core/acme-client/types/rfc8555.d.ts +++ b/packages/core/acme-client/types/rfc8555.d.ts @@ -97,7 +97,11 @@ export interface DnsChallenge extends ChallengeAbstract { token: string; } -export type Challenge = HttpChallenge | DnsChallenge; +export interface DnsPersistChallenge extends ChallengeAbstract { + type: 'dns-persist-01'; +} + +export type Challenge = HttpChallenge | DnsChallenge | DnsPersistChallenge; /** * Certificate diff --git a/packages/core/basic/CHANGELOG.md b/packages/core/basic/CHANGELOG.md index 3fabd977f..a3a49b555 100644 --- a/packages/core/basic/CHANGELOG.md +++ b/packages/core/basic/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/basic + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/basic + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **Note:** Version bump only for package @certd/basic diff --git a/packages/core/basic/build.md b/packages/core/basic/build.md index 222b6abb3..efee0407a 100644 --- a/packages/core/basic/build.md +++ b/packages/core/basic/build.md @@ -1 +1 @@ -00:34 +22:57 diff --git a/packages/core/basic/package.json b/packages/core/basic/package.json index 7742b3932..e135c7d44 100644 --- a/packages/core/basic/package.json +++ b/packages/core/basic/package.json @@ -1,7 +1,7 @@ { "name": "@certd/basic", "private": false, - "version": "1.40.1", + "version": "1.40.3", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -52,5 +52,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/core/pipeline/CHANGELOG.md b/packages/core/pipeline/CHANGELOG.md index 240ba065f..26cdf25b9 100644 --- a/packages/core/pipeline/CHANGELOG.md +++ b/packages/core/pipeline/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/pipeline + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/pipeline + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **Note:** Version bump only for package @certd/pipeline diff --git a/packages/core/pipeline/package.json b/packages/core/pipeline/package.json index 97c55d5c2..2752b8788 100644 --- a/packages/core/pipeline/package.json +++ b/packages/core/pipeline/package.json @@ -1,7 +1,7 @@ { "name": "@certd/pipeline", "private": false, - "version": "1.40.1", + "version": "1.40.3", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -19,8 +19,8 @@ "compile": "tsc --skipLibCheck --watch" }, "dependencies": { - "@certd/basic": "^1.40.1", - "@certd/plus-core": "^1.40.1", + "@certd/basic": "^1.40.3", + "@certd/plus-core": "^1.40.3", "dayjs": "^1.11.7", "lodash-es": "^4.17.21", "reflect-metadata": "^0.1.13" @@ -49,5 +49,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/core/pipeline/src/access/api.ts b/packages/core/pipeline/src/access/api.ts index 9a4a69be8..b2d2bf55f 100644 --- a/packages/core/pipeline/src/access/api.ts +++ b/packages/core/pipeline/src/access/api.ts @@ -19,6 +19,7 @@ export type AccessInputDefine = FormItemProps & { }; export type AccessDefine = Registrable & { icon?: string; + subtype?: string; input?: { [key: string]: AccessInputDefine; }; diff --git a/packages/libs/lib-huawei/CHANGELOG.md b/packages/libs/lib-huawei/CHANGELOG.md index 68ec2b800..16a4cb775 100644 --- a/packages/libs/lib-huawei/CHANGELOG.md +++ b/packages/libs/lib-huawei/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/lib-huawei + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/lib-huawei + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **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 32af2c5ea..cb069666a 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.40.1", + "version": "1.40.3", "main": "./dist/bundle.js", "module": "./dist/bundle.js", "types": "./dist/d/index.d.ts", @@ -27,5 +27,5 @@ "prettier": "^2.8.8", "tslib": "^2.8.1" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/libs/lib-iframe/CHANGELOG.md b/packages/libs/lib-iframe/CHANGELOG.md index b275d75b2..eec62c04d 100644 --- a/packages/libs/lib-iframe/CHANGELOG.md +++ b/packages/libs/lib-iframe/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/lib-iframe + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/lib-iframe + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **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 de3b30466..5f86bf35b 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.40.1", + "version": "1.40.3", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -34,5 +34,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/libs/lib-jdcloud/CHANGELOG.md b/packages/libs/lib-jdcloud/CHANGELOG.md index 1f0ba32b5..f7b5aa6bd 100644 --- a/packages/libs/lib-jdcloud/CHANGELOG.md +++ b/packages/libs/lib-jdcloud/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/jdcloud + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/jdcloud + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **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 773b65cc1..02ae7edce 100644 --- a/packages/libs/lib-jdcloud/package.json +++ b/packages/libs/lib-jdcloud/package.json @@ -1,6 +1,6 @@ { "name": "@certd/jdcloud", - "version": "1.40.1", + "version": "1.40.3", "description": "jdcloud openApi sdk", "main": "./dist/bundle.js", "module": "./dist/bundle.js", @@ -59,5 +59,5 @@ "fetch" ] }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/libs/lib-k8s/CHANGELOG.md b/packages/libs/lib-k8s/CHANGELOG.md index 0b23b04f2..573dd4c5e 100644 --- a/packages/libs/lib-k8s/CHANGELOG.md +++ b/packages/libs/lib-k8s/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/lib-k8s + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/lib-k8s + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **Note:** Version bump only for package @certd/lib-k8s diff --git a/packages/libs/lib-k8s/package.json b/packages/libs/lib-k8s/package.json index afa3997c0..b9a2fccfa 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.40.1", + "version": "1.40.3", "type": "module", "main": "./dist/index.js", "module": "./dist/index.js", @@ -19,7 +19,7 @@ "compile": "tsc --skipLibCheck --watch" }, "dependencies": { - "@certd/basic": "^1.40.1", + "@certd/basic": "^1.40.3", "@kubernetes/client-node": "0.21.0" }, "devDependencies": { @@ -36,5 +36,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/libs/lib-server/CHANGELOG.md b/packages/libs/lib-server/CHANGELOG.md index 91884dc62..f0e51690a 100644 --- a/packages/libs/lib-server/CHANGELOG.md +++ b/packages/libs/lib-server/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/lib-server + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/lib-server + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **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 7b5cb7a12..ffa97ed86 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.40.1", + "version": "1.40.3", "description": "midway with flyway, sql upgrade way ", "private": false, "type": "module", @@ -29,11 +29,11 @@ ], "license": "AGPL", "dependencies": { - "@certd/acme-client": "^1.40.1", - "@certd/basic": "^1.40.1", - "@certd/pipeline": "^1.40.1", - "@certd/plugin-lib": "^1.40.1", - "@certd/plus-core": "^1.40.1", + "@certd/acme-client": "^1.40.3", + "@certd/basic": "^1.40.3", + "@certd/pipeline": "^1.40.3", + "@certd/plugin-lib": "^1.40.3", + "@certd/plus-core": "^1.40.3", "@midwayjs/cache": "3.14.0", "@midwayjs/core": "3.20.11", "@midwayjs/i18n": "3.20.13", @@ -69,5 +69,5 @@ "typeorm": "^0.3.11", "typescript": "^5.4.2" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/libs/lib-server/src/user/access/entity/access.ts b/packages/libs/lib-server/src/user/access/entity/access.ts index 3bebf7bfa..10fc2c6aa 100644 --- a/packages/libs/lib-server/src/user/access/entity/access.ts +++ b/packages/libs/lib-server/src/user/access/entity/access.ts @@ -19,6 +19,9 @@ export class AccessEntity { @Column({ comment: '类型', length: 100 }) type: string; + @Column({ name: 'subtype', comment: '子类型', length: 100, nullable: true }) + subtype: string; + @Column({ name: 'setting', comment: '设置', length: 10240, nullable: true }) setting: string; diff --git a/packages/libs/lib-server/src/user/access/service/access-getter.ts b/packages/libs/lib-server/src/user/access/service/access-getter.ts index 2333fc600..8a5505efb 100644 --- a/packages/libs/lib-server/src/user/access/service/access-getter.ts +++ b/packages/libs/lib-server/src/user/access/service/access-getter.ts @@ -1,4 +1,4 @@ -import { IAccessService } from '@certd/pipeline'; +import { IAccessService } from "@certd/pipeline"; export class AccessGetter implements IAccessService { userId: number; @@ -15,6 +15,6 @@ export class AccessGetter implements IAccessService { } async getCommonById(id: any) { - return await this.getter(id, 0,null); + return await this.getter(id, 0, null); } } diff --git a/packages/libs/lib-server/src/user/access/service/access-service.test.ts b/packages/libs/lib-server/src/user/access/service/access-service.test.ts index 4e9758eb4..3fc50a764 100644 --- a/packages/libs/lib-server/src/user/access/service/access-service.test.ts +++ b/packages/libs/lib-server/src/user/access/service/access-service.test.ts @@ -1,14 +1,16 @@ import assert from "assert"; +import esmock from "esmock"; import { AccessService } from "./access-service.js"; describe("AccessService", () => { it("does not write id into access setting when updating selected fields", async () => { let updateParam: any; const service = new AccessService(); - service.info = async () => ({ - id: 12, - type: "eab", - } as any); + service.info = async () => + ({ + id: 12, + type: "eab", + }) as any; service.decryptAccessEntity = () => ({ kid: "kid-1", }); @@ -27,4 +29,82 @@ describe("AccessService", () => { accountKey: "account-key", }); }); + + it("writes subtype from access define field", async () => { + const { AccessService: MockedAccessService } = await esmock("./access-service.js", { + "@certd/pipeline": { + accessRegistry: { + getDefine(type: string) { + assert.equal(type, "acmeAccount"); + return { + name: "acmeAccount", + subtype: "caType", + input: { + caType: {}, + account: { + encrypt: true, + }, + }, + }; + }, + }, + }, + }); + const service = new MockedAccessService(); + service.encryptService = { + encrypt(value: string) { + return `encrypted:${value}`; + }, + }; + const param: any = { + type: "acmeAccount", + setting: JSON.stringify({ + caType: "letsencrypt", + account: JSON.stringify({ + accountKey: "key", + accountUri: "https://example.com/acct/1", + caType: "letsencrypt", + }), + }), + }; + + service.encryptSetting(param); + + assert.equal(param.subtype, "letsencrypt"); + }); + + it("allows acme account access to be saved before account generation", async () => { + const { AccessService: MockedAccessService } = await esmock("./access-service.js", { + "@certd/pipeline": { + accessRegistry: { + getDefine() { + return { + name: "acmeAccount", + subtype: "caType", + input: { + caType: {}, + account: { + encrypt: true, + }, + }, + }; + }, + }, + }, + }); + const service = new MockedAccessService(); + const param: any = { + type: "acmeAccount", + setting: JSON.stringify({ + caType: "letsencrypt", + }), + }; + + service.encryptSetting(param); + + assert.equal(param.subtype, "letsencrypt"); + assert.deepEqual(JSON.parse(param.setting), { + caType: "letsencrypt", + }); + }); }); diff --git a/packages/libs/lib-server/src/user/access/service/access-service.ts b/packages/libs/lib-server/src/user/access/service/access-service.ts index 8bbb81e90..7539dc9f4 100644 --- a/packages/libs/lib-server/src/user/access/service/access-service.ts +++ b/packages/libs/lib-server/src/user/access/service/access-service.ts @@ -1,17 +1,17 @@ -import {Inject, Provide, Scope, ScopeEnum} from '@midwayjs/core'; -import {InjectEntityModel} from '@midwayjs/typeorm'; +import { Inject, Provide, Scope, ScopeEnum } from "@midwayjs/core"; +import { InjectEntityModel } from "@midwayjs/typeorm"; import { In, Repository } from "typeorm"; -import {AccessGetter, BaseService, PageReq, PermissionException, ValidateException} from '../../../index.js'; -import {AccessEntity} from '../entity/access.js'; -import {AccessDefine, accessRegistry, newAccess} from '@certd/pipeline'; -import {EncryptService} from './encrypt-service.js'; -import { logger, utils } from '@certd/basic'; +import { AccessGetter, BaseService, PageReq, PermissionException, ValidateException } from "../../../index.js"; +import { AccessEntity } from "../entity/access.js"; +import { AccessDefine, accessRegistry, newAccess } from "@certd/pipeline"; +import { EncryptService } from "./encrypt-service.js"; +import { logger, utils } from "@certd/basic"; /** * 授权 */ @Provide() -@Scope(ScopeEnum.Request, {allowDowngrade: true}) +@Scope(ScopeEnum.Request, { allowDowngrade: true }) export class AccessService extends BaseService { @InjectEntityModel(AccessEntity) repository: Repository; @@ -36,16 +36,16 @@ export class AccessService extends BaseService { async add(param) { let oldEntity = null; - if (param._copyFrom){ + if (param._copyFrom) { oldEntity = await this.info(param._copyFrom); if (oldEntity == null) { - throw new ValidateException('该授权配置不存在,请确认是否已被删除'); + throw new ValidateException("该授权配置不存在,请确认是否已被删除"); } - if (oldEntity.userId !== param.userId) { - throw new ValidateException('您无权查看该授权配置'); + if (oldEntity.userId !== param.userId) { + throw new ValidateException("您无权查看该授权配置"); } } - delete param._copyFrom + delete param._copyFrom; this.encryptSetting(param, oldEntity); param.keyId = "ac_" + utils.id.simpleNanoId(); return await super.add(param); @@ -62,17 +62,20 @@ export class AccessService extends BaseService { return; } const json = JSON.parse(setting); + if (accessDefine.subtype) { + param.subtype = json[accessDefine.subtype] || null; + } let oldSetting = {}; let encryptSetting = {}; - const firstEncrypt = !oldSettingEntity || !oldSettingEntity.encryptSetting || oldSettingEntity.encryptSetting === '{}'; + const firstEncrypt = !oldSettingEntity || !oldSettingEntity.encryptSetting || oldSettingEntity.encryptSetting === "{}"; if (oldSettingEntity) { - oldSetting = JSON.parse(oldSettingEntity.setting || '{}'); - encryptSetting = JSON.parse(oldSettingEntity.encryptSetting || '{}'); + oldSetting = JSON.parse(oldSettingEntity.setting || "{}"); + encryptSetting = JSON.parse(oldSettingEntity.encryptSetting || "{}"); } for (const key in json) { //加密 let value = json[key]; - if (value && typeof value === 'string') { + if (value && typeof value === "string") { //去除前后空格 value = value.trim(); json[key] = value; @@ -81,7 +84,7 @@ export class AccessService extends BaseService { if (!accessInputDefine) { continue; } - if (!accessInputDefine.encrypt || !value || typeof value !== 'string') { + if (!accessInputDefine.encrypt || !value || typeof value !== "string") { //定义无需加密、value为空、不是字符串 这些不需要加密 encryptSetting[key] = { value: value, @@ -96,7 +99,7 @@ export class AccessService extends BaseService { const subIndex = Math.min(2, length); let starLength = length - subIndex * 2; starLength = Math.max(2, starLength); - const starString = '*'.repeat(starLength); + const starString = "*".repeat(starLength); json[key] = value.substring(0, subIndex) + starString + value.substring(value.length - subIndex); encryptSetting[key] = { value: this.encryptService.encrypt(value), @@ -116,21 +119,21 @@ export class AccessService extends BaseService { async update(param) { const oldEntity = await this.info(param.id); if (oldEntity == null) { - throw new ValidateException('该授权配置不存在,请确认是否已被删除'); + throw new ValidateException("该授权配置不存在,请确认是否已被删除"); } this.encryptSetting(param, oldEntity); - delete param.keyId + delete param.keyId; return await super.update(param); } async updateAccess(access: any) { const oldEntity = await this.info(access.id); if (oldEntity == null) { - throw new ValidateException('该授权配置不存在,请确认是否已被删除'); + throw new ValidateException("该授权配置不存在,请确认是否已被删除"); } const setting = this.decryptAccessEntity(oldEntity); for (const key of Object.keys(access)) { - if (key === 'id') { + if (key === "id") { continue; } setting[key] = access[key]; @@ -145,11 +148,13 @@ export class AccessService extends BaseService { async getSimpleInfo(id: number) { const entity = await this.info(id); if (entity == null) { - throw new ValidateException('该授权配置不存在,请确认是否已被删除'); + throw new ValidateException("该授权配置不存在,请确认是否已被删除"); } return { id: entity.id, name: entity.name, + type: entity.type, + subtype: entity.subtype, userId: entity.userId, projectId: entity.projectId, }; @@ -162,14 +167,14 @@ export class AccessService extends BaseService { } if (checkUserId) { if (userId == null) { - throw new ValidateException('userId不能为空'); + throw new ValidateException("userId不能为空"); } if (userId !== entity.userId) { - throw new PermissionException('您对该Access授权无访问权限'); + throw new PermissionException("您对该Access授权无访问权限"); } } if (projectId != null && projectId !== entity.projectId) { - throw new PermissionException('您对该Access授权无访问权限'); + throw new PermissionException("您对该Access授权无访问权限"); } // const access = accessRegistry.get(entity.type); @@ -178,8 +183,8 @@ export class AccessService extends BaseService { id: entity.id, ...setting, }; - const accessGetter = new AccessGetter(userId,projectId, this.getById.bind(this)); - return await newAccess(entity.type, input,accessGetter); + const accessGetter = new AccessGetter(userId, projectId, this.getById.bind(this)); + return await newAccess(entity.type, input, accessGetter); } async getById(id: any, userId: number, projectId?: number): Promise { @@ -188,7 +193,7 @@ export class AccessService extends BaseService { decryptAccessEntity(entity: AccessEntity): any { let setting = {}; - if (entity.encryptSetting && entity.encryptSetting !== '{}') { + if (entity.encryptSetting && entity.encryptSetting !== "{}") { setting = JSON.parse(entity.encryptSetting); for (const key in setting) { //解密 @@ -213,12 +218,11 @@ export class AccessService extends BaseService { return accessRegistry.getDefine(type); } - async getSimpleByIds(ids: number[], userId: any, projectId?: number) { if (ids.length === 0) { return []; } - if (userId==null) { + if (userId == null) { return []; } return await this.repository.find({ @@ -231,24 +235,24 @@ export class AccessService extends BaseService { id: true, name: true, type: true, - userId:true, - projectId:true, + subtype: true, + userId: true, + projectId: true, }, }); - } /** * 复制授权到其他项目 - * @param accessId - * @param projectId + * @param accessId + * @param projectId */ - async copyTo(accessId: number,projectId?: number) { + async copyTo(accessId: number, projectId?: number) { const access = await this.info(accessId); if (access == null) { throw new Error(`该授权配置不存在,请确认是否已被删除:id=${accessId}`); } - + const keyId = access.keyId; //检查目标项目里是否已经有相同keyId的配置 const existAccess = await this.repository.findOne({ @@ -263,10 +267,10 @@ export class AccessService extends BaseService { } const newAccess = { ...access, - userId:-1, + userId: -1, id: undefined, projectId, - } + }; await this.repository.save(newAccess); return newAccess.id; } diff --git a/packages/libs/midway-flyway-js/CHANGELOG.md b/packages/libs/midway-flyway-js/CHANGELOG.md index 5ed49bcb6..9b8b42308 100644 --- a/packages/libs/midway-flyway-js/CHANGELOG.md +++ b/packages/libs/midway-flyway-js/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/midway-flyway-js + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/midway-flyway-js + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **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 f096c140c..ec5f2ffe8 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.40.1", + "version": "1.40.3", "description": "midway with flyway, sql upgrade way ", "private": false, "type": "module", @@ -49,5 +49,5 @@ "typeorm": "^0.3.11", "typescript": "^5.4.2" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/plugins/plugin-cert/CHANGELOG.md b/packages/plugins/plugin-cert/CHANGELOG.md index 1db76a6ad..8d048ed31 100644 --- a/packages/plugins/plugin-cert/CHANGELOG.md +++ b/packages/plugins/plugin-cert/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/plugin-cert + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/plugin-cert + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **Note:** Version bump only for package @certd/plugin-cert diff --git a/packages/plugins/plugin-cert/package.json b/packages/plugins/plugin-cert/package.json index 41b1d4fe3..efebd1e5c 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.40.1", + "version": "1.40.3", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -18,10 +18,10 @@ "compile": "tsc --skipLibCheck --watch" }, "dependencies": { - "@certd/acme-client": "^1.40.1", - "@certd/basic": "^1.40.1", - "@certd/pipeline": "^1.40.1", - "@certd/plugin-lib": "^1.40.1", + "@certd/acme-client": "^1.40.3", + "@certd/basic": "^1.40.3", + "@certd/pipeline": "^1.40.3", + "@certd/plugin-lib": "^1.40.3", "psl": "^1.9.0", "punycode.js": "^2.3.1" }, @@ -41,5 +41,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/plugins/plugin-lib/CHANGELOG.md b/packages/plugins/plugin-lib/CHANGELOG.md index ffd42eff9..2b6feaeb4 100644 --- a/packages/plugins/plugin-lib/CHANGELOG.md +++ b/packages/plugins/plugin-lib/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +**Note:** Version bump only for package @certd/plugin-lib + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/plugin-lib + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) **Note:** Version bump only for package @certd/plugin-lib diff --git a/packages/plugins/plugin-lib/package.json b/packages/plugins/plugin-lib/package.json index c6e76c953..b3255cef6 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.40.1", + "version": "1.40.3", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -23,10 +23,10 @@ "@alicloud/pop-core": "^1.7.10", "@alicloud/tea-util": "^1.4.11", "@aws-sdk/client-s3": "^3.964.0", - "@certd/acme-client": "^1.40.1", - "@certd/basic": "^1.40.1", - "@certd/pipeline": "^1.40.1", - "@certd/plus-core": "^1.40.1", + "@certd/acme-client": "^1.40.3", + "@certd/basic": "^1.40.3", + "@certd/pipeline": "^1.40.3", + "@certd/plus-core": "^1.40.3", "@kubernetes/client-node": "0.21.0", "ali-oss": "^6.22.0", "basic-ftp": "^5.0.5", @@ -61,5 +61,5 @@ "tslib": "^2.8.1", "typescript": "^5.4.2" }, - "gitHead": "73996f055bbff996ee776e7788e5a5cb500fc197" + "gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916" } diff --git a/packages/plugins/plugin-lib/src/cert/cert-reader.ts b/packages/plugins/plugin-lib/src/cert/cert-reader.ts index 277514df6..0bf366c5b 100644 --- a/packages/plugins/plugin-lib/src/cert/cert-reader.ts +++ b/packages/plugins/plugin-lib/src/cert/cert-reader.ts @@ -13,7 +13,7 @@ export interface ICertInfoGetter { export type CertInfo = { crt: string; //fullchain证书 key: string; //私钥 - csr: string; //csr + csr?: string; //csr oc?: string; //仅证书,非fullchain证书 ic?: string; //中间证书 pfx?: string; diff --git a/packages/ui/certd-client/CHANGELOG.md b/packages/ui/certd-client/CHANGELOG.md index dde04b008..b6b7fe07c 100644 --- a/packages/ui/certd-client/CHANGELOG.md +++ b/packages/ui/certd-client/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.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21) + +### Bug Fixes + +* 修复暗黑模式下注册页面验证码看不清的问题 ([5ba33be](https://github.com/certd/certd/commit/5ba33be30f765f06cafbfcc04f5e25320db01449)) + +### Performance Improvements + +* 修复商业版套餐添加和修改时的字段显示 ([fb5b00d](https://github.com/certd/certd/commit/fb5b00d73f925036a65ce5003c57c1199578c34d)) + +## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19) + +**Note:** Version bump only for package @certd/ui-client + ## [1.40.1](https://github.com/certd/certd/compare/v1.40.0...v1.40.1) (2026-05-18) ### Performance Improvements diff --git a/packages/ui/certd-client/package.json b/packages/ui/certd-client/package.json index 567d0aa2d..4286cfd88 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.40.1", + "version": "1.40.3", "private": true, "scripts": { "dev": "vite --open", @@ -106,8 +106,8 @@ "zod-defaults": "^0.1.3" }, "devDependencies": { - "@certd/lib-iframe": "^1.40.1", - "@certd/pipeline": "^1.40.1", + "@certd/lib-iframe": "^1.40.3", + "@certd/pipeline": "^1.40.3", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@types/chai": "^4.3.12", diff --git a/packages/ui/certd-client/public/static/icons/demo_index.html b/packages/ui/certd-client/public/static/icons/demo_index.html index 3bf288ec2..ae8863922 100644 --- a/packages/ui/certd-client/public/static/icons/demo_index.html +++ b/packages/ui/certd-client/public/static/icons/demo_index.html @@ -54,6 +54,30 @@
    +
  • + +
    wechat
    +
    &#xe735;
    +
  • + +
  • + +
    QQ
    +
    &#xe667;
    +
  • + +
  • + +
    wechat
    +
    &#xe60c;
    +
  • + +
  • + +
    acepanel
    +
    &#xe609;
    +
  • +
  • 飞牛
    @@ -252,7 +276,7 @@
    @font-face {
       font-family: 'iconfont';
    -  src: url('iconfont.svg?t=1766772710945#iconfont') format('svg');
    +  src: url('iconfont.svg?t=1779270521617#iconfont') format('svg');
     }
     

    第二步:定义使用 iconfont 的样式

    @@ -278,6 +302,42 @@
      +
    • + +
      + wechat +
      +
      .icon-wxpay +
      +
    • + +
    • + +
      + QQ +
      +
      .icon-qq +
      +
    • + +
    • + +
      + wechat +
      +
      .icon-wechat +
      +
    • + +
    • + +
      + acepanel +
      +
      .icon-acepanel +
      +
    • +
    • @@ -575,6 +635,38 @@
        +
      • + +
        wechat
        +
        #icon-wxpay
        +
      • + +
      • + +
        QQ
        +
        #icon-qq
        +
      • + +
      • + +
        wechat
        +
        #icon-wechat
        +
      • + +
      • + +
        acepanel
        +
        #icon-acepanel
        +
      • +
      • +