@camstack/system 1.2.455 → 1.2.457

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.
Files changed (133) hide show
  1. package/dist/addon-runner.js +96 -10
  2. package/dist/addon-runner.mjs +96 -10
  3. package/dist/{agent-https-CLWrOO3o.mjs → agent-https-CK9Z4sSR.mjs} +32 -5
  4. package/dist/{agent-https-CCvlRQKV.js → agent-https-CoyOZ3pC.js} +37 -4
  5. package/dist/auth/auth-manager.d.ts +9 -0
  6. package/dist/auth/legacy-token-tables.d.ts +16 -0
  7. package/dist/auth/user-management-internal.d.ts +9 -28
  8. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  9. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  10. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  11. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  12. package/dist/builtins/alerts/alerts.addon.js +2 -2
  13. package/dist/builtins/alerts/alerts.addon.mjs +2 -2
  14. package/dist/builtins/autotrack/index.js +1 -1
  15. package/dist/builtins/autotrack/index.mjs +1 -1
  16. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  17. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  18. package/dist/builtins/calendars/calendars.addon.js +1 -1
  19. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  20. package/dist/builtins/camera-grid/index.js +1 -1
  21. package/dist/builtins/camera-grid/index.mjs +1 -1
  22. package/dist/builtins/composer/composer.addon.js +2 -2
  23. package/dist/builtins/composer/composer.addon.mjs +2 -2
  24. package/dist/builtins/console-logging/console-destination.d.ts +1 -2
  25. package/dist/builtins/console-logging/index.js +1 -4
  26. package/dist/builtins/console-logging/index.mjs +1 -4
  27. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  28. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  29. package/dist/builtins/device-history/capture/capture-engine.d.ts +6 -0
  30. package/dist/builtins/device-history/device-history.addon.js +441 -83
  31. package/dist/builtins/device-history/device-history.addon.mjs +441 -83
  32. package/dist/builtins/device-history/query/history-query.d.ts +35 -9
  33. package/dist/builtins/device-history/query/point-shape.d.ts +33 -0
  34. package/dist/builtins/device-history/retention/retention.d.ts +1 -1
  35. package/dist/builtins/device-history/rollup/rollup-engine.d.ts +2 -0
  36. package/dist/builtins/device-history/rollup/rollup-math.d.ts +6 -0
  37. package/dist/builtins/device-history/store/history-store.d.ts +7 -0
  38. package/dist/builtins/device-history/store/series-registry.d.ts +26 -1
  39. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  40. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  41. package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +1 -2
  42. package/dist/builtins/hub-forwarder/index.js +1 -4
  43. package/dist/builtins/hub-forwarder/index.mjs +1 -4
  44. package/dist/builtins/keychain/index.js +4 -4
  45. package/dist/builtins/keychain/index.mjs +4 -4
  46. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  47. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  48. package/dist/builtins/local-auth/auth-schema.d.ts +4 -7
  49. package/dist/builtins/local-auth/local-auth.addon.d.ts +7 -8
  50. package/dist/builtins/local-auth/local-auth.addon.js +1086 -1329
  51. package/dist/builtins/local-auth/local-auth.addon.mjs +1085 -1326
  52. package/dist/builtins/local-auth/preferences-record-kinds.d.ts +27 -0
  53. package/dist/builtins/local-auth/record-kinds.d.ts +4 -3
  54. package/dist/builtins/local-auth/user-preferences-store.d.ts +56 -0
  55. package/dist/builtins/local-network/local-network.addon.d.ts +8 -0
  56. package/dist/builtins/local-network/local-network.addon.js +30 -5
  57. package/dist/builtins/local-network/local-network.addon.mjs +30 -5
  58. package/dist/builtins/loki-logging/index.js +323 -7
  59. package/dist/builtins/loki-logging/index.mjs +323 -7
  60. package/dist/builtins/loki-logging/loki-destination.d.ts +20 -3
  61. package/dist/builtins/loki-logging/loki-read.d.ts +51 -0
  62. package/dist/builtins/native-metrics/native-metrics.addon.js +290 -112
  63. package/dist/builtins/native-metrics/native-metrics.addon.mjs +290 -112
  64. package/dist/builtins/native-metrics/node-metrics-history-recorder.d.ts +106 -35
  65. package/dist/builtins/platform-probe/index.js +1 -1
  66. package/dist/builtins/platform-probe/index.mjs +1 -1
  67. package/dist/builtins/record-entries/index.js +1 -1
  68. package/dist/builtins/record-entries/index.mjs +1 -1
  69. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  70. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  71. package/dist/builtins/snapshot/index.js +1 -1
  72. package/dist/builtins/snapshot/index.mjs +1 -1
  73. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  74. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  75. package/dist/builtins/sqlite-storage/index.js +1 -1
  76. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  77. package/dist/builtins/sqlite-storage/records/records-engine-types.d.ts +1 -0
  78. package/dist/builtins/sqlite-storage/records/records-provider.d.ts +13 -0
  79. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +52 -6
  80. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +52 -6
  81. package/dist/builtins/storage-orchestrator/location-history-recorder.d.ts +76 -0
  82. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +9 -0
  83. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +144 -1
  84. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +144 -1
  85. package/dist/builtins/system-config/system-config.addon.js +3 -3
  86. package/dist/builtins/system-config/system-config.addon.mjs +3 -3
  87. package/dist/builtins/winston-logging/index.js +165 -3
  88. package/dist/builtins/winston-logging/index.mjs +165 -3
  89. package/dist/builtins/winston-logging/log-file-cursor.d.ts +12 -0
  90. package/dist/builtins/winston-logging/log-file-index-store.d.ts +11 -0
  91. package/dist/builtins/winston-logging/log-file-index.d.ts +77 -0
  92. package/dist/builtins/winston-logging/log-file-read-client.d.ts +44 -0
  93. package/dist/builtins/winston-logging/log-file-read-protocol.d.ts +41 -0
  94. package/dist/builtins/winston-logging/log-file-read-worker.d.ts +1 -0
  95. package/dist/builtins/winston-logging/log-file-reader.d.ts +51 -0
  96. package/dist/builtins/winston-logging/winston-destination.d.ts +20 -2
  97. package/dist/{composition-sources-CSzD5_qX.mjs → composition-sources-B_jeZDRJ.mjs} +1 -1
  98. package/dist/{composition-sources-BxUkLNSo.js → composition-sources-qKyvMAvc.js} +1 -1
  99. package/dist/{constants-DruwCkfp.js → constants-B_X9cWEK.js} +1 -1
  100. package/dist/{constants-DOlYt1t1.mjs → constants-cxKcZRMi.mjs} +1 -1
  101. package/dist/{device-ca-uFbTyY_o.mjs → device-ca-BB6nHAL5.mjs} +1 -1
  102. package/dist/{device-ca-QPBgfqVY.js → device-ca-CVK3YcR_.js} +1 -1
  103. package/dist/{dist-DjQ8C-ku.js → dist-C89nqNnn.js} +721 -154
  104. package/dist/{dist-BpSENkRJ.mjs → dist-Dhux90yB.mjs} +668 -155
  105. package/dist/file-host-worker.js +1 -1
  106. package/dist/file-host-worker.mjs +1 -1
  107. package/dist/{hub-mdns-ciao-DlgkFJVY.mjs → hub-mdns-ciao-B8olZqqd.mjs} +20 -13
  108. package/dist/{hub-mdns-ciao-Bkrvgnma.js → hub-mdns-ciao-DB1Y9agt.js} +20 -13
  109. package/dist/index.d.ts +3 -4
  110. package/dist/index.js +145 -24
  111. package/dist/index.mjs +138 -22
  112. package/dist/kernel/config-schema.d.ts +5 -0
  113. package/dist/kernel/moleculer/accessory-prune-gate.d.ts +55 -0
  114. package/dist/log-file-read-protocol-B7M3X3bT.mjs +785 -0
  115. package/dist/log-file-read-protocol-D0WcLbIV.js +817 -0
  116. package/dist/log-file-read-worker.js +64 -0
  117. package/dist/log-file-read-worker.mjs +64 -0
  118. package/dist/log-read-filter-Bi066jwU.js +134 -0
  119. package/dist/log-read-filter-D7Ev3zm-.mjs +93 -0
  120. package/dist/logging/log-manager.d.ts +10 -6
  121. package/dist/logging/log-read-filter.d.ts +43 -0
  122. package/dist/{phase6-declare-gate-DrmTtz7F.js → phase6-declare-gate-BO-_jLh_.js} +1 -1
  123. package/dist/{phase6-declare-gate-JQUqgQgq.mjs → phase6-declare-gate-x9ZCbQJP.mjs} +1 -1
  124. package/dist/{restore-archive-4OP0EYg6.js → restore-archive-4DOUR5Gu.js} +1 -1
  125. package/dist/{restore-archive-YFSJRtKy.mjs → restore-archive-DyOaPeAr.mjs} +1 -1
  126. package/dist/tls/cert-issue.d.ts +16 -1
  127. package/dist/tls/cert-manager.d.ts +6 -0
  128. package/dist/tls/index.d.ts +1 -1
  129. package/dist/{wal-maintenance-TyuOEVy1.mjs → wal-maintenance-BMiX6UIa.mjs} +0 -0
  130. package/dist/{wal-maintenance-Bl0ZKjVR.js → wal-maintenance-DVN-DiVP.js} +0 -0
  131. package/package.json +1 -1
  132. package/dist/auth/admin-token-manager.d.ts +0 -51
  133. package/dist/auth/scoped-token-manager.d.ts +0 -25
@@ -1,5 +1,5 @@
1
1
  require("./chunk-Cek0wNdY.js");
2
- const require_wal_maintenance = require("./wal-maintenance-Bl0ZKjVR.js");
2
+ const require_wal_maintenance = require("./wal-maintenance-DVN-DiVP.js");
3
3
  let node_worker_threads = require("node:worker_threads");
4
4
  //#region src/builtins/sqlite-storage/file-host-worker.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { C as RecordsEngine, D as callVector, E as callRecords, O as controlTargetOf, T as callData, _ as collectTransferables, a as WalMaintenance, b as isFileHostWorkerData, h as serializeError, l as SqliteSettingsBackend, o as createVectorIndex, s as vectorProviderOf, w as callControl, x as trustInput, y as isFileHostRequest } from "./wal-maintenance-TyuOEVy1.mjs";
1
+ import { C as RecordsEngine, D as callVector, E as callRecords, O as controlTargetOf, T as callData, _ as collectTransferables, a as WalMaintenance, b as isFileHostWorkerData, h as serializeError, l as SqliteSettingsBackend, o as createVectorIndex, s as vectorProviderOf, w as callControl, x as trustInput, y as isFileHostRequest } from "./wal-maintenance-BMiX6UIa.mjs";
2
2
  import { parentPort, threadId, workerData } from "node:worker_threads";
3
3
  //#region src/builtins/sqlite-storage/file-host-worker.ts
4
4
  /**
@@ -1,7 +1,7 @@
1
1
  import { o as __toESM } from "./chunk-CNf5ZN-e.mjs";
2
- import { _a as userError } from "./dist-BpSENkRJ.mjs";
2
+ import { Ea as userError } from "./dist-Dhux90yB.mjs";
3
3
  import { f as X509Certificate$1 } from "./x509.es-DK__ETIe.mjs";
4
- import { A as isConstrainedCa, E as reasonRequiresNewCa, M as permitsIdentity, P as readNameConstraints, T as evaluateExistingCert, _ as issueLeaf, g as generateCa, v as loadCa, y as collectCertIdentity } from "./agent-https-CLWrOO3o.mjs";
4
+ import { D as reasonRequiresNewCa, E as evaluateExistingCert, F as readNameConstraints, N as permitsIdentity, _ as issueLeaf, b as collectCertIdentity, g as generateCa, j as isConstrainedCa, v as loadCa, y as localCaCommonName } from "./agent-https-CK9Z4sSR.mjs";
5
5
  import { X509Certificate, createPrivateKey } from "node:crypto";
6
6
  import { writeOwnerOnlyFileSync } from "@camstack/types/node";
7
7
  import { mkdir, writeFile } from "node:fs/promises";
@@ -204,7 +204,13 @@ async function ensureTlsCert(dataDir, options) {
204
204
  mkdirSync(tlsDir, { recursive: true });
205
205
  let dropped = [];
206
206
  try {
207
- dropped = await regenerate(paths, rawIdentity, commonName, validDays, caRotated, reason);
207
+ dropped = await regenerate(paths, rawIdentity, {
208
+ commonName,
209
+ caCommonName: localCaCommonName(options?.hubName),
210
+ validDays,
211
+ newCa: caRotated,
212
+ reason
213
+ });
208
214
  } catch (err) {
209
215
  const message = err instanceof Error ? err.message : String(err);
210
216
  if (!canKeepServing(paths)) throw err;
@@ -234,7 +240,13 @@ async function reissueTlsLeaf(dataDir, options) {
234
240
  });
235
241
  const previousFingerprint = readFingerprint(paths.certPath);
236
242
  mkdirSync(tlsDir, { recursive: true });
237
- return describe(paths, true, "san-coverage-gap", false, previousFingerprint, null, await regenerate(paths, identity, commonName, validDays, false, null));
243
+ return describe(paths, true, "san-coverage-gap", false, previousFingerprint, null, await regenerate(paths, identity, {
244
+ commonName,
245
+ caCommonName: localCaCommonName(options?.hubName),
246
+ validDays,
247
+ newCa: false,
248
+ reason: null
249
+ }));
238
250
  }
239
251
  /**
240
252
  * Uploaded mode keeps a generated CA beside the upload (agents' leaves are still signed
@@ -260,7 +272,7 @@ async function replaceUnconstrainedLocalCa(dataDir, options) {
260
272
  extraSans: options?.extraSans ?? [],
261
273
  ...options?.hostFacts === void 0 ? {} : { hostFacts: options.hostFacts }
262
274
  });
263
- const ca = await generateCa(/* @__PURE__ */ new Date(), identity.dnsNames);
275
+ const ca = await generateCa(/* @__PURE__ */ new Date(), identity.dnsNames, localCaCommonName(options?.hubName));
264
276
  archivePreviousCa(paths, ca);
265
277
  await writeFile(`${paths.caCertPath}.new`, ca.certPem, "utf-8");
266
278
  writeOwnerOnlyFileSync(`${paths.caKeyPath}.new`, ca.keyPem);
@@ -297,15 +309,10 @@ function decideRegeneration(paths, identity) {
297
309
  return "unreadable";
298
310
  }
299
311
  }
300
- /**
301
- * Build every byte in memory, then move the files into place. A crash
302
- * mid-way leaves the previous material untouched; a crash between the
303
- * moves leaves a key/certificate mismatch, which the evaluator reports as
304
- * `key-mismatch` and heals on the next boot.
305
- */
306
- async function regenerate(paths, rawIdentity, commonName, validDays, newCa, reason) {
312
+ async function regenerate(paths, rawIdentity, params) {
313
+ const { commonName, caCommonName, validDays, newCa, reason } = params;
307
314
  const now = /* @__PURE__ */ new Date();
308
- const ca = newCa ? await generateCa(now, rawIdentity.dnsNames) : await loadCa(readFileSync(paths.caCertPath, "utf-8"), readFileSync(paths.caKeyPath, "utf-8"));
315
+ const ca = newCa ? await generateCa(now, rawIdentity.dnsNames, caCommonName) : await loadCa(readFileSync(paths.caCertPath, "utf-8"), readFileSync(paths.caKeyPath, "utf-8"));
309
316
  const constraints = readNameConstraints(ca.cert);
310
317
  const { identity, dropped } = constraints === null ? {
311
318
  identity: rawIdentity,
@@ -1,7 +1,7 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-DjQ8C-ku.js");
2
+ const require_dist = require("./dist-C89nqNnn.js");
3
3
  const require_x509_es = require("./x509.es-C4cOo48M.js");
4
- const require_agent_https = require("./agent-https-CCvlRQKV.js");
4
+ const require_agent_https = require("./agent-https-CoyOZ3pC.js");
5
5
  let node_crypto = require("node:crypto");
6
6
  let _camstack_types_node = require("@camstack/types/node");
7
7
  let node_fs_promises = require("node:fs/promises");
@@ -204,7 +204,13 @@ async function ensureTlsCert(dataDir, options) {
204
204
  (0, node_fs.mkdirSync)(tlsDir, { recursive: true });
205
205
  let dropped = [];
206
206
  try {
207
- dropped = await regenerate(paths, rawIdentity, commonName, validDays, caRotated, reason);
207
+ dropped = await regenerate(paths, rawIdentity, {
208
+ commonName,
209
+ caCommonName: require_agent_https.localCaCommonName(options?.hubName),
210
+ validDays,
211
+ newCa: caRotated,
212
+ reason
213
+ });
208
214
  } catch (err) {
209
215
  const message = err instanceof Error ? err.message : String(err);
210
216
  if (!canKeepServing(paths)) throw err;
@@ -234,7 +240,13 @@ async function reissueTlsLeaf(dataDir, options) {
234
240
  });
235
241
  const previousFingerprint = readFingerprint(paths.certPath);
236
242
  (0, node_fs.mkdirSync)(tlsDir, { recursive: true });
237
- return describe(paths, true, "san-coverage-gap", false, previousFingerprint, null, await regenerate(paths, identity, commonName, validDays, false, null));
243
+ return describe(paths, true, "san-coverage-gap", false, previousFingerprint, null, await regenerate(paths, identity, {
244
+ commonName,
245
+ caCommonName: require_agent_https.localCaCommonName(options?.hubName),
246
+ validDays,
247
+ newCa: false,
248
+ reason: null
249
+ }));
238
250
  }
239
251
  /**
240
252
  * Uploaded mode keeps a generated CA beside the upload (agents' leaves are still signed
@@ -260,7 +272,7 @@ async function replaceUnconstrainedLocalCa(dataDir, options) {
260
272
  extraSans: options?.extraSans ?? [],
261
273
  ...options?.hostFacts === void 0 ? {} : { hostFacts: options.hostFacts }
262
274
  });
263
- const ca = await require_agent_https.generateCa(/* @__PURE__ */ new Date(), identity.dnsNames);
275
+ const ca = await require_agent_https.generateCa(/* @__PURE__ */ new Date(), identity.dnsNames, require_agent_https.localCaCommonName(options?.hubName));
264
276
  archivePreviousCa(paths, ca);
265
277
  await (0, node_fs_promises.writeFile)(`${paths.caCertPath}.new`, ca.certPem, "utf-8");
266
278
  (0, _camstack_types_node.writeOwnerOnlyFileSync)(`${paths.caKeyPath}.new`, ca.keyPem);
@@ -297,15 +309,10 @@ function decideRegeneration(paths, identity) {
297
309
  return "unreadable";
298
310
  }
299
311
  }
300
- /**
301
- * Build every byte in memory, then move the files into place. A crash
302
- * mid-way leaves the previous material untouched; a crash between the
303
- * moves leaves a key/certificate mismatch, which the evaluator reports as
304
- * `key-mismatch` and heals on the next boot.
305
- */
306
- async function regenerate(paths, rawIdentity, commonName, validDays, newCa, reason) {
312
+ async function regenerate(paths, rawIdentity, params) {
313
+ const { commonName, caCommonName, validDays, newCa, reason } = params;
307
314
  const now = /* @__PURE__ */ new Date();
308
- const ca = newCa ? await require_agent_https.generateCa(now, rawIdentity.dnsNames) : await require_agent_https.loadCa((0, node_fs.readFileSync)(paths.caCertPath, "utf-8"), (0, node_fs.readFileSync)(paths.caKeyPath, "utf-8"));
315
+ const ca = newCa ? await require_agent_https.generateCa(now, rawIdentity.dnsNames, caCommonName) : await require_agent_https.loadCa((0, node_fs.readFileSync)(paths.caCertPath, "utf-8"), (0, node_fs.readFileSync)(paths.caKeyPath, "utf-8"));
309
316
  const constraints = require_agent_https.readNameConstraints(ca.cert);
310
317
  const { identity, dropped } = constraints === null ? {
311
318
  identity: rawIdentity,
package/dist/index.d.ts CHANGED
@@ -9,15 +9,12 @@ export { ApiKeyManager } from "./auth/api-key-manager.js";
9
9
  export type { AuthConfigReader, ReauthClaims, TokenPayload } from "./auth/auth-manager.js";
10
10
  export { AuthManager } from "./auth/auth-manager.js";
11
11
  export { scopesAllowAddon, scopesAllowDeviceCap } from "./auth/scope-matcher.js";
12
- export { ScopedTokenManager } from "./auth/scoped-token-manager.js";
13
12
  export type { TokenExpiryResult } from "./auth/token-expiry.js";
14
13
  export { parseTokenExpiry } from "./auth/token-expiry.js";
15
14
  export type { CreateLoginSessionInput, LoginSessionCheck, LoginSessionMethod, LoginSessionRecord, LoginSessionRefresh, LoginSessionRevocation, LoginSessionSummary } from "./auth/login-session-manager.js";
16
15
  export { LoginSessionManager, REFRESH_TOKEN_PREFIX } from "./auth/login-session-manager.js";
17
16
  export { onSessionsRevoked } from "./auth/session-revocation-bus.js";
18
17
  export type { SessionsRevokedEvent, SessionsRevokedListener } from "./auth/session-revocation-bus.js";
19
- export type { AdminTokenRecord } from "./auth/admin-token-manager.js";
20
- export { ADMIN_TOKEN_MAX_LIFETIME_MS, ADMIN_TOKEN_PREFIX, AdminTokenManager } from "./auth/admin-token-manager.js";
21
18
  export { DeviceCaStore } from "./auth/device-ca-store.js";
22
19
  export { DEVICE_CA_KEY_REF, type DeviceCaSigner, generateDeviceCa, issueDeviceLeaf, loadDeviceCa, verifyDeviceLeaf, verifyDeviceSignature } from "./auth/device-ca.js";
23
20
  export { type AuthenticatedDevice, DeviceCredentialManager, type DeviceCredentialRecord, type DeviceCredentialState, PREVIOUS_LEAF_GRACE_MS, type DeviceCheckRefusal, type IssuedDeviceCertificate } from "./auth/device-credential-manager.js";
@@ -25,7 +22,8 @@ export { AuthAuditLog } from "./auth/auth-audit-log.js";
25
22
  export type { AuthAuditAction, AuthAuditEvent, AuthAuditRecord } from "./auth/auth-audit-log.js";
26
23
  export type { CidrMatcher, ParsedCidr, ParsedCidrList } from "./auth/cidr.js";
27
24
  export { createCidrMatcher, normalizeIp, parseCidrList, readCidrSetting } from "./auth/cidr.js";
28
- export type { AdminTokensInternal, AuthAuditInternal, DeviceCredentialsInternal, LinkExternalIdentityInput, LoginSessionsInternal, SetPasswordInput, UserManagementInternal } from "./auth/user-management-internal.js";
25
+ export type { AuthAuditInternal, DeviceCredentialsInternal, LinkExternalIdentityInput, LoginSessionsInternal, SetPasswordInput, UserManagementInternal, UserPreferencesInternal } from "./auth/user-management-internal.js";
26
+ export { type PreferencesLimitReason, preferencesLimitReasonOf } from "./builtins/local-auth/user-preferences-store.js";
29
27
  export { attachUserManagementInternal, getUserManagementInternal, USER_MANAGEMENT_INTERNAL } from "./auth/user-management-internal.js";
30
28
  export type { UserRecord, UserStorageAccess } from "./auth/user-manager.js";
31
29
  export { FIRST_BOOT_ADMIN_PASSWORD, FIRST_BOOT_ADMIN_USERNAME, UserManager } from "./auth/user-manager.js";
@@ -104,6 +102,7 @@ export { isCredentialKeyName, redactLogEntry, redactLogMeta, redactLogText } fro
104
102
  export { clearPlatformKeychainKey, getPlatformKeychainKey, type PlatformKeychainKey, setPlatformKeychainKey } from "./builtins/keychain/platform-key-source.js";
105
103
  export type { LogEntry, LogFilter, LogLevel } from "./logging/log-ring-buffer.js";
106
104
  export { LogRingBuffer } from "./logging/log-ring-buffer.js";
105
+ export { bareAddonOf, compileLogFilter, type CompiledLogFilter, filterIsEmpty, levelRank, lineContainsText, lineMatches, originNodeOf, type ReadableLine } from "./logging/log-read-filter.js";
107
106
  export type { LevelBearing } from "./logging/logging-gate.js";
108
107
  export { DEFAULT_LOG_LEVEL, LoggingGate } from "./logging/logging-gate.js";
109
108
  export { __resetLoggingGateForTests, getLoggingGate } from "./logging/logging-gate.singleton.js";
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-DjQ8C-ku.js");
3
+ const require_dist = require("./dist-C89nqNnn.js");
4
4
  const require_read_all_rows$1 = require("./read-all-rows-CVoO1ONM.js");
5
- const require_device_ca = require("./device-ca-QPBgfqVY.js");
5
+ const require_device_ca = require("./device-ca-CVK3YcR_.js");
6
6
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
7
7
  require("./builtins/alerts/index.js");
8
8
  const require_builtins_calendars_calendars_addon = require("./builtins/calendars/calendars.addon.js");
@@ -23,25 +23,26 @@ const require_builtins_liveness_monitor_liveness_monitor_addon = require("./buil
23
23
  require("./builtins/liveness-monitor/index.js");
24
24
  const require_builtins_local_auth_local_auth_addon = require("./builtins/local-auth/local-auth.addon.js");
25
25
  require("./builtins/local-auth/index.js");
26
+ const require_log_read_filter = require("./log-read-filter-Bi066jwU.js");
26
27
  const require_builtins_loki_logging_index = require("./builtins/loki-logging/index.js");
27
28
  const require_builtins_native_metrics_native_metrics_addon = require("./builtins/native-metrics/native-metrics.addon.js");
28
29
  const require_builtins_device_history_device_history_addon = require("./builtins/device-history/device-history.addon.js");
29
30
  const require_builtins_sqlite_storage_filesystem_storage_addon = require("./builtins/sqlite-storage/filesystem-storage.addon.js");
30
- const require_wal_maintenance = require("./wal-maintenance-Bl0ZKjVR.js");
31
+ const require_wal_maintenance = require("./wal-maintenance-DVN-DiVP.js");
31
32
  const require_builtins_sqlite_storage_sqlite_settings_addon = require("./builtins/sqlite-storage/sqlite-settings.addon.js");
32
33
  const require_builtins_sqlite_storage_index = require("./builtins/sqlite-storage/index.js");
33
34
  const require_builtins_storage_orchestrator_storage_orchestrator_addon = require("./builtins/storage-orchestrator/storage-orchestrator.addon.js");
34
35
  require("./builtins/storage-orchestrator/index.js");
35
- const require_constants = require("./constants-DruwCkfp.js");
36
- const require_agent_https = require("./agent-https-CCvlRQKV.js");
36
+ const require_constants = require("./constants-B_X9cWEK.js");
37
+ const require_agent_https = require("./agent-https-CoyOZ3pC.js");
37
38
  const require_builtins_system_config_system_config_addon = require("./builtins/system-config/system-config.addon.js");
38
39
  require("./builtins/system-config/index.js");
39
40
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
40
41
  const require_custom_action_registry = require("./custom-action-registry-COyb49zm.js");
41
- const require_hub_mdns_ciao = require("./hub-mdns-ciao-Bkrvgnma.js");
42
+ const require_hub_mdns_ciao = require("./hub-mdns-ciao-DB1Y9agt.js");
42
43
  const require_platform_key_source = require("./platform-key-source-Di7HrlGR.js");
43
44
  const require_resource_monitor = require("./resource-monitor-mio9dSCT.js");
44
- const require_restore_archive = require("./restore-archive-4OP0EYg6.js");
45
+ const require_restore_archive = require("./restore-archive-4DOUR5Gu.js");
45
46
  let zod = require("zod");
46
47
  let node_crypto = require("node:crypto");
47
48
  node_crypto = require_chunk.__toESM(node_crypto);
@@ -4439,6 +4440,16 @@ var ScopedLogger = class ScopedLogger {
4439
4440
  };
4440
4441
  }
4441
4442
  };
4443
+ //#endregion
4444
+ //#region src/logging/log-manager.ts
4445
+ /**
4446
+ * A short id for one process lifetime: the first half of every entry `id`.
4447
+ * Base-36 epoch ms plus a random suffix, so two boots of the same process in
4448
+ * the same millisecond still mint different ids.
4449
+ */
4450
+ function newBootId() {
4451
+ return `${Date.now().toString(36)}${Math.floor(Math.random() * 36 ** 4).toString(36).padStart(4, "0")}`;
4452
+ }
4442
4453
  var LogManager = class {
4443
4454
  ringBuffer;
4444
4455
  /**
@@ -4475,6 +4486,14 @@ var LogManager = class {
4475
4486
  */
4476
4487
  gate = getLoggingGate();
4477
4488
  /**
4489
+ * Entry identity (D898): `<bootId>.<seq>`, stamped once, here, on every line
4490
+ * this process accepts — so the in-memory tail, the live subscription and
4491
+ * the rotated file carry the SAME id and a page read from disk dedupes
4492
+ * exactly against the lines pushed live.
4493
+ */
4494
+ bootId = newBootId();
4495
+ seq = 0;
4496
+ /**
4478
4497
  * `perAddonCapacity` bounds EACH addon's bucket, not the total — a chatty addon
4479
4498
  * evicts only its own lines, so quiet addons keep their sparse history.
4480
4499
  *
@@ -4507,7 +4526,10 @@ var LogManager = class {
4507
4526
  }
4508
4527
  createLogger(scope) {
4509
4528
  return new ScopedLogger(scope, (entry) => {
4510
- const enriched = redactLogEntry(this.enrichDeviceName(entry));
4529
+ const enriched = {
4530
+ ...redactLogEntry(this.enrichDeviceName(entry)),
4531
+ id: `${this.bootId}.${String(++this.seq)}`
4532
+ };
4511
4533
  if (this.isDestinationEnabled?.("log-buffer") !== false) this.ringBuffer.push(enriched);
4512
4534
  if (this.gate.allowsDestination(enriched)) for (const entry of this.destinations) {
4513
4535
  if (entry.addonId !== void 0 && this.isDestinationEnabled?.(entry.addonId) === false) continue;
@@ -16049,6 +16071,67 @@ function createChildrenBatchLoader(opts) {
16049
16071
  } };
16050
16072
  }
16051
16073
  //#endregion
16074
+ //#region src/kernel/moleculer/accessory-prune-gate.ts
16075
+ function isSpecList(answer) {
16076
+ return Array.isArray(answer);
16077
+ }
16078
+ function classifyAccessoryRead(answer, ctx) {
16079
+ if (isSpecList(answer)) {
16080
+ if (!ctx.online) return {
16081
+ kind: "unknown",
16082
+ reason: "parent offline",
16083
+ children: answer
16084
+ };
16085
+ if (ctx.probedAt === 0) return {
16086
+ kind: "unknown",
16087
+ reason: "probe not yet completed",
16088
+ children: answer
16089
+ };
16090
+ return {
16091
+ kind: "successful",
16092
+ children: answer
16093
+ };
16094
+ }
16095
+ if (answer.kind === "unknown") return {
16096
+ kind: "unknown",
16097
+ reason: answer.reason,
16098
+ children: answer.known ?? []
16099
+ };
16100
+ return {
16101
+ kind: "successful",
16102
+ children: answer.children
16103
+ };
16104
+ }
16105
+ /** One per parent registration; in-memory on purpose (a restart starts over — the safe direction). */
16106
+ var AccessoryShrinkGate = class {
16107
+ /** childId → the probe (`lastProbedAt`) of the first successful read that lacked it. */
16108
+ #firstMissing = /* @__PURE__ */ new Map();
16109
+ /**
16110
+ * `missing` = the managed children a SUCCESSFUL read no longer lists. Never
16111
+ * call this for an unknown read.
16112
+ */
16113
+ decide(missing, probedAt) {
16114
+ const missingSet = new Set(missing);
16115
+ for (const id of [...this.#firstMissing.keys()]) if (!missingSet.has(id)) this.#firstMissing.delete(id);
16116
+ const prune = [];
16117
+ const deferred = [];
16118
+ for (const id of missing) {
16119
+ const first = this.#firstMissing.get(id);
16120
+ if (first !== void 0 && probedAt > first) {
16121
+ prune.push(id);
16122
+ this.#firstMissing.delete(id);
16123
+ continue;
16124
+ }
16125
+ if (first === void 0) this.#firstMissing.set(id, probedAt);
16126
+ deferred.push(id);
16127
+ }
16128
+ return {
16129
+ prune,
16130
+ deferred
16131
+ };
16132
+ }
16133
+ };
16134
+ //#endregion
16052
16135
  //#region src/kernel/moleculer/runtime-state-load.ts
16053
16136
  /** A device build refused because its runtime state could not be loaded. */
16054
16137
  var RuntimeStateLoadError = class extends Error {
@@ -16771,6 +16854,7 @@ function createBrokerDeviceManagerApi(opts) {
16771
16854
  throw err;
16772
16855
  }
16773
16856
  const lifecycleHost = device;
16857
+ const shrinkGate = new AccessoryShrinkGate();
16774
16858
  const runReconcile = async () => {
16775
16859
  try {
16776
16860
  await callDeviceManager(api, "registerDevice", {
@@ -16794,7 +16878,12 @@ function createBrokerDeviceManagerApi(opts) {
16794
16878
  });
16795
16879
  }
16796
16880
  if (typeof lifecycleHost.getAccessoryChildren !== "function") return;
16797
- const specs = lifecycleHost.getAccessoryChildren();
16881
+ const probedAt = device.runtimeState?.getCapState("feature-probe")?.lastProbedAt ?? 0;
16882
+ const read = classifyAccessoryRead(lifecycleHost.getAccessoryChildren(), {
16883
+ online: device.online,
16884
+ probedAt
16885
+ });
16886
+ const specs = read.children;
16798
16887
  const expected = new Set(specs.map((s) => `${device.stableId}-${s.stableIdSuffix}`));
16799
16888
  await runBounded(specs, ACCESSORY_SPAWN_CONCURRENCY, async (spec) => {
16800
16889
  try {
@@ -16812,24 +16901,42 @@ function createBrokerDeviceManagerApi(opts) {
16812
16901
  });
16813
16902
  }
16814
16903
  });
16815
- if ((device.runtimeState?.getCapState("feature-probe")?.lastProbedAt ?? 0) === 0 && specs.length === 0) {
16816
- opts.logger.debug("Accessory orphan reconciliation skipped — probe not yet completed", { tags: {
16817
- parentDeviceId: device.id,
16818
- parentStableId: device.stableId
16819
- } });
16904
+ if (read.kind === "unknown") {
16905
+ opts.logger.info("Accessory orphan reconciliation skipped — child list unknown", {
16906
+ tags: {
16907
+ deviceId: device.id,
16908
+ parentStableId: device.stableId
16909
+ },
16910
+ meta: {
16911
+ reason: read.reason,
16912
+ probedAt
16913
+ }
16914
+ });
16820
16915
  return;
16821
16916
  }
16822
16917
  try {
16823
- const currentChildren = await childrenLoader.load(device.id);
16824
- for (const child of currentChildren) {
16825
- if (child.linkDeviceId !== device.id) continue;
16826
- if (expected.has(child.stableId)) continue;
16918
+ const missing = (await childrenLoader.load(device.id)).filter((child) => child.linkDeviceId === device.id && !expected.has(child.stableId));
16919
+ const decision = shrinkGate.decide(missing.map((child) => child.id), probedAt);
16920
+ if (decision.deferred.length > 0) opts.logger.info("Accessory children missing from a complete read — kept until a later probe agrees", {
16921
+ tags: {
16922
+ deviceId: device.id,
16923
+ parentStableId: device.stableId
16924
+ },
16925
+ meta: {
16926
+ childDeviceIds: [...decision.deferred],
16927
+ probedAt
16928
+ }
16929
+ });
16930
+ const confirmed = new Set(decision.prune);
16931
+ for (const child of missing) {
16932
+ if (!confirmed.has(child.id)) continue;
16827
16933
  const live = registry.getById(child.id);
16828
16934
  try {
16829
16935
  if (live) await deviceApi.remove(child.id);
16830
16936
  else await callDeviceManager(api, "removeDevice", { deviceId: child.id });
16831
16937
  opts.logger.info("Removed orphan accessory child no longer in parent specs", {
16832
16938
  tags: {
16939
+ deviceId: child.id,
16833
16940
  parentDeviceId: device.id,
16834
16941
  parentStableId: device.stableId
16835
16942
  },
@@ -16842,6 +16949,7 @@ function createBrokerDeviceManagerApi(opts) {
16842
16949
  } catch (err) {
16843
16950
  opts.logger.warn("Failed to remove orphan accessory child", {
16844
16951
  tags: {
16952
+ deviceId: child.id,
16845
16953
  parentDeviceId: device.id,
16846
16954
  parentStableId: device.stableId,
16847
16955
  childDeviceId: child.id
@@ -21301,7 +21409,7 @@ var LEVEL_ORDER = {
21301
21409
  warn: 2,
21302
21410
  error: 3
21303
21411
  };
21304
- function levelRank(level) {
21412
+ function levelRank$1(level) {
21305
21413
  return LEVEL_ORDER[level] ?? 0;
21306
21414
  }
21307
21415
  function createUdsLoggerWithState(client, addonId, nodeId, levelState, scope, tags = {}) {
@@ -21313,7 +21421,7 @@ function createUdsLoggerWithState(client, addonId, nodeId, levelState, scope, ta
21313
21421
  ...tags
21314
21422
  };
21315
21423
  function log(level, message, extras) {
21316
- if (levelRank(level) < levelRank(levelState.current)) return;
21424
+ if (levelRank$1(level) < levelRank$1(levelState.current)) return;
21317
21425
  const mergedTags = extras?.tags ? {
21318
21426
  ...baseTags,
21319
21427
  ...extras.tags
@@ -27009,6 +27117,10 @@ var en_default = {
27009
27117
  "device.credentials-unavailable": "Device credentials not available",
27010
27118
  "device.credential-not-found": "Device credential not found: {id}",
27011
27119
  "storage.no-provider": "No storage provider configured",
27120
+ "preferences.forbidden": "This credential cannot reach account preferences",
27121
+ "preferences.unavailable": "Account preferences are not available",
27122
+ "preferences.value-too-large": "This preference value is too large",
27123
+ "preferences.too-many-namespaces": "Too many preference namespaces for this account",
27012
27124
  "recording.export-unknown": "Unknown export \"{id}\"",
27013
27125
  "recording.export-invalid-range": "Invalid time range {fromMs}..{toMs}",
27014
27126
  "recording.export-no-profiles": "The export needs at least one stream profile",
@@ -27256,6 +27368,10 @@ var it_default = {
27256
27368
  "device.credentials-unavailable": "Le credenziali del dispositivo non sono disponibili",
27257
27369
  "device.credential-not-found": "Credenziale del dispositivo non trovata: {id}",
27258
27370
  "storage.no-provider": "Nessun provider di archiviazione configurato",
27371
+ "preferences.forbidden": "Questa credenziale non può accedere alle preferenze dell’account",
27372
+ "preferences.unavailable": "Le preferenze dell’account non sono disponibili",
27373
+ "preferences.value-too-large": "Il valore di questa preferenza è troppo grande",
27374
+ "preferences.too-many-namespaces": "Troppi gruppi di preferenze per questo account",
27259
27375
  "recording.export-unknown": "Esportazione \"{id}\" sconosciuta",
27260
27376
  "recording.export-invalid-range": "Intervallo di tempo non valido {fromMs}..{toMs}",
27261
27377
  "recording.export-no-profiles": "L'esportazione richiede almeno un profilo di flusso",
@@ -27572,8 +27688,6 @@ function resetCatalogRegistryForTests() {
27572
27688
  shared = null;
27573
27689
  }
27574
27690
  //#endregion
27575
- exports.ADMIN_TOKEN_MAX_LIFETIME_MS = require_builtins_local_auth_local_auth_addon.ADMIN_TOKEN_MAX_LIFETIME_MS;
27576
- exports.ADMIN_TOKEN_PREFIX = require_builtins_local_auth_local_auth_addon.ADMIN_TOKEN_PREFIX;
27577
27691
  exports.AGENT_CAP_FWD_ACTION = AGENT_CAP_FWD_ACTION;
27578
27692
  exports.AGENT_CAP_FWD_SERVICE = AGENT_CAP_FWD_SERVICE;
27579
27693
  exports.AGENT_DASHBOARD_ORIGINS_FIELD = require_builtins_system_config_system_config_addon.AGENT_DASHBOARD_ORIGINS_FIELD;
@@ -27598,7 +27712,6 @@ exports.AddonLoader = AddonLoader;
27598
27712
  exports.AddonManifest = AddonManifest;
27599
27713
  exports.AddonRefusedError = AddonRefusedError;
27600
27714
  exports.AddonRouteRegistry = AddonRouteRegistry;
27601
- exports.AdminTokenManager = require_builtins_local_auth_local_auth_addon.AdminTokenManager;
27602
27715
  exports.AgentHttpsInstallError = require_agent_https.AgentHttpsInstallError;
27603
27716
  exports.AgentHttpsNames = require_agent_https.AgentHttpsNames;
27604
27717
  exports.AgentMdnsAdvertiser = AgentMdnsAdvertiser;
@@ -27775,7 +27888,6 @@ exports.STORAGE_DRAIN_STATE_LEGACY = require_builtins_storage_orchestrator_stora
27775
27888
  exports.STORE_READABLE_BOOTSTRAP_KEYS = STORE_READABLE_BOOTSTRAP_KEYS;
27776
27889
  exports.SYSTEM_SECRET_OWNER = require_device_ca.SYSTEM_SECRET_OWNER;
27777
27890
  exports.ScopedLogger = ScopedLogger;
27778
- exports.ScopedTokenManager = require_builtins_local_auth_local_auth_addon.ScopedTokenManager;
27779
27891
  exports.SettingsReadUnavailableError = require_builtins_local_auth_local_auth_addon.SettingsReadUnavailableError;
27780
27892
  exports.SocketChannel = SocketChannel;
27781
27893
  exports.SqliteSettingsAddon = require_builtins_sqlite_storage_sqlite_settings_addon.SqliteSettingsAddon;
@@ -27823,6 +27935,7 @@ exports.attachUserManagementInternal = require_builtins_local_auth_local_auth_ad
27823
27935
  exports.attributeStall = require_custom_action_registry.attributeStall;
27824
27936
  exports.backupOrchestratorRecordKinds = require_restore_archive.backupOrchestratorRecordKinds;
27825
27937
  exports.backupRecordStoresOf = require_restore_archive.backupRecordStoresOf;
27938
+ exports.bareAddonOf = require_log_read_filter.bareAddonOf;
27826
27939
  exports.bindPendingLanHttp = require_hub_mdns_ciao.bindPendingLanHttp;
27827
27940
  exports.bootstrapSchema = bootstrapSchema;
27828
27941
  exports.brokerCallForCap = brokerCallForCap;
@@ -27871,6 +27984,7 @@ exports.clusterNodeHistoryRecordKind = clusterNodeHistoryRecordKind;
27871
27984
  exports.collectAgentNames = require_agent_https.collectAgentNames;
27872
27985
  exports.collectCertIdentity = require_agent_https.collectCertIdentity;
27873
27986
  exports.collectModelFiles = require_custom_action_registry.collectModelFiles;
27987
+ exports.compileLogFilter = require_log_read_filter.compileLogFilter;
27874
27988
  exports.computePairingCommitment = require_builtins_system_config_system_config_addon.computePairingCommitment;
27875
27989
  exports.computePairingSas = require_builtins_system_config_system_config_addon.computePairingSas;
27876
27990
  exports.connectBrokerTransport = connectBrokerTransport;
@@ -27980,6 +28094,7 @@ exports.evaluateExistingCert = require_agent_https.evaluateExistingCert;
27980
28094
  exports.expandCapMethods = require_dist.expandCapMethods;
27981
28095
  exports.exportMeshPrivateKeyPem = require_agent_https.exportMeshPrivateKeyPem;
27982
28096
  exports.fetchJson = require_custom_action_registry.fetchJson;
28097
+ exports.filterIsEmpty = require_log_read_filter.filterIsEmpty;
27983
28098
  exports.findAddonRefusal = findAddonRefusal;
27984
28099
  Object.defineProperty(exports, "findInPath", {
27985
28100
  enumerable: true,
@@ -28090,10 +28205,14 @@ exports.issueMeshLeafForNode = require_agent_https.issueMeshLeafForNode;
28090
28205
  exports.issueMeshLeafFromCsr = require_agent_https.issueMeshLeafFromCsr;
28091
28206
  exports.keyFingerprintShort = require_builtins_system_config_system_config_addon.keyFingerprintShort;
28092
28207
  exports.leafFingerprintOf = require_hub_mdns_ciao.leafFingerprintOf;
28208
+ exports.levelRank = require_log_read_filter.levelRank;
28209
+ exports.lineContainsText = require_log_read_filter.lineContainsText;
28210
+ exports.lineMatches = require_log_read_filter.lineMatches;
28093
28211
  exports.loadAgentHttps = require_agent_https.loadAgentHttps;
28094
28212
  exports.loadDeviceCa = require_device_ca.loadDeviceCa;
28095
28213
  exports.loadMeshCa = require_agent_https.loadMeshCa;
28096
28214
  exports.loadTlsCert = require_hub_mdns_ciao.loadTlsCert;
28215
+ exports.localCaCommonName = require_agent_https.localCaCommonName;
28097
28216
  exports.localEndpointPath = localEndpointPath;
28098
28217
  exports.localProviderLink = localProviderLink;
28099
28218
  exports.localSupportedPythonRuntimes = localSupportedPythonRuntimes;
@@ -28106,6 +28225,7 @@ exports.normalizeIp = require_builtins_system_config_system_config_addon.normali
28106
28225
  exports.onProcessNodeRegistered = require_builtins_system_config_system_config_addon.onProcessNodeRegistered;
28107
28226
  exports.onSessionsRevoked = require_builtins_local_auth_local_auth_addon.onSessionsRevoked;
28108
28227
  exports.openMeshTlsWhenRevocationsLoaded = require_builtins_system_config_system_config_addon.openMeshTlsWhenRevocationsLoaded;
28228
+ exports.originNodeOf = require_log_read_filter.originNodeOf;
28109
28229
  exports.overlayGetStatus = overlayGetStatus;
28110
28230
  exports.parseAgentDashboardOrigins = require_builtins_system_config_system_config_addon.parseAgentDashboardOrigins;
28111
28231
  exports.parseCapAction = parseCapAction;
@@ -28119,6 +28239,7 @@ exports.pemDigest = require_agent_https.pemDigest;
28119
28239
  exports.permitsIdentity = require_agent_https.permitsIdentity;
28120
28240
  exports.permitsName = require_agent_https.permitsName;
28121
28241
  exports.pinnedHttpsCaFingerprint = require_agent_https.pinnedHttpsCaFingerprint;
28242
+ exports.preferencesLimitReasonOf = require_builtins_local_auth_local_auth_addon.preferencesLimitReasonOf;
28122
28243
  exports.prepareBootTls = require_hub_mdns_ciao.prepareBootTls;
28123
28244
  exports.prepareRestoreArchive = require_restore_archive.prepareRestoreArchive;
28124
28245
  exports.probePlatform = probePlatform;