@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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.2.56',
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLHFFQUFxRTtBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUcxRCxXQUFXO0FBQ1gsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxnQkFBZ0I7QUFDaEIsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyx3QkFBd0I7QUFDeEIsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRSxDQUFDLENBQUMifQ==
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19vY2lfY29udGFpbmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR3hDOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsTUFBMEI7SUFDckQsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUywwQkFBMEIsQ0FBQyxNQUEwQjtJQUM1RCxNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzdCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLElBQUksT0FBTyxHQUFxQixFQUFFLENBQUM7SUFFbkMscUNBQXFDO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7SUFDcEQsSUFBSSxVQUFVLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFV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
@@ -0,0 +1,3 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ export { fs, path, };
@@ -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.2.56',
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
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.2.56",
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.
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.2.56',
6
+ version: '11.4.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
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
+ };
@@ -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.
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.2.56',
6
+ version: '11.4.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
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.