@push.rocks/smartacme 6.2.0 → 7.2.1

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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartacme',
6
- version: '6.2.0',
6
+ version: '7.2.1',
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,2 @@
1
+ export * from './memory.js';
2
+ export * from './mongo.js';
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG5zMDFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvaGFuZGxlcnMvRG5zMDFIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUM7QUFHbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUNFLHFCQUFxRSxFQUNyRSxnQkFBa0Q7UUFFbEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBeUM7UUFDNUQscUJBQXFCO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsMkJBQTJCO1FBQzNCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FDckMsRUFBRSxDQUFDLFFBQVEsRUFDWCxLQUFLLEVBQ0wsRUFBRSxDQUFDLFNBQVMsRUFDWixHQUFHLEVBQ0gsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUF5QztRQUM1RCx3QkFBd0I7UUFDeEIsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU0sS0FBSyxDQUFDLDRCQUE0QixDQUFDLFNBQWlCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGIn0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG5zMDFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvaGFuZGxlcnMvRG5zMDFIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUM7QUFHbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUNFLHFCQUFxRSxFQUNyRSxnQkFBa0Q7UUFFbEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBeUM7UUFDNUQscUJBQXFCO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBeUM7UUFDNUQsd0JBQXdCO1FBQ3hCLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxTQUFpQjtRQUN6RCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRiJ9
@@ -1,2 +1,4 @@
1
1
  export * from './smartacme.classes.smartacme.js';
2
2
  export { SmartacmeCert as Cert } from './smartacme.classes.cert.js';
3
+ export type { ICertManager } from './interfaces/certmanager.js';
4
+ export { MemoryCertManager, MongoCertManager } from './certmanagers/index.js';
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLElBQUksSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUMifQ==
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
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydG1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbnRlcmZhY2VzL2NlcnRtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1,5 +1,7 @@
1
- import * as plugins from './smartacme.plugins.js';
2
- export declare class SmartacmeCert extends plugins.smartdata.SmartDataDbDoc<SmartacmeCert, plugins.tsclass.network.ICert> implements plugins.tsclass.network.ICert {
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
- import * as interfaces from './interfaces/index.js';
12
- import { SmartacmeCertManager } from './smartacme.classes.certmanager.js';
13
- import { Collection, svDb, unI } from '@push.rocks/smartdata';
14
- let SmartacmeCert = class SmartacmeCert extends plugins.smartdata.SmartDataDbDoc {
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 shouldBeValidAtLeastUntil = Date.now() +
20
- plugins.smarttime.getMilliSecondsFromUnits({
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
- __decorate([
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhY21lLmNsYXNzZXMuY2VydG1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGFjbWUuY2xhc3Nlcy5jZXJ0bWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFN0QsT0FBTyxLQUFLLFVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxNQUFNLE9BQU8sb0JBQW9CO0lBYy9CLFlBQ0UsWUFBdUIsRUFDdkIsVUFFQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUNwRCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixlQUFlO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsb0JBQW9CLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFakQsY0FBYztRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsaUJBQXlCO1FBQ3hELE1BQU0sbUJBQW1CLEdBQWtCLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBZ0I7WUFDeEYsVUFBVSxFQUFFLGlCQUFpQjtTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsT0FBTyxtQkFBbUIsQ0FBQztRQUM3QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBeUM7UUFDckUsTUFBTSxJQUFJLEdBQUcsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLGlCQUF5QjtRQUN0RCxNQUFNLElBQUksR0FBa0IsTUFBTSxhQUFhLENBQUMsV0FBVyxDQUFnQjtZQUN6RSxVQUFVLEVBQUUsaUJBQWlCO1NBQzlCLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLENBQUM7Q0FDRiJ9
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
- mongoDescriptor: plugins.smartdata.IMongoDescriptor;
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
- private certmanager;
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
  }