@push.rocks/smartacme 6.2.0 → 7.2.2
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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/certmanagers/index.d.ts +2 -0
- package/dist_ts/certmanagers/index.js +3 -0
- package/dist_ts/certmanagers/memory.d.ts +18 -0
- package/dist_ts/certmanagers/memory.js +33 -0
- package/dist_ts/certmanagers/mongo.d.ts +23 -0
- package/dist_ts/certmanagers/mongo.js +40 -0
- package/dist_ts/certmanagers.d.ts +42 -0
- package/dist_ts/certmanagers.js +86 -0
- package/dist_ts/handlers/Dns01Handler.js +1 -3
- package/dist_ts/index.d.ts +2 -0
- package/dist_ts/index.js +2 -1
- package/dist_ts/interfaces/certmanager.d.ts +33 -0
- package/dist_ts/interfaces/certmanager.js +2 -0
- package/dist_ts/smartacme.classes.cert.d.ts +11 -4
- package/dist_ts/smartacme.classes.cert.js +23 -68
- package/dist_ts/smartacme.classes.certmanager.d.ts +18 -0
- package/dist_ts/smartacme.classes.certmanager.js +40 -1
- package/dist_ts/smartacme.classes.smartacme.d.ts +10 -3
- package/dist_ts/smartacme.classes.smartacme.js +65 -29
- package/package.json +2 -2
- package/readme.md +49 -82
- package/readme.plan.md +13 -41
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/certmanagers/index.ts +2 -0
- package/ts/certmanagers/memory.ts +38 -0
- package/ts/certmanagers/mongo.ts +52 -0
- package/ts/handlers/Dns01Handler.ts +0 -8
- package/ts/index.ts +2 -0
- package/ts/interfaces/certmanager.ts +36 -0
- package/ts/smartacme.classes.cert.ts +22 -47
- package/ts/smartacme.classes.smartacme.ts +90 -33
- package/ts/smartacme.classes.certmanager.ts +0 -77
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartacme',
|
|
6
|
-
version: '
|
|
6
|
+
version: '7.2.2',
|
|
7
7
|
description: 'A TypeScript-based ACME client for LetsEncrypt certificate management with a focus on simplicity and power.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDZHQUE2RztDQUMzSCxDQUFBIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './memory.js';
|
|
2
|
+
export * from './mongo.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jZXJ0bWFuYWdlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ICertManager } from '../interfaces/certmanager.js';
|
|
2
|
+
import { SmartacmeCert } from '../smartacme.classes.cert.js';
|
|
3
|
+
/**
|
|
4
|
+
* In-memory certificate manager for mongoless mode.
|
|
5
|
+
* Stores certificates in memory only and does not connect to MongoDB.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MemoryCertManager implements ICertManager {
|
|
8
|
+
private certs;
|
|
9
|
+
init(): Promise<void>;
|
|
10
|
+
retrieveCertificate(domainName: string): Promise<SmartacmeCert | null>;
|
|
11
|
+
storeCertificate(cert: SmartacmeCert): Promise<void>;
|
|
12
|
+
deleteCertificate(domainName: string): Promise<void>;
|
|
13
|
+
close(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Wipe all certificates from the in-memory store (for testing)
|
|
16
|
+
*/
|
|
17
|
+
wipe(): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as plugins from '../smartacme.plugins.js';
|
|
2
|
+
import { SmartacmeCert } from '../smartacme.classes.cert.js';
|
|
3
|
+
/**
|
|
4
|
+
* In-memory certificate manager for mongoless mode.
|
|
5
|
+
* Stores certificates in memory only and does not connect to MongoDB.
|
|
6
|
+
*/
|
|
7
|
+
export class MemoryCertManager {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.certs = new Map();
|
|
10
|
+
}
|
|
11
|
+
async init() {
|
|
12
|
+
// no-op for in-memory store
|
|
13
|
+
}
|
|
14
|
+
async retrieveCertificate(domainName) {
|
|
15
|
+
return this.certs.get(domainName) ?? null;
|
|
16
|
+
}
|
|
17
|
+
async storeCertificate(cert) {
|
|
18
|
+
this.certs.set(cert.domainName, cert);
|
|
19
|
+
}
|
|
20
|
+
async deleteCertificate(domainName) {
|
|
21
|
+
this.certs.delete(domainName);
|
|
22
|
+
}
|
|
23
|
+
async close() {
|
|
24
|
+
// no-op
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wipe all certificates from the in-memory store (for testing)
|
|
28
|
+
*/
|
|
29
|
+
async wipe() {
|
|
30
|
+
this.certs.clear();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY2VydG1hbmFnZXJzL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ1UsVUFBSyxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBNEJ4RCxDQUFDO0lBekJRLEtBQUssQ0FBQyxJQUFJO1FBQ2YsNEJBQTRCO0lBQzlCLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBa0I7UUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDNUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFtQjtRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBa0I7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLFFBQVE7SUFDVixDQUFDO0lBQ0Q7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as plugins from '../smartacme.plugins.js';
|
|
2
|
+
import type { ICertManager } from '../interfaces/certmanager.js';
|
|
3
|
+
import { SmartacmeCert } from '../smartacme.classes.cert.js';
|
|
4
|
+
/**
|
|
5
|
+
* MongoDB-backed certificate manager using EasyStore from smartdata.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MongoCertManager implements ICertManager {
|
|
8
|
+
private db;
|
|
9
|
+
private store;
|
|
10
|
+
/**
|
|
11
|
+
* @param mongoDescriptor MongoDB connection settings
|
|
12
|
+
*/
|
|
13
|
+
constructor(mongoDescriptor: plugins.smartdata.IMongoDescriptor);
|
|
14
|
+
init(): Promise<void>;
|
|
15
|
+
retrieveCertificate(domainName: string): Promise<SmartacmeCert | null>;
|
|
16
|
+
storeCertificate(cert: SmartacmeCert): Promise<void>;
|
|
17
|
+
deleteCertificate(domainName: string): Promise<void>;
|
|
18
|
+
close(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Wipe all certificates from the persistent store (for integration testing)
|
|
21
|
+
*/
|
|
22
|
+
wipe(): Promise<void>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as plugins from '../smartacme.plugins.js';
|
|
2
|
+
import { SmartacmeCert } from '../smartacme.classes.cert.js';
|
|
3
|
+
/**
|
|
4
|
+
* MongoDB-backed certificate manager using EasyStore from smartdata.
|
|
5
|
+
*/
|
|
6
|
+
export class MongoCertManager {
|
|
7
|
+
/**
|
|
8
|
+
* @param mongoDescriptor MongoDB connection settings
|
|
9
|
+
*/
|
|
10
|
+
constructor(mongoDescriptor) {
|
|
11
|
+
this.db = new plugins.smartdata.SmartdataDb(mongoDescriptor);
|
|
12
|
+
// Use a single EasyStore document to hold all certs keyed by domainName
|
|
13
|
+
this.store = new plugins.smartdata.EasyStore('smartacme-certs', this.db);
|
|
14
|
+
}
|
|
15
|
+
async init() {
|
|
16
|
+
await this.db.init();
|
|
17
|
+
}
|
|
18
|
+
async retrieveCertificate(domainName) {
|
|
19
|
+
const data = await this.store.readKey(domainName);
|
|
20
|
+
return data ? new SmartacmeCert(data) : null;
|
|
21
|
+
}
|
|
22
|
+
async storeCertificate(cert) {
|
|
23
|
+
// write plain object for persistence
|
|
24
|
+
await this.store.writeKey(cert.domainName, { ...cert });
|
|
25
|
+
}
|
|
26
|
+
async deleteCertificate(domainName) {
|
|
27
|
+
await this.store.deleteKey(domainName);
|
|
28
|
+
}
|
|
29
|
+
async close() {
|
|
30
|
+
await this.db.close();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Wipe all certificates from the persistent store (for integration testing)
|
|
34
|
+
*/
|
|
35
|
+
async wipe() {
|
|
36
|
+
// clear all keys in the easy store
|
|
37
|
+
await this.store.wipe();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jZXJ0bWFuYWdlcnMvbW9uZ28udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFN0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCOztPQUVHO0lBQ0gsWUFBWSxlQUFtRDtRQUM3RCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0Qsd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FDMUMsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxFQUFFLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQixDQUFDLFVBQWtCO1FBQ2pELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFtQjtRQUMvQyxxQ0FBcUM7UUFDckMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsVUFBa0I7UUFDL0MsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsbUNBQW1DO1FBQ25DLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as plugins from './smartacme.plugins.js';
|
|
2
|
+
import type { ICertManager } from './interfaces/certmanager.js';
|
|
3
|
+
import { SmartacmeCert } from './smartacme.classes.cert.js';
|
|
4
|
+
/**
|
|
5
|
+
* In-memory certificate manager for mongoless mode.
|
|
6
|
+
* Stores certificates in memory only and does not connect to MongoDB.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MemoryCertManager implements ICertManager {
|
|
9
|
+
interestMap: plugins.lik.InterestMap<string, SmartacmeCert>;
|
|
10
|
+
private certs;
|
|
11
|
+
constructor();
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
retrieveCertificate(domainName: string): Promise<SmartacmeCert | null>;
|
|
14
|
+
storeCertificate(cert: SmartacmeCert): Promise<void>;
|
|
15
|
+
deleteCertificate(domainName: string): Promise<void>;
|
|
16
|
+
close(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Wipe all certificates from the in-memory store (for testing)
|
|
19
|
+
*/
|
|
20
|
+
wipe(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* MongoDB-backed certificate manager using EasyStore from smartdata.
|
|
24
|
+
*/
|
|
25
|
+
export declare class MongoCertManager implements ICertManager {
|
|
26
|
+
interestMap: plugins.lik.InterestMap<string, SmartacmeCert>;
|
|
27
|
+
private db;
|
|
28
|
+
private store;
|
|
29
|
+
/**
|
|
30
|
+
* @param mongoDescriptor MongoDB connection settings
|
|
31
|
+
*/
|
|
32
|
+
constructor(mongoDescriptor: plugins.smartdata.IMongoDescriptor);
|
|
33
|
+
init(): Promise<void>;
|
|
34
|
+
retrieveCertificate(domainName: string): Promise<SmartacmeCert | null>;
|
|
35
|
+
storeCertificate(cert: SmartacmeCert): Promise<void>;
|
|
36
|
+
deleteCertificate(domainName: string): Promise<void>;
|
|
37
|
+
close(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Wipe all certificates from the persistent store (for integration testing)
|
|
40
|
+
*/
|
|
41
|
+
wipe(): Promise<void>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as plugins from './smartacme.plugins.js';
|
|
2
|
+
import { SmartacmeCert } from './smartacme.classes.cert.js';
|
|
3
|
+
/**
|
|
4
|
+
* In-memory certificate manager for mongoless mode.
|
|
5
|
+
* Stores certificates in memory only and does not connect to MongoDB.
|
|
6
|
+
*/
|
|
7
|
+
export class MemoryCertManager {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.certs = new Map();
|
|
10
|
+
this.interestMap = new plugins.lik.InterestMap((domain) => domain);
|
|
11
|
+
}
|
|
12
|
+
async init() {
|
|
13
|
+
// no-op for in-memory store
|
|
14
|
+
}
|
|
15
|
+
async retrieveCertificate(domainName) {
|
|
16
|
+
return this.certs.get(domainName) ?? null;
|
|
17
|
+
}
|
|
18
|
+
async storeCertificate(cert) {
|
|
19
|
+
this.certs.set(cert.domainName, cert);
|
|
20
|
+
const interest = this.interestMap.findInterest(cert.domainName);
|
|
21
|
+
if (interest) {
|
|
22
|
+
interest.fullfillInterest(cert);
|
|
23
|
+
interest.markLost();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async deleteCertificate(domainName) {
|
|
27
|
+
this.certs.delete(domainName);
|
|
28
|
+
}
|
|
29
|
+
async close() {
|
|
30
|
+
// no-op
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Wipe all certificates from the in-memory store (for testing)
|
|
34
|
+
*/
|
|
35
|
+
async wipe() {
|
|
36
|
+
this.certs.clear();
|
|
37
|
+
// reset interest map
|
|
38
|
+
this.interestMap = new plugins.lik.InterestMap((domain) => domain);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* MongoDB-backed certificate manager using EasyStore from smartdata.
|
|
43
|
+
*/
|
|
44
|
+
export class MongoCertManager {
|
|
45
|
+
/**
|
|
46
|
+
* @param mongoDescriptor MongoDB connection settings
|
|
47
|
+
*/
|
|
48
|
+
constructor(mongoDescriptor) {
|
|
49
|
+
this.db = new plugins.smartdata.SmartdataDb(mongoDescriptor);
|
|
50
|
+
// Use a single EasyStore document to hold all certs keyed by domainName
|
|
51
|
+
this.store = new plugins.smartdata.EasyStore('smartacme-certs', this.db);
|
|
52
|
+
this.interestMap = new plugins.lik.InterestMap((domain) => domain);
|
|
53
|
+
}
|
|
54
|
+
async init() {
|
|
55
|
+
await this.db.init();
|
|
56
|
+
}
|
|
57
|
+
async retrieveCertificate(domainName) {
|
|
58
|
+
const data = await this.store.readKey(domainName);
|
|
59
|
+
return data ? new SmartacmeCert(data) : null;
|
|
60
|
+
}
|
|
61
|
+
async storeCertificate(cert) {
|
|
62
|
+
// write plain object for persistence
|
|
63
|
+
await this.store.writeKey(cert.domainName, { ...cert });
|
|
64
|
+
const interest = this.interestMap.findInterest(cert.domainName);
|
|
65
|
+
if (interest) {
|
|
66
|
+
interest.fullfillInterest(cert);
|
|
67
|
+
interest.markLost();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async deleteCertificate(domainName) {
|
|
71
|
+
await this.store.deleteKey(domainName);
|
|
72
|
+
}
|
|
73
|
+
async close() {
|
|
74
|
+
await this.db.close();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Wipe all certificates from the persistent store (for integration testing)
|
|
78
|
+
*/
|
|
79
|
+
async wipe() {
|
|
80
|
+
// clear all keys in the easy store
|
|
81
|
+
await this.store.wipe();
|
|
82
|
+
// reset interest map
|
|
83
|
+
this.interestMap = new plugins.lik.InterestMap((domain) => domain);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydG1hbmFnZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2VydG1hbmFnZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFJNUI7UUFGUSxVQUFLLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFHcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZiw0QkFBNEI7SUFDOUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxVQUFrQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUM1QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQW1CO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQWtCO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxD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
|
|
@@ -13,8 +13,6 @@ export class Dns01Handler {
|
|
|
13
13
|
async prepare(ch) {
|
|
14
14
|
// set DNS TXT record
|
|
15
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
16
|
}
|
|
19
17
|
async cleanup(ch) {
|
|
20
18
|
// remove DNS TXT record
|
|
@@ -24,4 +22,4 @@ export class Dns01Handler {
|
|
|
24
22
|
return this.cf.convenience.isDomainSupported(domainArg);
|
|
25
23
|
}
|
|
26
24
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG5zMDFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvaGFuZGxlcnMvRG5zMDFIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUM7QUFHbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUNFLHFCQUFxRSxFQUNyRSxnQkFBa0Q7UUFFbEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBeUM7UUFDNUQscUJBQXFCO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBeUM7UUFDNUQsd0JBQXdCO1FBQ3hCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxTQUFpQjtRQUN6RCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRiJ9
|
package/dist_ts/index.d.ts
CHANGED
package/dist_ts/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './smartacme.classes.smartacme.js';
|
|
2
2
|
export { SmartacmeCert as Cert } from './smartacme.classes.cert.js';
|
|
3
|
-
|
|
3
|
+
export { MemoryCertManager, MongoCertManager } from './certmanagers/index.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLElBQUksSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { SmartacmeCert } from '../smartacme.classes.cert.js';
|
|
2
|
+
/**
|
|
3
|
+
* Interface for certificate storage managers.
|
|
4
|
+
* Users can implement this to provide custom persistence (in-memory,
|
|
5
|
+
* file-based, Redis, etc.).
|
|
6
|
+
*/
|
|
7
|
+
export interface ICertManager {
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the store (e.g., connect to database).
|
|
10
|
+
*/
|
|
11
|
+
init(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Retrieve a certificate record by domain name.
|
|
14
|
+
* Returns null if none found.
|
|
15
|
+
*/
|
|
16
|
+
retrieveCertificate(domainName: string): Promise<SmartacmeCert | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Store a certificate record. Fulfills any pending interests.
|
|
19
|
+
*/
|
|
20
|
+
storeCertificate(cert: SmartacmeCert): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Delete a certificate record by domain name.
|
|
23
|
+
*/
|
|
24
|
+
deleteCertificate(domainName: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Close the store (e.g., disconnect database).
|
|
27
|
+
*/
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Optional: wipe all stored certificates (e.g., for integration testing)
|
|
31
|
+
*/
|
|
32
|
+
wipe(): Promise<void>;
|
|
33
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Plain certificate record.
|
|
3
|
+
*/
|
|
4
|
+
export declare class SmartacmeCert {
|
|
3
5
|
id: string;
|
|
4
6
|
domainName: string;
|
|
5
7
|
created: number;
|
|
@@ -7,8 +9,13 @@ export declare class SmartacmeCert extends plugins.smartdata.SmartDataDbDoc<Smar
|
|
|
7
9
|
publicKey: string;
|
|
8
10
|
csr: string;
|
|
9
11
|
validUntil: number;
|
|
12
|
+
constructor(data?: Partial<SmartacmeCert>);
|
|
13
|
+
/**
|
|
14
|
+
* Check if certificate is still valid.
|
|
15
|
+
*/
|
|
10
16
|
isStillValid(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Check if certificate needs renewal (e.g., expires in <10 days).
|
|
19
|
+
*/
|
|
11
20
|
shouldBeRenewed(): boolean;
|
|
12
|
-
update(certDataArg: plugins.tsclass.network.ICert): void;
|
|
13
|
-
constructor(optionsArg: plugins.tsclass.network.ICert);
|
|
14
21
|
}
|
|
@@ -1,74 +1,29 @@
|
|
|
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
1
|
import * as plugins from './smartacme.plugins.js';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Plain certificate record.
|
|
4
|
+
*/
|
|
5
|
+
export class SmartacmeCert {
|
|
6
|
+
constructor(data = {}) {
|
|
7
|
+
this.id = data.id || '';
|
|
8
|
+
this.domainName = data.domainName || '';
|
|
9
|
+
this.created = data.created || Date.now();
|
|
10
|
+
this.privateKey = data.privateKey || '';
|
|
11
|
+
this.publicKey = data.publicKey || '';
|
|
12
|
+
this.csr = data.csr || '';
|
|
13
|
+
this.validUntil = data.validUntil || 0;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if certificate is still valid.
|
|
17
|
+
*/
|
|
15
18
|
isStillValid() {
|
|
16
19
|
return this.validUntil >= Date.now();
|
|
17
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if certificate needs renewal (e.g., expires in <10 days).
|
|
23
|
+
*/
|
|
18
24
|
shouldBeRenewed() {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
days: 10,
|
|
22
|
-
});
|
|
23
|
-
return !(this.validUntil >= shouldBeValidAtLeastUntil);
|
|
24
|
-
}
|
|
25
|
-
update(certDataArg) {
|
|
26
|
-
Object.keys(certDataArg).forEach((key) => {
|
|
27
|
-
this[key] = certDataArg[key];
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
constructor(optionsArg) {
|
|
31
|
-
super();
|
|
32
|
-
if (optionsArg) {
|
|
33
|
-
Object.keys(optionsArg).forEach((key) => {
|
|
34
|
-
this[key] = optionsArg[key];
|
|
35
|
-
});
|
|
36
|
-
}
|
|
25
|
+
const threshold = Date.now() + plugins.smarttime.getMilliSecondsFromUnits({ days: 10 });
|
|
26
|
+
return this.validUntil < threshold;
|
|
37
27
|
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
unI(),
|
|
41
|
-
__metadata("design:type", String)
|
|
42
|
-
], SmartacmeCert.prototype, "id", void 0);
|
|
43
|
-
__decorate([
|
|
44
|
-
svDb(),
|
|
45
|
-
__metadata("design:type", String)
|
|
46
|
-
], SmartacmeCert.prototype, "domainName", void 0);
|
|
47
|
-
__decorate([
|
|
48
|
-
svDb(),
|
|
49
|
-
__metadata("design:type", Number)
|
|
50
|
-
], SmartacmeCert.prototype, "created", void 0);
|
|
51
|
-
__decorate([
|
|
52
|
-
svDb(),
|
|
53
|
-
__metadata("design:type", String)
|
|
54
|
-
], SmartacmeCert.prototype, "privateKey", void 0);
|
|
55
|
-
__decorate([
|
|
56
|
-
svDb(),
|
|
57
|
-
__metadata("design:type", String)
|
|
58
|
-
], SmartacmeCert.prototype, "publicKey", void 0);
|
|
59
|
-
__decorate([
|
|
60
|
-
svDb(),
|
|
61
|
-
__metadata("design:type", String)
|
|
62
|
-
], SmartacmeCert.prototype, "csr", void 0);
|
|
63
|
-
__decorate([
|
|
64
|
-
svDb(),
|
|
65
|
-
__metadata("design:type", Number)
|
|
66
|
-
], SmartacmeCert.prototype, "validUntil", void 0);
|
|
67
|
-
SmartacmeCert = __decorate([
|
|
68
|
-
plugins.smartdata.Collection(() => {
|
|
69
|
-
return SmartacmeCertManager.activeDB;
|
|
70
|
-
}),
|
|
71
|
-
__metadata("design:paramtypes", [Object])
|
|
72
|
-
], SmartacmeCert);
|
|
73
|
-
export { SmartacmeCert };
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhY21lLmNsYXNzZXMuY2VydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWNtZS5jbGFzc2VzLmNlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxPQUFPLEtBQUssVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3ZELElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQ1gsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQTREO0lBd0IvRSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsTUFBTSx5QkFBeUIsR0FDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLE9BQU8sQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3pDLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxNQUFNLENBQUMsV0FBMEM7UUFDdEQsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksVUFBeUM7UUFDbkQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQS9DUTtJQUROLEdBQUcsRUFBRTs7eUNBQ1k7QUFHWDtJQUROLElBQUksRUFBRTs7aURBQ21CO0FBR25CO0lBRE4sSUFBSSxFQUFFOzs4Q0FDZ0I7QUFHaEI7SUFETixJQUFJLEVBQUU7O2lEQUNtQjtBQUduQjtJQUROLElBQUksRUFBRTs7Z0RBQ2tCO0FBR2xCO0lBRE4sSUFBSSxFQUFFOzswQ0FDWTtBQUdaO0lBRE4sSUFBSSxFQUFFOztpREFDbUI7QUF2QmYsYUFBYTtJQUh6QixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDakMsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7SUFDdkMsQ0FBQyxDQUFDOztHQUNXLGFBQWEsQ0FvRHpCIn0=
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhY21lLmNsYXNzZXMuY2VydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWNtZS5jbGFzc2VzLmNlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUVsRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBU3hCLFlBQVksT0FBK0IsRUFBRTtRQUMzQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEYsT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0NBQ0YifQ==
|
|
@@ -22,4 +22,22 @@ export declare class SmartacmeCertManager {
|
|
|
22
22
|
*/
|
|
23
23
|
storeCertificate(optionsArg: plugins.tsclass.network.ICert): Promise<void>;
|
|
24
24
|
deleteCertificate(certDomainNameArg: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Close underlying MongoDB connection
|
|
27
|
+
*/
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* In-memory certificate manager for mongoless mode.
|
|
32
|
+
* Stores certificates in memory only and does not connect to MongoDB.
|
|
33
|
+
*/
|
|
34
|
+
export declare class MemoryCertManager {
|
|
35
|
+
interestMap: plugins.lik.InterestMap<string, SmartacmeCert>;
|
|
36
|
+
private certs;
|
|
37
|
+
constructor();
|
|
38
|
+
init(): Promise<void>;
|
|
39
|
+
retrieveCertificate(certDomainName: string): Promise<SmartacmeCert>;
|
|
40
|
+
storeCertificate(optionsArg: plugins.tsclass.network.ICert): Promise<void>;
|
|
41
|
+
deleteCertificate(certDomainName: string): Promise<void>;
|
|
42
|
+
close(): Promise<void>;
|
|
25
43
|
}
|
|
@@ -49,5 +49,44 @@ export class SmartacmeCertManager {
|
|
|
49
49
|
});
|
|
50
50
|
await cert.delete();
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Close underlying MongoDB connection
|
|
54
|
+
*/
|
|
55
|
+
async close() {
|
|
56
|
+
await this.smartdataDb.close();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* In-memory certificate manager for mongoless mode.
|
|
61
|
+
* Stores certificates in memory only and does not connect to MongoDB.
|
|
62
|
+
*/
|
|
63
|
+
export class MemoryCertManager {
|
|
64
|
+
constructor() {
|
|
65
|
+
this.certs = new Map();
|
|
66
|
+
this.interestMap = new plugins.lik.InterestMap((domain) => domain);
|
|
67
|
+
}
|
|
68
|
+
async init() {
|
|
69
|
+
// no-op for in-memory store
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
async retrieveCertificate(certDomainName) {
|
|
73
|
+
return this.certs.get(certDomainName) ?? null;
|
|
74
|
+
}
|
|
75
|
+
async storeCertificate(optionsArg) {
|
|
76
|
+
const cert = new SmartacmeCert(optionsArg);
|
|
77
|
+
this.certs.set(cert.domainName, cert);
|
|
78
|
+
const interest = this.interestMap.findInterest(cert.domainName);
|
|
79
|
+
if (interest) {
|
|
80
|
+
interest.fullfillInterest(cert);
|
|
81
|
+
interest.markLost();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async deleteCertificate(certDomainName) {
|
|
85
|
+
this.certs.delete(certDomainName);
|
|
86
|
+
}
|
|
87
|
+
async close() {
|
|
88
|
+
// no-op
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
52
91
|
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhY21lLmNsYXNzZXMuY2VydG1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGFjbWUuY2xhc3Nlcy5jZXJ0bWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFN0QsT0FBTyxLQUFLLFVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxNQUFNLE9BQU8sb0JBQW9CO0lBYy9CLFlBQ0UsWUFBdUIsRUFDdkIsVUFFQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUNwRCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixlQUFlO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsb0JBQW9CLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFakQsY0FBYztRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsaUJBQXlCO1FBQ3hELE1BQU0sbUJBQW1CLEdBQWtCLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBZ0I7WUFDeEYsVUFBVSxFQUFFLGlCQUFpQjtTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFtQixF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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as plugins from './smartacme.plugins.js';
|
|
2
|
+
import type { ICertManager } from './interfaces/certmanager.js';
|
|
2
3
|
import { SmartacmeCert } from './smartacme.classes.cert.js';
|
|
3
4
|
/**
|
|
4
5
|
* the options for the class @see SmartAcme
|
|
@@ -6,7 +7,10 @@ import { SmartacmeCert } from './smartacme.classes.cert.js';
|
|
|
6
7
|
export interface ISmartAcmeOptions {
|
|
7
8
|
accountPrivateKey?: string;
|
|
8
9
|
accountEmail: string;
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Certificate storage manager (e.g., Mongo or in-memory).
|
|
12
|
+
*/
|
|
13
|
+
certManager: ICertManager;
|
|
10
14
|
environment: 'production' | 'integration';
|
|
11
15
|
/**
|
|
12
16
|
* Optional retry/backoff configuration for transient failures
|
|
@@ -47,12 +51,13 @@ export declare class SmartAcme {
|
|
|
47
51
|
private smartdns;
|
|
48
52
|
logger: plugins.smartlog.Smartlog;
|
|
49
53
|
private privateKey;
|
|
50
|
-
|
|
54
|
+
certmanager: ICertManager;
|
|
51
55
|
private certmatcher;
|
|
52
56
|
private retryOptions;
|
|
53
57
|
private pendingChallenges;
|
|
54
58
|
private challengeHandlers;
|
|
55
59
|
private challengePriority;
|
|
60
|
+
private interestMap;
|
|
56
61
|
constructor(optionsArg: ISmartAcmeOptions);
|
|
57
62
|
/**
|
|
58
63
|
* starts the instance
|
|
@@ -61,6 +66,9 @@ export declare class SmartAcme {
|
|
|
61
66
|
* ```
|
|
62
67
|
*/
|
|
63
68
|
start(): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Stops the SmartAcme instance and closes certificate store connections.
|
|
71
|
+
*/
|
|
64
72
|
stop(): Promise<void>;
|
|
65
73
|
/** Retry helper with exponential backoff */
|
|
66
74
|
private retry;
|
|
@@ -83,5 +91,4 @@ export declare class SmartAcme {
|
|
|
83
91
|
* @param domainArg
|
|
84
92
|
*/
|
|
85
93
|
getCertificateForDomain(domainArg: string): Promise<SmartacmeCert>;
|
|
86
|
-
getAllCertificates(): Promise<SmartacmeCert[]>;
|
|
87
94
|
}
|