@certd/plugin-cert 1.24.2 → 1.24.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,284 +1,284 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { AbstractTaskPlugin, TaskInput, TaskOutput } from "@certd/pipeline";
11
- import dayjs from "dayjs";
12
- import { CertReader } from "./cert-reader.js";
13
- import JSZip from "jszip";
14
- import { CertConverter } from "./convert.js";
15
- import fs from "fs";
16
- export { CertReader };
17
- export class CertApplyBasePlugin extends AbstractTaskPlugin {
18
- domains;
19
- email;
20
- pfxPassword;
21
- renewDays;
22
- forceUpdate;
23
- successNotify = true;
24
- // @TaskInput({
25
- // title: "CsrInfo",
26
- // helper: "暂时没有用",
27
- // })
28
- csrInfo;
29
- userContext;
30
- http;
31
- lastStatus;
32
- cert;
33
- async onInstance() {
34
- this.userContext = this.ctx.userContext;
35
- this.http = this.ctx.http;
36
- this.lastStatus = this.ctx.lastStatus;
37
- await this.onInit();
38
- }
39
- async execute() {
40
- const oldCert = await this.condition();
41
- if (oldCert != null) {
42
- return await this.output(oldCert, false);
43
- }
44
- const cert = await this.doCertApply();
45
- if (cert != null) {
46
- await this.output(cert, true);
47
- //清空后续任务的状态,让后续任务能够重新执行
48
- this.clearLastStatus();
49
- if (this.successNotify) {
50
- await this.sendSuccessEmail();
51
- }
52
- }
53
- else {
54
- throw new Error("申请证书失败");
55
- }
56
- }
57
- async output(certReader, isNew) {
58
- const cert = certReader.toCertInfo();
59
- this.cert = cert;
60
- this._result.pipelineVars.certExpiresTime = dayjs(certReader.detail.notAfter).valueOf();
61
- if (cert.pfx == null || cert.der == null) {
62
- try {
63
- const converter = new CertConverter({ logger: this.logger });
64
- const res = await converter.convert({
65
- cert,
66
- pfxPassword: this.pfxPassword,
67
- });
68
- const pfxBuffer = fs.readFileSync(res.pfxPath);
69
- cert.pfx = pfxBuffer.toString("base64");
70
- const derBuffer = fs.readFileSync(res.derPath);
71
- cert.der = derBuffer.toString("base64");
72
- this.logger.info("转换证书格式成功");
73
- isNew = true;
74
- }
75
- catch (e) {
76
- this.logger.error("转换证书格式失败", e);
77
- }
78
- }
79
- if (isNew) {
80
- const zipFileName = certReader.buildCertFileName("zip", certReader.detail.notBefore);
81
- await this.zipCert(cert, zipFileName);
82
- }
83
- else {
84
- this.extendsFiles();
85
- }
86
- }
87
- async zipCert(cert, filename) {
88
- const zip = new JSZip();
89
- zip.file("cert.crt", cert.crt);
90
- zip.file("cert.key", cert.key);
91
- if (cert.pfx) {
92
- zip.file("cert.pfx", Buffer.from(cert.pfx, "base64"));
93
- }
94
- if (cert.der) {
95
- zip.file("cert.der", Buffer.from(cert.der, "base64"));
96
- }
97
- const content = await zip.generateAsync({ type: "nodebuffer" });
98
- this.saveFile(filename, content);
99
- this.logger.info(`已保存文件:${filename}`);
100
- }
101
- /**
102
- * 是否更新证书
103
- */
104
- async condition() {
105
- if (this.forceUpdate) {
106
- return null;
107
- }
108
- let inputChanged = false;
109
- const oldInput = JSON.stringify(this.lastStatus?.input?.domains);
110
- const thisInput = JSON.stringify(this.domains);
111
- if (oldInput !== thisInput) {
112
- inputChanged = true;
113
- }
114
- let oldCert = undefined;
115
- try {
116
- oldCert = await this.readLastCert();
117
- }
118
- catch (e) {
119
- this.logger.warn("读取cert失败:", e);
120
- }
121
- if (oldCert == null) {
122
- this.logger.info("还未申请过,准备申请新证书");
123
- return null;
124
- }
125
- if (inputChanged) {
126
- this.logger.info("输入参数变更,申请新证书");
127
- return null;
128
- }
129
- const ret = this.isWillExpire(oldCert.expires, this.renewDays);
130
- if (!ret.isWillExpire) {
131
- this.logger.info(`证书还未过期:过期时间${dayjs(oldCert.expires).format("YYYY-MM-DD HH:mm:ss")},剩余${ret.leftDays}天`);
132
- return oldCert;
133
- }
134
- this.logger.info("即将过期,开始更新证书");
135
- return null;
136
- }
137
- formatCert(pem) {
138
- pem = pem.replace(/\r/g, "");
139
- pem = pem.replace(/\n\n/g, "\n");
140
- pem = pem.replace(/\n$/g, "");
141
- return pem;
142
- }
143
- formatCerts(cert) {
144
- const newCert = {
145
- crt: this.formatCert(cert.crt),
146
- key: this.formatCert(cert.key),
147
- csr: this.formatCert(cert.csr),
148
- };
149
- return newCert;
150
- }
151
- async readLastCert() {
152
- const cert = this.lastStatus?.status?.output?.cert;
153
- if (cert == null) {
154
- return undefined;
155
- }
156
- return new CertReader(cert);
157
- }
158
- /**
159
- * 检查是否过期,默认提前20天
160
- * @param expires
161
- * @param maxDays
162
- * @returns {boolean}
163
- */
164
- isWillExpire(expires, maxDays = 20) {
165
- if (expires == null) {
166
- throw new Error("过期时间不能为空");
167
- }
168
- // 检查有效期
169
- const leftDays = dayjs(expires).diff(dayjs(), "day");
170
- return {
171
- isWillExpire: leftDays < maxDays,
172
- leftDays,
173
- };
174
- }
175
- async sendSuccessEmail() {
176
- try {
177
- this.logger.info("发送成功邮件通知:" + this.email);
178
- const subject = `【CertD】证书申请成功【${this.domains[0]}】`;
179
- await this.ctx.emailService.send({
180
- userId: this.ctx.pipeline.userId,
181
- receivers: [this.email],
182
- subject: subject,
183
- content: `证书申请成功,域名:${this.domains.join(",")}`,
184
- });
185
- }
186
- catch (e) {
187
- this.logger.error("send email error", e);
188
- }
189
- }
190
- }
191
- __decorate([
192
- TaskInput({
193
- title: "域名",
194
- component: {
195
- name: "a-select",
196
- vModel: "value",
197
- mode: "tags",
198
- open: false,
199
- tokenSeparators: [",", " ", ",", "、", "|"],
200
- },
201
- required: true,
202
- col: {
203
- span: 24,
204
- },
205
- order: -1,
206
- helper: "1、支持通配符域名,例如: *.foo.com、foo.com、*.test.handsfree.work\n" +
207
- "2、支持多个域名、多个子域名、多个通配符域名打到一个证书上(域名必须是在同一个DNS提供商解析)\n" +
208
- "3、多级子域名要分成多个域名输入(*.foo.com的证书不能用于xxx.yyy.foo.com、foo.com)\n" +
209
- "4、输入一个空格之后,再输入下一个",
210
- }),
211
- __metadata("design:type", Array)
212
- ], CertApplyBasePlugin.prototype, "domains", void 0);
213
- __decorate([
214
- TaskInput({
215
- title: "邮箱",
216
- component: {
217
- name: "a-input",
218
- vModel: "value",
219
- },
220
- required: true,
221
- order: -1,
222
- helper: "请输入邮箱",
223
- }),
224
- __metadata("design:type", String)
225
- ], CertApplyBasePlugin.prototype, "email", void 0);
226
- __decorate([
227
- TaskInput({
228
- title: "PFX密码",
229
- component: {
230
- name: "a-input-password",
231
- vModel: "value",
232
- },
233
- required: false,
234
- order: 100,
235
- helper: "PFX格式证书是否需要加密",
236
- }),
237
- __metadata("design:type", String)
238
- ], CertApplyBasePlugin.prototype, "pfxPassword", void 0);
239
- __decorate([
240
- TaskInput({
241
- title: "更新天数",
242
- value: 20,
243
- component: {
244
- name: "a-input-number",
245
- vModel: "value",
246
- },
247
- required: true,
248
- order: 100,
249
- helper: "到期前多少天后更新证书,注意:流水线默认不会自动运行,请设置定时器,每天定时运行本流水线",
250
- }),
251
- __metadata("design:type", Number)
252
- ], CertApplyBasePlugin.prototype, "renewDays", void 0);
253
- __decorate([
254
- TaskInput({
255
- title: "强制更新",
256
- component: {
257
- name: "a-switch",
258
- vModel: "checked",
259
- },
260
- order: 100,
261
- helper: "是否强制重新申请证书",
262
- }),
263
- __metadata("design:type", String)
264
- ], CertApplyBasePlugin.prototype, "forceUpdate", void 0);
265
- __decorate([
266
- TaskInput({
267
- title: "成功后邮件通知",
268
- value: true,
269
- component: {
270
- name: "a-switch",
271
- vModel: "checked",
272
- },
273
- order: 100,
274
- helper: "申请成功后是否发送邮件通知",
275
- }),
276
- __metadata("design:type", Object)
277
- ], CertApplyBasePlugin.prototype, "successNotify", void 0);
278
- __decorate([
279
- TaskOutput({
280
- title: "域名证书",
281
- }),
282
- __metadata("design:type", Object)
283
- ], CertApplyBasePlugin.prototype, "cert", void 0);
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW4vY2VydC1wbHVnaW4vYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQThCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUVwQixPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFHdEIsTUFBTSxPQUFnQixtQkFBb0IsU0FBUSxrQkFBa0I7SUFxQmxFLE9BQU8sQ0FBWTtJQVluQixLQUFLLENBQVU7SUFZZixXQUFXLENBQVU7SUFhckIsU0FBUyxDQUFVO0lBV25CLFdBQVcsQ0FBVTtJQVlyQixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBRXJCLGVBQWU7SUFDZixzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLEtBQUs7SUFDTCxPQUFPLENBQVU7SUFFakIsV0FBVyxDQUFZO0lBQ3ZCLElBQUksQ0FBYztJQUNsQixVQUFVLENBQVE7SUFLbEIsSUFBSSxDQUFZO0lBRWhCLEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFrQixDQUFDO1FBQzlDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lB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
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { AbstractTaskPlugin, TaskInput, TaskOutput } from "@certd/pipeline";
11
+ import dayjs from "dayjs";
12
+ import { CertReader } from "./cert-reader.js";
13
+ import JSZip from "jszip";
14
+ import { CertConverter } from "./convert.js";
15
+ import fs from "fs";
16
+ export { CertReader };
17
+ export class CertApplyBasePlugin extends AbstractTaskPlugin {
18
+ domains;
19
+ email;
20
+ pfxPassword;
21
+ renewDays;
22
+ forceUpdate;
23
+ successNotify = true;
24
+ // @TaskInput({
25
+ // title: "CsrInfo",
26
+ // helper: "暂时没有用",
27
+ // })
28
+ csrInfo;
29
+ userContext;
30
+ http;
31
+ lastStatus;
32
+ cert;
33
+ async onInstance() {
34
+ this.userContext = this.ctx.userContext;
35
+ this.http = this.ctx.http;
36
+ this.lastStatus = this.ctx.lastStatus;
37
+ await this.onInit();
38
+ }
39
+ async execute() {
40
+ const oldCert = await this.condition();
41
+ if (oldCert != null) {
42
+ return await this.output(oldCert, false);
43
+ }
44
+ const cert = await this.doCertApply();
45
+ if (cert != null) {
46
+ await this.output(cert, true);
47
+ //清空后续任务的状态,让后续任务能够重新执行
48
+ this.clearLastStatus();
49
+ if (this.successNotify) {
50
+ await this.sendSuccessEmail();
51
+ }
52
+ }
53
+ else {
54
+ throw new Error("申请证书失败");
55
+ }
56
+ }
57
+ async output(certReader, isNew) {
58
+ const cert = certReader.toCertInfo();
59
+ this.cert = cert;
60
+ this._result.pipelineVars.certExpiresTime = dayjs(certReader.detail.notAfter).valueOf();
61
+ if (cert.pfx == null || cert.der == null) {
62
+ try {
63
+ const converter = new CertConverter({ logger: this.logger });
64
+ const res = await converter.convert({
65
+ cert,
66
+ pfxPassword: this.pfxPassword,
67
+ });
68
+ const pfxBuffer = fs.readFileSync(res.pfxPath);
69
+ cert.pfx = pfxBuffer.toString("base64");
70
+ const derBuffer = fs.readFileSync(res.derPath);
71
+ cert.der = derBuffer.toString("base64");
72
+ this.logger.info("转换证书格式成功");
73
+ isNew = true;
74
+ }
75
+ catch (e) {
76
+ this.logger.error("转换证书格式失败", e);
77
+ }
78
+ }
79
+ if (isNew) {
80
+ const zipFileName = certReader.buildCertFileName("zip", certReader.detail.notBefore);
81
+ await this.zipCert(cert, zipFileName);
82
+ }
83
+ else {
84
+ this.extendsFiles();
85
+ }
86
+ }
87
+ async zipCert(cert, filename) {
88
+ const zip = new JSZip();
89
+ zip.file("cert.crt", cert.crt);
90
+ zip.file("cert.key", cert.key);
91
+ if (cert.pfx) {
92
+ zip.file("cert.pfx", Buffer.from(cert.pfx, "base64"));
93
+ }
94
+ if (cert.der) {
95
+ zip.file("cert.der", Buffer.from(cert.der, "base64"));
96
+ }
97
+ const content = await zip.generateAsync({ type: "nodebuffer" });
98
+ this.saveFile(filename, content);
99
+ this.logger.info(`已保存文件:${filename}`);
100
+ }
101
+ /**
102
+ * 是否更新证书
103
+ */
104
+ async condition() {
105
+ if (this.forceUpdate) {
106
+ return null;
107
+ }
108
+ let inputChanged = false;
109
+ const oldInput = JSON.stringify(this.lastStatus?.input?.domains);
110
+ const thisInput = JSON.stringify(this.domains);
111
+ if (oldInput !== thisInput) {
112
+ inputChanged = true;
113
+ }
114
+ let oldCert = undefined;
115
+ try {
116
+ oldCert = await this.readLastCert();
117
+ }
118
+ catch (e) {
119
+ this.logger.warn("读取cert失败:", e);
120
+ }
121
+ if (oldCert == null) {
122
+ this.logger.info("还未申请过,准备申请新证书");
123
+ return null;
124
+ }
125
+ if (inputChanged) {
126
+ this.logger.info("输入参数变更,申请新证书");
127
+ return null;
128
+ }
129
+ const ret = this.isWillExpire(oldCert.expires, this.renewDays);
130
+ if (!ret.isWillExpire) {
131
+ this.logger.info(`证书还未过期:过期时间${dayjs(oldCert.expires).format("YYYY-MM-DD HH:mm:ss")},剩余${ret.leftDays}天`);
132
+ return oldCert;
133
+ }
134
+ this.logger.info("即将过期,开始更新证书");
135
+ return null;
136
+ }
137
+ formatCert(pem) {
138
+ pem = pem.replace(/\r/g, "");
139
+ pem = pem.replace(/\n\n/g, "\n");
140
+ pem = pem.replace(/\n$/g, "");
141
+ return pem;
142
+ }
143
+ formatCerts(cert) {
144
+ const newCert = {
145
+ crt: this.formatCert(cert.crt),
146
+ key: this.formatCert(cert.key),
147
+ csr: this.formatCert(cert.csr),
148
+ };
149
+ return newCert;
150
+ }
151
+ async readLastCert() {
152
+ const cert = this.lastStatus?.status?.output?.cert;
153
+ if (cert == null) {
154
+ return undefined;
155
+ }
156
+ return new CertReader(cert);
157
+ }
158
+ /**
159
+ * 检查是否过期,默认提前20天
160
+ * @param expires
161
+ * @param maxDays
162
+ * @returns {boolean}
163
+ */
164
+ isWillExpire(expires, maxDays = 20) {
165
+ if (expires == null) {
166
+ throw new Error("过期时间不能为空");
167
+ }
168
+ // 检查有效期
169
+ const leftDays = dayjs(expires).diff(dayjs(), "day");
170
+ return {
171
+ isWillExpire: leftDays < maxDays,
172
+ leftDays,
173
+ };
174
+ }
175
+ async sendSuccessEmail() {
176
+ try {
177
+ this.logger.info("发送成功邮件通知:" + this.email);
178
+ const subject = `【CertD】证书申请成功【${this.domains[0]}】`;
179
+ await this.ctx.emailService.send({
180
+ userId: this.ctx.pipeline.userId,
181
+ receivers: [this.email],
182
+ subject: subject,
183
+ content: `证书申请成功,域名:${this.domains.join(",")}`,
184
+ });
185
+ }
186
+ catch (e) {
187
+ this.logger.error("send email error", e);
188
+ }
189
+ }
190
+ }
191
+ __decorate([
192
+ TaskInput({
193
+ title: "域名",
194
+ component: {
195
+ name: "a-select",
196
+ vModel: "value",
197
+ mode: "tags",
198
+ open: false,
199
+ tokenSeparators: [",", " ", ",", "、", "|"],
200
+ },
201
+ required: true,
202
+ col: {
203
+ span: 24,
204
+ },
205
+ order: -1,
206
+ helper: "1、支持通配符域名,例如: *.foo.com、foo.com、*.test.handsfree.work\n" +
207
+ "2、支持多个域名、多个子域名、多个通配符域名打到一个证书上(域名必须是在同一个DNS提供商解析)\n" +
208
+ "3、多级子域名要分成多个域名输入(*.foo.com的证书不能用于xxx.yyy.foo.com、foo.com)\n" +
209
+ "4、输入一个空格之后,再输入下一个",
210
+ }),
211
+ __metadata("design:type", Array)
212
+ ], CertApplyBasePlugin.prototype, "domains", void 0);
213
+ __decorate([
214
+ TaskInput({
215
+ title: "邮箱",
216
+ component: {
217
+ name: "a-input",
218
+ vModel: "value",
219
+ },
220
+ required: true,
221
+ order: -1,
222
+ helper: "请输入邮箱",
223
+ }),
224
+ __metadata("design:type", String)
225
+ ], CertApplyBasePlugin.prototype, "email", void 0);
226
+ __decorate([
227
+ TaskInput({
228
+ title: "PFX密码",
229
+ component: {
230
+ name: "a-input-password",
231
+ vModel: "value",
232
+ },
233
+ required: false,
234
+ order: 100,
235
+ helper: "PFX格式证书是否需要加密",
236
+ }),
237
+ __metadata("design:type", String)
238
+ ], CertApplyBasePlugin.prototype, "pfxPassword", void 0);
239
+ __decorate([
240
+ TaskInput({
241
+ title: "更新天数",
242
+ value: 20,
243
+ component: {
244
+ name: "a-input-number",
245
+ vModel: "value",
246
+ },
247
+ required: true,
248
+ order: 100,
249
+ helper: "到期前多少天后更新证书,注意:流水线默认不会自动运行,请设置定时器,每天定时运行本流水线",
250
+ }),
251
+ __metadata("design:type", Number)
252
+ ], CertApplyBasePlugin.prototype, "renewDays", void 0);
253
+ __decorate([
254
+ TaskInput({
255
+ title: "强制更新",
256
+ component: {
257
+ name: "a-switch",
258
+ vModel: "checked",
259
+ },
260
+ order: 100,
261
+ helper: "是否强制重新申请证书",
262
+ }),
263
+ __metadata("design:type", String)
264
+ ], CertApplyBasePlugin.prototype, "forceUpdate", void 0);
265
+ __decorate([
266
+ TaskInput({
267
+ title: "成功后邮件通知",
268
+ value: true,
269
+ component: {
270
+ name: "a-switch",
271
+ vModel: "checked",
272
+ },
273
+ order: 100,
274
+ helper: "申请成功后是否发送邮件通知",
275
+ }),
276
+ __metadata("design:type", Object)
277
+ ], CertApplyBasePlugin.prototype, "successNotify", void 0);
278
+ __decorate([
279
+ TaskOutput({
280
+ title: "域名证书",
281
+ }),
282
+ __metadata("design:type", Object)
283
+ ], CertApplyBasePlugin.prototype, "cert", void 0);
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW4vY2VydC1wbHVnaW4vYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQThCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUVwQixPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFHdEIsTUFBTSxPQUFnQixtQkFBb0IsU0FBUSxrQkFBa0I7SUFxQmxFLE9BQU8sQ0FBWTtJQVluQixLQUFLLENBQVU7SUFZZixXQUFXLENBQVU7SUFhckIsU0FBUyxDQUFVO0lBV25CLFdBQVcsQ0FBVTtJQVlyQixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBRXJCLGVBQWU7SUFDZixzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLEtBQUs7SUFDTCxPQUFPLENBQVU7SUFFakIsV0FBVyxDQUFZO0lBQ3ZCLElBQUksQ0FBYztJQUNsQixVQUFVLENBQVE7SUFLbEIsSUFBSSxDQUFZO0lBRWhCLEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFrQixDQUFDO1FBQzlDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@certd/plugin-cert",
3
3
  "private": false,
4
- "version": "1.24.2",
4
+ "version": "1.24.3",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -13,8 +13,8 @@
13
13
  "preview": "vite preview"
14
14
  },
15
15
  "dependencies": {
16
- "@certd/acme-client": "^1.24.2",
17
- "@certd/pipeline": "^1.24.2",
16
+ "@certd/acme-client": "^1.24.3",
17
+ "@certd/pipeline": "^1.24.3",
18
18
  "jszip": "^3.10.1",
19
19
  "node-forge": "^0.10.0",
20
20
  "psl": "^1.9.0"
@@ -53,5 +53,5 @@
53
53
  "vite": "^3.1.0",
54
54
  "vue-tsc": "^0.38.9"
55
55
  },
56
- "gitHead": "c49ccbde93dbad7062ac39d4f18eca7d561f573f"
56
+ "gitHead": "d65d94b784ba526c479fab9bc402960d4e805d69"
57
57
  }