@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.
Files changed (88) hide show
  1. package/dist_serve/bundle.js +2420 -1227
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.d.ts +9 -0
  4. package/dist_ts/classes.dcrouter.js +27 -1
  5. package/dist_ts/config/classes.api-token-manager.d.ts +38 -0
  6. package/dist_ts/config/classes.api-token-manager.js +134 -0
  7. package/dist_ts/config/classes.route-config-manager.d.ts +35 -0
  8. package/dist_ts/config/classes.route-config-manager.js +231 -0
  9. package/dist_ts/config/index.d.ts +2 -0
  10. package/dist_ts/config/index.js +3 -1
  11. package/dist_ts/opsserver/classes.opsserver.d.ts +2 -0
  12. package/dist_ts/opsserver/classes.opsserver.js +5 -1
  13. package/dist_ts/opsserver/handlers/{config.handler.d.ts → api-token.handler.d.ts} +5 -2
  14. package/dist_ts/opsserver/handlers/api-token.handler.js +66 -0
  15. package/dist_ts/opsserver/handlers/index.d.ts +2 -0
  16. package/dist_ts/opsserver/handlers/index.js +3 -1
  17. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +13 -0
  18. package/dist_ts/opsserver/handlers/route-management.handler.js +117 -0
  19. package/dist_ts_interfaces/data/index.d.ts +1 -0
  20. package/dist_ts_interfaces/data/index.js +2 -1
  21. package/dist_ts_interfaces/data/route-management.d.ts +68 -0
  22. package/dist_ts_interfaces/data/route-management.js +2 -0
  23. package/dist_ts_interfaces/requests/api-tokens.d.ts +63 -0
  24. package/dist_ts_interfaces/requests/api-tokens.js +2 -0
  25. package/dist_ts_interfaces/requests/config.d.ts +77 -1
  26. package/dist_ts_interfaces/requests/index.d.ts +2 -0
  27. package/dist_ts_interfaces/requests/index.js +3 -1
  28. package/dist_ts_interfaces/requests/route-management.d.ts +114 -0
  29. package/dist_ts_interfaces/requests/route-management.js +2 -0
  30. package/dist_ts_web/00_commitinfo_data.js +1 -1
  31. package/dist_ts_web/appstate.d.ts +37 -1
  32. package/dist_ts_web/appstate.js +220 -2
  33. package/dist_ts_web/elements/index.d.ts +2 -0
  34. package/dist_ts_web/elements/index.js +3 -1
  35. package/dist_ts_web/elements/ops-dashboard.js +23 -3
  36. package/dist_ts_web/elements/ops-view-apitokens.d.ts +12 -0
  37. package/dist_ts_web/elements/ops-view-apitokens.js +310 -0
  38. package/dist_ts_web/elements/ops-view-config.d.ts +10 -8
  39. package/dist_ts_web/elements/ops-view-config.js +215 -297
  40. package/dist_ts_web/elements/ops-view-routes.d.ts +12 -0
  41. package/dist_ts_web/elements/ops-view-routes.js +404 -0
  42. package/dist_ts_web/router.d.ts +1 -1
  43. package/dist_ts_web/router.js +2 -2
  44. package/package.json +2 -2
  45. package/ts/00_commitinfo_data.ts +1 -1
  46. package/ts/classes.dcrouter.ts +37 -1
  47. package/ts/config/classes.api-token-manager.ts +155 -0
  48. package/ts/config/classes.route-config-manager.ts +271 -0
  49. package/ts/config/index.ts +3 -1
  50. package/ts/opsserver/classes.opsserver.ts +4 -0
  51. package/ts/opsserver/handlers/api-token.handler.ts +96 -0
  52. package/ts/opsserver/handlers/config.handler.ts +154 -72
  53. package/ts/opsserver/handlers/index.ts +3 -1
  54. package/ts/opsserver/handlers/route-management.handler.ts +163 -0
  55. package/ts_web/00_commitinfo_data.ts +1 -1
  56. package/ts_web/appstate.ts +309 -2
  57. package/ts_web/elements/index.ts +2 -0
  58. package/ts_web/elements/ops-dashboard.ts +22 -2
  59. package/ts_web/elements/ops-view-apitokens.ts +285 -0
  60. package/ts_web/elements/ops-view-config.ts +237 -299
  61. package/ts_web/elements/ops-view-routes.ts +389 -0
  62. package/ts_web/router.ts +1 -1
  63. package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
  64. package/dist_ts/cache/classes.cache.cleaner.js +0 -130
  65. package/dist_ts/cache/classes.cached.document.d.ts +0 -76
  66. package/dist_ts/cache/classes.cached.document.js +0 -100
  67. package/dist_ts/cache/classes.cachedb.d.ts +0 -60
  68. package/dist_ts/cache/classes.cachedb.js +0 -126
  69. package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
  70. package/dist_ts/cache/documents/classes.cached.email.js +0 -337
  71. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
  72. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
  73. package/dist_ts/cache/documents/index.d.ts +0 -2
  74. package/dist_ts/cache/documents/index.js +0 -3
  75. package/dist_ts/cache/index.d.ts +0 -4
  76. package/dist_ts/cache/index.js +0 -7
  77. package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
  78. package/dist_ts/monitoring/classes.metricscache.js +0 -63
  79. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
  80. package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
  81. package/dist_ts/opsserver/handlers/config.handler.js +0 -67
  82. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -17
  83. package/dist_ts/opsserver/handlers/logs.handler.js +0 -215
  84. package/dist_ts/security/classes.securitylogger.js +0 -235
  85. package/dist_ts/storage/classes.storagemanager.d.ts +0 -82
  86. package/dist_ts/storage/classes.storagemanager.js +0 -344
  87. package/dist_ts/storage/index.d.ts +0 -1
  88. 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
- }