Compare commits

...

218 Commits

Author SHA1 Message Date
xiaojunnuo
be58e3084b v1.31.9 2025-03-28 23:49:37 +08:00
xiaojunnuo
71d5ab21ed build: prepare to build 2025-03-28 23:47:13 +08:00
xiaojunnuo
993bc7432f perf: 站点监控保存时异步检查 2025-03-28 23:46:44 +08:00
xiaojunnuo
99ff879d93 perf: dns支持火山引擎 2025-03-28 23:27:24 +08:00
xiaojunnuo
caa15b4735 fix: 修复华为云dns接口请求出错的bug 2025-03-28 21:23:29 +08:00
xiaojunnuo
cc8da0cf13 fix: 修复网站证书监控https port设置无效的bug 2025-03-28 09:10:49 +08:00
xiaojunnuo
0b6618ff70 fix: 修复某些情况下站点证书监控报undefined.includes的错误 2025-03-27 17:10:46 +08:00
xiaojunnuo
6f180f534c build: publish 2025-03-26 22:03:01 +08:00
xiaojunnuo
4220ef2a5b build: trigger build image 2025-03-26 22:02:41 +08:00
xiaojunnuo
2acaa66635 v1.31.8 2025-03-26 22:01:03 +08:00
xiaojunnuo
ee5eecbec1 build: prepare to build 2025-03-26 21:57:43 +08:00
xiaojunnuo
687bb8a237 fix: 修复lego模式无法创建流水线的bug 2025-03-26 21:54:34 +08:00
xiaojunnuo
e51123a951 perf: 优化scp上传 2025-03-26 21:48:51 +08:00
xiaojunnuo
92bb12e2e3 chore: 2025-03-26 20:54:33 +08:00
xiaojunnuo
fd0536bd4b perf: 支持又拍云cdn 2025-03-26 20:48:26 +08:00
xiaojunnuo
57389a79a1 perf: 支持又拍云cdn 2025-03-26 20:47:50 +08:00
xiaojunnuo
6cd7bddc37 fix: 修复编辑通知勾选默认,导致出现多个默认通知的bug 2025-03-26 12:06:20 +08:00
xiaojunnuo
c3c5006daa perf: 优化通知格式 2025-03-26 12:05:28 +08:00
xiaojunnuo
27a8a57cf5 fix: 修复网站监控无法设置端口的bug 2025-03-26 09:21:13 +08:00
xiaojunnuo
3bded6fdcc chore: 2025-03-25 11:14:28 +08:00
xiaojunnuo
c7f31337ce chore: 2025-03-25 11:12:24 +08:00
xiaojunnuo
fd507f2692 perf: 优化txt本地校验效率 2025-03-25 11:08:25 +08:00
xiaojunnuo
96a39ef9c3 chore: 2025-03-25 09:19:32 +08:00
xiaojunnuo
81a8d6c3bf chore: 2025-03-25 00:18:52 +08:00
xiaojunnuo
d4719208f0 chore: 2025-03-25 00:18:36 +08:00
xiaojunnuo
c36dce6464 chore: 2025-03-25 00:17:38 +08:00
xiaojunnuo
2da4474bb1 chore: 2025-03-25 00:17:08 +08:00
xiaojunnuo
cab11202c7 build: publish 2025-03-25 00:05:26 +08:00
xiaojunnuo
21d7d35bb1 build: trigger build image 2025-03-25 00:05:04 +08:00
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
xiaojunnuo
b649617e04 v1.31.4 2025-03-22 02:09:07 +08:00
xiaojunnuo
a4e2287101 build: prepare to build 2025-03-22 02:06:56 +08:00
xiaojunnuo
fbb66f3c43 perf: 手动上传证书部署流水线 2025-03-22 02:06:02 +08:00
xiaojunnuo
fedf90ea78 chore: 2025-03-21 23:40:31 +08:00
xiaojunnuo
d558d50102 chore: 2025-03-21 23:11:58 +08:00
xiaojunnuo
656cb89fe8 chore: 2025-03-21 12:23:59 +08:00
xiaojunnuo
1e6ddd250e chore: 2025-03-21 11:08:58 +08:00
xiaojunnuo
1de8eee6ea fix: 修复dns.la域名申请失败的bug 2025-03-21 11:07:15 +08:00
xiaojunnuo
425bba67c5 perf: 流水线增加上传证书快捷方式 2025-03-21 01:02:57 +08:00
xiaojunnuo
8b0daf7200 chore: 2025-03-20 23:19:14 +08:00
xiaojunnuo
589a373142 perf: 宝塔支持doker站点证书部署 2025-03-20 23:09:36 +08:00
xiaojunnuo
0cfc71e4bf Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-03-19 15:01:55 +08:00
xiaojunnuo
92dabe6276 docs: docs sitemap 2025-03-19 15:01:14 +08:00
xiaojunnuo
d1b61b6bf9 chore: 支持手动上传证书并部署 2025-03-19 00:28:50 +08:00
xiaojunnuo
873f2b618b perf: 保存调整后的列宽 2025-03-18 10:00:16 +08:00
xiaojunnuo
4453070060 chore: 支持手动上传证书并部署 2025-03-18 01:02:20 +08:00
xiaojunnuo
de40be430b chore: 支持手动上传证书并部署 2025-03-18 00:52:50 +08:00
xiaojunnuo
29a6a992f0 chore: 2025-03-17 18:28:33 +08:00
xiaojunnuo
0a7d2d6264 chore: 2025-03-17 18:27:52 +08:00
xiaojunnuo
e09f92f9ee chore: 2025-03-17 18:24:55 +08:00
xiaojunnuo
9be1ecc8aa fix: 修复站点监控通知通过webhook发送失败的bug 2025-03-17 18:20:15 +08:00
xiaojunnuo
729b19c8da perf: 站点监控,手动测试也发通知 2025-03-17 16:55:23 +08:00
xiaojunnuo
a9fffa5180 perf: 支持手动上传证书并部署 2025-03-17 00:19:01 +08:00
xiaojunnuo
0069c0e399 perf: 站点证书监控支持模糊查询 2025-03-17 00:16:56 +08:00
xiaojunnuo
b6fd38e293 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-03-17 00:06:31 +08:00
xiaojunnuo
36aa7f82b0 perf: 创建证书流水线时,支持更多参数展开 2025-03-17 00:06:03 +08:00
xiaojunnuo
d01004d530 perf: 优化选择任务时手机版展示效果 2025-03-16 21:37:57 +08:00
xiaojunnuo
d85a02feeb perf: 流水线页面可以鼠标按住左右拖动 2025-03-16 21:16:14 +08:00
xiaojunnuo
b82e1dcd62 perf: 支持飞书通知 2025-03-14 13:16:48 +08:00
xiaojunnuo
74c6a2266f build: publish 2025-03-14 01:19:31 +08:00
xiaojunnuo
9754223f31 build: trigger build image 2025-03-14 01:19:12 +08:00
xiaojunnuo
cfbbac9796 v1.31.3 2025-03-14 01:17:37 +08:00
xiaojunnuo
fece8955cf build: prepare to build 2025-03-14 01:15:22 +08:00
xiaojunnuo
170b2afb0e perf: 1panel支持 apikey方式授权 2025-03-14 01:14:04 +08:00
xiaojunnuo
ee8af18d0a perf: 支持dns.la 2025-03-14 00:53:31 +08:00
xiaojunnuo
27386ea04d perf: cf授权支持配置http代理 2025-03-14 00:34:31 +08:00
xiaojunnuo
0d71a8ee50 perf: 套餐支持3天7天等选项 2025-03-14 00:28:20 +08:00
xiaojunnuo
82a72e0b49 perf: 支持部署到天翼云CDN 2025-03-14 00:16:34 +08:00
xiaojunnuo
5035c123f0 chore: 2025-03-13 23:05:36 +08:00
xiaojunnuo
474b3372d8 fix: 修复阿里云fc获取不到列表的bug 2025-03-12 14:29:41 +08:00
xiaojunnuo
be87124ada perf: 证书仓库增加有效期显示 2025-03-12 11:15:46 +08:00
xiaojunnuo
aa3032db35 build: publish 2025-03-12 10:27:06 +08:00
xiaojunnuo
a4ead79888 build: trigger build image 2025-03-12 10:26:50 +08:00
xiaojunnuo
98445afd3e v1.31.2 2025-03-12 10:25:30 +08:00
xiaojunnuo
3eb9671640 build: prepare to build 2025-03-12 10:23:41 +08:00
xiaojunnuo
95fb4e3e8b fix: 修复cname记录查找bug 2025-03-12 10:17:12 +08:00
xiaojunnuo
818015d24a build: publish 2025-03-11 23:34:04 +08:00
xiaojunnuo
e11bd3e813 build: trigger build image 2025-03-11 23:33:45 +08:00
xiaojunnuo
2a4d64af95 v1.31.1 2025-03-11 23:32:00 +08:00
xiaojunnuo
d73cb4be2b build: prepare to build 2025-03-11 23:29:21 +08:00
xiaojunnuo
82752040f8 build: trigger build image 2025-03-11 23:27:04 +08:00
xiaojunnuo
1bde6d8b9c build: prepare to build 2025-03-11 23:23:44 +08:00
xiaojunnuo
be55d36f67 chore: 2025-03-11 23:22:44 +08:00
xiaojunnuo
f07724372d chore: 2025-03-11 23:11:24 +08:00
xiaojunnuo
5b8d5dd975 perf: 一些手机端适配优化 2025-03-11 22:25:14 +08:00
xiaojunnuo
e36aa065e9 chore: 2025-03-11 18:05:36 +08:00
xiaojunnuo
45486ef399 chore: 2025-03-11 11:16:02 +08:00
xiaojunnuo
4fedf6f452 chore: 2025-03-11 11:14:02 +08:00
xiaojunnuo
702b80ef75 build: publish 2025-03-11 01:34:44 +08:00
xiaojunnuo
a5c7789dbc build: trigger build image 2025-03-11 01:34:24 +08:00
xiaojunnuo
bddef199ff v1.31.0 2025-03-11 01:32:37 +08:00
xiaojunnuo
fa6fc07009 build: prepare to build 2025-03-11 01:30:42 +08:00
xiaojunnuo
8d9b44528b chore: 2025-03-11 01:30:36 +08:00
xiaojunnuo
1d108d775c build: prepare to build 2025-03-11 01:27:06 +08:00
xiaojunnuo
7af111ac57 chore: 2025-03-11 01:25:35 +08:00
xiaojunnuo
6451f00639 Merge branch 'v2' into v2-dev 2025-03-11 01:16:42 +08:00
xiaojunnuo
31718d1a4a chore: 2025-03-11 01:14:14 +08:00
xiaojunnuo
832b74b66b chore: 2025-03-11 01:07:44 +08:00
xiaojunnuo
082802e119 perf: 历史记录查看详情,可以切换到对应的历史记录日志上去 2025-03-11 00:46:51 +08:00
xiaojunnuo
efa9c748c5 perf: 流水线同一个阶段任务优化为并行执行 2025-03-11 00:46:03 +08:00
xiaojunnuo
fc8bef5aae perf: 通知支持钉钉群聊机器人 2025-03-11 00:29:18 +08:00
xiaojunnuo
441b15ed2f fix: ProxmoxUploadCert 增加强制部署证书
https://github.com/certd/certd/issues/337
2025-03-10 22:48:49 +08:00
xiaojunnuo
11d1f6e141 chore: 优化 2025-03-10 16:51:59 +08:00
xiaojunnuo
0f5b9564c6 chore: 优化 2025-03-10 16:06:40 +08:00
xiaojunnuo
0c8a84656a chore: 优化 2025-03-10 15:45:24 +08:00
xiaojunnuo
330f91e15b chore: 2025-03-10 00:06:49 +08:00
xiaojunnuo
490141a920 chore: 2025-03-09 23:51:53 +08:00
xiaojunnuo
1e288b14d0 chore: vip modal 2025-03-09 23:42:00 +08:00
xiaojunnuo
81df96bf45 perf: 易支付支持固定支付方式,适合没有收银台版本使用 2025-03-09 23:26:53 +08:00
xiaojunnuo
d1ab5f74a6 chore: headerMenu 优化 2025-03-09 16:22:22 +08:00
xiaojunnuo
e43dd03132 chore: 购买免费套餐时,先弹出确认对话框 2025-03-09 15:53:58 +08:00
xiaojunnuo
2c6d64976f chore: useTitle 2025-03-09 01:14:44 +08:00
xiaojunnuo
065713cdb6 perf: 支持易盾RCDN部署 2025-03-09 01:08:57 +08:00
xiaojunnuo
746d3c97c3 chore: 集成vben 2025-03-07 18:05:31 +08:00
xiaojunnuo
9557fc799e chore: 集成vben 2025-03-07 18:01:51 +08:00
xiaojunnuo
8fcabc5e9f feat: 升级前端框架,适配手机端 2025-03-06 23:40:58 +08:00
GitHub Actions Bot
2b4b15f558 🔱: [client] sync upgrade with 6 commits [trident-sync]
chore:
chore: help menu
chore: help menu
fix: 修复 antdv 弹出菜单边框过大的问题
fix: 修复 antdv懒加载后dropdown按钮无法点击的bug
2025-03-05 19:24:47 +00:00
xiaojunnuo
057b0b4565 perf: 升级midwayjs版本 2025-03-06 00:35:48 +08:00
greper
70a2402521 fix: 修复CDN插件我爱云因更换接口导致部署失败的问题 from LjyLab/v2
fix: 修复CDN插件我爱云因更换接口导致部署失败的问题
2025-03-05 23:52:44 +08:00
xiaojunnuo
de34db3394 chore: 2025-03-05 23:51:23 +08:00
xiaojunnuo
0c2ae792ec chore: 2025-03-05 23:21:09 +08:00
xiaojunnuo
a4c0b92777 chore: 2025-03-05 22:38:36 +08:00
XiaoJun
b9d78135e0 Merge remote-tracking branch 'origin/v2' into v2
# Conflicts:
#	packages/ui/certd-server/src/plugins/plugin-woai/plugins/plugin-deploy-to-cdn.ts
2025-03-05 21:23:41 +08:00
XiaoJun
5641c19502 fix: 修复CDN插件我爱云因更换接口导致部署失败的问题 2025-03-05 21:20:39 +08:00
XiaoJun
0110dfdb70 fix: 修复CDN插件我爱云因更换接口导致部署失败的问题 2025-03-05 21:02:14 +08:00
GitHub Actions Bot
140606744b 🔱: [client] sync upgrade with 5 commits [trident-sync]
build: publish success
perf: antdv 异步加载,加快首页打开速度
perf: 精简lodash
chore: 兼容手机版
2025-03-04 19:24:24 +00:00
GitHub Actions Bot
335d175d57 🔱: [client] sync upgrade with 7 commits [trident-sync]
chore:
Merge branch 'vben'

# Conflicts:
#	package.json
perf: antdv示例改成使用vben框架
chore: vben
chore: vben
chore: vben
2025-03-03 19:24:51 +00:00
xiaojunnuo
779db9da70 perf: 是否允许爬虫爬取增加ui设置选项 2025-02-27 00:10:07 +08:00
xiaojunnuo
5d29a08ab7 chore: robots.txt 2025-02-26 23:57:52 +08:00
xiaojunnuo
1fe3365e10 fix: 修复webhook headers value中带等号是解析错误的bug
https://github.com/certd/certd/issues/316
2025-02-26 21:19:58 +08:00
xiaojunnuo
f0584c88e8 build: publish 2025-02-25 01:08:54 +08:00
xiaojunnuo
c7620dfc48 build: trigger build image 2025-02-25 01:08:36 +08:00
xiaojunnuo
5d6a945763 v1.30.6 2025-02-25 01:05:51 +08:00
xiaojunnuo
4fe5939d0b build: prepare to build 2025-02-25 01:03:46 +08:00
xiaojunnuo
bcaf54d4cb perf: 支持部署到阿里云FC3.0 2025-02-25 01:02:29 +08:00
xiaojunnuo
44d43f45cb perf: 支持新版本LeCDN 2025-02-24 18:07:08 +08:00
GitHub Actions Bot
de26ee9383 🔱: [client] sync upgrade with 2 commits [trident-sync]
build: publish success
2025-02-23 19:23:42 +00:00
GitHub Actions Bot
d442462952 🔱: [client] sync upgrade with 2 commits [trident-sync]
build: publish success
2025-02-22 19:23:46 +00:00
GitHub Actions Bot
558fc9f306 🔱: [client] sync upgrade with 2 commits [trident-sync]
fix: 修复4.2.x版本antdv导致modal全屏无效的bug
2025-02-20 19:24:20 +00:00
xiaojunnuo
9f0ee219d0 perf: 上传到阿里云证书名称后缀增加毫秒时间戳 2025-02-20 11:13:46 +08:00
xiaojunnuo
5164116bde perf: 禁止爬虫爬取本网站 2025-02-18 15:23:56 +08:00
xiaojunnuo
02404bc97e docs: deploy 2025-02-17 17:38:22 +08:00
xiaojunnuo
0ebdb037b5 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-02-17 17:37:57 +08:00
xiaojunnuo
a8b60c32b3 docs: deploy 2025-02-17 17:27:07 +08:00
xiaojunnuo
416621d503 docs: deploy 2025-02-17 17:18:41 +08:00
xiaojunnuo
b917eb447c chore: 2025-02-14 15:36:02 +08:00
xiaojunnuo
2ce3c71b88 chore: 2025-02-14 15:26:34 +08:00
xiaojunnuo
ca13bfa5f8 build: publish 2025-02-14 15:10:22 +08:00
xiaojunnuo
d8812196f3 build: trigger build image 2025-02-14 15:10:01 +08:00
xiaojunnuo
4e750bdbe1 v1.30.5 2025-02-14 15:07:36 +08:00
xiaojunnuo
f59a37b77c build: prepare to build 2025-02-14 15:05:55 +08:00
xiaojunnuo
ea3db93db9 chore: 2025-02-14 15:05:13 +08:00
xiaojunnuo
26f2c9fea2 v1.30.4 2025-02-14 14:58:54 +08:00
xiaojunnuo
290cc0d1bb build: prepare to build 2025-02-14 14:56:19 +08:00
xiaojunnuo
78044c062e fix: 适配最新版1panel密码编码方式 2025-02-14 14:55:15 +08:00
xiaojunnuo
3a2f653229 build: publish 2025-02-14 01:49:16 +08:00
xiaojunnuo
bbe22e6f36 build: trigger build image 2025-02-14 01:48:53 +08:00
xiaojunnuo
d4474ff0fb v1.30.3 2025-02-14 01:46:30 +08:00
xiaojunnuo
c7979f1be5 build: prepare to build 2025-02-14 01:44:45 +08:00
xiaojunnuo
ada0b7106e fix: 修复新版本1panel密码需要加密,无法登录的问题 2025-02-14 01:43:52 +08:00
xiaojunnuo
c3a5542935 fix: 修复腾讯云CLB多域名同证书部署报错的bug
https://github.com/certd/certd/issues/314
2025-02-14 00:42:25 +08:00
GitHub Actions Bot
2eebb3388a 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore:
2025-02-12 19:24:12 +00:00
xiaojunnuo
287c3688fd build: publish 2025-02-09 16:12:21 +08:00
xiaojunnuo
3948b3993f build: trigger build image 2025-02-09 16:12:04 +08:00
GitHub Actions Bot
fe4367c580 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore:
2025-01-24 19:24:01 +00:00
GitHub Actions Bot
e70732c9ac 🔱: [client] sync upgrade with 2 commits [trident-sync]
build: publish success
2025-01-12 19:23:54 +00:00
GitHub Actions Bot
42ad04cabd 🔱: [client] sync upgrade with 2 commits [trident-sync]
perf: 支持图标选择器
2025-01-09 19:24:07 +00:00
GitHub Actions Bot
7f5e89d489 🔱: [client] sync upgrade with 3 commits [trident-sync]
build: publish success
chore:
2024-12-31 19:23:58 +00:00
GitHub Actions Bot
c504f33b1f 🔱: [client] sync upgrade with 3 commits [trident-sync]
build: publish success
chore:
2024-12-28 19:23:55 +00:00
GitHub Actions Bot
ed6a18dae7 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore: 提示优化
2024-12-24 19:23:49 +00:00
GitHub Actions Bot
844c4bf983 🔱: [client] sync upgrade with 3 commits [trident-sync]
build: publish success
fix: 修复表单全屏的bug
2024-12-03 19:26:18 +00:00
GitHub Actions Bot
43961c1c18 🔱: [client] sync upgrade with 3 commits [trident-sync]
perf: rowHandle按钮支持render,删除按钮提供popcomfirm风格示例
perf: table-select open支持context参数
2024-12-02 19:26:32 +00:00
GitHub Actions Bot
7b42d7252e 🔱: [client] sync upgrade with 5 commits [trident-sync]
build: publish success
perf: 增加card列表示例
fix: 修复antdv4新页面打开示例不显示表单的bug
chore:
2024-11-26 19:26:27 +00:00
GitHub Actions Bot
4aa136189a 🔱: [client] sync upgrade with 2 commits [trident-sync]
build: publish success
2024-11-18 19:25:37 +00:00
GitHub Actions Bot
c66802af2d 🔱: [client] sync upgrade with 2 commits [trident-sync]
fix: 修复dict-select多选情况下selected-change返回为空的bug
2024-11-15 19:25:37 +00:00
GitHub Actions Bot
49e65c611f 🔱: [client] sync upgrade with 3 commits [trident-sync]
build: publish success
fix: 修复1.23.0 antdv下不显示pagination的bug
2024-11-13 19:24:23 +00:00
GitHub Actions Bot
abf29bc164 🔱: [client] sync upgrade with 3 commits [trident-sync]
build: publish success
chore:
2024-11-11 19:23:56 +00:00
GitHub Actions Bot
08854e0ab9 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore:
2024-11-07 19:24:59 +00:00
GitHub Actions Bot
575416a16d 🔱: [client] sync upgrade with 4 commits [trident-sync]
feat: 示例全面改成useFsAsync
chore:
perf: 示例改成useFsAsync
2024-11-06 19:26:07 +00:00
GitHub Actions Bot
3dd0783510 🔱: [client] sync upgrade with 5 commits [trident-sync]
build: publish success
chore:
fix: 修复tab change后清空查询表单的bug
build: publish success
2024-11-04 19:26:56 +00:00
GitHub Actions Bot
fadb1d35b3 🔱: [client] sync upgrade with 3 commits [trident-sync]
Merge remote-tracking branch 'origin/main'
fix: 修复search.formItem配置无效的bug
2024-10-30 19:26:28 +00:00
GitHub Actions Bot
27a9fc32a6 🔱: [client] sync upgrade with 2 commits [trident-sync]
perf: editable row 优化添加
2024-10-26 19:23:53 +00:00
GitHub Actions Bot
7008a408ca 🔱: [client] sync upgrade with 2 commits [trident-sync]
build: publish success
2024-10-24 19:26:31 +00:00
GitHub Actions Bot
b928bb46c7 🔱: [client] sync upgrade with 7 commits [trident-sync]
build: publish success
chore:
perf: editable支持单元格插槽

https://github.com/fast-crud/fast-crud/issues/431
perf: 独立使用表单支持插槽

https://github.com/fast-crud/fast-crud/issues/435
perf: 表单支持左右插槽
chore:
2024-10-23 19:24:45 +00:00
GitHub Actions Bot
18c9c4a166 🔱: [client] sync upgrade with 3 commits [trident-sync]
build: publish success
build: publish success
2024-10-21 19:25:06 +00:00
GitHub Actions Bot
49fa01f209 🔱: [client] sync upgrade with 4 commits [trident-sync]
build: publish success
perf: 优化列设置多级表头支持级联勾选
perf: table-select支持destroyOnClose参数,以修复点击取消后,扔保留上一次选中值的bug
2024-10-13 19:27:22 +00:00
GitHub Actions Bot
fe9d443100 🔱: [client] sync upgrade with 2 commits [trident-sync]
perf: 优化示例的自动调整列宽
2024-09-25 19:23:59 +00:00
GitHub Actions Bot
3dec43d8d4 🔱: [client] sync upgrade with 2 commits [trident-sync]
build: publish success
2024-09-20 19:24:53 +00:00
GitHub Actions Bot
5ab2943c3a 🔱: [client] sync upgrade with 2 commits [trident-sync]
fix: 修复search-slot错位的问题
2024-09-11 19:24:00 +00:00
GitHub Actions Bot
6e8b0eeca9 🔱: [client] sync upgrade with 2 commits [trident-sync]
fix: 修复antdv 文件上传 success事件无效的bug
2024-09-10 19:24:33 +00:00
GitHub Actions Bot
d0c4dfca97 🔱: [client] sync upgrade with 2 commits [trident-sync]
perf: 全部支持拖动调整列宽
2024-08-04 19:24:18 +00:00
GitHub Actions Bot
f4a11ed328 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore:
2024-07-29 19:24:00 +00:00
GitHub Actions Bot
b2971cf5fb 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore:
2024-07-28 19:23:50 +00:00
GitHub Actions Bot
f97827ec76 🔱: [client] sync upgrade with 3 commits [trident-sync]
build: publish success
Merge remote-tracking branch 'origin/main'
2024-07-15 19:23:57 +00:00
GitHub Actions Bot
f230a2a94d 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore: 1
2024-07-14 19:24:39 +00:00
902 changed files with 68891 additions and 2567 deletions

2
.gitignore vendored
View File

@@ -21,7 +21,7 @@ gen
/packages/ui/*/.idea
/packages/ui/*/node_modules
/packages/*/node_modules
/pnpm-lock.yaml
#/pnpm-lock.yaml
tsconfig.tsbuildinfo

View File

@@ -3,6 +3,153 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
### Bug Fixes
* 修复华为云dns接口请求出错的bug ([caa15b4](https://github.com/certd/certd/commit/caa15b47355363cbb8847f415ff12363cd53eeda))
* 修复某些情况下站点证书监控报undefined.includes的错误 ([0b6618f](https://github.com/certd/certd/commit/0b6618ff709322a0eeba78953c8c6e9d073d083a))
* 修复网站证书监控https port设置无效的bug ([cc8da0c](https://github.com/certd/certd/commit/cc8da0cf130f0c469371b59ac5bd04567f4a4414))
### Performance Improvements
* 站点监控保存时异步检查 ([993bc74](https://github.com/certd/certd/commit/993bc7432fce2d954e9897ed85b54f22150bfc7e))
* dns支持火山引擎 ([99ff879](https://github.com/certd/certd/commit/99ff879d93658c29ea493a4bde7e9e3f85996d64))
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
### Bug Fixes
* 修复编辑通知勾选默认导致出现多个默认通知的bug ([6cd7bdd](https://github.com/certd/certd/commit/6cd7bddc37da8b0d7b9860fd9a26ddfe84c869a7))
* 修复网站监控无法设置端口的bug ([27a8a57](https://github.com/certd/certd/commit/27a8a57cf52b4bf83d628aa3049be1efaa74f29c))
* 修复lego模式无法创建流水线的bug ([687bb8a](https://github.com/certd/certd/commit/687bb8a2376d0de7b72739a174e4a9560581f866))
### Performance Improvements
* 优化通知格式 ([c3c5006](https://github.com/certd/certd/commit/c3c5006daa39c20624cb58864f2b92b230a38a7a))
* 优化scp上传 ([e51123a](https://github.com/certd/certd/commit/e51123a95131cc76d655937488caf08956a67020))
* 优化txt本地校验效率 ([fd507f2](https://github.com/certd/certd/commit/fd507f269253607e68c5c099c99e0de11636f229))
* 支持又拍云cdn ([fd0536b](https://github.com/certd/certd/commit/fd0536bd4b41f15b6b5d42e0b447f0dcbf73b8a8))
* 支持又拍云cdn ([57389a7](https://github.com/certd/certd/commit/57389a79a1a61c45d081712562f8b33c9633158e))
## [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)
### 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)
### Bug Fixes
* 修复阿里云fc获取不到列表的bug ([474b337](https://github.com/certd/certd/commit/474b3372d8ce98e6d45900bf8046bc0b3f220686))
### Performance Improvements
* 1panel支持 apikey方式授权 ([170b2af](https://github.com/certd/certd/commit/170b2afb0e3b125e4ed057f633fe895b5ac3ac22))
* 套餐支持3天7天等选项 ([0d71a8e](https://github.com/certd/certd/commit/0d71a8ee501a0e5bb69decf07e8729026e9d85bf))
* 证书仓库增加有效期显示 ([be87124](https://github.com/certd/certd/commit/be87124ada7a093f281ca29a45c86b4ea4644ead))
* 支持部署到天翼云CDN ([82a72e0](https://github.com/certd/certd/commit/82a72e0b497efa043d342ad0e33c083a2de79a05))
* 支持dns.la ([ee8af18](https://github.com/certd/certd/commit/ee8af18d0ac0af82544d6dda1e4b4c678b733041))
* cf授权支持配置http代理 ([27386ea](https://github.com/certd/certd/commit/27386ea04d3c1a5aebe3cfdd7ac48185eaa76629))
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
### Bug Fixes
* 修复cname记录查找bug ([95fb4e3](https://github.com/certd/certd/commit/95fb4e3e8be6ca13cc43b451f6141d62190ba453))
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
### Performance Improvements
* 一些手机端适配优化 ([5b8d5dd](https://github.com/certd/certd/commit/5b8d5dd97536456a9d5d1384216eac1093b2dc3d))
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
### Bug Fixes
* 修复CDN插件我爱云因更换接口导致部署失败的问题 ([5641c19](https://github.com/certd/certd/commit/5641c19502970f67af19709bddf8c781b1a25bdc))
* 修复CDN插件我爱云因更换接口导致部署失败的问题 ([0110dfd](https://github.com/certd/certd/commit/0110dfdb70b12dfb0a7a067717f3773ed75aae7c))
* 修复webhook headers value中带等号是解析错误的bug ([1fe3365](https://github.com/certd/certd/commit/1fe3365e10c464c4c60c82f424cf74fe35b883e0))
* ProxmoxUploadCert 增加强制部署证书 ([441b15e](https://github.com/certd/certd/commit/441b15ed2fe5a143a5bd5508613b3816ddbff596))
### Performance Improvements
* 历史记录查看详情,可以切换到对应的历史记录日志上去 ([082802e](https://github.com/certd/certd/commit/082802e1197156837800f814728ee0f6b300b18c))
* 流水线同一个阶段任务优化为并行执行 ([efa9c74](https://github.com/certd/certd/commit/efa9c748c5c07fc950af3db742ef9310f1ac9a4b))
* 升级midwayjs版本 ([057b0b4](https://github.com/certd/certd/commit/057b0b4565e19bb93195633f767b2942e8e40e59))
* 是否允许爬虫爬取增加ui设置选项 ([779db9d](https://github.com/certd/certd/commit/779db9da705d2dfef36fec21f52bd38af9fc5f2e))
* 通知支持钉钉群聊机器人 ([fc8bef5](https://github.com/certd/certd/commit/fc8bef5aae522d75d408d8c3aa74543269da5398))
* 易支付支持固定支付方式,适合没有收银台版本使用 ([81df96b](https://github.com/certd/certd/commit/81df96bf4542ce8d8ef4a428a4460dd554e4719a))
* 支持易盾RCDN部署 ([065713c](https://github.com/certd/certd/commit/065713cdb6953d16df08585c316c1a7a8eaec437))
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
### Performance Improvements
* 禁止爬虫爬取本网站 ([5164116](https://github.com/certd/certd/commit/5164116bde60dabac774cdf94f5317ff386e95ca))
* 上传到阿里云证书名称后缀增加毫秒时间戳 ([9f0ee21](https://github.com/certd/certd/commit/9f0ee219d02907ffe128a5cf10173397d934ccd7))
* 支持部署到阿里云FC3.0 ([bcaf54d](https://github.com/certd/certd/commit/bcaf54d4cb7bc469486aae6cdb127ae017eb3abb))
* 支持新版本LeCDN ([44d43f4](https://github.com/certd/certd/commit/44d43f45cb9094619df7494c2a64a51ba77ad116))
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package root
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
### Bug Fixes
* 适配最新版1panel密码编码方式 ([78044c0](https://github.com/certd/certd/commit/78044c062e20cdd04f08baef9fb6745bf25eddcf))
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
### Bug Fixes
* 修复腾讯云CLB多域名同证书部署报错的bug ([c3a5542](https://github.com/certd/certd/commit/c3a55429357e78f4b78c9592d3e5897db2d4d549))
* 修复新版本1panel密码需要加密无法登录的问题 ([ada0b71](https://github.com/certd/certd/commit/ada0b7106e97e551783829e4e719f76793a7123d))
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
### Bug Fixes

View File

@@ -9,14 +9,13 @@ Certd 是一个免费全自动申请和自动部署更新SSL证书的管理系
本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。
* 全自动申请证书(支持所有注册商注册的域名)
* 全自动部署更新证书(目前支持部署到主机、阿里云、腾讯云等,目前已支持40+部署插件)
* 全自动部署更新证书(目前支持部署到主机、阿里云、腾讯云等,目前已支持60+部署插件)
* 支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式
* 支持通配符域名/泛域名支持多个域名打到一个证书上支持pem、pfx、der、jks等多种证书格式
* 邮件通知、webhook通知
* 私有化部署数据保存本地授权信息加密存储镜像由Github Actions构建过程公开透明
* 支持SQLitePostgreSQL、MySQL数据库
>
> 流水线数量现已调整为无限制,欢迎大家使用
>

View File

@@ -1 +1 @@
23:39
22:02

View File

@@ -7,9 +7,10 @@ services:
restart: unless-stopped # 自动重启
volumes:
# ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】
# 只要修改冒号前面的,冒号后面的/app/data不要动
- /data/certd:/app/data
ports: # 端口映射
# ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突可以修改第一个7001为其他不冲突的端口号
# ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突可以修改第一个7001为其他不冲突的端口号第二个7001不要动
- "7001:7001"
# ↓↓↓↓ ---------------------------------------------------------- https端口可以根据实际情况是否暴露该端口
- "7002:7002"
@@ -26,6 +27,8 @@ services:
# extra_hosts:
# # ↓↓↓↓ -------------------------------------------------------- 这里可以配置自定义hosts外网域名可以指向本地局域网ip地址
# - "localdomain.com:192.168.1.3"
# # ↓↓↓↓ ------------------------------------------------ 直接使用主机的网络,如果网络问题实在找不到原因,可以尝试打开此参数
# network_mode: host
labels:
com.centurylinklabs.watchtower.enable: "true"
# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络还需要把下面networks的注释放开

View File

@@ -5,6 +5,7 @@ import lightbox from "vitepress-plugin-lightbox";
// https://vitepress.dev/reference/site-config
export default defineConfig({
title: "Certd",
titleTemplate: "开源SSL证书管理工具证书自动化申请部署让你的网站证书永不过期",
description: "Certd帮助文档,Certd是一款开源免费的全自动SSL证书管理工具证书自动化申请部署流水线自动证书申请、更新、续期通配符证书泛域名证书申请证书自动化部署到阿里云、腾讯云、主机、群晖、宝塔。",
markdown: {
config: (md) => {
@@ -12,6 +13,9 @@ export default defineConfig({
md.use(lightbox, {});
}
},
sitemap: {
hostname: 'https://certd.docmirror.cn'
},
head: [
// [
// 'meta',
@@ -25,9 +29,9 @@ export default defineConfig({
name: "keywords",
content: "证书自动申请、证书自动更新、证书自动续期、证书自动续签、证书管理工具、Certd、SSL证书自动部署、证书自动化https证书pfx证书der证书TLS证书nginx证书自动续签自动部署,SSL平台证书管理平台证书流水线"
}],
["meta", { name: "google-site-verification",content: "V5XLTSnXoT15uQotwpxJoQolUo2d5UbSL-TacsyOsC0"}],
// ["meta", { name: "google-site-verification",content: "V5XLTSnXoT15uQotwpxJoQolUo2d5UbSL-TacsyOsC0"}],
//<meta name="baidu-site-verification" content="codeva-MiWN8Y07Ua" />
["meta", {name: "baidu-site-verification",content: "codeva-MiWN8Y07Ua"}],
// ["meta", {name: "baidu-site-verification",content: "codeva-MiWN8Y07Ua"}],
["link", { rel: "icon", href: "/static/logo/logo.svg" }]
],
themeConfig: {
@@ -78,15 +82,16 @@ export default defineConfig({
]
},
{ text: "演示教程", link: "/guide/tutorial.md" },
{ text: "版本升级", link: "/guide/install/upgrade.md" },
{ text: "切换数据库", link: "/guide/install/database.md" }
{ text: "版本升级", link: "/guide/install/upgrade.md" }
]
},
{
text: "特性",
items: [
{ text: "CNAME代理校验", link: "/guide/feature/cname/index.md" },
{ text: "插件列表", link: "/guide/plugins.md" }
{ text: "插件列表", link: "/guide/plugins.md" },
{ text: "多数据库支持", link: "/guide/install/database.md" },
{ text: "开放接口", link: "/guide/open/index.md" }
]
},
{

View File

@@ -3,6 +3,151 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
### Bug Fixes
* 修复编辑通知勾选默认导致出现多个默认通知的bug ([6cd7bdd](https://github.com/certd/certd/commit/6cd7bddc37da8b0d7b9860fd9a26ddfe84c869a7))
* 修复网站监控无法设置端口的bug ([27a8a57](https://github.com/certd/certd/commit/27a8a57cf52b4bf83d628aa3049be1efaa74f29c))
* 修复lego模式无法创建流水线的bug ([687bb8a](https://github.com/certd/certd/commit/687bb8a2376d0de7b72739a174e4a9560581f866))
### Performance Improvements
* 优化通知格式 ([c3c5006](https://github.com/certd/certd/commit/c3c5006daa39c20624cb58864f2b92b230a38a7a))
* 优化scp上传 ([e51123a](https://github.com/certd/certd/commit/e51123a95131cc76d655937488caf08956a67020))
* 优化txt本地校验效率 ([fd507f2](https://github.com/certd/certd/commit/fd507f269253607e68c5c099c99e0de11636f229))
* 支持又拍云cdn ([fd0536b](https://github.com/certd/certd/commit/fd0536bd4b41f15b6b5d42e0b447f0dcbf73b8a8))
* 支持又拍云cdn ([57389a7](https://github.com/certd/certd/commit/57389a79a1a61c45d081712562f8b33c9633158e))
## [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)
### 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)
### Bug Fixes
* 修复阿里云fc获取不到列表的bug ([474b337](https://github.com/certd/certd/commit/474b3372d8ce98e6d45900bf8046bc0b3f220686))
### Performance Improvements
* 1panel支持 apikey方式授权 ([170b2af](https://github.com/certd/certd/commit/170b2afb0e3b125e4ed057f633fe895b5ac3ac22))
* 套餐支持3天7天等选项 ([0d71a8e](https://github.com/certd/certd/commit/0d71a8ee501a0e5bb69decf07e8729026e9d85bf))
* 证书仓库增加有效期显示 ([be87124](https://github.com/certd/certd/commit/be87124ada7a093f281ca29a45c86b4ea4644ead))
* 支持部署到天翼云CDN ([82a72e0](https://github.com/certd/certd/commit/82a72e0b497efa043d342ad0e33c083a2de79a05))
* 支持dns.la ([ee8af18](https://github.com/certd/certd/commit/ee8af18d0ac0af82544d6dda1e4b4c678b733041))
* cf授权支持配置http代理 ([27386ea](https://github.com/certd/certd/commit/27386ea04d3c1a5aebe3cfdd7ac48185eaa76629))
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
### Bug Fixes
* 修复cname记录查找bug ([95fb4e3](https://github.com/certd/certd/commit/95fb4e3e8be6ca13cc43b451f6141d62190ba453))
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
### Performance Improvements
* 一些手机端适配优化 ([5b8d5dd](https://github.com/certd/certd/commit/5b8d5dd97536456a9d5d1384216eac1093b2dc3d))
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
### Bug Fixes
* 修复CDN插件我爱云因更换接口导致部署失败的问题 ([5641c19](https://github.com/certd/certd/commit/5641c19502970f67af19709bddf8c781b1a25bdc))
* 修复CDN插件我爱云因更换接口导致部署失败的问题 ([0110dfd](https://github.com/certd/certd/commit/0110dfdb70b12dfb0a7a067717f3773ed75aae7c))
* 修复webhook headers value中带等号是解析错误的bug ([1fe3365](https://github.com/certd/certd/commit/1fe3365e10c464c4c60c82f424cf74fe35b883e0))
* ProxmoxUploadCert 增加强制部署证书 ([441b15e](https://github.com/certd/certd/commit/441b15ed2fe5a143a5bd5508613b3816ddbff596))
### Performance Improvements
* 历史记录查看详情,可以切换到对应的历史记录日志上去 ([082802e](https://github.com/certd/certd/commit/082802e1197156837800f814728ee0f6b300b18c))
* 流水线同一个阶段任务优化为并行执行 ([efa9c74](https://github.com/certd/certd/commit/efa9c748c5c07fc950af3db742ef9310f1ac9a4b))
* 升级midwayjs版本 ([057b0b4](https://github.com/certd/certd/commit/057b0b4565e19bb93195633f767b2942e8e40e59))
* 是否允许爬虫爬取增加ui设置选项 ([779db9d](https://github.com/certd/certd/commit/779db9da705d2dfef36fec21f52bd38af9fc5f2e))
* 通知支持钉钉群聊机器人 ([fc8bef5](https://github.com/certd/certd/commit/fc8bef5aae522d75d408d8c3aa74543269da5398))
* 易支付支持固定支付方式,适合没有收银台版本使用 ([81df96b](https://github.com/certd/certd/commit/81df96bf4542ce8d8ef4a428a4460dd554e4719a))
* 支持易盾RCDN部署 ([065713c](https://github.com/certd/certd/commit/065713cdb6953d16df08585c316c1a7a8eaec437))
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
### Performance Improvements
* 禁止爬虫爬取本网站 ([5164116](https://github.com/certd/certd/commit/5164116bde60dabac774cdf94f5317ff386e95ca))
* 上传到阿里云证书名称后缀增加毫秒时间戳 ([9f0ee21](https://github.com/certd/certd/commit/9f0ee219d02907ffe128a5cf10173397d934ccd7))
* 支持部署到阿里云FC3.0 ([bcaf54d](https://github.com/certd/certd/commit/bcaf54d4cb7bc469486aae6cdb127ae017eb3abb))
* 支持新版本LeCDN ([44d43f4](https://github.com/certd/certd/commit/44d43f45cb9094619df7494c2a64a51ba77ad116))
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package root
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
### Bug Fixes
* 适配最新版1panel密码编码方式 ([78044c0](https://github.com/certd/certd/commit/78044c062e20cdd04f08baef9fb6745bf25eddcf))
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
### Bug Fixes
* 修复腾讯云CLB多域名同证书部署报错的bug ([c3a5542](https://github.com/certd/certd/commit/c3a55429357e78f4b78c9592d3e5897db2d4d549))
* 修复新版本1panel密码需要加密无法登录的问题 ([ada0b71](https://github.com/certd/certd/commit/ada0b7106e97e551783829e4e719f76793a7123d))
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
### Bug Fixes
* 当前置任务被删除时进行校验 ([c89686a](https://github.com/certd/certd/commit/c89686a2fda251484930f0ae715417b618c21690))
* 修复cloudflare删除解析记录报错的bug ([00c2da4](https://github.com/certd/certd/commit/00c2da444f84adb89f3f1226d03294d7c6e3e4f1))
### Performance Improvements
* 上传自定义证书 ([75a38d9](https://github.com/certd/certd/commit/75a38d95f305b4271d9106babe7cffc1c89ae8f3))
## [1.30.1](https://github.com/certd/certd/compare/v1.30.0...v1.30.1) (2025-01-20)
### Bug Fixes

View File

@@ -28,7 +28,7 @@ packages:
### 安装依赖和初始化:
```shell
# 安装pnpm如果提示npm命令不存在就需要先安装nodejs
npm install -g pnpm@8.15.7 --registry=https://registry.npmmirror.com
npm install -g pnpm--registry=https://registry.npmmirror.com
# 使用国内镜像源,如果有代理,就不需要
pnpm config set registry https://registry.npmmirror.com
@@ -36,19 +36,19 @@ pnpm config set registry https://registry.npmmirror.com
pnpm install
# 初始化构建
npm run init
pnpm init
```
### 启动 server:
```shell
cd packages/ui/certd-server
npm run dev
pnpm dev
```
### 启动 client:
```shell
cd packages/ui/certd-client
npm run dev
pnpm dev
# 会自动打开浏览器,确认正常运行

View File

@@ -10,7 +10,7 @@ Certd 是一款开源、免费、全自动申请和部署更新SSL证书的工
本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。
* 全自动申请证书(支持所有注册商注册的域名)
* 全自动部署更新证书(目前支持部署到主机、部署到阿里云、腾讯云等,目前已支持30+部署插件)
* 全自动部署更新证书(目前支持部署到主机、部署到阿里云、腾讯云等,目前已支持60+部署插件)
* 支持通配符域名/泛域名,支持多个域名打到一个证书上
* 邮件通知
* 私有化部署,保障数据安全

View File

@@ -20,7 +20,7 @@ https://1panel.cn/docs/installation/online_installation/
![](./images/2.png)
> 默认使用sqlite数据库数据保存在`/data/certd`目录下,您可以手动备份该目录
> certd还支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../../database/)
> certd还支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database)
3. 访问测试

View File

@@ -29,7 +29,7 @@
点击确定,等待启动完成
![](./images/2.png)
> certd默认使用sqlite数据库另外支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../../database/)
> certd默认使用sqlite数据库另外支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database)
## 二、访问应用

View File

@@ -42,7 +42,7 @@ docker compose up -d
> 如果提示 没有docker compose命令,请安装docker-compose
> https://docs.docker.com/compose/install/linux/
> certd默认使用sqlite数据库另外还支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../../database/)
> certd默认使用sqlite数据库另外还支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database)
### 3. 访问测试

View File

@@ -1,5 +1,5 @@
# 源码部署
不推荐
如果没有`git``nodejs`基础,则不推荐
## 一、源码安装
### 环境要求
@@ -7,7 +7,7 @@
### 源码启动
```shell
# 克隆代码
git clone https://github.com/certd/certd
git clone https://github.com/certd/certd --depth=1
# git checkout v1.x.x # 当v2主干分支代码无法正常启动时可以尝试此命令1.x.x换成最新版本号
cd certd
# 启动服务

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

21
docs/guide/open/index.md Normal file
View File

@@ -0,0 +1,21 @@
# 开放接口
被动方式对第三方提供证书, 支持根据域名或证书id获取证书。
## 获取keyId和KeySecret
![](./images/1.png)
## 接口文档
https://apifox.com/apidoc/shared-2e76f8c4-7c58-413b-a32d-a1316529af44/254949529e0
## Token生成方法
header中传入x-certd-token即可调用开放接口
1、首先从OpenKey页面生成keyIdkeySecret
2、准备一个content( json字符串) content={"keyId":keyId, t:时间戳秒数, encrypt:false, signType:"md5"} `// encrypt返回结果是否加密`
3、将content加上keySecret进行签名 sign = md5(content + keySecret)
4、然后将content和sign分别base64后用.号连接: x-certd-token = base64(content) +"."+base64(sign)
## SDK
待开发

View File

@@ -6,6 +6,10 @@
## 2. 使用示例
```js
// 如果需要引用第三方库必须使用import语法
// const thirdSdk = await import("third-sdk-name")
const certPem = ctx.self.cert.crt
const certKey = ctx.self.cert.key

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

@@ -24,7 +24,7 @@ features:
- title: 全自动申请证书
details: 支持所有注册商注册的域名
- title: 全自动部署证书
details: 支持部署到主机、阿里云、腾讯云等,目前已支持30+部署插件
details: 支持部署到主机、阿里云、腾讯云等,目前已支持60+部署插件
- title: 多域名、泛域名打到一个证书上
details: 支持通配符域名/泛域名,支持多个域名打到一个证书上
- title: 多证书格式支持

View File

@@ -9,5 +9,5 @@
}
},
"npmClient": "pnpm",
"version": "1.30.2"
"version": "1.31.9"
}

View File

@@ -9,7 +9,7 @@
"@lerna-lite/run": "^3.9.3",
"@lerna-lite/version": "^3.9.3",
"medium-zoom": "^1.1.0",
"vitepress": "^1.4.1",
"vitepress": "^2.0.0-alpha.4",
"vitepress-plugin-lightbox": "^1.0.2"
},
"scripts": {
@@ -41,5 +41,8 @@
},
"workspaces": [
"packages/**"
]
],
"pnpm": {
"neverBuiltDependencies": []
}
}

View File

@@ -0,0 +1,7 @@
{
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,66 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/publishlab/node-acme-client/compare/v1.31.8...v1.31.9) (2025-03-28)
### Performance Improvements
* dns支持火山引擎 ([99ff879](https://github.com/publishlab/node-acme-client/commit/99ff879d93658c29ea493a4bde7e9e3f85996d64))
## [1.31.8](https://github.com/publishlab/node-acme-client/compare/v1.31.7...v1.31.8) (2025-03-26)
### Performance Improvements
* 优化txt本地校验效率 ([fd507f2](https://github.com/publishlab/node-acme-client/commit/fd507f269253607e68c5c099c99e0de11636f229))
## [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)
**Note:** Version bump only for package @certd/acme-client
## [1.31.3](https://github.com/publishlab/node-acme-client/compare/v1.31.2...v1.31.3) (2025-03-13)
**Note:** Version bump only for package @certd/acme-client
## [1.31.2](https://github.com/publishlab/node-acme-client/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/acme-client
## [1.31.1](https://github.com/publishlab/node-acme-client/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/acme-client
# [1.31.0](https://github.com/publishlab/node-acme-client/compare/v1.30.6...v1.31.0) (2025-03-10)
**Note:** Version bump only for package @certd/acme-client
## [1.30.6](https://github.com/publishlab/node-acme-client/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/acme-client
## [1.30.5](https://github.com/publishlab/node-acme-client/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/acme-client
## [1.30.4](https://github.com/publishlab/node-acme-client/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/acme-client
## [1.30.3](https://github.com/publishlab/node-acme-client/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/acme-client
## [1.30.2](https://github.com/publishlab/node-acme-client/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/acme-client

View File

@@ -3,7 +3,7 @@
"description": "Simple and unopinionated ACME client",
"private": false,
"author": "nmorsman",
"version": "1.30.2",
"version": "1.31.9",
"type": "module",
"module": "scr/index.js",
"main": "src/index.js",
@@ -18,7 +18,7 @@
"types"
],
"dependencies": {
"@certd/basic": "^1.30.2",
"@certd/basic": "^1.31.9",
"@peculiar/x509": "^1.11.0",
"asn1js": "^3.0.5",
"axios": "^1.7.2",
@@ -30,6 +30,8 @@
},
"devDependencies": {
"@types/node": "^20.14.10",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"chai": "^4.4.1",
"chai-as-promised": "^7.1.2",
"eslint": "^8.57.0",
@@ -65,5 +67,5 @@
"bugs": {
"url": "https://github.com/publishlab/node-acme-client/issues"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

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

View File

@@ -500,7 +500,7 @@ class AcmeClient {
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);
}
@@ -568,14 +568,14 @@ class AcmeClient {
const resp = await this.api.apiRequest(item.url, null, [200]);
/* Verify status */
log(`Item has status: ${resp.data.status}`);
log(`Item has status(挑战状态): ${resp.data.status}`);
if (invalidStates.includes(resp.data.status)) {
abort();
throw new Error(util.formatResponseError(resp));
}
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)) {
return resp.data;
@@ -584,7 +584,7 @@ class AcmeClient {
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);
}

View File

@@ -60,8 +60,9 @@ async function retryPromise(fn, attempts, backoff) {
throw e;
}
log(`Promise rejected: ${e.message}`);
const duration = backoff.duration();
log(`Promise rejected attempt #${backoff.attempts}, retrying in ${duration}ms: ${e.message}`);
log(`Promise rejected attempt #${backoff.attempts}, ${duration}ms 后重试: ${e.message}`);
await new Promise((resolve) => { setTimeout(resolve, duration); });
return retryPromise(fn, attempts, backoff);
@@ -241,7 +242,7 @@ async function resolveDomainBySoaRecord(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();
try {
@@ -249,13 +250,14 @@ async function getAuthoritativeDnsResolver(recordName) {
const domain = await resolveDomainBySoaRecord(recordName);
/* 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);
log(`域名权威NS服务器${nsRecords}`);
const nsAddrArray = await Promise.all(nsRecords.map(async (r) => dns.resolve4(r)));
const nsAddresses = [].concat(...nsAddrArray).filter((a) => a);
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 */
@@ -263,12 +265,12 @@ async function getAuthoritativeDnsResolver(recordName) {
resolver.setServers(nsAddresses);
}
catch (e) {
log(`Authoritative NS lookup error: ${e.message}`);
log(`Authoritative NS lookup error获取权威NS服务器地址失败: ${e.message}`);
}
/* Return resolver */
const addresses = resolver.getServers();
log(`DNS resolver addresses: ${addresses.join(', ')}`);
log(`DNS resolver addresses域名的权威NS服务器地址: ${addresses.join(', ')}`);
return resolver;
}

View File

@@ -82,21 +82,40 @@ async function walkDnsChallengeRecord(recordName, resolver = dns) {
}
export async function walkTxtRecord(recordName) {
const txtRecords = []
try {
/* Default DNS resolver first */
log('Attempting to resolve TXT with default DNS resolver first');
log('从本地DNS服务器获取TXT解析记录');
const res = await walkDnsChallengeRecord(recordName);
if (res && res.length > 0) {
return res;
for (const item of res) {
txtRecords.push(item)
}
}
throw new Error('No TXT records found');
} catch (e) {
log(`本地获取TXT解析记录失败:${e.message}`)
}
catch (e) {
try{
/* Authoritative DNS resolver */
log(`Error using default resolver, attempting to resolve TXT with authoritative NS: ${e.message}`);
log(`从域名权威服务器获取TXT解析记录`);
const authoritativeResolver = await util.getAuthoritativeDnsResolver(recordName);
return await walkDnsChallengeRecord(recordName, authoritativeResolver);
const res = await walkDnsChallengeRecord(recordName, authoritativeResolver);
if (res && res.length > 0) {
for (const item of res) {
txtRecords.push(item)
}
}
}catch (e) {
log(`权威服务器获取TXT解析记录失败:${e.message}`)
}
if (txtRecords.length === 0) {
throw new Error(`没有找到TXT解析记录${recordName}`);
}
return txtRecords;
}
/**
@@ -113,14 +132,16 @@ export async function walkTxtRecord(recordName) {
async function verifyDnsChallenge(authz, challenge, keyAuthorization, prefix = '_acme-challenge.') {
const recordName = `${prefix}${authz.identifier.value}`;
log(`Resolving DNS TXT from record: ${recordName}`);
const recordValues = await walkTxtRecord(recordName);
log(`DNS query finished successfully, found ${recordValues.length} TXT records`);
log(`本地校验TXT记录: ${recordName}`);
let recordValues = await walkTxtRecord(recordName);
//去重
recordValues = [...new Set(recordValues)];
log(`DNS查询成功, 找到 ${recordValues.length} 条TXT记录`);
if (!recordValues.length || !recordValues.includes(keyAuthorization)) {
throw new Error(`Authorization not found in DNS TXT record: ${recordName}need:${keyAuthorization},found:${recordValues}`);
throw new Error(`没有找到需要的DNS TXT记录: ${recordName}期望:${keyAuthorization},结果:${recordValues}`);
}
log(`Key authorization match for ${challenge.type}/${recordName}, ACME challenge verified`);
log(`关键授权匹配成功(${challenge.type}/${recordName},校验成功, ACME challenge verified`);
return true;
}

View File

@@ -16,7 +16,7 @@
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-explicit-any": "off",
// "no-unused-expressions": "off",
"max-len": [0, 160, 2, { "ignoreUrls": true }]
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-unused-vars": "off"
}
}

View File

@@ -0,0 +1,7 @@
{
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,71 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
**Note:** Version bump only for package @certd/basic
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
### Performance Improvements
* 支持又拍云cdn ([fd0536b](https://github.com/certd/certd/commit/fd0536bd4b41f15b6b5d42e0b447f0dcbf73b8a8))
## [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)
**Note:** Version bump only for package @certd/basic
## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)
### Performance Improvements
* 支持部署到天翼云CDN ([82a72e0](https://github.com/certd/certd/commit/82a72e0b497efa043d342ad0e33c083a2de79a05))
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/basic
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/basic
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
### Performance Improvements
* 流水线同一个阶段任务优化为并行执行 ([efa9c74](https://github.com/certd/certd/commit/efa9c748c5c07fc950af3db742ef9310f1ac9a4b))
* 支持易盾RCDN部署 ([065713c](https://github.com/certd/certd/commit/065713cdb6953d16df08585c316c1a7a8eaec437))
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
### Performance Improvements
* 支持新版本LeCDN ([44d43f4](https://github.com/certd/certd/commit/44d43f45cb9094619df7494c2a64a51ba77ad116))
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/basic
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/basic
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/basic
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/basic

View File

@@ -1 +1 @@
16:07
23:47

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/basic",
"private": false,
"version": "1.30.2",
"version": "1.31.9",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -33,8 +33,8 @@
"@types/lodash-es": "^4.17.12",
"@types/mocha": "^10.0.1",
"@types/node-forge": "^1.3.2",
"@typescript-eslint/eslint-plugin": "^5.59.7",
"@typescript-eslint/parser": "^5.59.7",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"chai": "4.3.10",
"eslint": "^8.41.0",
"eslint-config-prettier": "^8.8.0",
@@ -44,5 +44,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -32,6 +32,8 @@ import { nanoid } from 'nanoid';
import * as id from './util.id.js';
import { locker } from './util.lock.js';
import { mitter } from './util.mitter.js';
import * as request from './util.request.js';
export const utils = {
sleep,
http,
@@ -52,4 +54,5 @@ export const utils = {
locker,
mitter,
amount: amountUtils,
request,
};

View File

@@ -1,12 +1,22 @@
import crypto from 'crypto';
import crypto, { BinaryToTextEncoding } from 'crypto';
function md5(data: string) {
return crypto.createHash('md5').update(data).digest('hex');
function md5(data: string, digest: BinaryToTextEncoding = 'hex') {
return crypto.createHash('md5').update(data).digest(digest);
}
function sha256(data: string) {
return crypto.createHash('sha256').update(data).digest('hex');
function sha256(data: string, digest: BinaryToTextEncoding = 'hex') {
return crypto.createHash('sha256').update(data).digest(digest);
}
function hmacSha256(data: string, digest: BinaryToTextEncoding = 'base64') {
return crypto.createHmac('sha256', data).update(Buffer.alloc(0)).digest(digest);
}
function base64(data: string) {
return Buffer.from(data).toString('base64');
}
export const hashUtils = {
md5,
sha256,
base64,
hmacSha256,
};

View File

@@ -1,4 +1,4 @@
import { customAlphabet } from 'nanoid';
import { customAlphabet } from "nanoid";
export const randomNumber = customAlphabet('1234567890', 4);
export const simpleNanoId = customAlphabet('1234567890abcdefghijklmopqrstuvwxyz', 12);
export const randomNumber = customAlphabet("1234567890", 4);
export const simpleNanoId = customAlphabet("1234567890abcdefghijklmopqrstuvwxyz", 12);

View File

@@ -310,3 +310,14 @@ export async function download(req: { http: HttpClient; config: HttpRequestConfi
});
});
}
export function getCookie(response: any, name: string) {
const cookies = response.headers['set-cookie'];
//根据name 返回对应的cookie
const found = cookies.find((cookie: any) => cookie.includes(name));
if (!found) {
return null;
}
const cookie = found.split(';')[0];
return cookie.substring(cookie.indexOf('=') + 1);
}

View File

@@ -16,7 +16,7 @@
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-explicit-any": "off",
// "no-unused-expressions": "off",
"max-len": [0, 160, 2, { "ignoreUrls": true }]
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-unused-vars": "off"
}
}

View File

@@ -26,3 +26,4 @@ dist-ssr
test/user.secret.*
test/**/*.js
src/**/*.spec.ts
.test.mjs

View File

@@ -1,3 +1,7 @@
{
"printWidth": 160
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,76 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
### Performance Improvements
* dns支持火山引擎 ([99ff879](https://github.com/certd/certd/commit/99ff879d93658c29ea493a4bde7e9e3f85996d64))
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
**Note:** Version bump only for package @certd/pipeline
## [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)
### Bug Fixes
* 修复站点监控通知通过webhook发送失败的bug ([9be1ecc](https://github.com/certd/certd/commit/9be1ecc8aab3ea23dd0dc2dab3688f4edb90ef2c))
### Performance Improvements
* 流水线增加上传证书快捷方式 ([425bba6](https://github.com/certd/certd/commit/425bba67c539b734e2a85a83a4f9ecc9b2434fb4))
* 支持飞书通知 ([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)
**Note:** Version bump only for package @certd/pipeline
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/pipeline
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/pipeline
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
### Performance Improvements
* 流水线同一个阶段任务优化为并行执行 ([efa9c74](https://github.com/certd/certd/commit/efa9c748c5c07fc950af3db742ef9310f1ac9a4b))
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
### Performance Improvements
* 上传到阿里云证书名称后缀增加毫秒时间戳 ([9f0ee21](https://github.com/certd/certd/commit/9f0ee219d02907ffe128a5cf10173397d934ccd7))
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/pipeline
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/pipeline
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/pipeline
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/pipeline

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/pipeline",
"private": false,
"version": "1.30.2",
"version": "1.31.9",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -16,8 +16,8 @@
"test": "mocha --loader=ts-node/esm"
},
"dependencies": {
"@certd/basic": "^1.30.2",
"@certd/plus-core": "^1.30.2",
"@certd/basic": "^1.31.9",
"@certd/plus-core": "^1.31.9",
"dayjs": "^1.11.7",
"lodash-es": "^4.17.21",
"reflect-metadata": "^0.1.13"
@@ -31,8 +31,8 @@
"@types/chai": "^4.3.10",
"@types/lodash-es": "^4.17.12",
"@types/mocha": "^10.0.1",
"@typescript-eslint/eslint-plugin": "^5.59.7",
"@typescript-eslint/parser": "^5.59.7",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"chai": "4.3.10",
"eslint": "^8.41.0",
"eslint-config-prettier": "^8.8.0",
@@ -43,5 +43,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -1,5 +1,15 @@
import type { ResultError } from "../dt/index.js";
export class CancelError extends Error {
constructor(message: string) {
super(message);
}
}
export class RunnableError extends Error {
errors: ResultError[];
constructor(message: string, errors: ResultError[]) {
super(message);
this.errors = errors;
}
}

View File

@@ -1,4 +1,4 @@
import { ConcurrencyStrategy, NotificationWhen, Pipeline, ResultType, Runnable, RunStrategy, Stage, Step, Task } from "../dt/index.js";
import { ConcurrencyStrategy, NotificationWhen, Pipeline, ResultType, Runnable, RunStrategy, Stage, Step, Task, ResultError } from "../dt/index.js";
import { RunHistory, RunnableCollection } from "./run-history.js";
import { AbstractTaskPlugin, PluginDefine, pluginRegistry, TaskInstanceContext, UserInfo } from "../plugin/index.js";
import { ContextFactory, IContext } from "./context.js";
@@ -7,11 +7,12 @@ import { createAxiosService, hashUtils, HttpRequestConfig, ILogger, logger, util
import { IAccessService } from "../access/index.js";
import { RegistryItem } from "../registry/index.js";
import { Decorator } from "../decorator/index.js";
import { ICnameProxyService, IEmailService, IPluginConfigService, IUrlService } from "../service/index.js";
import { ICnameProxyService, IEmailService, IPluginConfigService, IServiceGetter, IUrlService } from "../service/index.js";
import { FileStore } from "./file-store.js";
import { cloneDeep, forEach, merge } from "lodash-es";
import { INotificationService } from "../notification/index.js";
import { taskEmitterCreate } from "../service/emit.js";
import { RunnableError } from "./exceptions.js";
export type SysInfo = {
//系统标题
@@ -32,6 +33,7 @@ export type ExecutorOptions = {
user: UserInfo;
baseURL?: string;
sysInfo?: SysInfo;
serviceGetter: IServiceGetter;
};
export class Executor {
@@ -192,6 +194,8 @@ export class Executor {
}
let resList: ResultType[] = [];
const errorList: ResultError[] = [];
let errorMessage = "";
if (stage.concurrency === ConcurrencyStrategy.Parallel) {
//并行
const pList = [];
@@ -200,10 +204,25 @@ export class Executor {
}
resList = await Promise.all(pList);
} else {
//串行
//串行且报错继续
for (let i = 0; i < runnerList.length; i++) {
const runner = runnerList[i];
resList[i] = await runner();
try {
resList[i] = await runner();
} catch (e: any) {
const t = stage.tasks[i];
this.logger.error(`任务 ${t.title} 执行异常:`, e.message);
resList[i] = ResultType.error;
errorList.push({
e,
returnType: ResultType.error,
runnable: t,
});
errorMessage += `任务${t.title}执行失败,错误详情:${e.message}`;
}
}
if (errorList.length > 0) {
throw new RunnableError(errorMessage, errorList);
}
}
return this.compositionResultType(resList);
@@ -347,6 +366,7 @@ export class Executor {
step,
pipeline: this.pipeline,
}),
serviceGetter: this.options.serviceGetter,
};
instance.setCtx(taskCtx);
@@ -402,7 +422,16 @@ export class Executor {
content = `流水线ID:${this.pipeline.id}运行ID:${this.runtime.id}`;
} else if (when === "error") {
subject = `执行失败,${this.pipeline.title}${this.pipeline.id}`;
content = `流水线ID:${this.pipeline.id}运行ID:${this.runtime.id}\n\n${this.currentStatusMap?.currentStep?.title} 执行失败\n\n错误详情:${error.message}`;
if (error instanceof RunnableError) {
const runnableError = error as RunnableError;
content = `流水线ID:${this.pipeline.id}运行ID:${this.runtime.id}\n\n`;
for (const re of runnableError.errors) {
content += ` - ${re.runnable.title} 执行失败\n 错误详情:${re.e.message}\n\n`;
}
} else {
content = `流水线ID:${this.pipeline.id}运行ID:${this.runtime.id}\n\n${this.currentStatusMap?.currentStep?.title} 执行失败\n\n错误详情:${error.message}`;
}
} else {
return;
}

View File

@@ -11,11 +11,13 @@ function attachProperty(target: any, propertyKey: string | symbol) {
}
function getClassProperties(target: any) {
//获取父类
//获取父类, 向上追溯三层
const parent = Object.getPrototypeOf(target);
const pParent = Object.getPrototypeOf(parent);
const pParentMap = propertyMap[pParent] || {};
const parentMap = propertyMap[parent] || {};
const current = propertyMap[target] || {};
return _.merge({}, parentMap, current);
return _.merge({}, pParentMap, parentMap, current);
}
function target(target: any, propertyKey?: string | symbol) {

View File

@@ -107,6 +107,12 @@ export type Log = {
text: string;
};
export type ResultError = {
e: any;
returnType: ResultType;
runnable: Runnable;
};
export enum ResultType {
start = "start",
success = "success",

View File

@@ -119,10 +119,12 @@ export abstract class BaseNotification implements INotification {
}
async onTestRequest() {
await this.doSend({
return await this.doSend({
userId: 0,
title: "【Certd】测试通知【*.foo.com】标题长度测试、测试、测试",
content: "测试通知,*.foo.com",
content: `测试通知,*.foo.com
换行测试
`,
pipeline: {
id: 1,
title: "证书申请成功【测试流水线】",

View File

@@ -2,7 +2,7 @@ import { Registrable } from "../registry/index.js";
import { FileItem, FormItemProps, Pipeline, Runnable, Step } from "../dt/index.js";
import { FileStore } from "../core/file-store.js";
import { IAccessService } from "../access/index.js";
import { ICnameProxyService, IEmailService, IUrlService } from "../service/index.js";
import { ICnameProxyService, IEmailService, IServiceGetter, IUrlService } from "../service/index.js";
import { CancelError, IContext, RunHistory, RunnableCollection } from "../core/index.js";
import { HttpRequestConfig, ILogger, logger, utils } from "@certd/basic";
import { HttpClient } from "@certd/basic";
@@ -55,6 +55,14 @@ export type PluginDefine = Registrable & {
[key: string]: any;
};
shortcut?: {
[key: string]: {
title: string;
icon: string;
action: string;
form: any;
};
};
needPlus?: boolean;
};
@@ -114,6 +122,9 @@ export type TaskInstanceContext = {
user: UserInfo;
emitter: TaskEmitter;
//service 容器
serviceGetter?: IServiceGetter;
};
export abstract class AbstractTaskPlugin implements ITaskPlugin {
@@ -193,7 +204,7 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
if (name == null) {
name = "certd";
}
return name + "_" + dayjs().format("YYYYMMDDHHmmss");
return name + "_" + dayjs().format("YYYYMMDDHHmmssSSS");
}
async onRequest(req: PluginRequestHandleReq<any>) {
@@ -221,7 +232,7 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
getStepFromPipeline(stepId: string) {
let found: any = null;
RunnableCollection.each(this.ctx.pipeline.stages, (step) => {
RunnableCollection.each(this.ctx.pipeline.stages, step => {
if (step.id === stepId) {
found = step;
return;

View File

@@ -20,6 +20,7 @@ export const pluginGroups = {
aliyun: new PluginGroup("aliyun", "阿里云", 2),
huawei: new PluginGroup("huawei", "华为云", 3),
tencent: new PluginGroup("tencent", "腾讯云", 4),
volcengine: new PluginGroup("volcengine", "火山引擎", 4),
qiniu: new PluginGroup("qiniu", "七牛云", 5),
aws: new PluginGroup("aws", "亚马逊云", 6),
host: new PluginGroup("host", "主机", 7),

View File

@@ -3,3 +3,6 @@ export * from "./cname.js";
export * from "./config.js";
export * from "./url.js";
export * from "./emit.js";
export type IServiceGetter = {
get: (name: string) => Promise<any>;
};

View File

@@ -17,7 +17,6 @@
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-empty-function": "off",
// "no-unused-expressions": "off",
"max-len": [0, 160, 2, { "ignoreUrls": true }]
"@typescript-eslint/no-unused-vars": "off"
}
}

View File

@@ -1,3 +1,7 @@
{
"printWidth": 160
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,64 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
### Bug Fixes
* 修复华为云dns接口请求出错的bug ([caa15b4](https://github.com/certd/certd/commit/caa15b47355363cbb8847f415ff12363cd53eeda))
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
**Note:** Version bump only for package @certd/lib-huawei
## [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)
**Note:** Version bump only for package @certd/lib-huawei
## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)
**Note:** Version bump only for package @certd/lib-huawei
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/lib-huawei
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/lib-huawei
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
**Note:** Version bump only for package @certd/lib-huawei
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/lib-huawei
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/lib-huawei
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/lib-huawei
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/lib-huawei
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/lib-huawei

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-huawei",
"private": false,
"version": "1.30.2",
"version": "1.31.9",
"main": "./dist/bundle.js",
"module": "./dist/bundle.js",
"types": "./dist/d/index.d.ts",
@@ -18,8 +18,10 @@
"rollup": "^3.7.4"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"prettier": "^2.8.8",
"tslib": "^2.8.1"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -2,8 +2,10 @@ import { Signer, SigHttpRequest } from "./signer.js";
import axios from "axios";
export class HuaweiYunClient {
access;
logger;
constructor(access, logger) {
this.access = access;
this.logger = logger
}
async request(options) {
const sig = new Signer(this.access.accessKeyId, this.access.accessKeySecret);

View File

@@ -17,7 +17,6 @@
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-empty-function": "off",
// "no-unused-expressions": "off",
"max-len": [0, 160, 2, { "ignoreUrls": true }]
"@typescript-eslint/no-unused-vars": "off"
}
}

View File

@@ -1,7 +1,7 @@
{
"printWidth": 160,
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,62 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
**Note:** Version bump only for package @certd/lib-iframe
## [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)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/lib-iframe
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
**Note:** Version bump only for package @certd/lib-iframe
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/lib-iframe
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/lib-iframe
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/lib-iframe
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/lib-iframe
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/lib-iframe

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-iframe",
"private": false,
"version": "1.30.2",
"version": "1.31.9",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -20,8 +20,8 @@
},
"devDependencies": {
"@types/chai": "^4.3.3",
"@typescript-eslint/eslint-plugin": "^5.38.1",
"@typescript-eslint/parser": "^5.38.1",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
@@ -30,5 +30,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -1,7 +1,7 @@
{
"printWidth": 160,
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,62 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
**Note:** Version bump only for package @certd/lib-k8s
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
**Note:** Version bump only for package @certd/lib-k8s
## [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)
**Note:** Version bump only for package @certd/lib-k8s
## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)
**Note:** Version bump only for package @certd/lib-k8s
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/lib-k8s
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/lib-k8s
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
**Note:** Version bump only for package @certd/lib-k8s
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/lib-k8s
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/lib-k8s
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/lib-k8s
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/lib-k8s
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/lib-k8s

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-k8s",
"private": false,
"version": "1.30.2",
"version": "1.31.9",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -16,13 +16,13 @@
"preview": "vite preview"
},
"dependencies": {
"@certd/basic": "^1.30.2",
"@certd/basic": "^1.31.9",
"@kubernetes/client-node": "0.21.0"
},
"devDependencies": {
"@types/chai": "^4.3.3",
"@typescript-eslint/eslint-plugin": "^5.38.1",
"@typescript-eslint/parser": "^5.38.1",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
@@ -31,5 +31,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -1,7 +1,7 @@
{
"printWidth": 160,
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,65 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
**Note:** Version bump only for package @certd/lib-server
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
**Note:** Version bump only for package @certd/lib-server
## [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)
**Note:** Version bump only for package @certd/lib-server
## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)
**Note:** Version bump only for package @certd/lib-server
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/lib-server
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/lib-server
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
### Performance Improvements
* 升级midwayjs版本 ([057b0b4](https://github.com/certd/certd/commit/057b0b4565e19bb93195633f767b2942e8e40e59))
* 是否允许爬虫爬取增加ui设置选项 ([779db9d](https://github.com/certd/certd/commit/779db9da705d2dfef36fec21f52bd38af9fc5f2e))
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/lib-server
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/lib-server
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/lib-server
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/lib-server
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/lib-server

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/lib-server",
"version": "1.30.2",
"version": "1.31.9",
"description": "midway with flyway, sql upgrade way ",
"private": false,
"type": "module",
@@ -27,18 +27,18 @@
],
"license": "AGPL",
"dependencies": {
"@certd/acme-client": "^1.30.2",
"@certd/basic": "^1.30.2",
"@certd/pipeline": "^1.30.2",
"@certd/plus-core": "^1.30.2",
"@certd/acme-client": "^1.31.9",
"@certd/basic": "^1.31.9",
"@certd/pipeline": "^1.31.9",
"@certd/plus-core": "^1.31.9",
"@midwayjs/cache": "~3.14.0",
"@midwayjs/core": "~3.17.1",
"@midwayjs/i18n": "~3.17.3",
"@midwayjs/info": "~3.17.3",
"@midwayjs/koa": "~3.17.1",
"@midwayjs/core": "~3.20.3",
"@midwayjs/i18n": "~3.20.3",
"@midwayjs/info": "~3.20.3",
"@midwayjs/koa": "~3.20.3",
"@midwayjs/logger": "~3.4.2",
"@midwayjs/typeorm": "~3.17.1",
"@midwayjs/upload": "^3.17.3",
"@midwayjs/typeorm": "~3.20.3",
"@midwayjs/upload": "^3.20.3",
"better-sqlite3": "^11.1.2",
"cross-env": "^7.0.3",
"dayjs": "^1.11.7",
@@ -50,8 +50,8 @@
"devDependencies": {
"@types/chai": "^4.3.3",
"@types/node": "^18",
"@typescript-eslint/eslint-plugin": "^5.38.1",
"@typescript-eslint/parser": "^5.38.1",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
@@ -61,5 +61,5 @@
"typeorm": "^0.3.11",
"typescript": "^5.4.2"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -30,7 +30,7 @@ export abstract class BaseService<T> {
async transaction(callback: (entityManager: EntityManager) => Promise<any>) {
const dataSource = this.dataSourceManager.getDataSource('default');
await dataSource.transaction(callback as any);
return await dataSource.transaction(callback as any);
}
/**

View File

@@ -25,6 +25,7 @@ export class SysPublicSettings extends BaseSettings {
limitUserPipelineCount = 0;
managerOtherUserPipeline = false;
icpNo?: string;
robots?: boolean = true;
}
export class SysPrivateSettings extends BaseSettings {

View File

@@ -1,7 +1,7 @@
{
"printWidth": 160,
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,64 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
**Note:** Version bump only for package @certd/midway-flyway-js
## [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)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/midway-flyway-js
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
### Performance Improvements
* 升级midwayjs版本 ([057b0b4](https://github.com/certd/certd/commit/057b0b4565e19bb93195633f767b2942e8e40e59))
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/midway-flyway-js
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/midway-flyway-js

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/midway-flyway-js",
"version": "1.30.2",
"version": "1.31.9",
"description": "midway with flyway, sql upgrade way ",
"private": false,
"type": "module",
@@ -25,16 +25,16 @@
],
"license": "MIT",
"dependencies": {
"@midwayjs/core": "~3.17.1",
"@midwayjs/core": "~3.20.3",
"@midwayjs/logger": "~3.4.2",
"@midwayjs/typeorm": "~3.17.1",
"@midwayjs/typeorm": "~3.20.3",
"better-sqlite3": "^11.1.2"
},
"devDependencies": {
"@types/chai": "^4.3.3",
"@types/node": "^18",
"@typescript-eslint/eslint-plugin": "^5.38.1",
"@typescript-eslint/parser": "^5.38.1",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
@@ -46,5 +46,5 @@
"typeorm": "^0.3.11",
"typescript": "^5.4.2"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -17,7 +17,6 @@
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-empty-function": "off",
// "no-unused-expressions": "off",
"max-len": [0, 160, 2, { "ignoreUrls": true }]
"@typescript-eslint/no-unused-vars": "off"
}
}

View File

@@ -1,3 +1,7 @@
{
"printWidth": 160
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,76 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
**Note:** Version bump only for package @certd/plugin-cert
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
### Bug Fixes
* 修复lego模式无法创建流水线的bug ([687bb8a](https://github.com/certd/certd/commit/687bb8a2376d0de7b72739a174e4a9560581f866))
## [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)
### Bug Fixes
* 修复dns.la域名申请失败的bug ([1de8eee](https://github.com/certd/certd/commit/1de8eee6ea8307f3c11626af75303d3cc104bb95))
### Performance Improvements
* 流水线增加上传证书快捷方式 ([425bba6](https://github.com/certd/certd/commit/425bba67c539b734e2a85a83a4f9ecc9b2434fb4))
* 手动上传证书部署流水线 ([fbb66f3](https://github.com/certd/certd/commit/fbb66f3c4389489aa8a43b194d82bc8cf391607b))
* 支持手动上传证书并部署 ([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)
### Performance Improvements
* 1panel支持 apikey方式授权 ([170b2af](https://github.com/certd/certd/commit/170b2afb0e3b125e4ed057f633fe895b5ac3ac22))
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
### Bug Fixes
* 修复cname记录查找bug ([95fb4e3](https://github.com/certd/certd/commit/95fb4e3e8be6ca13cc43b451f6141d62190ba453))
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/plugin-cert
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
**Note:** Version bump only for package @certd/plugin-cert
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/plugin-cert
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/plugin-cert
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/plugin-cert
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/plugin-cert
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/plugin-cert

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/plugin-cert",
"private": false,
"version": "1.30.2",
"version": "1.31.9",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -15,10 +15,10 @@
"preview": "vite preview"
},
"dependencies": {
"@certd/acme-client": "^1.30.2",
"@certd/basic": "^1.30.2",
"@certd/pipeline": "^1.30.2",
"@certd/plugin-lib": "^1.30.2",
"@certd/acme-client": "^1.31.9",
"@certd/basic": "^1.31.9",
"@certd/pipeline": "^1.31.9",
"@certd/plugin-lib": "^1.31.9",
"@google-cloud/publicca": "^1.3.0",
"dayjs": "^1.11.7",
"jszip": "^3.10.1",
@@ -30,8 +30,8 @@
"@types/chai": "^4.3.3",
"@types/mocha": "^10.0.0",
"@types/psl": "^1.1.3",
"@typescript-eslint/eslint-plugin": "^5.38.1",
"@typescript-eslint/parser": "^5.38.1",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"chai": "^4.3.6",
"eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0",
@@ -41,5 +41,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -1,4 +1,5 @@
import { CreateRecordOptions, DnsProviderContext, DnsProviderDefine, IDnsProvider, RemoveRecordOptions } from "./api.js";
//@ts-ignore
import psl from "psl";
import { dnsProviderRegistry } from "./registry.js";
import { Decorator } from "@certd/pipeline";

View File

@@ -60,6 +60,7 @@ type AcmeServiceOptions = {
reverseProxy?: string;
privateKeyType?: PrivateKeyType;
signal?: AbortSignal;
maxCheckRetryCount?: number;
};
export class AcmeService {
@@ -144,7 +145,7 @@ export class AcmeService {
accountKey: conf.key,
accountUrl: conf.accountUrl,
externalAccountBinding: this.eab,
backoffAttempts: 15,
backoffAttempts: this.options.maxCheckRetryCount || 20,
backoffMin: 5000,
backoffMax: 10000,
urlMapping,
@@ -282,15 +283,7 @@ export class AcmeService {
* @returns {Promise}
*/
async challengeRemoveFn(
authz: any,
challenge: any,
keyAuthorization: string,
recordReq: any,
recordRes: any,
dnsProvider?: IDnsProvider,
httpUploader?: HttpChallengeUploader
) {
async challengeRemoveFn(authz: any, challenge: any, keyAuthorization: string, recordReq: any, recordRes: any, dnsProvider?: IDnsProvider, httpUploader?: HttpChallengeUploader) {
this.logger.info("执行清理");
/* http-01 */
@@ -387,14 +380,7 @@ export class AcmeService {
): Promise<{ recordReq?: any; recordRes?: any; dnsProvider?: any; challenge: Challenge; keyAuthorization: string }> => {
return await this.challengeCreateFn(authz, keyAuthorizationGetter, providers);
},
challengeRemoveFn: async (
authz: acme.Authorization,
challenge: Challenge,
keyAuthorization: string,
recordReq: any,
recordRes: any,
dnsProvider: IDnsProvider
): Promise<any> => {
challengeRemoveFn: async (authz: acme.Authorization, challenge: Challenge, keyAuthorization: string, recordReq: any, recordRes: any, dnsProvider: IDnsProvider): Promise<any> => {
return await this.challengeRemoveFn(authz, challenge, keyAuthorization, recordReq, recordRes, dnsProvider, httpUploader);
},
signal: this.options.signal,

View File

@@ -0,0 +1,188 @@
import { AbstractTaskPlugin, IContext, Step, TaskInput, TaskOutput } from "@certd/pipeline";
import dayjs from "dayjs";
import type { CertInfo } from "./acme.js";
import { CertReader } from "./cert-reader.js";
import JSZip from "jszip";
import { CertConverter } from "./convert.js";
export const EVENT_CERT_APPLY_SUCCESS = "CertApply.success";
export abstract class CertApplyBaseConvertPlugin extends AbstractTaskPlugin {
@TaskInput({
title: "域名",
component: {
name: "a-select",
vModel: "value",
mode: "tags",
open: false,
placeholder: "foo.com / *.foo.com / *.bar.com",
tokenSeparators: [",", " ", "", "、", "|"],
},
rules: [{ type: "domains" }],
required: true,
col: {
span: 24,
},
order: -999,
helper:
"1、支持多个域名打到一个证书上例如 foo.com*.foo.com*.bar.com\n" +
"2、子域名被通配符包含的不要填写例如www.foo.com已经被*.foo.com包含不要填写www.foo.com\n" +
"3、泛域名只能通配*号那一级(*.foo.com的证书不能用于xxx.yyy.foo.com、不能用于foo.com\n" +
"4、输入一个空格之后再输入下一个",
})
domains!: string[];
@TaskInput({
title: "证书加密密码",
component: {
name: "input-password",
vModel: "value",
},
required: false,
order: 100,
helper: "转换成PFX、jks格式证书是否需要加密\njks必须设置密码不传则默认123456\npfx不传则为空密码",
})
pfxPassword!: string;
@TaskInput({
title: "PFX证书转换参数",
value: "-macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES",
component: {
name: "a-auto-complete",
vModel: "value",
options: [
{ value: "", label: "兼容 Windows Server 最新" },
{ value: "-macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES", label: "兼容 Windows Server 2016" },
{ value: "-nomac -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES", label: "兼容 Windows Server 2008" },
],
},
required: false,
order: 100,
helper: "兼容Windows Server各个版本",
})
pfxArgs = "-macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES";
userContext!: IContext;
lastStatus!: Step;
@TaskOutput({
title: "域名证书",
})
cert?: CertInfo;
async onInstance() {
this.userContext = this.ctx.userContext;
this.lastStatus = this.ctx.lastStatus as Step;
await this.onInit();
}
abstract onInit(): Promise<void>;
//必须output之后执行
async emitCertApplySuccess() {
const emitter = this.ctx.emitter;
const value = {
cert: this.cert,
file: this._result.files[0].path,
};
await emitter.emit(EVENT_CERT_APPLY_SUCCESS, value);
}
async output(certReader: CertReader, isNew: boolean) {
const cert: CertInfo = certReader.toCertInfo();
this.cert = cert;
this._result.pipelineVars.certExpiresTime = dayjs(certReader.detail.notAfter).valueOf();
if (!this._result.pipelinePrivateVars) {
this._result.pipelinePrivateVars = {};
}
this._result.pipelinePrivateVars.cert = cert;
if (isNew) {
try {
const converter = new CertConverter({ logger: this.logger });
const res = await converter.convert({
cert,
pfxPassword: this.pfxPassword,
pfxArgs: this.pfxArgs,
});
if (cert.pfx == null && res.pfx) {
cert.pfx = res.pfx;
}
if (cert.der == null && res.der) {
cert.der = res.der;
}
if (cert.jks == null && res.jks) {
cert.jks = res.jks;
}
this.logger.info("转换证书格式成功");
} catch (e) {
this.logger.error("转换证书格式失败", e);
}
}
if (isNew) {
const zipFileName = certReader.buildCertFileName("zip", certReader.detail.notBefore);
await this.zipCert(cert, zipFileName);
} else {
this.extendsFiles();
}
}
async zipCert(cert: CertInfo, filename: string) {
const zip = new JSZip();
zip.file("证书.pem", cert.crt);
zip.file("私钥.pem", cert.key);
zip.file("中间证书.pem", cert.ic);
zip.file("cert.crt", cert.crt);
zip.file("cert.key", cert.key);
zip.file("intermediate.crt", cert.ic);
zip.file("origin.crt", cert.oc);
zip.file("one.pem", cert.one);
if (cert.pfx) {
zip.file("cert.pfx", Buffer.from(cert.pfx, "base64"));
}
if (cert.der) {
zip.file("cert.der", Buffer.from(cert.der, "base64"));
}
if (cert.jks) {
zip.file("cert.jks", Buffer.from(cert.jks, "base64"));
}
zip.file(
"说明.txt",
`证书文件说明
cert.crt证书文件包含证书链pem格式
cert.key私钥文件pem格式
intermediate.crt中间证书文件pem格式
origin.crt原始证书文件不含证书链pem格式
one.pem 证书和私钥简单合并成一个文件pem格式crt正文+key正文
cert.pfxpfx格式证书文件iis服务器使用
cert.derder格式证书文件
cert.jksjks格式证书文件java服务器使用
`
);
const content = await zip.generateAsync({ type: "nodebuffer" });
this.saveFile(filename, content);
this.logger.info(`已保存文件:${filename}`);
}
formatCert(pem: string) {
pem = pem.replace(/\r/g, "");
pem = pem.replace(/\n\n/g, "\n");
pem = pem.replace(/\n$/g, "");
return pem;
}
formatCerts(cert: { crt: string; key: string; csr: string }) {
const newCert: CertInfo = {
crt: this.formatCert(cert.crt),
key: this.formatCert(cert.key),
csr: this.formatCert(cert.csr),
};
return newCert;
}
}

View File

@@ -1,42 +1,10 @@
import { AbstractTaskPlugin, IContext, NotificationBody, Step, TaskEmitter, TaskInput, TaskOutput } from "@certd/pipeline";
import { NotificationBody, Step, TaskInput } from "@certd/pipeline";
import dayjs from "dayjs";
import type { CertInfo } from "./acme.js";
import { CertReader } from "./cert-reader.js";
import JSZip from "jszip";
import { CertConverter } from "./convert.js";
import { pick } from "lodash-es";
import { CertApplyBaseConvertPlugin } from "./base-convert.js";
export const EVENT_CERT_APPLY_SUCCESS = "CertApply.success";
export async function emitCertApplySuccess(emitter: TaskEmitter, cert: CertReader) {
await emitter.emit(EVENT_CERT_APPLY_SUCCESS, cert);
}
export abstract class CertApplyBasePlugin extends AbstractTaskPlugin {
@TaskInput({
title: "域名",
component: {
name: "a-select",
vModel: "value",
mode: "tags",
open: false,
placeholder: "foo.com / *.foo.com / *.bar.com",
tokenSeparators: [",", " ", "", "、", "|"],
},
rules: [{ type: "domains" }],
required: true,
col: {
span: 24,
},
order: -999,
helper:
"1、支持多个域名打到一个证书上例如 foo.com*.foo.com*.bar.com\n" +
"2、子域名被通配符包含的不要填写例如www.foo.com已经被*.foo.com包含不要填写www.foo.com\n" +
"3、泛域名只能通配*号那一级(*.foo.com的证书不能用于xxx.yyy.foo.com、不能用于foo.com\n" +
"4、输入一个空格之后再输入下一个",
})
domains!: string[];
export abstract class CertApplyBasePlugin extends CertApplyBaseConvertPlugin {
@TaskInput({
title: "邮箱",
component: {
@@ -50,36 +18,6 @@ export abstract class CertApplyBasePlugin extends AbstractTaskPlugin {
})
email!: string;
@TaskInput({
title: "证书密码",
component: {
name: "input-password",
vModel: "value",
},
required: false,
order: 100,
helper: "PFX、jks格式证书是否加密\njks必须设置密码不传则默认123456",
})
pfxPassword!: string;
@TaskInput({
title: "PFX证书转换参数",
value: "-macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES",
component: {
name: "a-auto-complete",
vModel: "value",
options: [
{ value: "", label: "兼容 Windows Server 最新" },
{ value: "-macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES", label: "兼容 Windows Server 2016" },
{ value: "-nomac -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES", label: "兼容 Windows Server 2008" },
],
},
required: false,
order: 100,
helper: "兼容Windows Server各个版本",
})
pfxArgs = "-macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES";
@TaskInput({
title: "更新天数",
value: 35,
@@ -111,14 +49,6 @@ export abstract class CertApplyBasePlugin extends AbstractTaskPlugin {
// })
csrInfo!: string;
userContext!: IContext;
lastStatus!: Step;
@TaskOutput({
title: "域名证书",
})
cert?: CertInfo;
async onInstance() {
this.userContext = this.ctx.userContext;
this.lastStatus = this.ctx.lastStatus as Step;
@@ -139,7 +69,7 @@ export abstract class CertApplyBasePlugin extends AbstractTaskPlugin {
if (cert != null) {
await this.output(cert, true);
await emitCertApplySuccess(this.ctx.emitter, cert);
await this.emitCertApplySuccess();
//清空后续任务的状态,让后续任务能够重新执行
this.clearLastStatus();
@@ -151,89 +81,6 @@ export abstract class CertApplyBasePlugin extends AbstractTaskPlugin {
}
}
async output(certReader: CertReader, isNew: boolean) {
const cert: CertInfo = certReader.toCertInfo();
this.cert = cert;
this._result.pipelineVars.certExpiresTime = dayjs(certReader.detail.notAfter).valueOf();
if (!this._result.pipelinePrivateVars) {
this._result.pipelinePrivateVars = {};
}
this._result.pipelinePrivateVars.cert = cert;
if (isNew) {
try {
const converter = new CertConverter({ logger: this.logger });
const res = await converter.convert({
cert,
pfxPassword: this.pfxPassword,
pfxArgs: this.pfxArgs,
});
if (cert.pfx == null && res.pfx) {
cert.pfx = res.pfx;
}
if (cert.der == null && res.der) {
cert.der = res.der;
}
if (cert.jks == null && res.jks) {
cert.jks = res.jks;
}
this.logger.info("转换证书格式成功");
} catch (e) {
this.logger.error("转换证书格式失败", e);
}
}
if (isNew) {
const zipFileName = certReader.buildCertFileName("zip", certReader.detail.notBefore);
await this.zipCert(cert, zipFileName);
} else {
this.extendsFiles();
}
}
async zipCert(cert: CertInfo, filename: string) {
const zip = new JSZip();
zip.file("证书.pem", cert.crt);
zip.file("私钥.pem", cert.key);
zip.file("中间证书.pem", cert.ic);
zip.file("cert.crt", cert.crt);
zip.file("cert.key", cert.key);
zip.file("intermediate.crt", cert.ic);
zip.file("origin.crt", cert.oc);
zip.file("one.pem", cert.one);
if (cert.pfx) {
zip.file("cert.pfx", Buffer.from(cert.pfx, "base64"));
}
if (cert.der) {
zip.file("cert.der", Buffer.from(cert.der, "base64"));
}
if (cert.jks) {
zip.file("cert.jks", Buffer.from(cert.jks, "base64"));
}
zip.file(
"说明.txt",
`证书文件说明
cert.crt证书文件包含证书链pem格式
cert.key私钥文件pem格式
intermediate.crt中间证书文件pem格式
origin.crt原始证书文件不含证书链pem格式
one.pem 证书和私钥简单合并成一个文件pem格式crt正文+key正文
cert.pfxpfx格式证书文件iis服务器使用
cert.derder格式证书文件
cert.jksjks格式证书文件java服务器使用
`
);
const content = await zip.generateAsync({ type: "nodebuffer" });
this.saveFile(filename, content);
this.logger.info(`已保存文件:${filename}`);
}
/**
* 是否更新证书
*/
@@ -279,22 +126,6 @@ cert.jksjks格式证书文件java服务器使用
return null;
}
formatCert(pem: string) {
pem = pem.replace(/\r/g, "");
pem = pem.replace(/\n\n/g, "\n");
pem = pem.replace(/\n$/g, "");
return pem;
}
formatCerts(cert: { crt: string; key: string; csr: string }) {
const newCert: CertInfo = {
crt: this.formatCert(cert.crt),
key: this.formatCert(cert.key),
csr: this.formatCert(cert.csr),
};
return newCert;
}
async readLastCert(): Promise<CertReader | undefined> {
const cert = this.lastStatus?.status?.output?.cert;
if (cert == null) {

View File

@@ -23,6 +23,7 @@ export class CertReader {
cert: CertInfo;
detail: CertificateInfo;
//毫秒时间戳
expires: number;
constructor(certInfo: CertInfo) {
this.cert = certInfo;
@@ -39,9 +40,13 @@ export class CertReader {
this.cert.one = this.cert.crt + "\n" + this.cert.key;
}
const { detail, expires } = this.getCrtDetail(this.cert.crt);
this.detail = detail;
this.expires = expires.getTime();
try {
const { detail, expires } = this.getCrtDetail(this.cert.crt);
this.detail = detail;
this.expires = expires.getTime();
} catch (e) {
throw new Error("证书解析失败:" + e.message);
}
}
getIc() {

View File

@@ -0,0 +1,158 @@
import { IsTaskPlugin, pluginGroups, RunStrategy, Step, TaskInput, TaskOutput } from "@certd/pipeline";
import type { CertInfo } from "../acme.js";
import { CertReader } from "../cert-reader.js";
import { CertApplyBaseConvertPlugin } from "../base-convert.js";
import dayjs from "dayjs";
export { CertReader };
export type { CertInfo };
@IsTaskPlugin({
name: "CertApplyUpload",
icon: "ph:certificate",
title: "证书手动上传",
group: pluginGroups.cert.key,
desc: "在证书仓库手动上传后触发部署证书",
default: {
strategy: {
runStrategy: RunStrategy.AlwaysRun,
},
},
shortcut: {
certUpdate: {
title: "更新证书",
icon: "ion:upload",
action: "onCertUpdate",
form: {
columns: {
crt: {
title: "证书",
type: "text",
form: {
component: {
name: "pem-input",
vModel: "modelValue",
textarea: {
rows: 4,
placeholder: "-----BEGIN CERTIFICATE-----\n...\n...\n-----END CERTIFICATE-----",
},
},
rules: [{ required: true, message: "此项必填" }],
col: { span: 24 },
},
},
key: {
title: "私钥",
type: "text",
form: {
component: {
name: "pem-input",
vModel: "modelValue",
textarea: {
rows: 4,
placeholder: "-----BEGIN PRIVATE KEY-----\n...\n...\n-----END PRIVATE KEY----- ",
},
},
rules: [{ required: true, message: "此项必填" }],
col: { span: 24 },
},
},
},
},
},
},
})
export class CertApplyUploadPlugin extends CertApplyBaseConvertPlugin {
@TaskInput({
title: "手动上传证书",
component: {
name: "cert-info-updater",
vModel: "modelValue",
},
helper: "手动上传证书",
order: -9999,
required: true,
mergeScript: `
return {
component:{
on:{
updated(scope){
scope.form.input.domains = scope.$event?.domains
}
}
}
}
`,
})
uploadCert!: CertInfo;
@TaskOutput({
title: "证书MD5",
})
certMd5?: string;
async onInstance() {
this.accessService = this.ctx.accessService;
this.logger = this.ctx.logger;
this.userContext = this.ctx.userContext;
this.lastStatus = this.ctx.lastStatus as Step;
}
async onInit(): Promise<void> {}
async getCertFromStore() {
const certReader = new CertReader(this.uploadCert);
if (!certReader.expires && certReader.expires < new Date().getTime()) {
throw new Error("证书已过期,停止部署,请重新上传证书");
}
return certReader;
}
async execute(): Promise<string | void> {
const certReader = await this.getCertFromStore();
const crtMd5 = this.ctx.utils.hash.md5(certReader.cert.crt);
const leftDays = dayjs(certReader.expires).diff(dayjs(), "day");
this.logger.info(`证书过期时间${dayjs(certReader.expires).format("YYYY-MM-DD HH:mm:ss")},剩余${leftDays}`);
if (!this.ctx.inputChanged) {
this.logger.info("输入参数无变化");
const lastCrtMd5 = this.lastStatus?.status?.output?.certMd5;
this.logger.info("证书MD5", crtMd5);
this.logger.info("上次证书MD5", lastCrtMd5);
if (lastCrtMd5 === crtMd5) {
this.logger.info("证书无变化,跳过");
//输出证书MD5
this.certMd5 = crtMd5;
await this.output(certReader, false);
return "skip";
}
this.logger.info("证书有变化,重新部署");
} else {
this.logger.info("输入参数有变化,重新部署");
}
this.clearLastStatus();
//输出证书MD5
this.certMd5 = crtMd5;
await this.output(certReader, true);
//必须output之后执行
await this.emitCertApplySuccess();
return;
}
async onCertUpdate(data: any) {
const certReader = new CertReader(data);
return {
input: {
uploadCert: {
crt: data.crt,
key: data.key,
},
domains: certReader.getAllDomains(),
},
};
}
}
new CertApplyUploadPlugin();

View File

@@ -66,7 +66,7 @@ export class CertApplyPlugin extends CertApplyBasePlugin {
],
},
required: true,
helper: `DNS直接验证域名是在阿里云、腾讯云、华为云、Cloudflare、NameSilo、西数注册的选它
helper: `DNS直接验证域名是在阿里云、腾讯云、华为云、Cloudflare、NameSilo、西数、dns.la注册的,选它;
CNAME代理验证支持任何注册商注册的域名但第一次需要手动添加CNAME记录
HTTP文件验证不支持泛域名需要配置网站文件上传`,
})
@@ -203,8 +203,7 @@ HTTP文件验证不支持泛域名需要配置网站文件上传`,
},
maybeNeed: true,
required: false,
helper:
"google服务账号授权与EAB授权选填其中一个[服务账号授权获取方法](https://certd.docmirror.cn/guide/use/google/)\n服务账号授权需要配置代理或者服务器本身在海外",
helper: "google服务账号授权与EAB授权选填其中一个[服务账号授权获取方法](https://certd.docmirror.cn/guide/use/google/)\n服务账号授权需要配置代理或者服务器本身在海外",
mergeScript: `
return {
show: ctx.compute(({form})=>{
@@ -268,6 +267,17 @@ HTTP文件验证不支持泛域名需要配置网站文件上传`,
})
skipLocalVerify = false;
@TaskInput({
title: "检查解析重试次数",
value: 20,
component: {
name: "a-input-number",
vModel: "value",
},
helper: "检查域名验证解析记录重试次数,如果你的域名服务商解析生效速度慢,可以适当增加此值",
})
maxCheckRetryCount = 20;
acme!: AcmeService;
eab!: EabAccess;
@@ -314,6 +324,7 @@ HTTP文件验证不支持泛域名需要配置网站文件上传`,
reverseProxy: this.reverseProxy,
privateKeyType: this.privateKeyType,
signal: this.ctx.signal,
maxCheckRetryCount: this.maxCheckRetryCount,
// cnameProxyService: this.ctx.cnameProxyService,
// dnsProviderCreator: this.createDnsProvider.bind(this),
});

View File

@@ -179,11 +179,7 @@ export class CertApplyLegoPlugin extends CertApplyBasePlugin {
if (this.acmeServer) {
serverArgs = ` --server ${this.acmeServer}`;
}
const cmds = [
`${legoPath} -a --email "${this.email}" --dns ${this.dnsType} ${keyType} ${domainArgs} ${serverArgs} ${eabArgs} ${savePathArgs} ${
this.customArgs || ""
} run`,
];
const cmds = [`${legoPath} -a --email "${this.email}" --dns ${this.dnsType} ${keyType} ${domainArgs} ${serverArgs} ${eabArgs} ${savePathArgs} ${this.customArgs || ""} run`];
await this.ctx.utils.sp.spawn({
cmd: cmds,

View File

@@ -1,2 +1,6 @@
export { EVENT_CERT_APPLY_SUCCESS } from "./cert-plugin/base-convert.js";
export * from "./cert-plugin/index.js";
export * from "./cert-plugin/lego/index.js";
export * from "./cert-plugin/custom/index.js";
export const CertApplyPluginNames = ["CertApply", "CertApplyLego", "CertApplyUpload"];

View File

@@ -17,7 +17,6 @@
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-empty-function": "off",
// "no-unused-expressions": "off",
"max-len": [0, 160, 2, { "ignoreUrls": true }]
"@typescript-eslint/no-unused-vars": "off"
}
}

View File

@@ -1,3 +1,7 @@
{
"printWidth": 160
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,70 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
**Note:** Version bump only for package @certd/plugin-lib
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
### Performance Improvements
* 优化scp上传 ([e51123a](https://github.com/certd/certd/commit/e51123a95131cc76d655937488caf08956a67020))
## [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)
### Performance Improvements
* 流水线增加上传证书快捷方式 ([425bba6](https://github.com/certd/certd/commit/425bba67c539b734e2a85a83a4f9ecc9b2434fb4))
## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)
### Performance Improvements
* 支持部署到天翼云CDN ([82a72e0](https://github.com/certd/certd/commit/82a72e0b497efa043d342ad0e33c083a2de79a05))
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/plugin-lib
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
**Note:** Version bump only for package @certd/plugin-lib
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
**Note:** Version bump only for package @certd/plugin-lib
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/plugin-lib
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/plugin-lib
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/plugin-lib
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/plugin-lib
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
**Note:** Version bump only for package @certd/plugin-lib

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/plugin-lib",
"private": false,
"version": "1.30.2",
"version": "1.31.9",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -16,8 +16,8 @@
},
"dependencies": {
"@alicloud/pop-core": "^1.7.10",
"@certd/basic": "^1.30.2",
"@certd/pipeline": "^1.30.2",
"@certd/basic": "^1.31.9",
"@certd/pipeline": "^1.31.9",
"@kubernetes/client-node": "0.21.0",
"ali-oss": "^6.21.0",
"basic-ftp": "^5.0.5",
@@ -37,8 +37,8 @@
"@types/chai": "^4.3.3",
"@types/mocha": "^10.0.0",
"@types/psl": "^1.1.3",
"@typescript-eslint/eslint-plugin": "^5.38.1",
"@typescript-eslint/parser": "^5.38.1",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"chai": "^4.3.6",
"eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0",
@@ -48,5 +48,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "089825d3602440188392f7018d0eb9038617c1d6"
"gitHead": "2acaa66635f91b8c169b7e68e08907f233c67c6e"
}

View File

@@ -0,0 +1,31 @@
import { IsAccess, AccessInput, BaseAccess } from "@certd/pipeline";
@IsAccess({
name: "ctyun",
title: "天翼云授权",
desc: "",
icon: "ant-design:aliyun-outlined",
})
export class CtyunAccess extends BaseAccess {
@AccessInput({
title: "accessKeyId",
component: {
placeholder: "accessKeyId",
},
helper: "[前往创建天翼云AccessKey](https://iam.ctyun.cn/myAccessKey)",
required: true,
})
accessKeyId = "";
@AccessInput({
title: "securityKey",
component: {
placeholder: "securityKey",
},
required: true,
encrypt: true,
helper: "",
})
securityKey = "";
}
new CtyunAccess();

View File

@@ -0,0 +1 @@
export * from "./access/ctyun-access.js";

View File

@@ -4,3 +4,4 @@ export * from "./common/index.js";
export * from "./ftp/index.js";
export * from "./tencent/index.js";
export * from "./qiniu/index.js";
export * from "./ctyun/index.js";

View File

@@ -7,6 +7,8 @@ import { SshAccess } from "./ssh-access.js";
import stripAnsi from "strip-ansi";
import { SocksClient } from "socks";
import { SocksProxy, SocksProxyType } from "socks/typings/common/constants.js";
import fs from "fs";
export type TransportItem = { localPath: string; remotePath: string };
export class AsyncSsh2Client {
@@ -61,7 +63,17 @@ export class AsyncSsh2Client {
this.conn = conn;
resolve(this.conn);
})
.connect(this.connConf);
.connect({
...this.connConf,
algorithms: {
kex: [
"ecdh-sha2-nistp256",
"diffie-hellman-group1-sha1",
"diffie-hellman-group14-sha1", // 示例:添加服务器支持的旧算法
"diffie-hellman-group-exchange-sha256",
],
},
});
} catch (e) {
reject(e);
}
@@ -255,15 +267,15 @@ export class SshClient {
}
* @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;
await this._call({
connectConf,
callable: async (conn: AsyncSsh2Client) => {
const sftp = await conn.getSftp();
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);
let mkdirCmd = `mkdir -p ${filePath} `;
if (conn.windows) {
@@ -281,13 +293,65 @@ export class SshClient {
}
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 });
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
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)
.on("error", e => {
this.logger.info("read stream error", e);
reject(e);
})
.pipe(stream)
.on("finish", async () => {
this.logger.info(`上传完成:${localPath} => ${remotePath}`);
resolve(true);
})
.on("error", reject);
}
);
} catch (e) {
reject(e);
}
});
}
async removeFiles(opts: { connectConf: SshAccess; files: string[] }) {
const { connectConf, files } = opts;
await this._call({

View File

@@ -9,4 +9,4 @@ VITE_APP_COPYRIGHT_URL=https://certd.handsfree.work
VITE_APP_LOGO=/static/images/logo/logo.svg
VITE_APP_LOGIN_LOGO=/static/images/logo/rect-black.svg
VITE_APP_PROJECT_PATH=https://github.com/certd/certd
VITE_APP_NAMESPACE=fs

View File

@@ -3,34 +3,34 @@ module.exports = {
env: {
browser: true,
node: true,
es6: true
es6: true,
},
parser: "vue-eslint-parser",
parser: 'vue-eslint-parser',
parserOptions: {
parser: "@typescript-eslint/parser",
parser: '@typescript-eslint/parser',
ecmaVersion: 2020,
sourceType: "module",
jsxPragma: "React",
sourceType: 'module',
jsxPragma: 'React',
ecmaFeatures: {
jsx: true,
tsx: true
}
tsx: true,
},
},
extends: ["plugin:vue/vue3-recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", "prettier"],
extends: ['plugin:vue/vue3-recommended', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', 'prettier'],
rules: {
//"max-len": [0, 200, 2, { ignoreUrls: true }],
"@typescript-eslint/no-unused-vars": "off",
"no-unused-vars": "off",
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/explicit-module-boundary-types": "off"
'@typescript-eslint/no-unused-vars': 'off',
'no-unused-vars': 'off',
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/ban-types': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
// "@typescript-eslint/no-unused-vars": [
// "error",
// {
@@ -69,5 +69,5 @@ module.exports = {
// math: "always",
// },
// ],
}
},
};

View File

@@ -1,5 +1,7 @@
{
"trailingComma": "none",
"printWidth": 160
"printWidth": 220,
"bracketSpacing": true,
"singleQuote": false,
"trailingComma": "es5",
"arrowParens": "avoid"
}

View File

@@ -3,6 +3,110 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)
### Bug Fixes
* 修复网站证书监控https port设置无效的bug ([cc8da0c](https://github.com/certd/certd/commit/cc8da0cf130f0c469371b59ac5bd04567f4a4414))
### Performance Improvements
* dns支持火山引擎 ([99ff879](https://github.com/certd/certd/commit/99ff879d93658c29ea493a4bde7e9e3f85996d64))
## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)
### Bug Fixes
* 修复网站监控无法设置端口的bug ([27a8a57](https://github.com/certd/certd/commit/27a8a57cf52b4bf83d628aa3049be1efaa74f29c))
* 修复lego模式无法创建流水线的bug ([687bb8a](https://github.com/certd/certd/commit/687bb8a2376d0de7b72739a174e4a9560581f866))
### Performance Improvements
* 优化通知格式 ([c3c5006](https://github.com/certd/certd/commit/c3c5006daa39c20624cb58864f2b92b230a38a7a))
* 支持又拍云cdn ([fd0536b](https://github.com/certd/certd/commit/fd0536bd4b41f15b6b5d42e0b447f0dcbf73b8a8))
## [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)
### Bug Fixes
* 修复站点监控通知通过webhook发送失败的bug ([9be1ecc](https://github.com/certd/certd/commit/9be1ecc8aab3ea23dd0dc2dab3688f4edb90ef2c))
### 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))
* 站点证书监控支持模糊查询 ([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)
### Performance Improvements
* 套餐支持3天7天等选项 ([0d71a8e](https://github.com/certd/certd/commit/0d71a8ee501a0e5bb69decf07e8729026e9d85bf))
* 证书仓库增加有效期显示 ([be87124](https://github.com/certd/certd/commit/be87124ada7a093f281ca29a45c86b4ea4644ead))
* 支持部署到天翼云CDN ([82a72e0](https://github.com/certd/certd/commit/82a72e0b497efa043d342ad0e33c083a2de79a05))
## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)
**Note:** Version bump only for package @certd/ui-client
## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)
### Performance Improvements
* 一些手机端适配优化 ([5b8d5dd](https://github.com/certd/certd/commit/5b8d5dd97536456a9d5d1384216eac1093b2dc3d))
# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)
### Performance Improvements
* 历史记录查看详情,可以切换到对应的历史记录日志上去 ([082802e](https://github.com/certd/certd/commit/082802e1197156837800f814728ee0f6b300b18c))
* 是否允许爬虫爬取增加ui设置选项 ([779db9d](https://github.com/certd/certd/commit/779db9da705d2dfef36fec21f52bd38af9fc5f2e))
* 易支付支持固定支付方式,适合没有收银台版本使用 ([81df96b](https://github.com/certd/certd/commit/81df96bf4542ce8d8ef4a428a4460dd554e4719a))
* 支持易盾RCDN部署 ([065713c](https://github.com/certd/certd/commit/065713cdb6953d16df08585c316c1a7a8eaec437))
## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)
**Note:** Version bump only for package @certd/ui-client
## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)
**Note:** Version bump only for package @certd/ui-client
## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)
**Note:** Version bump only for package @certd/ui-client
## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)
**Note:** Version bump only for package @certd/ui-client
## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)
### Bug Fixes

View File

@@ -13,6 +13,11 @@ https://github.com/fast-crud/fs-server-js
* [fs-admin-naive](https://github.com/fast-crud/fs-admin-naive-ui) naive版示例
* [fs-in-vben-starter](https://github.com/fast-crud/fs-in-vben-starter) vben示例
# build
```sh
set NODE_OPTIONS=--max-old-space-size=32768 && npm run build
```
# 感谢
### 依赖

View File

@@ -0,0 +1,254 @@
import path from "node:path";
import { addDynamicIconSelectors } from "@iconify/tailwind";
import { getPackagesSync } from "@manypkg/get-packages";
import typographyPlugin from "@tailwindcss/typography";
import animate from "tailwindcss-animate";
import { enterAnimationPlugin } from "./plugins/entry.mjs";
// import defaultTheme from 'tailwindcss/defaultTheme';
const { packages } = getPackagesSync(process.cwd());
const tailwindPackages = [];
packages.forEach((pkg) => {
// apps目录下和 @vben-core/tailwind-ui 包需要使用到 tailwindcss ui
// if (fs.existsSync(path.join(pkg.dir, 'tailwind.config.mjs'))) {
tailwindPackages.push(pkg.dir);
// }
});
const shadcnUiColors = {
accent: {
DEFAULT: "hsl(var(--accent))",
foreground: "hsl(var(--accent-foreground))",
hover: "hsl(var(--accent-hover))",
lighter: "has(val(--accent-lighter))"
},
background: {
deep: "hsl(var(--background-deep))",
DEFAULT: "hsl(var(--background))"
},
border: {
DEFAULT: "hsl(var(--border))"
},
card: {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))"
},
destructive: {
...createColorsPalette("destructive"),
DEFAULT: "hsl(var(--destructive))"
},
foreground: {
DEFAULT: "hsl(var(--foreground))"
},
input: {
background: "hsl(var(--input-background))",
DEFAULT: "hsl(var(--input))"
},
muted: {
DEFAULT: "hsl(var(--muted))",
foreground: "hsl(var(--muted-foreground))"
},
popover: {
DEFAULT: "hsl(var(--popover))",
foreground: "hsl(var(--popover-foreground))"
},
primary: {
...createColorsPalette("primary"),
DEFAULT: "hsl(var(--primary))"
},
ring: "hsl(var(--ring))",
secondary: {
DEFAULT: "hsl(var(--secondary))",
desc: "hsl(var(--secondary-desc))",
foreground: "hsl(var(--secondary-foreground))"
}
};
const customColors = {
green: {
...createColorsPalette("green"),
foreground: "hsl(var(--success-foreground))"
},
header: {
DEFAULT: "hsl(var(--header))"
},
heavy: {
DEFAULT: "hsl(var(--heavy))",
foreground: "hsl(var(--heavy-foreground))"
},
main: {
DEFAULT: "hsl(var(--main))"
},
overlay: {
content: "hsl(var(--overlay-content))",
DEFAULT: "hsl(var(--overlay))"
},
red: {
...createColorsPalette("red"),
foreground: "hsl(var(--destructive-foreground))"
},
sidebar: {
deep: "hsl(var(--sidebar-deep))",
DEFAULT: "hsl(var(--sidebar))"
},
success: {
...createColorsPalette("success"),
DEFAULT: "hsl(var(--success))"
},
warning: {
...createColorsPalette("warning"),
DEFAULT: "hsl(var(--warning))"
},
yellow: {
...createColorsPalette("yellow"),
foreground: "hsl(var(--warning-foreground))"
}
};
export default {
content: ["./index.html", ...tailwindPackages.map((item) => path.join(item, "src/**/*.{vue,js,ts,jsx,tsx,svelte,astro,html}"))],
darkMode: "selector",
plugins: [animate, typographyPlugin, addDynamicIconSelectors(), enterAnimationPlugin],
prefix: "",
theme: {
container: {
center: true,
padding: "2rem",
screens: {
"2xl": "1400px"
}
},
extend: {
animation: {
"accordion-down": "accordion-down 0.2s ease-out",
"accordion-up": "accordion-up 0.2s ease-out",
"collapsible-down": "collapsible-down 0.2s ease-in-out",
"collapsible-up": "collapsible-up 0.2s ease-in-out",
float: "float 5s linear 0ms infinite"
},
animationDuration: {
2000: "2000ms",
3000: "3000ms"
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
xl: "calc(var(--radius) + 4px)"
},
boxShadow: {
float: `0 6px 16px 0 rgb(0 0 0 / 8%),
0 3px 6px -4px rgb(0 0 0 / 12%),
0 9px 28px 8px rgb(0 0 0 / 5%)`
},
colors: {
...customColors,
...shadcnUiColors
},
fontFamily: {
sans: [
"var(--font-family)"
// ...defaultTheme.fontFamily.sans
]
},
keyframes: {
"accordion-down": {
from: { height: "0" },
to: { height: "var(--radix-accordion-content-height)" }
},
"accordion-up": {
from: { height: "var(--radix-accordion-content-height)" },
to: { height: "0" }
},
"collapsible-down": {
from: { height: "0" },
to: { height: "var(--radix-collapsible-content-height)" }
},
"collapsible-up": {
from: { height: "var(--radix-collapsible-content-height)" },
to: { height: "0" }
},
float: {
"0%": { transform: "translateY(0)" },
"50%": { transform: "translateY(-20px)" },
"100%": { transform: "translateY(0)" }
}
},
zIndex: {
100: "100",
1000: "1000"
}
}
},
safelist: ["dark"]
};
function createColorsPalette(name) {
// backgroundLightest: '#EFF6FF', // Tailwind CSS 默认的 `blue-50`
// backgroundLighter: '#DBEAFE', // Tailwind CSS 默认的 `blue-100`
// backgroundLight: '#BFDBFE', // Tailwind CSS 默认的 `blue-200`
// borderLight: '#93C5FD', // Tailwind CSS 默认的 `blue-300`
// border: '#60A5FA', // Tailwind CSS 默认的 `blue-400`
// main: '#3B82F6', // Tailwind CSS 默认的 `blue-500`
// hover: '#2563EB', // Tailwind CSS 默认的 `blue-600`
// active: '#1D4ED8', // Tailwind CSS 默认的 `blue-700`
// backgroundDark: '#1E40AF', // Tailwind CSS 默认的 `blue-800`
// backgroundDarker: '#1E3A8A', // Tailwind CSS 默认的 `blue-900`
// backgroundDarkest: '#172554', // Tailwind CSS 默认的 `blue-950`
// • backgroundLightest (#EFF6FF): 适用于最浅的背景色,可能用于非常轻微的阴影或卡片的背景。
// • backgroundLighter (#DBEAFE): 适用于略浅的背景色,通常用于次要背景或略浅的区域。
// • backgroundLight (#BFDBFE): 适用于浅色背景,可能用于输入框或表单区域的背景。
// • borderLight (#93C5FD): 适用于浅色边框,可能用于输入框或卡片的边框。
// • border (#60A5FA): 适用于普通边框,可能用于按钮或卡片的边框。
// • main (#3B82F6): 适用于主要的主题色,通常用于按钮、链接或主要的强调色。
// • hover (#2563EB): 适用于鼠标悬停状态下的颜色,例如按钮悬停时的背景色或边框色。
// • active (#1D4ED8): 适用于激活状态下的颜色,例如按钮按下时的背景色或边框色。
// • backgroundDark (#1E40AF): 适用于深色背景,可能用于主要按钮或深色卡片背景。
// • backgroundDarker (#1E3A8A): 适用于更深的背景,通常用于头部导航栏或页脚。
// • backgroundDarkest (#172554): 适用于最深的背景,可能用于非常深色的区域或极端对比色。
return {
50: `hsl(var(--${name}-50))`,
100: `hsl(var(--${name}-100))`,
200: `hsl(var(--${name}-200))`,
300: `hsl(var(--${name}-300))`,
400: `hsl(var(--${name}-400))`,
500: `hsl(var(--${name}-500))`,
600: `hsl(var(--${name}-600))`,
700: `hsl(var(--${name}-700))`,
// 800: `hsl(var(--${name}-800))`,
// 900: `hsl(var(--${name}-900))`,
// 950: `hsl(var(--${name}-950))`,
// 激活状态下的颜色,适用于按钮按下时的背景色或边框色。
active: `hsl(var(--${name}-700))`,
// 浅色背景,适用于输入框或表单区域的背景。
"background-light": `hsl(var(--${name}-200))`,
// 适用于略浅的背景色,通常用于次要背景或略浅的区域。
"background-lighter": `hsl(var(--${name}-100))`,
// 最浅的背景色,适用于非常轻微的阴影或卡片的背景。
"background-lightest": `hsl(var(--${name}-50))`,
// 适用于普通边框,可能用于按钮或卡片的边框。
border: `hsl(var(--${name}-400))`,
// 浅色边框,适用于输入框或卡片的边框。
"border-light": `hsl(var(--${name}-300))`,
foreground: `hsl(var(--${name}-foreground))`,
// 鼠标悬停状态下的颜色,适用于按钮悬停时的背景色或边框色。
hover: `hsl(var(--${name}-600))`,
// 主色文本
text: `hsl(var(--${name}-500))`,
// 主色文本激活态
"text-active": `hsl(var(--${name}-700))`,
// 主色文本悬浮态
"text-hover": `hsl(var(--${name}-600))`
};
}

View File

@@ -0,0 +1,53 @@
import plugin from "tailwindcss/plugin.js";
const enterAnimationPlugin = plugin(({ addUtilities }) => {
const maxChild = 5;
const utilities = {};
for (let i = 1; i <= maxChild; i++) {
const baseDelay = 0.1;
const delay = `${baseDelay * i}s`;
utilities[`.enter-x:nth-child(${i})`] = {
animation: `enter-x-animation 0.3s ease-in-out ${delay} forwards`,
opacity: "0",
transform: `translateX(50px)`
};
utilities[`.enter-y:nth-child(${i})`] = {
animation: `enter-y-animation 0.3s ease-in-out ${delay} forwards`,
opacity: "0",
transform: `translateY(50px)`
};
utilities[`.-enter-x:nth-child(${i})`] = {
animation: `enter-x-animation 0.3s ease-in-out ${delay} forwards`,
opacity: "0",
transform: `translateX(-50px)`
};
utilities[`.-enter-y:nth-child(${i})`] = {
animation: `enter-y-animation 0.3s ease-in-out ${delay} forwards`,
opacity: "0",
transform: `translateY(-50px)`
};
}
// 添加动画关键帧
addUtilities(utilities);
addUtilities({
"@keyframes enter-x-animation": {
to: {
opacity: "1",
transform: "translateX(0)"
}
},
"@keyframes enter-y-animation": {
to: {
opacity: "1",
transform: "translateY(0)"
}
}
});
});
export { enterAnimationPlugin };

View File

@@ -0,0 +1,15 @@
import config from ".";
export default {
plugins: {
...(process.env.NODE_ENV === "production" ? { cssnano: {} } : {}),
// Specifying the config is not necessary in most cases, but it is included
autoprefixer: {},
// 修复 element-plus 和 ant-design-vue 的样式和tailwindcss冲突问题
"postcss-antd-fixes": { prefixes: ["ant", "el"] },
"postcss-import": {},
"postcss-preset-env": {},
tailwindcss: { config },
"tailwindcss/nesting": {}
}
};

View File

@@ -1,6 +1,6 @@
{
"name": "@certd/ui-client",
"version": "1.30.2",
"version": "1.31.9",
"private": true,
"scripts": {
"dev": "vite --open",
@@ -9,7 +9,7 @@
"debug": "vite --mode debug --open",
"debug:pm": "vite --mode debugpm",
"debug:force": "vite --force --mode debug",
"build": " vite build ",
"build": "vite build ",
"dev-build": "echo 1",
"test:unit": "vitest",
"serve": "vite preview",
@@ -21,53 +21,83 @@
"circle:check": "pnpm dependency-cruise --validate --output-type err-html -f dependency-report.html src",
"afterPubPush": "git add . && git commit -m \"build: publish success\" && git push"
},
"author": "Greper",
"author": "greper",
"license": "AGPL-3.0",
"dependencies": {
"@ant-design/colors": "^7.0.2",
"@ant-design/icons-vue": "^6.1.0",
"@fast-crud/fast-crud": "^1.25.0",
"@fast-crud/fast-extends": "^1.25.0",
"@fast-crud/ui-antdv4": "^1.25.0",
"@fast-crud/ui-interface": "^1.25.0",
"@ant-design/icons-vue": "^7.0.1",
"@aws-sdk/client-s3": "^3.535.0",
"@aws-sdk/s3-request-presigner": "^3.535.0",
"@ctrl/tinycolor": "^4.1.0",
"@fast-crud/fast-crud": "^1.25.4",
"@fast-crud/fast-extends": "^1.25.4",
"@fast-crud/ui-antdv4": "^1.25.4",
"@fast-crud/ui-interface": "^1.25.4",
"@iconify/tailwind": "^1.2.0",
"@iconify/vue": "^4.1.1",
"@manypkg/get-packages": "^2.2.2",
"@soerenmartius/vue3-clipboard": "^0.1.2",
"@tailwindcss/nesting": "0.0.0-insiders.565cd3e",
"@tailwindcss/typography": "^0.5.16",
"@tanstack/vue-store": "^0.7.0",
"@vee-validate/zod": "^4.15.0",
"@vue-js-cron/light": "^4.0.5",
"ant-design-vue": "^4.1.2",
"@vue/shared": "^3.5.13",
"@vueuse/core": "^10.11.0",
"ant-design-vue": "^4.2.6",
"async-validator": "^4.2.5",
"axios": "^1.7.2",
"axios-mock-adapter": "^1.22.0",
"base64-js": "^1.5.1",
"better-scroll": "^2.5.1",
"china-division": "^2.7.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"core-js": "^3.36.0",
"cos-js-sdk-v5": "^1.7.0",
"cron-parser": "^4.9.0",
"cropperjs": "^1.6.1",
"cssnano": "^7.0.6",
"dayjs": "^1.11.7",
"defu": "^6.1.4",
"echarts": "^5.5.1",
"highlight.js": "^11.9.0",
"humanize-duration": "^3.27.3",
"lodash-es": "^4.17.21",
"lucide-vue-next": "^0.477.0",
"mitt": "^3.0.1",
"nanoid": "^4.0.0",
"node-forge": "^1.3.1",
"nprogress": "^0.2.0",
"object-assign": "^4.1.1",
"pinia": "2.1.7",
"pinia-plugin-persistedstate": "^4.2.0",
"postcss-antd-fixes": "^0.2.0",
"postcss-import": "^16.1.0",
"postcss-preset-env": "^10.1.5",
"psl": "^1.9.0",
"qiniu-js": "^3.4.2",
"qrcode": "^1.5.4",
"sortablejs": "^1.15.2",
"radix-vue": "^1.9.16",
"sortablejs": "^1.15.3",
"tailwind-merge": "^3.0.2",
"tailwindcss-animate": "^1.0.7",
"theme-colors": "^0.1.0",
"vee-validate": "^4.15.0",
"vitest": "^0.34.6",
"vue": "^3.4.21",
"vue-cropperjs": "^5.0.0",
"vue-echarts": "^7.0.3",
"vue-i18n": "^9.10.2",
"vue-router": "^4.3.0",
"vuedraggable": "^4.1.0"
"vuedraggable": "^4.1.0",
"watermark-js-plus": "^1.5.8",
"zod": "^3.24.2",
"zod-defaults": "^0.1.3"
},
"devDependencies": {
"@certd/lib-iframe": "^1.30.2",
"@certd/pipeline": "^1.30.2",
"@certd/lib-iframe": "^1.31.9",
"@certd/pipeline": "^1.31.9",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3",
"@types/chai": "^4.3.12",
@@ -83,7 +113,7 @@
"@vue/compiler-sfc": "^3.4.21",
"@vue/eslint-config-typescript": "^13.0.0",
"@vue/test-utils": "^2.4.6",
"autoprefixer": "^10.4.18",
"autoprefixer": "^10.4.20",
"caller-path": "^4.0.0",
"chai": "^5.1.0",
"dependency-cruiser": "^16.2.3",
@@ -105,7 +135,7 @@
"rollup-plugin-visualizer": "^5.12.0",
"stylelint": "^15.11.0",
"stylelint-order": "^6.0.4",
"tailwindcss": "^3.4.1",
"tailwindcss": "^3.4.14",
"terser": "^5.29.2",
"ts-node": "^10.9.2",
"tslint": "^6.1.3",
@@ -114,6 +144,7 @@
"vite": "^5.3.1",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-html": "^3.2.2",
"vite-plugin-theme": "^0.8.6",
"vite-plugin-windicss": "^1.9.3",
"vitest": "^2.1.2",
"vue-eslint-parser": "^9.4.2",

View File

@@ -1,6 +0,0 @@
module.exports = {
plugins: {
// tailwindcss: {},
autoprefixer: {}
}
};

Some files were not shown because too many files have changed in this diff Show More