@camstack/system 1.2.161 → 1.2.162

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 (57) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/alerts/alerts.addon.js +1 -1
  8. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/console-logging/index.js +1 -1
  12. package/dist/builtins/console-logging/index.mjs +1 -1
  13. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  14. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  15. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  16. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  17. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  18. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  19. package/dist/builtins/hub-forwarder/index.js +1 -1
  20. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  21. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  22. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  23. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  24. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  25. package/dist/builtins/local-network/local-network.addon.js +1 -1
  26. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  27. package/dist/builtins/loki-logging/index.js +1 -1
  28. package/dist/builtins/loki-logging/index.mjs +1 -1
  29. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  30. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  31. package/dist/builtins/platform-probe/index.js +1 -1
  32. package/dist/builtins/platform-probe/index.mjs +1 -1
  33. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  34. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  35. package/dist/builtins/snapshot/index.js +1 -1
  36. package/dist/builtins/snapshot/index.mjs +1 -1
  37. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  38. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  39. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  40. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  41. package/dist/builtins/storage-orchestrator/location-secrets.d.ts +42 -2
  42. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +7 -1
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +67 -41
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +67 -41
  45. package/dist/builtins/system-config/system-config.addon.js +1 -1
  46. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  47. package/dist/builtins/winston-logging/index.js +1 -1
  48. package/dist/builtins/winston-logging/index.mjs +1 -1
  49. package/dist/{dist-D4xNBlJM.mjs → dist-5Xzz_kCk.mjs} +85 -0
  50. package/dist/{dist-Keu5TDO7.js → dist-CCIBlacf.js} +85 -0
  51. package/dist/index.js +2 -2
  52. package/dist/index.mjs +2 -2
  53. package/dist/{manifest-system-deps-DYv4ZPo2.js → manifest-system-deps-alrkBKVQ.js} +1 -1
  54. package/dist/{manifest-system-deps-CiCuev2R.mjs → manifest-system-deps-shjDShSB.mjs} +1 -1
  55. package/dist/{retired-settings-keys-BBohF-eC.js → retired-settings-keys-BxV3e2Km.js} +1 -1
  56. package/dist/{retired-settings-keys-COQMNlOJ.mjs → retired-settings-keys-CnuALlaP.mjs} +1 -1
  57. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_manifest_system_deps = require("./manifest-system-deps-DYv4ZPo2.js");
2
+ const require_manifest_system_deps = require("./manifest-system-deps-alrkBKVQ.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Ct as resolveAddonClass, N as createUdsLoggerWithControl, P as LocalChildClient, Rt as RUNNER_RSS_BUDGET_ENV, St as installManifestNativeDeps, Zt as startRunnerHeapWatch, a as createUdsAddonContext, at as getWorkerNativeCapSnapshot, it as getWorkerNativeCapProvider, lt as validateProviderRegistrations, n as installManifestPythonDeps, nn as emitHeapDiagnosticReport, st as setWorkerNativeCapsChangeListener, t as installManifestSystemDeps } from "./manifest-system-deps-CiCuev2R.mjs";
1
+ import { Ct as resolveAddonClass, N as createUdsLoggerWithControl, P as LocalChildClient, Rt as RUNNER_RSS_BUDGET_ENV, St as installManifestNativeDeps, Zt as startRunnerHeapWatch, a as createUdsAddonContext, at as getWorkerNativeCapSnapshot, it as getWorkerNativeCapProvider, lt as validateProviderRegistrations, n as installManifestPythonDeps, nn as emitHeapDiagnosticReport, st as setWorkerNativeCapsChangeListener, t as installManifestSystemDeps } from "./manifest-system-deps-shjDShSB.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
3
3
  import { register } from "node:module";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, in as EventCategory, jt as errMsg, w as addonPagesCapability } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, in as EventCategory, jt as errMsg, w as addonPagesCapability } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { E as addonWidgetsCapability, Mt as BaseAddon, in as EventCategory, jt as errMsg } from "../../dist-D4xNBlJM.mjs";
1
+ import { E as addonWidgetsCapability, Mt as BaseAddon, in as EventCategory, jt as errMsg } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  //#region src/builtins/alerts/prune-policy.ts
8
8
  /**
9
9
  * Ids older than `cutoffMs`, oldest first.
@@ -1,4 +1,4 @@
1
- import { D as alertsCapability, Gt as createEvent, Mt as BaseAddon, in as EventCategory, jt as errMsg, n as AlertSchema } from "../../dist-D4xNBlJM.mjs";
1
+ import { D as alertsCapability, Gt as createEvent, Mt as BaseAddon, in as EventCategory, jt as errMsg, n as AlertSchema } from "../../dist-5Xzz_kCk.mjs";
2
2
  //#region src/builtins/alerts/prune-policy.ts
3
3
  /**
4
4
  * Ids older than `cutoffMs`, oldest first.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let buffer = require("buffer");
9
9
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, in as EventCategory, k as backupCapability } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, in as EventCategory, k as backupCapability } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { randomBytes, randomUUID } from "node:crypto";
3
3
  import { Buffer as Buffer$1 } from "buffer";
4
4
  import * as fsp from "node:fs/promises";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/console-logging/console-destination.ts
9
9
  var LEVEL_RANK = {
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-Keu5TDO7.js");
3
+ const require_dist = require("../../dist-CCIBlacf.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,4 +1,4 @@
1
- import { F as coreBlockIdFromAddonId, I as coreBlocksCapability, Mt as BaseAddon, P as coreBlockAddonId, c as CoreBlockSchema, jt as errMsg, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, u as DeclaredDevices } from "../../dist-D4xNBlJM.mjs";
1
+ import { F as coreBlockIdFromAddonId, I as coreBlocksCapability, Mt as BaseAddon, P as coreBlockAddonId, c as CoreBlockSchema, jt as errMsg, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, u as DeclaredDevices } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-BBohF-eC.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-BxV3e2Km.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
10
10
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -1,5 +1,5 @@
1
- import { B as deviceManagerCapability, G as enumerateItemArrayFields, H as deviceStatusCapability, It as DeviceFeature, K as enumerateSchemaFields, Lt as DeviceRole, M as buildStreamParamsConfigSchema, Mt as BaseAddon, Rt as DeviceType, V as deviceStateCapability, Vt as WELL_KNOWN_TAB_MAP, Xt as isDeviceConfigCap, a as CAP_NAMES_WITH_STATUS, d as DeviceStatusSchema, ft as parseStreamParamsFormPatch, in as EventCategory, jt as errMsg, rn as sleep, t as ALL_CAPABILITY_DEFINITIONS, ut as normalizeUnit, vt as runtimeStatePolicyFor, y as STREAM_PROFILE_META } from "../../dist-D4xNBlJM.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-COQMNlOJ.mjs";
1
+ import { B as deviceManagerCapability, G as enumerateItemArrayFields, H as deviceStatusCapability, It as DeviceFeature, K as enumerateSchemaFields, Lt as DeviceRole, M as buildStreamParamsConfigSchema, Mt as BaseAddon, Rt as DeviceType, V as deviceStateCapability, Vt as WELL_KNOWN_TAB_MAP, Xt as isDeviceConfigCap, a as CAP_NAMES_WITH_STATUS, d as DeviceStatusSchema, ft as parseStreamParamsFormPatch, in as EventCategory, jt as errMsg, rn as sleep, t as ALL_CAPABILITY_DEFINITIONS, ut as normalizeUnit, vt as runtimeStatePolicyFor, y as STREAM_PROFILE_META } from "../../dist-5Xzz_kCk.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-CnuALlaP.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
5
5
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  //#region src/builtins/doorbell/trigger-engine.ts
8
8
  /**
9
9
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -1,4 +1,4 @@
1
- import { A as bareAddonId, Gt as createEvent, Mt as BaseAddon, Rt as DeviceType, U as doorbellCapability, _ as SOURCE_DEVICE_TYPES, et as isSameAddonId, g as SOURCE_CAPS, in as EventCategory, jt as errMsg, q as evaluateSensorEdge, tt as isSourceCap } from "../../dist-D4xNBlJM.mjs";
1
+ import { A as bareAddonId, Gt as createEvent, Mt as BaseAddon, Rt as DeviceType, U as doorbellCapability, _ as SOURCE_DEVICE_TYPES, et as isSameAddonId, g as SOURCE_CAPS, in as EventCategory, jt as errMsg, q as evaluateSensorEdge, tt as isSourceCap } from "../../dist-5Xzz_kCk.mjs";
2
2
  //#region src/builtins/doorbell/trigger-engine.ts
3
3
  /**
4
4
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
9
9
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
4
4
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-Keu5TDO7.js");
3
+ const require_dist = require("../../dist-CCIBlacf.js");
4
4
  //#region src/builtins/liveness-monitor/liveness-checks.ts
5
5
  var NO_DEVICES = "liveness:no-devices";
6
6
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -1,4 +1,4 @@
1
- import { Gt as createEvent, Mt as BaseAddon, in as EventCategory, jt as errMsg } from "../../dist-D4xNBlJM.mjs";
1
+ import { Gt as createEvent, Mt as BaseAddon, in as EventCategory, jt as errMsg } from "../../dist-5Xzz_kCk.mjs";
2
2
  //#region src/builtins/liveness-monitor/liveness-checks.ts
3
3
  var NO_DEVICES = "liveness:no-devices";
4
4
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  node_crypto = require_chunk.__toESM(node_crypto);
9
9
  let crypto$1 = require("crypto");
@@ -1,5 +1,5 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { C as UserRecordSchema, Mt as BaseAddon, O as authProviderCapability, Ot as userManagementCapability, b as ScopedTokenSchema, r as ApiKeyRecordSchema } from "../../dist-D4xNBlJM.mjs";
2
+ import { C as UserRecordSchema, Mt as BaseAddon, O as authProviderCapability, Ot as userManagementCapability, b as ScopedTokenSchema, r as ApiKeyRecordSchema } from "../../dist-5Xzz_kCk.mjs";
3
3
  import * as crypto$2 from "node:crypto";
4
4
  import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
5
5
  import nodeCrypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-Keu5TDO7.js");
3
+ const require_dist = require("../../dist-CCIBlacf.js");
4
4
  const require_tls = require("../../tls-BxQlomxd.js");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, at as localNetworkCapability, in as EventCategory } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, at as localNetworkCapability, in as EventCategory } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, i as writeExtraSans, l as reissueTlsLeaf, n as readTlsAccessStatus, o as validateUploadedTls, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, y as applyLanHttp } from "../../tls-DOTmtLCW.mjs";
3
3
  import { mkdir, writeFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  //#region src/builtins/loki-logging/loki-payload.ts
8
8
  /**
9
9
  * Loki rejects a label name that is not a valid Prometheus label
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-5Xzz_kCk.mjs";
2
2
  //#region src/builtins/loki-logging/loki-payload.ts
3
3
  /**
4
4
  * Loki rejects a label name that is not a valid Prometheus label
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_child_process = require("node:child_process");
9
9
  let node_util = require("node:util");
@@ -1,4 +1,4 @@
1
- import { Gt as createEvent, Mt as BaseAddon, X as foldSnapshotByFunction, gt as resolveBucketMs, ht as reducePoints, in as EventCategory, jt as errMsg, lt as metricsProviderCapability } from "../../dist-D4xNBlJM.mjs";
1
+ import { Gt as createEvent, Mt as BaseAddon, X as foldSnapshotByFunction, gt as resolveBucketMs, ht as reducePoints, in as EventCategory, jt as errMsg, lt as metricsProviderCapability } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { readFile, readdir } from "node:fs/promises";
3
3
  import { execFile, execFileSync } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  let node_util = require("node:util");
9
9
  let node_fs = require("node:fs");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Mt as BaseAddon, W as enumerateInferenceDevices, in as EventCategory, jt as errMsg, pt as platformProbeCapability, qt as emitReadiness, xt as scoreRuntimes } from "../../dist-D4xNBlJM.mjs";
2
+ import { Mt as BaseAddon, W as enumerateInferenceDevices, in as EventCategory, jt as errMsg, pt as platformProbeCapability, qt as emitReadiness, xt as scoreRuntimes } from "../../dist-5Xzz_kCk.mjs";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
5
5
  import * as fs from "node:fs";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
8
8
  /**
9
9
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, in as EventCategory } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, in as EventCategory } from "../../dist-5Xzz_kCk.mjs";
2
2
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
3
3
  /**
4
4
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,4 +1,4 @@
1
- import { A as bareAddonId, Ct as snapshotCapability, Dt as streamQualityLabel, It as DeviceFeature, Mt as BaseAddon, Rt as DeviceType, Zt as nodePin, i as BatteryStatusSchema, in as EventCategory, j as batteryCapability, jt as errMsg, z as deriveBatteryPresence } from "../../dist-D4xNBlJM.mjs";
1
+ import { A as bareAddonId, Ct as snapshotCapability, Dt as streamQualityLabel, It as DeviceFeature, Mt as BaseAddon, Rt as DeviceType, Zt as nodePin, i as BatteryStatusSchema, in as EventCategory, j as batteryCapability, jt as errMsg, z as deriveBatteryPresence } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Et as storageProviderCapability, Mt as BaseAddon, Y as filesystemBrowseCapability } from "../../dist-D4xNBlJM.mjs";
1
+ import { Et as storageProviderCapability, Mt as BaseAddon, Y as filesystemBrowseCapability } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -1,6 +1,22 @@
1
1
  import { StorageLocation } from '@camstack/types';
2
- /** Shared empty set for providers that declare no secrets (or are unknown). */
3
- export declare const EMPTY_SECRET_KEYS: ReadonlySet<string>;
2
+ /**
3
+ * The config keys the ORCHESTRATOR itself owns, as opposed to the ones a
4
+ * provider owns. Every one of them is read by framework code that has no idea
5
+ * which provider is behind the row:
6
+ *
7
+ * - `basePath` — `localCapacityOf`, `locationOccupancy`, the seed pass,
8
+ * `LocationCard`'s summary, `StorageSection`;
9
+ * - `readOnly` — drain mode; the recorder and post-analysis both filter on
10
+ * it off a `listLocations` row;
11
+ * - `maxUsedGb` — `resolveLocationMaxUsedBytes`;
12
+ * - `minFreePercent` — `resolveLocationThresholds`.
13
+ *
14
+ * None can be a credential, because the framework interprets all four itself.
15
+ * That is what makes the list safe to hardcode — it is NOT a list of "keys we
16
+ * believe are not secret", which is the rotting kind. It is the closed set of
17
+ * keys this module, not a provider, defines the meaning of.
18
+ */
19
+ export declare const FRAMEWORK_CONFIG_KEYS: ReadonlySet<string>;
4
20
  /** Minimal shape needed off a provider's `getProviderInfo()` result. */
5
21
  export interface ProviderInfoLike {
6
22
  readonly providerId: string;
@@ -8,6 +24,30 @@ export interface ProviderInfoLike {
8
24
  }
9
25
  /** Secret config keys a provider declares, derived from its own form schema. */
10
26
  export declare function secretKeysOfProviderInfo(info: ProviderInfoLike): ReadonlySet<string>;
27
+ /**
28
+ * Which keys of THIS config must be treated as secret.
29
+ *
30
+ * `declared` is what the provider's own schema said, or `undefined` when the
31
+ * provider has not registered on this node and so has said nothing.
32
+ *
33
+ * The `undefined` branch is the one that matters. Redaction is schema-driven
34
+ * and the schema arrives with the provider, so "no provider" used to mean "no
35
+ * secret keys" — which redacted nothing while `listLocations` happily served
36
+ * the row, because that method reads the store and never needs a provider.
37
+ * That is a real window on every hub restart (the `remote-storage` group is a
38
+ * separate runner that registers after the orchestrator boots) and it is
39
+ * PERMANENT for a runner the CrashSupervisor marked terminally failed.
40
+ *
41
+ * So an unknown provider fails CLOSED: every key the framework does not itself
42
+ * define is withheld. It over-redacts — a host name is hidden alongside the
43
+ * password — and that is the correct direction, because the admin UI cannot
44
+ * render a provider's form without that same provider's `configSchema` either,
45
+ * so nothing that was working stops working.
46
+ *
47
+ * Withholding is done with the sentinel, never by dropping the key, so a save
48
+ * performed in this degraded state still round-trips every value back intact.
49
+ */
50
+ export declare function secretKeysForConfig(config: Readonly<Record<string, unknown>>, declared: ReadonlySet<string> | undefined): ReadonlySet<string>;
11
51
  /**
12
52
  * A copy of `config` with every declared secret replaced by the sentinel.
13
53
  * Returns the SAME object when there is nothing to redact, so the common case
@@ -74,7 +74,13 @@ export declare class StorageOrchestratorAddon extends BaseAddon<StorageOrchestra
74
74
  * the recorder so disk-pressure is a single core concern.
75
75
  */
76
76
  private resolveLocationThresholds;
77
- /** Declared secret config keys for a provider; empty when unknown. */
77
+ /**
78
+ * What the provider's own schema declared secret, or `undefined` when this
79
+ * node has never heard from that provider. The distinction is the whole
80
+ * point — see `secretKeysForConfig`, which fails CLOSED on `undefined`.
81
+ */
82
+ private declaredSecretKeys;
83
+ /** Which keys of a given stored config must never leave this process. */
78
84
  private secretKeysFor;
79
85
  /** A location with its provider's declared secrets replaced by the sentinel. */
80
86
  private redacted;
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1178,47 +1178,62 @@ function createDataStoreDispatch(getEngines) {
1178
1178
  //#endregion
1179
1179
  //#region src/builtins/storage-orchestrator/location-secrets.ts
1180
1180
  /**
1181
- * Credential redaction for `StorageLocation.config`.
1181
+ * The config keys the ORCHESTRATOR itself owns, as opposed to the ones a
1182
+ * provider owns. Every one of them is read by framework code that has no idea
1183
+ * which provider is behind the row:
1182
1184
  *
1183
- * ── What was wrong ─────────────────────────────────────────────────────────
1184
- * `storage.listLocations` carries no `auth` override, so it is `protected` —
1185
- * every authenticated session reaches it, admin or not. The orchestrator
1186
- * spread each stored row verbatim. `StorageLocation.config` is
1187
- * `z.record(z.string(), z.unknown())`, and the SFTP / S3 / WebDAV providers
1188
- * already declare `password`, `privateKey`, `privateKeyPassphrase`,
1189
- * `secretAccessKey` and `token` inside it. Nothing was exposed only because
1190
- * every location on the live hub is `filesystem-storage`, whose config is
1191
- * `basePath` + `maxUsedGb`. The exposure arrives with the first remote
1192
- * location, and three providers that collect one already ship.
1185
+ * - `basePath` — `localCapacityOf`, `locationOccupancy`, the seed pass,
1186
+ * `LocationCard`'s summary, `StorageSection`;
1187
+ * - `readOnly` — drain mode; the recorder and post-analysis both filter on
1188
+ * it off a `listLocations` row;
1189
+ * - `maxUsedGb` — `resolveLocationMaxUsedBytes`;
1190
+ * - `minFreePercent` `resolveLocationThresholds`.
1193
1191
  *
1194
- * ── The mechanism ──────────────────────────────────────────────────────────
1195
- * Schema-driven, never a hardcoded key list: each provider's
1196
- * `getProviderInfo().configSchema` already says which of its fields hold a
1197
- * credential, so it is the one thing that cannot drift from the provider.
1198
- *
1199
- * Two directions, and both are needed:
1200
- * - **out** — {@link redactLocationConfig} replaces every secret value with
1201
- * `REDACTED_SECRET` on the way to a caller.
1202
- * - **in** — {@link restoreRedactedSecrets} treats that same sentinel, sent
1203
- * back on an upsert, as "keep what is stored". Without it the wizard's
1204
- * edit-and-save round trip would write the sentinel into the config and
1205
- * lock the operator out of their own share on the first rename.
1206
- *
1207
- * ── The trap this deliberately avoids ──────────────────────────────────────
1208
- * Keying redaction off `type: 'password'` alone MISSES a secret parked in a
1209
- * `textarea`, and the SFTP provider parks an entire PEM private key there.
1210
- * Discovery goes through `collectSecretConfigKeys`, whose discriminator is
1211
- * `type === 'password' || secret === true`. A redaction that quietly misses a
1212
- * credential is worse than none: it is a leak plus an assurance there is not
1213
- * one.
1192
+ * None can be a credential, because the framework interprets all four itself.
1193
+ * That is what makes the list safe to hardcode — it is NOT a list of "keys we
1194
+ * believe are not secret", which is the rotting kind. It is the closed set of
1195
+ * keys this module, not a provider, defines the meaning of.
1214
1196
  */
1215
- /** Shared empty set for providers that declare no secrets (or are unknown). */
1216
- var EMPTY_SECRET_KEYS = /* @__PURE__ */ new Set();
1197
+ var FRAMEWORK_CONFIG_KEYS = new Set([
1198
+ "basePath",
1199
+ "readOnly",
1200
+ "maxUsedGb",
1201
+ "minFreePercent"
1202
+ ]);
1217
1203
  /** Secret config keys a provider declares, derived from its own form schema. */
1218
1204
  function secretKeysOfProviderInfo(info) {
1219
1205
  return require_dist.collectSecretConfigKeys(info.configSchema);
1220
1206
  }
1221
1207
  /**
1208
+ * Which keys of THIS config must be treated as secret.
1209
+ *
1210
+ * `declared` is what the provider's own schema said, or `undefined` when the
1211
+ * provider has not registered on this node and so has said nothing.
1212
+ *
1213
+ * The `undefined` branch is the one that matters. Redaction is schema-driven
1214
+ * and the schema arrives with the provider, so "no provider" used to mean "no
1215
+ * secret keys" — which redacted nothing while `listLocations` happily served
1216
+ * the row, because that method reads the store and never needs a provider.
1217
+ * That is a real window on every hub restart (the `remote-storage` group is a
1218
+ * separate runner that registers after the orchestrator boots) and it is
1219
+ * PERMANENT for a runner the CrashSupervisor marked terminally failed.
1220
+ *
1221
+ * So an unknown provider fails CLOSED: every key the framework does not itself
1222
+ * define is withheld. It over-redacts — a host name is hidden alongside the
1223
+ * password — and that is the correct direction, because the admin UI cannot
1224
+ * render a provider's form without that same provider's `configSchema` either,
1225
+ * so nothing that was working stops working.
1226
+ *
1227
+ * Withholding is done with the sentinel, never by dropping the key, so a save
1228
+ * performed in this degraded state still round-trips every value back intact.
1229
+ */
1230
+ function secretKeysForConfig(config, declared) {
1231
+ if (declared !== void 0) return declared;
1232
+ const out = /* @__PURE__ */ new Set();
1233
+ for (const key of Object.keys(config)) if (!FRAMEWORK_CONFIG_KEYS.has(key)) out.add(key);
1234
+ return out;
1235
+ }
1236
+ /**
1222
1237
  * A copy of `config` with every declared secret replaced by the sentinel.
1223
1238
  * Returns the SAME object when there is nothing to redact, so the common case
1224
1239
  * (a filesystem location) allocates nothing.
@@ -2300,7 +2315,7 @@ var StorageOrchestratorAddon = class extends require_dist.BaseAddon {
2300
2315
  listLocationDeclarations: async () => service.listDeclarations(),
2301
2316
  upsertLocation: async (input) => {
2302
2317
  const stored = service.getLocationById(input.id);
2303
- const config = restoreRedactedSecrets(input.config, stored?.config, this.secretKeysFor(input.providerId));
2318
+ const config = restoreRedactedSecrets(input.config, stored?.config, this.secretKeysFor(input.providerId, stored?.config ?? {}));
2304
2319
  const saved = service.upsertLocation(config === input.config ? input : {
2305
2320
  ...input,
2306
2321
  config
@@ -2333,11 +2348,14 @@ var StorageOrchestratorAddon = class extends require_dist.BaseAddon {
2333
2348
  } });
2334
2349
  });
2335
2350
  },
2336
- testConfig: async ({ providerId, config }) => {
2351
+ testConfig: async ({ providerId, locationId, config }) => {
2352
+ const stored = locationId === void 0 ? void 0 : service.getLocationById(locationId);
2353
+ const base = stored?.providerId === providerId ? stored.config : void 0;
2354
+ const resolved = restoreRedactedSecrets(config, base, this.secretKeysFor(providerId, base ?? {}));
2337
2355
  const providers = getProviders();
2338
2356
  for (const p of providers) try {
2339
2357
  if ((await p.getProviderInfo()).providerId !== providerId) continue;
2340
- return p.testLocation({ config });
2358
+ return p.testLocation({ config: resolved });
2341
2359
  } catch (err) {
2342
2360
  return {
2343
2361
  ok: false,
@@ -2655,13 +2673,21 @@ var StorageOrchestratorAddon = class extends require_dist.BaseAddon {
2655
2673
  }
2656
2674
  return out;
2657
2675
  }
2658
- /** Declared secret config keys for a provider; empty when unknown. */
2659
- secretKeysFor(providerId) {
2660
- return this.secretKeysByProvider.get(providerId) ?? EMPTY_SECRET_KEYS;
2676
+ /**
2677
+ * What the provider's own schema declared secret, or `undefined` when this
2678
+ * node has never heard from that provider. The distinction is the whole
2679
+ * point — see `secretKeysForConfig`, which fails CLOSED on `undefined`.
2680
+ */
2681
+ declaredSecretKeys(providerId) {
2682
+ return this.secretKeysByProvider.get(providerId);
2683
+ }
2684
+ /** Which keys of a given stored config must never leave this process. */
2685
+ secretKeysFor(providerId, config) {
2686
+ return secretKeysForConfig(config, this.declaredSecretKeys(providerId));
2661
2687
  }
2662
2688
  /** A location with its provider's declared secrets replaced by the sentinel. */
2663
2689
  redacted(location) {
2664
- return redactLocation(location, this.secretKeysFor(location.providerId));
2690
+ return redactLocation(location, this.secretKeysFor(location.providerId, location.config));
2665
2691
  }
2666
2692
  /**
2667
2693
  * Is this location backed by a provider that serves a genuine local
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, N as collectSecretConfigKeys, Qt as parseJsonObject, S as StorageMigrationJobSchema, St as settingsStoreCapability, Tt as storageMigrationCapability, m as REDACTED_SECRET, wt as storageCapability, x as StorageLocationTypeSchema } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, N as collectSecretConfigKeys, Qt as parseJsonObject, S as StorageMigrationJobSchema, St as settingsStoreCapability, Tt as storageMigrationCapability, m as REDACTED_SECRET, wt as storageCapability, x as StorageLocationTypeSchema } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -1171,47 +1171,62 @@ function createDataStoreDispatch(getEngines) {
1171
1171
  //#endregion
1172
1172
  //#region src/builtins/storage-orchestrator/location-secrets.ts
1173
1173
  /**
1174
- * Credential redaction for `StorageLocation.config`.
1174
+ * The config keys the ORCHESTRATOR itself owns, as opposed to the ones a
1175
+ * provider owns. Every one of them is read by framework code that has no idea
1176
+ * which provider is behind the row:
1175
1177
  *
1176
- * ── What was wrong ─────────────────────────────────────────────────────────
1177
- * `storage.listLocations` carries no `auth` override, so it is `protected` —
1178
- * every authenticated session reaches it, admin or not. The orchestrator
1179
- * spread each stored row verbatim. `StorageLocation.config` is
1180
- * `z.record(z.string(), z.unknown())`, and the SFTP / S3 / WebDAV providers
1181
- * already declare `password`, `privateKey`, `privateKeyPassphrase`,
1182
- * `secretAccessKey` and `token` inside it. Nothing was exposed only because
1183
- * every location on the live hub is `filesystem-storage`, whose config is
1184
- * `basePath` + `maxUsedGb`. The exposure arrives with the first remote
1185
- * location, and three providers that collect one already ship.
1178
+ * - `basePath` — `localCapacityOf`, `locationOccupancy`, the seed pass,
1179
+ * `LocationCard`'s summary, `StorageSection`;
1180
+ * - `readOnly` — drain mode; the recorder and post-analysis both filter on
1181
+ * it off a `listLocations` row;
1182
+ * - `maxUsedGb` — `resolveLocationMaxUsedBytes`;
1183
+ * - `minFreePercent` `resolveLocationThresholds`.
1186
1184
  *
1187
- * ── The mechanism ──────────────────────────────────────────────────────────
1188
- * Schema-driven, never a hardcoded key list: each provider's
1189
- * `getProviderInfo().configSchema` already says which of its fields hold a
1190
- * credential, so it is the one thing that cannot drift from the provider.
1191
- *
1192
- * Two directions, and both are needed:
1193
- * - **out** — {@link redactLocationConfig} replaces every secret value with
1194
- * `REDACTED_SECRET` on the way to a caller.
1195
- * - **in** — {@link restoreRedactedSecrets} treats that same sentinel, sent
1196
- * back on an upsert, as "keep what is stored". Without it the wizard's
1197
- * edit-and-save round trip would write the sentinel into the config and
1198
- * lock the operator out of their own share on the first rename.
1199
- *
1200
- * ── The trap this deliberately avoids ──────────────────────────────────────
1201
- * Keying redaction off `type: 'password'` alone MISSES a secret parked in a
1202
- * `textarea`, and the SFTP provider parks an entire PEM private key there.
1203
- * Discovery goes through `collectSecretConfigKeys`, whose discriminator is
1204
- * `type === 'password' || secret === true`. A redaction that quietly misses a
1205
- * credential is worse than none: it is a leak plus an assurance there is not
1206
- * one.
1185
+ * None can be a credential, because the framework interprets all four itself.
1186
+ * That is what makes the list safe to hardcode — it is NOT a list of "keys we
1187
+ * believe are not secret", which is the rotting kind. It is the closed set of
1188
+ * keys this module, not a provider, defines the meaning of.
1207
1189
  */
1208
- /** Shared empty set for providers that declare no secrets (or are unknown). */
1209
- var EMPTY_SECRET_KEYS = /* @__PURE__ */ new Set();
1190
+ var FRAMEWORK_CONFIG_KEYS = new Set([
1191
+ "basePath",
1192
+ "readOnly",
1193
+ "maxUsedGb",
1194
+ "minFreePercent"
1195
+ ]);
1210
1196
  /** Secret config keys a provider declares, derived from its own form schema. */
1211
1197
  function secretKeysOfProviderInfo(info) {
1212
1198
  return collectSecretConfigKeys(info.configSchema);
1213
1199
  }
1214
1200
  /**
1201
+ * Which keys of THIS config must be treated as secret.
1202
+ *
1203
+ * `declared` is what the provider's own schema said, or `undefined` when the
1204
+ * provider has not registered on this node and so has said nothing.
1205
+ *
1206
+ * The `undefined` branch is the one that matters. Redaction is schema-driven
1207
+ * and the schema arrives with the provider, so "no provider" used to mean "no
1208
+ * secret keys" — which redacted nothing while `listLocations` happily served
1209
+ * the row, because that method reads the store and never needs a provider.
1210
+ * That is a real window on every hub restart (the `remote-storage` group is a
1211
+ * separate runner that registers after the orchestrator boots) and it is
1212
+ * PERMANENT for a runner the CrashSupervisor marked terminally failed.
1213
+ *
1214
+ * So an unknown provider fails CLOSED: every key the framework does not itself
1215
+ * define is withheld. It over-redacts — a host name is hidden alongside the
1216
+ * password — and that is the correct direction, because the admin UI cannot
1217
+ * render a provider's form without that same provider's `configSchema` either,
1218
+ * so nothing that was working stops working.
1219
+ *
1220
+ * Withholding is done with the sentinel, never by dropping the key, so a save
1221
+ * performed in this degraded state still round-trips every value back intact.
1222
+ */
1223
+ function secretKeysForConfig(config, declared) {
1224
+ if (declared !== void 0) return declared;
1225
+ const out = /* @__PURE__ */ new Set();
1226
+ for (const key of Object.keys(config)) if (!FRAMEWORK_CONFIG_KEYS.has(key)) out.add(key);
1227
+ return out;
1228
+ }
1229
+ /**
1215
1230
  * A copy of `config` with every declared secret replaced by the sentinel.
1216
1231
  * Returns the SAME object when there is nothing to redact, so the common case
1217
1232
  * (a filesystem location) allocates nothing.
@@ -2293,7 +2308,7 @@ var StorageOrchestratorAddon = class extends BaseAddon {
2293
2308
  listLocationDeclarations: async () => service.listDeclarations(),
2294
2309
  upsertLocation: async (input) => {
2295
2310
  const stored = service.getLocationById(input.id);
2296
- const config = restoreRedactedSecrets(input.config, stored?.config, this.secretKeysFor(input.providerId));
2311
+ const config = restoreRedactedSecrets(input.config, stored?.config, this.secretKeysFor(input.providerId, stored?.config ?? {}));
2297
2312
  const saved = service.upsertLocation(config === input.config ? input : {
2298
2313
  ...input,
2299
2314
  config
@@ -2326,11 +2341,14 @@ var StorageOrchestratorAddon = class extends BaseAddon {
2326
2341
  } });
2327
2342
  });
2328
2343
  },
2329
- testConfig: async ({ providerId, config }) => {
2344
+ testConfig: async ({ providerId, locationId, config }) => {
2345
+ const stored = locationId === void 0 ? void 0 : service.getLocationById(locationId);
2346
+ const base = stored?.providerId === providerId ? stored.config : void 0;
2347
+ const resolved = restoreRedactedSecrets(config, base, this.secretKeysFor(providerId, base ?? {}));
2330
2348
  const providers = getProviders();
2331
2349
  for (const p of providers) try {
2332
2350
  if ((await p.getProviderInfo()).providerId !== providerId) continue;
2333
- return p.testLocation({ config });
2351
+ return p.testLocation({ config: resolved });
2334
2352
  } catch (err) {
2335
2353
  return {
2336
2354
  ok: false,
@@ -2648,13 +2666,21 @@ var StorageOrchestratorAddon = class extends BaseAddon {
2648
2666
  }
2649
2667
  return out;
2650
2668
  }
2651
- /** Declared secret config keys for a provider; empty when unknown. */
2652
- secretKeysFor(providerId) {
2653
- return this.secretKeysByProvider.get(providerId) ?? EMPTY_SECRET_KEYS;
2669
+ /**
2670
+ * What the provider's own schema declared secret, or `undefined` when this
2671
+ * node has never heard from that provider. The distinction is the whole
2672
+ * point — see `secretKeysForConfig`, which fails CLOSED on `undefined`.
2673
+ */
2674
+ declaredSecretKeys(providerId) {
2675
+ return this.secretKeysByProvider.get(providerId);
2676
+ }
2677
+ /** Which keys of a given stored config must never leave this process. */
2678
+ secretKeysFor(providerId, config) {
2679
+ return secretKeysForConfig(config, this.declaredSecretKeys(providerId));
2654
2680
  }
2655
2681
  /** A location with its provider's declared secrets replaced by the sentinel. */
2656
2682
  redacted(location) {
2657
- return redactLocation(location, this.secretKeysFor(location.providerId));
2683
+ return redactLocation(location, this.secretKeysFor(location.providerId, location.config));
2658
2684
  }
2659
2685
  /**
2660
2686
  * Is this location backed by a provider that serves a genuine local
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  //#region src/builtins/system-config/system-config.addon.ts
8
8
  /**
9
9
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, Yt as hydrateSchema, jt as errMsg } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, Yt as hydrateSchema, jt as errMsg } from "../../dist-5Xzz_kCk.mjs";
2
2
  //#region src/builtins/system-config/system-config.addon.ts
3
3
  /**
4
4
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-Keu5TDO7.js");
6
+ const require_dist = require("../../dist-CCIBlacf.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-D4xNBlJM.mjs";
1
+ import { Mt as BaseAddon, ot as logDestinationCapability } from "../../dist-5Xzz_kCk.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -17876,6 +17876,50 @@ var EventStoreFootprintSchema = z.object({
17876
17876
  totalBytes: z.number().int(),
17877
17877
  devices: z.array(EventStoreDeviceFootprintSchema).readonly()
17878
17878
  });
17879
+ /** Event-media footprint for one {@link MediaFileKind}. */
17880
+ var EventMediaKindFootprintSchema = z.object({
17881
+ kind: MediaFileKindEnum,
17882
+ /** Media rows of this kind. */
17883
+ rows: z.number().int(),
17884
+ /** Bytes on disk held by those rows. */
17885
+ bytes: z.number().int()
17886
+ });
17887
+ /**
17888
+ * The media footprint broken down by KIND — the axis a deletion decision
17889
+ * actually turns on.
17890
+ *
17891
+ * A byte total says how much there is; it cannot say what is safe to remove.
17892
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
17893
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
17894
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
17895
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
17896
+ * nothing else, so sizing a deletion means summing per kind.
17897
+ *
17898
+ * ## Why `unaccounted*` exists
17899
+ *
17900
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
17901
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
17902
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
17903
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
17904
+ * retired code path, or by a version that knew a kind this one does not) would
17905
+ * otherwise vanish from the total silently, and an operator would delete
17906
+ * against a denominator smaller than the disk.
17907
+ *
17908
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
17909
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
17910
+ */
17911
+ var EventMediaKindBreakdownSchema = z.object({
17912
+ /** Every media row in scope, from one unfiltered aggregate. */
17913
+ totalRows: z.number().int(),
17914
+ /** Every media byte in scope, from that same aggregate. */
17915
+ totalBytes: z.number().int(),
17916
+ /** Per-kind footprint, ordered by bytes descending. */
17917
+ kinds: z.array(EventMediaKindFootprintSchema).readonly(),
17918
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
17919
+ unaccountedRows: z.number().int(),
17920
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
17921
+ unaccountedBytes: z.number().int()
17922
+ });
17879
17923
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
17880
17924
  var EventPruneCountsSchema = z.object({
17881
17925
  motion: z.number().int(),
@@ -18258,6 +18302,22 @@ var pipelineAnalyticsCapability = {
18258
18302
  auth: "admin"
18259
18303
  }),
18260
18304
  /**
18305
+ * The same media footprint, broken down by {@link MediaFileKind} instead of
18306
+ * by camera — fleet-wide, or for one camera with `deviceId`.
18307
+ *
18308
+ * Separate from {@link getEventStoreFootprint} rather than a field on it:
18309
+ * the two answer different questions on different axes, the per-camera one
18310
+ * is what the management table renders on every open, and nothing should
18311
+ * pay for a per-kind pass to draw it. See
18312
+ * {@link EventMediaKindBreakdownSchema} for why `unaccounted*` exists —
18313
+ * `kinds` is enumerated, `totalBytes` is not, and the gap must be visible
18314
+ * to anyone sizing a deletion against it.
18315
+ */
18316
+ getEventMediaFootprintByKind: method(z.object({ deviceId: z.number().int().optional() }), EventMediaKindBreakdownSchema, {
18317
+ kind: "query",
18318
+ auth: "admin"
18319
+ }),
18320
+ /**
18261
18321
  * Cluster-wide prune of events older than `olderThanMs` (exclusive) across
18262
18322
  * every camera, deleting each event's media in lockstep. Logged to the
18263
18323
  * events ops-log with `reason` (default `'retention'`). Returns the summed
@@ -21255,6 +21315,20 @@ var storageCapability = {
21255
21315
  listProviders: method(z.void(), z.array(ProviderListEntrySchema).readonly()),
21256
21316
  testConfig: method(z.object({
21257
21317
  providerId: z.string(),
21318
+ /**
21319
+ * The location this config is an UNSAVED edit of, when there is one.
21320
+ *
21321
+ * `listLocations` replaces every declared secret with the redaction
21322
+ * sentinel, so the edit modal's form state holds the sentinel for any
21323
+ * credential the operator did not retype — and posting that here
21324
+ * without a way to resolve it makes the provider try to authenticate
21325
+ * as `__camstack_redacted__` and report the operator's own working
21326
+ * password as wrong. Given this id, the orchestrator restores each
21327
+ * sentinel from the stored config (same rule as `upsertLocation`)
21328
+ * before dispatching. Omitted by the "Add location" wizard, where
21329
+ * every value was typed just now and nothing is stored yet.
21330
+ */
21331
+ locationId: z.string().optional(),
21258
21332
  config: z.record(z.string(), z.unknown())
21259
21333
  }), z.object({
21260
21334
  ok: z.boolean(),
@@ -36827,6 +36901,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
36827
36901
  addonId: null,
36828
36902
  access: "view"
36829
36903
  },
36904
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
36905
+ capName: "pipeline-analytics",
36906
+ capScope: "device",
36907
+ addonId: null,
36908
+ access: "view"
36909
+ },
36830
36910
  "pipelineAnalytics.getEventStoreFootprint": {
36831
36911
  capName: "pipeline-analytics",
36832
36912
  capScope: "device",
@@ -40492,6 +40572,11 @@ Object.freeze({
40492
40572
  form: "single",
40493
40573
  optional: false
40494
40574
  }],
40575
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
40576
+ name: "deviceId",
40577
+ form: "single",
40578
+ optional: true
40579
+ }],
40495
40580
  "pipelineAnalytics.getGroup": [{
40496
40581
  name: "deviceId",
40497
40582
  form: "single",
@@ -17876,6 +17876,50 @@ var EventStoreFootprintSchema = zod.z.object({
17876
17876
  totalBytes: zod.z.number().int(),
17877
17877
  devices: zod.z.array(EventStoreDeviceFootprintSchema).readonly()
17878
17878
  });
17879
+ /** Event-media footprint for one {@link MediaFileKind}. */
17880
+ var EventMediaKindFootprintSchema = zod.z.object({
17881
+ kind: MediaFileKindEnum,
17882
+ /** Media rows of this kind. */
17883
+ rows: zod.z.number().int(),
17884
+ /** Bytes on disk held by those rows. */
17885
+ bytes: zod.z.number().int()
17886
+ });
17887
+ /**
17888
+ * The media footprint broken down by KIND — the axis a deletion decision
17889
+ * actually turns on.
17890
+ *
17891
+ * A byte total says how much there is; it cannot say what is safe to remove.
17892
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
17893
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
17894
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
17895
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
17896
+ * nothing else, so sizing a deletion means summing per kind.
17897
+ *
17898
+ * ## Why `unaccounted*` exists
17899
+ *
17900
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
17901
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
17902
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
17903
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
17904
+ * retired code path, or by a version that knew a kind this one does not) would
17905
+ * otherwise vanish from the total silently, and an operator would delete
17906
+ * against a denominator smaller than the disk.
17907
+ *
17908
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
17909
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
17910
+ */
17911
+ var EventMediaKindBreakdownSchema = zod.z.object({
17912
+ /** Every media row in scope, from one unfiltered aggregate. */
17913
+ totalRows: zod.z.number().int(),
17914
+ /** Every media byte in scope, from that same aggregate. */
17915
+ totalBytes: zod.z.number().int(),
17916
+ /** Per-kind footprint, ordered by bytes descending. */
17917
+ kinds: zod.z.array(EventMediaKindFootprintSchema).readonly(),
17918
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
17919
+ unaccountedRows: zod.z.number().int(),
17920
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
17921
+ unaccountedBytes: zod.z.number().int()
17922
+ });
17879
17923
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
17880
17924
  var EventPruneCountsSchema = zod.z.object({
17881
17925
  motion: zod.z.number().int(),
@@ -18258,6 +18302,22 @@ var pipelineAnalyticsCapability = {
18258
18302
  auth: "admin"
18259
18303
  }),
18260
18304
  /**
18305
+ * The same media footprint, broken down by {@link MediaFileKind} instead of
18306
+ * by camera — fleet-wide, or for one camera with `deviceId`.
18307
+ *
18308
+ * Separate from {@link getEventStoreFootprint} rather than a field on it:
18309
+ * the two answer different questions on different axes, the per-camera one
18310
+ * is what the management table renders on every open, and nothing should
18311
+ * pay for a per-kind pass to draw it. See
18312
+ * {@link EventMediaKindBreakdownSchema} for why `unaccounted*` exists —
18313
+ * `kinds` is enumerated, `totalBytes` is not, and the gap must be visible
18314
+ * to anyone sizing a deletion against it.
18315
+ */
18316
+ getEventMediaFootprintByKind: method(zod.z.object({ deviceId: zod.z.number().int().optional() }), EventMediaKindBreakdownSchema, {
18317
+ kind: "query",
18318
+ auth: "admin"
18319
+ }),
18320
+ /**
18261
18321
  * Cluster-wide prune of events older than `olderThanMs` (exclusive) across
18262
18322
  * every camera, deleting each event's media in lockstep. Logged to the
18263
18323
  * events ops-log with `reason` (default `'retention'`). Returns the summed
@@ -21255,6 +21315,20 @@ var storageCapability = {
21255
21315
  listProviders: method(zod.z.void(), zod.z.array(ProviderListEntrySchema).readonly()),
21256
21316
  testConfig: method(zod.z.object({
21257
21317
  providerId: zod.z.string(),
21318
+ /**
21319
+ * The location this config is an UNSAVED edit of, when there is one.
21320
+ *
21321
+ * `listLocations` replaces every declared secret with the redaction
21322
+ * sentinel, so the edit modal's form state holds the sentinel for any
21323
+ * credential the operator did not retype — and posting that here
21324
+ * without a way to resolve it makes the provider try to authenticate
21325
+ * as `__camstack_redacted__` and report the operator's own working
21326
+ * password as wrong. Given this id, the orchestrator restores each
21327
+ * sentinel from the stored config (same rule as `upsertLocation`)
21328
+ * before dispatching. Omitted by the "Add location" wizard, where
21329
+ * every value was typed just now and nothing is stored yet.
21330
+ */
21331
+ locationId: zod.z.string().optional(),
21258
21332
  config: zod.z.record(zod.z.string(), zod.z.unknown())
21259
21333
  }), zod.z.object({
21260
21334
  ok: zod.z.boolean(),
@@ -36827,6 +36901,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
36827
36901
  addonId: null,
36828
36902
  access: "view"
36829
36903
  },
36904
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
36905
+ capName: "pipeline-analytics",
36906
+ capScope: "device",
36907
+ addonId: null,
36908
+ access: "view"
36909
+ },
36830
36910
  "pipelineAnalytics.getEventStoreFootprint": {
36831
36911
  capName: "pipeline-analytics",
36832
36912
  capScope: "device",
@@ -40492,6 +40572,11 @@ Object.freeze({
40492
40572
  form: "single",
40493
40573
  optional: false
40494
40574
  }],
40575
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
40576
+ name: "deviceId",
40577
+ form: "single",
40578
+ optional: true
40579
+ }],
40495
40580
  "pipelineAnalytics.getGroup": [{
40496
40581
  name: "deviceId",
40497
40582
  form: "single",
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-Keu5TDO7.js");
3
+ const require_dist = require("./dist-CCIBlacf.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_formatter = require("./formatter-DqAKDlvN.js");
@@ -26,7 +26,7 @@ require("./builtins/system-config/index.js");
26
26
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
27
27
  const require_file_data_plane = require("./file-data-plane-DO8KbxCe.js");
28
28
  const require_tls$1 = require("./tls-BxQlomxd.js");
29
- const require_manifest_system_deps = require("./manifest-system-deps-DYv4ZPo2.js");
29
+ const require_manifest_system_deps = require("./manifest-system-deps-alrkBKVQ.js");
30
30
  const require_resource_monitor = require("./resource-monitor-CdnzxBLP.js");
31
31
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
32
32
  let zod = require("zod");
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { $ as isObjectInput, $t as parseJsonUnknown$1, Bt as ReadinessTimeoutError, Ft as DEVICE_STATUS_METHOD, Gt as createEvent, Ht as asJsonObject$1, J as extractNestedAddonId, Jt as expandCapMethods, Kt as emitDownForOwnedCaps, Nt as DATAPLANE_SECRET_HEADER$1, Pt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Q as isCollectionArrayMethod, Qt as parseJsonObject, T as addonSettingsCapability, Ut as asNumber, Wt as asString$1, Z as isArrayOutputSchema, _t as resolveMethodAuth, bt as scopesAllowDeviceCap, ct as looseSchema, dt as objectInputDeclaresAddonId, en as readinessKey, f as LOG_LEVEL_RANK, h as RUNTIME_DEFAULTS, in as EventCategory$1, it as lifecycleJobSchema, jt as errMsg$1, mt as procedureAuthKey, nn as scopeKey, nt as isVoidInput, p as METHOD_ACCESS_MAP, rt as kebabToCamel, st as logLevelAtMost, t as ALL_CAPABILITY_DEFINITIONS, tn as resolveCapMount, yt as scopesAllowAddon, zt as ReadinessRegistry } from "./dist-D4xNBlJM.mjs";
2
+ import { $ as isObjectInput, $t as parseJsonUnknown$1, Bt as ReadinessTimeoutError, Ft as DEVICE_STATUS_METHOD, Gt as createEvent, Ht as asJsonObject$1, J as extractNestedAddonId, Jt as expandCapMethods, Kt as emitDownForOwnedCaps, Nt as DATAPLANE_SECRET_HEADER$1, Pt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Q as isCollectionArrayMethod, Qt as parseJsonObject, T as addonSettingsCapability, Ut as asNumber, Wt as asString$1, Z as isArrayOutputSchema, _t as resolveMethodAuth, bt as scopesAllowDeviceCap, ct as looseSchema, dt as objectInputDeclaresAddonId, en as readinessKey, f as LOG_LEVEL_RANK, h as RUNTIME_DEFAULTS, in as EventCategory$1, it as lifecycleJobSchema, jt as errMsg$1, mt as procedureAuthKey, nn as scopeKey, nt as isVoidInput, p as METHOD_ACCESS_MAP, rt as kebabToCamel, st as logLevelAtMost, t as ALL_CAPABILITY_DEFINITIONS, tn as resolveCapMount, yt as scopesAllowAddon, zt as ReadinessRegistry } from "./dist-5Xzz_kCk.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
@@ -25,7 +25,7 @@ import "./builtins/system-config/index.mjs";
25
25
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
26
26
  import { a as parseTokenizedUrl, c as collectModelFiles, d as downloadModel, f as ensureModel, h as isModelDownloaded, i as parseRangeHeader, l as deleteModelFromDisk, m as getModelFilePath, n as contentTypeFor, o as resolveFilePath, p as fetchJson, r as createAuthenticatedFileServer, s as ModelDownloadService, t as createFileDataPlaneHandler, u as downloadFile } from "./file-data-plane-BhKdxJgf.mjs";
27
27
  import { C as registerLanHttpHandler, S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, b as bindPendingLanHttp, c as loadTlsCert, d as collectCertIdentity, f as CA_VALIDITY_DAYS, g as evaluateExistingCert, h as SERVER_AUTH_OID, i as writeExtraSans, l as reissueTlsLeaf, m as MAX_LEAF_VALIDITY_DAYS, n as readTlsAccessStatus, o as validateUploadedTls, p as LEAF_RENEWAL_WINDOW_DAYS, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, u as CA_COMMON_NAME, v as allFamiliesListenHost, x as closeLanHttp, y as applyLanHttp } from "./tls-DOTmtLCW.mjs";
28
- import { $ as FrameDecoder, $t as DECISIVE_HEAP_SPACES, A as createUdsEventBus, At as HEAP_WATCH_INTERVAL_MS, B as CapRouteError, Bt as buildHeapSample, C as ipcParentLink, Cn as diffEventPlane, Ct as resolveAddonClass, D as createHubCapForwardService, Dt as HEAP_RECLAIM_MIN_INTERVAL_MS, E as HUB_CAP_FWD_SERVICE, Et as createAddonDataPlaneFacility, F as LocalChildRegistry, Ft as RSS_BUDGET_REANNOUNCE_MIN_MS, G as PARENT_ROUTED_PROVIDER_ADDON_ID, Gt as hubMainRssBudget, H as callWithServiceDiscovery, Ht as createLoopDelayMeter, I as UDS_NO_ROUTE_PREFIX, It as RSS_BUDGET_RELEASE_RATIO, J as createLocalTransport, Jt as reclaimIntervalMs, K as __resetCapUsageRegistryForTests, Kt as nextRssBudgetState, L as AGENT_CAP_FWD_ACTION, Lt as RUNNER_HEAP_WATCH_INTERVAL_MS, M as createUdsLogger, Mt as HUB_MAIN_HEAP_WATCH_LABEL, N as createUdsLoggerWithControl, Nt as HUB_MAIN_RSS_BUDGET_MB, O as createParentUnownedCallHandler, Ot as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, P as LocalChildClient, Pt as HUB_RSS_BUDGET_ENV, Q as localEndpointPath, Qt as strandedMb, R as AGENT_CAP_FWD_SERVICE, Rt as RUNNER_RSS_BUDGET_ENV, S as buildLinkChain, Sn as createEventPlaneReader, St as installManifestNativeDeps, T as HUB_CAP_FWD_ACTION, Tt as runNpm, U as readMoleculerFanoutMode, Ut as createV8Reclaimer, V as classifyCapRoute, Vt as createDeferredHeapWatchSink, W as CapUsageRegistry, Wt as describeRss, X as UdsLocalTransportServer, Xt as startHeapWatch, Y as UdsLocalTransportClient, Yt as shouldReclaim, Z as SocketChannel, Zt as startRunnerHeapWatch, _ as AddonDepsManager, _n as sampleSocketDirection, _t as serializeTypedArrays, a as createUdsAddonContext, an as heapSpaceField, b as brokerCallForCap, bn as EVENT_PLANE_TOP_N, bt as CapabilityUnavailableError, c as getOrInitReadinessRegistryForClient, cn as EMPTY_SOCKET_PLANE_BASELINE, ct as createAddonService, d as clusterEventTopic, dn as createSocketPlaneReader, dt as capActionName, en as HEAP_SPACE_REPORT_MIN_MB, et as encodeFrame, f as getBrokerEventBus, fn as diffSocketPlane, ft as capActionSuffix, g as subscribePassthrough, gn as recordSocketFrame, gt as deserializeTypedArrays, h as setNodeEventInterest, hn as createSocketDirectionCounters, ht as parseCapAction, i as createAddonContext, in as heapSnapshotAuthorised, j as udsChildLogToWorkerEntry, jt as HEAP_WATCH_WARN_RATIO, k as createUdsEventBridge, kt as HEAP_RECLAIM_TRIGGER_MB, l as setHubConnected, ln as SOCKET_PLANE_TOP_N, lt as validateProviderRegistrations, m as registerEventBusService, mn as EMPTY_SOCKET_DIRECTION, mt as capServiceName, n as installManifestPythonDeps, nn as emitHeapDiagnosticReport, nt as buildUdsNativeCapProxy, o as getWorkerDeviceRegistry, on as readHeapSpaces, ot as mountNativeCapService, p as getMoleculerEventStats, pn as formatSocketPlane, pt as capBareAction, q as getCapUsageRegistry, qt as parseRssBudgetMb, r as adaptBrokerToCluster, rn as formatHeapSpaces, rt as createBrokerDeviceManagerApi, s as getOrInitReadinessRegistry, sn as selectReportedSpaces, t as installManifestSystemDeps, tn as RUNNER_HEAP_SNAPSHOT_ENV, tt as buildNativeCapProxy, u as EVENT_TOPIC_PREFIX, un as createSocketPlaneMeter, ut as NATIVE_PROVIDER_SERVICE_INFIX, v as createKernelHwAccel, vn as socketDirectionBytes, vt as DeviceRegistry, w as localProviderLink, wn as formatEventPlane, wt as resolveNpmInvocation, x as brokerTransportLink, xn as createEventPlaneMeter, xt as copyBundledNativeModules, y as resolveHwAccel, yn as socketDirectionMessages, yt as CapabilityHandle, z as CapRouteResolver, zt as ZERO_LOOP_DELAY } from "./manifest-system-deps-CiCuev2R.mjs";
28
+ import { $ as FrameDecoder, $t as DECISIVE_HEAP_SPACES, A as createUdsEventBus, At as HEAP_WATCH_INTERVAL_MS, B as CapRouteError, Bt as buildHeapSample, C as ipcParentLink, Cn as diffEventPlane, Ct as resolveAddonClass, D as createHubCapForwardService, Dt as HEAP_RECLAIM_MIN_INTERVAL_MS, E as HUB_CAP_FWD_SERVICE, Et as createAddonDataPlaneFacility, F as LocalChildRegistry, Ft as RSS_BUDGET_REANNOUNCE_MIN_MS, G as PARENT_ROUTED_PROVIDER_ADDON_ID, Gt as hubMainRssBudget, H as callWithServiceDiscovery, Ht as createLoopDelayMeter, I as UDS_NO_ROUTE_PREFIX, It as RSS_BUDGET_RELEASE_RATIO, J as createLocalTransport, Jt as reclaimIntervalMs, K as __resetCapUsageRegistryForTests, Kt as nextRssBudgetState, L as AGENT_CAP_FWD_ACTION, Lt as RUNNER_HEAP_WATCH_INTERVAL_MS, M as createUdsLogger, Mt as HUB_MAIN_HEAP_WATCH_LABEL, N as createUdsLoggerWithControl, Nt as HUB_MAIN_RSS_BUDGET_MB, O as createParentUnownedCallHandler, Ot as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, P as LocalChildClient, Pt as HUB_RSS_BUDGET_ENV, Q as localEndpointPath, Qt as strandedMb, R as AGENT_CAP_FWD_SERVICE, Rt as RUNNER_RSS_BUDGET_ENV, S as buildLinkChain, Sn as createEventPlaneReader, St as installManifestNativeDeps, T as HUB_CAP_FWD_ACTION, Tt as runNpm, U as readMoleculerFanoutMode, Ut as createV8Reclaimer, V as classifyCapRoute, Vt as createDeferredHeapWatchSink, W as CapUsageRegistry, Wt as describeRss, X as UdsLocalTransportServer, Xt as startHeapWatch, Y as UdsLocalTransportClient, Yt as shouldReclaim, Z as SocketChannel, Zt as startRunnerHeapWatch, _ as AddonDepsManager, _n as sampleSocketDirection, _t as serializeTypedArrays, a as createUdsAddonContext, an as heapSpaceField, b as brokerCallForCap, bn as EVENT_PLANE_TOP_N, bt as CapabilityUnavailableError, c as getOrInitReadinessRegistryForClient, cn as EMPTY_SOCKET_PLANE_BASELINE, ct as createAddonService, d as clusterEventTopic, dn as createSocketPlaneReader, dt as capActionName, en as HEAP_SPACE_REPORT_MIN_MB, et as encodeFrame, f as getBrokerEventBus, fn as diffSocketPlane, ft as capActionSuffix, g as subscribePassthrough, gn as recordSocketFrame, gt as deserializeTypedArrays, h as setNodeEventInterest, hn as createSocketDirectionCounters, ht as parseCapAction, i as createAddonContext, in as heapSnapshotAuthorised, j as udsChildLogToWorkerEntry, jt as HEAP_WATCH_WARN_RATIO, k as createUdsEventBridge, kt as HEAP_RECLAIM_TRIGGER_MB, l as setHubConnected, ln as SOCKET_PLANE_TOP_N, lt as validateProviderRegistrations, m as registerEventBusService, mn as EMPTY_SOCKET_DIRECTION, mt as capServiceName, n as installManifestPythonDeps, nn as emitHeapDiagnosticReport, nt as buildUdsNativeCapProxy, o as getWorkerDeviceRegistry, on as readHeapSpaces, ot as mountNativeCapService, p as getMoleculerEventStats, pn as formatSocketPlane, pt as capBareAction, q as getCapUsageRegistry, qt as parseRssBudgetMb, r as adaptBrokerToCluster, rn as formatHeapSpaces, rt as createBrokerDeviceManagerApi, s as getOrInitReadinessRegistry, sn as selectReportedSpaces, t as installManifestSystemDeps, tn as RUNNER_HEAP_SNAPSHOT_ENV, tt as buildNativeCapProxy, u as EVENT_TOPIC_PREFIX, un as createSocketPlaneMeter, ut as NATIVE_PROVIDER_SERVICE_INFIX, v as createKernelHwAccel, vn as socketDirectionBytes, vt as DeviceRegistry, w as localProviderLink, wn as formatEventPlane, wt as resolveNpmInvocation, x as brokerTransportLink, xn as createEventPlaneMeter, xt as copyBundledNativeModules, y as resolveHwAccel, yn as socketDirectionMessages, yt as CapabilityHandle, z as CapRouteResolver, zt as ZERO_LOOP_DELAY } from "./manifest-system-deps-shjDShSB.mjs";
29
29
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-BWmQ5i-o.mjs";
30
30
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
31
31
  import { z } from "zod";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- require("./dist-Keu5TDO7.js");
2
+ require("./dist-CCIBlacf.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  node_crypto = require_chunk.__toESM(node_crypto);
5
5
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,4 +1,4 @@
1
- import "./dist-D4xNBlJM.mjs";
1
+ import "./dist-5Xzz_kCk.mjs";
2
2
  import * as crypto$1 from "node:crypto";
3
3
  import { randomBytes, randomUUID } from "node:crypto";
4
4
  import { ensureBinary, ensureFfmpeg, ensurePython, installPythonPackages, installPythonRequirements } from "@camstack/types/node";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Keu5TDO7.js");
1
+ const require_dist = require("./dist-CCIBlacf.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { Ht as asJsonObject } from "./dist-D4xNBlJM.mjs";
1
+ import { Ht as asJsonObject } from "./dist-5Xzz_kCk.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.161",
3
+ "version": "1.2.162",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",