86 lines
2.7 KiB
JavaScript
86 lines
2.7 KiB
JavaScript
import { createDeviceEdgeRelayRuntime } from "./runtime.mjs";
|
|
|
|
const runtime = createDeviceEdgeRelayRuntime({
|
|
ingressEnabled: parseBoolean(
|
|
process.env.DEVICE_EDGE_RELAY_INGRESS_ENABLED,
|
|
false,
|
|
),
|
|
healthHost: process.env.DEVICE_EDGE_RELAY_HEALTH_HOST || "127.0.0.1",
|
|
healthPort: parsePort(process.env.DEVICE_EDGE_RELAY_HEALTH_PORT, 18221),
|
|
tcpHost: process.env.DEVICE_EDGE_RELAY_TCP_HOST,
|
|
tcpPort: parsePort(process.env.DEVICE_EDGE_RELAY_TCP_PORT, 9921),
|
|
upstreamHost: process.env.DEVICE_EDGE_RELAY_UPSTREAM_HOST,
|
|
upstreamPort: parsePort(
|
|
process.env.DEVICE_EDGE_RELAY_UPSTREAM_PORT,
|
|
undefined,
|
|
),
|
|
maxConcurrentSessions: parsePositiveInt(
|
|
process.env.DEVICE_EDGE_RELAY_MAX_SESSIONS,
|
|
100,
|
|
),
|
|
maxSessionsPerAddress: parsePositiveInt(
|
|
process.env.DEVICE_EDGE_RELAY_MAX_SESSIONS_PER_ADDRESS,
|
|
10,
|
|
),
|
|
maxConnectionsPerMinutePerAddress: parsePositiveInt(
|
|
process.env.DEVICE_EDGE_RELAY_MAX_CONNECTIONS_PER_MINUTE_PER_ADDRESS,
|
|
30,
|
|
),
|
|
maxTrackedSourceAddresses: parsePositiveInt(
|
|
process.env.DEVICE_EDGE_RELAY_MAX_TRACKED_SOURCE_ADDRESSES,
|
|
2048,
|
|
),
|
|
maxBytesPerDirection: parsePositiveInt(
|
|
process.env.DEVICE_EDGE_RELAY_MAX_BYTES_PER_DIRECTION,
|
|
262_144,
|
|
),
|
|
sourcePolicy: process.env.DEVICE_EDGE_RELAY_SOURCE_POLICY,
|
|
sessionTimeoutMs: parsePositiveInt(
|
|
process.env.DEVICE_EDGE_RELAY_SESSION_TIMEOUT_MS,
|
|
10000,
|
|
),
|
|
});
|
|
|
|
const addresses = await runtime.start();
|
|
console.log(JSON.stringify({
|
|
event: "device_edge_relay_started",
|
|
health: addresses.healthAddress,
|
|
tcp: addresses.tcpAddress,
|
|
ingress: runtime.status().ingress,
|
|
protocolInspection: "disabled",
|
|
commandTransport: "disabled",
|
|
}));
|
|
|
|
process.on("SIGTERM", shutdown);
|
|
process.on("SIGINT", shutdown);
|
|
|
|
async function shutdown() {
|
|
await runtime.stop();
|
|
process.exit(0);
|
|
}
|
|
|
|
function parsePort(value, fallback) {
|
|
if (value === undefined && fallback === undefined) return undefined;
|
|
const parsed = Number(value ?? fallback);
|
|
if (!Number.isSafeInteger(parsed) || parsed < 1 || parsed > 65535) {
|
|
throw new Error("device_edge_relay_port_invalid");
|
|
}
|
|
return parsed;
|
|
}
|
|
|
|
function parsePositiveInt(value, fallback) {
|
|
const parsed = Number(value || fallback);
|
|
if (!Number.isSafeInteger(parsed) || parsed < 1) {
|
|
throw new Error("device_edge_relay_positive_integer_invalid");
|
|
}
|
|
return parsed;
|
|
}
|
|
|
|
function parseBoolean(value, fallback) {
|
|
if (value === undefined || value === null || value === "") return fallback;
|
|
const normalized = String(value).trim().toLowerCase();
|
|
if (["1", "true", "yes", "on"].includes(normalized)) return true;
|
|
if (["0", "false", "no", "off"].includes(normalized)) return false;
|
|
throw new Error("device_edge_relay_boolean_invalid");
|
|
}
|