@push.rocks/smartacme 4.0.8 → 6.0.0
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.
- package/LICENSE +1 -1
- package/dist_ts/00_commitinfo_data.d.ts +1 -1
- package/dist_ts/00_commitinfo_data.js +4 -4
- package/dist_ts/handlers/Dns01Handler.d.ts +13 -0
- package/dist_ts/handlers/Dns01Handler.js +24 -0
- package/dist_ts/handlers/Http01Handler.d.ts +34 -0
- package/dist_ts/handlers/Http01Handler.js +32 -0
- package/dist_ts/handlers/IChallengeHandler.d.ts +22 -0
- package/dist_ts/handlers/IChallengeHandler.js +2 -0
- package/dist_ts/handlers/index.d.ts +3 -0
- package/dist_ts/handlers/index.js +4 -0
- package/dist_ts/index.d.ts +1 -1
- package/dist_ts/index.js +2 -2
- package/dist_ts/smartacme.classes.cert.d.ts +1 -1
- package/dist_ts/smartacme.classes.cert.js +14 -14
- package/dist_ts/smartacme.classes.certmanager.d.ts +4 -4
- package/dist_ts/smartacme.classes.certmanager.js +7 -7
- package/dist_ts/smartacme.classes.certmatcher.d.ts +1 -1
- package/dist_ts/smartacme.classes.certmatcher.js +2 -2
- package/dist_ts/smartacme.classes.smartacme.d.ts +39 -10
- package/dist_ts/smartacme.classes.smartacme.js +150 -48
- package/dist_ts/smartacme.plugins.d.ts +4 -2
- package/dist_ts/smartacme.plugins.js +6 -3
- package/npmextra.json +23 -3
- package/package.json +39 -27
- package/readme.hints.md +2 -0
- package/readme.md +235 -39
- package/ts/00_commitinfo_data.ts +3 -3
- package/ts/handlers/Dns01Handler.ts +40 -0
- package/ts/handlers/Http01Handler.ts +54 -0
- package/ts/handlers/IChallengeHandler.ts +22 -0
- package/ts/handlers/index.ts +4 -0
- package/ts/index.ts +1 -1
- package/ts/smartacme.classes.cert.ts +4 -4
- package/ts/smartacme.classes.certmanager.ts +9 -9
- package/ts/smartacme.classes.certmatcher.ts +1 -1
- package/ts/smartacme.classes.smartacme.ts +185 -64
- package/ts/smartacme.plugins.ts +5 -2
package/LICENSE
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* autocreated commitinfo by @
|
|
2
|
+
* autocreated commitinfo by @push.rocks/commitinfo
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartacme',
|
|
6
|
-
version: '
|
|
7
|
-
description: '
|
|
6
|
+
version: '6.0.0',
|
|
7
|
+
description: 'A TypeScript-based ACME client for LetsEncrypt certificate management with a focus on simplicity and power.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDZHQUE2RztDQUMzSCxDQUFBIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as plugins from '../smartacme.plugins.js';
|
|
2
|
+
import type { IChallengeHandler } from './IChallengeHandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* DNS-01 challenge handler using CloudflareAccount and Smartdns.
|
|
5
|
+
*/
|
|
6
|
+
export declare class Dns01Handler implements IChallengeHandler<plugins.tsclass.network.IDnsChallenge> {
|
|
7
|
+
private cf;
|
|
8
|
+
private smartdns;
|
|
9
|
+
constructor(cloudflareAccount: any, smartdnsInstance?: plugins.smartdnsClient.Smartdns);
|
|
10
|
+
getSupportedTypes(): string[];
|
|
11
|
+
prepare(ch: plugins.tsclass.network.IDnsChallenge): Promise<void>;
|
|
12
|
+
cleanup(ch: plugins.tsclass.network.IDnsChallenge): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as plugins from '../smartacme.plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* DNS-01 challenge handler using CloudflareAccount and Smartdns.
|
|
4
|
+
*/
|
|
5
|
+
export class Dns01Handler {
|
|
6
|
+
constructor(cloudflareAccount, smartdnsInstance) {
|
|
7
|
+
this.cf = cloudflareAccount;
|
|
8
|
+
this.smartdns = smartdnsInstance ?? new plugins.smartdnsClient.Smartdns({});
|
|
9
|
+
}
|
|
10
|
+
getSupportedTypes() {
|
|
11
|
+
return ['dns-01'];
|
|
12
|
+
}
|
|
13
|
+
async prepare(ch) {
|
|
14
|
+
// set DNS TXT record
|
|
15
|
+
await this.cf.convenience.acmeSetDnsChallenge(ch);
|
|
16
|
+
// wait for DNS propagation
|
|
17
|
+
await this.smartdns.checkUntilAvailable(ch.hostName, 'TXT', ch.challenge, 100, 5000);
|
|
18
|
+
}
|
|
19
|
+
async cleanup(ch) {
|
|
20
|
+
// remove DNS TXT record
|
|
21
|
+
await this.cf.convenience.acmeRemoveDnsChallenge(ch);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG5zMDFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvaGFuZGxlcnMvRG5zMDFIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUM7QUFHbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUNFLGlCQUFzQixFQUN0QixnQkFBa0Q7UUFFbEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBeUM7UUFDNUQscUJBQXFCO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsMkJBQTJCO1FBQzNCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FDckMsRUFBRSxDQUFDLFFBQVEsRUFDWCxLQUFLLEVBQ0wsRUFBRSxDQUFDLFNBQVMsRUFDWixHQUFHLEVBQ0gsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUF5QztRQUM1RCx3QkFBd0I7UUFDeEIsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { IChallengeHandler } from './IChallengeHandler.js';
|
|
2
|
+
/**
|
|
3
|
+
* HTTP-01 ACME challenge handler using file-system webroot.
|
|
4
|
+
* Writes and removes the challenge file under <webroot>/.well-known/acme-challenge/.
|
|
5
|
+
*/
|
|
6
|
+
export interface Http01HandlerOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Directory that serves HTTP requests for /.well-known/acme-challenge
|
|
9
|
+
*/
|
|
10
|
+
webroot: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class Http01Handler implements IChallengeHandler<{
|
|
13
|
+
type: string;
|
|
14
|
+
token: string;
|
|
15
|
+
keyAuthorization: string;
|
|
16
|
+
webPath: string;
|
|
17
|
+
}> {
|
|
18
|
+
private webroot;
|
|
19
|
+
constructor(options: Http01HandlerOptions);
|
|
20
|
+
getSupportedTypes(): string[];
|
|
21
|
+
prepare(ch: {
|
|
22
|
+
token: string;
|
|
23
|
+
keyAuthorization: string;
|
|
24
|
+
webPath: string;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
verify(ch: {
|
|
27
|
+
webPath: string;
|
|
28
|
+
keyAuthorization: string;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
cleanup(ch: {
|
|
31
|
+
token: string;
|
|
32
|
+
webPath: string;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
export class Http01Handler {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.webroot = options.webroot;
|
|
6
|
+
}
|
|
7
|
+
getSupportedTypes() {
|
|
8
|
+
return ['http-01'];
|
|
9
|
+
}
|
|
10
|
+
async prepare(ch) {
|
|
11
|
+
const relWebPath = ch.webPath.replace(/^\/+/, '');
|
|
12
|
+
const filePath = path.join(this.webroot, relWebPath);
|
|
13
|
+
const dir = path.dirname(filePath);
|
|
14
|
+
await fs.mkdir(dir, { recursive: true });
|
|
15
|
+
await fs.writeFile(filePath, ch.keyAuthorization, 'utf8');
|
|
16
|
+
}
|
|
17
|
+
async verify(ch) {
|
|
18
|
+
// Optional: implement HTTP polling if desired
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
async cleanup(ch) {
|
|
22
|
+
const relWebPath = ch.webPath.replace(/^\/+/, '');
|
|
23
|
+
const filePath = path.join(this.webroot, relWebPath);
|
|
24
|
+
try {
|
|
25
|
+
await fs.unlink(filePath);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// ignore missing file
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cDAxSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2hhbmRsZXJzL0h0dHAwMUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFjN0IsTUFBTSxPQUFPLGFBQWE7SUFReEIsWUFBWSxPQUE2QjtRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBZ0U7UUFDbkYsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFpRDtRQUNuRSw4Q0FBOEM7UUFDOUMsT0FBTztJQUNULENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQXNDO1FBQ3pELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxzQkFBc0I7UUFDeEIsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pluggable interface for ACME challenge handlers.
|
|
3
|
+
* Supports DNS-01, HTTP-01, TLS-ALPN-01, or custom challenge types.
|
|
4
|
+
*/
|
|
5
|
+
export interface IChallengeHandler<T> {
|
|
6
|
+
/**
|
|
7
|
+
* ACME challenge types this handler supports (e.g. ['dns-01']).
|
|
8
|
+
*/
|
|
9
|
+
getSupportedTypes(): string[];
|
|
10
|
+
/**
|
|
11
|
+
* Prepare the challenge: set DNS record, start HTTP/TLS server, etc.
|
|
12
|
+
*/
|
|
13
|
+
prepare(ch: T): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Optional extra verify step (HTTP GET, ALPN handshake).
|
|
16
|
+
*/
|
|
17
|
+
verify?(ch: T): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Clean up resources: remove DNS record, stop server.
|
|
20
|
+
*/
|
|
21
|
+
cleanup(ch: T): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Removed legacy handler adapter
|
|
2
|
+
export { Dns01Handler } from './Dns01Handler.js';
|
|
3
|
+
export { Http01Handler } from './Http01Handler.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9oYW5kbGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxpQ0FBaUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyJ9
|
package/dist_ts/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './smartacme.classes.smartacme.js';
|
|
2
|
-
export { Cert } from './smartacme.classes.cert.js';
|
|
2
|
+
export { SmartacmeCert as Cert } from './smartacme.classes.cert.js';
|
package/dist_ts/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './smartacme.classes.smartacme.js';
|
|
2
|
-
export { Cert } from './smartacme.classes.cert.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export { SmartacmeCert as Cert } from './smartacme.classes.cert.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLElBQUksSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUMifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as plugins from './smartacme.plugins.js';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class SmartacmeCert extends plugins.smartdata.SmartDataDbDoc<SmartacmeCert, plugins.tsclass.network.ICert> implements plugins.tsclass.network.ICert {
|
|
3
3
|
id: string;
|
|
4
4
|
domainName: string;
|
|
5
5
|
created: number;
|
|
@@ -9,9 +9,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import * as plugins from './smartacme.plugins.js';
|
|
11
11
|
import * as interfaces from './interfaces/index.js';
|
|
12
|
-
import {
|
|
12
|
+
import { SmartacmeCertManager } from './smartacme.classes.certmanager.js';
|
|
13
13
|
import { Collection, svDb, unI } from '@push.rocks/smartdata';
|
|
14
|
-
let
|
|
14
|
+
let SmartacmeCert = class SmartacmeCert extends plugins.smartdata.SmartDataDbDoc {
|
|
15
15
|
isStillValid() {
|
|
16
16
|
return this.validUntil >= Date.now();
|
|
17
17
|
}
|
|
@@ -39,36 +39,36 @@ let Cert = class Cert extends plugins.smartdata.SmartDataDbDoc {
|
|
|
39
39
|
__decorate([
|
|
40
40
|
unI(),
|
|
41
41
|
__metadata("design:type", String)
|
|
42
|
-
],
|
|
42
|
+
], SmartacmeCert.prototype, "id", void 0);
|
|
43
43
|
__decorate([
|
|
44
44
|
svDb(),
|
|
45
45
|
__metadata("design:type", String)
|
|
46
|
-
],
|
|
46
|
+
], SmartacmeCert.prototype, "domainName", void 0);
|
|
47
47
|
__decorate([
|
|
48
48
|
svDb(),
|
|
49
49
|
__metadata("design:type", Number)
|
|
50
|
-
],
|
|
50
|
+
], SmartacmeCert.prototype, "created", void 0);
|
|
51
51
|
__decorate([
|
|
52
52
|
svDb(),
|
|
53
53
|
__metadata("design:type", String)
|
|
54
|
-
],
|
|
54
|
+
], SmartacmeCert.prototype, "privateKey", void 0);
|
|
55
55
|
__decorate([
|
|
56
56
|
svDb(),
|
|
57
57
|
__metadata("design:type", String)
|
|
58
|
-
],
|
|
58
|
+
], SmartacmeCert.prototype, "publicKey", void 0);
|
|
59
59
|
__decorate([
|
|
60
60
|
svDb(),
|
|
61
61
|
__metadata("design:type", String)
|
|
62
|
-
],
|
|
62
|
+
], SmartacmeCert.prototype, "csr", void 0);
|
|
63
63
|
__decorate([
|
|
64
64
|
svDb(),
|
|
65
65
|
__metadata("design:type", Number)
|
|
66
|
-
],
|
|
67
|
-
|
|
66
|
+
], SmartacmeCert.prototype, "validUntil", void 0);
|
|
67
|
+
SmartacmeCert = __decorate([
|
|
68
68
|
plugins.smartdata.Collection(() => {
|
|
69
|
-
return
|
|
69
|
+
return SmartacmeCertManager.activeDB;
|
|
70
70
|
}),
|
|
71
71
|
__metadata("design:paramtypes", [Object])
|
|
72
|
-
],
|
|
73
|
-
export {
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
], SmartacmeCert);
|
|
73
|
+
export { SmartacmeCert };
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhY21lLmNsYXNzZXMuY2VydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWNtZS5jbGFzc2VzLmNlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxPQUFPLEtBQUssVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3ZELElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQ1gsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQTREO0lBd0IvRSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsTUFBTSx5QkFBeUIsR0FDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLE9BQU8sQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3pDLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxNQUFNLENBQUMsV0FBMEM7UUFDdEQsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksVUFBeUM7UUFDbkQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQS9DUTtJQUROLEdBQUcsRUFBRTs7eUNBQ1k7QUFHWDtJQUROLElBQUksRUFBRTs7aURBQ21CO0FBR25CO0lBRE4sSUFBSSxFQUFFOzs4Q0FDZ0I7QUFHaEI7SUFETixJQUFJLEVBQUU7O2lEQUNtQjtBQUduQjtJQUROLElBQUksRUFBRTs7Z0RBQ2tCO0FBR2xCO0lBRE4sSUFBSSxFQUFFOzswQ0FDWTtBQUdaO0lBRE4sSUFBSSxFQUFFOztpREFDbUI7QUF2QmYsYUFBYTtJQUh6QixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDakMsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7SUFDdkMsQ0FBQyxDQUFDOztHQUNXLGFBQWEsQ0FvRHpCIn0=
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as plugins from './smartacme.plugins.js';
|
|
2
|
-
import {
|
|
2
|
+
import { SmartacmeCert } from './smartacme.classes.cert.js';
|
|
3
3
|
import { SmartAcme } from './smartacme.classes.smartacme.js';
|
|
4
|
-
export declare class
|
|
4
|
+
export declare class SmartacmeCertManager {
|
|
5
5
|
static activeDB: plugins.smartdata.SmartdataDb;
|
|
6
6
|
private mongoDescriptor;
|
|
7
7
|
smartdataDb: plugins.smartdata.SmartdataDb;
|
|
8
|
-
interestMap: plugins.lik.InterestMap<string,
|
|
8
|
+
interestMap: plugins.lik.InterestMap<string, SmartacmeCert>;
|
|
9
9
|
constructor(smartAcmeArg: SmartAcme, optionsArg: {
|
|
10
10
|
mongoDescriptor: plugins.smartdata.IMongoDescriptor;
|
|
11
11
|
});
|
|
@@ -15,7 +15,7 @@ export declare class CertManager {
|
|
|
15
15
|
* @returns the Cert class or null
|
|
16
16
|
* @param certDomainNameArg the domain Name to retrieve the vcertificate for
|
|
17
17
|
*/
|
|
18
|
-
retrieveCertificate(certDomainNameArg: string): Promise<
|
|
18
|
+
retrieveCertificate(certDomainNameArg: string): Promise<SmartacmeCert>;
|
|
19
19
|
/**
|
|
20
20
|
* stores the certificate
|
|
21
21
|
* @param optionsArg
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as plugins from './smartacme.plugins.js';
|
|
2
|
-
import {
|
|
2
|
+
import { SmartacmeCert } from './smartacme.classes.cert.js';
|
|
3
3
|
import { SmartAcme } from './smartacme.classes.smartacme.js';
|
|
4
4
|
import * as interfaces from './interfaces/index.js';
|
|
5
|
-
export class
|
|
5
|
+
export class SmartacmeCertManager {
|
|
6
6
|
constructor(smartAcmeArg, optionsArg) {
|
|
7
7
|
this.mongoDescriptor = optionsArg.mongoDescriptor;
|
|
8
8
|
}
|
|
@@ -10,7 +10,7 @@ export class CertManager {
|
|
|
10
10
|
// Smartdata DB
|
|
11
11
|
this.smartdataDb = new plugins.smartdata.SmartdataDb(this.mongoDescriptor);
|
|
12
12
|
await this.smartdataDb.init();
|
|
13
|
-
|
|
13
|
+
SmartacmeCertManager.activeDB = this.smartdataDb;
|
|
14
14
|
// Pending Map
|
|
15
15
|
this.interestMap = new plugins.lik.InterestMap((certName) => certName);
|
|
16
16
|
}
|
|
@@ -20,7 +20,7 @@ export class CertManager {
|
|
|
20
20
|
* @param certDomainNameArg the domain Name to retrieve the vcertificate for
|
|
21
21
|
*/
|
|
22
22
|
async retrieveCertificate(certDomainNameArg) {
|
|
23
|
-
const existingCertificate = await
|
|
23
|
+
const existingCertificate = await SmartacmeCert.getInstance({
|
|
24
24
|
domainName: certDomainNameArg,
|
|
25
25
|
});
|
|
26
26
|
if (existingCertificate) {
|
|
@@ -35,7 +35,7 @@ export class CertManager {
|
|
|
35
35
|
* @param optionsArg
|
|
36
36
|
*/
|
|
37
37
|
async storeCertificate(optionsArg) {
|
|
38
|
-
const cert = new
|
|
38
|
+
const cert = new SmartacmeCert(optionsArg);
|
|
39
39
|
await cert.save();
|
|
40
40
|
const interest = this.interestMap.findInterest(cert.domainName);
|
|
41
41
|
if (interest) {
|
|
@@ -44,10 +44,10 @@ export class CertManager {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
async deleteCertificate(certDomainNameArg) {
|
|
47
|
-
const cert = await
|
|
47
|
+
const cert = await SmartacmeCert.getInstance({
|
|
48
48
|
domainName: certDomainNameArg,
|
|
49
49
|
});
|
|
50
50
|
await cert.delete();
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhY21lLmNsYXNzZXMuY2VydG1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGFjbWUuY2xhc3Nlcy5jZXJ0bWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFN0QsT0FBTyxLQUFLLFVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxNQUFNLE9BQU8sb0JBQW9CO0lBYy9CLFlBQ0UsWUFBdUIsRUFDdkIsVUFFQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUNwRCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixlQUFlO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsb0JBQW9CLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFakQsY0FBYztRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsaUJBQXlCO1FBQ3hELE1BQU0sbUJBQW1CLEdBQWtCLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBZ0I7WUFDeEYsVUFBVSxFQUFFLGlCQUFpQjtTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsT0FBTyxtQkFBbUIsQ0FBQztRQUM3QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBeUM7UUFDckUsTUFBTSxJQUFJLEdBQUcsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLGlCQUF5QjtRQUN0RCxNQUFNLElBQUksR0FBa0IsTUFBTSxhQUFhLENBQUMsV0FBVyxDQUFnQjtZQUN6RSxVQUFVLEVBQUUsaUJBQWlCO1NBQzlCLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLENBQUM7Q0FDRiJ9
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* certmatcher is responsible for matching certificates
|
|
3
3
|
*/
|
|
4
|
-
export declare class
|
|
4
|
+
export declare class SmartacmeCertMatcher {
|
|
5
5
|
/**
|
|
6
6
|
* creates a domainName for the certificate that will include the broadest scope
|
|
7
7
|
* for wild card certificates
|
|
@@ -3,7 +3,7 @@ import * as interfaces from './interfaces/index.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* certmatcher is responsible for matching certificates
|
|
5
5
|
*/
|
|
6
|
-
export class
|
|
6
|
+
export class SmartacmeCertMatcher {
|
|
7
7
|
/**
|
|
8
8
|
* creates a domainName for the certificate that will include the broadest scope
|
|
9
9
|
* for wild card certificates
|
|
@@ -16,4 +16,4 @@ export class CertMatcher {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhY21lLmNsYXNzZXMuY2VydG1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGFjbWUuY2xhc3Nlcy5jZXJ0bWF0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sS0FBSyxVQUFVLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9COzs7O09BSUc7SUFDSSxvQ0FBb0MsQ0FBQyxhQUFxQjtRQUMvRCxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsT0FBTyxHQUFHLGNBQWMsQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as plugins from './smartacme.plugins.js';
|
|
2
|
-
import {
|
|
2
|
+
import { SmartacmeCert } from './smartacme.classes.cert.js';
|
|
3
3
|
/**
|
|
4
4
|
* the options for the class @see SmartAcme
|
|
5
5
|
*/
|
|
@@ -7,9 +7,29 @@ export interface ISmartAcmeOptions {
|
|
|
7
7
|
accountPrivateKey?: string;
|
|
8
8
|
accountEmail: string;
|
|
9
9
|
mongoDescriptor: plugins.smartdata.IMongoDescriptor;
|
|
10
|
-
setChallenge: (dnsChallengeArg: plugins.tsclass.network.IDnsChallenge) => Promise<any>;
|
|
11
|
-
removeChallenge: (dnsChallengeArg: plugins.tsclass.network.IDnsChallenge) => Promise<any>;
|
|
12
10
|
environment: 'production' | 'integration';
|
|
11
|
+
/**
|
|
12
|
+
* Optional retry/backoff configuration for transient failures
|
|
13
|
+
*/
|
|
14
|
+
retryOptions?: {
|
|
15
|
+
/** number of retry attempts */
|
|
16
|
+
retries?: number;
|
|
17
|
+
/** backoff multiplier */
|
|
18
|
+
factor?: number;
|
|
19
|
+
/** initial delay in milliseconds */
|
|
20
|
+
minTimeoutMs?: number;
|
|
21
|
+
/** maximum delay cap in milliseconds */
|
|
22
|
+
maxTimeoutMs?: number;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Pluggable ACME challenge handlers (DNS-01, HTTP-01, TLS-ALPN-01, etc.)
|
|
26
|
+
*/
|
|
27
|
+
challengeHandlers?: plugins.handlers.IChallengeHandler<any>[];
|
|
28
|
+
/**
|
|
29
|
+
* Order of challenge types to try (e.g. ['http-01','dns-01']).
|
|
30
|
+
* Defaults to ['dns-01'] or first supported type from handlers.
|
|
31
|
+
*/
|
|
32
|
+
challengePriority?: string[];
|
|
13
33
|
}
|
|
14
34
|
/**
|
|
15
35
|
* class SmartAcme
|
|
@@ -25,21 +45,29 @@ export declare class SmartAcme {
|
|
|
25
45
|
private options;
|
|
26
46
|
private client;
|
|
27
47
|
private smartdns;
|
|
28
|
-
logger: plugins.smartlog.
|
|
48
|
+
logger: plugins.smartlog.Smartlog;
|
|
29
49
|
private privateKey;
|
|
30
|
-
private setChallenge;
|
|
31
|
-
private removeChallenge;
|
|
32
50
|
private certmanager;
|
|
33
51
|
private certmatcher;
|
|
52
|
+
private retryOptions;
|
|
53
|
+
private pendingChallenges;
|
|
54
|
+
private challengeHandlers;
|
|
55
|
+
private challengePriority;
|
|
34
56
|
constructor(optionsArg: ISmartAcmeOptions);
|
|
35
57
|
/**
|
|
36
|
-
*
|
|
58
|
+
* starts the instance
|
|
37
59
|
* ```ts
|
|
38
|
-
* await myCloudlyInstance.
|
|
60
|
+
* await myCloudlyInstance.start() // does not support options
|
|
39
61
|
* ```
|
|
40
62
|
*/
|
|
41
|
-
|
|
63
|
+
start(): Promise<void>;
|
|
42
64
|
stop(): Promise<void>;
|
|
65
|
+
/** Retry helper with exponential backoff */
|
|
66
|
+
private retry;
|
|
67
|
+
/** Clean up pending challenges and shut down */
|
|
68
|
+
private handleShutdown;
|
|
69
|
+
/** Handle process signals for graceful shutdown */
|
|
70
|
+
private handleSignal;
|
|
43
71
|
/**
|
|
44
72
|
* gets a certificate
|
|
45
73
|
* it runs through the following steps
|
|
@@ -54,5 +82,6 @@ export declare class SmartAcme {
|
|
|
54
82
|
*
|
|
55
83
|
* @param domainArg
|
|
56
84
|
*/
|
|
57
|
-
getCertificateForDomain(domainArg: string): Promise<
|
|
85
|
+
getCertificateForDomain(domainArg: string): Promise<SmartacmeCert>;
|
|
86
|
+
getAllCertificates(): Promise<SmartacmeCert[]>;
|
|
58
87
|
}
|