@serve.zone/dcrouter 11.2.56 → 11.4.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 +824 -435
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/index.js +20 -2
- package/dist_ts_oci_container/index.d.ts +8 -0
- package/dist_ts_oci_container/index.js +89 -0
- package/dist_ts_oci_container/plugins.d.ts +3 -0
- package/dist_ts_oci_container/plugins.js +4 -0
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/npmextra.json +8 -3
- package/package.json +3 -1
- package/readme.md +45 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +22 -1
- package/ts_apiclient/readme.md +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/readme.md +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '11.
|
|
6
|
+
version: '11.4.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=
|
package/dist_ts/index.js
CHANGED
|
@@ -2,10 +2,28 @@ export * from './00_commitinfo_data.js';
|
|
|
2
2
|
// Re-export smartmta (excluding commitinfo to avoid naming conflict)
|
|
3
3
|
export { UnifiedEmailServer } from '@push.rocks/smartmta';
|
|
4
4
|
// DcRouter
|
|
5
|
+
import { DcRouter } from './classes.dcrouter.js';
|
|
5
6
|
export * from './classes.dcrouter.js';
|
|
6
7
|
// RADIUS module
|
|
7
8
|
export * from './radius/index.js';
|
|
8
9
|
// Remote Ingress module
|
|
9
10
|
export * from './remoteingress/index.js';
|
|
10
|
-
export const runCli = async () => {
|
|
11
|
-
|
|
11
|
+
export const runCli = async () => {
|
|
12
|
+
let options = {};
|
|
13
|
+
if (process.env.DCROUTER_MODE === 'OCI_CONTAINER') {
|
|
14
|
+
const { getOciContainerConfig } = await import('../dist_ts_oci_container/index.js');
|
|
15
|
+
options = getOciContainerConfig();
|
|
16
|
+
console.log('[DCRouter] Starting in OCI Container mode...');
|
|
17
|
+
}
|
|
18
|
+
const dcRouter = new DcRouter(options);
|
|
19
|
+
await dcRouter.start();
|
|
20
|
+
console.log('[DCRouter] Running. Send SIGTERM or SIGINT to stop.');
|
|
21
|
+
const shutdown = async () => {
|
|
22
|
+
console.log('[DCRouter] Shutting down...');
|
|
23
|
+
await dcRouter.stop();
|
|
24
|
+
process.exit(0);
|
|
25
|
+
};
|
|
26
|
+
process.on('SIGINT', shutdown);
|
|
27
|
+
process.on('SIGTERM', shutdown);
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLHFFQUFxRTtBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUcxRCxXQUFXO0FBQ1gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsZ0JBQWdCO0FBQ2hCLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsd0JBQXdCO0FBQ3hCLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQy9CLElBQUksT0FBTyxHQUFxRCxFQUFFLENBQUM7SUFFbkUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsS0FBSyxlQUFlLEVBQUUsQ0FBQztRQUNsRCxNQUFNLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sR0FBRyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBRW5FLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUMzQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUNGLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IDcRouterOptions } from '../dist_ts/classes.dcrouter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds IDcRouterOptions from environment variables for OCI container mode.
|
|
4
|
+
*
|
|
5
|
+
* If DCROUTER_CONFIG_PATH is set and the file exists, it is loaded as a JSON base config.
|
|
6
|
+
* Individual env vars are then applied as overrides on top.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getOciContainerConfig(): IDcRouterOptions;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parses a comma-separated env var into a string array.
|
|
4
|
+
* Returns undefined if the env var is not set or empty.
|
|
5
|
+
*/
|
|
6
|
+
function parseCommaSeparated(envVar) {
|
|
7
|
+
if (!envVar || envVar.trim() === '')
|
|
8
|
+
return undefined;
|
|
9
|
+
return envVar.split(',').map((s) => s.trim()).filter(Boolean);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parses a comma-separated env var into a number array.
|
|
13
|
+
* Returns undefined if the env var is not set or empty.
|
|
14
|
+
*/
|
|
15
|
+
function parseCommaSeparatedNumbers(envVar) {
|
|
16
|
+
const parts = parseCommaSeparated(envVar);
|
|
17
|
+
if (!parts)
|
|
18
|
+
return undefined;
|
|
19
|
+
return parts.map((s) => parseInt(s, 10)).filter((n) => !isNaN(n));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Builds IDcRouterOptions from environment variables for OCI container mode.
|
|
23
|
+
*
|
|
24
|
+
* If DCROUTER_CONFIG_PATH is set and the file exists, it is loaded as a JSON base config.
|
|
25
|
+
* Individual env vars are then applied as overrides on top.
|
|
26
|
+
*/
|
|
27
|
+
export function getOciContainerConfig() {
|
|
28
|
+
let options = {};
|
|
29
|
+
// Load JSON config file if specified
|
|
30
|
+
const configPath = process.env.DCROUTER_CONFIG_PATH;
|
|
31
|
+
if (configPath && plugins.fs.existsSync(configPath)) {
|
|
32
|
+
const raw = plugins.fs.readFileSync(configPath, 'utf8');
|
|
33
|
+
options = JSON.parse(raw);
|
|
34
|
+
console.log(`[OCI Container] Loaded config from ${configPath}`);
|
|
35
|
+
}
|
|
36
|
+
// Apply env var overrides
|
|
37
|
+
if (process.env.DCROUTER_BASE_DIR) {
|
|
38
|
+
options.baseDir = process.env.DCROUTER_BASE_DIR;
|
|
39
|
+
}
|
|
40
|
+
// TLS config
|
|
41
|
+
const tlsEmail = process.env.DCROUTER_TLS_EMAIL;
|
|
42
|
+
const tlsDomain = process.env.DCROUTER_TLS_DOMAIN;
|
|
43
|
+
if (tlsEmail || tlsDomain) {
|
|
44
|
+
options.tls = {
|
|
45
|
+
...options.tls,
|
|
46
|
+
contactEmail: tlsEmail || options.tls?.contactEmail || '',
|
|
47
|
+
...(tlsDomain ? { domain: tlsDomain } : {}),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Network config
|
|
51
|
+
if (process.env.DCROUTER_PUBLIC_IP) {
|
|
52
|
+
options.publicIp = process.env.DCROUTER_PUBLIC_IP;
|
|
53
|
+
}
|
|
54
|
+
const proxyIps = parseCommaSeparated(process.env.DCROUTER_PROXY_IPS);
|
|
55
|
+
if (proxyIps) {
|
|
56
|
+
options.proxyIps = proxyIps;
|
|
57
|
+
}
|
|
58
|
+
// DNS config
|
|
59
|
+
const nsDomains = parseCommaSeparated(process.env.DCROUTER_DNS_NS_DOMAINS);
|
|
60
|
+
if (nsDomains) {
|
|
61
|
+
options.dnsNsDomains = nsDomains;
|
|
62
|
+
}
|
|
63
|
+
const dnsScopes = parseCommaSeparated(process.env.DCROUTER_DNS_SCOPES);
|
|
64
|
+
if (dnsScopes) {
|
|
65
|
+
options.dnsScopes = dnsScopes;
|
|
66
|
+
}
|
|
67
|
+
// Email config
|
|
68
|
+
const emailHostname = process.env.DCROUTER_EMAIL_HOSTNAME;
|
|
69
|
+
const emailPorts = parseCommaSeparatedNumbers(process.env.DCROUTER_EMAIL_PORTS);
|
|
70
|
+
if (emailHostname || emailPorts) {
|
|
71
|
+
options.emailConfig = {
|
|
72
|
+
...options.emailConfig,
|
|
73
|
+
...(emailHostname ? { hostname: emailHostname } : {}),
|
|
74
|
+
...(emailPorts ? { ports: emailPorts } : {}),
|
|
75
|
+
domains: options.emailConfig?.domains || [],
|
|
76
|
+
routes: options.emailConfig?.routes || [],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Cache config
|
|
80
|
+
const cacheEnabled = process.env.DCROUTER_CACHE_ENABLED;
|
|
81
|
+
if (cacheEnabled !== undefined) {
|
|
82
|
+
options.cacheConfig = {
|
|
83
|
+
...options.cacheConfig,
|
|
84
|
+
enabled: cacheEnabled === 'true',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return options;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19vY2lfY29udGFpbmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR3hDOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsTUFBMEI7SUFDckQsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUywwQkFBMEIsQ0FBQyxNQUEwQjtJQUM1RCxNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzdCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLElBQUksT0FBTyxHQUFxQixFQUFFLENBQUM7SUFFbkMscUNBQXFDO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7SUFDcEQsSUFBSSxVQUFVLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsMEJBQTBCO0lBQzFCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztJQUNsRCxDQUFDO0lBRUQsYUFBYTtJQUNiLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7SUFDaEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUNsRCxJQUFJLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsR0FBRyxHQUFHO1lBQ1osR0FBRyxPQUFPLENBQUMsR0FBRztZQUNkLFlBQVksRUFBRSxRQUFRLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxZQUFZLElBQUksRUFBRTtZQUN6RCxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JFLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRUQsYUFBYTtJQUNiLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMzRSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2RSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVELGVBQWU7SUFDZixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDO0lBQzFELE1BQU0sVUFBVSxHQUFHLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNoRixJQUFJLGFBQWEsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxPQUFPLENBQUMsV0FBVyxHQUFHO1lBQ3BCLEdBQUcsT0FBTyxDQUFDLFdBQVc7WUFDdEIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sSUFBSSxFQUFFO1lBQzNDLE1BQU0sRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sSUFBSSxFQUFFO1NBQ1AsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZUFBZTtJQUNmLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7SUFDeEQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLFdBQVcsR0FBRztZQUNwQixHQUFHLE9BQU8sQ0FBQyxXQUFXO1lBQ3RCLE9BQU8sRUFBRSxZQUFZLEtBQUssTUFBTTtTQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMifQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
export { fs, path, };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX29jaV9jb250YWluZXIvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQ0wsRUFBRSxFQUNGLElBQUksR0FDTCxDQUFDIn0=
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '11.
|
|
6
|
+
version: '11.4.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
|
package/npmextra.json
CHANGED
|
@@ -72,9 +72,14 @@
|
|
|
72
72
|
"dockerRegistryRepoMap": {
|
|
73
73
|
"registry.gitlab.com": "code.foss.global/serve.zone/dcrouter"
|
|
74
74
|
},
|
|
75
|
-
"dockerBuildargEnvMap": {
|
|
76
|
-
"NPMCI_TOKEN_NPM2": "NPMCI_TOKEN_NPM2"
|
|
77
|
-
},
|
|
78
75
|
"npmRegistryUrl": "verdaccio.lossless.digital"
|
|
76
|
+
},
|
|
77
|
+
"@git.zone/tsdocker": {
|
|
78
|
+
"registries": ["code.foss.global"],
|
|
79
|
+
"registryRepoMap": {
|
|
80
|
+
"code.foss.global": "serve.zone/dcrouter",
|
|
81
|
+
"dockerregistry.lossless.digital": "serve.zone/dcrouter"
|
|
82
|
+
},
|
|
83
|
+
"platforms": ["linux/amd64", "linux/arm64"]
|
|
79
84
|
}
|
|
80
85
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serve.zone/dcrouter",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "11.
|
|
4
|
+
"version": "11.4.0",
|
|
5
5
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
"start": "(node --max_old_space_size=250 ./cli.js)",
|
|
17
17
|
"startTs": "(node cli.ts.js)",
|
|
18
18
|
"build": "(tsbuild tsfolders --allowimplicitany && npm run bundle)",
|
|
19
|
+
"build:docker": "tsdocker build --verbose",
|
|
20
|
+
"release:docker": "tsdocker push --verbose",
|
|
19
21
|
"bundle": "(tsbundle)",
|
|
20
22
|
"watch": "tswatch"
|
|
21
23
|
},
|
package/readme.md
CHANGED
|
@@ -30,6 +30,7 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
|
|
|
30
30
|
- [API Reference](#api-reference)
|
|
31
31
|
- [Sub-Modules](#sub-modules)
|
|
32
32
|
- [Testing](#testing)
|
|
33
|
+
- [Docker / OCI Container Deployment](#docker--oci-container-deployment)
|
|
33
34
|
- [License and Legal Information](#license-and-legal-information)
|
|
34
35
|
|
|
35
36
|
## Features
|
|
@@ -1278,6 +1279,49 @@ tstest test/test.opsserver-api.ts --verbose --timeout 60
|
|
|
1278
1279
|
| `test.protected-endpoint.ts` | Admin auth, identity verification, public endpoints | 8 |
|
|
1279
1280
|
| `test.storagemanager.ts` | Memory, filesystem, custom backends, concurrency | 8 |
|
|
1280
1281
|
|
|
1282
|
+
## Docker / OCI Container Deployment
|
|
1283
|
+
|
|
1284
|
+
DcRouter ships with a `Dockerfile` and supports environment-variable-driven configuration for OCI container deployments. When `DCROUTER_MODE=OCI_CONTAINER` is set, DcRouter automatically reads configuration from environment variables (and optionally from a JSON config file).
|
|
1285
|
+
|
|
1286
|
+
### Running with Docker
|
|
1287
|
+
|
|
1288
|
+
```bash
|
|
1289
|
+
docker run -d \
|
|
1290
|
+
-e DCROUTER_MODE=OCI_CONTAINER \
|
|
1291
|
+
-e DCROUTER_TLS_EMAIL=admin@example.com \
|
|
1292
|
+
-e DCROUTER_PUBLIC_IP=203.0.113.1 \
|
|
1293
|
+
-e DCROUTER_DNS_NS_DOMAINS=ns1.example.com,ns2.example.com \
|
|
1294
|
+
-e DCROUTER_DNS_SCOPES=example.com \
|
|
1295
|
+
-p 80:80 -p 443:443 -p 25:25 -p 53:53/udp -p 3000:3000 \
|
|
1296
|
+
code.foss.global/serve.zone/dcrouter:latest
|
|
1297
|
+
```
|
|
1298
|
+
|
|
1299
|
+
### Environment Variables
|
|
1300
|
+
|
|
1301
|
+
| Variable | Description | Example |
|
|
1302
|
+
|----------|-------------|---------|
|
|
1303
|
+
| `DCROUTER_MODE` | Set to `OCI_CONTAINER` to enable container mode | `OCI_CONTAINER` |
|
|
1304
|
+
| `DCROUTER_CONFIG_PATH` | Path to a JSON config file (loaded as base, env vars override) | `/config/dcrouter.json` |
|
|
1305
|
+
| `DCROUTER_BASE_DIR` | Override base data directory | `/data/dcrouter` |
|
|
1306
|
+
| `DCROUTER_TLS_EMAIL` | ACME contact email | `admin@example.com` |
|
|
1307
|
+
| `DCROUTER_TLS_DOMAIN` | Primary TLS domain | `example.com` |
|
|
1308
|
+
| `DCROUTER_PUBLIC_IP` | Public IP for DNS records | `203.0.113.1` |
|
|
1309
|
+
| `DCROUTER_PROXY_IPS` | Comma-separated ingress proxy IPs | `198.51.100.1,198.51.100.2` |
|
|
1310
|
+
| `DCROUTER_DNS_NS_DOMAINS` | Comma-separated nameserver domains | `ns1.example.com,ns2.example.com` |
|
|
1311
|
+
| `DCROUTER_DNS_SCOPES` | Comma-separated authoritative domains | `example.com,other.com` |
|
|
1312
|
+
| `DCROUTER_EMAIL_HOSTNAME` | SMTP server hostname | `mail.example.com` |
|
|
1313
|
+
| `DCROUTER_EMAIL_PORTS` | Comma-separated email ports | `25,587,465` |
|
|
1314
|
+
| `DCROUTER_CACHE_ENABLED` | Enable/disable cache database | `true` |
|
|
1315
|
+
|
|
1316
|
+
### Building the Image
|
|
1317
|
+
|
|
1318
|
+
```bash
|
|
1319
|
+
pnpm run build:docker # Build the container image
|
|
1320
|
+
pnpm run release:docker # Push to registry
|
|
1321
|
+
```
|
|
1322
|
+
|
|
1323
|
+
The Docker build supports multi-platform (`linux/amd64`, `linux/arm64`) via [tsdocker](https://code.foss.global/git.zone/tsdocker).
|
|
1324
|
+
|
|
1281
1325
|
## License and Legal Information
|
|
1282
1326
|
|
|
1283
1327
|
This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [LICENSE](./LICENSE) file.
|
|
@@ -1292,7 +1336,7 @@ Use of these trademarks must comply with Task Venture Capital GmbH's Trademark G
|
|
|
1292
1336
|
|
|
1293
1337
|
### Company Information
|
|
1294
1338
|
|
|
1295
|
-
Task Venture Capital GmbH
|
|
1339
|
+
Task Venture Capital GmbH
|
|
1296
1340
|
Registered at District Court Bremen HRB 35230 HB, Germany
|
|
1297
1341
|
|
|
1298
1342
|
For any legal inquiries or further information, please contact us via email at hello@task.vc.
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/index.ts
CHANGED
|
@@ -5,6 +5,7 @@ export { UnifiedEmailServer } from '@push.rocks/smartmta';
|
|
|
5
5
|
export type { IUnifiedEmailServerOptions, IEmailRoute, IEmailDomainConfig } from '@push.rocks/smartmta';
|
|
6
6
|
|
|
7
7
|
// DcRouter
|
|
8
|
+
import { DcRouter } from './classes.dcrouter.js';
|
|
8
9
|
export * from './classes.dcrouter.js';
|
|
9
10
|
|
|
10
11
|
// RADIUS module
|
|
@@ -13,4 +14,24 @@ export * from './radius/index.js';
|
|
|
13
14
|
// Remote Ingress module
|
|
14
15
|
export * from './remoteingress/index.js';
|
|
15
16
|
|
|
16
|
-
export const runCli = async () => {
|
|
17
|
+
export const runCli = async () => {
|
|
18
|
+
let options: import('./classes.dcrouter.js').IDcRouterOptions = {};
|
|
19
|
+
|
|
20
|
+
if (process.env.DCROUTER_MODE === 'OCI_CONTAINER') {
|
|
21
|
+
const { getOciContainerConfig } = await import('../ts_oci_container/index.js');
|
|
22
|
+
options = getOciContainerConfig();
|
|
23
|
+
console.log('[DCRouter] Starting in OCI Container mode...');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const dcRouter = new DcRouter(options);
|
|
27
|
+
await dcRouter.start();
|
|
28
|
+
console.log('[DCRouter] Running. Send SIGTERM or SIGINT to stop.');
|
|
29
|
+
|
|
30
|
+
const shutdown = async () => {
|
|
31
|
+
console.log('[DCRouter] Shutting down...');
|
|
32
|
+
await dcRouter.stop();
|
|
33
|
+
process.exit(0);
|
|
34
|
+
};
|
|
35
|
+
process.on('SIGINT', shutdown);
|
|
36
|
+
process.on('SIGTERM', shutdown);
|
|
37
|
+
};
|
package/ts_apiclient/readme.md
CHANGED
|
@@ -271,7 +271,7 @@ Use of these trademarks must comply with Task Venture Capital GmbH's Trademark G
|
|
|
271
271
|
|
|
272
272
|
### Company Information
|
|
273
273
|
|
|
274
|
-
Task Venture Capital GmbH
|
|
274
|
+
Task Venture Capital GmbH
|
|
275
275
|
Registered at District Court Bremen HRB 35230 HB, Germany
|
|
276
276
|
|
|
277
277
|
For any legal inquiries or further information, please contact us via email at hello@task.vc.
|
package/ts_web/readme.md
CHANGED
|
@@ -249,7 +249,7 @@ Use of these trademarks must comply with Task Venture Capital GmbH's Trademark G
|
|
|
249
249
|
|
|
250
250
|
### Company Information
|
|
251
251
|
|
|
252
|
-
Task Venture Capital GmbH
|
|
252
|
+
Task Venture Capital GmbH
|
|
253
253
|
Registered at District Court Bremen HRB 35230 HB, Germany
|
|
254
254
|
|
|
255
255
|
For any legal inquiries or further information, please contact us via email at hello@task.vc.
|