@serve.zone/dcrouter 11.0.38 → 11.0.40

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 (33) hide show
  1. package/dist_serve/bundle.js +1 -1
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/package.json +2 -2
  4. package/ts/00_commitinfo_data.ts +1 -1
  5. package/ts_web/00_commitinfo_data.ts +1 -1
  6. package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
  7. package/dist_ts/cache/classes.cache.cleaner.js +0 -130
  8. package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
  9. package/dist_ts/cache/documents/classes.cached.email.js +0 -337
  10. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
  11. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
  12. package/dist_ts/cache/documents/index.d.ts +0 -2
  13. package/dist_ts/cache/documents/index.js +0 -3
  14. package/dist_ts/cache/index.d.ts +0 -4
  15. package/dist_ts/cache/index.js +0 -7
  16. package/dist_ts/classes.cert-provision-scheduler.d.ts +0 -53
  17. package/dist_ts/classes.cert-provision-scheduler.js +0 -110
  18. package/dist_ts/classes.storage-cert-manager.d.ts +0 -18
  19. package/dist_ts/classes.storage-cert-manager.js +0 -43
  20. package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
  21. package/dist_ts/monitoring/classes.metricscache.js +0 -63
  22. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
  23. package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
  24. package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
  25. package/dist_ts/opsserver/handlers/config.handler.js +0 -192
  26. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
  27. package/dist_ts/opsserver/handlers/logs.handler.js +0 -256
  28. package/dist_ts/security/classes.securitylogger.d.ts +0 -144
  29. package/dist_ts/security/classes.securitylogger.js +0 -233
  30. package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
  31. package/dist_ts/storage/classes.storagemanager.js +0 -350
  32. package/dist_ts/storage/index.d.ts +0 -1
  33. package/dist_ts/storage/index.js +0 -3
@@ -39328,4 +39328,4 @@ ibantools/jsnext/ibantools.js:
39328
39328
  * @preferred
39329
39329
  *)
39330
39330
  */
39331
- //# sourceMappingURL=bundle-1772723500635.js.map
39331
+ //# sourceMappingURL=bundle-1772723999370.js.map
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.0.38',
6
+ version: '11.0.40',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@serve.zone/dcrouter",
3
3
  "private": false,
4
- "version": "11.0.38",
4
+ "version": "11.0.40",
5
5
  "description": "A multifaceted routing service handling mail and SMS delivery functions.",
6
6
  "type": "module",
7
7
  "exports": {
@@ -19,7 +19,7 @@
19
19
  "watch": "tswatch"
20
20
  },
21
21
  "devDependencies": {
22
- "@git.zone/tsbuild": "^4.1.24",
22
+ "@git.zone/tsbuild": "^4.1.26",
23
23
  "@git.zone/tsbundle": "^2.9.0",
24
24
  "@git.zone/tsrun": "^2.0.1",
25
25
  "@git.zone/tstest": "^3.2.0",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.0.38',
6
+ version: '11.0.40',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.0.38',
6
+ version: '11.0.40',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -1,47 +0,0 @@
1
- import { CacheDb } from './classes.cachedb.js';
2
- /**
3
- * Configuration for the cache cleaner
4
- */
5
- export interface ICacheCleanerOptions {
6
- /** Cleanup interval in milliseconds (default: 1 hour) */
7
- intervalMs?: number;
8
- /** Enable verbose logging */
9
- verbose?: boolean;
10
- }
11
- /**
12
- * CacheCleaner - Periodically removes expired documents from the cache
13
- *
14
- * Runs on a configurable interval (default: hourly) and queries each
15
- * collection for documents where expiresAt < now(), then deletes them.
16
- */
17
- export declare class CacheCleaner {
18
- private cleanupInterval;
19
- private isRunning;
20
- private options;
21
- private cacheDb;
22
- constructor(cacheDb: CacheDb, options?: ICacheCleanerOptions);
23
- /**
24
- * Start the periodic cleanup process
25
- */
26
- start(): void;
27
- /**
28
- * Stop the periodic cleanup process
29
- */
30
- stop(): void;
31
- /**
32
- * Run a single cleanup cycle
33
- */
34
- runCleanup(): Promise<void>;
35
- /**
36
- * Clean expired documents from a specific collection using smartdata API
37
- */
38
- private cleanExpiredDocuments;
39
- /**
40
- * Check if the cleaner is running
41
- */
42
- isActive(): boolean;
43
- /**
44
- * Get the cleanup interval in milliseconds
45
- */
46
- getIntervalMs(): number;
47
- }
@@ -1,130 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import { logger } from '../logger.js';
3
- import { CacheDb } from './classes.cachedb.js';
4
- // Import document classes for cleanup
5
- import { CachedEmail } from './documents/classes.cached.email.js';
6
- import { CachedIPReputation } from './documents/classes.cached.ip.reputation.js';
7
- /**
8
- * CacheCleaner - Periodically removes expired documents from the cache
9
- *
10
- * Runs on a configurable interval (default: hourly) and queries each
11
- * collection for documents where expiresAt < now(), then deletes them.
12
- */
13
- export class CacheCleaner {
14
- cleanupInterval = null;
15
- isRunning = false;
16
- options;
17
- cacheDb;
18
- constructor(cacheDb, options = {}) {
19
- this.cacheDb = cacheDb;
20
- this.options = {
21
- intervalMs: options.intervalMs || 60 * 60 * 1000, // 1 hour default
22
- verbose: options.verbose || false,
23
- };
24
- }
25
- /**
26
- * Start the periodic cleanup process
27
- */
28
- start() {
29
- if (this.isRunning) {
30
- logger.log('warn', 'CacheCleaner already running');
31
- return;
32
- }
33
- this.isRunning = true;
34
- // Run cleanup immediately on start
35
- this.runCleanup().catch((error) => {
36
- logger.log('error', `Initial cache cleanup failed: ${error.message}`);
37
- });
38
- // Schedule periodic cleanup
39
- this.cleanupInterval = setInterval(() => {
40
- this.runCleanup().catch((error) => {
41
- logger.log('error', `Cache cleanup failed: ${error.message}`);
42
- });
43
- }, this.options.intervalMs);
44
- logger.log('info', `CacheCleaner started with interval: ${this.options.intervalMs / 1000 / 60} minutes`);
45
- }
46
- /**
47
- * Stop the periodic cleanup process
48
- */
49
- stop() {
50
- if (!this.isRunning) {
51
- return;
52
- }
53
- if (this.cleanupInterval) {
54
- clearInterval(this.cleanupInterval);
55
- this.cleanupInterval = null;
56
- }
57
- this.isRunning = false;
58
- logger.log('info', 'CacheCleaner stopped');
59
- }
60
- /**
61
- * Run a single cleanup cycle
62
- */
63
- async runCleanup() {
64
- if (!this.cacheDb.isReady()) {
65
- logger.log('warn', 'CacheDb not ready, skipping cleanup');
66
- return;
67
- }
68
- const now = new Date();
69
- const results = [];
70
- try {
71
- const emailsDeleted = await this.cleanExpiredDocuments(CachedEmail, now);
72
- results.push({ collection: 'CachedEmail', deleted: emailsDeleted });
73
- const ipReputationDeleted = await this.cleanExpiredDocuments(CachedIPReputation, now);
74
- results.push({ collection: 'CachedIPReputation', deleted: ipReputationDeleted });
75
- // Log results
76
- const totalDeleted = results.reduce((sum, r) => sum + r.deleted, 0);
77
- if (totalDeleted > 0 || this.options.verbose) {
78
- const summary = results
79
- .filter((r) => r.deleted > 0)
80
- .map((r) => `${r.collection}: ${r.deleted}`)
81
- .join(', ');
82
- logger.log('info', `Cache cleanup completed. Deleted ${totalDeleted} expired documents. ${summary || 'No deletions.'}`);
83
- }
84
- }
85
- catch (error) {
86
- logger.log('error', `Cache cleanup error: ${error.message}`);
87
- throw error;
88
- }
89
- }
90
- /**
91
- * Clean expired documents from a specific collection using smartdata API
92
- */
93
- async cleanExpiredDocuments(documentClass, now) {
94
- try {
95
- // Find all expired documents
96
- const expiredDocs = await documentClass.getInstances({
97
- expiresAt: { $lt: now },
98
- });
99
- // Delete each expired document
100
- let deletedCount = 0;
101
- for (const doc of expiredDocs) {
102
- try {
103
- await doc.delete();
104
- deletedCount++;
105
- }
106
- catch (deleteError) {
107
- logger.log('warn', `Failed to delete expired document: ${deleteError.message}`);
108
- }
109
- }
110
- return deletedCount;
111
- }
112
- catch (error) {
113
- logger.log('error', `Error cleaning collection: ${error.message}`);
114
- return 0;
115
- }
116
- }
117
- /**
118
- * Check if the cleaner is running
119
- */
120
- isActive() {
121
- return this.isRunning;
122
- }
123
- /**
124
- * Get the cleanup interval in milliseconds
125
- */
126
- getIntervalMs() {
127
- return this.options.intervalMs;
128
- }
129
- }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZS5jbGVhbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY2FjaGUvY2xhc3Nlcy5jYWNoZS5jbGVhbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9DLHNDQUFzQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFZakY7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNmLGVBQWUsR0FBMEMsSUFBSSxDQUFDO0lBQzlELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsT0FBTyxDQUFpQztJQUN4QyxPQUFPLENBQVU7SUFFekIsWUFBWSxPQUFnQixFQUFFLFVBQWdDLEVBQUU7UUFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLGlCQUFpQjtZQUNuRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxLQUFLO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLENBQUMsQ0FBQztZQUNuRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLG1DQUFtQztRQUNuQyxJQUFJ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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
- }