Compare commits

...

406 Commits

Author SHA1 Message Date
xiaojunnuo
7c4756da81 v1.32.0 2025-04-05 01:35:54 +08:00
xiaojunnuo
f4fe03c790 build: prepare to build 2025-04-05 01:33:15 +08:00
xiaojunnuo
a748bb9352 build: prepare to build 2025-04-05 01:14:24 +08:00
xiaojunnuo
9339b78f80 perf: 又拍云支持云存储 2025-04-05 00:47:34 +08:00
xiaojunnuo
8449f8580d perf: 又拍云支持云存储 2025-04-05 00:46:56 +08:00
xiaojunnuo
0948c5bc69 perf: 优化华为dns解析记录创建和删除问题 2025-04-05 00:24:57 +08:00
xiaojunnuo
857589b365 feat: 优化证书申请速度,修复某些情况下letsencrypt 校验失败的问题 2025-04-04 23:17:05 +08:00
xiaojunnuo
c39b1bf823 fix: 修复从本地dns获取记录报错的bug 2025-04-04 20:46:48 +08:00
xiaojunnuo
298006a4b9 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-04-03 11:40:56 +08:00
xiaojunnuo
903a4131ab fix: 创建cname记录移除域名两端的空格 2025-04-03 11:39:36 +08:00
xiaojunnuo
a0ec0ddb14 build: publish 2025-04-03 00:33:32 +08:00
xiaojunnuo
46eb876f9b build: trigger build image 2025-04-03 00:33:07 +08:00
xiaojunnuo
8374c3941a v1.31.11 2025-04-03 00:31:04 +08:00
xiaojunnuo
8cec14c2ff build: prepare to build 2025-04-03 00:28:39 +08:00
xiaojunnuo
c716f105bd build: prepare to build 2025-04-03 00:26:38 +08:00
xiaojunnuo
737be1f571 chore: 2025-04-03 00:25:17 +08:00
xiaojunnuo
6f17c700b8 perf: 支持部署到京东云cdn 2025-04-03 00:19:54 +08:00
xiaojunnuo
04d79f9117 perf: 支持京东云dns申请证书 2025-04-02 23:13:55 +08:00
xiaojunnuo
8145808c43 fix: 修复ssh支持键盘事件登录 2025-04-02 00:20:09 +08:00
xiaojunnuo
86d5626d92 chore: 2025-04-01 23:03:44 +08:00
xiaojunnuo
70760e4ede build: publish 2025-03-30 01:50:01 +08:00
xiaojunnuo
8a32fd36ad build: trigger build image 2025-03-30 01:49:43 +08:00
xiaojunnuo
2e30fff221 v1.31.10 2025-03-30 01:47:57 +08:00
xiaojunnuo
667ffa5dff build: prepare to build 2025-03-30 01:43:56 +08:00
xiaojunnuo
d271120c24 chore: 2025-03-30 01:43:03 +08:00
xiaojunnuo
a03ae5a216 perf: tab增加图标显示 2025-03-30 01:41:27 +08:00
xiaojunnuo
0e73fa40bc chore: 2025-03-30 00:44:01 +08:00
xiaojunnuo
5d6f0d8546 pref(plugin-volcengine): 新增火山引擎 CDN部署功能 2025-03-30 00:30:42 +08:00
xiaojunnuo
41e23fb6a8 pref: 优化查找TXT记录逻辑,提升CNAME解析效率 2025-03-29 23:10:59 +08:00
xiaojunnuo
4e15556e5e perf: 升级lego版本到4.22.2 2025-03-29 10:47:12 +08:00
xiaojunnuo
bf30b7afae perf: 优化华为dns接口报错信息输出 2025-03-29 09:01:33 +08:00
xiaojunnuo
8801afa586 chore: 2025-03-28 23:51:32 +08:00
xiaojunnuo
47804353f9 build: trigger build image 2025-03-28 23:51:12 +08:00
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
xiaojunnuo
bcacafeb84 v1.30.2 2025-02-09 16:09:40 +08:00
xiaojunnuo
2193ddfabe build: prepare to build 2025-02-09 16:07:13 +08:00
xiaojunnuo
29ae0b7dca build: prepare to build 2025-02-09 16:06:03 +08:00
xiaojunnuo
904837df12 chore: 2025-02-09 16:05:36 +08:00
xiaojunnuo
00c2da444f fix: 修复cloudflare删除解析记录报错的bug 2025-02-09 15:50:08 +08:00
xiaojunnuo
13d0dde9f4 chore: 2025-02-08 22:21:45 +08:00
xiaojunnuo
548f2a960c chore: 增加切换数据库文档 2025-02-08 22:16:27 +08:00
GitHub Actions Bot
fe4367c580 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore:
2025-01-24 19:24:01 +00:00
xiaojunnuo
71803f891d chore: 2025-01-24 20:02:11 +08:00
xiaojunnuo
75a38d95f3 perf: 上传自定义证书 2025-01-24 18:04:17 +08:00
xiaojunnuo
c89686a2fd fix: 当前置任务被删除时进行校验 2025-01-24 16:35:40 +08:00
xiaojunnuo
398323533a chore: 2025-01-22 15:43:37 +08:00
xiaojunnuo
a773872cf3 chore: 2025-01-22 15:35:46 +08:00
xiaojunnuo
2eb0d55f92 build: publish 2025-01-20 23:40:07 +08:00
xiaojunnuo
54bd1ad0fa build: trigger build image 2025-01-20 23:39:49 +08:00
xiaojunnuo
089825d360 v1.30.1 2025-01-20 23:37:28 +08:00
xiaojunnuo
333629caff build: prepare to build 2025-01-20 23:35:50 +08:00
xiaojunnuo
d715cd1129 chore: 2025-01-20 23:30:54 +08:00
xiaojunnuo
15d6eaf553 perf: http方式校验,选择sftp时,支持修改文件访问权限比如777 2025-01-20 23:29:03 +08:00
xiaojunnuo
ae5dfc3bee fix: 修复tg消息内容中存在.和*就会发送失败的bug 2025-01-20 18:45:07 +08:00
xiaojunnuo
6ab83b662a fix: 修复部署到阿里云ALB、NLB插件加载混乱的bug 2025-01-20 18:18:16 +08:00
xiaojunnuo
52ae6902d2 perf: 创建流水线时,默认成功时也发送通知 2025-01-20 16:20:14 +08:00
xiaojunnuo
c30adb2671 chore: 2025-01-20 11:55:13 +08:00
xiaojunnuo
e95d29f446 fix: 修复腾讯clb重复执行会报错的bug 2025-01-20 11:53:52 +08:00
xiaojunnuo
c20bb38b06 build: publish 2025-01-20 00:39:15 +08:00
xiaojunnuo
d0213d275d build: trigger build image 2025-01-20 00:38:54 +08:00
xiaojunnuo
9a78dad576 v1.30.0 2025-01-20 00:36:25 +08:00
xiaojunnuo
880f1aeb66 build: prepare to build 2025-01-20 00:34:48 +08:00
xiaojunnuo
e764eabd97 chore: 2025-01-20 00:34:33 +08:00
xiaojunnuo
235f9cf854 build: prepare to build 2025-01-20 00:30:50 +08:00
xiaojunnuo
d10795ecd9 perf: 支持部署证书到proxmox 2025-01-20 00:29:59 +08:00
xiaojunnuo
a7e45dace0 chore: 2025-01-19 23:27:39 +08:00
xiaojunnuo
7e482f798c fix: 修复查看任务日志偶发性无法自动滚动底部的bug 2025-01-19 23:13:30 +08:00
xiaojunnuo
c085bac5d8 perf: 支持部署到阿里云NLB、SLB 2025-01-19 22:55:46 +08:00
xiaojunnuo
653940a0ca perf: 支持部署到阿里云ALB 2025-01-19 15:31:37 +08:00
xiaojunnuo
417d37b199 perf: 支持部署到腾讯云直播 2025-01-19 14:12:16 +08:00
xiaojunnuo
3b2107a4f1 chore: 2025-01-19 01:21:58 +08:00
xiaojunnuo
7f6d03c02a chore: 2025-01-19 01:07:20 +08:00
xiaojunnuo
5fc07d4dd4 chore: 2025-01-19 00:40:43 +08:00
xiaojunnuo
3fb9524cbd Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-01-19 00:37:26 +08:00
xiaojunnuo
e79703e49b chore: 2025-01-19 00:33:34 +08:00
xiaojunnuo
b829bd1341 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-01-16 11:49:38 +08:00
xiaojunnuo
8cbab7525a pref: 优化重置管理员密码后打印出用户名,避免忘记用户名的情况 2025-01-16 11:49:09 +08:00
xiaojunnuo
93b37a89c9 chore: 2025-01-15 23:13:17 +08:00
xiaojunnuo
87620b9072 chore: 2025-01-15 22:58:11 +08:00
xiaojunnuo
6877b865a7 chore: 2025-01-15 01:26:39 +08:00
xiaojunnuo
d6b3142a02 chore: 2025-01-15 01:26:23 +08:00
xiaojunnuo
14cdb54212 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-01-15 01:06:16 +08:00
xiaojunnuo
91e7f45a1c perf: 证书仓库 2025-01-15 01:05:34 +08:00
xiaojunnuo
709105120c Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-01-14 15:09:16 +08:00
xiaojunnuo
865f26d75c fix: 修复namesilo ttl太短的问题 2025-01-14 14:47:03 +08:00
xiaojunnuo
52a4fd3318 feat: 支持open api接口,根据域名获取证书 2025-01-14 00:54:30 +08:00
GitHub Actions Bot
e70732c9ac 🔱: [client] sync upgrade with 2 commits [trident-sync]
build: publish success
2025-01-12 19:23:54 +00:00
xiaojunnuo
c6c269f9e4 chore: 2025-01-12 21:49:17 +08:00
GitHub Actions Bot
42ad04cabd 🔱: [client] sync upgrade with 2 commits [trident-sync]
perf: 支持图标选择器
2025-01-09 19:24:07 +00:00
xiaojunnuo
2a8eeaf240 build: publish 2025-01-07 23:19:36 +08:00
xiaojunnuo
f7dcff5113 build: trigger build image 2025-01-07 23:19:12 +08:00
xiaojunnuo
98a81385a6 v1.29.5 2025-01-07 23:16:46 +08:00
xiaojunnuo
7bdc277b58 build: prepare to build 2025-01-07 23:14:55 +08:00
xiaojunnuo
f57116d2be fix: 修复复制到本机插件,pfx格式复制时报错的bug 2025-01-07 23:13:44 +08:00
xiaojunnuo
85c99f7f80 fix: 修复授权管理,点击了查看原文按钮后,无法修改值的bug 2025-01-07 11:00:04 +08:00
xiaojunnuo
75081ceac3 build: publish 2025-01-07 00:02:42 +08:00
xiaojunnuo
65da3ca298 build: trigger build image 2025-01-07 00:02:21 +08:00
xiaojunnuo
94509c64b9 v1.29.4 2025-01-06 23:59:56 +08:00
xiaojunnuo
4f36d94726 build: prepare to build 2025-01-06 23:56:50 +08:00
xiaojunnuo
05c284b999 docs: 文档 2025-01-06 23:55:41 +08:00
xiaojunnuo
635b042690 perf: 优化腾讯云CLB插件,支持非sni情况,sni情况支持填写多个域名 2025-01-06 23:47:08 +08:00
xiaojunnuo
1cb4a539cc fix: 修复站点监控域名校验无法通过的bug 2025-01-06 23:08:16 +08:00
xiaojunnuo
46b87250b2 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-01-06 22:12:42 +08:00
xiaojunnuo
1a05355e54 docs: payments文档 2025-01-06 22:11:07 +08:00
xiaojunnuo
c81c17d17b chore: 2025-01-06 15:32:14 +08:00
xiaojunnuo
7b4f8d31e8 chore: db transform text改成longtext 2025-01-06 09:39:44 +08:00
xiaojunnuo
5cef28c5bd build: publish 2025-01-05 01:14:01 +08:00
xiaojunnuo
6e68da7936 build: trigger build image 2025-01-05 01:13:39 +08:00
xiaojunnuo
0c130f9596 v1.29.3 2025-01-05 01:11:06 +08:00
xiaojunnuo
f156f4cb4e build: prepare to build 2025-01-05 01:09:09 +08:00
xiaojunnuo
fa3bfa2ea8 chore: 2025-01-05 01:07:04 +08:00
xiaojunnuo
ab5c7bb75a chore: 2025-01-05 01:02:41 +08:00
xiaojunnuo
81b322cd60 chore: 2025-01-04 20:17:08 +08:00
xiaojunnuo
e6dd7cd54a perf: 优化站点证书检查页面,检查增加3次重试 2025-01-04 20:10:00 +08:00
xiaojunnuo
aa1da7c11a chore: 2025-01-04 01:46:49 +08:00
xiaojunnuo
3f74d4d9e5 perf: http校验方式,支持七牛云oss、阿里云oss、腾讯云cos 2025-01-04 01:45:24 +08:00
xiaojunnuo
297d09c5ad docs: 增加支付配置说明 2025-01-03 16:50:16 +08:00
xiaojunnuo
07e1dbb4cc chore: 2025-01-03 16:12:37 +08:00
xiaojunnuo
3c6618b4fc chore: 2025-01-03 09:27:51 +08:00
xiaojunnuo
54db744282 perf: 优化acme sdk 2025-01-03 01:17:20 +08:00
xiaojunnuo
03b751fa13 chore: 2025-01-03 00:12:15 +08:00
xiaojunnuo
ec342708b2 chore: 2025-01-02 17:48:54 +08:00
xiaojunnuo
405591c5d0 perf: 支持http校验方式申请证书 2025-01-02 00:28:13 +08: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
xiaojunnuo
67af67b92d chore: 2024-12-27 22:40:07 +08:00
xiaojunnuo
8644348fc4 fix: 修复系统级授权无法查看密钥的bug 2024-12-26 23:15:35 +08:00
xiaojunnuo
00dc226bd2 chore: auto-upgrade 2024-12-26 16:14:08 +08:00
xiaojunnuo
b6b7c3e2e0 chore: storage存储的数据量优化,去掉logs信息 2024-12-26 13:48:55 +08:00
xiaojunnuo
246ef348d3 chore: mysql text 改成longtext 2024-12-26 13:26:10 +08:00
xiaojunnuo
3e9ba1a30a docs: 2024-12-26 09:02:04 +08:00
xiaojunnuo
598cde4865 build: publish 2024-12-26 01:56:08 +08:00
xiaojunnuo
fc4a716b4e build: trigger build image 2024-12-26 01:55:50 +08:00
xiaojunnuo
ed5634ff83 v1.29.2 2024-12-26 01:53:32 +08:00
xiaojunnuo
884af1ea62 build: prepare to build 2024-12-26 01:51:48 +08:00
xiaojunnuo
01ad62df16 build: prepare to build 2024-12-26 01:49:48 +08:00
xiaojunnuo
512a667e44 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2024-12-26 01:47:50 +08:00
xiaojunnuo
d0e841f7de build: publish 2024-12-26 01:43:52 +08:00
xiaojunnuo
c04641d835 build: trigger build image 2024-12-26 01:43:35 +08:00
xiaojunnuo
f9128d4d45 v1.29.1 2024-12-26 01:41:20 +08:00
xiaojunnuo
2026211622 build: prepare to build 2024-12-26 01:39:23 +08:00
xiaojunnuo
9d0f21a9e5 chore: 2024-12-26 01:36:01 +08:00
xiaojunnuo
26adf7d437 perf: 优化插件名称显示 2024-12-26 01:32:52 +08:00
xiaojunnuo
d2d6f12218 fix: 修复某处金额转换丢失精度的bug 2024-12-26 01:01:28 +08:00
xiaojunnuo
b31c0b6a8d chore: 2024-12-25 23:24:42 +08:00
xiaojunnuo
472f06c2d1 perf: 用户创建证书流水线没有购买套餐或者超限时提前报错 2024-12-25 23:20:07 +08:00
xiaojunnuo
f5ec9870fd fix: 免费套餐支持购买 2024-12-25 17:05:24 +08:00
xiaojunnuo
66fb9e5f49 fix: 修复套餐关闭状态下,仍然限制用户流水线数量的bug 2024-12-25 11:42:42 +08:00
xiaojunnuo
a323f3aa2c chore: 2024-12-25 10:38:48 +08:00
xiaojunnuo
fe4786e168 fix: 修复新版本小红点显示错误问题 2024-12-25 09:25:27 +08:00
GitHub Actions Bot
ed6a18dae7 🔱: [client] sync upgrade with 2 commits [trident-sync]
chore: 提示优化
2024-12-24 19:23:49 +00:00
xiaojunnuo
83185c8c50 chore: 2024-12-25 01:16:32 +08:00
xiaojunnuo
83ae9db02d build: publish 2024-12-25 01:07:17 +08:00
xiaojunnuo
8bf328ca94 build: trigger build image 2024-12-25 01:06:48 +08:00
xiaojunnuo
36993cb6f8 v1.29.0 2024-12-25 01:04:12 +08:00
xiaojunnuo
c854415319 build: prepare to build 2024-12-25 01:02:01 +08:00
xiaojunnuo
aecc1cd979 build: prepare to build 2024-12-25 00:59:27 +08:00
xiaojunnuo
b2f3b0b584 build: prepare to build 2024-12-25 00:53:02 +08:00
xiaojunnuo
c937f5afc7 chore: 兼容数据库 2024-12-25 00:52:39 +08:00
xiaojunnuo
2d580a26af chore:menu.meta.show参数支持 2024-12-24 23:55:50 +08:00
xiaojunnuo
4a00a3cc1b chore: 2024-12-24 23:23:02 +08:00
xiaojunnuo
d3935219f2 perf: 调整创建证书表单字段的顺序 2024-12-24 23:14:12 +08:00
xiaojunnuo
040788c793 fix: 修复手机模式下,查询框被文字遮盖的bug 2024-12-24 17:52:03 +08:00
xiaojunnuo
005622307e fix: 修复左侧菜单收起时无法展开子菜单的bug 2024-12-24 17:09:06 +08:00
xiaojunnuo
8ebf95a222 perf: 同一时间只允许一个套餐生效 2024-12-24 10:39:54 +08:00
xiaojunnuo
7f596ed315 chore: 2024-12-24 01:16:27 +08:00
xiaojunnuo
ffa4de6911 chore: 2024-12-24 01:12:12 +08:00
xiaojunnuo
cb27d4b490 feat: 基础版不再限制流水线数量 2024-12-23 23:33:13 +08:00
xiaojunnuo
bb4910f4e5 perf: 站点证书监控通知发送,每天定时检查 2024-12-23 18:11:06 +08:00
xiaojunnuo
89c7f07034 perf: 用户名支持修改 2024-12-23 14:47:27 +08:00
xiaojunnuo
b150b2f034 chore: 2024-12-23 13:28:25 +08:00
xiaojunnuo
45d6347f5b feat: 支持微信支付 2024-12-23 13:27:04 +08:00
xiaojunnuo
67d762b6a5 perf: 优化证书申请跳过的状态显示,成功通知现在在跳过时不会发送 2024-12-23 00:49:56 +08:00
xiaojunnuo
faa28f88f9 feat: 套餐购买支持易支付、支付宝支付 2024-12-23 00:24:31 +08:00
xiaojunnuo
9c8c7a7812 feat: 站点证书监控 2024-12-22 14:01:10 +08:00
xiaojunnuo
a019956698 feat: 用户套餐,用户支付功能 2024-12-22 14:00:46 +08:00
xiaojunnuo
d70e2b66a3 chore: 2024-12-20 18:04:32 +08:00
xiaojunnuo
5d568efac3 chore: suite 2024-12-20 01:00:13 +08:00
xiaojunnuo
08111f1418 chore: 2024-12-19 22:37:27 +08:00
xiaojunnuo
45839f227a chore: suite 2024-12-19 01:21:55 +08:00
xiaojunnuo
8814ffeda6 Merge branch 'v2-dev' into v2-dev-suite 2024-12-18 21:28:38 +08:00
xiaojunnuo
d224c4c124 chore: 2024-12-18 21:25:39 +08:00
xiaojunnuo
549525fb37 chore: plesk ok 2024-12-18 10:22:22 +08:00
xiaojunnuo
1c8e25beb3 chore: suite 2024-12-18 09:07:52 +08:00
xiaojunnuo
eda45c1528 perf: 支持plesk网站证书部署 2024-12-18 00:38:27 +08:00
xiaojunnuo
53c38cf714 perf: 支持一体证书 2024-12-17 22:50:18 +08:00
xiaojunnuo
0e7578043e chore: 2024-12-17 22:45:14 +08:00
xiaojunnuo
21f50e0b38 Merge branch 'v2' into v2-dev 2024-12-17 22:22:19 +08:00
greper
515f00c7cd docs: 自动更新方法(@coolxitech)
Update README.md
2024-12-17 10:52:30 +08:00
xiaojunnuo
8057586dc1 chore: suite first 2024-12-17 10:27:35 +08:00
酷曦科技
b101ac7c7f Update README.md
Include the Docker compose configuration file content for automatic version updates.
2024-12-17 00:06:21 +08:00
xiaojunnuo
64319937a1 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2024-12-13 09:51:13 +08:00
xiaojunnuo
1c0cfd6769 build: publish 2024-12-13 00:19:43 +08:00
xiaojunnuo
f8e17d5285 build: trigger build image 2024-12-13 00:19:23 +08:00
xiaojunnuo
40da82666a chore: 2024-12-12 18:06:07 +08: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
1408 changed files with 503293 additions and 3171 deletions

View File

@@ -91,14 +91,14 @@ jobs:
# greper/certd:armv7
# greper/certd:${{steps.get_certd_version.outputs.result}}-armv7
- name: Build agent
uses: docker/build-push-action@v6
with:
platforms: linux/amd64,linux/arm64
push: true
context: ./packages/ui/agent/
tags: |
registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:latest
registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:${{steps.get_certd_version.outputs.result}}
greper/certd-agent:latest
greper/certd-agent:${{steps.get_certd_version.outputs.result}}
# - name: Build agent
# uses: docker/build-push-action@v6
# with:
# platforms: linux/amd64,linux/arm64
# push: true
# context: ./packages/ui/agent/
# tags: |
# registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:latest
# registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:${{steps.get_certd_version.outputs.result}}
# greper/certd-agent:latest
# greper/certd-agent:${{steps.get_certd_version.outputs.result}}

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,306 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.32.0](https://github.com/certd/certd/compare/v1.31.11...v1.32.0) (2025-04-04)
### Bug Fixes
* 创建cname记录移除域名两端的空格 ([903a413](https://github.com/certd/certd/commit/903a4131ab5f42c8286cd2150ed1032d486fda2f))
* 修复从本地dns获取记录报错的bug ([c39b1bf](https://github.com/certd/certd/commit/c39b1bf823ddc6216bed2049e4c87e6107def08a))
### Features
* 优化证书申请速度修复某些情况下letsencrypt 校验失败的问题 ([857589b](https://github.com/certd/certd/commit/857589b365c6f709e0ae67914d2f50ce182e6dd6))
### Performance Improvements
* 优化华为dns解析记录创建和删除问题 ([0948c5b](https://github.com/certd/certd/commit/0948c5bc691d2ee6eb47c72a85da1b7453361878))
* 又拍云支持云存储 ([9339b78](https://github.com/certd/certd/commit/9339b78f801d193472c0af25749e8e7a27ffb7af))
* 又拍云支持云存储 ([8449f85](https://github.com/certd/certd/commit/8449f8580da90c1f6b5d02d07c3236ebaf6cf161))
## [1.31.11](https://github.com/certd/certd/compare/v1.31.10...v1.31.11) (2025-04-02)
### Bug Fixes
* 修复ssh支持键盘事件登录 ([8145808](https://github.com/certd/certd/commit/8145808c4370364377b4ffe3ae88ff465b49f20b))
### Performance Improvements
* 支持部署到京东云cdn ([6f17c70](https://github.com/certd/certd/commit/6f17c700b84965baa01b40fe2abaa0a91bcbaffd))
* 支持京东云dns申请证书 ([04d79f9](https://github.com/certd/certd/commit/04d79f9117670be504960b018fd49ae3bf7c1c11))
## [1.31.10](https://github.com/certd/certd/compare/v1.31.9...v1.31.10) (2025-03-29)
### Performance Improvements
* tab增加图标显示 ([a03ae5a](https://github.com/certd/certd/commit/a03ae5a216a1df2c1d3da12ae18dcd0f089a92d3))
* 升级lego版本到4.22.2 ([4e15556](https://github.com/certd/certd/commit/4e15556e5e8100719497edb1729570d5a29668e1))
* 优化华为dns接口报错信息输出 ([bf30b7a](https://github.com/certd/certd/commit/bf30b7afaef623dd8126570344f1fcc2c06f1215))
## [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
* 当前置任务被删除时进行校验 ([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
* 修复部署到阿里云ALB、NLB插件加载混乱的bug ([6ab83b6](https://github.com/certd/certd/commit/6ab83b662a2c5e715b9cb7eb1244de2ebb7f47b0))
* 修复腾讯clb重复执行会报错的bug ([e95d29f](https://github.com/certd/certd/commit/e95d29f446d06eced315a3087fc9e105a30b20bd))
* 修复tg消息内容中存在.和*就会发送失败的bug ([ae5dfc3](https://github.com/certd/certd/commit/ae5dfc3bee950267123ae2fbd1c11e7ce36626ea))
### Performance Improvements
* 创建流水线时,默认成功时也发送通知 ([52ae690](https://github.com/certd/certd/commit/52ae6902d203ca56e0312692b50c55cb6ddd3e39))
* http方式校验选择sftp时支持修改文件访问权限比如777 ([15d6eaf](https://github.com/certd/certd/commit/15d6eaf5532ed25acd4f8d58c429353a2f44206c))
# [1.30.0](https://github.com/certd/certd/compare/v1.29.5...v1.30.0) (2025-01-19)
### Bug Fixes
* 修复查看任务日志偶发性无法自动滚动底部的bug ([7e482f7](https://github.com/certd/certd/commit/7e482f798c0142bce1866f84676cb40210f9638a))
* 修复namesilo ttl太短的问题 ([865f26d](https://github.com/certd/certd/commit/865f26d75c0d3dd4dc8b41448f8830068e45957c))
### Features
* 支持open api接口根据域名获取证书 ([52a4fd3](https://github.com/certd/certd/commit/52a4fd33180e9b3f71b8dc9f7671d7cd8e448c3b))
### Performance Improvements
* 证书仓库 ([91e7f45](https://github.com/certd/certd/commit/91e7f45a1c5ea1e0ec0aa3236b80028f03a6d0aa))
* 支持部署到阿里云ALB ([653940a](https://github.com/certd/certd/commit/653940a0ca64fc380178c1b0b58ae0af64dfaf07))
* 支持部署到阿里云NLB、SLB ([c085bac](https://github.com/certd/certd/commit/c085bac5d877c4250a8a79e17eb8673b8e4fc89c))
* 支持部署到腾讯云直播 ([417d37b](https://github.com/certd/certd/commit/417d37b199b79a42f790f9edab8f178eedf8fbf7))
* 支持部署证书到proxmox ([d10795e](https://github.com/certd/certd/commit/d10795ecd97eb8cf2ffa46aabfdbfc6812636396))
## [1.29.5](https://github.com/certd/certd/compare/v1.29.4...v1.29.5) (2025-01-07)
### Bug Fixes
* 修复复制到本机插件pfx格式复制时报错的bug ([f57116d](https://github.com/certd/certd/commit/f57116d2bebf33e47ad93e0b39c4efe8e4aea25c))
* 修复授权管理点击了查看原文按钮后无法修改值的bug ([85c99f7](https://github.com/certd/certd/commit/85c99f7f80761ac6efaf3255c03b933442db1686))
## [1.29.4](https://github.com/certd/certd/compare/v1.29.3...v1.29.4) (2025-01-06)
### Bug Fixes
* 修复站点监控域名校验无法通过的bug ([1cb4a53](https://github.com/certd/certd/commit/1cb4a539cc523721ffd4b22d40d0e3d2d68cd915))
### Performance Improvements
* 优化腾讯云CLB插件支持非sni情况sni情况支持填写多个域名 ([635b042](https://github.com/certd/certd/commit/635b042690637bff85e97e07c7aac4b87a8a124b))
## [1.29.3](https://github.com/certd/certd/compare/v1.29.2...v1.29.3) (2025-01-04)
### Bug Fixes
* 修复系统级授权无法查看密钥的bug ([8644348](https://github.com/certd/certd/commit/8644348fc41ae2e1672f946ca37e5d3a674e0218))
### Performance Improvements
* 优化站点证书检查页面检查增加3次重试 ([e6dd7cd](https://github.com/certd/certd/commit/e6dd7cd54a3e23897031b5df6e0c3cdc0545d35a))
* 优化acme sdk ([54db744](https://github.com/certd/certd/commit/54db74428259de64d12230c2ab7353ae11197bbc))
* 支持http校验方式申请证书 ([405591c](https://github.com/certd/certd/commit/405591c5d08fa1a3b228ee3980199e7731cfec4a))
* http校验方式支持七牛云oss、阿里云oss、腾讯云cos ([3f74d4d](https://github.com/certd/certd/commit/3f74d4d9e5f5d0e629b44cff1895b3f7a8fbcafc))
## [1.29.2](https://github.com/certd/certd/compare/v1.29.1...v1.29.2) (2024-12-25)
### Bug Fixes
* 修复套餐关闭状态下仍然限制用户流水线数量的bug ([66fb9e5](https://github.com/certd/certd/commit/66fb9e5f49491f9c159363b48af14720a37673b1))
## [1.29.1](https://github.com/certd/certd/compare/v1.29.0...v1.29.1) (2024-12-25)
### Bug Fixes
* 免费套餐支持购买 ([f5ec987](https://github.com/certd/certd/commit/f5ec9870fd6af1f0c9099852bbdb4d07813ccce8))
* 修复某处金额转换丢失精度的bug ([d2d6f12](https://github.com/certd/certd/commit/d2d6f12218cbe7bd55f4ae082b93084be85f0a7b))
* 修复新版本小红点显示错误问题 ([fe4786e](https://github.com/certd/certd/commit/fe4786e168afe03a5243dd67971476c348339809))
### Performance Improvements
* 用户创建证书流水线没有购买套餐或者超限时提前报错 ([472f06c](https://github.com/certd/certd/commit/472f06c2d190d0ae48e8b53c18bc278437656a1c))
* 优化插件名称显示 ([26adf7d](https://github.com/certd/certd/commit/26adf7d437e674385f26a8f92fded6521a620671))
# [1.29.0](https://github.com/certd/certd/compare/v1.28.4...v1.29.0) (2024-12-24)
### Bug Fixes
* 修复手机模式下查询框被文字遮盖的bug ([040788c](https://github.com/certd/certd/commit/040788c793642c3bb2a3ede87fe30fcf3be471bd))
* 修复左侧菜单收起时无法展开子菜单的bug ([0056223](https://github.com/certd/certd/commit/005622307e612717a5408aa1484717ef03003a22))
### Features
* 基础版不再限制流水线数量 ([cb27d4b](https://github.com/certd/certd/commit/cb27d4b4906b2782eaceb0a95bbdc5d0534370d2))
* 套餐购买支持易支付、支付宝支付 ([faa28f8](https://github.com/certd/certd/commit/faa28f88f954cba4c1dd29125562e5acd2fd99af))
* 用户套餐,用户支付功能 ([a019956](https://github.com/certd/certd/commit/a019956698acaf2c4beb620b5ad8c18918ead6a1))
* 站点证书监控 ([9c8c7a7](https://github.com/certd/certd/commit/9c8c7a781223f4217f45510db1e89495600e3cd5))
* 支持微信支付 ([45d6347](https://github.com/certd/certd/commit/45d6347f5b6199493b11aabdd74177f6dca2cea4))
### Performance Improvements
* 调整创建证书表单字段的顺序 ([d393521](https://github.com/certd/certd/commit/d3935219f2aa50d6662c5b5ebf7ee25ad696ab2b))
* 同一时间只允许一个套餐生效 ([8ebf95a](https://github.com/certd/certd/commit/8ebf95a222a900d1707716c7b1f3b39f8a6d8f94))
* 用户名支持修改 ([89c7f07](https://github.com/certd/certd/commit/89c7f070343e86453c84677ebe1669f9b266d871))
* 优化证书申请跳过的状态显示,成功通知现在在跳过时不会发送 ([67d762b](https://github.com/certd/certd/commit/67d762b6a520f1fa24719a124e5ae975a81f5f82))
* 站点证书监控通知发送,每天定时检查 ([bb4910f](https://github.com/certd/certd/commit/bb4910f4e57234e42b44505f4620ae7af66025c5))
* 支持一体证书 ([53c38cf](https://github.com/certd/certd/commit/53c38cf714a6f7486abbf1d71c9f48f56a790100))
* 支持plesk网站证书部署 ([eda45c1](https://github.com/certd/certd/commit/eda45c1528199648b3970505e87f492d398226cd))
## [1.28.4](https://github.com/certd/certd/compare/v1.28.3...v1.28.4) (2024-12-12)
### Bug Fixes

View File

@@ -9,15 +9,22 @@ Certd 是一个免费全自动申请和自动部署更新SSL证书的管理系
本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。
* 全自动申请证书(支持所有注册商注册的域名)
* 全自动部署更新证书(目前支持部署到主机、阿里云、腾讯云等,目前已支持40+部署插件)
* 全自动部署更新证书(目前支持部署到主机、阿里云、腾讯云等,目前已支持60+部署插件)
* 支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式
* 支持通配符域名/泛域名支持多个域名打到一个证书上支持pem、pfx、der、jks等多种证书格式
* 邮件通知、webhook通知
* 私有化部署数据保存本地镜像由Github Actions构建过程公开透明
* 私有化部署,数据保存本地,授权信息加密存储,镜像由Github Actions构建过程公开透明
* 支持SQLitePostgreSQL、MySQL数据库
>
> 流水线数量现已调整为无限制,欢迎大家使用
>
> 关于证书续期:
>* 实际上没有办法不改变证书文件本身情况下直接续期或者续签。
>* 我们所说的续期,其实就是按照全套流程重新申请一份新证书,然后重新部署上去。
## 二、在线体验
官方Demo地址自助注册后体验
@@ -86,11 +93,13 @@ https://certd.handfree.work/
## 五、 升级
如果使用固定版本号
### docker-compose方式部署
#### 1. 如果使用固定版本号
1. 修改`docker-compose.yaml`中的镜像版本号
2. 运行`docker compose up -d` 即可
如果使用`latest`版本
#### 2. 如果需要使用最新版本
```shell
#重新拉取镜像
docker pull registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
@@ -98,19 +107,54 @@ docker pull registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
docker compose down
docker compose up -d
```
> 数据默认存在`/data/certd`目录下,不用担心数据丢失
> 数据默认存在`/data/certd`目录下,不用担心数据丢失
### 自动升级(仅限尝鲜建议非生产使用)
```yaml
version: '3.3'
services:
certd:
image: registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
container_name: certd
restart: unless-stopped
volumes:
- /data/certd:/app/data
ports:
- "7001:7001"
- "7002:7002"
environment:
- certd_system_resetAdminPasswd=false
labels:
com.centurylinklabs.watchtower.enable: "true"
certd-updater: # 添加 Watchtower 服务
image: containrrr/watchtower:latest
container_name: certd-updater
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# 配置 自动更新
environment:
- WATCHTOWER_CLEANUP=true # 自动清理旧版本容器
- WATCHTOWER_INCLUDE_STOPPED=false # 不更新已停止的容器
- WATCHTOWER_LABEL_ENABLE=true # 根据容器标签进行更新
- WATCHTOWER_POLL_INTERVAL=300 # 每 5 分钟检查一次更新
```
### 其他部署方式升级方法
请参考 https://certd.docmirror.cn/guide/install/upgrade.html
更新日志: [CHANGELOG](./CHANGELOG.md)
### 更新日志:
[CHANGELOG](./CHANGELOG.md)
## 六、一些说明
* 本项目ssl证书提供商为letencrypt/Google/ZeroSSL
* 申请过程遵循acme协议
* 需要验证域名所有权一般有两种方式目前本项目仅支持dns-01
* http-01 在网站根目录下放置一份txt文件
* dns-01 需要给域名添加txt解析记录通配符域名只能用这种方式
* 证书续期:
* 实际上没有办法不改变证书文件本身情况下直接续期或者续签。
* 我们所说的续期,其实就是按照全套流程重新申请一份新证书,然后重新部署上去。
@@ -155,12 +199,15 @@ https://afdian.com/a/greper
专业版特权对比
| 功能 | 免费版 | 专业版 |
|---------|-------------------|-----------------------|
| 免费证书申请 | 免费无限制 | 免费无限制 |
| 自动部署插件 | 阿里云、腾讯云、七牛云、主机部署等 | 支持群晖、宝塔、1Panel等持续开发中 |
| 发邮件功能 | 需要配置 | 免配置 |
| 证书流水线条数 | 10条 | 无限制 |
| 功能 | 免费版 | 专业版 |
|---------|--------------------|-----------------------------|
| 免费证书申请 | 免费无限制 | 免费无限制 |
| 域名数量 | 无限制 | 无限制 |
| 证书流水线条数 | 无限制 | 无限制 |
| 站点证书监控 | 限制1条 | 无限制 |
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署等 | 支持群晖、宝塔、1Panel等持续开发中 |
| 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、飞书、anpush、server酱等 |
************************

View File

@@ -1 +1 @@
12:07
00:33

View File

@@ -1,15 +1,16 @@
version: '3.3' # 兼容旧版docker-compose
services:
certd:
# 镜像 # ↓↓↓↓↓ ---- 镜像版本号,建议改成固定版本号
# 镜像 # ↓↓↓↓↓ ---- 镜像版本号,建议改成固定版本号,例如certd:1.29.0
image: registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
container_name: certd # 容器名
restart: unless-stopped # 自动重启
volumes:
# ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】
# 只要修改冒号前面的,冒号后面的/app/data不要动
- /data/certd:/app/data
ports: # 端口映射
# ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突可以修改第一个7001为其他不冲突的端口号
# ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突可以修改第一个7001为其他不冲突的端口号第二个7001不要动
- "7001:7001"
# ↓↓↓↓ ---------------------------------------------------------- https端口可以根据实际情况是否暴露该端口
- "7002:7002"
@@ -25,14 +26,24 @@ services:
# - 8.8.4.4
# extra_hosts:
# # ↓↓↓↓ -------------------------------------------------------- 这里可以配置自定义hosts外网域名可以指向本地局域网ip地址
# - "localdomain.comm:192.168.1.3"
# - "localdomain.com:192.168.1.3"
# # ↓↓↓↓ ------------------------------------------------ 直接使用主机的网络,如果网络问题实在找不到原因,可以尝试打开此参数
# network_mode: host
labels:
com.centurylinklabs.watchtower.enable: "true"
# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络还需要把下面networks的注释放开
# networks:
# - ip6net
environment:
# 设置环境变量即可自定义certd配置
# 配置项见: packages/ui/certd-server/src/config/config.default.ts
# 配置规则: certd_ + 配置项, 点号用_代替
# #↓↓↓↓ ----------------------------- 如果忘记管理员密码可以设置为true重启之后管理员密码将改成123456然后请及时修改回false
- certd_system_resetAdminPasswd=false
# 默认使用sqlite文件数据库如果需要使用其他数据库请设置以下环境变量
# 注意: 选定使用一种数据库之后,不支持更换数据库。
# 数据库迁移方法1、使用新数据库重新部署一套然后将旧数据同步过去注意flyway_history表的数据不要同步
# #↓↓↓↓ ----------------------------- 使用postgresql数据库需要提前创建数据库
# - certd_flyway_scriptDir=./db/migration-pg # 升级脚本目录
# - certd_typeorm_dataSource_default_type=postgres # 数据库类型
@@ -51,13 +62,22 @@ services:
# - certd_typeorm_dataSource_default_password=yourpasswd # 密码
# - certd_typeorm_dataSource_default_database=certd # 数据库名
# ↓↓↓↓ --------------------------------------------------------- 自动升级上面certd的版本号要保持为latest
# certd-updater: # 添加 Watchtower 服务
# image: containrrr/watchtower:latest
# container_name: certd-updater
# restart: unless-stopped
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# # 配置 自动更新
# environment:
# - WATCHTOWER_CLEANUP=true # 自动清理旧版本容器
# - WATCHTOWER_INCLUDE_STOPPED=false # 不更新已停止的容器
# - WATCHTOWER_LABEL_ENABLE=true # 根据容器标签进行更新
# - WATCHTOWER_POLL_INTERVAL=600 # 每 10 分钟检查一次更新
# #↓↓↓↓ ------------------------------------------------------------- 启用ipv6网络
# networks:
# - ip6net
# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络还需要把上面networks的注释放开
#networks:
# ip6net:
# enable_ipv6: true

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: {
@@ -57,6 +61,7 @@ export default defineConfig({
nav: [
{ text: "首页", link: "/" },
{ text: "指南", link: "/guide/" },
{ text: "商业版", link: "/comm/" },
{ text: "Demo体验", link: "https://certd.handfree.work" }
],
sidebar: {
@@ -84,7 +89,9 @@ export default defineConfig({
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" }
]
},
{
@@ -101,12 +108,12 @@ export default defineConfig({
{ text: "js脚本插件使用", link: "/guide/use/custom-script/index.md" },
{ text: "邮箱配置", link: "/guide/use/email/index.md" },
{ text: "IPv6支持", link: "/guide/use/setting/ipv6.md" },
{ text: "如何贡献代码", link: "/guide/development/index.md" },
]
},
{
text: "其他",
items: [
{ text: "贡献代码", link: "/guide/development/index.md" },
{ text: "更新日志", link: "/guide/changelogs/CHANGELOG.md" },
{ text: "镜像说明", link: "/guide/image.md" },
{ text: "联系我们", link: "/guide/contact/" },
@@ -116,8 +123,28 @@ export default defineConfig({
]
}
],
"/deploy/":[
{
text: "部署任务",
items: [
{ text: "部署到ESXi", link: "/deploy/ESXi/index.md" },
]
}
],
"/comm/": [
{
text: "商业版",
items: [
{ text: "支付宝配置", link: "/comm/payments/alipay.md" },
{ text: "微信支付配置", link: "/comm/payments/wxpay.md" },
{ text: "彩虹易支付配置", link: "/comm/payments/yizhifu.md" },
]
}
]
,
},
socialLinks: [
{ icon: "github", link: "https://github.com/certd/certd" }
],

BIN
docs/comm/images/index.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

9
docs/comm/index.md Normal file
View File

@@ -0,0 +1,9 @@
# 商业版文档
![](./images/index.png)
## 支付方式配置
* [支付宝支付配置](./payments/alipay.md)
* [微信支付配置](./payments/wxpay.md)
* [彩虹易支付配置](./payments/yizhifu.md)

View File

@@ -0,0 +1,21 @@
# 支付宝配置
## 配置步骤
1. 创建应用获取APPID
* 登录支付宝开放平台进入开发者中心创建网页应用获取应用的AppId左上角复制
* 开发者中心https://open.alipay.com/develop/manage
2. 进入应用详情,选择开发设置,配置接口加签方式 (选择密钥类型)
* 参考文档https://opendocs.alipay.com/common/02kdnc?pathHash=fb0c752a
* 此步骤完成后,可以获取应用的私钥、支付宝公钥。
* 注意:支付宝不会保存应用的私钥,你需要自己保管好私钥。
3. 在Certd后台配置支付宝
* 进入“系统”->"设置"->“支付设置”
* 启用支付宝,选择“支付宝配置”,点击添加
* 填写支付宝AppId、应用私钥、支付宝公钥等信息即可。

View File

@@ -0,0 +1,27 @@
# 微信支付配置
## 配置步骤
1. 开通Native支付
* 登录微信支付平台
* 进入产品中心: https://pay.weixin.qq.com/index.php/extend/product/lists?tid=3
* 选择开通Native支付
2. 申请证书
* 进入“账户中心”->“API安全”->“商户API证书”->“管理证书”
* 根据指引生成证书
* 得到私钥和公钥
3. 填写APIv3密钥
* 进入“账户中心”->“API安全”->“解密回调”
* 填写APIv3密钥
* 参考文档 https://kf.qq.com/faq/180830E36vyQ180830AZFZvu.html
4. 在Certd后台配置微信支付
* 进入“系统”->"设置"->“支付设置”
* 启用微信支付,选择“微信支付配置”,点击添加
* 填写微信支付商户号、证书私钥、证书公钥、APIv3密钥即可。

View File

@@ -0,0 +1,19 @@
# 彩虹易支付配置
彩虹易支付是一款非常流行的php聚合支付系统。
## 配置步骤
1. 获取商户ID、商户密钥
* 登录彩虹易支付平台
* 进入用户中心https://xxxxxx.com/user/userinfo.php?mod=api
* 点击API信息
* 可以复制接口地址、商户ID、商户密钥key
* 点击查看文档了解支持的签名类型一般为MD5
2. 进入Certd后台配置彩虹易支付
* 进入“系统”->"设置"->“支付设置”
* 启用彩虹易支付,选择“彩虹易支付配置”,点击添加
* 填写接口地址、商户ID、商户密钥、签名方式等信息即可。

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

17
docs/deploy/ESXi/index.md Normal file
View File

@@ -0,0 +1,17 @@
# 部署证书到ESXi
使用`部署证书到主机插件`即可
## 开启ssh
登陆ESXi Web后台点击 主机 -> 操作 -> 服务 -> 启用 Secure ShellSSH打开SSH
## 添加部署到主机任务
![img.png](./images/ssh.png)
## 配置重启脚本
```bash
/etc/init.d/hostd restart
/etc/init.d/vpxa restart
```

View File

@@ -3,6 +3,299 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.31.11](https://github.com/certd/certd/compare/v1.31.10...v1.31.11) (2025-04-02)
### Bug Fixes
* 修复ssh支持键盘事件登录 ([8145808](https://github.com/certd/certd/commit/8145808c4370364377b4ffe3ae88ff465b49f20b))
### Performance Improvements
* 支持部署到京东云cdn ([6f17c70](https://github.com/certd/certd/commit/6f17c700b84965baa01b40fe2abaa0a91bcbaffd))
* 支持京东云dns申请证书 ([04d79f9](https://github.com/certd/certd/commit/04d79f9117670be504960b018fd49ae3bf7c1c11))
## [1.31.10](https://github.com/certd/certd/compare/v1.31.9...v1.31.10) (2025-03-29)
### Performance Improvements
* tab增加图标显示 ([a03ae5a](https://github.com/certd/certd/commit/a03ae5a216a1df2c1d3da12ae18dcd0f089a92d3))
* 升级lego版本到4.22.2 ([4e15556](https://github.com/certd/certd/commit/4e15556e5e8100719497edb1729570d5a29668e1))
* 优化华为dns接口报错信息输出 ([bf30b7a](https://github.com/certd/certd/commit/bf30b7afaef623dd8126570344f1fcc2c06f1215))
## [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
* 当前置任务被删除时进行校验 ([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
* 修复部署到阿里云ALB、NLB插件加载混乱的bug ([6ab83b6](https://github.com/certd/certd/commit/6ab83b662a2c5e715b9cb7eb1244de2ebb7f47b0))
* 修复腾讯clb重复执行会报错的bug ([e95d29f](https://github.com/certd/certd/commit/e95d29f446d06eced315a3087fc9e105a30b20bd))
* 修复tg消息内容中存在.和*就会发送失败的bug ([ae5dfc3](https://github.com/certd/certd/commit/ae5dfc3bee950267123ae2fbd1c11e7ce36626ea))
### Performance Improvements
* 创建流水线时,默认成功时也发送通知 ([52ae690](https://github.com/certd/certd/commit/52ae6902d203ca56e0312692b50c55cb6ddd3e39))
* http方式校验选择sftp时支持修改文件访问权限比如777 ([15d6eaf](https://github.com/certd/certd/commit/15d6eaf5532ed25acd4f8d58c429353a2f44206c))
# [1.30.0](https://github.com/certd/certd/compare/v1.29.5...v1.30.0) (2025-01-19)
### Bug Fixes
* 修复查看任务日志偶发性无法自动滚动底部的bug ([7e482f7](https://github.com/certd/certd/commit/7e482f798c0142bce1866f84676cb40210f9638a))
* 修复namesilo ttl太短的问题 ([865f26d](https://github.com/certd/certd/commit/865f26d75c0d3dd4dc8b41448f8830068e45957c))
### Features
* 支持open api接口根据域名获取证书 ([52a4fd3](https://github.com/certd/certd/commit/52a4fd33180e9b3f71b8dc9f7671d7cd8e448c3b))
### Performance Improvements
* 证书仓库 ([91e7f45](https://github.com/certd/certd/commit/91e7f45a1c5ea1e0ec0aa3236b80028f03a6d0aa))
* 支持部署到阿里云ALB ([653940a](https://github.com/certd/certd/commit/653940a0ca64fc380178c1b0b58ae0af64dfaf07))
* 支持部署到阿里云NLB、SLB ([c085bac](https://github.com/certd/certd/commit/c085bac5d877c4250a8a79e17eb8673b8e4fc89c))
* 支持部署到腾讯云直播 ([417d37b](https://github.com/certd/certd/commit/417d37b199b79a42f790f9edab8f178eedf8fbf7))
* 支持部署证书到proxmox ([d10795e](https://github.com/certd/certd/commit/d10795ecd97eb8cf2ffa46aabfdbfc6812636396))
## [1.29.5](https://github.com/certd/certd/compare/v1.29.4...v1.29.5) (2025-01-07)
### Bug Fixes
* 修复复制到本机插件pfx格式复制时报错的bug ([f57116d](https://github.com/certd/certd/commit/f57116d2bebf33e47ad93e0b39c4efe8e4aea25c))
* 修复授权管理点击了查看原文按钮后无法修改值的bug ([85c99f7](https://github.com/certd/certd/commit/85c99f7f80761ac6efaf3255c03b933442db1686))
## [1.29.4](https://github.com/certd/certd/compare/v1.29.3...v1.29.4) (2025-01-06)
### Bug Fixes
* 修复站点监控域名校验无法通过的bug ([1cb4a53](https://github.com/certd/certd/commit/1cb4a539cc523721ffd4b22d40d0e3d2d68cd915))
### Performance Improvements
* 优化腾讯云CLB插件支持非sni情况sni情况支持填写多个域名 ([635b042](https://github.com/certd/certd/commit/635b042690637bff85e97e07c7aac4b87a8a124b))
## [1.29.3](https://github.com/certd/certd/compare/v1.29.2...v1.29.3) (2025-01-04)
### Bug Fixes
* 修复系统级授权无法查看密钥的bug ([8644348](https://github.com/certd/certd/commit/8644348fc41ae2e1672f946ca37e5d3a674e0218))
### Performance Improvements
* 优化站点证书检查页面检查增加3次重试 ([e6dd7cd](https://github.com/certd/certd/commit/e6dd7cd54a3e23897031b5df6e0c3cdc0545d35a))
* 优化acme sdk ([54db744](https://github.com/certd/certd/commit/54db74428259de64d12230c2ab7353ae11197bbc))
* 支持http校验方式申请证书 ([405591c](https://github.com/certd/certd/commit/405591c5d08fa1a3b228ee3980199e7731cfec4a))
* http校验方式支持七牛云oss、阿里云oss、腾讯云cos ([3f74d4d](https://github.com/certd/certd/commit/3f74d4d9e5f5d0e629b44cff1895b3f7a8fbcafc))
## [1.29.2](https://github.com/certd/certd/compare/v1.29.1...v1.29.2) (2024-12-25)
### Bug Fixes
* 修复套餐关闭状态下仍然限制用户流水线数量的bug ([66fb9e5](https://github.com/certd/certd/commit/66fb9e5f49491f9c159363b48af14720a37673b1))
## [1.29.1](https://github.com/certd/certd/compare/v1.29.0...v1.29.1) (2024-12-25)
### Bug Fixes
* 免费套餐支持购买 ([f5ec987](https://github.com/certd/certd/commit/f5ec9870fd6af1f0c9099852bbdb4d07813ccce8))
* 修复某处金额转换丢失精度的bug ([d2d6f12](https://github.com/certd/certd/commit/d2d6f12218cbe7bd55f4ae082b93084be85f0a7b))
* 修复新版本小红点显示错误问题 ([fe4786e](https://github.com/certd/certd/commit/fe4786e168afe03a5243dd67971476c348339809))
### Performance Improvements
* 用户创建证书流水线没有购买套餐或者超限时提前报错 ([472f06c](https://github.com/certd/certd/commit/472f06c2d190d0ae48e8b53c18bc278437656a1c))
* 优化插件名称显示 ([26adf7d](https://github.com/certd/certd/commit/26adf7d437e674385f26a8f92fded6521a620671))
# [1.29.0](https://github.com/certd/certd/compare/v1.28.4...v1.29.0) (2024-12-24)
### Bug Fixes
* 修复手机模式下查询框被文字遮盖的bug ([040788c](https://github.com/certd/certd/commit/040788c793642c3bb2a3ede87fe30fcf3be471bd))
* 修复左侧菜单收起时无法展开子菜单的bug ([0056223](https://github.com/certd/certd/commit/005622307e612717a5408aa1484717ef03003a22))
### Features
* 基础版不再限制流水线数量 ([cb27d4b](https://github.com/certd/certd/commit/cb27d4b4906b2782eaceb0a95bbdc5d0534370d2))
* 套餐购买支持易支付、支付宝支付 ([faa28f8](https://github.com/certd/certd/commit/faa28f88f954cba4c1dd29125562e5acd2fd99af))
* 用户套餐,用户支付功能 ([a019956](https://github.com/certd/certd/commit/a019956698acaf2c4beb620b5ad8c18918ead6a1))
* 站点证书监控 ([9c8c7a7](https://github.com/certd/certd/commit/9c8c7a781223f4217f45510db1e89495600e3cd5))
* 支持微信支付 ([45d6347](https://github.com/certd/certd/commit/45d6347f5b6199493b11aabdd74177f6dca2cea4))
### Performance Improvements
* 调整创建证书表单字段的顺序 ([d393521](https://github.com/certd/certd/commit/d3935219f2aa50d6662c5b5ebf7ee25ad696ab2b))
* 同一时间只允许一个套餐生效 ([8ebf95a](https://github.com/certd/certd/commit/8ebf95a222a900d1707716c7b1f3b39f8a6d8f94))
* 用户名支持修改 ([89c7f07](https://github.com/certd/certd/commit/89c7f070343e86453c84677ebe1669f9b266d871))
* 优化证书申请跳过的状态显示,成功通知现在在跳过时不会发送 ([67d762b](https://github.com/certd/certd/commit/67d762b6a520f1fa24719a124e5ae975a81f5f82))
* 站点证书监控通知发送,每天定时检查 ([bb4910f](https://github.com/certd/certd/commit/bb4910f4e57234e42b44505f4620ae7af66025c5))
* 支持一体证书 ([53c38cf](https://github.com/certd/certd/commit/53c38cf714a6f7486abbf1d71c9f48f56a790100))
* 支持plesk网站证书部署 ([eda45c1](https://github.com/certd/certd/commit/eda45c1528199648b3970505e87f492d398226cd))
## [1.28.4](https://github.com/certd/certd/compare/v1.28.3...v1.28.4) (2024-12-12)
### Bug Fixes
* 修复证书成功通知发送失败的bug ([0f5c690](https://github.com/certd/certd/commit/0f5c69040ba77340c909813220a26bc7ddada3ea))
### Performance Improvements
* 群晖支持6.x ([79f7ec4](https://github.com/certd/certd/commit/79f7ec4672f4fd5744cc45e4a6f104da943f4026))
## [1.28.3](https://github.com/certd/certd/compare/v1.28.2...v1.28.3) (2024-12-12)
### 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
# 会自动打开浏览器,确认正常运行

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@@ -7,16 +7,22 @@ https://afdian.com/a/greper
1. 可加入发电专属群,可以获得作者一对一技术支持
2. 您的需求我们将优先实现,并且将作为专业版功能提供
3. 一年期专业版激活码
4. 赠送国外免费服务器部署方案0成本使用Certd可能需要翻墙不过现在性能越来越差了
## 专业版特权对比
| 功能 | 免费版 | 专业版 |
|---------|------------------------|-----------------------|
| 免费证书申请 | 免费无限制 | 免费无限制 |
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署等 | 支持群晖、宝塔、1Panel等持续开发中 |
| 发邮件功能 | 需要配置 | 免配置 |
| 证书流水线条数 | 10条 | 无限制 |
| 功能 | 免费版 | 专业版 |
|---------|------------------------|-----------------------------|
| 免费证书申请 | 免费无限制 | 免费无限制 |
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署等 | 支持群晖、宝塔、1Panel等持续开发中 |
| 证书流水线条数 | 无限制 | 无限制 |
| 站点证书监控 | 限制1条 | 无限制 |
| 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、飞书、anpush、server酱等 |
## 专业版激活方式
![](./images/plus.png)
发电后,在私信中获取激活码
************************

View File

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

View File

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

View File

@@ -29,6 +29,9 @@
点击确定,等待启动完成
![](./images/2.png)
> certd默认使用sqlite数据库另外支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database)
## 二、访问应用
http://ip:7001
@@ -59,6 +62,7 @@ admin/123456
数据默认保存在`/data/certd`目录下,可以手动备份
### 4.3 自动备份
> 建议配置一条 [数据库备份流水线](../../use/backup/),自动备份

View File

@@ -0,0 +1,73 @@
# 切换数据库
certd支持如下几种数据库
1. sqlite3 (默认)
2. mysql
3. postgresql
您可以按如下两种方式切换数据库
## 一、全新安装
::: tip
以下按照`docker-compose`安装方式介绍如何使用mysql或postgresql数据库
如果您使用其他方式部署,请自行修改对应的环境变量即可。
:::
### 1.1、使用mysql数据库
1. 安装mysql创建数据库 `(注意charset=utf8mb4, collation=utf8mb4_bin)`
2. 下载最新的docker-compose.yaml
3. 修改环境变量配置
```yaml
services:
certd:
environment:
# 使用mysql数据库需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin
- certd_flyway_scriptDir=./db/migration-mysql # 升级脚本目录 【照抄】
- certd_typeorm_dataSource_default_type=mysql # 数据库类型, 或者 mariadb
- certd_typeorm_dataSource_default_host=localhost # 数据库地址
- certd_typeorm_dataSource_default_port=3306 # 数据库端口
- certd_typeorm_dataSource_default_username=root # 用户名
- certd_typeorm_dataSource_default_password=yourpasswd # 密码
- certd_typeorm_dataSource_default_database=certd # 数据库名
```
4. 启动certd
```shell
docker-compose up -d
```
### 1.2、使用Postgresql数据库
1. 安装postgresql创建数据库
2. 下载最新的docker-compose.yaml
3. 修改环境变量配置
```yaml
services:
certd:
environment:
# 使用postgresql数据库需要提前创建数据库
- certd_flyway_scriptDir=./db/migration-pg # 升级脚本目录 【照抄】
- certd_typeorm_dataSource_default_type=postgres # 数据库类型 【照抄】
- certd_typeorm_dataSource_default_host=localhost # 数据库地址
- certd_typeorm_dataSource_default_port=5433 # 数据库端口
- certd_typeorm_dataSource_default_username=postgres # 用户名
- certd_typeorm_dataSource_default_password=yourpasswd # 密码
- certd_typeorm_dataSource_default_database=certd # 数据库名
```
4. 启动certd
```shell
docker-compose up -d
```
## 二、从旧版的sqlite切换数据库
1. 先将`旧certd`升级到最新版 `建议备份sqlite数据库`
2. 按照上面全新安装方式部署一套`新的certd` `注意新旧版本的certd要一致`
3. 使用数据库工具将数据从sqlite导入到mysql或postgresql `注意flyway_history数据表不要导入`
4. 重启新certd
5. 确认没有问题之后删除旧版certd

View File

@@ -42,6 +42,8 @@ docker compose up -d
> 如果提示 没有docker compose命令,请安装docker-compose
> https://docs.docker.com/compose/install/linux/
> 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

@@ -0,0 +1,10 @@
# 证书申请失败情况
## DNS记录问题
1. DNS 不要设置CAA记录删除即可
2. DNSSEC相关报错DNSSEC管理中删除即可
3. DNS 有其他平台申请过的_acme-challenge记录删除即可

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

@@ -1,9 +1,11 @@
# 群晖部署和证书更新
支持群晖`6.x``7.x`
## 一、群晖部署Certd
以下是群晖`7.x`的部署`certd`步骤
以下是群晖`7.x`的部署`certd`步骤
群晖`6.x`请参考[docker部署](./../../install/docker/)
### 1. 打开Container Manager

View File

@@ -24,13 +24,13 @@ features:
- title: 全自动申请证书
details: 支持所有注册商注册的域名
- title: 全自动部署证书
details: 支持部署到主机、阿里云、腾讯云等,目前已支持30+部署插件
details: 支持部署到主机、阿里云、腾讯云等,目前已支持60+部署插件
- title: 多域名、泛域名打到一个证书上
details: 支持通配符域名/泛域名,支持多个域名打到一个证书上
- title: 多证书格式支持
details: 支持pem、pfx、der、jks等多种证书格式支持Google、Letsencrypt、ZeroSSL证书颁发机构
- title: 支持私有化部署
details: 保障数据安全
details: 授权数据加密存储,保障数据安全
- title: 多数据库支持
details: 支持SQLite、Postgresql、MySQL数据库
---

View File

@@ -9,5 +9,5 @@
}
},
"npmClient": "pnpm",
"version": "1.28.4"
"version": "1.32.0"
}

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,128 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.32.0](https://github.com/publishlab/node-acme-client/compare/v1.31.11...v1.32.0) (2025-04-04)
### Bug Fixes
* 修复从本地dns获取记录报错的bug ([c39b1bf](https://github.com/publishlab/node-acme-client/commit/c39b1bf823ddc6216bed2049e4c87e6107def08a))
### Features
* 优化证书申请速度修复某些情况下letsencrypt 校验失败的问题 ([857589b](https://github.com/publishlab/node-acme-client/commit/857589b365c6f709e0ae67914d2f50ce182e6dd6))
### Performance Improvements
* 优化华为dns解析记录创建和删除问题 ([0948c5b](https://github.com/publishlab/node-acme-client/commit/0948c5bc691d2ee6eb47c72a85da1b7453361878))
## [1.31.11](https://github.com/publishlab/node-acme-client/compare/v1.31.10...v1.31.11) (2025-04-02)
**Note:** Version bump only for package @certd/acme-client
## [1.31.10](https://github.com/publishlab/node-acme-client/compare/v1.31.9...v1.31.10) (2025-03-29)
**Note:** Version bump only for package @certd/acme-client
## [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
## [1.30.1](https://github.com/publishlab/node-acme-client/compare/v1.30.0...v1.30.1) (2025-01-20)
**Note:** Version bump only for package @certd/acme-client
# [1.30.0](https://github.com/publishlab/node-acme-client/compare/v1.29.5...v1.30.0) (2025-01-19)
### Bug Fixes
* 修复查看任务日志偶发性无法自动滚动底部的bug ([7e482f7](https://github.com/publishlab/node-acme-client/commit/7e482f798c0142bce1866f84676cb40210f9638a))
## [1.29.5](https://github.com/publishlab/node-acme-client/compare/v1.29.4...v1.29.5) (2025-01-07)
**Note:** Version bump only for package @certd/acme-client
## [1.29.4](https://github.com/publishlab/node-acme-client/compare/v1.29.3...v1.29.4) (2025-01-06)
**Note:** Version bump only for package @certd/acme-client
## [1.29.3](https://github.com/publishlab/node-acme-client/compare/v1.29.2...v1.29.3) (2025-01-04)
### Performance Improvements
* 优化acme sdk ([54db744](https://github.com/publishlab/node-acme-client/commit/54db74428259de64d12230c2ab7353ae11197bbc))
## [1.29.2](https://github.com/publishlab/node-acme-client/compare/v1.29.1...v1.29.2) (2024-12-25)
**Note:** Version bump only for package @certd/acme-client
## [1.29.1](https://github.com/publishlab/node-acme-client/compare/v1.29.0...v1.29.1) (2024-12-25)
**Note:** Version bump only for package @certd/acme-client
# [1.29.0](https://github.com/publishlab/node-acme-client/compare/v1.28.4...v1.29.0) (2024-12-24)
**Note:** Version bump only for package @certd/acme-client
## [1.28.4](https://github.com/publishlab/node-acme-client/compare/v1.28.3...v1.28.4) (2024-12-12)
**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.28.4",
"version": "1.32.0",
"type": "module",
"module": "scr/index.js",
"main": "src/index.js",
@@ -18,7 +18,7 @@
"types"
],
"dependencies": {
"@certd/basic": "^1.28.4",
"@certd/basic": "^1.32.0",
"@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": "c8df9e698c265568e0e5e8b2f352c0599542d744"
"gitHead": "8374c3941a9d1398989b8f38fd4bfa2a2f29937b"
}

View File

@@ -1,10 +1,10 @@
/**
* ACME auto helper
*/
import { readCsrDomains } from './crypto/index.js';
import { log } from './logger.js';
import { wait } from './wait.js';
import { CancelError } from './error.js';
import { readCsrDomains } from "./crypto/index.js";
import { log } from "./logger.js";
import { wait } from "./wait.js";
import { CancelError } from "./error.js";
const defaultOpts = {
@@ -13,13 +13,13 @@ const defaultOpts = {
preferredChain: null,
termsOfServiceAgreed: false,
skipChallengeVerification: false,
challengePriority: ['http-01', 'dns-01'],
challengePriority: ["http-01", "dns-01"],
challengeCreateFn: async () => {
throw new Error('Missing challengeCreateFn()');
throw new Error("Missing challengeCreateFn()");
},
challengeRemoveFn: async () => {
throw new Error('Missing challengeRemoveFn()');
},
throw new Error("Missing challengeRemoveFn()");
}
};
/**
@@ -30,7 +30,7 @@ const defaultOpts = {
* @returns {Promise<buffer>} Certificate
*/
export default async (client, userOpts) => {
export default async (client, userOpts) => {
const opts = { ...defaultOpts, ...userOpts };
const accountPayload = { termsOfServiceAgreed: opts.termsOfServiceAgreed };
@@ -49,14 +49,13 @@ export default async (client, userOpts) => {
* Register account
*/
log('[auto] Checking account');
log("[auto] Checking account");
try {
client.getAccountUrl();
log('[auto] Account URL already exists, skipping account registration');
}
catch (e) {
log('[auto] Registering account');
log("[auto] Account URL already exists, skipping account registration 证书申请账户已存在,跳过注册 ");
} catch (e) {
log("[auto] Registering account (注册证书申请账户)");
await client.createAccount(accountPayload);
}
@@ -64,7 +63,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)));
@@ -74,8 +73,8 @@ export default async (client, userOpts) => {
* Place order
*/
log('[auto] Placing new certificate order with ACME provider');
const orderPayload = { identifiers: uniqueDomains.map((d) => ({ type: 'dns', value: d })) };
log("[auto] Placing new certificate order with ACME provider");
const orderPayload = { identifiers: uniqueDomains.map((d) => ({ type: "dns", value: d })) };
const order = await client.createOrder(orderPayload);
const authorizations = await client.getAuthorizations(order);
@@ -85,99 +84,81 @@ export default async (client, userOpts) => {
* Resolve and satisfy challenges
*/
log('[auto] Resolving and satisfying authorization challenges');
log("[auto] Resolving and satisfying authorization challenges");
const clearTasks = [];
const localVerifyTasks = [];
const completeChallengeTasks = [];
const challengeFunc = async (authz) => {
const d = authz.identifier.value;
let challengeCompleted = false;
/* Skip authz that already has valid status */
if (authz.status === 'valid') {
if (authz.status === "valid") {
log(`[auto] [${d}] Authorization already has valid status, no need to complete challenges`);
return;
}
try {
/* Select challenge based on priority */
const challenge = authz.challenges.sort((a, b) => {
const aidx = opts.challengePriority.indexOf(a.type);
const bidx = opts.challengePriority.indexOf(b.type);
if (aidx === -1) return 1;
if (bidx === -1) return -1;
return aidx - bidx;
}).slice(0, 1)[0];
if (!challenge) {
throw new Error(`Unable to select challenge for ${d}, no challenge found`);
}
log(`[auto] [${d}] Found ${authz.challenges.length} challenges, selected type: ${challenge.type}`);
/* Trigger challengeCreateFn() */
log(`[auto] [${d}] Trigger challengeCreateFn()`);
const keyAuthorization = await client.getChallengeKeyAuthorization(challenge);
const keyAuthorizationGetter = async (challenge) => {
return await client.getChallengeKeyAuthorization(challenge);
};
async function deactivateAuth(e) {
log(`[auto] [${d}] Unable to complete challenge: ${e.message}`);
try {
const { recordReq, recordRes, dnsProvider } = await opts.challengeCreateFn(authz, challenge, keyAuthorization);
log(`[auto] [${d}] challengeCreateFn success`);
log(`[auto] [${d}] add challengeRemoveFn()`);
clearTasks.push(async () => {
/* Trigger challengeRemoveFn(), suppress errors */
log(`[auto] [${d}] Trigger challengeRemoveFn()`);
try {
await opts.challengeRemoveFn(authz, challenge, keyAuthorization, recordReq, recordRes, dnsProvider);
}
catch (e) {
log(`[auto] [${d}] challengeRemoveFn threw error: ${e.message}`);
}
});
// throw new Error('测试异常');
/* Challenge verification */
if (opts.skipChallengeVerification === true) {
log(`[auto] [${d}] Skipping challenge verification since skipChallengeVerification=truewait 60s`);
await wait(60 * 1000);
}
else {
log(`[auto] [${d}] Running challenge verification`);
try {
await client.verifyChallenge(authz, challenge);
}
catch (e) {
log(`[auto] [${d}] challenge verification threw error: ${e.message}`);
}
}
/* Complete challenge and wait for valid status */
log(`[auto] [${d}] Completing challenge with ACME provider and waiting for valid status`);
await client.completeChallenge(challenge);
challengeCompleted = true;
await client.waitForValidStatus(challenge);
}
catch (e) {
log(`[auto] [${d}] challengeCreateFn threw error: ${e.message}`);
throw e;
log(`[auto] [${d}] Deactivating failed authorization`);
await client.deactivateAuthorization(authz);
} catch (f) {
/* Suppress deactivateAuthorization() errors */
log(`[auto] [${d}] Authorization deactivation threw error: ${f.message}`);
}
}
catch (e) {
/* Deactivate pending authz when unable to complete challenge */
if (!challengeCompleted) {
log(`[auto] [${d}] Unable to complete challenge: ${e.message}`);
log(`[auto] [${d}] Trigger challengeCreateFn()`);
try {
const { recordReq, recordRes, dnsProvider, challenge, keyAuthorization } = await opts.challengeCreateFn(authz, keyAuthorizationGetter);
clearTasks.push(async () => {
/* Trigger challengeRemoveFn(), suppress errors */
log(`[auto] [${d}] Trigger challengeRemoveFn()`);
try {
log(`[auto] [${d}] Deactivating failed authorization`);
await client.deactivateAuthorization(authz);
await opts.challengeRemoveFn(authz, challenge, keyAuthorization, recordReq, recordRes, dnsProvider);
} catch (e) {
log(`[auto] [${d}] challengeRemoveFn threw error: ${e.message}`);
}
catch (f) {
/* Suppress deactivateAuthorization() errors */
log(`[auto] [${d}] Authorization deactivation threw error: ${f.message}`);
}
}
});
localVerifyTasks.push(async () => {
/* Challenge verification */
log(`[auto] [${d}] 开始本地验证, type = ${challenge.type}`);
try {
await client.verifyChallenge(authz, challenge);
} catch (e) {
log(`[auto] [${d}] 本地验证失败尝试请求ACME提供商获取状态: ${e.message}`);
}
});
completeChallengeTasks.push(async () => {
/* Complete challenge and wait for valid status */
log(`[auto] [${d}] 请求ACME提供商完成验证`);
try{
await client.completeChallenge(challenge);
}catch (e) {
await deactivateAuth(e);
throw e;
}
challengeCompleted = true;
log(`[auto] [${d}] 等待返回valid状态`);
await client.waitForValidStatus(challenge,d);
});
} catch (e) {
log(`[auto] [${d}] challengeCreateFn threw error: ${e.message}`);
await deactivateAuth(e);
throw e;
}
};
const domainSets = [];
@@ -185,7 +166,7 @@ export default async (client, userOpts) => {
const d = authz.identifier.value;
log(`authorization:domain = ${d}, value = ${JSON.stringify(authz)}`);
if (authz.status === 'valid') {
if (authz.status === "valid") {
log(`[auto] [${d}] Authorization already has valid status, no need to complete challenges`);
return;
}
@@ -209,8 +190,9 @@ export default async (client, userOpts) => {
const allChallengePromises = [];
// eslint-disable-next-line no-restricted-syntax
const challengePromises = [];
allChallengePromises.push(challengePromises);
for (const domainSet of domainSets) {
const challengePromises = [];
// eslint-disable-next-line guard-for-in,no-restricted-syntax
for (const domain in domainSet) {
const authz = domainSet[domain];
@@ -219,12 +201,11 @@ export default async (client, userOpts) => {
await challengeFunc(authz);
});
}
allChallengePromises.push(challengePromises);
}
log(`[auto] challengeGroups:${allChallengePromises.length}`);
function runAllPromise(tasks) {
async function runAllPromise(tasks) {
let promise = Promise.resolve();
tasks.forEach((task) => {
promise = promise.then(task);
@@ -232,73 +213,60 @@ export default async (client, userOpts) => {
return promise;
}
async function runPromisePa(tasks) {
async function runPromisePa(tasks, waitTime = 5000) {
const results = [];
// eslint-disable-next-line no-await-in-loop,no-restricted-syntax
for (const task of tasks) {
results.push(task());
// eslint-disable-next-line no-await-in-loop
await wait(10000);
await wait(waitTime);
}
return Promise.all(results);
}
try {
log(`开始challenge${allChallengePromises.length}`);
let i = 0;
// eslint-disable-next-line no-restricted-syntax
for (const challengePromises of allChallengePromises) {
i += 1;
log(`开始第${i}`);
if (opts.signal && opts.signal.aborted) {
throw new CancelError('用户取消');
log(`开始challenge${allChallengePromises.length}`);
let i = 0;
// eslint-disable-next-line no-restricted-syntax
for (const challengePromises of allChallengePromises) {
i += 1;
log(`开始第${i}`);
if (opts.signal && opts.signal.aborted) {
throw new CancelError("用户取消");
}
try {
// eslint-disable-next-line no-await-in-loop
await runPromisePa(challengePromises);
if (opts.skipChallengeVerification === true) {
log(`跳过本地验证skipChallengeVerification=true等待 60s`);
await wait(60 * 1000);
} else {
await runPromisePa(localVerifyTasks, 1000);
log("本地校验完成等待30s")
await wait(30 * 1000)
}
try {
// eslint-disable-next-line no-await-in-loop
await runPromisePa(challengePromises);
}
catch (e) {
log(`证书申请失败${e.message}`);
throw e;
}
finally {
if (client.opts.sslProvider !== 'google') {
// letsencrypt 如果同时检出两个TXT记录会以第一个为准就会校验失败所以需要提前删除
// zerossl 此方式测试无问题
log(`清理challenge痕迹length:${clearTasks.length}`);
try {
// eslint-disable-next-line no-await-in-loop
await runAllPromise(clearTasks);
}
catch (e) {
log('清理challenge失败');
log(e);
}
}
}
}
}
finally {
if (client.opts.sslProvider === 'google') {
// google 相同的域名txt记录是一样的不能提前删除否则校验失败报错如下
// Error: The TXT record retrieved from _acme-challenge.bbc.handsfree.work.
// at the time the challenge was validated did not contain JshHVu7dt_DT6uYILWhokHefFVad2Q6Mw1L-fNZFcq8
// (the base64url-encoded SHA-256 digest of RlJZNBR0LWnxNK_xd2zqtYVvCiNJOKJ3J1NmCjU_9BjaUJgL3k-qSpIhQ-uF4FBS.NRyqT8fRiq6THzzrvkgzgR5Xai2LsA2SyGLAq_wT3qc).
// See https://tools.ietf.org/html/rfc8555#section-8.4 for more information.
log("开始向提供商请求挑战验证");
await runPromisePa(completeChallengeTasks, 1000);
} catch (e) {
log(`证书申请失败${e.message}`);
throw e;
} finally {
// letsencrypt 如果同时检出两个TXT记录会以第一个为准就会校验失败所以需要提前删除
// zerossl 此方式测试无问题
log(`清理challenge痕迹length:${clearTasks.length}`);
try {
// eslint-disable-next-line no-await-in-loop
// eslint-disable-next-line no-await-in-loop
await runAllPromise(clearTasks);
}
catch (e) {
log('清理challenge失败');
} catch (e) {
log("清理challenge失败");
log(e);
}
}
}
log('challenge结束');
log("challenge结束");
// log('[auto] Waiting for challenge valid status');
// await Promise.all(challengePromises);
@@ -306,7 +274,7 @@ export default async (client, userOpts) => {
* Finalize order and download certificate
*/
log('[auto] Finalizing order and downloading certificate');
log("[auto] Finalizing order and downloading certificate");
const finalized = await client.finalizeOrder(order, opts.csr);
const res = await client.getCertificate(finalized, opts.preferredChain);
return res;

View File

@@ -126,6 +126,7 @@ instance.interceptors.response.use(null, async (error) => {
/* Wait and retry the request */
await new Promise((resolve) => { setTimeout(resolve, (retryAfter * 1000)); });
log(`Retrying request to URL ${config.url}`);
return instance(config);
}
}

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);
}
@@ -554,9 +554,9 @@ class AcmeClient {
* ```
*/
async waitForValidStatus(item) {
async waitForValidStatus(item,d) {
if (!item.url) {
throw new Error('Unable to verify status of item, URL not found');
throw new Error(`[${d}] Unable to verify status of item, URL not found`);
}
const verifyFn = async (abort) => {
@@ -568,23 +568,23 @@ class AcmeClient {
const resp = await this.api.apiRequest(item.url, null, [200]);
/* Verify status */
log(`Item has status: ${resp.data.status}`);
log(`[${d}] 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(`[${d}] Operation is pending or processing(当前仍然在等待状态)`);
}
else if (validStates.includes(resp.data.status)) {
return resp.data;
}
throw new Error(`Unexpected item status: ${resp.data.status}`);
throw new Error(`[${d}] Unexpected item status: ${resp.data.status}`);
};
log(`Waiting for valid status from: ${item.url}`, this.backoffOpts);
log(`[${d}] Waiting for valid status 等待valid状态: ${item.url}`, this.backoffOpts);
return util.retry(verifyFn, this.backoffOpts);
}

View File

@@ -5,3 +5,5 @@ export class CancelError extends Error {
}
}

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);
@@ -218,15 +219,15 @@ function formatResponseError(resp) {
async function resolveDomainBySoaRecord(recordName) {
try {
await dns.resolveSoa(recordName);
log(`Found SOA record, considering domain to be: ${recordName}`);
log(`找到${recordName}的SOA记录`);
return recordName;
}
catch (e) {
log(`Unable to locate SOA record for name: ${recordName}`);
log(`找不到${recordName}的SOA记录,继续往主域名查找`);
const parentRecordName = recordName.split('.').slice(1).join('.');
if (!parentRecordName.includes('.')) {
throw new Error('Unable to resolve domain by SOA record');
throw new Error('SOA record查找失败');
}
return resolveDomainBySoaRecord(parentRecordName);
@@ -241,7 +242,7 @@ async function resolveDomainBySoaRecord(recordName) {
*/
async function getAuthoritativeDnsResolver(recordName) {
log(`Locating authoritative NS records for name: ${recordName}`);
log(`获取域名${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(`获取到权威NS服务器name: ${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

@@ -48,55 +48,85 @@ async function verifyHttpChallenge(authz, challenge, keyAuthorization, suffix =
* Walk DNS until TXT records are found
*/
async function walkDnsChallengeRecord(recordName, resolver = dns) {
/* Resolve CNAME record first */
// try {
// log(`Checking name for CNAME records: ${recordName}`);
// const cnameRecords = await resolver.resolveCname(recordName);
//
// if (cnameRecords.length) {
// log(`CNAME record found at ${recordName}, new challenge record name: ${cnameRecords[0]}`);
// return walkDnsChallengeRecord(cnameRecords[0]);
// }
// }
// catch (e) {
// log(`No CNAME records found for name: ${recordName}`);
// }
async function walkDnsChallengeRecord(recordName, resolver = dns,deep = 0) {
let records = [];
/* Resolve TXT records */
try {
log(`Checking name for TXT records: ${recordName}`);
log(`检查域名 ${recordName} 的TXT记录`);
const txtRecords = await resolver.resolveTxt(recordName);
if (txtRecords && txtRecords.length) {
log(`Found ${txtRecords.length} TXT records at ${recordName}`);
log(`找到 ${txtRecords.length} TXT记录( ${recordName}`);
log(`TXT records: ${JSON.stringify(txtRecords)}`);
return [].concat(...txtRecords);
records = records.concat(...txtRecords);
}
return [];
} catch (e) {
log(`解析 TXT 记录出错, ${recordName} :${e.message}`);
}
catch (e) {
log(`Resolve TXT records error, ${recordName} :${e.message}`);
throw e;
/* Resolve CNAME record first */
try {
log(`检查是否存在CNAME映射: ${recordName}`);
const cnameRecords = await resolver.resolveCname(recordName);
if (cnameRecords.length) {
const cnameRecord = cnameRecords[0];
log(`已找到${recordName}的CNAME记录将检查: ${cnameRecord}`);
let res= await walkTxtRecord(cnameRecord,deep+1);
if (res && res.length) {
log(`从CNAME中找到TXT记录: ${JSON.stringify(res)}`);
records = records.concat(...res);
}
}else{
log(`没有CNAME映射${recordName}`);
}
} catch (e) {
log(`检查CNAME出错${recordName} :${e.message}`);
}
return records
}
export async function walkTxtRecord(recordName) {
export async function walkTxtRecord(recordName,deep = 0) {
if(deep >5){
log(`walkTxtRecord too deep (#${deep}) , skip walk`)
return []
}
const txtRecords = []
try {
/* Default DNS resolver first */
log('Attempting to resolve TXT with default DNS resolver first');
const res = await walkDnsChallengeRecord(recordName);
log('从本地DNS服务器获取TXT解析记录');
const res = await walkDnsChallengeRecord(recordName,dns,deep);
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,deep);
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 +143,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记录${recordValues}`);
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}:${keyAuthorization},校验成功, ACME challenge verified`);
return true;
}

View File

@@ -4,6 +4,8 @@
import { AxiosInstance } from 'axios';
import * as rfc8555 from './rfc8555';
import {CancelError} from '../src/error.js'
export * from '../src/error.js'
export type PrivateKeyBuffer = Buffer;
export type PublicKeyBuffer = Buffer;
@@ -56,7 +58,7 @@ export interface ClientExternalAccountBindingOptions {
export interface ClientAutoOptions {
csr: CsrBuffer | CsrString;
challengeCreateFn: (authz: Authorization, challenge: rfc8555.Challenge, keyAuthorization: string) => Promise<{recordReq:any,recordRes:any,dnsProvider:any}>;
challengeCreateFn: (authz: Authorization, keyAuthorization: (challenge:rfc8555.Challenge)=>Promise<string>) => Promise<{recordReq?:any,recordRes?:any,dnsProvider?:any,challenge: rfc8555.Challenge,keyAuthorization:string}>;
challengeRemoveFn: (authz: Authorization, challenge: rfc8555.Challenge, keyAuthorization: string,recordReq:any, recordRes:any,dnsProvider:any) => Promise<any>;
email?: string;
termsOfServiceAgreed?: boolean;
@@ -202,4 +204,4 @@ export function setLogger(fn: (message: any, ...args: any[]) => void): void;
export function walkTxtRecord(record: any): Promise<string[]>;
export const CancelError: Error;
export const CancelError: typeof CancelError;

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,129 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.32.0](https://github.com/certd/certd/compare/v1.31.11...v1.32.0) (2025-04-04)
**Note:** Version bump only for package @certd/basic
## [1.31.11](https://github.com/certd/certd/compare/v1.31.10...v1.31.11) (2025-04-02)
**Note:** Version bump only for package @certd/basic
## [1.31.10](https://github.com/certd/certd/compare/v1.31.9...v1.31.10) (2025-03-29)
**Note:** Version bump only for package @certd/basic
## [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
## [1.30.1](https://github.com/certd/certd/compare/v1.30.0...v1.30.1) (2025-01-20)
**Note:** Version bump only for package @certd/basic
# [1.30.0](https://github.com/certd/certd/compare/v1.29.5...v1.30.0) (2025-01-19)
**Note:** Version bump only for package @certd/basic
## [1.29.5](https://github.com/certd/certd/compare/v1.29.4...v1.29.5) (2025-01-07)
**Note:** Version bump only for package @certd/basic
## [1.29.4](https://github.com/certd/certd/compare/v1.29.3...v1.29.4) (2025-01-06)
**Note:** Version bump only for package @certd/basic
## [1.29.3](https://github.com/certd/certd/compare/v1.29.2...v1.29.3) (2025-01-04)
**Note:** Version bump only for package @certd/basic
## [1.29.2](https://github.com/certd/certd/compare/v1.29.1...v1.29.2) (2024-12-25)
**Note:** Version bump only for package @certd/basic
## [1.29.1](https://github.com/certd/certd/compare/v1.29.0...v1.29.1) (2024-12-25)
### Bug Fixes
* 修复某处金额转换丢失精度的bug ([d2d6f12](https://github.com/certd/certd/commit/d2d6f12218cbe7bd55f4ae082b93084be85f0a7b))
# [1.29.0](https://github.com/certd/certd/compare/v1.28.4...v1.29.0) (2024-12-24)
### Features
* 用户套餐,用户支付功能 ([a019956](https://github.com/certd/certd/commit/a019956698acaf2c4beb620b5ad8c18918ead6a1))
* 支持微信支付 ([45d6347](https://github.com/certd/certd/commit/45d6347f5b6199493b11aabdd74177f6dca2cea4))
### Performance Improvements
* 站点证书监控通知发送,每天定时检查 ([bb4910f](https://github.com/certd/certd/commit/bb4910f4e57234e42b44505f4620ae7af66025c5))
* 支持plesk网站证书部署 ([eda45c1](https://github.com/certd/certd/commit/eda45c1528199648b3970505e87f492d398226cd))
## [1.28.4](https://github.com/certd/certd/compare/v1.28.3...v1.28.4) (2024-12-12)
**Note:** Version bump only for package @certd/basic

View File

@@ -1 +1 @@
00:08
01:33

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/basic",
"private": false,
"version": "1.28.4",
"version": "1.32.0",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -23,6 +23,7 @@
"lodash-es": "^4.17.21",
"log4js": "^6.9.1",
"lru-cache": "^10.0.0",
"mitt": "^3.0.1",
"nanoid": "^5.0.7",
"node-forge": "^1.3.1",
"nodemailer": "^6.9.3"
@@ -32,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",
@@ -43,5 +44,5 @@
"tslib": "^2.8.1",
"typescript": "^5.4.2"
},
"gitHead": "c8df9e698c265568e0e5e8b2f352c0599542d744"
"gitHead": "8374c3941a9d1398989b8f38fd4bfa2a2f29937b"
}

View File

@@ -8,6 +8,11 @@ export * from './util.hash.js';
export * from './util.merge.js';
export * from './util.cache.js';
export * from './util.string.js';
export * from './util.lock.js';
export * from './util.mitter.js';
export * from './util.id.js';
export * from './util.domain.js';
export * from './util.amount.js';
import { stringUtils } from './util.string.js';
import sleep from './util.sleep.js';
import { http, download } from './util.request.js';
@@ -22,8 +27,13 @@ import { cache } from './util.cache.js';
import dayjs from 'dayjs';
import { domainUtils } from './util.domain.js';
import { optionsUtils } from './util.options.js';
import { amountUtils } from './util.amount.js';
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,
@@ -41,4 +51,8 @@ export const utils = {
domain: domainUtils,
options: optionsUtils,
string: stringUtils,
locker,
mitter,
amount: amountUtils,
request,
};

View File

@@ -0,0 +1,9 @@
export const amountUtils = {
toCent(amount: number): number {
return parseInt((amount * 100).toFixed(0));
},
toYuan(amount: number): number {
return parseFloat((amount / 100).toFixed(2));
},
};

View File

@@ -1,4 +1,4 @@
export function isDev() {
const nodeEnv = process.env.NODE_ENV || '';
return nodeEnv === 'development' || nodeEnv.indexOf('local') >= 0;
return nodeEnv === 'development' || nodeEnv.includes('local') || nodeEnv.startsWith('dev');
}

View File

@@ -1,9 +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, 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

@@ -0,0 +1,47 @@
import { logger, utils } from './index.js';
export class Locker {
locked: Record<string, any> = {};
async execute(lockStr: string, callback: any) {
await this.lock(lockStr);
const timeoutId = setTimeout(() => {
logger.warn('Lock timeout,自动解锁', lockStr);
this.unlock(lockStr);
}, 20000);
try {
return await callback();
} finally {
clearTimeout(timeoutId);
this.unlock(lockStr);
}
}
async lock(str: string) {
const isLocked = this.isLocked(str);
if (isLocked) {
let count = 0;
while (true) {
await utils.sleep(100);
if (!this.isLocked(str)) {
break;
}
count++;
if (count > 20) {
throw new Error('Lock timeout');
}
}
}
this.locked[str] = true;
}
unlock(str: string) {
delete this.locked[str];
}
isLocked(str: string) {
return this.locked[str] ?? false;
}
}
export const locker = new Locker();

View File

@@ -0,0 +1,2 @@
import mitt from 'mitt';
export const mitter = mitt();

View File

@@ -37,6 +37,8 @@ function buildGroupOptions(options: any[], inDomains: string[]) {
}
export const optionsUtils = {
//获取分组
groupByDomain,
//构建分组后的选项列表,常用
buildGroupOptions,
};

View File

@@ -1,4 +1,4 @@
import axios, { AxiosRequestConfig } from 'axios';
import axios, { AxiosHeaders, AxiosRequestConfig } from 'axios';
import { ILogger, logger } from './util.log.js';
import { Logger } from 'log4js';
import { HttpProxyAgent } from 'http-proxy-agent';
@@ -13,7 +13,7 @@ export class HttpError extends Error {
statusText?: string;
code?: string;
request?: { baseURL: string; url: string; method: string; params?: any; data?: any };
response?: { data: any };
response?: { data: any; headers: AxiosHeaders };
cause?: any;
constructor(error: any) {
if (!error) {
@@ -55,6 +55,7 @@ export class HttpError extends Error {
this.response = {
data: error.response?.data,
headers: error.response?.headers,
};
const { stack, cause } = error;
@@ -156,13 +157,13 @@ export function createAxiosService({ logger }: { logger: Logger }) {
error.message = '请求错误';
break;
case 401:
error.message = '未授权,请登录';
error.message = '认证/登录失败';
break;
case 403:
error.message = '拒绝访问';
break;
case 404:
error.message = `请求地址出错: ${error.response.config.url}`;
error.message = `请求地址出错`;
break;
case 408:
error.message = '请求超时';
@@ -216,6 +217,7 @@ export type HttpRequestConfig<D = any> = {
logParams?: boolean;
logRes?: boolean;
httpProxy?: string;
returnResponse?: boolean;
} & AxiosRequestConfig<D>;
export type HttpClient = {
request<D = any, R = any>(config: HttpRequestConfig<D>): Promise<HttpClientResponse<R>>;
@@ -308,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,145 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.32.0](https://github.com/certd/certd/compare/v1.31.11...v1.32.0) (2025-04-04)
**Note:** Version bump only for package @certd/pipeline
## [1.31.11](https://github.com/certd/certd/compare/v1.31.10...v1.31.11) (2025-04-02)
### Performance Improvements
* 支持部署到京东云cdn ([6f17c70](https://github.com/certd/certd/commit/6f17c700b84965baa01b40fe2abaa0a91bcbaffd))
## [1.31.10](https://github.com/certd/certd/compare/v1.31.9...v1.31.10) (2025-03-29)
### Performance Improvements
* tab增加图标显示 ([a03ae5a](https://github.com/certd/certd/commit/a03ae5a216a1df2c1d3da12ae18dcd0f089a92d3))
## [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
## [1.30.1](https://github.com/certd/certd/compare/v1.30.0...v1.30.1) (2025-01-20)
### Bug Fixes
* 修复tg消息内容中存在.和*就会发送失败的bug ([ae5dfc3](https://github.com/certd/certd/commit/ae5dfc3bee950267123ae2fbd1c11e7ce36626ea))
# [1.30.0](https://github.com/certd/certd/compare/v1.29.5...v1.30.0) (2025-01-19)
### Performance Improvements
* 证书仓库 ([91e7f45](https://github.com/certd/certd/commit/91e7f45a1c5ea1e0ec0aa3236b80028f03a6d0aa))
## [1.29.5](https://github.com/certd/certd/compare/v1.29.4...v1.29.5) (2025-01-07)
**Note:** Version bump only for package @certd/pipeline
## [1.29.4](https://github.com/certd/certd/compare/v1.29.3...v1.29.4) (2025-01-06)
**Note:** Version bump only for package @certd/pipeline
## [1.29.3](https://github.com/certd/certd/compare/v1.29.2...v1.29.3) (2025-01-04)
### Performance Improvements
* 支持http校验方式申请证书 ([405591c](https://github.com/certd/certd/commit/405591c5d08fa1a3b228ee3980199e7731cfec4a))
## [1.29.2](https://github.com/certd/certd/compare/v1.29.1...v1.29.2) (2024-12-25)
**Note:** Version bump only for package @certd/pipeline
## [1.29.1](https://github.com/certd/certd/compare/v1.29.0...v1.29.1) (2024-12-25)
### Performance Improvements
* 用户创建证书流水线没有购买套餐或者超限时提前报错 ([472f06c](https://github.com/certd/certd/commit/472f06c2d190d0ae48e8b53c18bc278437656a1c))
# [1.29.0](https://github.com/certd/certd/compare/v1.28.4...v1.29.0) (2024-12-24)
### Features
* 套餐购买支持易支付、支付宝支付 ([faa28f8](https://github.com/certd/certd/commit/faa28f88f954cba4c1dd29125562e5acd2fd99af))
* 支持微信支付 ([45d6347](https://github.com/certd/certd/commit/45d6347f5b6199493b11aabdd74177f6dca2cea4))
### Performance Improvements
* 同一时间只允许一个套餐生效 ([8ebf95a](https://github.com/certd/certd/commit/8ebf95a222a900d1707716c7b1f3b39f8a6d8f94))
* 优化证书申请跳过的状态显示,成功通知现在在跳过时不会发送 ([67d762b](https://github.com/certd/certd/commit/67d762b6a520f1fa24719a124e5ae975a81f5f82))
* 支持plesk网站证书部署 ([eda45c1](https://github.com/certd/certd/commit/eda45c1528199648b3970505e87f492d398226cd))
## [1.28.4](https://github.com/certd/certd/compare/v1.28.3...v1.28.4) (2024-12-12)
### Bug Fixes

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/pipeline",
"private": false,
"version": "1.28.4",
"version": "1.32.0",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -16,8 +16,8 @@
"test": "mocha --loader=ts-node/esm"
},
"dependencies": {
"@certd/basic": "^1.28.4",
"@certd/plus-core": "^1.28.4",
"@certd/basic": "^1.32.0",
"@certd/plus-core": "^1.32.0",
"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": "c8df9e698c265568e0e5e8b2f352c0599542d744"
"gitHead": "8374c3941a9d1398989b8f38fd4bfa2a2f29937b"
}

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,10 +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 = {
//系统标题
@@ -31,6 +33,7 @@ export type ExecutorOptions = {
user: UserInfo;
baseURL?: string;
sysInfo?: SysInfo;
serviceGetter: IServiceGetter;
};
export class Executor {
@@ -92,20 +95,30 @@ export class Executor {
await this.onChanged(this.runtime);
}, 5000);
await this.runWithHistory(this.pipeline, "pipeline", async () => {
const result = await this.runWithHistory(this.pipeline, "pipeline", async () => {
return await this.runStages(this.pipeline);
});
if (this.lastRuntime && this.lastRuntime.pipeline.status?.status === ResultType.error) {
await this.notification("turnToSuccess");
if (result === ResultType.success) {
if (this.lastRuntime && this.lastRuntime.pipeline.status?.status === ResultType.error) {
await this.notification("turnToSuccess");
} else {
await this.notification("success");
}
}
await this.notification("success");
return result;
} catch (e: any) {
await this.notification("error", e);
this.logger.error("pipeline 执行失败", e);
} finally {
clearInterval(intervalFlushLogId);
await this.onChanged(this.runtime);
await this.pipelineContext.setObj("lastRuntime", this.runtime);
//保存之前移除logs
const lastRuntime: any = {
...this.runtime,
};
delete lastRuntime.logs;
delete lastRuntime._loggers;
await this.pipelineContext.setObj("lastRuntime", lastRuntime);
this.logger.info(`pipeline.${this.pipeline.id} end`);
}
}
@@ -181,6 +194,8 @@ export class Executor {
}
let resList: ResultType[] = [];
const errorList: ResultError[] = [];
let errorMessage = "";
if (stage.concurrency === ConcurrencyStrategy.Parallel) {
//并行
const pList = [];
@@ -189,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);
@@ -332,11 +362,16 @@ export class Executor {
signal: this.abort.signal,
utils,
user: this.options.user,
emitter: taskEmitterCreate({
step,
pipeline: this.pipeline,
}),
serviceGetter: this.options.serviceGetter,
};
instance.setCtx(taskCtx);
await instance.onInstance();
await instance.execute();
const result = await instance.execute();
//执行结果处理
if (instance._result.clearLastStatus) {
//是否需要清除所有状态
@@ -364,6 +399,8 @@ export class Executor {
merge(vars, instance._result.pipelinePrivateVars);
await this.pipelineContext.setObj("privateVars", vars);
}
return result;
}
async notification(when: NotificationWhen, error?: any) {
@@ -385,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错误详情:${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;
}
@@ -418,7 +464,7 @@ export class Executor {
content,
userId: this.pipeline.userId,
pipeline: this.pipeline,
result: this.lastRuntime.pipeline.status,
result: this.lastRuntime?.pipeline?.status,
pipelineId: this.pipeline.id,
historyId: this.runtime.id,
errorMessage,

View File

@@ -134,6 +134,7 @@ export class RunHistory {
export class RunnableCollection {
private collection: RunnableMap = {};
private pipeline!: Pipeline;
currentStep!: Step;
constructor(pipeline?: Pipeline) {
if (!pipeline) {
return;
@@ -143,6 +144,23 @@ export class RunnableCollection {
this.collection = map;
}
static initPipelineRunnableType(pipeline: Pipeline) {
pipeline.runnableType = "pipeline";
if (pipeline.stages === undefined) {
pipeline.stages = [];
return;
}
pipeline.stages.forEach((stage) => {
stage.runnableType = "stage";
stage.tasks.forEach((task) => {
task.runnableType = "task";
task.steps.forEach((step) => {
step.runnableType = "step";
});
});
});
}
static each<T extends Runnable>(list: T[], exec: (item: Runnable) => void) {
list.forEach((item) => {
exec(item);
@@ -193,5 +211,8 @@ export class RunnableCollection {
add(runnable: Runnable) {
this.collection[runnable.id] = runnable;
if (runnable.runnableType === "step") {
this.currentStep = runnable as Step;
}
}
}

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,13 +119,15 @@ export abstract class BaseNotification implements INotification {
}
async onTestRequest() {
await this.doSend({
return await this.doSend({
userId: 0,
title: "【Certd】测试通知标题长度测试、测试、测试",
content: "测试通知",
title: "【Certd】测试通知【*.foo.com】,标题长度测试、测试、测试",
content: `测试通知,*.foo.com
换行测试
`,
pipeline: {
id: 1,
title: "测试流水线",
title: "证书申请成功【测试流水线",
} as any,
pipelineId: 1,
historyId: 1,

View File

@@ -2,14 +2,15 @@ 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";
import dayjs from "dayjs";
import { IPluginConfigService } from "../service/config";
import { IPluginConfigService } from "../service/config.js";
import { upperFirst } from "lodash-es";
import { INotificationService } from "../notification";
import { INotificationService } from "../notification/index.js";
import { TaskEmitter } from "../service/emit.js";
export type PluginRequestHandleReq<T = any> = {
typeName: string;
@@ -54,12 +55,20 @@ export type PluginDefine = Registrable & {
[key: string]: any;
};
shortcut?: {
[key: string]: {
title: string;
icon: string;
action: string;
form: any;
};
};
needPlus?: boolean;
};
export type ITaskPlugin = {
onInstance(): Promise<void>;
execute(): Promise<void>;
execute(): Promise<void | string>;
onRequest(req: PluginRequestHandleReq<any>): Promise<any>;
[key: string]: any;
};
@@ -111,6 +120,11 @@ export type TaskInstanceContext = {
utils: typeof utils;
//用户信息
user: UserInfo;
emitter: TaskEmitter;
//service 容器
serviceGetter?: IServiceGetter;
};
export abstract class AbstractTaskPlugin implements ITaskPlugin {
@@ -184,13 +198,13 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin {
return;
}
abstract execute(): Promise<void>;
abstract execute(): Promise<void | string>;
appendTimeSuffix(name?: string) {
if (name == null) {
name = "certd";
}
return name + "_" + dayjs().format("YYYYMMDDHHmmss");
return name + "_" + dayjs().format("YYYYMMDDHHmmssSSS");
}
async onRequest(req: PluginRequestHandleReq<any>) {
@@ -218,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

@@ -6,24 +6,28 @@ export class PluginGroup {
desc?: string;
order: number;
plugins: PluginDefine[];
constructor(key: string, title: string, order = 0, desc = "") {
icon?: string;
constructor(key: string, title: string, order = 0, icon = "") {
this.key = key;
this.title = title;
this.order = order;
this.desc = desc;
this.icon = icon;
this.plugins = [];
}
}
export const pluginGroups = {
cert: new PluginGroup("cert", "证书申请", 1),
aliyun: new PluginGroup("aliyun", "阿里云", 2),
huawei: new PluginGroup("huawei", "华为云", 3),
tencent: new PluginGroup("tencent", "腾讯云", 4),
qiniu: new PluginGroup("qiniu", "七牛云", 5),
aws: new PluginGroup("aws", "亚马逊云", 6),
host: new PluginGroup("host", "主机", 7),
cdn: new PluginGroup("cdn", "CDN", 8),
panel: new PluginGroup("panel", "面板", 9),
other: new PluginGroup("other", "其他", 10),
cert: new PluginGroup("cert", "证书申请", 1, "ph:certificate"),
host: new PluginGroup("host", "主机", 2, "clarity:host-line"),
cdn: new PluginGroup("cdn", "CDN", 2, "svg:icon-cdn"),
panel: new PluginGroup("panel", "面板", 2, "fluent:panel-left-header-32-filled"),
aliyun: new PluginGroup("aliyun", "阿里云", 2, "svg:icon-aliyun"),
huawei: new PluginGroup("huawei", "华为云", 3, "svg:icon-huawei"),
tencent: new PluginGroup("tencent", "腾讯云", 4, "svg:icon-tencentcloud"),
volcengine: new PluginGroup("volcengine", "火山引擎", 4, "svg:icon-volcengine"),
jdcloud: new PluginGroup("jdcloud", "京东云", 4, "svg:icon-jdcloud"),
qiniu: new PluginGroup("qiniu", "七牛云", 5, "svg:icon-qiniuyun"),
aws: new PluginGroup("aws", "亚马逊云", 6, "svg:icon-aws"),
other: new PluginGroup("other", "其他", 10, "clarity:plugin-line"),
};

View File

@@ -6,6 +6,7 @@ export type Registrable = {
desc?: string;
group?: string;
deprecated?: string;
order?: number;
};
export type RegistryItem<T> = {

View File

@@ -18,6 +18,7 @@ export type CnameRecord = {
status: string;
commonDnsProvider?: any;
};
export type ICnameProxyService = {
getByDomain: (domain: string) => Promise<CnameRecord>;
};

View File

@@ -0,0 +1,68 @@
import { logger } from "@certd/basic";
import { Pipeline, Runnable } from "../dt";
export type PipelineEventListener = (...args: any[]) => Promise<void>;
export type PipelineEvent<T> = {
pipeline: Pipeline;
step: Runnable;
event: T;
};
export class PipelineEmitter {
events: Record<string, PipelineEventListener[]>;
constructor() {
this.events = {};
}
on(event: string, listener: PipelineEventListener) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(listener);
}
async emit<T>(name: string, event: PipelineEvent<T>) {
const listeners = this.events[name];
if (listeners) {
for (const listener of listeners) {
try {
await listener(event);
} catch (e) {
logger.error(`事件<${name}>监听器执行失败:`, e);
}
}
}
}
off(event: string, listener: PipelineEventListener) {
if (this.events[event]) {
this.events[event] = this.events[event].filter((l) => l !== listener);
}
}
once(event: string, listener: PipelineEventListener) {
const onceListener = async (...args: any[]) => {
this.off(event, onceListener);
await listener(...args);
};
this.on(event, onceListener);
}
}
export const pipelineEmitter = new PipelineEmitter();
export type TaskEmitterCreateReq = {
step: Runnable;
pipeline: Pipeline;
};
export type TaskEmitter = {
emit: <T>(name: string, event: T) => Promise<void>;
};
export function taskEmitterCreate(req: TaskEmitterCreateReq) {
return {
emit: async <T>(name: string, event: T) => {
await pipelineEmitter.emit(name, {
pipeline: req.pipeline,
step: req.step,
event,
});
},
} as TaskEmitter;
}

View File

@@ -2,3 +2,7 @@ export * from "./email.js";
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,116 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.32.0](https://github.com/certd/certd/compare/v1.31.11...v1.32.0) (2025-04-04)
**Note:** Version bump only for package @certd/lib-huawei
## [1.31.11](https://github.com/certd/certd/compare/v1.31.10...v1.31.11) (2025-04-02)
### Performance Improvements
* 支持京东云dns申请证书 ([04d79f9](https://github.com/certd/certd/commit/04d79f9117670be504960b018fd49ae3bf7c1c11))
## [1.31.10](https://github.com/certd/certd/compare/v1.31.9...v1.31.10) (2025-03-29)
### Performance Improvements
* 优化华为dns接口报错信息输出 ([bf30b7a](https://github.com/certd/certd/commit/bf30b7afaef623dd8126570344f1fcc2c06f1215))
## [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
## [1.30.1](https://github.com/certd/certd/compare/v1.30.0...v1.30.1) (2025-01-20)
**Note:** Version bump only for package @certd/lib-huawei
# [1.30.0](https://github.com/certd/certd/compare/v1.29.5...v1.30.0) (2025-01-19)
**Note:** Version bump only for package @certd/lib-huawei
## [1.29.5](https://github.com/certd/certd/compare/v1.29.4...v1.29.5) (2025-01-07)
**Note:** Version bump only for package @certd/lib-huawei
## [1.29.4](https://github.com/certd/certd/compare/v1.29.3...v1.29.4) (2025-01-06)
**Note:** Version bump only for package @certd/lib-huawei
## [1.29.3](https://github.com/certd/certd/compare/v1.29.2...v1.29.3) (2025-01-04)
**Note:** Version bump only for package @certd/lib-huawei
## [1.29.2](https://github.com/certd/certd/compare/v1.29.1...v1.29.2) (2024-12-25)
**Note:** Version bump only for package @certd/lib-huawei
## [1.29.1](https://github.com/certd/certd/compare/v1.29.0...v1.29.1) (2024-12-25)
**Note:** Version bump only for package @certd/lib-huawei
# [1.29.0](https://github.com/certd/certd/compare/v1.28.4...v1.29.0) (2024-12-24)
**Note:** Version bump only for package @certd/lib-huawei
## [1.28.4](https://github.com/certd/certd/compare/v1.28.3...v1.28.4) (2024-12-12)
**Note:** Version bump only for package @certd/lib-huawei

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-huawei",
"private": false,
"version": "1.28.4",
"version": "1.32.0",
"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": "c8df9e698c265568e0e5e8b2f352c0599542d744"
"gitHead": "8374c3941a9d1398989b8f38fd4bfa2a2f29937b"
}

View File

@@ -30,7 +30,7 @@ module.exports = {
allowSyntheticDefaultImports: true,
}),
json(),
terser(),
// terser(),
],
external: ["vue", "lodash-es", "dayjs", "log4js", "@midwayjs/core", "@certd/pipeline", "axios"],
};

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);
@@ -32,7 +34,7 @@ export class HuaweiYunClient {
return res.data;
} catch (e) {
this.logger.error("华为云接口请求出错:", e?.response?.data);
const error = new Error(e?.response?.data.message);
const error = new Error(JSON.stringify(e?.response?.data));
error.code = e?.response?.code;
throw error;
}

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,110 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.32.0](https://github.com/certd/certd/compare/v1.31.11...v1.32.0) (2025-04-04)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.11](https://github.com/certd/certd/compare/v1.31.10...v1.31.11) (2025-04-02)
**Note:** Version bump only for package @certd/lib-iframe
## [1.31.10](https://github.com/certd/certd/compare/v1.31.9...v1.31.10) (2025-03-29)
**Note:** Version bump only for package @certd/lib-iframe
## [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
## [1.30.1](https://github.com/certd/certd/compare/v1.30.0...v1.30.1) (2025-01-20)
**Note:** Version bump only for package @certd/lib-iframe
# [1.30.0](https://github.com/certd/certd/compare/v1.29.5...v1.30.0) (2025-01-19)
**Note:** Version bump only for package @certd/lib-iframe
## [1.29.5](https://github.com/certd/certd/compare/v1.29.4...v1.29.5) (2025-01-07)
**Note:** Version bump only for package @certd/lib-iframe
## [1.29.4](https://github.com/certd/certd/compare/v1.29.3...v1.29.4) (2025-01-06)
**Note:** Version bump only for package @certd/lib-iframe
## [1.29.3](https://github.com/certd/certd/compare/v1.29.2...v1.29.3) (2025-01-04)
**Note:** Version bump only for package @certd/lib-iframe
## [1.29.2](https://github.com/certd/certd/compare/v1.29.1...v1.29.2) (2024-12-25)
**Note:** Version bump only for package @certd/lib-iframe
## [1.29.1](https://github.com/certd/certd/compare/v1.29.0...v1.29.1) (2024-12-25)
**Note:** Version bump only for package @certd/lib-iframe
# [1.29.0](https://github.com/certd/certd/compare/v1.28.4...v1.29.0) (2024-12-24)
**Note:** Version bump only for package @certd/lib-iframe
## [1.28.4](https://github.com/certd/certd/compare/v1.28.3...v1.28.4) (2024-12-12)
**Note:** Version bump only for package @certd/lib-iframe

View File

@@ -1,7 +1,7 @@
{
"name": "@certd/lib-iframe",
"private": false,
"version": "1.28.4",
"version": "1.32.0",
"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": "c8df9e698c265568e0e5e8b2f352c0599542d744"
"gitHead": "8374c3941a9d1398989b8f38fd4bfa2a2f29937b"
}

View File

@@ -0,0 +1,22 @@
{
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"extends": [
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended",
"prettier"
],
"env": {
"mocha": true
},
"rules": {
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-unused-vars": "off"
}
}

28
packages/libs/lib-jdcloud/.gitignore vendored Normal file
View File

@@ -0,0 +1,28 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
test/user.secret.ts
.rollup.cache

View File

@@ -0,0 +1,3 @@
node_modules
src
.rollup.cache

View File

@@ -0,0 +1 @@
language: node_js

View File

@@ -0,0 +1,15 @@
# Change Log
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.32.0](https://github.com/certd/certd/compare/v1.31.11...v1.32.0) (2025-04-04)
**Note:** Version bump only for package @certd/jdcloud
## [1.31.11](https://github.com/certd/certd/compare/v1.31.10...v1.31.11) (2025-04-02)
### Performance Improvements
* 支持部署到京东云cdn ([6f17c70](https://github.com/certd/certd/commit/6f17c700b84965baa01b40fe2abaa0a91bcbaffd))
* 支持京东云dns申请证书 ([04d79f9](https://github.com/certd/certd/commit/04d79f9117670be504960b018fd49ae3bf7c1c11))

View File

@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -0,0 +1,177 @@
---
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)
# 简介 #
欢迎使用京东云开发者Node.js工具套件Node.js SDK。使用京东云Node.js SDK您无需复杂编程就可以访问京东云提供的各种服务。
为了方便您理解SDK中的一些概念和参数的含义使用SDK前建议您先查看[京东云OpenAPI使用入门](http://www.jdcloud.com/help/detail/355/isCatalog/0)。要了解每个API的具体参数和含义请参考程序注释或参考OpenAPI&SDK下具体产品线的API文档。
# 环境准备 #
1.京东云Node.js SDK适用于Node.js 8.6.0及以上npm 5.6.0及以上。
2.在开始调用京东云open API之前需提前在京东云用户中心账户管理下的[AccessKey管理页面](https://uc.jdcloud.com/accesskey/index)申请accesskey和secretKey密钥对简称AK/SK。AK/SK信息请妥善保管如果遗失可能会造成非法用户使用此信息操作您在云上的资源给你造成数据和财产损失。
# SDK使用方法 #
建议使用npm安装京东云Node.js SDK如下所示
npm install jdcloud-sdk-js
您还可以下载sdk源代码自行使用[源代码地址](https://github.com/jdcloud-api/jdcloud-sdk-nodejs)。
SDK使用中的任何问题欢迎您在[SDK使用问题反馈页面](https://github.com/jdcloud-api/jdcloud-sdk-nodejs/issues)交流。
注意:京东云并没有提供其他下载方式,请务必使用上述官方下载方式!
# 调用SDK #
## 两种引用方式 ##
var JDCloud = require('jdcloud-sdk-js');
这种引用方式会加载所有的可用的services
var NC = require('jdcloud-sdk-js/services/nativecontainer');
这种引用方式只会加载用到的service此时仍然可以使用var JDCloud = require('jdcloud-sdk-js/global')来引用JDCloud对象
## 配置方法 ##
对JDCloud的配置为通用配置所有services共享配置:
JDCloud.config.update({//*配置项/*/});
对某个service的配置会覆盖通用配置
var NC = require('jdcloud-sdk-js/services/nativecontainer');
var nc = new NATIVECONTAINER({//*配置项/*/});
## 配置项 ##
let config = {
credentials: {
accessKeyId: global.accessKeyId, secretAccessKey: global.secretAccessKey
},
regionId: 'cn-north-1' //地域信息某个api调用可以单独传参regionId如果不传则会使用此配置中的regionId
}
## 调用示例 ##
以下是查询单个云主机实例详情的调用示例
### 引用和配置 ###
var VM = require('jdcloud-sdk-js/services/vm')
var vm = new VM({
credentials: {
accessKeyId: global.accessKeyId,
secretAccessKey: global.secretAccessKey
},
regionId: 'cn-north-1'
})
### Promise方式调用 ####
vm.createInstances({
instanceSpec: {
instanceType: 'g.s1.micro',
az: 'cn-north-1a',
imageId: '98d44a0f-88c1-451a-8971-f1f769073b6c',
name: 'node-sdk-test',
elasticIp: {
bandwidthMbps: 2, provider: 'BGP'
},
primaryNetworkInterface: {
networkInterface: {
subnetId: 'subnet-3dm13k30gh',
az: 'cn-north-1a'
}
},
systemDisk: {
diskCategory: 'local'
},
description: 'sdk'
},
maxCount: 1
},'cn-north-1').then(function(data){ // 返回数据处理 data
},
function(e){ // 调用API失败错误处理
})
### callback方式调用 ###
vm.createInstances({
instanceSpec: {
instanceType: 'g.s1.micro',
az: 'cn-north-1a',
imageId: '98d44a0f-88c1-451a-8971-f1f769073b6c',
name: 'node-sdk-test',
elasticIp: {
bandwidthMbps: 2,
provider: 'BGP'
},
primaryNetworkInterface: {
networkInterface: {
subnetId: 'subnet-3dm13k30gh',
az: 'cn-north-1a'
}
},
systemDisk: {
diskCategory: 'local'
},
description: 'sdk'
},
maxCount: 1
},'cn-north-1',
function(err, data){
if(err){ // 调用API失败错误处理
}
else { // 返回数据处理 data
}
})
如果需要设置访问点,配置超时,额外请求头等,请参考如下更复杂的例子:
```
var nc = new NATIVECONTAINER({
credentials: {
accessKeyId: global.accessKeyId,
secretAccessKey: global.secretAccessKey
},
endpoint: {
host: 'nativecontainer.internal.cn-north-1.jdcloud-api.com', //指定非默认Endpoint
protocol: 'http' //设置使用HTTP而不是HTTPSvpc专用域名不支持HTTPS
},
'x-extra-header': { //指定额外header
"x-jdcloud-security-token" : "xxx", //要调用开启了MFA操作保护的接口需要传递
"x-jdcloud-content-sha256" : "xxx", //body过大希望用此value替代对body进行哈希的过程
"MyOwn" : "xxx"
},
version: {
nativecontainer: 'v1'
}
})
```
更多调用示例参考 [SDK使用Demo](https://github.com/jdcloud-api/jdcloud-sdk-nodejs/tree/master/test)

View File

@@ -0,0 +1,64 @@
{
"name": "@certd/jdcloud",
"version": "1.32.0",
"description": "jdcloud openApi sdk",
"main": "./dist/bundle.js",
"module": "./dist/bundle.js",
"types": "./dist/d/index.d.ts",
"scripts": {
"test": "cross-env NODE_CONFIG_DIR=./test/config mocha --recursive --require babel-register",
"dev": "babel src --out-dir babel -w",
"build": "rollup -c ",
"dev-build": "npm run build"
},
"author": "",
"license": "Apache",
"dependencies": {
"babel-register": "^6.26.0",
"buffer": "^5.0.8",
"create-hash": "^1.1.3",
"create-hmac": "^1.1.6",
"debug": "^3.1.0",
"node-fetch": "^2.1.2",
"querystring": "^0.2.0",
"rollup": "^3.7.4",
"url": "^0.11.0",
"uuid": "^3.1.0"
},
"devDependencies": {
"@rollup/plugin-typescript": "^11.0.0",
"@typescript-eslint/eslint-plugin": "^8.26.1",
"@typescript-eslint/parser": "^8.26.1",
"babel-cli": "^6.26.0",
"babel-preset-env": "^1.6.1",
"chai": "^4.1.2",
"config": "^1.30.0",
"cross-env": "^5.1.4",
"js-yaml": "^3.11.0",
"mocha": "^5.0.0",
"prettier": "^2.8.8",
"tslib": "^2.8.1"
},
"engines": {
"node": ">= 8.6.0",
"npm": ">= 5.6.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 9"
],
"standard": {
"env": [
"node",
"mocha",
"browser"
],
"globals": [
"Request",
"Headers",
"fetch"
]
},
"gitHead": "8374c3941a9d1398989b8f38fd4bfa2a2f29937b"
}

View File

@@ -0,0 +1,36 @@
const resolve = require("@rollup/plugin-node-resolve");
const commonjs = require("@rollup/plugin-commonjs");
//const Typescript = require("rollup-plugin-typescript2");
const Typescript = require("@rollup/plugin-typescript");
const json = require("@rollup/plugin-json");
const terser = require("@rollup/plugin-terser");
module.exports = {
input: "src/index.ts",
output: {
file: "dist/bundle.js",
format: "cjs",
},
plugins: [
// 解析第三方依赖
resolve(),
// 识别 commonjs 模式第三方依赖
commonjs({
// dynamicRequireRoot: "../../../../",
// dynamicRequireTargets: [
// // include using a glob pattern (either a string or an array of strings)
// "../../../../**/shelljs/src/*",
// ],
}),
Typescript({
target: "esnext",
rootDir: "src",
declaration: true,
declarationDir: "dist/d",
exclude: ["./node_modules/**", "./src/**/*.vue", "./src/**/*.spec.ts"],
allowSyntheticDefaultImports: true,
}),
json(),
// terser(),
],
external: ["vue", "lodash-es", "dayjs", "log4js", "@midwayjs/core", "@certd/pipeline", "axios"],
};

View File

@@ -0,0 +1,2 @@
require('./lib/node_loader')
module.exports = require('./lib/core')

View File

@@ -0,0 +1,11 @@
import jdCloud from "./lib/core.js";
import jdService from './lib/service.js'
import domainService from './repo/domainservice/v2/domainservice.js'
import cdnService from './repo/cdn/v1/cdn.js'
import sslService from './repo/ssl/v1/ssl.js'
export const JDCloud = jdCloud;
export const JDService = jdService;
export const JDDomainService = domainService;
export const JDCdnService = cdnService;
export const JDSslService = sslService;

View File

@@ -0,0 +1 @@
module.exports = require('./lib/jc')

View File

@@ -0,0 +1,5 @@
require('babel-polyfill')
require('./browser_loader')
var JC = require('./core')
require('../services/all')
module.exports = JC

View File

@@ -0,0 +1,13 @@
var util = require('./util')
util.crypto.lib = {
createHash: require('create-hash'),
createHmac: require('create-hmac')
}
util.Buffer = require('buffer/').Buffer
util.url = require('url/')
util.querystring = require('querystring/')
util.environment = 'js'
var JC = require('./core')
module.exports = JC

View File

@@ -0,0 +1,6 @@
require('./core')
require('./config')
require('./request')
require('./service')
require('./credentials')

View File

@@ -0,0 +1,78 @@
var JDCloud = require('./core')
let defaultValues = {
credentials: null,
regionId: null,
apiVersions: null,
endpoint: {},
version: {},
logger: function (string, level = 'INFO') {
// level: INFO / DEBUG / ERROR / WARN
console.log(string)
}
}
JDCloud.Config = class Config {
constructor (options = {}) {
options = this.extractCredentials(options)
JDCloud.util.each.call(this, defaultValues, function (key, value) {
if (options[key] === undefined) {
this[key] = value
} else {
this[key] = options[key]
}
})
JDCloud.util.each.call(this, JDCloud.Service._services, function (
key,
value
) {
if (options[key] !== undefined) {
this[key] = options[key]
}
})
}
extractCredentials (options) {
if (options.accessKeyId && options.secretAccessKey) {
options = Object.assign({}, options)
options.credentials = new JDCloud.Credentials(options)
}
return options
}
getCredentials () {
var p = new Promise((resolve, reject) => {
if (this.credentials) {
if (typeof this.credentials.get === 'function') {
} else if (
this.credentials.accessKeyId &&
this.credentials.secretAccessKey
) {
resolve()
} else {
reject(new Error('missing credentials'))
}
} else if (this.credentialProvider) {
} else {
reject(new Error('get credentials failed'))
}
})
return p
}
update (options, allowUnknownKeys = false) {
options = this.extractCredentials(options)
JDCloud.util.each.call(this, options, function (key, value) {
if (
allowUnknownKeys ||
defaultValues.hasOwnProperty(key) ||
JDCloud.Service.hasService(key)
) {
this[key] = options[key]
}
})
}
}
JDCloud.config = new JDCloud.Config()

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