Compare commits

..

24 Commits

Author SHA1 Message Date
xiaojunnuo
0725c663c4 v1.31.7 2025-03-25 00:03:50 +08:00
xiaojunnuo
ce82239c8b build: prepare to build 2025-03-25 00:01:49 +08:00
xiaojunnuo
2523008cb6 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-03-24 23:59:24 +08:00
xiaojunnuo
69212b9ad1 build: publish 2025-03-24 23:52:43 +08:00
xiaojunnuo
636cb3399b build: trigger build image 2025-03-24 23:52:22 +08:00
xiaojunnuo
86ca35ce33 v1.31.6 2025-03-24 23:51:00 +08:00
xiaojunnuo
675ab31305 build: prepare to build 2025-03-24 23:48:42 +08:00
xiaojunnuo
83c2d743bc chore: 2025-03-24 23:48:34 +08:00
xiaojunnuo
2c87b3d906 build: prepare to build 2025-03-24 23:47:10 +08:00
xiaojunnuo
05b6159802 perf: 上传到主机支持scp方式 2025-03-24 23:45:45 +08:00
xiaojunnuo
c56f48c1e3 perf: 优化图标 2025-03-24 21:27:31 +08:00
xiaojunnuo
e18e399ce6 perf: 支持部署到lucky 2025-03-24 18:39:22 +08:00
xiaojunnuo
d66ade4e47 perf: 增加服务器时间警告 2025-03-24 18:39:08 +08:00
xiaojunnuo
90b045af6d fix: 修复dns.la无法申请证书的bug 2025-03-24 09:38:18 +08:00
xiaojunnuo
5cccb21175 chore: 2025-03-24 00:10:01 +08:00
xiaojunnuo
1a71969403 chore: 2025-03-24 00:05:19 +08:00
xiaojunnuo
389a1fbd04 build: publish 2025-03-22 15:05:31 +08:00
xiaojunnuo
ca02ae6183 build: trigger build image 2025-03-22 15:05:11 +08:00
xiaojunnuo
92446cb048 v1.31.5 2025-03-22 15:03:34 +08:00
xiaojunnuo
954ce4533f build: prepare to build 2025-03-22 15:01:00 +08:00
xiaojunnuo
f7b88f9e3b fix: 修复通知选择器无法选择的bug
https://github.com/certd/certd/issues/351
2025-03-22 15:00:17 +08:00
xiaojunnuo
736fe038eb fix: 修复证书流水线创建失败的bug 2025-03-22 14:59:54 +08:00
xiaojunnuo
abcd257db0 build: publish 2025-03-22 02:10:40 +08:00
xiaojunnuo
c38b5f3cdc build: trigger build image 2025-03-22 02:10:22 +08:00
68 changed files with 861 additions and 226 deletions

View File

@@ -3,6 +3,31 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
### Performance Improvements
* 增加服务器时间警告 ([d66ade4](https://github.com/certd/certd/commit/d66ade4e4783850b6c7625c6f164a5a0fc0aa509))
* 支持部署到lucky ([e18e399](https://github.com/certd/certd/commit/e18e399ce6529e8c7e36b56c5f674cfdbbd3d3d1))
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
### Bug Fixes
* 修复dns.la无法申请证书的bug ([90b045a](https://github.com/certd/certd/commit/90b045af6d1a4f46986e4b118885c1f050df067c))
### Performance Improvements
* 上传到主机支持scp方式 ([05b6159](https://github.com/certd/certd/commit/05b6159802b9e85b6a410361b60b5c28875b48e7))
* 优化图标 ([c56f48c](https://github.com/certd/certd/commit/c56f48c1e3c54c4e203fafb380d9091d75681b7e))
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
### Bug Fixes
* 修复通知选择器无法选择的bug ([f7b88f9](https://github.com/certd/certd/commit/f7b88f9e3b7d9d9122e4fd2003a20c555bd50c7d))
* 修复证书流水线创建失败的bug ([736fe03](https://github.com/certd/certd/commit/736fe038ebda56648bcc4c12884a700341d2c049))
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
### Bug Fixes ### Bug Fixes

View File

@@ -1 +1 @@
01:19 23:52

View File

@@ -3,6 +3,45 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
### Bug Fixes
* 修复dns.la无法申请证书的bug ([90b045a](https://github.com/certd/certd/commit/90b045af6d1a4f46986e4b118885c1f050df067c))
### Performance Improvements
* 上传到主机支持scp方式 ([05b6159](https://github.com/certd/certd/commit/05b6159802b9e85b6a410361b60b5c28875b48e7))
* 优化图标 ([c56f48c](https://github.com/certd/certd/commit/c56f48c1e3c54c4e203fafb380d9091d75681b7e))
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
### Bug Fixes
* 修复通知选择器无法选择的bug ([f7b88f9](https://github.com/certd/certd/commit/f7b88f9e3b7d9d9122e4fd2003a20c555bd50c7d))
* 修复证书流水线创建失败的bug ([736fe03](https://github.com/certd/certd/commit/736fe038ebda56648bcc4c12884a700341d2c049))
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
### Bug Fixes
* 修复站点监控通知通过webhook发送失败的bug ([9be1ecc](https://github.com/certd/certd/commit/9be1ecc8aab3ea23dd0dc2dab3688f4edb90ef2c))
* 修复dns.la域名申请失败的bug ([1de8eee](https://github.com/certd/certd/commit/1de8eee6ea8307f3c11626af75303d3cc104bb95))
### Performance Improvements
* 宝塔支持doker站点证书部署 ([589a373](https://github.com/certd/certd/commit/589a373142ef7f50d64d3aa767a90b1f4b64da93))
* 保存调整后的列宽 ([873f2b6](https://github.com/certd/certd/commit/873f2b618b9d7320045baf69d6da83afe48a780f))
* 创建证书流水线时,支持更多参数展开 ([36aa7f8](https://github.com/certd/certd/commit/36aa7f82b078a053a102331b3c6f132fb9d492f9))
* 流水线页面可以鼠标按住左右拖动 ([d85a02f](https://github.com/certd/certd/commit/d85a02feeb3183c5abd6c1ea790d5923a32d7271))
* 流水线增加上传证书快捷方式 ([425bba6](https://github.com/certd/certd/commit/425bba67c539b734e2a85a83a4f9ecc9b2434fb4))
* 手动上传证书部署流水线 ([fbb66f3](https://github.com/certd/certd/commit/fbb66f3c4389489aa8a43b194d82bc8cf391607b))
* 优化选择任务时手机版展示效果 ([d01004d](https://github.com/certd/certd/commit/d01004d53071a75ac91ee21cc96bde9369f77ff3))
* 站点监控,手动测试也发通知 ([729b19c](https://github.com/certd/certd/commit/729b19c8da60d5efb5baef7cf8df0518e7f6b471))
* 站点证书监控支持模糊查询 ([0069c0e](https://github.com/certd/certd/commit/0069c0e3992946a8dd6410f299d4fc974ef0e76b))
* 支持飞书通知 ([b82e1dc](https://github.com/certd/certd/commit/b82e1dcd6217b09a7d7e21cd648bb31de320cadf))
* 支持手动上传证书并部署 ([a9fffa5](https://github.com/certd/certd/commit/a9fffa5180c83da27b35886aa2e858a92a2c5f94))
## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13) ## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)
### Bug Fixes ### Bug Fixes

View File

@@ -9,5 +9,5 @@
} }
}, },
"npmClient": "pnpm", "npmClient": "pnpm",
"version": "1.31.4" "version": "1.31.7"
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/publishlab/node-acme-client/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/acme-client
## [1.31.6](https://github.com/publishlab/node-acme-client/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/acme-client
## [1.31.5](https://github.com/publishlab/node-acme-client/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/acme-client
## [1.31.4](https://github.com/publishlab/node-acme-client/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/publishlab/node-acme-client/compare/v1.31.3...v1.31.4) (2025-03-21)
**Note:** Version bump only for package @certd/acme-client **Note:** Version bump only for package @certd/acme-client

View File

@@ -3,7 +3,7 @@
"description": "Simple and unopinionated ACME client", "description": "Simple and unopinionated ACME client",
"private": false, "private": false,
"author": "nmorsman", "author": "nmorsman",
"version": "1.31.4", "version": "1.31.7",
"type": "module", "type": "module",
"module": "scr/index.js", "module": "scr/index.js",
"main": "src/index.js", "main": "src/index.js",
@@ -18,7 +18,7 @@
"types" "types"
], ],
"dependencies": { "dependencies": {
"@certd/basic": "^1.31.4", "@certd/basic": "^1.31.7",
"@peculiar/x509": "^1.11.0", "@peculiar/x509": "^1.11.0",
"asn1js": "^3.0.5", "asn1js": "^3.0.5",
"axios": "^1.7.2", "axios": "^1.7.2",
@@ -67,5 +67,5 @@
"bugs": { "bugs": {
"url": "https://github.com/publishlab/node-acme-client/issues" "url": "https://github.com/publishlab/node-acme-client/issues"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -53,10 +53,10 @@ export default async (client, userOpts) => {
try { try {
client.getAccountUrl(); client.getAccountUrl();
log('[auto] Account URL already exists, skipping account registration'); log('[auto] Account URL already exists, skipping account registration 证书申请账户已存在,跳过注册 ');
} }
catch (e) { catch (e) {
log('[auto] Registering account'); log('[auto] Registering account (注册证书申请账户)');
await client.createAccount(accountPayload); await client.createAccount(accountPayload);
} }
@@ -64,7 +64,7 @@ export default async (client, userOpts) => {
* Parse domains from CSR * Parse domains from CSR
*/ */
log('[auto] Parsing domains from Certificate Signing Request'); log('[auto] Parsing domains from Certificate Signing Request ');
const { commonName, altNames } = readCsrDomains(opts.csr); const { commonName, altNames } = readCsrDomains(opts.csr);
const uniqueDomains = Array.from(new Set([commonName].concat(altNames).filter((d) => d))); const uniqueDomains = Array.from(new Set([commonName].concat(altNames).filter((d) => d)));
@@ -120,20 +120,20 @@ export default async (client, userOpts) => {
// throw new Error('测试异常'); // throw new Error('测试异常');
/* Challenge verification */ /* Challenge verification */
if (opts.skipChallengeVerification === true) { if (opts.skipChallengeVerification === true) {
log(`[auto] [${d}] Skipping challenge verification since skipChallengeVerification=truewait 60s`); log(`[auto] [${d}] 跳过本地验证(skipChallengeVerification=true),等待 60s`);
await wait(60 * 1000); await wait(60 * 1000);
} }
else { else {
log(`[auto] [${d}] Running challenge verification, type = ${challenge.type}`); log(`[auto] [${d}] 开始本地验证, type = ${challenge.type}`);
try { try {
await client.verifyChallenge(authz, challenge); await client.verifyChallenge(authz, challenge);
} }
catch (e) { catch (e) {
log(`[auto] [${d}] challenge verification threw error: ${e.message}`); log(`[auto] [${d}] 本地验证失败尝试请求ACME提供商获取状态: ${e.message}`);
} }
} }
/* Complete challenge and wait for valid status */ /* Complete challenge and wait for valid status */
log(`[auto] [${d}] Completing challenge with ACME provider and waiting for valid status`); log(`[auto] [${d}] 请求ACME提供商完成验证等待返回valid状态`);
await client.completeChallenge(challenge); await client.completeChallenge(challenge);
challengeCompleted = true; challengeCompleted = true;

View File

@@ -500,7 +500,7 @@ class AcmeClient {
await verify[challenge.type](authz, challenge, keyAuthorization); await verify[challenge.type](authz, challenge, keyAuthorization);
}; };
log('Waiting for ACME challenge verification', this.backoffOpts); log('Waiting for ACME challenge verification等待ACME挑战验证', this.backoffOpts);
return util.retry(verifyFn, this.backoffOpts); return util.retry(verifyFn, this.backoffOpts);
} }
@@ -568,14 +568,14 @@ class AcmeClient {
const resp = await this.api.apiRequest(item.url, null, [200]); const resp = await this.api.apiRequest(item.url, null, [200]);
/* Verify status */ /* Verify status */
log(`Item has status: ${resp.data.status}`); log(`Item has status(挑战状态): ${resp.data.status}`);
if (invalidStates.includes(resp.data.status)) { if (invalidStates.includes(resp.data.status)) {
abort(); abort();
throw new Error(util.formatResponseError(resp)); throw new Error(util.formatResponseError(resp));
} }
else if (pendingStates.includes(resp.data.status)) { else if (pendingStates.includes(resp.data.status)) {
throw new Error('Operation is pending or processing'); throw new Error('Operation is pending or processing(当前仍然在等待状态)');
} }
else if (validStates.includes(resp.data.status)) { else if (validStates.includes(resp.data.status)) {
return resp.data; return resp.data;
@@ -584,7 +584,7 @@ class AcmeClient {
throw new Error(`Unexpected item status: ${resp.data.status}`); throw new Error(`Unexpected item status: ${resp.data.status}`);
}; };
log(`Waiting for valid status from: ${item.url}`, this.backoffOpts); log(`Waiting for valid status 等待valid状态: ${item.url}`, this.backoffOpts);
return util.retry(verifyFn, this.backoffOpts); return util.retry(verifyFn, this.backoffOpts);
} }

View File

@@ -60,8 +60,9 @@ async function retryPromise(fn, attempts, backoff) {
throw e; throw e;
} }
log(`Promise rejected: ${e.message}`);
const duration = backoff.duration(); const duration = backoff.duration();
log(`Promise rejected attempt #${backoff.attempts}, retrying in ${duration}ms: ${e.message}`); log(`attempt #${backoff.attempts}, ${duration}ms 后重试: ${e.message}`);
await new Promise((resolve) => { setTimeout(resolve, duration); }); await new Promise((resolve) => { setTimeout(resolve, duration); });
return retryPromise(fn, attempts, backoff); return retryPromise(fn, attempts, backoff);
@@ -241,7 +242,7 @@ async function resolveDomainBySoaRecord(recordName) {
*/ */
async function getAuthoritativeDnsResolver(recordName) { async function getAuthoritativeDnsResolver(recordName) {
log(`Locating authoritative NS records for name: ${recordName}`); log(`Locating authoritative NS records for name: ${recordName} 获取域名的权威NS服务器`);
const resolver = new dns.Resolver(); const resolver = new dns.Resolver();
try { try {
@@ -249,13 +250,14 @@ async function getAuthoritativeDnsResolver(recordName) {
const domain = await resolveDomainBySoaRecord(recordName); const domain = await resolveDomainBySoaRecord(recordName);
/* Resolve authoritative NS addresses */ /* Resolve authoritative NS addresses */
log(`Looking up authoritative NS records for domain: ${domain}`); log(`Looking up authoritative NS records for domain获取域名的权威NS服务器: ${domain}`);
const nsRecords = await dns.resolveNs(domain); const nsRecords = await dns.resolveNs(domain);
log(`域名权威NS服务器${nsRecords}`);
const nsAddrArray = await Promise.all(nsRecords.map(async (r) => dns.resolve4(r))); const nsAddrArray = await Promise.all(nsRecords.map(async (r) => dns.resolve4(r)));
const nsAddresses = [].concat(...nsAddrArray).filter((a) => a); const nsAddresses = [].concat(...nsAddrArray).filter((a) => a);
if (!nsAddresses.length) { if (!nsAddresses.length) {
throw new Error(`Unable to locate any valid authoritative NS addresses for domain: ${domain}`); throw new Error(`Unable to locate any valid authoritative NS addresses for domain获取权威服务器IP失败: ${domain}`);
} }
/* Authoritative NS success */ /* Authoritative NS success */
@@ -263,12 +265,12 @@ async function getAuthoritativeDnsResolver(recordName) {
resolver.setServers(nsAddresses); resolver.setServers(nsAddresses);
} }
catch (e) { catch (e) {
log(`Authoritative NS lookup error: ${e.message}`); log(`Authoritative NS lookup error获取权威NS服务器地址失败: ${e.message}`);
} }
/* Return resolver */ /* Return resolver */
const addresses = resolver.getServers(); const addresses = resolver.getServers();
log(`DNS resolver addresses: ${addresses.join(', ')}`); log(`DNS resolver addresses域名的权威NS服务器地址: ${addresses.join(', ')}`);
return resolver; return resolver;
} }

View File

@@ -113,14 +113,14 @@ export async function walkTxtRecord(recordName) {
async function verifyDnsChallenge(authz, challenge, keyAuthorization, prefix = '_acme-challenge.') { async function verifyDnsChallenge(authz, challenge, keyAuthorization, prefix = '_acme-challenge.') {
const recordName = `${prefix}${authz.identifier.value}`; const recordName = `${prefix}${authz.identifier.value}`;
log(`Resolving DNS TXT from record: ${recordName}`); log(`Resolving DNS TXT from record解析DNS TXT记录: ${recordName}`);
const recordValues = await walkTxtRecord(recordName); const recordValues = await walkTxtRecord(recordName);
log(`DNS query finished successfully, found ${recordValues.length} TXT records`); log(`DNS query finished successfullyDNS查询成功, found ${recordValues.length} TXT records`);
if (!recordValues.length || !recordValues.includes(keyAuthorization)) { if (!recordValues.length || !recordValues.includes(keyAuthorization)) {
throw new Error(`Authorization not found in DNS TXT record: ${recordName}need:${keyAuthorization},found:${recordValues}`); throw new Error(`Authorization not found in DNS TXT record没有找到需要的DNS TXT记录: ${recordName}need:${keyAuthorization},found:${recordValues}`);
} }
log(`Key authorization match for ${challenge.type}/${recordName}, ACME challenge verified`); log(`Key authorization match for ${challenge.type}/${recordName}, ACME challenge verified(域名所有权校验成功)`);
return true; return true;
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/basic
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/basic
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/basic
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
**Note:** Version bump only for package @certd/basic **Note:** Version bump only for package @certd/basic

View File

@@ -1 +1 @@
02:06 00:01

View File

@@ -1,7 +1,7 @@
{ {
"name": "@certd/basic", "name": "@certd/basic",
"private": false, "private": false,
"version": "1.31.4", "version": "1.31.7",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -44,5 +44,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/pipeline
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/pipeline
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/pipeline
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
### Bug Fixes ### Bug Fixes

View File

@@ -1,7 +1,7 @@
{ {
"name": "@certd/pipeline", "name": "@certd/pipeline",
"private": false, "private": false,
"version": "1.31.4", "version": "1.31.7",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -16,8 +16,8 @@
"test": "mocha --loader=ts-node/esm" "test": "mocha --loader=ts-node/esm"
}, },
"dependencies": { "dependencies": {
"@certd/basic": "^1.31.4", "@certd/basic": "^1.31.7",
"@certd/plus-core": "^1.31.4", "@certd/plus-core": "^1.31.7",
"dayjs": "^1.11.7", "dayjs": "^1.11.7",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"reflect-metadata": "^0.1.13" "reflect-metadata": "^0.1.13"
@@ -43,5 +43,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/lib-huawei
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/lib-huawei
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/lib-huawei
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
**Note:** Version bump only for package @certd/lib-huawei **Note:** Version bump only for package @certd/lib-huawei

View File

@@ -1,7 +1,7 @@
{ {
"name": "@certd/lib-huawei", "name": "@certd/lib-huawei",
"private": false, "private": false,
"version": "1.31.4", "version": "1.31.7",
"main": "./dist/bundle.js", "main": "./dist/bundle.js",
"module": "./dist/bundle.js", "module": "./dist/bundle.js",
"types": "./dist/d/index.d.ts", "types": "./dist/d/index.d.ts",
@@ -23,5 +23,5 @@
"prettier": "^2.8.8", "prettier": "^2.8.8",
"tslib": "^2.8.1" "tslib": "^2.8.1"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
**Note:** Version bump only for package @certd/lib-iframe **Note:** Version bump only for package @certd/lib-iframe

View File

@@ -1,7 +1,7 @@
{ {
"name": "@certd/lib-iframe", "name": "@certd/lib-iframe",
"private": false, "private": false,
"version": "1.31.4", "version": "1.31.7",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -30,5 +30,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/lib-k8s
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/lib-k8s
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/lib-k8s
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
**Note:** Version bump only for package @certd/lib-k8s **Note:** Version bump only for package @certd/lib-k8s

View File

@@ -1,7 +1,7 @@
{ {
"name": "@certd/lib-k8s", "name": "@certd/lib-k8s",
"private": false, "private": false,
"version": "1.31.4", "version": "1.31.7",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -16,7 +16,7 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@certd/basic": "^1.31.4", "@certd/basic": "^1.31.7",
"@kubernetes/client-node": "0.21.0" "@kubernetes/client-node": "0.21.0"
}, },
"devDependencies": { "devDependencies": {
@@ -31,5 +31,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/lib-server
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/lib-server
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/lib-server
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
**Note:** Version bump only for package @certd/lib-server **Note:** Version bump only for package @certd/lib-server

View File

@@ -1,6 +1,6 @@
{ {
"name": "@certd/lib-server", "name": "@certd/lib-server",
"version": "1.31.4", "version": "1.31.7",
"description": "midway with flyway, sql upgrade way ", "description": "midway with flyway, sql upgrade way ",
"private": false, "private": false,
"type": "module", "type": "module",
@@ -27,10 +27,10 @@
], ],
"license": "AGPL", "license": "AGPL",
"dependencies": { "dependencies": {
"@certd/acme-client": "^1.31.4", "@certd/acme-client": "^1.31.7",
"@certd/basic": "^1.31.4", "@certd/basic": "^1.31.7",
"@certd/pipeline": "^1.31.4", "@certd/pipeline": "^1.31.7",
"@certd/plus-core": "^1.31.4", "@certd/plus-core": "^1.31.7",
"@midwayjs/cache": "~3.14.0", "@midwayjs/cache": "~3.14.0",
"@midwayjs/core": "~3.20.3", "@midwayjs/core": "~3.20.3",
"@midwayjs/i18n": "~3.20.3", "@midwayjs/i18n": "~3.20.3",
@@ -61,5 +61,5 @@
"typeorm": "^0.3.11", "typeorm": "^0.3.11",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
**Note:** Version bump only for package @certd/midway-flyway-js **Note:** Version bump only for package @certd/midway-flyway-js

View File

@@ -1,6 +1,6 @@
{ {
"name": "@certd/midway-flyway-js", "name": "@certd/midway-flyway-js",
"version": "1.31.4", "version": "1.31.7",
"description": "midway with flyway, sql upgrade way ", "description": "midway with flyway, sql upgrade way ",
"private": false, "private": false,
"type": "module", "type": "module",
@@ -46,5 +46,5 @@
"typeorm": "^0.3.11", "typeorm": "^0.3.11",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -3,6 +3,18 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/plugin-cert
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
**Note:** Version bump only for package @certd/plugin-cert
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/plugin-cert
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
### Bug Fixes ### Bug Fixes

View File

@@ -1,7 +1,7 @@
{ {
"name": "@certd/plugin-cert", "name": "@certd/plugin-cert",
"private": false, "private": false,
"version": "1.31.4", "version": "1.31.7",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",
@@ -15,10 +15,10 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@certd/acme-client": "^1.31.4", "@certd/acme-client": "^1.31.7",
"@certd/basic": "^1.31.4", "@certd/basic": "^1.31.7",
"@certd/pipeline": "^1.31.4", "@certd/pipeline": "^1.31.7",
"@certd/plugin-lib": "^1.31.4", "@certd/plugin-lib": "^1.31.7",
"@google-cloud/publicca": "^1.3.0", "@google-cloud/publicca": "^1.3.0",
"dayjs": "^1.11.7", "dayjs": "^1.11.7",
"jszip": "^3.10.1", "jszip": "^3.10.1",
@@ -41,5 +41,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -269,14 +269,14 @@ HTTP文件验证不支持泛域名需要配置网站文件上传`,
@TaskInput({ @TaskInput({
title: "检查解析重试次数", title: "检查解析重试次数",
value: 35, value: 20,
component: { component: {
name: "a-input-number", name: "a-input-number",
vModel: "value", vModel: "value",
}, },
helper: "检查域名验证解析记录重试次数,如果你的域名服务商解析生效速度慢,可以适当增加此值", helper: "检查域名验证解析记录重试次数,如果你的域名服务商解析生效速度慢,可以适当增加此值",
}) })
maxCheckRetryCount = 35; maxCheckRetryCount = 20;
acme!: AcmeService; acme!: AcmeService;

View File

@@ -3,6 +3,20 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
**Note:** Version bump only for package @certd/plugin-lib
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
### Performance Improvements
* 上传到主机支持scp方式 ([05b6159](https://github.com/certd/certd/commit/05b6159802b9e85b6a410361b60b5c28875b48e7))
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/plugin-lib
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
### Performance Improvements ### Performance Improvements

View File

@@ -1,7 +1,7 @@
{ {
"name": "@certd/plugin-lib", "name": "@certd/plugin-lib",
"private": false, "private": false,
"version": "1.31.4", "version": "1.31.7",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",
@@ -16,8 +16,8 @@
}, },
"dependencies": { "dependencies": {
"@alicloud/pop-core": "^1.7.10", "@alicloud/pop-core": "^1.7.10",
"@certd/basic": "^1.31.4", "@certd/basic": "^1.31.7",
"@certd/pipeline": "^1.31.4", "@certd/pipeline": "^1.31.7",
"@kubernetes/client-node": "0.21.0", "@kubernetes/client-node": "0.21.0",
"ali-oss": "^6.21.0", "ali-oss": "^6.21.0",
"basic-ftp": "^5.0.5", "basic-ftp": "^5.0.5",
@@ -48,5 +48,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "cfbbac9796477f830e1f57f77777f6554da9e31d" "gitHead": "86ca35ce3381b98b455538b11219d9856be5d0d6"
} }

View File

@@ -7,6 +7,8 @@ import { SshAccess } from "./ssh-access.js";
import stripAnsi from "strip-ansi"; import stripAnsi from "strip-ansi";
import { SocksClient } from "socks"; import { SocksClient } from "socks";
import { SocksProxy, SocksProxyType } from "socks/typings/common/constants.js"; import { SocksProxy, SocksProxyType } from "socks/typings/common/constants.js";
import fs from "fs";
export type TransportItem = { localPath: string; remotePath: string }; export type TransportItem = { localPath: string; remotePath: string };
export class AsyncSsh2Client { export class AsyncSsh2Client {
@@ -265,15 +267,15 @@ export class SshClient {
} }
* @param options * @param options
*/ */
async uploadFiles(options: { connectConf: SshAccess; transports: TransportItem[]; mkdirs: boolean; opts?: { mode?: string } }) { async uploadFiles(options: { connectConf: SshAccess; transports: TransportItem[]; mkdirs: boolean; opts?: { mode?: string }; uploadType?: string }) {
const { connectConf, transports, mkdirs, opts } = options; const { connectConf, transports, mkdirs, opts } = options;
await this._call({ await this._call({
connectConf, connectConf,
callable: async (conn: AsyncSsh2Client) => { callable: async (conn: AsyncSsh2Client) => {
const sftp = await conn.getSftp();
this.logger.info("开始上传"); this.logger.info("开始上传");
for (const transport of transports) { if (mkdirs !== false) {
if (mkdirs !== false) { this.logger.info("初始化父目录");
for (const transport of transports) {
const filePath = path.dirname(transport.remotePath); const filePath = path.dirname(transport.remotePath);
let mkdirCmd = `mkdir -p ${filePath} `; let mkdirCmd = `mkdir -p ${filePath} `;
if (conn.windows) { if (conn.windows) {
@@ -291,13 +293,60 @@ export class SshClient {
} }
await conn.exec(mkdirCmd); await conn.exec(mkdirCmd);
} }
await conn.fastPut({ sftp, ...transport, opts });
} }
if (options.uploadType === "sftp") {
const sftp = await conn.getSftp();
for (const transport of transports) {
await conn.fastPut({ sftp, ...transport, opts });
}
} else {
//scp
for (const transport of transports) {
await this.scpUpload({ conn, ...transport, opts });
}
}
this.logger.info("文件全部上传成功"); this.logger.info("文件全部上传成功");
}, },
}); });
} }
async scpUpload(options: { conn: any; localPath: string; remotePath: string; opts?: { mode?: string } }) {
const { conn, localPath, remotePath } = options;
return new Promise((resolve, reject) => {
// 关键步骤:构造 SCP 命令
try {
this.logger.info(`开始上传:${localPath} => ${remotePath}`);
conn.conn.exec(
`scp -t ${remotePath}`, // -t 表示目标模式
(err, stream) => {
if (err) {
return reject(err);
}
// 准备 SCP 协议头
const fileStats = fs.statSync(localPath);
const fileName = path.basename(localPath);
// SCP 协议格式C[权限] [文件大小] [文件名]\n
stream.write(`C0644 ${fileStats.size} ${fileName}\n`);
// 通过管道传输文件
fs.createReadStream(localPath)
.pipe(stream)
.on("finish", () => {
this.logger.info(`上传文件成功:${localPath} => ${remotePath}`);
resolve(true);
})
.on("error", reject);
}
);
} catch (e) {
reject(e);
}
});
}
async removeFiles(opts: { connectConf: SshAccess; files: string[] }) { async removeFiles(opts: { connectConf: SshAccess; files: string[] }) {
const { connectConf, files } = opts; const { connectConf, files } = opts;
await this._call({ await this._call({

View File

@@ -3,6 +3,26 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
### Performance Improvements
* 增加服务器时间警告 ([d66ade4](https://github.com/certd/certd/commit/d66ade4e4783850b6c7625c6f164a5a0fc0aa509))
* 支持部署到lucky ([e18e399](https://github.com/certd/certd/commit/e18e399ce6529e8c7e36b56c5f674cfdbbd3d3d1))
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
### Performance Improvements
* 优化图标 ([c56f48c](https://github.com/certd/certd/commit/c56f48c1e3c54c4e203fafb380d9091d75681b7e))
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
### Bug Fixes
* 修复通知选择器无法选择的bug ([f7b88f9](https://github.com/certd/certd/commit/f7b88f9e3b7d9d9122e4fd2003a20c555bd50c7d))
* 修复证书流水线创建失败的bug ([736fe03](https://github.com/certd/certd/commit/736fe038ebda56648bcc4c12884a700341d2c049))
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
### Bug Fixes ### Bug Fixes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@certd/ui-client", "name": "@certd/ui-client",
"version": "1.31.4", "version": "1.31.7",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite --open", "dev": "vite --open",
@@ -96,8 +96,8 @@
"zod-defaults": "^0.1.3" "zod-defaults": "^0.1.3"
}, },
"devDependencies": { "devDependencies": {
"@certd/lib-iframe": "^1.31.4", "@certd/lib-iframe": "^1.31.7",
"@certd/pipeline": "^1.31.4", "@certd/pipeline": "^1.31.7",
"@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-node-resolve": "^15.2.3",
"@types/chai": "^4.3.12", "@types/chai": "^4.3.12",

View File

@@ -55,9 +55,57 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <li class="dib">
<span class="icon iconfont">&#xe61d;</span> <span class="icon iconfont">&#xecc0;</span>
<div class="name">WAF-长亭-雷池</div> <div class="name">plesk_</div>
<div class="code-name">&amp;#xe61d;</div> <div class="code-name">&amp;#xecc0;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe741;</span>
<div class="name">易支付-01</div>
<div class="code-name">&amp;#xe741;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe606;</span>
<div class="name">1Panel</div>
<div class="code-name">&amp;#xe606;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe73c;</span>
<div class="name">西部数码</div>
<div class="code-name">&amp;#xe73c;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe607;</span>
<div class="name">qnap</div>
<div class="code-name">&amp;#xe607;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe9cc;</span>
<div class="name">proxmox</div>
<div class="code-name">&amp;#xe9cc;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe604;</span>
<div class="name">aws</div>
<div class="code-name">&amp;#xe604;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe602;</span>
<div class="name">uni-app</div>
<div class="code-name">&amp;#xe602;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe752;</span>
<div class="name">lucky</div>
<div class="code-name">&amp;#xe752;</div>
</li> </li>
<li class="dib"> <li class="dib">
@@ -66,6 +114,12 @@
<div class="code-name">&amp;#xe719;</div> <div class="code-name">&amp;#xe719;</div>
</li> </li>
<li class="dib">
<span class="icon iconfont">&#xe748;</span>
<div class="name">雷池</div>
<div class="code-name">&amp;#xe748;</div>
</li>
<li class="dib"> <li class="dib">
<span class="icon iconfont">&#xe610;</span> <span class="icon iconfont">&#xe610;</span>
<div class="name">华为</div> <div class="name">华为</div>
@@ -120,7 +174,7 @@
<pre><code class="language-css" <pre><code class="language-css"
>@font-face { >@font-face {
font-family: 'iconfont'; font-family: 'iconfont';
src: url('iconfont.svg?t=1741879397012#iconfont') format('svg'); src: url('iconfont.svg?t=1742822771904#iconfont') format('svg');
} }
</code></pre> </code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3> <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -147,11 +201,83 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <li class="dib">
<span class="icon iconfont icon-WAF-changting-leichi"></span> <span class="icon iconfont icon-plesk"></span>
<div class="name"> <div class="name">
WAF-长亭-雷池 plesk_
</div> </div>
<div class="code-name">.icon-WAF-changting-leichi <div class="code-name">.icon-plesk
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-yizhifu"></span>
<div class="name">
易支付-01
</div>
<div class="code-name">.icon-yizhifu
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-onepanel"></span>
<div class="name">
1Panel
</div>
<div class="code-name">.icon-onepanel
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-xibushuma"></span>
<div class="name">
西部数码
</div>
<div class="code-name">.icon-xibushuma
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-qnap"></span>
<div class="name">
qnap
</div>
<div class="code-name">.icon-qnap
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-proxmox"></span>
<div class="name">
proxmox
</div>
<div class="code-name">.icon-proxmox
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-aws"></span>
<div class="name">
aws
</div>
<div class="code-name">.icon-aws
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-uniapp"></span>
<div class="name">
uni-app
</div>
<div class="code-name">.icon-uniapp
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-lucky"></span>
<div class="name">
lucky
</div>
<div class="code-name">.icon-lucky
</div> </div>
</li> </li>
@@ -164,6 +290,15 @@
</div> </div>
</li> </li>
<li class="dib">
<span class="icon iconfont icon-safeline"></span>
<div class="name">
雷池
</div>
<div class="code-name">.icon-safeline
</div>
</li>
<li class="dib"> <li class="dib">
<span class="icon iconfont icon-huawei"></span> <span class="icon iconfont icon-huawei"></span>
<div class="name"> <div class="name">
@@ -247,10 +382,74 @@
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-WAF-changting-leichi"></use> <use xlink:href="#icon-plesk"></use>
</svg> </svg>
<div class="name">WAF-长亭-雷池</div> <div class="name">plesk_</div>
<div class="code-name">#icon-WAF-changting-leichi</div> <div class="code-name">#icon-plesk</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yizhifu"></use>
</svg>
<div class="name">易支付-01</div>
<div class="code-name">#icon-yizhifu</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-onepanel"></use>
</svg>
<div class="name">1Panel</div>
<div class="code-name">#icon-onepanel</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-xibushuma"></use>
</svg>
<div class="name">西部数码</div>
<div class="code-name">#icon-xibushuma</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-qnap"></use>
</svg>
<div class="name">qnap</div>
<div class="code-name">#icon-qnap</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-proxmox"></use>
</svg>
<div class="name">proxmox</div>
<div class="code-name">#icon-proxmox</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-aws"></use>
</svg>
<div class="name">aws</div>
<div class="code-name">#icon-aws</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-uniapp"></use>
</svg>
<div class="name">uni-app</div>
<div class="code-name">#icon-uniapp</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-lucky"></use>
</svg>
<div class="name">lucky</div>
<div class="code-name">#icon-lucky</div>
</li> </li>
<li class="dib"> <li class="dib">
@@ -261,6 +460,14 @@
<div class="code-name">#icon-ctyun</div> <div class="code-name">#icon-ctyun</div>
</li> </li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-safeline"></use>
</svg>
<div class="name">雷池</div>
<div class="code-name">#icon-safeline</div>
</li>
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-huawei"></use> <use xlink:href="#icon-huawei"></use>

View File

@@ -1,6 +1,6 @@
@font-face { @font-face {
font-family: "iconfont"; /* Project id 4688792 */ font-family: "iconfont"; /* Project id 4688792 */
src: url('iconfont.svg?t=1741879397012#iconfont') format('svg'); src: url('iconfont.svg?t=1742822771904#iconfont') format('svg');
} }
.iconfont { .iconfont {
@@ -11,14 +11,50 @@
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.icon-WAF-changting-leichi:before { .icon-plesk:before {
content: "\e61d"; content: "\ecc0";
}
.icon-yizhifu:before {
content: "\e741";
}
.icon-onepanel:before {
content: "\e606";
}
.icon-xibushuma:before {
content: "\e73c";
}
.icon-qnap:before {
content: "\e607";
}
.icon-proxmox:before {
content: "\e9cc";
}
.icon-aws:before {
content: "\e604";
}
.icon-uniapp:before {
content: "\e602";
}
.icon-lucky:before {
content: "\e752";
} }
.icon-ctyun:before { .icon-ctyun:before {
content: "\e719"; content: "\e719";
} }
.icon-safeline:before {
content: "\e748";
}
.icon-huawei:before { .icon-huawei:before {
content: "\e610"; content: "\e610";
} }

File diff suppressed because one or more lines are too long

View File

@@ -6,11 +6,67 @@
"description": "", "description": "",
"glyphs": [ "glyphs": [
{ {
"icon_id": "35327761", "icon_id": "27272666",
"name": "WAF-长亭-雷池", "name": "plesk_",
"font_class": "WAF-changting-leichi", "font_class": "plesk",
"unicode": "e61d", "unicode": "ecc0",
"unicode_decimal": 58909 "unicode_decimal": 60608
},
{
"icon_id": "23930871",
"name": "易支付-01",
"font_class": "yizhifu",
"unicode": "e741",
"unicode_decimal": 59201
},
{
"icon_id": "40476533",
"name": "1Panel",
"font_class": "onepanel",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "26435508",
"name": "西部数码",
"font_class": "xibushuma",
"unicode": "e73c",
"unicode_decimal": 59196
},
{
"icon_id": "27487624",
"name": "qnap",
"font_class": "qnap",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "27268231",
"name": "proxmox",
"font_class": "proxmox",
"unicode": "e9cc",
"unicode_decimal": 59852
},
{
"icon_id": "31636255",
"name": "aws",
"font_class": "aws",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "34071209",
"name": "uni-app",
"font_class": "uniapp",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "3467975",
"name": "lucky",
"font_class": "lucky",
"unicode": "e752",
"unicode_decimal": 59218
}, },
{ {
"icon_id": "41854563", "icon_id": "41854563",
@@ -19,6 +75,13 @@
"unicode": "e719", "unicode": "e719",
"unicode_decimal": 59161 "unicode_decimal": 59161
}, },
{
"icon_id": "43757703",
"name": "雷池",
"font_class": "safeline",
"unicode": "e748",
"unicode_decimal": 59208
},
{ {
"icon_id": "24164616", "icon_id": "24164616",
"name": "华为", "name": "华为",

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -7,6 +7,11 @@ export type SiteEnv = {
contactLink?: string; contactLink?: string;
}; };
}; };
export type AppInfo = {
version?: string;
time?: number;
deltaTime?: number;
};
export type SiteInfo = { export type SiteInfo = {
title?: string; title?: string;
slogan?: string; slogan?: string;
@@ -71,12 +76,13 @@ export type AllSettings = {
siteEnv: SiteEnv; siteEnv: SiteEnv;
headerMenus: HeaderMenus; headerMenus: HeaderMenus;
suiteSetting: SuiteSetting; suiteSetting: SuiteSetting;
app: AppInfo;
}; };
export async function loadAllSettings(): Promise<AllSettings> { export async function loadAllSettings(): Promise<AllSettings> {
return await request({ return await request({
url: "/basic/settings/all", url: "/basic/settings/all",
method: "get" method: "get",
}); });
} }
@@ -84,7 +90,7 @@ export async function bindUrl(data: any): Promise<any> {
return await request({ return await request({
url: "/sys/plus/bindUrl", url: "/sys/plus/bindUrl",
method: "post", method: "post",
data data,
}); });
} }
@@ -92,7 +98,7 @@ export async function sendSmsCode(data: any): Promise<any> {
return await request({ return await request({
url: "/basic/code/sendSmsCode", url: "/basic/code/sendSmsCode",
method: "post", method: "post",
data data,
}); });
} }
@@ -100,6 +106,6 @@ export async function sendEmailCode(data: any): Promise<any> {
return await request({ return await request({
url: "/basic/code/sendEmailCode", url: "/basic/code/sendEmailCode",
method: "post", method: "post",
data data,
}); });
} }

View File

@@ -1,11 +1,8 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { Modal, notification } from "ant-design-vue"; import { Modal, notification } from "ant-design-vue";
import * as _ from "lodash-es"; import * as _ from "lodash-es";
// @ts-ignore
import { LocalStorage } from "/src/utils/util.storage";
import * as basicApi from "/@/api/modules/api.basic"; import * as basicApi from "/@/api/modules/api.basic";
import { HeaderMenus, PlusInfo, SiteEnv, SiteInfo, SuiteSetting, SysInstallInfo, SysPublicSetting } from "/@/api/modules/api.basic"; import { AppInfo, HeaderMenus, PlusInfo, SiteEnv, SiteInfo, SuiteSetting, SysInstallInfo, SysPublicSetting } from "/@/api/modules/api.basic";
import { useUserStore } from "/@/store/modules/user"; import { useUserStore } from "/@/store/modules/user";
import { mitter } from "/@/utils/util.mitt"; import { mitter } from "/@/utils/util.mitt";
import { env } from "/@/utils/util.env"; import { env } from "/@/utils/util.env";
@@ -29,6 +26,11 @@ export interface SettingState {
headerMenus?: HeaderMenus; headerMenus?: HeaderMenus;
inited?: boolean; inited?: boolean;
suiteSetting?: SuiteSetting; suiteSetting?: SuiteSetting;
app: {
version?: string;
time?: number;
deltaTime?: number;
};
} }
const defaultSiteInfo: SiteInfo = { const defaultSiteInfo: SiteInfo = {
@@ -37,7 +39,7 @@ const defaultSiteInfo: SiteInfo = {
logo: env.LOGO || "/static/images/logo/logo.svg", logo: env.LOGO || "/static/images/logo/logo.svg",
loginLogo: env.LOGIN_LOGO || "/static/images/logo/rect-block.svg", loginLogo: env.LOGIN_LOGO || "/static/images/logo/rect-block.svg",
licenseTo: "", licenseTo: "",
licenseToUrl: "" licenseToUrl: "",
}; };
export const useSettingStore = defineStore({ export const useSettingStore = defineStore({
id: "app.setting", id: "app.setting",
@@ -45,33 +47,38 @@ export const useSettingStore = defineStore({
plusInfo: { plusInfo: {
isPlus: false, isPlus: false,
vipType: "free", vipType: "free",
isComm: false isComm: false,
}, },
sysPublic: { sysPublic: {
registerEnabled: false, registerEnabled: false,
managerOtherUserPipeline: false, managerOtherUserPipeline: false,
icpNo: env.ICP_NO || "" icpNo: env.ICP_NO || "",
}, },
installInfo: { installInfo: {
siteId: "", siteId: "",
bindUserId: null, bindUserId: null,
bindUrl: "", bindUrl: "",
accountServerBaseUrl: "", accountServerBaseUrl: "",
appKey: "" appKey: "",
}, },
siteInfo: defaultSiteInfo, siteInfo: defaultSiteInfo,
siteEnv: { siteEnv: {
agent: { agent: {
enabled: undefined, enabled: undefined,
contactText: "", contactText: "",
contactLink: "" contactLink: "",
} },
}, },
headerMenus: { headerMenus: {
menus: [] menus: [],
}, },
suiteSetting: { enabled: false }, suiteSetting: { enabled: false },
inited: false inited: false,
app: {
version: "",
time: 0,
deltaTime: 0,
},
}), }),
getters: { getters: {
getSysPublic(): SysPublicSetting { getSysPublic(): SysPublicSetting {
@@ -96,7 +103,7 @@ export const useSettingStore = defineStore({
const vipLabelMap: any = { const vipLabelMap: any = {
free: "基础版", free: "基础版",
plus: "专业版", plus: "专业版",
comm: "商业版" comm: "商业版",
}; };
return vipLabelMap[this.plusInfo?.vipType || "free"]; return vipLabelMap[this.plusInfo?.vipType || "free"];
}, },
@@ -113,21 +120,21 @@ export const useSettingStore = defineStore({
title: menu.title, title: menu.title,
icon: menu.icon, icon: menu.icon,
link: menu.path, link: menu.path,
order: 99999 order: 99999,
} },
}; };
}); });
}, },
isSuiteEnabled(): boolean { isSuiteEnabled(): boolean {
// @ts-ignore // @ts-ignore
return this.suiteSetting?.enabled === true; return this.suiteSetting?.enabled === true;
} },
}, },
actions: { actions: {
checkPlus() { checkPlus() {
if (!this.isPlus) { if (!this.isPlus) {
notification.warn({ notification.warn({
message: "此为专业版功能,请先升级到专业版" message: "此为专业版功能,请先升级到专业版",
}); });
throw new Error("此为专业版功能,请升级到专业版"); throw new Error("此为专业版功能,请升级到专业版");
} }
@@ -142,6 +149,12 @@ export const useSettingStore = defineStore({
_.merge(this.suiteSetting, allSettings.suiteSetting || {}); _.merge(this.suiteSetting, allSettings.suiteSetting || {});
//@ts-ignore //@ts-ignore
this.initSiteInfo(allSettings.siteInfo || {}); this.initSiteInfo(allSettings.siteInfo || {});
this.initAppInfo(allSettings.app || {});
},
initAppInfo(appInfo: AppInfo) {
this.app.time = appInfo.time;
this.app.version = appInfo.version;
this.app.deltaTime = new Date().getTime() - this.app.time;
}, },
initSiteInfo(siteInfo: SiteInfo) { initSiteInfo(siteInfo: SiteInfo) {
//@ts-ignore //@ts-ignore
@@ -158,15 +171,15 @@ export const useSettingStore = defineStore({
if (this.siteInfo.logo) { if (this.siteInfo.logo) {
updatePreferences({ updatePreferences({
logo: { logo: {
source: this.siteInfo.logo source: this.siteInfo.logo,
} },
}); });
} }
if (this.siteInfo.title) { if (this.siteInfo.title) {
updatePreferences({ updatePreferences({
app: { app: {
name: this.siteInfo.title name: this.siteInfo.title,
} },
}); });
useTitle(this.siteInfo.title); useTitle(this.siteInfo.title);
} }
@@ -210,7 +223,7 @@ export const useSettingStore = defineStore({
cancelText: "不是,回到原来的地址", cancelText: "不是,回到原来的地址",
onCancel: () => { onCancel: () => {
window.location.href = bindUrl; window.location.href = bindUrl;
} },
}); });
} }
} }
@@ -224,8 +237,8 @@ export const useSettingStore = defineStore({
} }
await this.init(); await this.init();
this.inited = true; this.inited = true;
} },
} },
}); });
mitter.on("app.login", async () => { mitter.on("app.login", async () => {

View File

@@ -9,7 +9,7 @@
:dict="optionsDictRef" :dict="optionsDictRef"
:create-crud-options="createCrudOptions" :create-crud-options="createCrudOptions"
:crud-options-override="{ :crud-options-override="{
search: { show: false, initialForm: { fromType: 'upload' } }, search: { show: false },
table: { table: {
scroll: { scroll: {
x: 540, x: 540,

View File

@@ -52,7 +52,7 @@ export function useCertd(certdFormRef: any) {
await checkPipelineLimit(); await checkPipelineLimit();
certdFormRef.value.open(async ({ form }: any) => { certdFormRef.value.open(async ({ form }: any) => {
const certDetail = readCertDetail(form.cert.crt); // const certDetail = readCertDetail(form.cert.crt);
// 添加certd pipeline // 添加certd pipeline
const triggers = []; const triggers = [];
if (form.triggerCron) { if (form.triggerCron) {

View File

@@ -14,7 +14,12 @@
<span>您好{{ userInfo.nickName || userInfo.username }} 欢迎使用 {{ siteInfo.title }}</span> <span>您好{{ userInfo.nickName || userInfo.username }} 欢迎使用 {{ siteInfo.title }}</span>
</div> </div>
<div class="flex-o flex-wrap profile-badges"> <div class="flex-o flex-wrap profile-badges">
<a-tag color="green" class="flex-inline pointer"> <fs-icon icon="ion:time-outline"></fs-icon> {{ now }}</a-tag> <a-tooltip :title="deltaTimeTip">
<a-badge :dot="deltaTimeWarning">
<a-tag :color="deltaTimeWarning ? 'red' : 'green'" class="flex-inline pointer"> <fs-icon icon="ion:time-outline"></fs-icon> {{ now }}</a-tag>
</a-badge>
</a-tooltip>
<template v-if="userStore.isAdmin"> <template v-if="userStore.isAdmin">
<a-divider type="vertical" /> <a-divider type="vertical" />
<a-badge :dot="hasNewVersion"> <a-badge :dot="hasNewVersion">
@@ -138,11 +143,11 @@ import { GetStatisticCount } from "/@/views/framework/home/dashboard/api";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import * as api from "./api"; import * as api from "./api";
defineOptions({ defineOptions({
name: "DashboardUser" name: "DashboardUser",
}); });
const version = ref(import.meta.env.VITE_APP_VERSION); const version = ref(import.meta.env.VITE_APP_VERSION);
const latestVersion = ref(); const latestVersion = ref("");
const hasNewVersion = computed(() => { const hasNewVersion = computed(() => {
if (!latestVersion.value) { if (!latestVersion.value) {
return false; return false;
@@ -174,7 +179,16 @@ const userInfo: ComputedRef<UserInfoRes> = computed(() => {
return userStore.getUserInfo; return userStore.getUserInfo;
}); });
const now = computed(() => { const now = computed(() => {
return dayjs().format("YYYY-MM-DD HH:mm:ss"); const serverTime = settingStore.app.deltaTime + Date.now();
return dayjs(serverTime).format("YYYY-MM-DD HH:mm:ss");
});
const deltaTimeWarning = computed(() => {
return Math.abs(settingStore.app.deltaTime) > 1000 * 60 * 4;
});
const deltaTimeTip = computed(() => {
const deltaMin = (Math.abs(settingStore.app.deltaTime) / 1000 / 60).toFixed(2);
return `服务器时间相差:${deltaMin}分钟${deltaTimeWarning.value ? ",请检查服务器时间是否正确" : ""}`;
}); });
const router = useRouter(); const router = useRouter();
function goPipeline() { function goPipeline() {
@@ -189,7 +203,7 @@ function transformStatusCount() {
{ name: "start", label: "运行中" }, { name: "start", label: "运行中" },
{ name: "error", label: "失败" }, { name: "error", label: "失败" },
{ name: "canceled", label: "已取消" }, { name: "canceled", label: "已取消" },
{ name: null, label: "未执行" } { name: null, label: "未执行" },
]; ];
const result = []; const result = [];
for (const item of sorted) { for (const item of sorted) {
@@ -208,7 +222,7 @@ async function loadCount() {
count.value.historyCountPerDay = count.value.historyCountPerDay.map((item: any) => { count.value.historyCountPerDay = count.value.historyCountPerDay.map((item: any) => {
return { return {
name: item.date, name: item.date,
value: item.count value: item.count,
}; };
}); });
} }

View File

@@ -22,10 +22,10 @@ onMounted(() => {
content: "为了您的账户安全,请立即修改密码", content: "为了您的账户安全,请立即修改密码",
onOk: () => { onOk: () => {
changePasswordButtonRef.value.open({ changePasswordButtonRef.value.open({
password: "123456" password: "123456",
}); });
}, },
okText: "立即修改" okText: "立即修改",
}); });
} }
}); });

View File

@@ -3,6 +3,27 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)
### Performance Improvements
* 支持部署到lucky ([e18e399](https://github.com/certd/certd/commit/e18e399ce6529e8c7e36b56c5f674cfdbbd3d3d1))
## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)
### Bug Fixes
* 修复dns.la无法申请证书的bug ([90b045a](https://github.com/certd/certd/commit/90b045af6d1a4f46986e4b118885c1f050df067c))
### Performance Improvements
* 上传到主机支持scp方式 ([05b6159](https://github.com/certd/certd/commit/05b6159802b9e85b6a410361b60b5c28875b48e7))
* 优化图标 ([c56f48c](https://github.com/certd/certd/commit/c56f48c1e3c54c4e203fafb380d9091d75681b7e))
## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)
**Note:** Version bump only for package @certd/ui-server
## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21) ## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)
### Bug Fixes ### Bug Fixes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@certd/ui-server", "name": "@certd/ui-server",
"version": "1.31.4", "version": "1.31.7",
"description": "fast-server base midway", "description": "fast-server base midway",
"private": true, "private": true,
"type": "module", "type": "module",
@@ -38,18 +38,18 @@
"@aws-sdk/client-acm": "^3.699.0", "@aws-sdk/client-acm": "^3.699.0",
"@aws-sdk/client-cloudfront": "^3.699.0", "@aws-sdk/client-cloudfront": "^3.699.0",
"@aws-sdk/client-s3": "^3.705.0", "@aws-sdk/client-s3": "^3.705.0",
"@certd/acme-client": "^1.31.4", "@certd/acme-client": "^1.31.7",
"@certd/basic": "^1.31.4", "@certd/basic": "^1.31.7",
"@certd/commercial-core": "^1.31.4", "@certd/commercial-core": "^1.31.7",
"@certd/lib-huawei": "^1.31.4", "@certd/lib-huawei": "^1.31.7",
"@certd/lib-k8s": "^1.31.4", "@certd/lib-k8s": "^1.31.7",
"@certd/lib-server": "^1.31.4", "@certd/lib-server": "^1.31.7",
"@certd/midway-flyway-js": "^1.31.4", "@certd/midway-flyway-js": "^1.31.7",
"@certd/pipeline": "^1.31.4", "@certd/pipeline": "^1.31.7",
"@certd/plugin-cert": "^1.31.4", "@certd/plugin-cert": "^1.31.7",
"@certd/plugin-lib": "^1.31.4", "@certd/plugin-lib": "^1.31.7",
"@certd/plugin-plus": "^1.31.4", "@certd/plugin-plus": "^1.31.7",
"@certd/plus-core": "^1.31.4", "@certd/plus-core": "^1.31.7",
"@corsinvest/cv4pve-api-javascript": "^8.3.0", "@corsinvest/cv4pve-api-javascript": "^8.3.0",
"@huaweicloud/huaweicloud-sdk-cdn": "^3.1.120", "@huaweicloud/huaweicloud-sdk-cdn": "^3.1.120",
"@huaweicloud/huaweicloud-sdk-core": "^3.1.120", "@huaweicloud/huaweicloud-sdk-core": "^3.1.120",

View File

@@ -12,6 +12,7 @@ import {
} from '@certd/lib-server'; } from '@certd/lib-server';
import { AppKey, getPlusInfo, isComm } from '@certd/plus-core'; import { AppKey, getPlusInfo, isComm } from '@certd/plus-core';
import { cloneDeep } from 'lodash-es'; import { cloneDeep } from 'lodash-es';
import {getVersion} from "../../utils/version.js";
/** /**
*/ */
@@ -81,6 +82,8 @@ export class BasicSettingsController extends BaseController {
const plusInfo = await this.plusInfo(); const plusInfo = await this.plusInfo();
const headerMenus = await this.getHeaderMenus(); const headerMenus = await this.getHeaderMenus();
const suiteSetting = await this.getSuiteSetting(); const suiteSetting = await this.getSuiteSetting();
const version = await getVersion()
return this.ok({ return this.ok({
sysPublic, sysPublic,
installInfo, installInfo,
@@ -89,6 +92,10 @@ export class BasicSettingsController extends BaseController {
plusInfo, plusInfo,
headerMenus, headerMenus,
suiteSetting, suiteSetting,
app:{
time: new Date().getTime(),
version,
}
}); });
} }
} }

View File

@@ -8,7 +8,7 @@ import { AliyunAccess, AliyunClient } from '@certd/plugin-lib';
title: '阿里云', title: '阿里云',
desc: '阿里云DNS解析提供商', desc: '阿里云DNS解析提供商',
accessType: 'aliyun', accessType: 'aliyun',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
}) })
export class AliyunDnsProvider extends AbstractDnsProvider { export class AliyunDnsProvider extends AbstractDnsProvider {
client: any; client: any;

View File

@@ -5,7 +5,7 @@ import { AliyunAccess, AliyunClient, AliyunSslClient, createCertDomainGetterInpu
@IsTaskPlugin({ @IsTaskPlugin({
name: 'AliyunDeployCertToALB', name: 'AliyunDeployCertToALB',
title: '阿里云-部署至ALB应用负载均衡', title: '阿里云-部署至ALB应用负载均衡',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: 'ALB,更新监听器的默认证书', desc: 'ALB,更新监听器的默认证书',
needPlus: false, needPlus: false,

View File

@@ -5,7 +5,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'DeployCertToAliyunCDN', name: 'DeployCertToAliyunCDN',
title: '阿里云-部署证书至CDN', title: '阿里云-部署证书至CDN',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: '自动部署域名证书至阿里云CDN', desc: '自动部署域名证书至阿里云CDN',
default: { default: {

View File

@@ -6,7 +6,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'DeployCertToAliyunDCDN', name: 'DeployCertToAliyunDCDN',
title: '阿里云-部署证书至DCDN', title: '阿里云-部署证书至DCDN',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: '依赖证书申请前置任务自动部署域名证书至阿里云DCDN', desc: '依赖证书申请前置任务自动部署域名证书至阿里云DCDN',
default: { default: {

View File

@@ -6,7 +6,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'AliyunDeployCertToFC', name: 'AliyunDeployCertToFC',
title: '阿里云-部署至阿里云FC(3.0)', title: '阿里云-部署至阿里云FC(3.0)',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: '部署证书到阿里云函数计算FC3.0,【注意】证书的加密算法必须选择【pkcs1旧版】', desc: '部署证书到阿里云函数计算FC3.0,【注意】证书的加密算法必须选择【pkcs1旧版】',
needPlus: true, needPlus: true,

View File

@@ -5,7 +5,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'AliyunDeployCertToNLB', name: 'AliyunDeployCertToNLB',
title: '阿里云-部署至NLB网络负载均衡', title: '阿里云-部署至NLB网络负载均衡',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: 'NLB,网络负载均衡,更新监听器的默认证书', desc: 'NLB,网络负载均衡,更新监听器的默认证书',
needPlus: false, needPlus: false,

View File

@@ -5,7 +5,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'DeployCertToAliyunOSS', name: 'DeployCertToAliyunOSS',
title: '阿里云-部署证书至OSS', title: '阿里云-部署证书至OSS',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: '自动部署域名证书至阿里云OSS', desc: '自动部署域名证书至阿里云OSS',
default: { default: {

View File

@@ -5,7 +5,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'AliyunDeployCertToSLB', name: 'AliyunDeployCertToSLB',
title: '阿里云-部署至SLB(传统负载均衡)', title: '阿里云-部署至SLB(传统负载均衡)',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: '部署证书到阿里云SLB(传统负载均衡)', desc: '部署证书到阿里云SLB(传统负载均衡)',
needPlus: false, needPlus: false,

View File

@@ -6,7 +6,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'AliyunDeployCertToWaf', name: 'AliyunDeployCertToWaf',
title: '阿里云-部署至阿里云WAF', title: '阿里云-部署至阿里云WAF',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: '部署证书到阿里云WAF', desc: '部署证书到阿里云WAF',
needPlus: true, needPlus: true,

View File

@@ -24,7 +24,7 @@ const regionDict = [
@IsTaskPlugin({ @IsTaskPlugin({
name: 'uploadCertToAliyun', name: 'uploadCertToAliyun',
title: '阿里云-上传证书到阿里云', title: '阿里云-上传证书到阿里云',
icon: 'ant-design:aliyun-outlined', icon: 'svg:icon-aliyun',
group: pluginGroups.aliyun.key, group: pluginGroups.aliyun.key,
desc: '如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出', desc: '如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出',
default: { default: {

View File

@@ -37,7 +37,7 @@ export const AwsRegions = [
name: 'aws', name: 'aws',
title: '亚马逊云aws授权', title: '亚马逊云aws授权',
desc: '', desc: '',
icon: 'ant-design:aws-outlined', icon: 'svg:icon-aws',
}) })
export class AwsAccess extends BaseAccess { export class AwsAccess extends BaseAccess {
@AccessInput({ @AccessInput({

View File

@@ -10,7 +10,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
name: 'AwsDeployToCloudFront', name: 'AwsDeployToCloudFront',
title: 'AWS-部署证书到CloudFront', title: 'AWS-部署证书到CloudFront',
desc: '部署证书到 AWS CloudFront', desc: '部署证书到 AWS CloudFront',
icon: 'clarity:plugin-line', icon: 'svg:icon-aws',
group: pluginGroups.aws.key, group: pluginGroups.aws.key,
needPlus: true, needPlus: true,
default: { default: {

View File

@@ -7,7 +7,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
name: 'AwsUploadToACM', name: 'AwsUploadToACM',
title: 'AWS-上传证书到ACM', title: 'AWS-上传证书到ACM',
desc: '上传证书 AWS ACM', desc: '上传证书 AWS ACM',
icon: 'clarity:plugin-line', icon: 'svg:icon-aws',
group: pluginGroups.aws.key, group: pluginGroups.aws.key,
default: { default: {
strategy: { strategy: {

View File

@@ -4,7 +4,7 @@ import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from
import { optionsUtils } from '@certd/basic/dist/utils/util.options.js'; import { optionsUtils } from '@certd/basic/dist/utils/util.options.js';
import { CertApplyPluginNames} from '@certd/plugin-cert'; import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
//命名规范,插件名称+功能就是目录plugin-demo中的demo大写字母开头驼峰命名 //命名规范,插件类型+功能就是目录plugin-demo中的demo大写字母开头驼峰命名
name: 'DemoTest', name: 'DemoTest',
title: 'Demo-测试插件', title: 'Demo-测试插件',
icon: 'clarity:plugin-line', icon: 'clarity:plugin-line',

View File

@@ -144,9 +144,9 @@ export class DnslaDnsProvider extends AbstractDnsProvider<DnslaRecord> {
const res = await this.doRequestApi(url, { const res = await this.doRequestApi(url, {
domainId: domainId, domainId: domainId,
type: 16, type: 16,
host: fullRecord, host: fullRecord.replace(`.${domain}`, ''),
data: value, data: value,
ttl: 1, ttl: 60,
}); });
return res.data; return res.data;

View File

@@ -179,6 +179,21 @@ export class UploadCertToHostPlugin extends AbstractTaskPlugin {
}) })
accessId!: string; accessId!: string;
@TaskInput({
title: '上传方式',
helper: '选择上传方式sftp或者scp',
value:"sftp",
component: {
name: 'a-select',
options: [
{ value: 'sftp', label: 'sftp' },
{ value: 'scp', label: 'scp' },
],
},
required: true,
})
uploadType: string = 'sftp';
@TaskInput({ @TaskInput({
title: '自动创建远程目录', title: '自动创建远程目录',
helper: '是否自动创建远程目录,如果关闭则你需要自己确保远程目录存在', helper: '是否自动创建远程目录,如果关闭则你需要自己确保远程目录存在',
@@ -249,18 +264,7 @@ export class UploadCertToHostPlugin extends AbstractTaskPlugin {
async onInstance() {} async onInstance() {}
// copyFile(srcFile: string, destFile: string) {
// if (!srcFile || !destFile) {
// this.logger.warn(`srcFile:${srcFile} 或 destFile:${destFile} 为空,不复制`);
// return;
// }
// const dir = destFile.substring(0, destFile.lastIndexOf('/'));
// if (!fs.existsSync(dir)) {
// fs.mkdirSync(dir, { recursive: true });
// }
// fs.copyFileSync(srcFile, destFile);
// this.logger.info(`复制文件:${srcFile} => ${destFile}`);
// }
async execute(): Promise<void> { async execute(): Promise<void> {
const { cert, accessId } = this; const { cert, accessId } = this;
let { crtPath, keyPath, icPath, pfxPath, derPath, jksPath, onePath } = this; let { crtPath, keyPath, icPath, pfxPath, derPath, jksPath, onePath } = this;
@@ -268,16 +272,6 @@ export class UploadCertToHostPlugin extends AbstractTaskPlugin {
const handle = async (opts: CertReaderHandleContext) => { const handle = async (opts: CertReaderHandleContext) => {
const { tmpCrtPath, tmpKeyPath, tmpDerPath, tmpJksPath, tmpPfxPath, tmpIcPath, tmpOnePath } = opts; const { tmpCrtPath, tmpKeyPath, tmpDerPath, tmpJksPath, tmpPfxPath, tmpIcPath, tmpOnePath } = opts;
// if (this.copyToThisHost) {
// this.logger.info('复制到目标路径');
// this.copyFile(tmpCrtPath, crtPath);
// this.copyFile(tmpKeyPath, keyPath);
// this.copyFile(tmpIcPath, this.icPath);
// this.copyFile(tmpPfxPath, this.pfxPath);
// this.copyFile(tmpDerPath, this.derPath);
// this.logger.warn('复制到当前主机功能已迁移到 “复制到本机”插件,请尽快换成复制到本机插件');
// return;
// }
if (accessId == null) { if (accessId == null) {
this.logger.error('复制到当前主机功能已迁移到 “复制到本机”插件,请换成复制到本机插件'); this.logger.error('复制到当前主机功能已迁移到 “复制到本机”插件,请换成复制到本机插件');
@@ -355,7 +349,9 @@ export class UploadCertToHostPlugin extends AbstractTaskPlugin {
connectConf, connectConf,
transports, transports,
mkdirs: this.mkdirs, mkdirs: this.mkdirs,
uploadType: this.uploadType,
}); });
this.logger.info('上传文件到服务器成功'); this.logger.info('上传文件到服务器成功');
//输出 //输出
this.hostCrtPath = crtPath; this.hostCrtPath = crtPath;

View File

@@ -8,7 +8,7 @@ import { IsAccess, AccessInput, BaseAccess } from '@certd/pipeline';
name: 'proxmox', name: 'proxmox',
title: 'proxmox', title: 'proxmox',
desc: '', desc: '',
icon: 'svg:icon-dogecloud', icon: 'svg:icon-proxmox',
}) })
export class ProxmoxAccess extends BaseAccess { export class ProxmoxAccess extends BaseAccess {
/** /**

View File

@@ -8,7 +8,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
//命名规范,插件名称+功能就是目录plugin-demo中的demo大写字母开头驼峰命名 //命名规范,插件名称+功能就是目录plugin-demo中的demo大写字母开头驼峰命名
name: 'ProxmoxUploadCert', name: 'ProxmoxUploadCert',
title: '上传证书到Proxmox', title: '上传证书到Proxmox',
icon: 'clarity:plugin-line', icon: 'svg:icon-proxmox',
//插件分组 //插件分组
group: pluginGroups.other.key, group: pluginGroups.other.key,
needPlus: true, needPlus: true,

View File

@@ -8,7 +8,7 @@ import { CertApplyPluginNames} from '@certd/plugin-cert';
@IsTaskPlugin({ @IsTaskPlugin({
name: 'QnapDeploy', name: 'QnapDeploy',
title: '威联通-部署证书到威联通', title: '威联通-部署证书到威联通',
icon: 'simple-icons:qnap', icon: 'svg:icon-qnap',
group: pluginGroups.panel.key, group: pluginGroups.panel.key,
desc: '部署证书到qnap', desc: '部署证书到qnap',
default: { default: {

View File

@@ -17,7 +17,7 @@ type westRecord = {
name: 'west', name: 'west',
title: '西部数码', title: '西部数码',
desc: 'west dns provider', desc: 'west dns provider',
icon: 'tabler:map-west', icon: 'svg:icon-xibushuma',
// 这里是对应的云平台的access类型名称 // 这里是对应的云平台的access类型名称
accessType: 'west', accessType: 'west',
}) })

83
pnpm-lock.yaml generated
View File

@@ -46,7 +46,7 @@ importers:
packages/core/acme-client: packages/core/acme-client:
dependencies: dependencies:
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../basic version: link:../basic
'@peculiar/x509': '@peculiar/x509':
specifier: ^1.11.0 specifier: ^1.11.0
@@ -204,10 +204,10 @@ importers:
packages/core/pipeline: packages/core/pipeline:
dependencies: dependencies:
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../basic version: link:../basic
'@certd/plus-core': '@certd/plus-core':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../pro/plus-core version: link:../../pro/plus-core
dayjs: dayjs:
specifier: ^1.11.7 specifier: ^1.11.7
@@ -342,7 +342,7 @@ importers:
packages/libs/lib-k8s: packages/libs/lib-k8s:
dependencies: dependencies:
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/basic version: link:../../core/basic
'@kubernetes/client-node': '@kubernetes/client-node':
specifier: 0.21.0 specifier: 0.21.0
@@ -382,16 +382,16 @@ importers:
packages/libs/lib-server: packages/libs/lib-server:
dependencies: dependencies:
'@certd/acme-client': '@certd/acme-client':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/acme-client version: link:../../core/acme-client
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/basic version: link:../../core/basic
'@certd/pipeline': '@certd/pipeline':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/pipeline version: link:../../core/pipeline
'@certd/plus-core': '@certd/plus-core':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../pro/plus-core version: link:../../pro/plus-core
'@midwayjs/cache': '@midwayjs/cache':
specifier: ~3.14.0 specifier: ~3.14.0
@@ -534,16 +534,16 @@ importers:
packages/plugins/plugin-cert: packages/plugins/plugin-cert:
dependencies: dependencies:
'@certd/acme-client': '@certd/acme-client':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/acme-client version: link:../../core/acme-client
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/basic version: link:../../core/basic
'@certd/pipeline': '@certd/pipeline':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/pipeline version: link:../../core/pipeline
'@certd/plugin-lib': '@certd/plugin-lib':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../plugin-lib version: link:../plugin-lib
'@google-cloud/publicca': '@google-cloud/publicca':
specifier: ^1.3.0 specifier: ^1.3.0
@@ -610,10 +610,10 @@ importers:
specifier: ^1.7.10 specifier: ^1.7.10
version: 1.8.0 version: 1.8.0
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/basic version: link:../../core/basic
'@certd/pipeline': '@certd/pipeline':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/pipeline version: link:../../core/pipeline
'@kubernetes/client-node': '@kubernetes/client-node':
specifier: 0.21.0 specifier: 0.21.0
@@ -701,19 +701,19 @@ importers:
packages/pro/commercial-core: packages/pro/commercial-core:
dependencies: dependencies:
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/basic version: link:../../core/basic
'@certd/lib-server': '@certd/lib-server':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../libs/lib-server version: link:../../libs/lib-server
'@certd/pipeline': '@certd/pipeline':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/pipeline version: link:../../core/pipeline
'@certd/plugin-plus': '@certd/plugin-plus':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../plugin-plus version: link:../plugin-plus
'@certd/plus-core': '@certd/plus-core':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../plus-core version: link:../plus-core
'@midwayjs/core': '@midwayjs/core':
specifier: ~3.20.3 specifier: ~3.20.3
@@ -798,22 +798,22 @@ importers:
specifier: ^1.0.2 specifier: ^1.0.2
version: 1.0.2 version: 1.0.2
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/basic version: link:../../core/basic
'@certd/lib-k8s': '@certd/lib-k8s':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../libs/lib-k8s version: link:../../libs/lib-k8s
'@certd/pipeline': '@certd/pipeline':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/pipeline version: link:../../core/pipeline
'@certd/plugin-cert': '@certd/plugin-cert':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../plugins/plugin-cert version: link:../../plugins/plugin-cert
'@certd/plugin-lib': '@certd/plugin-lib':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../plugins/plugin-lib version: link:../../plugins/plugin-lib
'@certd/plus-core': '@certd/plus-core':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../plus-core version: link:../plus-core
ali-oss: ali-oss:
specifier: ^6.21.0 specifier: ^6.21.0
@@ -910,7 +910,7 @@ importers:
packages/pro/plus-core: packages/pro/plus-core:
dependencies: dependencies:
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/basic version: link:../../core/basic
dayjs: dayjs:
specifier: ^1.11.7 specifier: ^1.11.7
@@ -1072,9 +1072,6 @@ importers:
cropperjs: cropperjs:
specifier: ^1.6.1 specifier: ^1.6.1
version: 1.6.2 version: 1.6.2
crypto-js:
specifier: ^4.2.0
version: 4.2.0
cssnano: cssnano:
specifier: ^7.0.6 specifier: ^7.0.6
version: 7.0.6(postcss@8.5.3) version: 7.0.6(postcss@8.5.3)
@@ -1188,10 +1185,10 @@ importers:
version: 0.1.3(zod@3.24.2) version: 0.1.3(zod@3.24.2)
devDependencies: devDependencies:
'@certd/lib-iframe': '@certd/lib-iframe':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../libs/lib-iframe version: link:../../libs/lib-iframe
'@certd/pipeline': '@certd/pipeline':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/pipeline version: link:../../core/pipeline
'@rollup/plugin-commonjs': '@rollup/plugin-commonjs':
specifier: ^25.0.7 specifier: ^25.0.7
@@ -1371,40 +1368,40 @@ importers:
specifier: ^3.705.0 specifier: ^3.705.0
version: 3.758.0(aws-crt@1.25.3) version: 3.758.0(aws-crt@1.25.3)
'@certd/acme-client': '@certd/acme-client':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/acme-client version: link:../../core/acme-client
'@certd/basic': '@certd/basic':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/basic version: link:../../core/basic
'@certd/commercial-core': '@certd/commercial-core':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../pro/commercial-core version: link:../../pro/commercial-core
'@certd/lib-huawei': '@certd/lib-huawei':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../libs/lib-huawei version: link:../../libs/lib-huawei
'@certd/lib-k8s': '@certd/lib-k8s':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../libs/lib-k8s version: link:../../libs/lib-k8s
'@certd/lib-server': '@certd/lib-server':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../libs/lib-server version: link:../../libs/lib-server
'@certd/midway-flyway-js': '@certd/midway-flyway-js':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../libs/midway-flyway-js version: link:../../libs/midway-flyway-js
'@certd/pipeline': '@certd/pipeline':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../core/pipeline version: link:../../core/pipeline
'@certd/plugin-cert': '@certd/plugin-cert':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../plugins/plugin-cert version: link:../../plugins/plugin-cert
'@certd/plugin-lib': '@certd/plugin-lib':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../plugins/plugin-lib version: link:../../plugins/plugin-lib
'@certd/plugin-plus': '@certd/plugin-plus':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../pro/plugin-plus version: link:../../pro/plugin-plus
'@certd/plus-core': '@certd/plus-core':
specifier: ^1.31.3 specifier: ^1.31.5
version: link:../../pro/plus-core version: link:../../pro/plus-core
'@corsinvest/cv4pve-api-javascript': '@corsinvest/cv4pve-api-javascript':
specifier: ^8.3.0 specifier: ^8.3.0