@camstack/system 1.2.386 → 1.2.388

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.
@@ -4,7 +4,7 @@ import { n as require_safe_buffer, t as require_ms } from "../../ms-DlIWNkkk.mjs
4
4
  import { a as MESH_CA_FIELD, c as MESH_CA_VALIDITY_DAYS, f as CLUSTER_SECRET_REF, i as MESH_CA_COMMON_NAME, l as MESH_JOIN_TOKEN_MAX_TTL_SEC, n as DEFAULT_HUB_TCP_PORT, o as MESH_CA_KEY_REF, r as DEFAULT_HUB_TLS_TCP_PORT, s as MESH_CA_SETTINGS_KEY, t as CLIENT_AUTH_OID, u as SERVER_AUTH_OID, x as setProcessClusterSecretGate, y as hashClusterSecret } from "../../constants-D5z4EwY8.mjs";
5
5
  import { a as KeyUsagesExtension, c as Pkcs10CertificateRequestGenerator, d as X509Certificate$1, f as X509CertificateGenerator, i as KeyUsageFlags, n as BasicConstraintsExtension, o as PemConverter, p as cryptoProvider, r as ExtendedKeyUsageExtension, s as Pkcs10CertificateRequest, t as AuthorityKeyIdentifierExtension, u as SubjectKeyIdentifierExtension } from "../../x509.es-Xf3K_brW.mjs";
6
6
  import { z } from "zod";
7
- import { X509Certificate, createHash, randomBytes, webcrypto } from "node:crypto";
7
+ import { X509Certificate, createHash, createHmac, randomBytes, timingSafeEqual, webcrypto } from "node:crypto";
8
8
  import { BlockList, isIP } from "node:net";
9
9
  import { lstat, readdir, readlink, realpath } from "node:fs/promises";
10
10
  import { posix, win32 } from "node:path";
@@ -141,6 +141,145 @@ function getProcessMeshAuthStatus() {
141
141
  return typeof source === "function" ? source() : null;
142
142
  }
143
143
  //#endregion
144
+ //#region src/kernel/moleculer/agent-ui-unlock.ts
145
+ /**
146
+ * Agent UI remote unlock tickets (D821).
147
+ *
148
+ * A hub admin mints a short-lived HMAC ticket bound to one agent `nodeId`.
149
+ * The agent redeems it once for a tab session Bearer — the cluster secret
150
+ * stays a mesh / pairing credential and is not pasted into the browser for
151
+ * daily unlock.
152
+ *
153
+ * K = SHA-256(cluster secret) — same as mesh join (D802)
154
+ * ticket = base64url(JSON payload) + '.' + base64url(HMAC-SHA256(K, DOMAIN|payloadB64))
155
+ * payload = { v: 1, nodeId, exp (ms), jti }
156
+ */
157
+ var AGENT_UI_UNLOCK_DOMAIN = "camstack-agent-ui-unlock/v1";
158
+ var AGENT_UI_UNLOCK_VERSION = 1;
159
+ /** Ticket lifetime — long enough for a redirect hop, short enough to steal poorly. */
160
+ var AGENT_UI_UNLOCK_TTL_MS = 5 * 6e4;
161
+ /**
162
+ * Cluster settings key: extra origins allowed as `returnTo` for Continue-with-hub
163
+ * (NPM hostnames that are not `:4444` on a LAN IP). Comma-separated origins.
164
+ */
165
+ var AGENT_DASHBOARD_ORIGINS_FIELD = "agentDashboardOrigins";
166
+ /** In-memory spent `jti` until `exp` (ms). */
167
+ var UnlockTicketJtiStore = class {
168
+ spent = /* @__PURE__ */ new Map();
169
+ isSpent(jti, nowMs = Date.now()) {
170
+ this.gc(nowMs);
171
+ return this.spent.has(jti);
172
+ }
173
+ /** Record a jti as used until `exp`. Returns false if already spent. */
174
+ consume(jti, exp, nowMs = Date.now()) {
175
+ this.gc(nowMs);
176
+ if (this.spent.has(jti)) return false;
177
+ this.spent.set(jti, exp);
178
+ return true;
179
+ }
180
+ /** Test helper. */
181
+ size() {
182
+ return this.spent.size;
183
+ }
184
+ gc(nowMs) {
185
+ for (const [jti, exp] of this.spent) if (exp <= nowMs) this.spent.delete(jti);
186
+ }
187
+ };
188
+ function mintAgentUiUnlockTicket(input) {
189
+ const nowMs = input.nowMs ?? Date.now();
190
+ const ttl = Math.min(Math.max(1e3, input.ttlMs ?? 3e5), AGENT_UI_UNLOCK_TTL_MS);
191
+ const payload = {
192
+ v: 1,
193
+ nodeId: input.nodeId,
194
+ exp: nowMs + ttl,
195
+ jti: input.jti ?? randomBytes(16).toString("base64url")
196
+ };
197
+ const payloadB64 = Buffer.from(JSON.stringify(payload), "utf8").toString("base64url");
198
+ return `${payloadB64}.${sign(input.secretHash, payloadB64)}`;
199
+ }
200
+ /**
201
+ * Verify a ticket under `secretHash`. Returns the payload, or `null` when the
202
+ * signature, shape, expiry or nodeId fails (no reason string — refuse quietly).
203
+ */
204
+ function verifyAgentUiUnlockTicket(secretHash, ticket, options) {
205
+ const nowMs = options.nowMs ?? Date.now();
206
+ const dot = ticket.indexOf(".");
207
+ if (dot <= 0 || dot === ticket.length - 1) return null;
208
+ const payloadB64 = ticket.slice(0, dot);
209
+ const sig = ticket.slice(dot + 1);
210
+ if (!sigsEqual(sign(secretHash, payloadB64), sig)) return null;
211
+ let parsed;
212
+ try {
213
+ parsed = JSON.parse(Buffer.from(payloadB64, "base64url").toString("utf8"));
214
+ } catch {
215
+ return null;
216
+ }
217
+ const payload = parsePayload(parsed);
218
+ if (payload === null) return null;
219
+ if (payload.exp <= nowMs) return null;
220
+ if (payload.nodeId !== options.expectedNodeId) return null;
221
+ return payload;
222
+ }
223
+ /**
224
+ * True when `returnTo` may receive a ticket redirect. Default: any http(s)
225
+ * origin whose port is 4444. Extra origins come from
226
+ * {@link AGENT_DASHBOARD_ORIGINS_FIELD} (exact origin match).
227
+ */
228
+ function isAllowedAgentDashboardReturnTo(returnTo, extraOrigins = []) {
229
+ let url;
230
+ try {
231
+ url = new URL(returnTo);
232
+ } catch {
233
+ return false;
234
+ }
235
+ if (url.protocol !== "http:" && url.protocol !== "https:") return false;
236
+ if (url.username !== "" || url.password !== "") return false;
237
+ if (url.pathname !== "/" && url.pathname !== "") return false;
238
+ if (url.port === "4444") return true;
239
+ const origin = url.origin;
240
+ return extraOrigins.some((o) => o === origin);
241
+ }
242
+ /** Parse a stored comma/whitespace-separated origins list. */
243
+ function parseAgentDashboardOrigins(stored) {
244
+ if (typeof stored !== "string" || stored.trim().length === 0) return [];
245
+ const out = [];
246
+ for (const part of stored.split(/[,\s]+/)) {
247
+ const t = part.trim();
248
+ if (t.length === 0) continue;
249
+ try {
250
+ const u = new URL(t);
251
+ if (u.protocol === "http:" || u.protocol === "https:") out.push(u.origin);
252
+ } catch {}
253
+ }
254
+ return out;
255
+ }
256
+ function sign(secretHash, payloadB64) {
257
+ return createHmac("sha256", Buffer.from(secretHash, "utf8")).update(`${AGENT_UI_UNLOCK_DOMAIN}|${payloadB64}`, "utf8").digest("base64url");
258
+ }
259
+ function sigsEqual(expected, presented) {
260
+ const a = Buffer.from(expected, "utf8");
261
+ const b = Buffer.from(presented, "utf8");
262
+ if (a.length !== b.length) return false;
263
+ return timingSafeEqual(a, b);
264
+ }
265
+ function parsePayload(value) {
266
+ if (typeof value !== "object" || value === null) return null;
267
+ const rec = value;
268
+ if (rec["v"] !== 1) return null;
269
+ const nodeId = rec["nodeId"];
270
+ const exp = rec["exp"];
271
+ const jti = rec["jti"];
272
+ if (typeof nodeId !== "string" || nodeId.length === 0) return null;
273
+ if (typeof exp !== "number" || !Number.isFinite(exp)) return null;
274
+ if (typeof jti !== "string" || jti.length === 0) return null;
275
+ return {
276
+ v: 1,
277
+ nodeId,
278
+ exp,
279
+ jti
280
+ };
281
+ }
282
+ //#endregion
144
283
  //#region src/kernel/moleculer/mesh-mtls/mesh-ca.ts
145
284
  cryptoProvider.set(webcrypto);
146
285
  var MS_PER_DAY = 864e5;
@@ -87369,6 +87508,9 @@ var TlsTcpTransporter = class extends TcpTransporter {
87369
87508
  /** Node id (certificate CN) → serial of every peer that completed a mutual-TLS handshake. */
87370
87509
  tlsPeers = /* @__PURE__ */ new Map();
87371
87510
  clearDisabled = false;
87511
+ /** Clear-text `TcpWriter.connect` captured once before the TLS wrap (A→B). */
87512
+ clearWriterConnect = null;
87513
+ writerTlsPatched = false;
87372
87514
  constructor(opts = {}) {
87373
87515
  super({ ...opts });
87374
87516
  this.meshTls = opts.meshTls ?? null;
@@ -87391,20 +87533,43 @@ var TlsTcpTransporter = class extends TcpTransporter {
87391
87533
  }).then(() => this.onConnected());
87392
87534
  }
87393
87535
  /**
87394
- * Agent / outbound: wrap `TcpWriter.connect` so peers are dialed with
87395
- * mutual TLS and the peer CN must match the expected node id.
87536
+ * Outbound dial uses mTLS when the peer is already known on TLS (inbound
87537
+ * handshake), or when dialling the hub node id (agent → hub). Everyone else
87538
+ * (runners, unenrolled agents) stays on the clear writer — the hub must not
87539
+ * TLS-wrap every `connect` after deferred `enableMeshTls`.
87540
+ */
87541
+ shouldDialPeerWithTls(nodeID) {
87542
+ if (nodeID === "hub") return true;
87543
+ return this.tlsPeers.has(nodeID);
87544
+ }
87545
+ peerTlsDialPort() {
87546
+ return this.opts.tlsPort ?? 6443;
87547
+ }
87548
+ /**
87549
+ * Wrap `TcpWriter.connect` so TLS peers are dialed with mutual TLS on the
87550
+ * well-known mesh TLS port (default 6443). Idempotent: the clear connect is
87551
+ * captured once; material refresh rebinds the wrapper.
87396
87552
  */
87397
87553
  patchWriterForTlsClient() {
87398
- const material = this.meshTls;
87399
- if (material === null) return;
87554
+ if (this.meshTls === null) return;
87400
87555
  const writer = this.writer;
87401
87556
  if (writer === null || typeof writer.connect !== "function") return;
87557
+ if (!this.writerTlsPatched) {
87558
+ this.clearWriterConnect = writer.connect.bind(writer);
87559
+ this.writerTlsPatched = true;
87560
+ }
87561
+ const clearConnect = this.clearWriterConnect;
87562
+ if (clearConnect === null) return;
87402
87563
  const crl = this.crl;
87564
+ const self = this;
87403
87565
  writer.connect = (nodeID) => {
87566
+ if (!self.shouldDialPeerWithTls(nodeID)) return clearConnect(nodeID);
87567
+ const material = self.meshTls;
87568
+ if (material === null) return clearConnect(nodeID);
87404
87569
  const node = writer.transporter.getNode(nodeID);
87405
87570
  if (!node) return writer.Promise.reject(/* @__PURE__ */ new Error(`Missing node info for '${nodeID}'!`));
87406
87571
  const host = writer.transporter.getNodeAddress(node);
87407
- const port = node.port;
87572
+ const port = self.peerTlsDialPort();
87408
87573
  writer.logger.debug(`Connecting (TLS) to '${nodeID}' via ${host}:${port}`);
87409
87574
  return new writer.Promise((resolve, reject) => {
87410
87575
  const socket = tls.connect({
@@ -87433,6 +87598,11 @@ var TlsTcpTransporter = class extends TcpTransporter {
87433
87598
  if (identity) {
87434
87599
  tlsSock.meshPeerCn = identity.cn;
87435
87600
  tlsSock.meshPeerSerial = identity.serial;
87601
+ self.tlsPeers.set(identity.cn, identity.serial);
87602
+ self.tlsSockets.add(tlsSock);
87603
+ tlsSock.on("close", () => {
87604
+ self.tlsSockets.delete(tlsSock);
87605
+ });
87436
87606
  }
87437
87607
  writer.addSocket(nodeID, tlsSock, true);
87438
87608
  writer.logger.debug(`Connected successfully (TLS) to '${nodeID}'.`);
@@ -87455,11 +87625,13 @@ var TlsTcpTransporter = class extends TcpTransporter {
87455
87625
  }
87456
87626
  /**
87457
87627
  * Enable (or refresh) the TLS listener once the mesh CA / hub leaf are ready.
87458
- * Safe to call after connect — starts listening on `tlsPort` alongside clear.
87628
+ * Safe to call after connect — starts listening on `tlsPort` alongside clear
87629
+ * and patches the writer so hub→agent dials use mTLS (Release A→B).
87459
87630
  */
87460
87631
  async enableMeshTls(material) {
87461
87632
  this.meshTls = material;
87462
87633
  await this.startTlsServerIfReady();
87634
+ this.patchWriterForTlsClient();
87463
87635
  }
87464
87636
  /**
87465
87637
  * How `nodeId` reaches this transporter: `tls` once it completed a mutual-TLS
@@ -87650,7 +87822,7 @@ function isTlsSocket(socket) {
87650
87822
  * - no marker → the secret is MANDATORY (D802): the keeper asks
87651
87823
  * its owner to generate one (`generateSecret`), and
87652
87824
  * until that succeeds the gate is `off` — no node can
87653
- * authenticate, and only `transition` lets them in;
87825
+ * authenticate (mesh auth is always enforced, D821);
87654
87826
  * - marker + value → `on` — nodes prove the secret;
87655
87827
  * - marker, no answer → `unknown` — refused, retryably, and retried here.
87656
87828
  * A locked keychain or a value lost to a reset NEVER opens the gate, and
@@ -87713,7 +87885,7 @@ var ClusterSecretKeeper = class {
87713
87885
  reason: `settings unreadable: ${errText(err)}`
87714
87886
  };
87715
87887
  }
87716
- setProcessMeshAuthMode(parseMeshAuthMode(section[MESH_AUTH_MODE_FIELD]));
87888
+ setProcessMeshAuthMode("enforced");
87717
87889
  const stored = section[CLUSTER_SECRET_FIELD];
87718
87890
  if (stored === void 0 || stored === null || stored === "") return { kind: "off" };
87719
87891
  if (!isSecretMarker(stored)) return {
@@ -87781,28 +87953,48 @@ function errText(err) {
87781
87953
  //#endregion
87782
87954
  //#region src/builtins/system-config/mesh-actions.ts
87783
87955
  /**
87784
- * System → Cluster — mint a single-use mesh join token (Release A).
87956
+ * System → Cluster — mint a single-use mesh join token (Release A) and
87957
+ * agent-ui unlock tickets (D821).
87785
87958
  */
87786
- var systemConfigMeshActions = defineCustomActions({ mintJoinToken: customAction(z.object({
87787
- /** Optional pinned node id for the CSR CN. */
87788
- nodeId: z.string().min(1).optional(),
87789
- /** Override hub HTTPS base (default: local-network publicEndpoint). */
87790
- hubUrl: z.string().url().optional(),
87791
- /** Override `host:6000` clear mesh address carried in the token. */
87792
- hubMeshAddress: z.string().min(3).optional(),
87793
- /** Seconds until expiry; capped at 1 h. */
87794
- ttlSec: z.number().int().positive().max(3600).optional()
87795
- }).optional(), z.object({
87796
- token: z.string().min(1),
87797
- exp: z.number().int(),
87798
- hubUrl: z.string(),
87799
- hubMeshAddress: z.string(),
87800
- caFingerprint: z.string(),
87801
- nodeId: z.string().optional()
87802
- }), {
87803
- kind: "mutation",
87804
- auth: "admin"
87805
- }) });
87959
+ var systemConfigMeshActions = defineCustomActions({
87960
+ mintJoinToken: customAction(z.object({
87961
+ /** Optional pinned node id for the CSR CN. */
87962
+ nodeId: z.string().min(1).optional(),
87963
+ /** Override hub HTTPS base (default: local-network publicEndpoint). */
87964
+ hubUrl: z.string().url().optional(),
87965
+ /** Override `host:6000` clear mesh address carried in the token. */
87966
+ hubMeshAddress: z.string().min(3).optional(),
87967
+ /** Seconds until expiry; capped at 1 h. */
87968
+ ttlSec: z.number().int().positive().max(3600).optional()
87969
+ }).optional(), z.object({
87970
+ token: z.string().min(1),
87971
+ exp: z.number().int(),
87972
+ hubUrl: z.string(),
87973
+ hubMeshAddress: z.string(),
87974
+ caFingerprint: z.string(),
87975
+ nodeId: z.string().optional()
87976
+ }), {
87977
+ kind: "mutation",
87978
+ auth: "admin"
87979
+ }),
87980
+ /** Hub admin → short-lived ticket the agent redeems for a tab session (D821). */
87981
+ mintAgentUiUnlockTicket: customAction(z.object({
87982
+ nodeId: z.string().min(1),
87983
+ /**
87984
+ * Preferred agent dashboard base (`http://host:4444`). When set, the
87985
+ * answer includes `dashboardUrl` with `?ticket=` already attached.
87986
+ */
87987
+ dashboardBaseUrl: z.string().url().optional()
87988
+ }), z.object({
87989
+ ticket: z.string().min(1),
87990
+ exp: z.number().int(),
87991
+ nodeId: z.string().min(1),
87992
+ dashboardUrl: z.string().url().optional()
87993
+ }), {
87994
+ kind: "mutation",
87995
+ auth: "admin"
87996
+ })
87997
+ });
87806
87998
  //#endregion
87807
87999
  //#region src/builtins/system-config/system-config.addon.ts
87808
88000
  /**
@@ -87867,7 +88059,8 @@ var KEY_TO_SECTION = {
87867
88059
  trustedNetworks: "auth",
87868
88060
  [CLUSTER_SECRET_FIELD]: "cluster",
87869
88061
  [MESH_AUTH_MODE_FIELD]: "cluster",
87870
- [MESH_CLEAR_PORT_FIELD]: "cluster"
88062
+ [MESH_CLEAR_PORT_FIELD]: "cluster",
88063
+ [AGENT_DASHBOARD_ORIGINS_FIELD]: "cluster"
87871
88064
  };
87872
88065
  /** Bytes of a generated cluster secret (D802) — 256 bits, base64url (43 chars). */
87873
88066
  var GENERATED_SECRET_BYTES = 32;
@@ -87876,10 +88069,10 @@ var STATE_LABELS = {
87876
88069
  legacy: "legacy hash only — update the agent",
87877
88070
  unauthenticated: "not authenticated — enter the cluster secret in this agent"
87878
88071
  };
87879
- /** The Cluster page's live line per node (D802). */
88072
+ /** The Cluster page's live line per node (D802). Mode is always enforced (D821). */
87880
88073
  function describeMeshStatus(status) {
87881
88074
  if (status === null) return "The mesh status is available on the hub only.";
87882
- const head = status.mode === "enforced" ? "Enforced: a node that has not authenticated is refused." : "Transition: nodes without the secret are still let in (with a warning). The hub switches to Enforced by itself once every known agent has authenticated.";
88075
+ const head = "Enforced: a node that has not authenticated is refused.";
87883
88076
  if (status.nodes.length === 0) return `${head}\nNo other node is connected.`;
87884
88077
  return `${head}\n${status.nodes.map((n) => `• ${n.nodeId}: ${STATE_LABELS[n.state] ?? n.state}`).join("\n")}`;
87885
88078
  }
@@ -87910,6 +88103,9 @@ var SystemConfigAddon = class extends BaseAddon {
87910
88103
  this.ctx.logger.info("Mesh authentication is now ENFORCED", { meta: { reason } });
87911
88104
  });
87912
88105
  await this.clusterSecretKeeper.start();
88106
+ try {
88107
+ await this.writeMeshAuthMode("enforced");
88108
+ } catch {}
87913
88109
  this.meshCaKeeper = new MeshCaKeeper({
87914
88110
  secrets: this.systemSecrets(),
87915
88111
  readClusterSection: async () => await this.ctx.settings?.getSection("cluster") ?? {},
@@ -87924,7 +88120,10 @@ var SystemConfigAddon = class extends BaseAddon {
87924
88120
  this.ctx.logger.info("Initialized — exposes yml-backed sections via getGlobalSettings");
87925
88121
  return {
87926
88122
  customActions: systemConfigMeshActions,
87927
- actionHandlers: { mintJoinToken: async (input) => this.mintJoinToken(parseMintJoinTokenInput(input)) }
88123
+ actionHandlers: {
88124
+ mintJoinToken: async (input) => this.mintJoinToken(parseMintJoinTokenInput(input)),
88125
+ mintAgentUiUnlockTicket: async (input) => this.mintAgentUiUnlock(parseMintUnlockInput(input))
88126
+ }
87928
88127
  };
87929
88128
  }
87930
88129
  async onShutdown() {
@@ -87977,6 +88176,41 @@ var SystemConfigAddon = class extends BaseAddon {
87977
88176
  ...input.nodeId !== void 0 ? { nodeId: input.nodeId } : {}
87978
88177
  };
87979
88178
  }
88179
+ /** D821 — short-lived ticket for the agent's `:4444` unlock session. */
88180
+ async mintAgentUiUnlock(input) {
88181
+ const secrets = this.systemSecrets();
88182
+ if (secrets === null) throw new Error("system-config: no keychain door — cannot mint an unlock ticket");
88183
+ const entry = (await secrets.resolve([CLUSTER_SECRET_REF]))[CLUSTER_SECRET_REF];
88184
+ if (entry?.kind !== "value") throw new Error("system-config: cluster secret is not available — cannot mint an unlock ticket");
88185
+ if (input.dashboardBaseUrl !== void 0) {
88186
+ const origins = await this.readAgentDashboardOrigins();
88187
+ if (!isAllowedAgentDashboardReturnTo(input.dashboardBaseUrl, origins)) throw new Error("dashboardBaseUrl is not an allowed agent dashboard origin (:4444 or agentDashboardOrigins)");
88188
+ }
88189
+ const ticket = mintAgentUiUnlockTicket({
88190
+ secretHash: hashClusterSecret(entry.value),
88191
+ nodeId: input.nodeId
88192
+ });
88193
+ const payloadJson = Buffer.from(ticket.split(".")[0] ?? "", "base64url").toString("utf8");
88194
+ const exp = JSON.parse(payloadJson).exp ?? 0;
88195
+ const dashboardUrl = input.dashboardBaseUrl === void 0 ? void 0 : (() => {
88196
+ const u = new URL(input.dashboardBaseUrl);
88197
+ u.searchParams.set("ticket", ticket);
88198
+ return u.toString();
88199
+ })();
88200
+ return {
88201
+ ticket,
88202
+ exp,
88203
+ nodeId: input.nodeId,
88204
+ ...dashboardUrl !== void 0 ? { dashboardUrl } : {}
88205
+ };
88206
+ }
88207
+ async readAgentDashboardOrigins() {
88208
+ try {
88209
+ return parseAgentDashboardOrigins((await this.ctx.settings?.getSection("cluster"))?.[AGENT_DASHBOARD_ORIGINS_FIELD]);
88210
+ } catch {
88211
+ return [];
88212
+ }
88213
+ }
87980
88214
  async resolveHubUrl() {
87981
88215
  try {
87982
88216
  const book = await this.ctx.api?.localNetwork?.getAddresses?.query({ scheme: "https" });
@@ -88096,20 +88330,6 @@ var SystemConfigAddon = class extends BaseAddon {
88096
88330
  label: "Cluster secret",
88097
88331
  description: "Mandatory — generated by the hub at first boot and stored in the keychain. To pair an agent: Reveal and copy it here, then enter it in the agent (its status page, or the desktop setup window). Saving a new value rotates it: every agent must then be given the new one."
88098
88332
  },
88099
- {
88100
- type: "select",
88101
- key: MESH_AUTH_MODE_FIELD,
88102
- label: "Agents without the secret",
88103
- description: "Transition lets an agent that has not authenticated keep working (with a warning) while you give each agent the secret; it ends by itself once every known agent has authenticated. Enforced refuses it.",
88104
- default: "transition",
88105
- options: [{
88106
- value: "transition",
88107
- label: "Transition — allow, warn"
88108
- }, {
88109
- value: "enforced",
88110
- label: "Enforced — refuse"
88111
- }]
88112
- },
88113
88333
  {
88114
88334
  type: "select",
88115
88335
  key: MESH_CLEAR_PORT_FIELD,
@@ -88131,6 +88351,12 @@ var SystemConfigAddon = class extends BaseAddon {
88131
88351
  content: describeMeshStatus(getProcessMeshAuthStatus()),
88132
88352
  variant: "info"
88133
88353
  },
88354
+ {
88355
+ type: "string",
88356
+ key: AGENT_DASHBOARD_ORIGINS_FIELD,
88357
+ label: "Agent dashboard origins (NPM)",
88358
+ description: "Extra origins allowed for Continue-with-hub unlock redirects (comma-separated), e.g. https://agent.example.com. LAN agents on :4444 are always allowed."
88359
+ },
88134
88360
  {
88135
88361
  type: "addon-action-button",
88136
88362
  key: "mintJoinTokenAction",
@@ -88203,15 +88429,14 @@ var SystemConfigAddon = class extends BaseAddon {
88203
88429
  * The cluster secret's save path: the value goes to the keychain (owner
88204
88430
  * `system`), the row gets the marker; `''` / a view keeps. `$secretClear` is
88205
88431
  * REFUSED: the secret is mandatory (D802). A value the keychain cannot store
88206
- * is REFUSED — never written inline (D787, P5). `meshAuth` is a plain value.
88432
+ * is REFUSED — never written inline (D787, P5). Mesh auth mode is always
88433
+ * enforced (D821) — a legacy `meshAuth` in the patch is ignored.
88207
88434
  */
88208
88435
  async writeClusterSection(patch) {
88209
- const { [MESH_AUTH_MODE_FIELD]: mode, [MESH_CLEAR_PORT_FIELD]: clearPort, ...secretPatch } = patch;
88436
+ const { [MESH_AUTH_MODE_FIELD]: _legacyMode, [MESH_CLEAR_PORT_FIELD]: clearPort, [AGENT_DASHBOARD_ORIGINS_FIELD]: dashboardOrigins, ...secretPatch } = patch;
88210
88437
  if (clearPort !== void 0) await this.writeMeshClearPort(clearPort);
88211
- if (mode !== void 0) {
88212
- if (!isMeshAuthMode(mode)) throw new Error(`system-config: meshAuth must be 'transition' or 'enforced'`);
88213
- await this.writeMeshAuthMode(mode);
88214
- }
88438
+ if (dashboardOrigins !== void 0) await this.ctx.settings.setSection("cluster", { [AGENT_DASHBOARD_ORIGINS_FIELD]: typeof dashboardOrigins === "string" ? dashboardOrigins : "" });
88439
+ await this.writeMeshAuthMode("enforced");
88215
88440
  if (Object.keys(secretPatch).length === 0) return;
88216
88441
  if (isSecretClear(secretPatch["clusterSecret"])) throw new Error("The cluster secret is mandatory and cannot be cleared — save a new value to rotate it");
88217
88442
  await this.storeClusterSecret(secretPatch);
@@ -88239,16 +88464,15 @@ var SystemConfigAddon = class extends BaseAddon {
88239
88464
  await applyProcessMeshClearPort(value);
88240
88465
  this.ctx.logger.info("Mesh clear port switched", { meta: { mode: value } });
88241
88466
  }
88242
- /** `cluster.meshAuth` (D802), then republish it. */
88467
+ /** Persist + publish mesh auth mode (always `enforced` after D821). */
88243
88468
  async writeMeshAuthMode(mode) {
88244
88469
  await this.ctx.settings.setSection("cluster", { [MESH_AUTH_MODE_FIELD]: mode });
88245
- await this.clusterSecretKeeper?.reload();
88470
+ setProcessMeshAuthMode(mode);
88246
88471
  }
88247
88472
  /**
88248
88473
  * First boot, or a keychain reset that cleared the marker (D802): a fresh
88249
- * random secret, stored like an operator save. A NEW secret means every
88250
- * agent must be given it, so the mesh goes (back) to `transition`; on a hub
88251
- * with no agent yet, the hub's auto-enforce ends it at once.
88474
+ * random secret, stored like an operator save. Mesh auth stays enforced
88475
+ * (D821) — every agent must present the secret; there is no transition window.
88252
88476
  */
88253
88477
  async generateClusterSecret() {
88254
88478
  const settings = this.ctx.settings;
@@ -88263,7 +88487,8 @@ var SystemConfigAddon = class extends BaseAddon {
88263
88487
  if (existing?.kind !== "missing") throw new Error(`the keychain cannot answer for the cluster secret (${existing?.kind ?? "no answer"})`);
88264
88488
  const value = randomBytes(GENERATED_SECRET_BYTES).toString("base64url");
88265
88489
  await this.storeClusterSecret({ [CLUSTER_SECRET_FIELD]: value });
88266
- await settings.setSection("cluster", { [MESH_AUTH_MODE_FIELD]: "transition" });
88490
+ await settings.setSection("cluster", { [MESH_AUTH_MODE_FIELD]: "enforced" });
88491
+ setProcessMeshAuthMode("enforced");
88267
88492
  }
88268
88493
  async storeClusterSecret(patch) {
88269
88494
  const settings = this.ctx.settings;
@@ -88296,6 +88521,16 @@ function parseMintJoinTokenInput(input) {
88296
88521
  if (typeof ttlSec === "number") out.ttlSec = ttlSec;
88297
88522
  return out;
88298
88523
  }
88524
+ function parseMintUnlockInput(input) {
88525
+ if (input === null || typeof input !== "object") throw new Error("system-config: mintAgentUiUnlockTicket requires { nodeId }");
88526
+ const nodeId = Reflect.get(input, "nodeId");
88527
+ if (typeof nodeId !== "string" || nodeId.length === 0) throw new Error("system-config: mintAgentUiUnlockTicket requires { nodeId }");
88528
+ const dashboardBaseUrl = Reflect.get(input, "dashboardBaseUrl");
88529
+ return {
88530
+ nodeId,
88531
+ ...typeof dashboardBaseUrl === "string" ? { dashboardBaseUrl } : {}
88532
+ };
88533
+ }
88299
88534
  /** Read `exp` from an unencrypted JWT payload (no verify — already minted here). */
88300
88535
  function readJwtExp(token) {
88301
88536
  const parts = token.split(".");
@@ -88307,4 +88542,4 @@ function readJwtExp(token) {
88307
88542
  return typeof exp === "number" ? exp : 0;
88308
88543
  }
88309
88544
  //#endregion
88310
- export { loadMeshCa as A, createCidrMatcher as B, caFingerprintCompact as C, generateMeshKeyPair as D, generateMeshCa as E, parseMeshAuthMode as F, parseCidrList as H, requestProcessMeshEnforcement as I, setProcessMeshAuthMode as L, getProcessMeshAuthMode as M, getProcessMeshAuthStatus as N, issueMeshLeafForNode as O, isMeshAuthMode as P, setProcessMeshAuthStatusSource as R, caFingerprint as S, SYSTEM_CONFIG_CLUSTER_SECTION_ID, SystemConfigAddon, SystemConfigAddon as default, exportMeshPrivateKeyPem as T, readCidrSetting as U, normalizeIp as V, MeshCrl as _, setProcessMeshTlsEnabler as a, getProcessMeshCaState as b, mintMeshJoinToken as c, MESH_CLEAR_PORT_FIELD as d, applyProcessMeshClearPort as f, setProcessMeshClearPortControl as g, getProcessNodeMeshTransport as h, ServiceBroker as i, MESH_AUTH_MODE_FIELD as j, issueMeshLeafFromCsr as k, processJoinTokenJtiStore as l, decideMeshClearPortOff as m, TlsTcpTransporter as n, enrollMeshNode as o, checkProcessMeshClearPort as p, Errors as r, JoinTokenJtiStore as s, systemConfigMeshActions as t, verifyMeshJoinToken as u, processMeshCrl as v, createMeshCsrPem as w, requireProcessMeshCa as x, MeshCaKeeper as y, setProcessMeshEnforcer as z };
88545
+ export { loadMeshCa as A, MESH_AUTH_MODE_FIELD as B, caFingerprintCompact as C, generateMeshKeyPair as D, generateMeshCa as E, UnlockTicketJtiStore as F, requestProcessMeshEnforcement as G, getProcessMeshAuthStatus as H, isAllowedAgentDashboardReturnTo as I, setProcessMeshEnforcer as J, setProcessMeshAuthMode as K, mintAgentUiUnlockTicket as L, AGENT_UI_UNLOCK_DOMAIN as M, AGENT_UI_UNLOCK_TTL_MS as N, issueMeshLeafForNode as O, AGENT_UI_UNLOCK_VERSION as P, readCidrSetting as Q, parseAgentDashboardOrigins as R, caFingerprint as S, SYSTEM_CONFIG_CLUSTER_SECTION_ID, SystemConfigAddon, SystemConfigAddon as default, exportMeshPrivateKeyPem as T, isMeshAuthMode as U, getProcessMeshAuthMode as V, parseMeshAuthMode as W, normalizeIp as X, createCidrMatcher as Y, parseCidrList as Z, MeshCrl as _, setProcessMeshTlsEnabler as a, getProcessMeshCaState as b, mintMeshJoinToken as c, MESH_CLEAR_PORT_FIELD as d, applyProcessMeshClearPort as f, setProcessMeshClearPortControl as g, getProcessNodeMeshTransport as h, ServiceBroker as i, AGENT_DASHBOARD_ORIGINS_FIELD as j, issueMeshLeafFromCsr as k, processJoinTokenJtiStore as l, decideMeshClearPortOff as m, TlsTcpTransporter as n, enrollMeshNode as o, checkProcessMeshClearPort as p, setProcessMeshAuthStatusSource as q, Errors as r, JoinTokenJtiStore as s, systemConfigMeshActions as t, verifyMeshJoinToken as u, processMeshCrl as v, createMeshCsrPem as w, requireProcessMeshCa as x, MeshCaKeeper as y, verifyAgentUiUnlockTicket as z };
package/dist/index.js CHANGED
@@ -13863,8 +13863,12 @@ exports.ADMIN_TOKEN_MAX_LIFETIME_MS = require_builtins_local_auth_local_auth_add
13863
13863
  exports.ADMIN_TOKEN_PREFIX = require_builtins_local_auth_local_auth_addon.ADMIN_TOKEN_PREFIX;
13864
13864
  exports.AGENT_CAP_FWD_ACTION = require_child_cap_dispatch.AGENT_CAP_FWD_ACTION;
13865
13865
  exports.AGENT_CAP_FWD_SERVICE = require_child_cap_dispatch.AGENT_CAP_FWD_SERVICE;
13866
+ exports.AGENT_DASHBOARD_ORIGINS_FIELD = require_builtins_system_config_system_config_addon.AGENT_DASHBOARD_ORIGINS_FIELD;
13866
13867
  exports.AGENT_READINESS_SERVICE_NAME = AGENT_READINESS_SERVICE_NAME;
13867
13868
  exports.AGENT_REGISTER_NODE_ACTION = AGENT_REGISTER_NODE_ACTION;
13869
+ exports.AGENT_UI_UNLOCK_DOMAIN = require_builtins_system_config_system_config_addon.AGENT_UI_UNLOCK_DOMAIN;
13870
+ exports.AGENT_UI_UNLOCK_TTL_MS = require_builtins_system_config_system_config_addon.AGENT_UI_UNLOCK_TTL_MS;
13871
+ exports.AGENT_UI_UNLOCK_VERSION = require_builtins_system_config_system_config_addon.AGENT_UI_UNLOCK_VERSION;
13868
13872
  exports.ALL_CAPABILITY_DEFINITIONS = require_dist.ALL_CAPABILITY_DEFINITIONS;
13869
13873
  exports.ARRAY_BUFFER_CENSUS_COOLDOWN_MS = require_child_cap_dispatch.ARRAY_BUFFER_CENSUS_COOLDOWN_MS;
13870
13874
  exports.ARRAY_BUFFER_CENSUS_SUSTAIN_MS = require_child_cap_dispatch.ARRAY_BUFFER_CENSUS_SUSTAIN_MS;
@@ -14060,6 +14064,7 @@ exports.UPLOADED_CA_FILE = require_tls.UPLOADED_CA_FILE;
14060
14064
  exports.USER_MANAGEMENT_INTERNAL = require_builtins_local_auth_local_auth_addon.USER_MANAGEMENT_INTERNAL;
14061
14065
  exports.UdsLocalTransportClient = require_child_cap_dispatch.UdsLocalTransportClient;
14062
14066
  exports.UdsLocalTransportServer = require_child_cap_dispatch.UdsLocalTransportServer;
14067
+ exports.UnlockTicketJtiStore = require_builtins_system_config_system_config_addon.UnlockTicketJtiStore;
14063
14068
  exports.UserManager = require_builtins_local_auth_local_auth_addon.UserManager;
14064
14069
  exports.WinstonDestination = require_builtins_winston_logging_index.WinstonDestination$1;
14065
14070
  exports.WinstonLoggingAddon = require_builtins_winston_logging_index.WinstonLoggingAddon$1;
@@ -14292,6 +14297,7 @@ Object.defineProperty(exports, "installPythonRequirements", {
14292
14297
  });
14293
14298
  exports.ipcParentLink = require_child_cap_dispatch.ipcParentLink;
14294
14299
  exports.isAddonDeploySource = isAddonDeploySource;
14300
+ exports.isAllowedAgentDashboardReturnTo = require_builtins_system_config_system_config_addon.isAllowedAgentDashboardReturnTo;
14295
14301
  exports.isArrayBufferCensusReport = require_child_cap_dispatch.isArrayBufferCensusReport;
14296
14302
  exports.isArrayOutputSchema = require_dist.isArrayOutputSchema;
14297
14303
  exports.isClusterSecretMismatchError = require_constants.isClusterSecretMismatchError;
@@ -14314,11 +14320,13 @@ exports.loadTlsCert = require_tls.loadTlsCert;
14314
14320
  exports.localEndpointPath = require_child_cap_dispatch.localEndpointPath;
14315
14321
  exports.localProviderLink = require_child_cap_dispatch.localProviderLink;
14316
14322
  exports.meshErrorType = meshErrorType;
14323
+ exports.mintAgentUiUnlockTicket = require_builtins_system_config_system_config_addon.mintAgentUiUnlockTicket;
14317
14324
  exports.mintMeshJoinToken = require_builtins_system_config_system_config_addon.mintMeshJoinToken;
14318
14325
  exports.mountNativeCapService = require_child_cap_dispatch.mountNativeCapService;
14319
14326
  exports.nextRssBudgetState = require_child_cap_dispatch.nextRssBudgetState;
14320
14327
  exports.normalizeIp = require_builtins_system_config_system_config_addon.normalizeIp;
14321
14328
  exports.overlayGetStatus = overlayGetStatus;
14329
+ exports.parseAgentDashboardOrigins = require_builtins_system_config_system_config_addon.parseAgentDashboardOrigins;
14322
14330
  exports.parseCapAction = require_child_cap_dispatch.parseCapAction;
14323
14331
  exports.parseCidrList = require_builtins_system_config_system_config_addon.parseCidrList;
14324
14332
  exports.parseMeshAuthMode = require_builtins_system_config_system_config_addon.parseMeshAuthMode;
@@ -14404,6 +14412,7 @@ exports.subscribePassthrough = require_child_cap_dispatch.subscribePassthrough;
14404
14412
  exports.udsChildLogToWorkerEntry = require_child_cap_dispatch.udsChildLogToWorkerEntry;
14405
14413
  exports.validateProviderRegistrations = require_child_cap_dispatch.validateProviderRegistrations;
14406
14414
  exports.validateUploadedTls = require_tls.validateUploadedTls;
14415
+ exports.verifyAgentUiUnlockTicket = require_builtins_system_config_system_config_addon.verifyAgentUiUnlockTicket;
14407
14416
  exports.verifyMeshJoinToken = require_builtins_system_config_system_config_addon.verifyMeshJoinToken;
14408
14417
  exports.waitUntilReady = waitUntilReady;
14409
14418
  exports.writeExtraSans = require_tls.writeExtraSans;
package/dist/index.mjs CHANGED
@@ -27,7 +27,7 @@ import { i as stripForwardedCaller, n as HUB_CAP_FWD_SERVICE, r as createHubCapF
27
27
  import { StorageOrchestratorAddon, n as buildStorageLocationRegistry, t as StorageOrchestratorService } from "./builtins/storage-orchestrator/storage-orchestrator.addon.mjs";
28
28
  import "./builtins/storage-orchestrator/index.mjs";
29
29
  import { _ as clusterSecretMatches, a as MESH_CA_FIELD, b as isClusterSecretMismatchError, d as CLUSTER_SECRET_MISMATCH_TYPE, f as CLUSTER_SECRET_REF, g as checkClusterSecret, h as CLUSTER_SECRET_UNAVAILABLE_TYPE, m as CLUSTER_SECRET_SETTINGS_KEY, o as MESH_CA_KEY_REF, p as CLUSTER_SECRET_REJECTED_EXIT_CODE, r as DEFAULT_HUB_TLS_TCP_PORT, s as MESH_CA_SETTINGS_KEY, v as getProcessClusterSecretGate, x as setProcessClusterSecretGate, y as hashClusterSecret } from "./constants-D5z4EwY8.mjs";
30
- import { A as loadMeshCa, B as createCidrMatcher, C as caFingerprintCompact, D as generateMeshKeyPair, E as generateMeshCa, F as parseMeshAuthMode, H as parseCidrList, I as requestProcessMeshEnforcement, L as setProcessMeshAuthMode, M as getProcessMeshAuthMode, N as getProcessMeshAuthStatus, O as issueMeshLeafForNode, P as isMeshAuthMode, R as setProcessMeshAuthStatusSource, S as caFingerprint, SystemConfigAddon, T as exportMeshPrivateKeyPem, U as readCidrSetting, V as normalizeIp, _ as MeshCrl, a as setProcessMeshTlsEnabler, b as getProcessMeshCaState, c as mintMeshJoinToken, d as MESH_CLEAR_PORT_FIELD, f as applyProcessMeshClearPort, g as setProcessMeshClearPortControl, h as getProcessNodeMeshTransport, i as ServiceBroker, j as MESH_AUTH_MODE_FIELD, k as issueMeshLeafFromCsr, l as processJoinTokenJtiStore, m as decideMeshClearPortOff, n as TlsTcpTransporter, o as enrollMeshNode, p as checkProcessMeshClearPort, r as Errors, s as JoinTokenJtiStore, u as verifyMeshJoinToken, v as processMeshCrl, w as createMeshCsrPem, x as requireProcessMeshCa, y as MeshCaKeeper, z as setProcessMeshEnforcer } from "./builtins/system-config/system-config.addon.mjs";
30
+ import { A as loadMeshCa, B as MESH_AUTH_MODE_FIELD, C as caFingerprintCompact, D as generateMeshKeyPair, E as generateMeshCa, F as UnlockTicketJtiStore, G as requestProcessMeshEnforcement, H as getProcessMeshAuthStatus, I as isAllowedAgentDashboardReturnTo, J as setProcessMeshEnforcer, K as setProcessMeshAuthMode, L as mintAgentUiUnlockTicket, M as AGENT_UI_UNLOCK_DOMAIN, N as AGENT_UI_UNLOCK_TTL_MS, O as issueMeshLeafForNode, P as AGENT_UI_UNLOCK_VERSION, Q as readCidrSetting, R as parseAgentDashboardOrigins, S as caFingerprint, SystemConfigAddon, T as exportMeshPrivateKeyPem, U as isMeshAuthMode, V as getProcessMeshAuthMode, W as parseMeshAuthMode, X as normalizeIp, Y as createCidrMatcher, Z as parseCidrList, _ as MeshCrl, a as setProcessMeshTlsEnabler, b as getProcessMeshCaState, c as mintMeshJoinToken, d as MESH_CLEAR_PORT_FIELD, f as applyProcessMeshClearPort, g as setProcessMeshClearPortControl, h as getProcessNodeMeshTransport, i as ServiceBroker, j as AGENT_DASHBOARD_ORIGINS_FIELD, k as issueMeshLeafFromCsr, l as processJoinTokenJtiStore, m as decideMeshClearPortOff, n as TlsTcpTransporter, o as enrollMeshNode, p as checkProcessMeshClearPort, q as setProcessMeshAuthStatusSource, r as Errors, s as JoinTokenJtiStore, u as verifyMeshJoinToken, v as processMeshCrl, w as createMeshCsrPem, x as requireProcessMeshCa, y as MeshCaKeeper, z as verifyAgentUiUnlockTicket } from "./builtins/system-config/system-config.addon.mjs";
31
31
  import "./builtins/system-config/index.mjs";
32
32
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
33
33
  import { C as resolveFormatRevision, S as isModelDownloaded, _ as downloadModel, a as createFileDataPlaneHandler, b as getModelFilePath, c as parseRangeHeader, d as ModelDownloadService, g as downloadFile, h as deleteModelFromDisk, i as startEventLoopStallMonitor, l as parseTokenizedUrl, m as collectModelFiles, n as STALL_TICK_MS, o as contentTypeFor, p as adoptModelRevisions, r as attributeStall, s as createAuthenticatedFileServer, t as STALL_REPORT_MS, u as resolveFilePath, v as ensureModel, w as revisionWeightUrl, y as fetchJson } from "./event-loop-stall-monitor-BtK_0Pjc.mjs";
@@ -13856,4 +13856,4 @@ var LifecycleJobEngine = class {
13856
13856
  }
13857
13857
  };
13858
13858
  //#endregion
13859
- export { ADMIN_TOKEN_MAX_LIFETIME_MS, ADMIN_TOKEN_PREFIX, AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_READINESS_SERVICE_NAME, AGENT_REGISTER_NODE_ACTION, ALL_CAPABILITY_DEFINITIONS, ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ARRAY_BUFFER_CENSUS_THRESHOLD_MB, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AdminTokenManager, AgentMeshAuthenticator, AlertCenterAddon, ApiKeyManager, AuthAuditLog, AuthManager, BackupDecryptError, BackupKeyFormatError, BackupKeyMismatchError, BackupKeyRequiredError, CAP_ACTION_OVERFLOW_LABEL, CAP_ACTION_UNLABELLED, CAP_METHOD_NOT_IMPLEMENTED, CA_COMMON_NAME, CA_VALIDITY_DAYS, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REF, CLUSTER_SECRET_REJECTED_EXIT_CODE, CLUSTER_SECRET_SETTINGS_KEY, CLUSTER_SECRET_UNAVAILABLE_TYPE, CORE_CAP_SERVICE_NAME, CalendarsAddon, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ComposerAddon, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DECISIVE_HEAP_SPACES, DEFAULT_DATA_PATH, DEFAULT_HUB_TLS_TCP_PORT, DEFAULT_LAN_HTTP_PORT, DEFAULT_LOG_LEVEL, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EMPTY_CAP_ACTION_READING, EMPTY_SOCKET_DIRECTION, EMPTY_SOCKET_PLANE_BASELINE, EVENT_PLANE_TOP_N, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FIRST_BOOT_ADMIN_PASSWORD, FIRST_BOOT_ADMIN_USERNAME, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, GET_STATUS_METHOD, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_SPACE_REPORT_MIN_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HUB_MAIN_HEAP_WATCH_LABEL, HUB_MAIN_RSS_BUDGET_MB, HUB_RSS_BUDGET_ENV, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JWT_SIGNING_KEY_REF, JobJournal, JoinTokenJtiStore, JwtSigningKeyUnavailableError, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LoggingGate, LoginSessionManager, LokiDestination, LokiLoggingAddon, MAX_CAP_ACTIONS_PER_PEER, MAX_LEAF_VALIDITY_DAYS, MESH_ACTION_FORBIDDEN_TYPE, MESH_AUTH_MODE_FIELD, MESH_AUTO_ENFORCE_GRACE_MS, MESH_CA_FIELD, MESH_CA_KEY_REF, MESH_CA_SETTINGS_KEY, MESH_CLEAR_PORT_FIELD, MESH_JOIN_AUTHENTICATE_ACTION, MESH_JOIN_CHALLENGE_ACTION, MESH_JOIN_CHALLENGE_INVALID_TYPE, MESH_JOIN_CHALLENGE_TTL_MS, MESH_JOIN_PROTOCOL, MESH_NODE_UNAUTHENTICATED_TYPE, MESH_QUEUE_TOP_N, METHOD_ACCESS_MAP, MeshAuthenticator, MeshCaKeeper, MeshCrl, MeshJoinClient, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, OUTBOUND_QUEUE_COOLDOWN_MS, OUTBOUND_QUEUE_SUSTAIN_MS, OUTBOUND_QUEUE_THRESHOLD_BYTES, PARENT_ROUTED_PROVIDER_ADDON_ID, PYTHON_VERSION, PeerAnsweredError, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, REFRESH_TOKEN_PREFIX, RESTART_MARKER_FILE, RSS_BUDGET_REANNOUNCE_MIN_MS, RSS_BUDGET_RELEASE_RATIO, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNNER_RSS_BUDGET_ENV, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, SERVER_AUTH_OID, SOCKET_PLANE_TOP_N, SOCKET_QUEUE_TOP_N, STALL_REPORT_MS, STALL_TICK_MS, STORE_READABLE_BOOTSTRAP_KEYS, SYSTEM_SECRET_OWNER, ScopedLogger, ScopedTokenManager, SettingsReadUnavailableError, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemBackupService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, TlsTcpTransporter, ToastService, UDS_NO_ROUTE_PREFIX, UNCLAIMED, UPLOADED_CA_FILE, USER_MANAGEMENT_INTERNAL, UdsLocalTransportClient, UdsLocalTransportServer, UserManager, WinstonDestination, WinstonLoggingAddon, ZERO_LOOP_DELAY, __resetCapUsageRegistryForTests, __resetLoggingGateForTests, adaptBrokerToCluster, addonSettingsCapability, adoptModelRevisions, afterWorkerOnlineAnnounce, allFamiliesListenHost, answerClaimedGetStatus, applyCertificateToListener, applyLanHttp, applyProcessMeshClearPort, attachUserManagementInternal, attributeStall, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildNpmChildEnv, buildStorageLocationRegistry, builderMountedCapNames, caFingerprint, caFingerprintCompact, callRegisterNodeWithRetry, callWithServiceDiscovery, canServeDataPlane, capActionLabel, capActionName, capActionSuffix, capBareAction, capServiceName, checkClusterSecret, checkProcessMeshClearPort, classifyAddonDir, classifyCapRoute, clearHttpsListener, clearPendingRestart, clearPlatformKeychainKey, closeLanHttp, clusterEventTopic, clusterSecretMatches, collectCertIdentity, collectModelFiles, computeHubJoinProof, computeNodeJoinProof, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonPeerBytesFacility, createAddonService, createArrayBufferCensusGate, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCapActionCensus, createCidrMatcher, createCoreCapService, createDeferredHeapWatchSink, createDoorSettingsView, createEventPlaneMeter, createEventPlaneReader, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createInspectorArrayBufferCensus, createKernelHwAccel, createLocalTransport, createLoopDelayMeter, createMeshAccessMiddleware, createMeshCsrPem, createMeshQueueReader, createOutboundQueueGate, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createSocketDirectionCounters, createSocketPlaneMeter, createSocketPlaneReader, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, decideMeshAutoEnforce, decideMeshClearPortOff, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, describeRss, detectWorkspacePackagesDir, deviceCapResolverLink, deviceOfGetStatus, diffCapActionCensus, diffEventPlane, diffSocketPlane, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, emitHeapDiagnosticReport, encodeFrame, enrollMeshNode, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, exportMeshPrivateKeyPem, fetchJson, findInPath, formatArrayBufferCensus, formatEventPlane, formatHeapSpaces, formatLogLine, formatMeshQueue, formatOutboundQueueVerdict, formatSocketPlane, generateBackupKeyPair, generateMeshCa, generateMeshKeyPair, getBrokerEventBus, getBrokerTlsTransporter, getCapUsageRegistry, getFfmpegDownloadUrl, getLoggingGate, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPlatformKeychainKey, getProcessClusterSecretGate, getProcessJwtSigningKeyState, getProcessMeshAuthMode, getProcessMeshAuthStatus, getProcessMeshCaState, getProcessNodeMeshTransport, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getUserManagementInternal, getWorkerDeviceRegistry, hasDotNode, hashClusterSecret, heapSpaceField, hostNodeIdOf, hubMainRssBudget, installManifestNativeDeps, installManifestPythonDeps, installManifestSystemDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcParentLink, isAddonDeploySource, isArrayBufferCensusReport, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isCredentialKeyName, isInfraCapability, isMeshAuthMode, isModelDownloaded, isOwnChildNodeId, isRemoteForbiddenAction, isRemoteForbiddenOnAgent, isSettingsReadUnavailable, isSourceNewer, isolatedBuiltinPhase, issueMeshLeafForNode, issueMeshLeafFromCsr, leafFingerprintOf, loadMeshCa, loadTlsCert, localEndpointPath, localProviderLink, meshErrorType, mintMeshJoinToken, mountNativeCapService, nextRssBudgetState, normalizeIp, overlayGetStatus, parseCapAction, parseCidrList, parseMeshAuthMode, parseRangeHeader, parseRssBudgetMb, parseTokenExpiry, parseTokenizedUrl, partitionIsolatedBuiltinIds, prepareBootTls, prepareRestoreArchive, processJoinTokenJtiStore, processJwtSigningKey, processMeshCrl, proxyToUpstream, quarantineAddonResidue, readBackupEncryptionHeader, readCidrSetting, readExtraSans, readHeapSpaces, readLanHttpState, readPendingRestart, readSocketQueues, readTlsAccessStatus, readTlsMode, readinessKey, reclaimIntervalMs, recordSocketFrame, redactLogEntry, redactLogMeta, redactLogText, regenerateCertificate, registerEventBusService, registerHttpsListener, registerLanHttpHandler, reissueTlsLeaf, reloadHttpsListener, requestProcessMeshEnforcement, requireProcessMeshCa, resolveFilePath, resolveFormatRevision, resolveHwAccel, resolveNpmInvocation, revertToGeneratedCertificate, revisionWeightUrl, runHubAddonBoot, runNpm, sampleSocketDirection, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, selectReportedSpaces, serializeTypedArrays, servedHttpsLeafFingerprint, setHubConnected, setNodeEventInterest, setPlatformKeychainKey, setProcessClusterSecretGate, setProcessMeshAuthMode, setProcessMeshAuthStatusSource, setProcessMeshClearPortControl, setProcessMeshEnforcer, setProcessMeshTlsEnabler, setWrapperActive, shouldReclaim, signalAllRunnerGroups, socketDirectionBytes, socketDirectionMessages, splitPemCertificates, stampCallerAddonId, startEventLoopStallMonitor, startHeapWatch, startRunnerHeapWatch, staticJwtSigningKey, storeMayAnswer, storeUploadedCertificate, strandedMb, stripCamstackDeps, stripForgedIdentity, stripForwardedCaller, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, validateUploadedTls, verifyMeshJoinToken, waitUntilReady, writeExtraSans, writePendingRestart, writeTlsMode };
13859
+ export { ADMIN_TOKEN_MAX_LIFETIME_MS, ADMIN_TOKEN_PREFIX, AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_DASHBOARD_ORIGINS_FIELD, AGENT_READINESS_SERVICE_NAME, AGENT_REGISTER_NODE_ACTION, AGENT_UI_UNLOCK_DOMAIN, AGENT_UI_UNLOCK_TTL_MS, AGENT_UI_UNLOCK_VERSION, ALL_CAPABILITY_DEFINITIONS, ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ARRAY_BUFFER_CENSUS_THRESHOLD_MB, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AdminTokenManager, AgentMeshAuthenticator, AlertCenterAddon, ApiKeyManager, AuthAuditLog, AuthManager, BackupDecryptError, BackupKeyFormatError, BackupKeyMismatchError, BackupKeyRequiredError, CAP_ACTION_OVERFLOW_LABEL, CAP_ACTION_UNLABELLED, CAP_METHOD_NOT_IMPLEMENTED, CA_COMMON_NAME, CA_VALIDITY_DAYS, CLUSTER_SECRET_MISMATCH_TYPE, CLUSTER_SECRET_REF, CLUSTER_SECRET_REJECTED_EXIT_CODE, CLUSTER_SECRET_SETTINGS_KEY, CLUSTER_SECRET_UNAVAILABLE_TYPE, CORE_CAP_SERVICE_NAME, CalendarsAddon, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ComposerAddon, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DECISIVE_HEAP_SPACES, DEFAULT_DATA_PATH, DEFAULT_HUB_TLS_TCP_PORT, DEFAULT_LAN_HTTP_PORT, DEFAULT_LOG_LEVEL, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceManagerAddon, DeviceRegistry, DeviceStore, EMPTY_CAP_ACTION_READING, EMPTY_SOCKET_DIRECTION, EMPTY_SOCKET_PLANE_BASELINE, EVENT_PLANE_TOP_N, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FIRST_BOOT_ADMIN_PASSWORD, FIRST_BOOT_ADMIN_USERNAME, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, GET_STATUS_METHOD, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_SPACE_REPORT_MIN_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HUB_MAIN_HEAP_WATCH_LABEL, HUB_MAIN_RSS_BUDGET_MB, HUB_RSS_BUDGET_ENV, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, INFRA_CAPABILITIES, IntegrationRegistry, JWT_SIGNING_KEY_REF, JobJournal, JoinTokenJtiStore, JwtSigningKeyUnavailableError, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LoggingGate, LoginSessionManager, LokiDestination, LokiLoggingAddon, MAX_CAP_ACTIONS_PER_PEER, MAX_LEAF_VALIDITY_DAYS, MESH_ACTION_FORBIDDEN_TYPE, MESH_AUTH_MODE_FIELD, MESH_AUTO_ENFORCE_GRACE_MS, MESH_CA_FIELD, MESH_CA_KEY_REF, MESH_CA_SETTINGS_KEY, MESH_CLEAR_PORT_FIELD, MESH_JOIN_AUTHENTICATE_ACTION, MESH_JOIN_CHALLENGE_ACTION, MESH_JOIN_CHALLENGE_INVALID_TYPE, MESH_JOIN_CHALLENGE_TTL_MS, MESH_JOIN_PROTOCOL, MESH_NODE_UNAUTHENTICATED_TYPE, MESH_QUEUE_TOP_N, METHOD_ACCESS_MAP, MeshAuthenticator, MeshCaKeeper, MeshCrl, MeshJoinClient, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, OUTBOUND_QUEUE_COOLDOWN_MS, OUTBOUND_QUEUE_SUSTAIN_MS, OUTBOUND_QUEUE_THRESHOLD_BYTES, PARENT_ROUTED_PROVIDER_ADDON_ID, PYTHON_VERSION, PeerAnsweredError, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, REFRESH_TOKEN_PREFIX, RESTART_MARKER_FILE, RSS_BUDGET_REANNOUNCE_MIN_MS, RSS_BUDGET_RELEASE_RATIO, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNNER_RSS_BUDGET_ENV, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, SERVER_AUTH_OID, SOCKET_PLANE_TOP_N, SOCKET_QUEUE_TOP_N, STALL_REPORT_MS, STALL_TICK_MS, STORE_READABLE_BOOTSTRAP_KEYS, SYSTEM_SECRET_OWNER, ScopedLogger, ScopedTokenManager, SettingsReadUnavailableError, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemBackupService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, TlsTcpTransporter, ToastService, UDS_NO_ROUTE_PREFIX, UNCLAIMED, UPLOADED_CA_FILE, USER_MANAGEMENT_INTERNAL, UdsLocalTransportClient, UdsLocalTransportServer, UnlockTicketJtiStore, UserManager, WinstonDestination, WinstonLoggingAddon, ZERO_LOOP_DELAY, __resetCapUsageRegistryForTests, __resetLoggingGateForTests, adaptBrokerToCluster, addonSettingsCapability, adoptModelRevisions, afterWorkerOnlineAnnounce, allFamiliesListenHost, answerClaimedGetStatus, applyCertificateToListener, applyLanHttp, applyProcessMeshClearPort, attachUserManagementInternal, attributeStall, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildNpmChildEnv, buildStorageLocationRegistry, builderMountedCapNames, caFingerprint, caFingerprintCompact, callRegisterNodeWithRetry, callWithServiceDiscovery, canServeDataPlane, capActionLabel, capActionName, capActionSuffix, capBareAction, capServiceName, checkClusterSecret, checkProcessMeshClearPort, classifyAddonDir, classifyCapRoute, clearHttpsListener, clearPendingRestart, clearPlatformKeychainKey, closeLanHttp, clusterEventTopic, clusterSecretMatches, collectCertIdentity, collectModelFiles, computeHubJoinProof, computeNodeJoinProof, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonPeerBytesFacility, createAddonService, createArrayBufferCensusGate, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCapActionCensus, createCidrMatcher, createCoreCapService, createDeferredHeapWatchSink, createDoorSettingsView, createEventPlaneMeter, createEventPlaneReader, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createInspectorArrayBufferCensus, createKernelHwAccel, createLocalTransport, createLoopDelayMeter, createMeshAccessMiddleware, createMeshCsrPem, createMeshQueueReader, createOutboundQueueGate, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createSocketDirectionCounters, createSocketPlaneMeter, createSocketPlaneReader, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, decideMeshAutoEnforce, decideMeshClearPortOff, deleteModelFromDisk, deriveAgentListenPort, describeProviderKindDrift, describeRss, detectWorkspacePackagesDir, deviceCapResolverLink, deviceOfGetStatus, diffCapActionCensus, diffEventPlane, diffSocketPlane, downloadBinary, downloadFile, downloadModel, emitDownForOwnedCaps, emitHeapDiagnosticReport, encodeFrame, enrollMeshNode, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, exportMeshPrivateKeyPem, fetchJson, findInPath, formatArrayBufferCensus, formatEventPlane, formatHeapSpaces, formatLogLine, formatMeshQueue, formatOutboundQueueVerdict, formatSocketPlane, generateBackupKeyPair, generateMeshCa, generateMeshKeyPair, getBrokerEventBus, getBrokerTlsTransporter, getCapUsageRegistry, getFfmpegDownloadUrl, getLoggingGate, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPlatformKeychainKey, getProcessClusterSecretGate, getProcessJwtSigningKeyState, getProcessMeshAuthMode, getProcessMeshAuthStatus, getProcessMeshCaState, getProcessNodeMeshTransport, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getUserManagementInternal, getWorkerDeviceRegistry, hasDotNode, hashClusterSecret, heapSpaceField, hostNodeIdOf, hubMainRssBudget, installManifestNativeDeps, installManifestPythonDeps, installManifestSystemDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcParentLink, isAddonDeploySource, isAllowedAgentDashboardReturnTo, isArrayBufferCensusReport, isArrayOutputSchema, isClusterSecretMismatchError, isCollectionArrayMethod, isCredentialKeyName, isInfraCapability, isMeshAuthMode, isModelDownloaded, isOwnChildNodeId, isRemoteForbiddenAction, isRemoteForbiddenOnAgent, isSettingsReadUnavailable, isSourceNewer, isolatedBuiltinPhase, issueMeshLeafForNode, issueMeshLeafFromCsr, leafFingerprintOf, loadMeshCa, loadTlsCert, localEndpointPath, localProviderLink, meshErrorType, mintAgentUiUnlockTicket, mintMeshJoinToken, mountNativeCapService, nextRssBudgetState, normalizeIp, overlayGetStatus, parseAgentDashboardOrigins, parseCapAction, parseCidrList, parseMeshAuthMode, parseRangeHeader, parseRssBudgetMb, parseTokenExpiry, parseTokenizedUrl, partitionIsolatedBuiltinIds, prepareBootTls, prepareRestoreArchive, processJoinTokenJtiStore, processJwtSigningKey, processMeshCrl, proxyToUpstream, quarantineAddonResidue, readBackupEncryptionHeader, readCidrSetting, readExtraSans, readHeapSpaces, readLanHttpState, readPendingRestart, readSocketQueues, readTlsAccessStatus, readTlsMode, readinessKey, reclaimIntervalMs, recordSocketFrame, redactLogEntry, redactLogMeta, redactLogText, regenerateCertificate, registerEventBusService, registerHttpsListener, registerLanHttpHandler, reissueTlsLeaf, reloadHttpsListener, requestProcessMeshEnforcement, requireProcessMeshCa, resolveFilePath, resolveFormatRevision, resolveHwAccel, resolveNpmInvocation, revertToGeneratedCertificate, revisionWeightUrl, runHubAddonBoot, runNpm, sampleSocketDirection, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, selectReportedSpaces, serializeTypedArrays, servedHttpsLeafFingerprint, setHubConnected, setNodeEventInterest, setPlatformKeychainKey, setProcessClusterSecretGate, setProcessMeshAuthMode, setProcessMeshAuthStatusSource, setProcessMeshClearPortControl, setProcessMeshEnforcer, setProcessMeshTlsEnabler, setWrapperActive, shouldReclaim, signalAllRunnerGroups, socketDirectionBytes, socketDirectionMessages, splitPemCertificates, stampCallerAddonId, startEventLoopStallMonitor, startHeapWatch, startRunnerHeapWatch, staticJwtSigningKey, storeMayAnswer, storeUploadedCertificate, strandedMb, stripCamstackDeps, stripForgedIdentity, stripForwardedCaller, subscribePassthrough, udsChildLogToWorkerEntry, validateProviderRegistrations, validateUploadedTls, verifyAgentUiUnlockTicket, verifyMeshJoinToken, waitUntilReady, writeExtraSans, writePendingRestart, writeTlsMode };