@serve.zone/dcrouter 11.23.4 → 12.0.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 +1 -1
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/classes.cert-provision-scheduler.d.ts +6 -8
- package/dist_ts/classes.cert-provision-scheduler.js +37 -17
- package/dist_ts/classes.dcrouter.d.ts +15 -29
- package/dist_ts/classes.dcrouter.js +96 -91
- package/dist_ts/classes.storage-cert-manager.d.ts +3 -6
- package/dist_ts/classes.storage-cert-manager.js +35 -25
- package/dist_ts/config/classes.api-token-manager.d.ts +1 -3
- package/dist_ts/config/classes.api-token-manager.js +45 -15
- package/dist_ts/config/classes.route-config-manager.d.ts +1 -3
- package/dist_ts/config/classes.route-config-manager.js +63 -25
- package/dist_ts/{cache → db}/classes.cache.cleaner.d.ts +3 -3
- package/dist_ts/db/classes.cache.cleaner.js +130 -0
- package/dist_ts/{cache → db}/classes.cached.document.js +1 -1
- package/dist_ts/db/classes.dcrouter-db.d.ts +70 -0
- package/dist_ts/db/classes.dcrouter-db.js +146 -0
- package/dist_ts/db/documents/classes.accounting-session.doc.d.ts +32 -0
- package/dist_ts/db/documents/classes.accounting-session.doc.js +214 -0
- package/dist_ts/db/documents/classes.acme-cert.doc.d.ts +13 -0
- package/dist_ts/db/documents/classes.acme-cert.doc.js +109 -0
- package/dist_ts/db/documents/classes.api-token.doc.d.ts +18 -0
- package/dist_ts/db/documents/classes.api-token.doc.js +127 -0
- package/dist_ts/{cache → db}/documents/classes.cached.email.js +3 -3
- package/dist_ts/{cache → db}/documents/classes.cached.ip.reputation.js +3 -3
- package/dist_ts/db/documents/classes.cert-backoff.doc.d.ts +11 -0
- package/dist_ts/db/documents/classes.cert-backoff.doc.js +97 -0
- package/dist_ts/db/documents/classes.proxy-cert.doc.d.ts +12 -0
- package/dist_ts/db/documents/classes.proxy-cert.doc.js +103 -0
- package/dist_ts/db/documents/classes.remote-ingress-edge.doc.d.ts +17 -0
- package/dist_ts/db/documents/classes.remote-ingress-edge.doc.js +130 -0
- package/dist_ts/db/documents/classes.route-override.doc.d.ts +10 -0
- package/dist_ts/db/documents/classes.route-override.doc.js +91 -0
- package/dist_ts/db/documents/classes.stored-route.doc.d.ts +12 -0
- package/dist_ts/db/documents/classes.stored-route.doc.js +103 -0
- package/dist_ts/db/documents/classes.vlan-mappings.doc.d.ts +15 -0
- package/dist_ts/db/documents/classes.vlan-mappings.doc.js +77 -0
- package/dist_ts/db/documents/classes.vpn-client.doc.d.ts +18 -0
- package/dist_ts/db/documents/classes.vpn-client.doc.js +136 -0
- package/dist_ts/db/documents/classes.vpn-server-keys.doc.d.ts +10 -0
- package/dist_ts/db/documents/classes.vpn-server-keys.doc.js +94 -0
- package/dist_ts/db/documents/index.d.ts +13 -0
- package/dist_ts/db/documents/index.js +20 -0
- package/dist_ts/{cache → db}/index.d.ts +1 -1
- package/dist_ts/db/index.js +9 -0
- package/dist_ts/opsserver/handlers/certificate.handler.js +66 -66
- package/dist_ts/opsserver/handlers/config.handler.js +14 -15
- package/dist_ts/paths.d.ts +0 -1
- package/dist_ts/paths.js +1 -2
- package/dist_ts/radius/classes.accounting.manager.d.ts +4 -12
- package/dist_ts/radius/classes.accounting.manager.js +80 -93
- package/dist_ts/radius/classes.radius.server.d.ts +1 -3
- package/dist_ts/radius/classes.radius.server.js +4 -6
- package/dist_ts/radius/classes.vlan.manager.d.ts +3 -7
- package/dist_ts/radius/classes.vlan.manager.js +21 -28
- package/dist_ts/radius/index.d.ts +1 -1
- package/dist_ts/radius/index.js +1 -1
- package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +3 -5
- package/dist_ts/remoteingress/classes.remoteingress-manager.js +41 -21
- package/dist_ts/security/classes.ipreputationchecker.d.ts +6 -21
- package/dist_ts/security/classes.ipreputationchecker.js +59 -138
- package/dist_ts/vpn/classes.vpn-manager.d.ts +4 -22
- package/dist_ts/vpn/classes.vpn-manager.js +40 -45
- package/dist_ts_oci_container/index.js +4 -4
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/package.json +1 -1
- package/readme.storage.md +55 -91
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.cert-provision-scheduler.ts +35 -17
- package/ts/classes.dcrouter.ts +113 -125
- package/ts/classes.storage-cert-manager.ts +34 -22
- package/ts/config/classes.api-token-manager.ts +42 -11
- package/ts/config/classes.route-config-manager.ts +57 -22
- package/ts/{cache → db}/classes.cache.cleaner.ts +6 -6
- package/ts/db/classes.dcrouter-db.ts +179 -0
- package/ts/db/documents/classes.accounting-session.doc.ts +106 -0
- package/ts/db/documents/classes.acme-cert.doc.ts +41 -0
- package/ts/db/documents/classes.api-token.doc.ts +56 -0
- package/ts/{cache → db}/documents/classes.cached.email.ts +2 -2
- package/ts/{cache → db}/documents/classes.cached.ip.reputation.ts +2 -2
- package/ts/db/documents/classes.cert-backoff.doc.ts +35 -0
- package/ts/db/documents/classes.proxy-cert.doc.ts +38 -0
- package/ts/db/documents/classes.remote-ingress-edge.doc.ts +54 -0
- package/ts/db/documents/classes.route-override.doc.ts +32 -0
- package/ts/db/documents/classes.stored-route.doc.ts +38 -0
- package/ts/db/documents/classes.vlan-mappings.doc.ts +32 -0
- package/ts/db/documents/classes.vpn-client.doc.ts +57 -0
- package/ts/db/documents/classes.vpn-server-keys.doc.ts +31 -0
- package/ts/db/documents/index.ts +24 -0
- package/ts/{cache → db}/index.ts +6 -2
- package/ts/opsserver/handlers/certificate.handler.ts +67 -65
- package/ts/opsserver/handlers/config.handler.ts +13 -14
- package/ts/paths.ts +0 -1
- package/ts/radius/classes.accounting.manager.ts +81 -103
- package/ts/radius/classes.radius.server.ts +3 -6
- package/ts/radius/classes.vlan.manager.ts +20 -32
- package/ts/radius/index.ts +1 -1
- package/ts/remoteingress/classes.remoteingress-manager.ts +40 -22
- package/ts/security/classes.ipreputationchecker.ts +103 -196
- package/ts/vpn/classes.vpn-manager.ts +44 -75
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/dist_ts/cache/classes.cache.cleaner.js +0 -130
- package/dist_ts/cache/classes.cachedb.d.ts +0 -60
- package/dist_ts/cache/classes.cachedb.js +0 -126
- package/dist_ts/cache/documents/index.d.ts +0 -2
- package/dist_ts/cache/documents/index.js +0 -3
- package/dist_ts/cache/index.js +0 -7
- package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
- package/dist_ts/storage/classes.storagemanager.js +0 -348
- package/dist_ts/storage/index.d.ts +0 -1
- package/dist_ts/storage/index.js +0 -3
- package/ts/cache/classes.cachedb.ts +0 -155
- package/ts/cache/documents/index.ts +0 -2
- package/ts/storage/classes.storagemanager.ts +0 -404
- package/ts/storage/index.ts +0 -2
- /package/dist_ts/{cache → db}/classes.cached.document.d.ts +0 -0
- /package/dist_ts/{cache → db}/documents/classes.cached.email.d.ts +0 -0
- /package/dist_ts/{cache → db}/documents/classes.cached.ip.reputation.d.ts +0 -0
- /package/ts/{cache → db}/classes.cached.document.ts +0 -0
package/dist_serve/bundle.js
CHANGED
|
@@ -43414,4 +43414,4 @@ ibantools/jsnext/ibantools.js:
|
|
|
43414
43414
|
* @preferred
|
|
43415
43415
|
*)
|
|
43416
43416
|
*/
|
|
43417
|
-
//# sourceMappingURL=bundle-
|
|
43417
|
+
//# sourceMappingURL=bundle-1774971115024.js.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '
|
|
6
|
+
version: '12.0.0',
|
|
7
7
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
|
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
import type { StorageManager } from './storage/index.js';
|
|
2
1
|
/**
|
|
3
2
|
* Manages certificate provisioning scheduling with:
|
|
4
|
-
* - Per-domain exponential backoff persisted
|
|
3
|
+
* - Per-domain exponential backoff persisted via CertBackoffDoc
|
|
5
4
|
*
|
|
6
5
|
* Note: Serial stagger queue was removed — smartacme v9 handles
|
|
7
6
|
* concurrency, per-domain dedup, and rate limiting internally.
|
|
8
7
|
*/
|
|
9
8
|
export declare class CertProvisionScheduler {
|
|
10
|
-
private storageManager;
|
|
11
9
|
private maxBackoffHours;
|
|
12
10
|
private backoffCache;
|
|
13
|
-
constructor(
|
|
11
|
+
constructor(options?: {
|
|
14
12
|
maxBackoffHours?: number;
|
|
15
13
|
});
|
|
16
14
|
/**
|
|
17
|
-
*
|
|
15
|
+
* Sanitized domain key for storage lookups
|
|
18
16
|
*/
|
|
19
|
-
private
|
|
17
|
+
private sanitizeDomain;
|
|
20
18
|
/**
|
|
21
|
-
* Load backoff entry from
|
|
19
|
+
* Load backoff entry from database (with in-memory cache)
|
|
22
20
|
*/
|
|
23
21
|
private loadBackoff;
|
|
24
22
|
/**
|
|
25
|
-
* Save backoff entry to both cache and
|
|
23
|
+
* Save backoff entry to both cache and database
|
|
26
24
|
*/
|
|
27
25
|
private saveBackoff;
|
|
28
26
|
/**
|
|
@@ -1,46 +1,62 @@
|
|
|
1
1
|
import { logger } from './logger.js';
|
|
2
|
+
import { CertBackoffDoc } from './db/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* Manages certificate provisioning scheduling with:
|
|
4
|
-
* - Per-domain exponential backoff persisted
|
|
5
|
+
* - Per-domain exponential backoff persisted via CertBackoffDoc
|
|
5
6
|
*
|
|
6
7
|
* Note: Serial stagger queue was removed — smartacme v9 handles
|
|
7
8
|
* concurrency, per-domain dedup, and rate limiting internally.
|
|
8
9
|
*/
|
|
9
10
|
export class CertProvisionScheduler {
|
|
10
|
-
storageManager;
|
|
11
11
|
maxBackoffHours;
|
|
12
12
|
// In-memory backoff cache (mirrors storage for fast lookups)
|
|
13
13
|
backoffCache = new Map();
|
|
14
|
-
constructor(
|
|
15
|
-
this.storageManager = storageManager;
|
|
14
|
+
constructor(options) {
|
|
16
15
|
this.maxBackoffHours = options?.maxBackoffHours ?? 24;
|
|
17
16
|
}
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
18
|
+
* Sanitized domain key for storage lookups
|
|
20
19
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return `/cert-backoff/${clean}`;
|
|
20
|
+
sanitizeDomain(domain) {
|
|
21
|
+
return domain.replace(/\*/g, '_wildcard_').replace(/[^a-zA-Z0-9._-]/g, '_');
|
|
24
22
|
}
|
|
25
23
|
/**
|
|
26
|
-
* Load backoff entry from
|
|
24
|
+
* Load backoff entry from database (with in-memory cache)
|
|
27
25
|
*/
|
|
28
26
|
async loadBackoff(domain) {
|
|
29
27
|
const cached = this.backoffCache.get(domain);
|
|
30
28
|
if (cached)
|
|
31
29
|
return cached;
|
|
32
|
-
const
|
|
33
|
-
|
|
30
|
+
const sanitized = this.sanitizeDomain(domain);
|
|
31
|
+
const doc = await CertBackoffDoc.findByDomain(sanitized);
|
|
32
|
+
if (doc) {
|
|
33
|
+
const entry = {
|
|
34
|
+
failures: doc.failures,
|
|
35
|
+
lastFailure: doc.lastFailure,
|
|
36
|
+
retryAfter: doc.retryAfter,
|
|
37
|
+
lastError: doc.lastError,
|
|
38
|
+
};
|
|
34
39
|
this.backoffCache.set(domain, entry);
|
|
40
|
+
return entry;
|
|
35
41
|
}
|
|
36
|
-
return
|
|
42
|
+
return null;
|
|
37
43
|
}
|
|
38
44
|
/**
|
|
39
|
-
* Save backoff entry to both cache and
|
|
45
|
+
* Save backoff entry to both cache and database
|
|
40
46
|
*/
|
|
41
47
|
async saveBackoff(domain, entry) {
|
|
42
48
|
this.backoffCache.set(domain, entry);
|
|
43
|
-
|
|
49
|
+
const sanitized = this.sanitizeDomain(domain);
|
|
50
|
+
let doc = await CertBackoffDoc.findByDomain(sanitized);
|
|
51
|
+
if (!doc) {
|
|
52
|
+
doc = new CertBackoffDoc();
|
|
53
|
+
doc.domain = sanitized;
|
|
54
|
+
}
|
|
55
|
+
doc.failures = entry.failures;
|
|
56
|
+
doc.lastFailure = entry.lastFailure;
|
|
57
|
+
doc.retryAfter = entry.retryAfter;
|
|
58
|
+
doc.lastError = entry.lastError || '';
|
|
59
|
+
await doc.save();
|
|
44
60
|
}
|
|
45
61
|
/**
|
|
46
62
|
* Check if a domain is currently in backoff.
|
|
@@ -83,10 +99,14 @@ export class CertProvisionScheduler {
|
|
|
83
99
|
async clearBackoff(domain) {
|
|
84
100
|
this.backoffCache.delete(domain);
|
|
85
101
|
try {
|
|
86
|
-
|
|
102
|
+
const sanitized = this.sanitizeDomain(domain);
|
|
103
|
+
const doc = await CertBackoffDoc.findByDomain(sanitized);
|
|
104
|
+
if (doc) {
|
|
105
|
+
await doc.delete();
|
|
106
|
+
}
|
|
87
107
|
}
|
|
88
108
|
catch {
|
|
89
|
-
// Ignore delete errors (
|
|
109
|
+
// Ignore delete errors (doc may not exist)
|
|
90
110
|
}
|
|
91
111
|
}
|
|
92
112
|
/**
|
|
@@ -115,4 +135,4 @@ export class CertProvisionScheduler {
|
|
|
115
135
|
};
|
|
116
136
|
}
|
|
117
137
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jZXJ0LXByb3Zpc2lvbi1zY2hlZHVsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jbGFzc2VzLmNlcnQtcHJvdmlzaW9uLXNjaGVkdWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTL0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixlQUFlLENBQVM7SUFFaEMsNkRBQTZEO0lBQ3JELFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUV4RCxZQUNFLE9BQXNDO1FBRXRDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLE1BQWM7UUFDbkMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLElBQUksTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRTFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxjQUFjLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixNQUFNLEtBQUssR0FBa0I7Z0JBQzNCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtn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
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import * as paths from './paths.js';
|
|
3
3
|
import { UnifiedEmailServer, type IUnifiedEmailServerOptions, type IEmailRoute } from '@push.rocks/smartmta';
|
|
4
|
-
import { StorageManager, type IStorageConfig } from './storage/index.js';
|
|
5
4
|
import { CertProvisionScheduler } from './classes.cert-provision-scheduler.js';
|
|
6
|
-
import {
|
|
5
|
+
import { DcRouterDb, CacheCleaner } from './db/index.js';
|
|
7
6
|
import { OpsServer } from './opsserver/index.js';
|
|
8
7
|
import { MetricsManager } from './monitoring/index.js';
|
|
9
8
|
import { RadiusServer, type IRadiusServerConfig } from './radius/index.js';
|
|
@@ -94,36 +93,23 @@ export interface IDcRouterOptions {
|
|
|
94
93
|
/** Cloudflare API key for DNS challenges */
|
|
95
94
|
cloudflareApiKey?: string;
|
|
96
95
|
};
|
|
97
|
-
/** Storage configuration */
|
|
98
|
-
storage?: IStorageConfig;
|
|
99
96
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
97
|
+
* Unified database configuration.
|
|
98
|
+
* All persistent data (config, certs, VPN, cache, etc.) is stored via smartdata.
|
|
99
|
+
* If mongoDbUrl is provided, connects to external MongoDB.
|
|
100
|
+
* Otherwise, starts an embedded LocalSmartDb automatically.
|
|
102
101
|
*/
|
|
103
|
-
|
|
104
|
-
/** Enable
|
|
102
|
+
dbConfig?: {
|
|
103
|
+
/** Enable database (default: true). Set to false in tests to skip DB startup. */
|
|
105
104
|
enabled?: boolean;
|
|
106
|
-
/**
|
|
105
|
+
/** External MongoDB connection URL. If absent, uses embedded LocalSmartDb. */
|
|
106
|
+
mongoDbUrl?: string;
|
|
107
|
+
/** Storage path for embedded database data (default: ~/.serve.zone/dcrouter/tsmdb) */
|
|
107
108
|
storagePath?: string;
|
|
108
109
|
/** Database name (default: dcrouter) */
|
|
109
110
|
dbName?: string;
|
|
110
|
-
/**
|
|
111
|
-
defaultTTLDays?: number;
|
|
112
|
-
/** Cleanup interval in hours (default: 1) */
|
|
111
|
+
/** Cache cleanup interval in hours (default: 1) */
|
|
113
112
|
cleanupIntervalHours?: number;
|
|
114
|
-
/** TTL configuration per data type (in days) */
|
|
115
|
-
ttlConfig?: {
|
|
116
|
-
/** Email cache TTL (default: 30 days) */
|
|
117
|
-
emails?: number;
|
|
118
|
-
/** IP reputation cache TTL (default: 1 day) */
|
|
119
|
-
ipReputation?: number;
|
|
120
|
-
/** Bounce records TTL (default: 30 days) */
|
|
121
|
-
bounces?: number;
|
|
122
|
-
/** DKIM keys TTL (default: 90 days) */
|
|
123
|
-
dkimKeys?: number;
|
|
124
|
-
/** Suppression list TTL (default: 30 days, can be permanent) */
|
|
125
|
-
suppression?: number;
|
|
126
|
-
};
|
|
127
113
|
};
|
|
128
114
|
/**
|
|
129
115
|
* RADIUS server configuration for network authentication
|
|
@@ -210,10 +196,10 @@ export declare class DcRouter {
|
|
|
210
196
|
dnsServer?: plugins.smartdns.dnsServerMod.DnsServer;
|
|
211
197
|
emailServer?: UnifiedEmailServer;
|
|
212
198
|
radiusServer?: RadiusServer;
|
|
213
|
-
storageManager: StorageManager;
|
|
214
199
|
opsServer: OpsServer;
|
|
215
200
|
metricsManager?: MetricsManager;
|
|
216
|
-
|
|
201
|
+
storageManager: any;
|
|
202
|
+
dcRouterDb?: DcRouterDb;
|
|
217
203
|
cacheCleaner?: CacheCleaner;
|
|
218
204
|
remoteIngressManager?: RemoteIngressManager;
|
|
219
205
|
tunnelManager?: TunnelManager;
|
|
@@ -257,9 +243,9 @@ export declare class DcRouter {
|
|
|
257
243
|
*/
|
|
258
244
|
private logStartupSummary;
|
|
259
245
|
/**
|
|
260
|
-
* Set up the
|
|
246
|
+
* Set up the unified database (smartdata + LocalSmartDb or external MongoDB)
|
|
261
247
|
*/
|
|
262
|
-
private
|
|
248
|
+
private setupDcRouterDb;
|
|
263
249
|
/**
|
|
264
250
|
* Set up SmartProxy with direct configuration and automatic email routes
|
|
265
251
|
*/
|