@serve.zone/dcrouter 8.0.0 → 9.1.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/dist_serve/bundle.js +2420 -1227
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +9 -0
- package/dist_ts/classes.dcrouter.js +27 -1
- package/dist_ts/config/classes.api-token-manager.d.ts +38 -0
- package/dist_ts/config/classes.api-token-manager.js +134 -0
- package/dist_ts/config/classes.route-config-manager.d.ts +35 -0
- package/dist_ts/config/classes.route-config-manager.js +231 -0
- package/dist_ts/config/index.d.ts +2 -0
- package/dist_ts/config/index.js +3 -1
- package/dist_ts/opsserver/classes.opsserver.d.ts +2 -0
- package/dist_ts/opsserver/classes.opsserver.js +5 -1
- package/dist_ts/opsserver/handlers/{config.handler.d.ts → api-token.handler.d.ts} +5 -2
- package/dist_ts/opsserver/handlers/api-token.handler.js +66 -0
- package/dist_ts/opsserver/handlers/index.d.ts +2 -0
- package/dist_ts/opsserver/handlers/index.js +3 -1
- package/dist_ts/opsserver/handlers/route-management.handler.d.ts +13 -0
- package/dist_ts/opsserver/handlers/route-management.handler.js +117 -0
- package/dist_ts_interfaces/data/index.d.ts +1 -0
- package/dist_ts_interfaces/data/index.js +2 -1
- package/dist_ts_interfaces/data/route-management.d.ts +68 -0
- package/dist_ts_interfaces/data/route-management.js +2 -0
- package/dist_ts_interfaces/requests/api-tokens.d.ts +63 -0
- package/dist_ts_interfaces/requests/api-tokens.js +2 -0
- package/dist_ts_interfaces/requests/config.d.ts +77 -1
- package/dist_ts_interfaces/requests/index.d.ts +2 -0
- package/dist_ts_interfaces/requests/index.js +3 -1
- package/dist_ts_interfaces/requests/route-management.d.ts +114 -0
- package/dist_ts_interfaces/requests/route-management.js +2 -0
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +37 -1
- package/dist_ts_web/appstate.js +220 -2
- package/dist_ts_web/elements/index.d.ts +2 -0
- package/dist_ts_web/elements/index.js +3 -1
- package/dist_ts_web/elements/ops-dashboard.js +23 -3
- package/dist_ts_web/elements/ops-view-apitokens.d.ts +12 -0
- package/dist_ts_web/elements/ops-view-apitokens.js +310 -0
- package/dist_ts_web/elements/ops-view-config.d.ts +10 -8
- package/dist_ts_web/elements/ops-view-config.js +215 -297
- package/dist_ts_web/elements/ops-view-routes.d.ts +12 -0
- package/dist_ts_web/elements/ops-view-routes.js +404 -0
- package/dist_ts_web/router.d.ts +1 -1
- package/dist_ts_web/router.js +2 -2
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +37 -1
- package/ts/config/classes.api-token-manager.ts +155 -0
- package/ts/config/classes.route-config-manager.ts +271 -0
- package/ts/config/index.ts +3 -1
- package/ts/opsserver/classes.opsserver.ts +4 -0
- package/ts/opsserver/handlers/api-token.handler.ts +96 -0
- package/ts/opsserver/handlers/config.handler.ts +154 -72
- package/ts/opsserver/handlers/index.ts +3 -1
- package/ts/opsserver/handlers/route-management.handler.ts +163 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +309 -2
- package/ts_web/elements/index.ts +2 -0
- package/ts_web/elements/ops-dashboard.ts +22 -2
- package/ts_web/elements/ops-view-apitokens.ts +285 -0
- package/ts_web/elements/ops-view-config.ts +237 -299
- package/ts_web/elements/ops-view-routes.ts +389 -0
- package/ts_web/router.ts +1 -1
- package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
- package/dist_ts/cache/classes.cache.cleaner.js +0 -130
- package/dist_ts/cache/classes.cached.document.d.ts +0 -76
- package/dist_ts/cache/classes.cached.document.js +0 -100
- package/dist_ts/cache/classes.cachedb.d.ts +0 -60
- package/dist_ts/cache/classes.cachedb.js +0 -126
- package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
- package/dist_ts/cache/documents/classes.cached.email.js +0 -337
- package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
- package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
- package/dist_ts/cache/documents/index.d.ts +0 -2
- package/dist_ts/cache/documents/index.js +0 -3
- package/dist_ts/cache/index.d.ts +0 -4
- package/dist_ts/cache/index.js +0 -7
- package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
- package/dist_ts/monitoring/classes.metricscache.js +0 -63
- package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
- package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
- package/dist_ts/opsserver/handlers/config.handler.js +0 -67
- package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -17
- package/dist_ts/opsserver/handlers/logs.handler.js +0 -215
- package/dist_ts/security/classes.securitylogger.js +0 -235
- package/dist_ts/storage/classes.storagemanager.d.ts +0 -82
- package/dist_ts/storage/classes.storagemanager.js +0 -344
- package/dist_ts/storage/index.d.ts +0 -1
- package/dist_ts/storage/index.js +0 -3
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* Base class for all cached documents with TTL support
|
|
4
|
-
*
|
|
5
|
-
* Extends smartdata's SmartDataDbDoc to add:
|
|
6
|
-
* - Automatic timestamps (createdAt, lastAccessedAt)
|
|
7
|
-
* - TTL/expiration support (expiresAt)
|
|
8
|
-
* - Helper methods for TTL management
|
|
9
|
-
*
|
|
10
|
-
* NOTE: Subclasses MUST add @svDb() decorators to createdAt, expiresAt, and lastAccessedAt
|
|
11
|
-
* since decorators on abstract classes don't propagate correctly.
|
|
12
|
-
*/
|
|
13
|
-
export class CachedDocument extends plugins.smartdata.SmartDataDbDoc {
|
|
14
|
-
/**
|
|
15
|
-
* Timestamp when the document was created
|
|
16
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
17
|
-
*/
|
|
18
|
-
createdAt = new Date();
|
|
19
|
-
/**
|
|
20
|
-
* Timestamp when the document expires and should be cleaned up
|
|
21
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
22
|
-
*/
|
|
23
|
-
expiresAt;
|
|
24
|
-
/**
|
|
25
|
-
* Timestamp of last access (for LRU-style eviction if needed)
|
|
26
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
27
|
-
*/
|
|
28
|
-
lastAccessedAt = new Date();
|
|
29
|
-
/**
|
|
30
|
-
* Set the TTL (time to live) for this document
|
|
31
|
-
* @param ttlMs Time to live in milliseconds
|
|
32
|
-
*/
|
|
33
|
-
setTTL(ttlMs) {
|
|
34
|
-
this.expiresAt = new Date(Date.now() + ttlMs);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Set TTL using days
|
|
38
|
-
* @param days Number of days until expiration
|
|
39
|
-
*/
|
|
40
|
-
setTTLDays(days) {
|
|
41
|
-
this.setTTL(days * 24 * 60 * 60 * 1000);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Set TTL using hours
|
|
45
|
-
* @param hours Number of hours until expiration
|
|
46
|
-
*/
|
|
47
|
-
setTTLHours(hours) {
|
|
48
|
-
this.setTTL(hours * 60 * 60 * 1000);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Check if this document has expired
|
|
52
|
-
*/
|
|
53
|
-
isExpired() {
|
|
54
|
-
if (!this.expiresAt) {
|
|
55
|
-
return false; // No expiration set
|
|
56
|
-
}
|
|
57
|
-
return new Date() > this.expiresAt;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Update the lastAccessedAt timestamp
|
|
61
|
-
*/
|
|
62
|
-
touch() {
|
|
63
|
-
this.lastAccessedAt = new Date();
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get remaining TTL in milliseconds
|
|
67
|
-
* Returns 0 if expired, -1 if no expiration set
|
|
68
|
-
*/
|
|
69
|
-
getRemainingTTL() {
|
|
70
|
-
if (!this.expiresAt) {
|
|
71
|
-
return -1;
|
|
72
|
-
}
|
|
73
|
-
const remaining = this.expiresAt.getTime() - Date.now();
|
|
74
|
-
return remaining > 0 ? remaining : 0;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Extend the TTL by the specified milliseconds from now
|
|
78
|
-
* @param ttlMs Additional time to live in milliseconds
|
|
79
|
-
*/
|
|
80
|
-
extendTTL(ttlMs) {
|
|
81
|
-
this.expiresAt = new Date(Date.now() + ttlMs);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Set the document to never expire (100 years in the future)
|
|
85
|
-
*/
|
|
86
|
-
setNeverExpires() {
|
|
87
|
-
this.expiresAt = new Date(Date.now() + 100 * 365 * 24 * 60 * 60 * 1000);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* TTL constants in milliseconds
|
|
92
|
-
*/
|
|
93
|
-
export const TTL = {
|
|
94
|
-
HOURS_1: 1 * 60 * 60 * 1000,
|
|
95
|
-
HOURS_24: 24 * 60 * 60 * 1000,
|
|
96
|
-
DAYS_7: 7 * 24 * 60 * 60 * 1000,
|
|
97
|
-
DAYS_30: 30 * 24 * 60 * 60 * 1000,
|
|
98
|
-
DAYS_90: 90 * 24 * 60 * 60 * 1000,
|
|
99
|
-
};
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jYWNoZS9jbGFzc2VzLmNhY2hlZC5kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxPQUFnQixjQUE0QyxTQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBb0I7SUFDOUc7OztPQUdHO0lBQ0ksU0FBUyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7SUFFcEM7OztPQUdHO0lBQ0ksU0FBUyxDQUFPO0lBRXZCOzs7T0FHRztJQUNJLGNBQWMsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO0lBRXpDOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixPQUFPLEtBQUssQ0FBQyxDQUFDLG9CQUFvQjtRQUNwQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEQsT0FBTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZTtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHO0lBQ2pCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzNCLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzdCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUMvQixPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDakMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0NBQ3pCLENBQUMifQ==
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* Configuration options for CacheDb
|
|
4
|
-
*/
|
|
5
|
-
export interface ICacheDbOptions {
|
|
6
|
-
/** Base storage path for TsmDB data (default: ~/.serve.zone/dcrouter/tsmdb) */
|
|
7
|
-
storagePath?: string;
|
|
8
|
-
/** Database name (default: dcrouter) */
|
|
9
|
-
dbName?: string;
|
|
10
|
-
/** Enable debug logging */
|
|
11
|
-
debug?: boolean;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* CacheDb - Wrapper around LocalTsmDb and smartdata
|
|
15
|
-
*
|
|
16
|
-
* Provides persistent caching using smartdata as the ORM layer
|
|
17
|
-
* and LocalTsmDb as the embedded database engine.
|
|
18
|
-
*/
|
|
19
|
-
export declare class CacheDb {
|
|
20
|
-
private static instance;
|
|
21
|
-
private localTsmDb;
|
|
22
|
-
private smartdataDb;
|
|
23
|
-
private options;
|
|
24
|
-
private isStarted;
|
|
25
|
-
constructor(options?: ICacheDbOptions);
|
|
26
|
-
/**
|
|
27
|
-
* Get or create the singleton instance
|
|
28
|
-
*/
|
|
29
|
-
static getInstance(options?: ICacheDbOptions): CacheDb;
|
|
30
|
-
/**
|
|
31
|
-
* Reset the singleton instance (useful for testing)
|
|
32
|
-
*/
|
|
33
|
-
static resetInstance(): void;
|
|
34
|
-
/**
|
|
35
|
-
* Start the cache database
|
|
36
|
-
* - Initializes LocalTsmDb with file persistence
|
|
37
|
-
* - Connects smartdata to the LocalTsmDb via Unix socket
|
|
38
|
-
*/
|
|
39
|
-
start(): Promise<void>;
|
|
40
|
-
/**
|
|
41
|
-
* Stop the cache database
|
|
42
|
-
*/
|
|
43
|
-
stop(): Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* Get the smartdata database instance
|
|
46
|
-
*/
|
|
47
|
-
getDb(): plugins.smartdata.SmartdataDb;
|
|
48
|
-
/**
|
|
49
|
-
* Check if the database is ready
|
|
50
|
-
*/
|
|
51
|
-
isReady(): boolean;
|
|
52
|
-
/**
|
|
53
|
-
* Get the storage path
|
|
54
|
-
*/
|
|
55
|
-
getStoragePath(): string;
|
|
56
|
-
/**
|
|
57
|
-
* Get the database name
|
|
58
|
-
*/
|
|
59
|
-
getDbName(): string;
|
|
60
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { logger } from '../logger.js';
|
|
3
|
-
import { defaultTsmDbPath } from '../paths.js';
|
|
4
|
-
/**
|
|
5
|
-
* CacheDb - Wrapper around LocalTsmDb and smartdata
|
|
6
|
-
*
|
|
7
|
-
* Provides persistent caching using smartdata as the ORM layer
|
|
8
|
-
* and LocalTsmDb as the embedded database engine.
|
|
9
|
-
*/
|
|
10
|
-
export class CacheDb {
|
|
11
|
-
static instance = null;
|
|
12
|
-
localTsmDb;
|
|
13
|
-
smartdataDb;
|
|
14
|
-
options;
|
|
15
|
-
isStarted = false;
|
|
16
|
-
constructor(options = {}) {
|
|
17
|
-
this.options = {
|
|
18
|
-
storagePath: options.storagePath || defaultTsmDbPath,
|
|
19
|
-
dbName: options.dbName || 'dcrouter',
|
|
20
|
-
debug: options.debug || false,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get or create the singleton instance
|
|
25
|
-
*/
|
|
26
|
-
static getInstance(options) {
|
|
27
|
-
if (!CacheDb.instance) {
|
|
28
|
-
CacheDb.instance = new CacheDb(options);
|
|
29
|
-
}
|
|
30
|
-
return CacheDb.instance;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Reset the singleton instance (useful for testing)
|
|
34
|
-
*/
|
|
35
|
-
static resetInstance() {
|
|
36
|
-
CacheDb.instance = null;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Start the cache database
|
|
40
|
-
* - Initializes LocalTsmDb with file persistence
|
|
41
|
-
* - Connects smartdata to the LocalTsmDb via Unix socket
|
|
42
|
-
*/
|
|
43
|
-
async start() {
|
|
44
|
-
if (this.isStarted) {
|
|
45
|
-
logger.log('warn', 'CacheDb already started');
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
try {
|
|
49
|
-
// Ensure storage directory exists
|
|
50
|
-
await plugins.fsUtils.ensureDir(this.options.storagePath);
|
|
51
|
-
// Create LocalTsmDb instance
|
|
52
|
-
this.localTsmDb = new plugins.smartmongo.LocalTsmDb({
|
|
53
|
-
folderPath: this.options.storagePath,
|
|
54
|
-
});
|
|
55
|
-
// Start LocalTsmDb and get connection info
|
|
56
|
-
const connectionInfo = await this.localTsmDb.start();
|
|
57
|
-
if (this.options.debug) {
|
|
58
|
-
logger.log('debug', `LocalTsmDb started with URI: ${connectionInfo.connectionUri}`);
|
|
59
|
-
}
|
|
60
|
-
// Initialize smartdata with the connection URI
|
|
61
|
-
this.smartdataDb = new plugins.smartdata.SmartdataDb({
|
|
62
|
-
mongoDbUrl: connectionInfo.connectionUri,
|
|
63
|
-
mongoDbName: this.options.dbName,
|
|
64
|
-
});
|
|
65
|
-
await this.smartdataDb.init();
|
|
66
|
-
this.isStarted = true;
|
|
67
|
-
logger.log('info', `CacheDb started at ${this.options.storagePath}`);
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
logger.log('error', `Failed to start CacheDb: ${error.message}`);
|
|
71
|
-
throw error;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Stop the cache database
|
|
76
|
-
*/
|
|
77
|
-
async stop() {
|
|
78
|
-
if (!this.isStarted) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
// Close smartdata connection
|
|
83
|
-
if (this.smartdataDb) {
|
|
84
|
-
await this.smartdataDb.close();
|
|
85
|
-
}
|
|
86
|
-
// Stop LocalTsmDb
|
|
87
|
-
if (this.localTsmDb) {
|
|
88
|
-
await this.localTsmDb.stop();
|
|
89
|
-
}
|
|
90
|
-
this.isStarted = false;
|
|
91
|
-
logger.log('info', 'CacheDb stopped');
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
logger.log('error', `Error stopping CacheDb: ${error.message}`);
|
|
95
|
-
throw error;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Get the smartdata database instance
|
|
100
|
-
*/
|
|
101
|
-
getDb() {
|
|
102
|
-
if (!this.isStarted) {
|
|
103
|
-
throw new Error('CacheDb not started. Call start() first.');
|
|
104
|
-
}
|
|
105
|
-
return this.smartdataDb;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Check if the database is ready
|
|
109
|
-
*/
|
|
110
|
-
isReady() {
|
|
111
|
-
return this.isStarted;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Get the storage path
|
|
115
|
-
*/
|
|
116
|
-
getStoragePath() {
|
|
117
|
-
return this.options.storagePath;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Get the database name
|
|
121
|
-
*/
|
|
122
|
-
getDbName() {
|
|
123
|
-
return this.options.dbName;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWRiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY2FjaGUvY2xhc3Nlcy5jYWNoZWRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBYy9DOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFDVixNQUFNLENBQUMsUUFBUSxHQUFtQixJQUFJLENBQUM7SUFFdkMsVUFBVSxDQUFnQztJQUMxQyxXQUFXLENBQWdDO0lBQzNDLE9BQU8sQ0FBNEI7SUFDbkMsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUVuQyxZQUFZLFVBQTJCLEVBQUU7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLGdCQUFnQjtZQUNwRCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxVQUFVO1lBQ3BDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUs7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBeUI7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGFBQWE7UUFDekIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixJ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
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { CachedDocument } from '../classes.cached.document.js';
|
|
2
|
-
/**
|
|
3
|
-
* Email status in the cache
|
|
4
|
-
*/
|
|
5
|
-
export type TCachedEmailStatus = 'pending' | 'processing' | 'delivered' | 'failed' | 'deferred';
|
|
6
|
-
/**
|
|
7
|
-
* CachedEmail - Stores email queue items in the cache
|
|
8
|
-
*
|
|
9
|
-
* Used for persistent email queue storage, tracking delivery status,
|
|
10
|
-
* and maintaining email history for the configured TTL period.
|
|
11
|
-
*/
|
|
12
|
-
export declare class CachedEmail extends CachedDocument<CachedEmail> {
|
|
13
|
-
createdAt: Date;
|
|
14
|
-
expiresAt: Date;
|
|
15
|
-
lastAccessedAt: Date;
|
|
16
|
-
/**
|
|
17
|
-
* Unique identifier for this email
|
|
18
|
-
*/
|
|
19
|
-
id: string;
|
|
20
|
-
/**
|
|
21
|
-
* Email message ID (RFC 822 Message-ID header)
|
|
22
|
-
*/
|
|
23
|
-
messageId: string;
|
|
24
|
-
/**
|
|
25
|
-
* Sender email address (envelope from)
|
|
26
|
-
*/
|
|
27
|
-
from: string;
|
|
28
|
-
/**
|
|
29
|
-
* Recipient email addresses
|
|
30
|
-
*/
|
|
31
|
-
to: string[];
|
|
32
|
-
/**
|
|
33
|
-
* CC recipients
|
|
34
|
-
*/
|
|
35
|
-
cc: string[];
|
|
36
|
-
/**
|
|
37
|
-
* BCC recipients
|
|
38
|
-
*/
|
|
39
|
-
bcc: string[];
|
|
40
|
-
/**
|
|
41
|
-
* Email subject
|
|
42
|
-
*/
|
|
43
|
-
subject: string;
|
|
44
|
-
/**
|
|
45
|
-
* Raw RFC822 email content
|
|
46
|
-
*/
|
|
47
|
-
rawContent: string;
|
|
48
|
-
/**
|
|
49
|
-
* Current status of the email
|
|
50
|
-
*/
|
|
51
|
-
status: TCachedEmailStatus;
|
|
52
|
-
/**
|
|
53
|
-
* Number of delivery attempts
|
|
54
|
-
*/
|
|
55
|
-
attempts: number;
|
|
56
|
-
/**
|
|
57
|
-
* Maximum number of delivery attempts
|
|
58
|
-
*/
|
|
59
|
-
maxAttempts: number;
|
|
60
|
-
/**
|
|
61
|
-
* Timestamp for next delivery attempt
|
|
62
|
-
*/
|
|
63
|
-
nextAttempt: Date;
|
|
64
|
-
/**
|
|
65
|
-
* Last error message if delivery failed
|
|
66
|
-
*/
|
|
67
|
-
lastError: string;
|
|
68
|
-
/**
|
|
69
|
-
* Timestamp when the email was successfully delivered
|
|
70
|
-
*/
|
|
71
|
-
deliveredAt: Date;
|
|
72
|
-
/**
|
|
73
|
-
* Sender domain (for querying/filtering)
|
|
74
|
-
*/
|
|
75
|
-
senderDomain: string;
|
|
76
|
-
/**
|
|
77
|
-
* Priority level (higher = more important)
|
|
78
|
-
*/
|
|
79
|
-
priority: number;
|
|
80
|
-
/**
|
|
81
|
-
* JSON-serialized route data
|
|
82
|
-
*/
|
|
83
|
-
routeData: string;
|
|
84
|
-
/**
|
|
85
|
-
* DKIM signature status
|
|
86
|
-
*/
|
|
87
|
-
dkimSigned: boolean;
|
|
88
|
-
constructor();
|
|
89
|
-
/**
|
|
90
|
-
* Create a new CachedEmail with a unique ID
|
|
91
|
-
*/
|
|
92
|
-
static createNew(): CachedEmail;
|
|
93
|
-
/**
|
|
94
|
-
* Find an email by ID
|
|
95
|
-
*/
|
|
96
|
-
static findById(id: string): Promise<CachedEmail | null>;
|
|
97
|
-
/**
|
|
98
|
-
* Find all emails with a specific status
|
|
99
|
-
*/
|
|
100
|
-
static findByStatus(status: TCachedEmailStatus): Promise<CachedEmail[]>;
|
|
101
|
-
/**
|
|
102
|
-
* Find all emails pending delivery (status = pending and nextAttempt <= now)
|
|
103
|
-
*/
|
|
104
|
-
static findPendingForDelivery(): Promise<CachedEmail[]>;
|
|
105
|
-
/**
|
|
106
|
-
* Find emails by sender domain
|
|
107
|
-
*/
|
|
108
|
-
static findBySenderDomain(domain: string): Promise<CachedEmail[]>;
|
|
109
|
-
/**
|
|
110
|
-
* Mark as delivered
|
|
111
|
-
*/
|
|
112
|
-
markDelivered(): void;
|
|
113
|
-
/**
|
|
114
|
-
* Mark as failed with error
|
|
115
|
-
*/
|
|
116
|
-
markFailed(error: string): void;
|
|
117
|
-
/**
|
|
118
|
-
* Increment attempt counter and schedule next attempt
|
|
119
|
-
*/
|
|
120
|
-
scheduleRetry(delayMs?: number): void;
|
|
121
|
-
/**
|
|
122
|
-
* Extract sender domain from email address
|
|
123
|
-
*/
|
|
124
|
-
updateSenderDomain(): void;
|
|
125
|
-
}
|