@camstack/system 1.2.115 → 1.2.117
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/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- package/dist/builtins/alerts/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
- package/dist/builtins/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
- package/dist/builtins/device-manager/device-manager.addon.js +2 -2
- package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
- package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
- package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
- package/dist/builtins/local-auth/local-auth.addon.js +1 -1
- package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
- package/dist/builtins/local-network/ipv6-lan.d.ts +26 -0
- package/dist/builtins/local-network/local-hostname.d.ts +15 -0
- package/dist/builtins/local-network/local-network.addon.d.ts +59 -21
- package/dist/builtins/local-network/local-network.addon.js +369 -50
- package/dist/builtins/local-network/local-network.addon.mjs +365 -51
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
- package/dist/builtins/platform-probe/index.js +1 -1
- package/dist/builtins/platform-probe/index.mjs +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +2 -2
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +2 -2
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- package/dist/builtins/system-config/system-config.addon.js +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +1 -1
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{dist-Drb54SZD.mjs → dist-D4Vmj8iw.mjs} +151 -9
- package/dist/{dist-iAwSA2_f.js → dist-DMEGlqg6.js} +151 -9
- package/dist/http/lan-http-bind.d.ts +30 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +30 -472
- package/dist/index.mjs +11 -468
- package/dist/lan-http-bind-DmgpFP6_.js +890 -0
- package/dist/lan-http-bind-jKrj6OjQ.mjs +752 -0
- package/dist/{retired-settings-keys-Dz5-7gjt.mjs → retired-settings-keys--aM_vGF9.mjs} +1 -1
- package/dist/{retired-settings-keys-OfhqQio4.js → retired-settings-keys-DET4YkAU.js} +1 -1
- package/dist/tls/cert-manager.d.ts +11 -0
- package/dist/tls/index.d.ts +3 -1
- package/dist/tls/tls-status.d.ts +16 -0
- package/dist/tls/uploaded-cert.d.ts +14 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { At as asNumber, B as extractNestedAddonId, Bt as parseJsonUnknown$1, Dt as ReadinessTimeoutError, Et as ReadinessRegistry, Ft as expandCapMethods, Gt as EventCategory$1, H as isArrayOutputSchema, Ht as resolveCapMount, J as lifecycleJobSchema, K as isVoidInput, Mt as createEvent, Nt as emitDownForOwnedCaps, Q as looseSchema, St as DEVICE_STATUS_METHOD, U as isCollectionArrayMethod, Ut as scopeKey, Vt as readinessKey, W as isObjectInput, Z as logLevelAtMost, bt as DATAPLANE_SECRET_HEADER$1, d as METHOD_ACCESS_MAP, f as RUNTIME_DEFAULTS, it as procedureAuthKey, jt as asString$1, kt as asJsonObject$1, ot as scopesAllowAddon, q as kebabToCamel, st as scopesAllowDeviceCap, t as ALL_CAPABILITY_DEFINITIONS, tt as objectInputDeclaresAddonId, vt as errMsg$1, xt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, y as addonSettingsCapability, zt as parseJsonObject } from "./dist-
|
|
2
|
+
import { At as asNumber, B as extractNestedAddonId, Bt as parseJsonUnknown$1, Dt as ReadinessTimeoutError, Et as ReadinessRegistry, Ft as expandCapMethods, Gt as EventCategory$1, H as isArrayOutputSchema, Ht as resolveCapMount, J as lifecycleJobSchema, K as isVoidInput, Mt as createEvent, Nt as emitDownForOwnedCaps, Q as looseSchema, St as DEVICE_STATUS_METHOD, U as isCollectionArrayMethod, Ut as scopeKey, Vt as readinessKey, W as isObjectInput, Z as logLevelAtMost, bt as DATAPLANE_SECRET_HEADER$1, d as METHOD_ACCESS_MAP, f as RUNTIME_DEFAULTS, it as procedureAuthKey, jt as asString$1, kt as asJsonObject$1, ot as scopesAllowAddon, q as kebabToCamel, st as scopesAllowDeviceCap, t as ALL_CAPABILITY_DEFINITIONS, tt as objectInputDeclaresAddonId, vt as errMsg$1, xt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, y as addonSettingsCapability, zt as parseJsonObject } from "./dist-D4Vmj8iw.mjs";
|
|
3
3
|
import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
|
|
4
4
|
import "./builtins/alerts/index.mjs";
|
|
5
5
|
import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
|
|
@@ -26,24 +26,23 @@ import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logg
|
|
|
26
26
|
import { a as parseTokenizedUrl, c as collectModelFiles, d as downloadModel, f as ensureModel, h as isModelDownloaded, i as parseRangeHeader, l as deleteModelFromDisk, m as getModelFilePath, n as contentTypeFor, o as resolveFilePath, p as fetchJson, r as createAuthenticatedFileServer, s as ModelDownloadService, t as createFileDataPlaneHandler, u as downloadFile } from "./file-data-plane-CuE_hBli.mjs";
|
|
27
27
|
import { $ as buildNativeCapProxy, A as createHubCapForwardService, At as buildHeapSample, B as AGENT_CAP_FWD_ACTION, C as brokerTransportLink, Ct as runNpm, D as localProviderLink, Dt as HEAP_WATCH_INTERVAL_MS, E as ipcParentLink, Et as HEAP_RECLAIM_TRIGGER_MB, F as createUdsLogger, Ft as strandedMb, G as callWithServiceDiscovery, H as CapRouteResolver, I as createUdsLoggerWithControl, J as UdsLocalTransportServer, K as createLocalTransport, L as LocalChildClient, M as createUdsEventBridge, Mt as shouldReclaim, N as createUdsEventBus, Nt as startHeapWatch, O as HUB_CAP_FWD_ACTION, Ot as HEAP_WATCH_WARN_RATIO, P as udsChildLogToWorkerEntry, Pt as startRunnerHeapWatch, Q as encodeFrame, R as LocalChildRegistry, S as brokerCallForCap, St as resolveNpmInvocation, T as ipcChildLink, Tt as HEAP_RECLAIM_MIN_INTERVAL_MS, U as CapRouteError, V as AGENT_CAP_FWD_SERVICE, W as classifyCapRoute, X as localEndpointPath, Y as SocketChannel, Z as FrameDecoder, _ as createKernelHwAccel, _t as CapabilityHandle, a as getWorkerDeviceRegistry, b as __resetCapUsageRegistryForTests, bt as installManifestNativeDeps, c as setHubConnected, ct as NATIVE_PROVIDER_SERVICE_INFIX, d as getBrokerEventBus, dt as capBareAction, et as buildUdsNativeCapProxy, f as getMoleculerEventStats, ft as capServiceName, g as AddonDepsManager, gt as DeviceRegistry, h as subscribePassthrough, ht as serializeTypedArrays, i as createUdsAddonContext, it as mountNativeCapService, j as createParentUnownedCallHandler, jt as createV8Reclaimer, k as HUB_CAP_FWD_SERVICE, kt as RUNNER_HEAP_WATCH_INTERVAL_MS, l as EVENT_TOPIC_PREFIX, lt as capActionName, m as setNodeEventInterest, mt as deserializeTypedArrays, n as adaptBrokerToCluster, o as getOrInitReadinessRegistry, ot as createAddonService, p as registerEventBusService, pt as parseCapAction, q as UdsLocalTransportClient, r as createAddonContext, s as getOrInitReadinessRegistryForClient, st as validateProviderRegistrations, t as installManifestPythonDeps, tt as createBrokerDeviceManagerApi, u as clusterEventTopic, ut as capActionSuffix, v as resolveHwAccel, vt as CapabilityUnavailableError, w as buildLinkChain, wt as createAddonDataPlaneFacility, x as getCapUsageRegistry, xt as resolveAddonClass, y as CapUsageRegistry, yt as copyBundledNativeModules, z as UDS_NO_ROUTE_PREFIX } from "./manifest-python-deps-SGdbr9D5.mjs";
|
|
28
28
|
import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-BWmQ5i-o.mjs";
|
|
29
|
+
import { C as evaluateExistingCert, S as SERVER_AUTH_OID, _ as CA_COMMON_NAME, a as closeLanHttp, b as LEAF_RENEWAL_WINDOW_DAYS, c as readExtraSans, d as writeExtraSans, f as writeTlsMode, g as reissueTlsLeaf, h as loadTlsCert, i as bindPendingLanHttp, l as readTlsAccessStatus, m as ensureTlsCert, n as allFamiliesListenHost, o as readLanHttpState, p as validateUploadedTls, r as applyLanHttp, s as registerLanHttpHandler, t as DEFAULT_LAN_HTTP_PORT, u as readTlsMode, v as collectCertIdentity, x as MAX_LEAF_VALIDITY_DAYS, y as CA_VALIDITY_DAYS } from "./lan-http-bind-jKrj6OjQ.mjs";
|
|
29
30
|
import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
|
|
30
31
|
import { z } from "zod";
|
|
31
|
-
import {
|
|
32
|
+
import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
|
|
32
33
|
import { PYTHON_VERSION, buildBinaryPath, downloadBinary, ensureBinary, ensureFfmpeg, ensurePython, findInPath, getFfmpegDownloadUrl, getPlatformInfo, getPythonDownloadUrl, installPythonPackages, installPythonRequirements } from "@camstack/types/node";
|
|
33
|
-
import {
|
|
34
|
+
import { lstat, readdir, readlink, realpath } from "node:fs/promises";
|
|
34
35
|
import * as path$39 from "node:path";
|
|
35
36
|
import { dirname, isAbsolute, join, posix, resolve, win32 } from "node:path";
|
|
36
37
|
import { execFile, spawn } from "node:child_process";
|
|
37
38
|
import * as util$10 from "node:util";
|
|
38
39
|
import { promisify } from "node:util";
|
|
39
40
|
import * as os$18 from "node:os";
|
|
40
|
-
import { tmpdir } from "node:os";
|
|
41
41
|
import * as fs$17 from "node:fs";
|
|
42
|
-
import { accessSync, constants, existsSync
|
|
42
|
+
import { accessSync, constants, existsSync } from "node:fs";
|
|
43
43
|
import { request } from "node:http";
|
|
44
44
|
import * as vm from "node:vm";
|
|
45
45
|
import { asJsonObject, errMsg, parseJsonUnknown } from "@camstack/types/addon";
|
|
46
|
-
import { isIP } from "node:net";
|
|
47
46
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
48
47
|
import { EventEmitter } from "node:events";
|
|
49
48
|
import As from "node:stream";
|
|
@@ -1510,7 +1509,7 @@ var PipelineValidator = class {
|
|
|
1510
1509
|
};
|
|
1511
1510
|
//#endregion
|
|
1512
1511
|
//#region src/python/python-env-manager.ts
|
|
1513
|
-
var execFileAsync$
|
|
1512
|
+
var execFileAsync$3 = promisify(execFile);
|
|
1514
1513
|
var PythonEnvManager = class {
|
|
1515
1514
|
venvPath;
|
|
1516
1515
|
cachedProbe = null;
|
|
@@ -1520,12 +1519,12 @@ var PythonEnvManager = class {
|
|
|
1520
1519
|
async probe() {
|
|
1521
1520
|
if (this.cachedProbe) return this.cachedProbe;
|
|
1522
1521
|
for (const cmd of ["python3", "python"]) try {
|
|
1523
|
-
const { stdout } = await execFileAsync$
|
|
1522
|
+
const { stdout } = await execFileAsync$3(cmd, ["--version"]);
|
|
1524
1523
|
const version = stdout.trim().replace("Python ", "");
|
|
1525
1524
|
const major = parseInt(version.split(".")[0] ?? "0", 10);
|
|
1526
1525
|
const minor = parseInt(version.split(".")[1] ?? "0", 10);
|
|
1527
1526
|
if (major < 3 || major === 3 && minor < 10) continue;
|
|
1528
|
-
const { stdout: pathOut } = await execFileAsync$
|
|
1527
|
+
const { stdout: pathOut } = await execFileAsync$3(cmd, ["-c", "import sys; print(sys.executable)"]);
|
|
1529
1528
|
this.cachedProbe = {
|
|
1530
1529
|
available: true,
|
|
1531
1530
|
version,
|
|
@@ -1541,13 +1540,13 @@ var PythonEnvManager = class {
|
|
|
1541
1540
|
async ensure(options) {
|
|
1542
1541
|
const probe = await this.probe();
|
|
1543
1542
|
if (!probe.available || !probe.path) throw new Error("Python 3.10+ is required but not found on this system");
|
|
1544
|
-
if (!fs$17.existsSync(path$39.join(this.venvPath, "bin", "python"))) await execFileAsync$
|
|
1543
|
+
if (!fs$17.existsSync(path$39.join(this.venvPath, "bin", "python"))) await execFileAsync$3(probe.path, [
|
|
1545
1544
|
"-m",
|
|
1546
1545
|
"venv",
|
|
1547
1546
|
this.venvPath
|
|
1548
1547
|
]);
|
|
1549
1548
|
const venvPython = path$39.join(this.venvPath, "bin", "python");
|
|
1550
|
-
if (options.packages.length > 0) await execFileAsync$
|
|
1549
|
+
if (options.packages.length > 0) await execFileAsync$3(venvPython, [
|
|
1551
1550
|
"-m",
|
|
1552
1551
|
"pip",
|
|
1553
1552
|
"install",
|
|
@@ -2012,462 +2011,6 @@ var StorageManager = class {
|
|
|
2012
2011
|
}
|
|
2013
2012
|
};
|
|
2014
2013
|
//#endregion
|
|
2015
|
-
//#region src/tls/cert-evaluation.ts
|
|
2016
|
-
/**
|
|
2017
|
-
* The regeneration rule (D227), as a pure function.
|
|
2018
|
-
*
|
|
2019
|
-
* `ensureTlsCert` reissues **only** when the material on disk cannot do
|
|
2020
|
-
* its job. Never because it is old, never because the machine picked up
|
|
2021
|
-
* an address the certificate does not need, never because a new build
|
|
2022
|
-
* shipped. The decision is a function of (files on disk, machine
|
|
2023
|
-
* identity, clock) alone, so the same inputs always produce the same
|
|
2024
|
-
* answer — which is what makes a reissue happen once and then stop.
|
|
2025
|
-
*/
|
|
2026
|
-
/** OID `id-kp-serverAuth`. Apple's trustd requires it on the leaf. */
|
|
2027
|
-
var SERVER_AUTH_OID = "1.3.6.1.5.5.7.3.1";
|
|
2028
|
-
/**
|
|
2029
|
-
* Apple's `SecPolicyCheckOtherTrustValidityPeriod` ceiling is 825 days;
|
|
2030
|
-
* the CA/Browser Forum's recommended maximum is 397. We sit at 397.
|
|
2031
|
-
*/
|
|
2032
|
-
var MAX_LEAF_VALIDITY_DAYS = 397;
|
|
2033
|
-
/** Reissue this long before the leaf dies, so nobody serves an expired one. */
|
|
2034
|
-
var LEAF_RENEWAL_WINDOW_DAYS = 30;
|
|
2035
|
-
/** A local root outlives many leaves — it is the anchor an operator trusts. */
|
|
2036
|
-
var CA_VALIDITY_DAYS = 3650;
|
|
2037
|
-
var MS_PER_DAY = 864e5;
|
|
2038
|
-
/** Reasons that invalidate the root as well as the leaf. */
|
|
2039
|
-
var REASONS_REQUIRING_NEW_CA = [
|
|
2040
|
-
"missing",
|
|
2041
|
-
"unreadable",
|
|
2042
|
-
"no-local-ca",
|
|
2043
|
-
"ca-expiring"
|
|
2044
|
-
];
|
|
2045
|
-
function reasonRequiresNewCa(reason) {
|
|
2046
|
-
return REASONS_REQUIRING_NEW_CA.includes(reason);
|
|
2047
|
-
}
|
|
2048
|
-
function parse$2(pem) {
|
|
2049
|
-
try {
|
|
2050
|
-
return new X509Certificate(pem);
|
|
2051
|
-
} catch {
|
|
2052
|
-
return null;
|
|
2053
|
-
}
|
|
2054
|
-
}
|
|
2055
|
-
function daysBetween(from, to) {
|
|
2056
|
-
return (to.getTime() - from.getTime()) / MS_PER_DAY;
|
|
2057
|
-
}
|
|
2058
|
-
function hasServerAuthEku(leaf) {
|
|
2059
|
-
const eku = leaf.keyUsage;
|
|
2060
|
-
return eku !== void 0 && eku.length === 1 && eku[0] === "1.3.6.1.5.5.7.3.1";
|
|
2061
|
-
}
|
|
2062
|
-
function keyMatches(leaf, keyPem) {
|
|
2063
|
-
try {
|
|
2064
|
-
return leaf.checkPrivateKey(createPrivateKey(keyPem));
|
|
2065
|
-
} catch {
|
|
2066
|
-
return false;
|
|
2067
|
-
}
|
|
2068
|
-
}
|
|
2069
|
-
function coversIdentity(leaf, identity) {
|
|
2070
|
-
for (const name of identity.requiredDnsNames) if (leaf.checkHost(name) === void 0) return false;
|
|
2071
|
-
for (const ip of identity.requiredIpAddresses) if (leaf.checkIP(ip) === void 0) return false;
|
|
2072
|
-
return true;
|
|
2073
|
-
}
|
|
2074
|
-
/**
|
|
2075
|
-
* `null` when the material on disk is fit to keep serving.
|
|
2076
|
-
*
|
|
2077
|
-
* Order matters only for the quality of the reported reason; any
|
|
2078
|
-
* non-null answer produces the same action.
|
|
2079
|
-
*/
|
|
2080
|
-
function evaluateExistingCert(input) {
|
|
2081
|
-
const leaf = parse$2(input.chainPem);
|
|
2082
|
-
const ca = parse$2(input.caPem);
|
|
2083
|
-
if (leaf === null || ca === null) return "unreadable";
|
|
2084
|
-
if (daysBetween(input.now, new Date(ca.validTo)) < 427) return "ca-expiring";
|
|
2085
|
-
if (!keyMatches(leaf, input.keyPem)) return "key-mismatch";
|
|
2086
|
-
if (daysBetween(input.now, new Date(leaf.validTo)) < 30) return "expiring";
|
|
2087
|
-
if (!hasServerAuthEku(leaf)) return "missing-server-auth-eku";
|
|
2088
|
-
if (leaf.ca || !leaf.checkIssued(ca) || !leaf.verify(ca.publicKey)) return "not-issued-by-local-ca";
|
|
2089
|
-
if (daysBetween(new Date(leaf.validFrom), new Date(leaf.validTo)) > 398) return "validity-too-long";
|
|
2090
|
-
if (!coversIdentity(leaf, input.identity)) return "san-coverage-gap";
|
|
2091
|
-
return null;
|
|
2092
|
-
}
|
|
2093
|
-
//#endregion
|
|
2094
|
-
//#region src/tls/cert-identity.ts
|
|
2095
|
-
/**
|
|
2096
|
-
* What names and addresses the hub's certificate has to answer for.
|
|
2097
|
-
*
|
|
2098
|
-
* Split out of `cert-manager.ts` because it is pure and because the
|
|
2099
|
-
* regeneration rule (D227) is decided entirely by the difference between
|
|
2100
|
-
* *this* and what the certificate on disk already carries.
|
|
2101
|
-
*/
|
|
2102
|
-
/**
|
|
2103
|
-
* Interfaces whose addresses are certified but never gate a reissue:
|
|
2104
|
-
* container bridges, VPN tunnels and mesh overlays hand out addresses
|
|
2105
|
-
* that change without the hub moving.
|
|
2106
|
-
*/
|
|
2107
|
-
var VOLATILE_INTERFACE_PREFIXES = [
|
|
2108
|
-
"docker",
|
|
2109
|
-
"br-",
|
|
2110
|
-
"veth",
|
|
2111
|
-
"virbr",
|
|
2112
|
-
"cni",
|
|
2113
|
-
"flannel",
|
|
2114
|
-
"tun",
|
|
2115
|
-
"utun",
|
|
2116
|
-
"tap",
|
|
2117
|
-
"wg",
|
|
2118
|
-
"zt",
|
|
2119
|
-
"tailscale",
|
|
2120
|
-
"ppp",
|
|
2121
|
-
"awdl",
|
|
2122
|
-
"llw"
|
|
2123
|
-
];
|
|
2124
|
-
/** A DNS name we are willing to hand to openssl. */
|
|
2125
|
-
var DNS_NAME_PATTERN = /^[A-Za-z0-9]([A-Za-z0-9._-]*[A-Za-z0-9])?$/;
|
|
2126
|
-
function isIpv4(value) {
|
|
2127
|
-
return isIP(value) === 4;
|
|
2128
|
-
}
|
|
2129
|
-
function isIpv6(value) {
|
|
2130
|
-
return isIP(value) === 6;
|
|
2131
|
-
}
|
|
2132
|
-
/**
|
|
2133
|
-
* `fe80::/10` and `169.254.0.0/16`. An IPv6 link-local address needs a
|
|
2134
|
-
* zone index to be usable and a SAN cannot carry one, so such an entry
|
|
2135
|
-
* can never match anything — it is noise that makes the certificate look
|
|
2136
|
-
* broader than it is.
|
|
2137
|
-
*/
|
|
2138
|
-
function isLinkLocal(value) {
|
|
2139
|
-
if (isIpv4(value)) return value.startsWith("169.254.");
|
|
2140
|
-
if (!isIpv6(value)) return false;
|
|
2141
|
-
const firstGroup = value.split(":")[0] ?? "";
|
|
2142
|
-
if (firstGroup === "") return false;
|
|
2143
|
-
const parsed = Number.parseInt(firstGroup, 16);
|
|
2144
|
-
return Number.isFinite(parsed) && (parsed & 65472) === 65152;
|
|
2145
|
-
}
|
|
2146
|
-
/** `fc00::/7` — the IPv6 range that behaves like RFC 1918 does for v4. */
|
|
2147
|
-
function isUniqueLocalIpv6(value) {
|
|
2148
|
-
if (!isIpv6(value)) return false;
|
|
2149
|
-
const firstGroup = value.split(":")[0] ?? "";
|
|
2150
|
-
const parsed = Number.parseInt(firstGroup, 16);
|
|
2151
|
-
return Number.isFinite(parsed) && (parsed & 65024) === 64512;
|
|
2152
|
-
}
|
|
2153
|
-
function isVolatileInterface(name) {
|
|
2154
|
-
const lower = name.toLowerCase();
|
|
2155
|
-
return VOLATILE_INTERFACE_PREFIXES.some((prefix) => lower.startsWith(prefix));
|
|
2156
|
-
}
|
|
2157
|
-
/**
|
|
2158
|
-
* A global-scope IPv6 address is NOT a stable identity: SLAAC privacy
|
|
2159
|
-
* extensions rotate temporary addresses roughly daily, and `os` gives us
|
|
2160
|
-
* no way to tell a temporary address from a permanent one. Gating on
|
|
2161
|
-
* one would reissue the certificate every day.
|
|
2162
|
-
*/
|
|
2163
|
-
function isStableGateAddress(address) {
|
|
2164
|
-
if (isLinkLocal(address)) return false;
|
|
2165
|
-
if (isIpv4(address)) return true;
|
|
2166
|
-
return isUniqueLocalIpv6(address);
|
|
2167
|
-
}
|
|
2168
|
-
function addSan(dns, ips, value) {
|
|
2169
|
-
const trimmed = value.trim();
|
|
2170
|
-
if (trimmed === "") return;
|
|
2171
|
-
if (isIP(trimmed) !== 0) {
|
|
2172
|
-
if (!isLinkLocal(trimmed)) ips.add(trimmed);
|
|
2173
|
-
return;
|
|
2174
|
-
}
|
|
2175
|
-
if (DNS_NAME_PATTERN.test(trimmed)) dns.add(trimmed);
|
|
2176
|
-
}
|
|
2177
|
-
/**
|
|
2178
|
-
* Snapshot the machine's identity. Called once per `ensureTlsCert`; the
|
|
2179
|
-
* result is both the SAN list for a new leaf and the yardstick the
|
|
2180
|
-
* existing leaf is measured against.
|
|
2181
|
-
*/
|
|
2182
|
-
function collectCertIdentity(options) {
|
|
2183
|
-
const dnsNames = /* @__PURE__ */ new Set();
|
|
2184
|
-
const ipAddresses = new Set(["127.0.0.1", "::1"]);
|
|
2185
|
-
const requiredDnsNames = /* @__PURE__ */ new Set();
|
|
2186
|
-
const requiredIpAddresses = new Set(["127.0.0.1"]);
|
|
2187
|
-
for (const name of [
|
|
2188
|
-
"localhost",
|
|
2189
|
-
options.commonName,
|
|
2190
|
-
os$18.hostname()
|
|
2191
|
-
]) {
|
|
2192
|
-
addSan(dnsNames, ipAddresses, name);
|
|
2193
|
-
addSan(requiredDnsNames, requiredIpAddresses, name);
|
|
2194
|
-
}
|
|
2195
|
-
for (const [ifaceName, addrs] of Object.entries(os$18.networkInterfaces())) for (const addr of addrs ?? []) {
|
|
2196
|
-
if (addr.internal) continue;
|
|
2197
|
-
if (isLinkLocal(addr.address)) continue;
|
|
2198
|
-
ipAddresses.add(addr.address);
|
|
2199
|
-
if (isVolatileInterface(ifaceName)) continue;
|
|
2200
|
-
if (isStableGateAddress(addr.address)) requiredIpAddresses.add(addr.address);
|
|
2201
|
-
}
|
|
2202
|
-
for (const san of options.extraSans) {
|
|
2203
|
-
addSan(dnsNames, ipAddresses, san);
|
|
2204
|
-
addSan(requiredDnsNames, requiredIpAddresses, san);
|
|
2205
|
-
}
|
|
2206
|
-
return {
|
|
2207
|
-
dnsNames: [...dnsNames],
|
|
2208
|
-
ipAddresses: [...ipAddresses],
|
|
2209
|
-
requiredDnsNames: [...requiredDnsNames],
|
|
2210
|
-
requiredIpAddresses: [...requiredIpAddresses]
|
|
2211
|
-
};
|
|
2212
|
-
}
|
|
2213
|
-
//#endregion
|
|
2214
|
-
//#region src/tls/cert-openssl.ts
|
|
2215
|
-
/**
|
|
2216
|
-
* The openssl invocations. Isolated so `cert-manager.ts` reads as policy
|
|
2217
|
-
* and this file reads as mechanics.
|
|
2218
|
-
*/
|
|
2219
|
-
var execFileAsync$3 = promisify(execFile);
|
|
2220
|
-
/** Subject of the local root. Distinct from the leaf's CN by construction. */
|
|
2221
|
-
var CA_COMMON_NAME = "CamStack Local CA";
|
|
2222
|
-
function sanValue(identity) {
|
|
2223
|
-
const parts = [];
|
|
2224
|
-
for (const dns of identity.dnsNames) parts.push(`DNS:${dns}`);
|
|
2225
|
-
for (const ip of identity.ipAddresses) if (isIP(ip) !== 0) parts.push(`IP:${ip}`);
|
|
2226
|
-
return parts.join(",");
|
|
2227
|
-
}
|
|
2228
|
-
/**
|
|
2229
|
-
* A local root: 10 years, `pathlen:0` so it can sign leaves and nothing
|
|
2230
|
-
* else, and **no EKU** — Apple rejects an anchor asserting
|
|
2231
|
-
* `anyExtendedKeyUsage`, and a root with no EKU constrains nothing.
|
|
2232
|
-
*/
|
|
2233
|
-
async function generateCa(tmpDir) {
|
|
2234
|
-
const caCertPath = join(tmpDir, "ca.crt");
|
|
2235
|
-
const caKeyPath = join(tmpDir, "ca.key");
|
|
2236
|
-
await execFileAsync$3("openssl", [
|
|
2237
|
-
"req",
|
|
2238
|
-
"-x509",
|
|
2239
|
-
"-newkey",
|
|
2240
|
-
"rsa:2048",
|
|
2241
|
-
"-nodes",
|
|
2242
|
-
"-sha256",
|
|
2243
|
-
"-days",
|
|
2244
|
-
String(CA_VALIDITY_DAYS),
|
|
2245
|
-
"-keyout",
|
|
2246
|
-
caKeyPath,
|
|
2247
|
-
"-out",
|
|
2248
|
-
caCertPath,
|
|
2249
|
-
"-subj",
|
|
2250
|
-
`/CN=${CA_COMMON_NAME}`,
|
|
2251
|
-
"-addext",
|
|
2252
|
-
"basicConstraints=critical,CA:TRUE,pathlen:0",
|
|
2253
|
-
"-addext",
|
|
2254
|
-
"keyUsage=critical,keyCertSign,cRLSign",
|
|
2255
|
-
"-addext",
|
|
2256
|
-
"subjectKeyIdentifier=hash"
|
|
2257
|
-
]);
|
|
2258
|
-
await chmod(caKeyPath, 384);
|
|
2259
|
-
return {
|
|
2260
|
-
caCertPath,
|
|
2261
|
-
caKeyPath
|
|
2262
|
-
};
|
|
2263
|
-
}
|
|
2264
|
-
/**
|
|
2265
|
-
* A server leaf signed by the local root: `CA:FALSE`, and
|
|
2266
|
-
* `extendedKeyUsage=serverAuth` — not `anyExtendedKeyUsage`, which
|
|
2267
|
-
* Apple's `testAppTrustRoot_AnyEKU_AfterJul2019` asserts must fail.
|
|
2268
|
-
*/
|
|
2269
|
-
async function issueLeaf(tmpDir, ca, identity, commonName, validDays) {
|
|
2270
|
-
const keyPath = join(tmpDir, "leaf.key");
|
|
2271
|
-
const csrPath = join(tmpDir, "leaf.csr");
|
|
2272
|
-
const certPath = join(tmpDir, "leaf.crt");
|
|
2273
|
-
const extPath = join(tmpDir, "leaf.ext");
|
|
2274
|
-
await writeFile(extPath, [
|
|
2275
|
-
"basicConstraints=critical,CA:FALSE",
|
|
2276
|
-
"keyUsage=critical,digitalSignature,keyEncipherment",
|
|
2277
|
-
"extendedKeyUsage=serverAuth",
|
|
2278
|
-
"subjectKeyIdentifier=hash",
|
|
2279
|
-
"authorityKeyIdentifier=keyid,issuer",
|
|
2280
|
-
`subjectAltName=${sanValue(identity)}`,
|
|
2281
|
-
""
|
|
2282
|
-
].join("\n"), "utf-8");
|
|
2283
|
-
await execFileAsync$3("openssl", [
|
|
2284
|
-
"req",
|
|
2285
|
-
"-new",
|
|
2286
|
-
"-newkey",
|
|
2287
|
-
"rsa:2048",
|
|
2288
|
-
"-nodes",
|
|
2289
|
-
"-sha256",
|
|
2290
|
-
"-keyout",
|
|
2291
|
-
keyPath,
|
|
2292
|
-
"-out",
|
|
2293
|
-
csrPath,
|
|
2294
|
-
"-subj",
|
|
2295
|
-
`/CN=${commonName}`
|
|
2296
|
-
]);
|
|
2297
|
-
await execFileAsync$3("openssl", [
|
|
2298
|
-
"x509",
|
|
2299
|
-
"-req",
|
|
2300
|
-
"-in",
|
|
2301
|
-
csrPath,
|
|
2302
|
-
"-CA",
|
|
2303
|
-
ca.caCertPath,
|
|
2304
|
-
"-CAkey",
|
|
2305
|
-
ca.caKeyPath,
|
|
2306
|
-
"-set_serial",
|
|
2307
|
-
`0x00${randomBytes(16).toString("hex")}`,
|
|
2308
|
-
"-days",
|
|
2309
|
-
String(validDays),
|
|
2310
|
-
"-sha256",
|
|
2311
|
-
"-extfile",
|
|
2312
|
-
extPath,
|
|
2313
|
-
"-out",
|
|
2314
|
-
certPath
|
|
2315
|
-
]);
|
|
2316
|
-
await chmod(keyPath, 384);
|
|
2317
|
-
await rm(csrPath, { force: true });
|
|
2318
|
-
await rm(extPath, { force: true });
|
|
2319
|
-
return {
|
|
2320
|
-
certPath,
|
|
2321
|
-
keyPath
|
|
2322
|
-
};
|
|
2323
|
-
}
|
|
2324
|
-
//#endregion
|
|
2325
|
-
//#region src/tls/cert-manager.ts
|
|
2326
|
-
var DEFAULT_COMMON_NAME = "camstack.local";
|
|
2327
|
-
/**
|
|
2328
|
-
* Ensure the hub has a usable TLS identity under `<dataDir>/tls`, made of
|
|
2329
|
-
* a long-lived local **root** (`camstack-ca.crt`) and a short **leaf**
|
|
2330
|
-
* chained to it (`camstack.crt` = leaf + root, `camstack.key`).
|
|
2331
|
-
*
|
|
2332
|
-
* ## The regeneration rule (D227)
|
|
2333
|
-
*
|
|
2334
|
-
* Reissue happens when, and only when, the material on disk **cannot do
|
|
2335
|
-
* its job**:
|
|
2336
|
-
*
|
|
2337
|
-
* - it is absent, unreadable, or the key does not match the certificate;
|
|
2338
|
-
* - the root is absent (every pre-2026-08 install: one self-signed
|
|
2339
|
-
* `CA:TRUE` leaf and no root) or is inside its renewal window;
|
|
2340
|
-
* - the leaf is inside its 30-day renewal window;
|
|
2341
|
-
* - the leaf lacks `extendedKeyUsage = serverAuth` — Apple's trustd
|
|
2342
|
-
* rejects an app-supplied anchor without it;
|
|
2343
|
-
* - the leaf is not actually issued by the root on disk;
|
|
2344
|
-
* - the leaf's validity span exceeds {@link MAX_LEAF_VALIDITY_DAYS};
|
|
2345
|
-
* - **a name or address the hub must answer for is missing from the SAN
|
|
2346
|
-
* list** — a DHCP move, a new interface or a new hostname.
|
|
2347
|
-
*
|
|
2348
|
-
* And explicitly NOT when: the certificate names an address the machine
|
|
2349
|
-
* no longer has (a superset still works — the check is one-directional),
|
|
2350
|
-
* a volatile interface (docker/VPN/mesh) or a global-scope IPv6 address
|
|
2351
|
-
* changed (SLAAC privacy addresses rotate daily), or a new build shipped.
|
|
2352
|
-
*
|
|
2353
|
-
* Every trigger is derived from the files plus the machine, so once a
|
|
2354
|
-
* reissue clears them it clears them for good: the next boot returns
|
|
2355
|
-
* `generated: false`. A certificate that moved on every boot would
|
|
2356
|
-
* invalidate every trust an operator granted by hand — worse than the
|
|
2357
|
-
* bugs this rule fixes.
|
|
2358
|
-
*
|
|
2359
|
-
* **The root is rotated only for root-level reasons.** SAN drift rotates
|
|
2360
|
-
* the leaf alone, so trust granted to `camstack-ca.crt` survives every
|
|
2361
|
-
* address change the hub will ever see.
|
|
2362
|
-
*/
|
|
2363
|
-
async function ensureTlsCert(dataDir, options) {
|
|
2364
|
-
const tlsDir = join(dataDir, "tls");
|
|
2365
|
-
const paths = {
|
|
2366
|
-
certPath: join(tlsDir, "camstack.crt"),
|
|
2367
|
-
keyPath: join(tlsDir, "camstack.key"),
|
|
2368
|
-
caCertPath: join(tlsDir, "camstack-ca.crt"),
|
|
2369
|
-
caKeyPath: join(tlsDir, "camstack-ca.key")
|
|
2370
|
-
};
|
|
2371
|
-
const commonName = options?.commonName ?? DEFAULT_COMMON_NAME;
|
|
2372
|
-
const validDays = Math.min(options?.validDays ?? 397, 397);
|
|
2373
|
-
const identity = collectCertIdentity({
|
|
2374
|
-
commonName,
|
|
2375
|
-
extraSans: options?.extraSans ?? []
|
|
2376
|
-
});
|
|
2377
|
-
const reason = decideRegeneration(paths, identity);
|
|
2378
|
-
if (reason === null) return describe(paths, false, null, false, null);
|
|
2379
|
-
const previousFingerprint = readFingerprint(paths.certPath);
|
|
2380
|
-
const caRotated = reasonRequiresNewCa(reason);
|
|
2381
|
-
mkdirSync(tlsDir, { recursive: true });
|
|
2382
|
-
await regenerate(paths, identity, commonName, validDays, caRotated);
|
|
2383
|
-
return describe(paths, true, reason, caRotated, previousFingerprint);
|
|
2384
|
-
}
|
|
2385
|
-
/** Fingerprint of whatever is on disk, or `null` if there is nothing readable. */
|
|
2386
|
-
function readFingerprint(certPath) {
|
|
2387
|
-
try {
|
|
2388
|
-
return new X509Certificate(readFileSync(certPath)).fingerprint256;
|
|
2389
|
-
} catch {
|
|
2390
|
-
return null;
|
|
2391
|
-
}
|
|
2392
|
-
}
|
|
2393
|
-
function decideRegeneration(paths, identity) {
|
|
2394
|
-
if (!existsSync(paths.certPath) || !existsSync(paths.keyPath)) return "missing";
|
|
2395
|
-
if (!existsSync(paths.caCertPath) || !existsSync(paths.caKeyPath)) return "no-local-ca";
|
|
2396
|
-
try {
|
|
2397
|
-
return evaluateExistingCert({
|
|
2398
|
-
chainPem: readFileSync(paths.certPath, "utf-8"),
|
|
2399
|
-
keyPem: readFileSync(paths.keyPath, "utf-8"),
|
|
2400
|
-
caPem: readFileSync(paths.caCertPath, "utf-8"),
|
|
2401
|
-
identity,
|
|
2402
|
-
now: /* @__PURE__ */ new Date()
|
|
2403
|
-
});
|
|
2404
|
-
} catch {
|
|
2405
|
-
return "unreadable";
|
|
2406
|
-
}
|
|
2407
|
-
}
|
|
2408
|
-
/**
|
|
2409
|
-
* Build every file in a scratch directory, then move them into place.
|
|
2410
|
-
* A crash mid-way leaves the previous material untouched; a crash
|
|
2411
|
-
* between the moves leaves a key/certificate mismatch, which the
|
|
2412
|
-
* evaluator reports as `key-mismatch` and heals on the next boot.
|
|
2413
|
-
*/
|
|
2414
|
-
async function regenerate(paths, identity, commonName, validDays, newCa) {
|
|
2415
|
-
const scratch = await mkdtemp(join(tmpdir(), "camstack-tls-"));
|
|
2416
|
-
try {
|
|
2417
|
-
const ca = newCa ? await generateCa(scratch) : {
|
|
2418
|
-
caCertPath: paths.caCertPath,
|
|
2419
|
-
caKeyPath: paths.caKeyPath
|
|
2420
|
-
};
|
|
2421
|
-
const leaf = await issueLeaf(scratch, ca, identity, commonName, validDays);
|
|
2422
|
-
const chainPath = join(scratch, "chain.crt");
|
|
2423
|
-
await writeFile(chainPath, `${readFileSync(leaf.certPath, "utf-8").trimEnd()}\n${readFileSync(ca.caCertPath, "utf-8").trimEnd()}\n`, "utf-8");
|
|
2424
|
-
if (newCa) {
|
|
2425
|
-
await copyFile(ca.caCertPath, `${paths.caCertPath}.new`);
|
|
2426
|
-
await copyFile(ca.caKeyPath, `${paths.caKeyPath}.new`);
|
|
2427
|
-
renameSync(`${paths.caCertPath}.new`, paths.caCertPath);
|
|
2428
|
-
renameSync(`${paths.caKeyPath}.new`, paths.caKeyPath);
|
|
2429
|
-
await chmod(paths.caKeyPath, 384);
|
|
2430
|
-
}
|
|
2431
|
-
await copyFile(leaf.keyPath, `${paths.keyPath}.new`);
|
|
2432
|
-
await copyFile(chainPath, `${paths.certPath}.new`);
|
|
2433
|
-
renameSync(`${paths.keyPath}.new`, paths.keyPath);
|
|
2434
|
-
renameSync(`${paths.certPath}.new`, paths.certPath);
|
|
2435
|
-
await chmod(paths.keyPath, 384);
|
|
2436
|
-
} finally {
|
|
2437
|
-
await rm(scratch, {
|
|
2438
|
-
recursive: true,
|
|
2439
|
-
force: true
|
|
2440
|
-
});
|
|
2441
|
-
}
|
|
2442
|
-
}
|
|
2443
|
-
function describe(paths, generated, reason, caRotated, previousFingerprintSha256) {
|
|
2444
|
-
const leaf = new X509Certificate(readFileSync(paths.certPath));
|
|
2445
|
-
const ca = new X509Certificate(readFileSync(paths.caCertPath));
|
|
2446
|
-
const san = leaf.subjectAltName ?? "";
|
|
2447
|
-
return {
|
|
2448
|
-
...paths,
|
|
2449
|
-
generated,
|
|
2450
|
-
reason,
|
|
2451
|
-
caRotated,
|
|
2452
|
-
fingerprintSha256: leaf.fingerprint256,
|
|
2453
|
-
previousFingerprintSha256,
|
|
2454
|
-
caFingerprintSha256: ca.fingerprint256,
|
|
2455
|
-
validTo: new Date(leaf.validTo).toISOString(),
|
|
2456
|
-
sans: san === "" ? [] : san.split(", ")
|
|
2457
|
-
};
|
|
2458
|
-
}
|
|
2459
|
-
/**
|
|
2460
|
-
* Load TLS cert+key from files. Returns Buffers suitable for Node.js TLS
|
|
2461
|
-
* options. `certPath` is a full chain, so the listener presents the local
|
|
2462
|
-
* root alongside the leaf.
|
|
2463
|
-
*/
|
|
2464
|
-
function loadTlsCert(certPath, keyPath) {
|
|
2465
|
-
return {
|
|
2466
|
-
cert: readFileSync(certPath),
|
|
2467
|
-
key: readFileSync(keyPath)
|
|
2468
|
-
};
|
|
2469
|
-
}
|
|
2470
|
-
//#endregion
|
|
2471
2014
|
//#region src/builtins/sqlite-storage/integration-registry.ts
|
|
2472
2015
|
function serializeSetting(value) {
|
|
2473
2016
|
if (typeof value === "number") return {
|
|
@@ -95273,4 +94816,4 @@ var LifecycleJobEngine = class {
|
|
|
95273
94816
|
}
|
|
95274
94817
|
};
|
|
95275
94818
|
//#endregion
|
|
95276
|
-
export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, ALL_CAPABILITY_DEFINITIONS, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AlertCenterAddon, ApiKeyManager, AuthManager, CA_COMMON_NAME, CA_VALIDITY_DAYS, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REJECTED_EXIT_CODE, CORE_CAP_SERVICE_NAME, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DEFAULT_DATA_PATH, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JobJournal, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LokiDestination, LokiLoggingAddon, MAX_LEAF_VALIDITY_DAYS, METHOD_ACCESS_MAP, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, PYTHON_VERSION, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, RESTART_MARKER_FILE, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, SERVER_AUTH_OID, ScopedLogger, ScopedTokenManager, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, ToastService, UDS_NO_ROUTE_PREFIX, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, __resetCapUsageRegistryForTests, adaptBrokerToCluster, addonSettingsCapability, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildStorageLocationRegistry, buildUdsNativeCapProxy, builderMountedCapNames, callRegisterNodeWithRetry, callWithServiceDiscovery, capActionName, capActionSuffix, capBareAction, capServiceName, classifyAddonDir, classifyCapRoute, clearPendingRestart, clusterEventTopic, clusterSecretMatches, collectCertIdentity, collectModelFiles, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonService, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCoreCapService, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createKernelHwAccel, createLocalTransport, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, detectWorkspacePackagesDir, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, fetchJson, findInPath, formatLogLine, getBrokerEventBus, getCapUsageRegistry, getFfmpegDownloadUrl, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getWorkerDeviceRegistry, hasDotNode, hashClusterSecret, installManifestNativeDeps, installManifestPythonDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcChildLink, ipcParentLink, isAddonDeploySource, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isInfraCapability, isModelDownloaded, isSourceNewer, loadTlsCert, localEndpointPath, localProviderLink, mountNativeCapService, parseCapAction, parseRangeHeader, parseTokenizedUrl, proxyToUpstream, quarantineAddonResidue, readPendingRestart, readinessKey, registerEventBusService, resolveFilePath, resolveHwAccel, resolveNpmInvocation, runNpm, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, serializeTypedArrays, setHubConnected, setNodeEventInterest, shouldReclaim, startHeapWatch, startRunnerHeapWatch, strandedMb, stripCamstackDeps, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, writePendingRestart };
|
|
94819
|
+
export { AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, ALL_CAPABILITY_DEFINITIONS, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AlertCenterAddon, ApiKeyManager, AuthManager, CA_COMMON_NAME, CA_VALIDITY_DAYS, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REJECTED_EXIT_CODE, CORE_CAP_SERVICE_NAME, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DEFAULT_DATA_PATH, DEFAULT_LAN_HTTP_PORT, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JobJournal, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LokiDestination, LokiLoggingAddon, MAX_LEAF_VALIDITY_DAYS, METHOD_ACCESS_MAP, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, PYTHON_VERSION, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, RESTART_MARKER_FILE, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, SERVER_AUTH_OID, ScopedLogger, ScopedTokenManager, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, ToastService, UDS_NO_ROUTE_PREFIX, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, __resetCapUsageRegistryForTests, adaptBrokerToCluster, addonSettingsCapability, allFamiliesListenHost, applyLanHttp, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildStorageLocationRegistry, buildUdsNativeCapProxy, builderMountedCapNames, callRegisterNodeWithRetry, callWithServiceDiscovery, capActionName, capActionSuffix, capBareAction, capServiceName, classifyAddonDir, classifyCapRoute, clearPendingRestart, closeLanHttp, clusterEventTopic, clusterSecretMatches, collectCertIdentity, collectModelFiles, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonService, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCoreCapService, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createKernelHwAccel, createLocalTransport, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, detectWorkspacePackagesDir, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, fetchJson, findInPath, formatLogLine, getBrokerEventBus, getCapUsageRegistry, getFfmpegDownloadUrl, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getWorkerDeviceRegistry, hasDotNode, hashClusterSecret, installManifestNativeDeps, installManifestPythonDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcChildLink, ipcParentLink, isAddonDeploySource, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isInfraCapability, isModelDownloaded, isSourceNewer, loadTlsCert, localEndpointPath, localProviderLink, mountNativeCapService, parseCapAction, parseRangeHeader, parseTokenizedUrl, proxyToUpstream, quarantineAddonResidue, readExtraSans, readLanHttpState, readPendingRestart, readTlsAccessStatus, readTlsMode, readinessKey, registerEventBusService, registerLanHttpHandler, reissueTlsLeaf, resolveFilePath, resolveHwAccel, resolveNpmInvocation, runNpm, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, serializeTypedArrays, setHubConnected, setNodeEventInterest, shouldReclaim, startHeapWatch, startRunnerHeapWatch, strandedMb, stripCamstackDeps, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, validateUploadedTls, writeExtraSans, writePendingRestart, writeTlsMode };
|