@camstack/system 1.2.169 → 1.2.170

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 (60) 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/data-store-dispatch.d.ts +18 -6
  42. package/dist/builtins/storage-orchestrator/hub-settings-forward.d.ts +68 -0
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +27 -3
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +235 -57
  45. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +235 -57
  46. package/dist/builtins/system-config/system-config.addon.js +1 -1
  47. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  48. package/dist/builtins/winston-logging/index.js +1 -1
  49. package/dist/builtins/winston-logging/index.mjs +1 -1
  50. package/dist/{dist-digPByP6.mjs → dist-1DEQFmTq.mjs} +165 -6
  51. package/dist/{dist-D6kBG4fg.js → dist-DsoVfJSR.js} +165 -6
  52. package/dist/hub-cap-forward-BdT320dq.mjs +53 -0
  53. package/dist/hub-cap-forward-DmHNjbB0.js +70 -0
  54. package/dist/index.js +6 -5
  55. package/dist/index.mjs +3 -2
  56. package/dist/{manifest-system-deps-onn-Eawl.mjs → manifest-system-deps-Da6sme9C.mjs} +3 -54
  57. package/dist/{manifest-system-deps-BjMNGEpl.js → manifest-system-deps-ir_XTNpe.js} +2 -71
  58. package/dist/{retired-settings-keys-B5D2hfoN.mjs → retired-settings-keys-ChS1Q2Kv.mjs} +1 -1
  59. package/dist/{retired-settings-keys-BywIz4dZ.js → retired-settings-keys-DTE5k4lU.js} +1 -1
  60. 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-BjMNGEpl.js");
2
+ const require_manifest_system_deps = require("./manifest-system-deps-ir_XTNpe.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-onn-Eawl.mjs";
1
+ import { $t as emitHeapDiagnosticReport, A as createUdsLoggerWithControl, Ft as RUNNER_RSS_BUDGET_ENV, Jt as startRunnerHeapWatch, a as createUdsAddonContext, bt as resolveAddonClass, it as setWorkerNativeCapsChangeListener, j as LocalChildClient, n as installManifestPythonDeps, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestSystemDeps, tt as getWorkerNativeCapProvider, yt as installManifestNativeDeps } from "./manifest-system-deps-Da6sme9C.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 errMsg, Nt as BaseAddon, T as addonPagesCapability, an as EventCategory } from "../../dist-digPByP6.mjs";
1
+ import { Mt as errMsg, Nt as BaseAddon, T as addonPagesCapability, an as EventCategory } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { D as addonWidgetsCapability, Mt as errMsg, Nt as BaseAddon, an as EventCategory } from "../../dist-digPByP6.mjs";
1
+ import { D as addonWidgetsCapability, Mt as errMsg, Nt as BaseAddon, an as EventCategory } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, O as alertsCapability, an as EventCategory, n as AlertSchema } from "../../dist-digPByP6.mjs";
1
+ import { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, O as alertsCapability, an as EventCategory, n as AlertSchema } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { A as backupCapability, Nt as BaseAddon, an as EventCategory } from "../../dist-digPByP6.mjs";
1
+ import { A as backupCapability, Nt as BaseAddon, an as EventCategory } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-digPByP6.mjs";
1
+ import { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
3
+ const require_dist = require("../../dist-DsoVfJSR.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 coreBlockAddonId, I as coreBlockIdFromAddonId, L as coreBlocksCapability, Mt as errMsg, Nt as BaseAddon, c as CoreBlockSchema, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, u as DeclaredDevices } from "../../dist-digPByP6.mjs";
1
+ import { F as coreBlockAddonId, I as coreBlockIdFromAddonId, L as coreBlocksCapability, Mt as errMsg, Nt as BaseAddon, c as CoreBlockSchema, o as CORE_BLOCKS_ADDON_ID, s as CORE_BLOCK_ADDON_PREFIX, u as DeclaredDevices } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-BywIz4dZ.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-DTE5k4lU.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 { H as deviceStateCapability, Ht as WELL_KNOWN_TAB_MAP, K as enumerateItemArrayFields, Lt as DeviceFeature, Mt as errMsg, N as buildStreamParamsConfigSchema, Nt as BaseAddon, Rt as DeviceRole, U as deviceStatusCapability, V as deviceManagerCapability, Zt as isDeviceConfigCap, a as CAP_NAMES_WITH_STATUS, an as EventCategory, d as DeviceStatusSchema, dt as normalizeUnit, in as sleep, pt as parseStreamParamsFormPatch, q as enumerateSchemaFields, t as ALL_CAPABILITY_DEFINITIONS, y as STREAM_PROFILE_META, yt as runtimeStatePolicyFor, zt as DeviceType } from "../../dist-digPByP6.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-B5D2hfoN.mjs";
1
+ import { H as deviceStateCapability, Ht as WELL_KNOWN_TAB_MAP, K as enumerateItemArrayFields, Lt as DeviceFeature, Mt as errMsg, N as buildStreamParamsConfigSchema, Nt as BaseAddon, Rt as DeviceRole, U as deviceStatusCapability, V as deviceManagerCapability, Zt as isDeviceConfigCap, a as CAP_NAMES_WITH_STATUS, an as EventCategory, d as DeviceStatusSchema, dt as normalizeUnit, in as sleep, pt as parseStreamParamsFormPatch, q as enumerateSchemaFields, t as ALL_CAPABILITY_DEFINITIONS, y as STREAM_PROFILE_META, yt as runtimeStatePolicyFor, zt as DeviceType } from "../../dist-1DEQFmTq.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-ChS1Q2Kv.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { J as evaluateSensorEdge, Kt as createEvent, Mt as errMsg, Nt as BaseAddon, W as doorbellCapability, _ as SOURCE_DEVICE_TYPES, an as EventCategory, g as SOURCE_CAPS, j as bareAddonId, nt as isSourceCap, tt as isSameAddonId, zt as DeviceType } from "../../dist-digPByP6.mjs";
1
+ import { J as evaluateSensorEdge, Kt as createEvent, Mt as errMsg, Nt as BaseAddon, W as doorbellCapability, _ as SOURCE_DEVICE_TYPES, an as EventCategory, g as SOURCE_CAPS, j as bareAddonId, nt as isSourceCap, tt as isSameAddonId, zt as DeviceType } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-digPByP6.mjs";
1
+ import { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
3
+ const require_dist = require("../../dist-DsoVfJSR.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 { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, an as EventCategory } from "../../dist-digPByP6.mjs";
1
+ import { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, an as EventCategory } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { Nt as BaseAddon, b as ScopedTokenSchema, k as authProviderCapability, kt as userManagementCapability, r as ApiKeyRecordSchema, w as UserRecordSchema } from "../../dist-digPByP6.mjs";
2
+ import { Nt as BaseAddon, b as ScopedTokenSchema, k as authProviderCapability, kt as userManagementCapability, r as ApiKeyRecordSchema, w as UserRecordSchema } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
3
+ const require_dist = require("../../dist-DsoVfJSR.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 { Nt as BaseAddon, an as EventCategory, ot as localNetworkCapability } from "../../dist-digPByP6.mjs";
1
+ import { Nt as BaseAddon, an as EventCategory, ot as localNetworkCapability } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-digPByP6.mjs";
1
+ import { Nt as BaseAddon, st as logDestinationCapability } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, Z as foldSnapshotByFunction, _t as resolveBucketMs, an as EventCategory, gt as reducePoints, ut as metricsProviderCapability } from "../../dist-digPByP6.mjs";
1
+ import { Kt as createEvent, Mt as errMsg, Nt as BaseAddon, Z as foldSnapshotByFunction, _t as resolveBucketMs, an as EventCategory, gt as reducePoints, ut as metricsProviderCapability } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { G as enumerateInferenceDevices, Jt as emitReadiness, Mt as errMsg, Nt as BaseAddon, St as scoreRuntimes, an as EventCategory, mt as platformProbeCapability } from "../../dist-digPByP6.mjs";
2
+ import { G as enumerateInferenceDevices, Jt as emitReadiness, Mt as errMsg, Nt as BaseAddon, St as scoreRuntimes, an as EventCategory, mt as platformProbeCapability } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { Nt as BaseAddon, an as EventCategory } from "../../dist-digPByP6.mjs";
1
+ import { Nt as BaseAddon, an as EventCategory } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { B as deriveBatteryPresence, Lt as DeviceFeature, M as batteryCapability, Mt as errMsg, Nt as BaseAddon, Ot as streamQualityLabel, Qt as nodePin, an as EventCategory, i as BatteryStatusSchema, j as bareAddonId, wt as snapshotCapability, zt as DeviceType } from "../../dist-digPByP6.mjs";
1
+ import { B as deriveBatteryPresence, Lt as DeviceFeature, M as batteryCapability, Mt as errMsg, Nt as BaseAddon, Ot as streamQualityLabel, Qt as nodePin, an as EventCategory, i as BatteryStatusSchema, j as bareAddonId, wt as snapshotCapability, zt as DeviceType } from "../../dist-1DEQFmTq.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-D6kBG4fg.js");
6
+ const require_dist = require("../../dist-DsoVfJSR.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 { Dt as storageProviderCapability, Nt as BaseAddon, X as filesystemBrowseCapability } from "../../dist-digPByP6.mjs";
1
+ import { Dt as storageProviderCapability, Nt as BaseAddon, X as filesystemBrowseCapability } from "../../dist-1DEQFmTq.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";
@@ -2,11 +2,23 @@ import { IDataStoreProvider, ISettingsStoreProvider } from '@camstack/types';
2
2
  /** How the dispatcher reaches the registered engines, read per call. */
3
3
  export type GetDataStoreEngines = () => readonly IDataStoreProvider[];
4
4
  /**
5
- * Build the `settings-store` provider that fronts the registered engines.
5
+ * How the dispatcher reaches the node that owns the store when THIS node
6
+ * does not — an agent, whose persistence is the hub's
7
+ * (`createHubSettingsForward`). Read per call for the same reason
8
+ * `getEngines` is: the broker reconnects, and a snapshot taken at
9
+ * construction time would go stale exactly when the hub came back.
6
10
  *
7
- * `getEngines` is read on every call, never captured: engines register
8
- * during boot and a runner respawn replaces the instance, so a snapshot
9
- * taken at construction time would go stale exactly when an addon crashed
10
- * and came back.
11
+ * `null` (and an omitted getter) means "there is no remote" a hub, where a
12
+ * remote could only be this very door, reached back through `$hub-cap-fwd`.
11
13
  */
12
- export declare function createDataStoreDispatch(getEngines: GetDataStoreEngines): ISettingsStoreProvider;
14
+ export type GetRemoteDataStore = () => ISettingsStoreProvider | null;
15
+ /**
16
+ * Build the `settings-store` provider that fronts the registered engines,
17
+ * with an optional remote behind it for a node that registers none.
18
+ *
19
+ * `getEngines` and `getRemote` are read on every call, never captured:
20
+ * engines register during boot and a runner respawn replaces the instance, so
21
+ * a snapshot taken at construction time would go stale exactly when an addon
22
+ * crashed and came back.
23
+ */
24
+ export declare function createDataStoreDispatch(getEngines: GetDataStoreEngines, getRemote?: GetRemoteDataStore): ISettingsStoreProvider;
@@ -0,0 +1,68 @@
1
+ import { IClusterBroker, IScopedLogger, ISettingsStoreProvider } from '@camstack/types';
2
+ /**
3
+ * The envelope `$hub-cap-fwd.forward` takes. Structurally
4
+ * `HubCapForwardParams` minus the routing hints this door never sets: a
5
+ * settings call carries no `deviceId`, pins no node (the hub's store is THE
6
+ * store) and asks for no native provider.
7
+ */
8
+ export interface HubForwardEnvelope {
9
+ readonly capName: string;
10
+ readonly method: string;
11
+ readonly args: unknown;
12
+ }
13
+ /**
14
+ * How a forward reaches the hub. Generic in the result so the provider's
15
+ * per-method return types flow through without a cast — the transport is the
16
+ * documented type boundary, exactly as it is for the generated cap routers'
17
+ * remote proxies.
18
+ */
19
+ export type HubForwardCall = <TResult>(envelope: HubForwardEnvelope) => Promise<TResult>;
20
+ /**
21
+ * Does THIS node hold its own data store?
22
+ *
23
+ * Unset or `'hub'` means hub — the launcher's own default, mirrored from
24
+ * `resolveNodeRole` (`server/backend/src/node-role.ts`) the same way
25
+ * `settingsStoreIsAuthoritativeHere` mirrors it, and duplicated rather than
26
+ * imported for the same reason: `@camstack/system` is a dependency OF the
27
+ * backend, not the other way round.
28
+ *
29
+ * Anything else is an agent, and an agent's answer is the hub's store.
30
+ */
31
+ export declare function nodeOwnsItsDataStore(env: NodeJS.ProcessEnv): boolean;
32
+ /**
33
+ * Build the `settings-store` provider that forwards to the hub.
34
+ *
35
+ * Every method is the same forward under the CAP name — never the engine
36
+ * name. The hub routes `settings-store` to its own door, which then picks its
37
+ * local engine; asking for `data-store-provider` would step around the door on
38
+ * the far side and lose whatever the door is for.
39
+ */
40
+ export declare function createHubSettingsForward(forward: HubForwardCall): ISettingsStoreProvider;
41
+ /**
42
+ * How long an agent waits for the hub to answer a settings call before the
43
+ * door rejects. Matches the agent's own `forwardToHub` budget in
44
+ * `server/backend/src/agent/main.ts` — the same hop, over the same action, so
45
+ * a shorter one here would only manufacture a timeout the transport did not
46
+ * have.
47
+ */
48
+ export declare const HUB_SETTINGS_FORWARD_TIMEOUT_MS = 60000;
49
+ /** What {@link resolveHubSettingsForward} needs. Narrow on purpose — fakeable. */
50
+ export interface HubSettingsForwardOptions {
51
+ readonly env: NodeJS.ProcessEnv;
52
+ /** `undefined` in a forked worker or a test harness — no cluster to reach. */
53
+ readonly broker: IClusterBroker | undefined;
54
+ readonly logger: Pick<IScopedLogger, 'info'>;
55
+ }
56
+ /**
57
+ * The whole decision, in one place: does this node's data door have the hub
58
+ * behind it, and how does it get there?
59
+ *
60
+ * `null` means "no remote" and the door keeps its old behaviour — it refuses
61
+ * when no engine is registered. That is the answer on a hub (which IS the
62
+ * store) and in any process with no cluster broker.
63
+ *
64
+ * Extracted from the addon so the gate is unit-testable without booting a
65
+ * `BaseAddon` — the same reason `data-store-dispatch.ts` and
66
+ * `provider-discovery.ts` exist.
67
+ */
68
+ export declare function resolveHubSettingsForward(options: HubSettingsForwardOptions): ISettingsStoreProvider | null;
@@ -37,14 +37,38 @@ export declare class StorageOrchestratorAddon extends BaseAddon<StorageOrchestra
37
37
  private readonly seedSubscriptionDisposers;
38
38
  constructor();
39
39
  protected onInitialize(): Promise<ProviderRegistration[]>;
40
+ /**
41
+ * The remote behind the data door on a node that owns no engine.
42
+ *
43
+ * `null` on a hub — the hub IS the store, and a hub that forwarded would
44
+ * route its own door back into itself through `$hub-cap-fwd`. `null` too
45
+ * when this process has no cluster broker (a forked worker, or a test
46
+ * harness); the door then behaves exactly as it always did and refuses.
47
+ *
48
+ * Built once and memoised. It is only consulted when `getEngines()` is
49
+ * empty, so on a hub — and on an agent rolled back to a local engine via
50
+ * `CAMSTACK_AGENT_LOCAL_DATA_STORE` — the resolve never runs a second time.
51
+ */
52
+ private hubForward;
53
+ private hubSettingsForward;
40
54
  protected onShutdown(): Promise<void>;
41
55
  onHubReachable(): Promise<void>;
42
56
  /**
43
57
  * Resolve the live engine from the capability registry and wrap it in a
44
58
  * `SqliteLocationStore`. Returns `null` when no engine has registered
45
- * yet — the service falls back to in-memory only. Production boot order
46
- * (`data-store-provider` precedes `storage` in `INFRA_CAPABILITIES`)
47
- * makes this the rare path.
59
+ * yet — the service falls back to in-memory only. On a HUB that is a
60
+ * boot-order window: `data-store-provider` precedes `storage` in
61
+ * `INFRA_CAPABILITIES`, so it is the rare path.
62
+ *
63
+ * On an AGENT it is permanent and intended, and the line says so. An agent
64
+ * boots no engine (`resolveAgentInfraCapabilities`), and this store must NOT
65
+ * be pointed at the hub-forwarding data door: `storage_locations` is keyed by
66
+ * a bare location id (`recordings:default`, `eventMedia:default`, …) which
67
+ * every node in the cluster shares, so an agent writing through the door
68
+ * would land on the HUB's rows. The locations an agent needs are re-seeded
69
+ * from its addon declarations at every boot; the operator's real, node-pinned
70
+ * locations live in the hub's own table (`__nodeId` in the config blob) and
71
+ * are dispatched to the agent's `storage-provider` from there.
48
72
  *
49
73
  * Reads the ENGINE, not the `settings-store` singleton: since D44 this
50
74
  * addon *is* that singleton, so asking the registry for it would hand