@camstack/system 1.2.358 → 1.2.359

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 (65) 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/autotrack/index.js +1 -1
  10. package/dist/builtins/autotrack/index.mjs +1 -1
  11. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  13. package/dist/builtins/calendars/calendars.addon.js +1 -1
  14. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  15. package/dist/builtins/camera-grid/index.js +1 -1
  16. package/dist/builtins/camera-grid/index.mjs +1 -1
  17. package/dist/builtins/composer/composer.addon.js +2 -2
  18. package/dist/builtins/composer/composer.addon.mjs +2 -2
  19. package/dist/builtins/console-logging/index.js +1 -1
  20. package/dist/builtins/console-logging/index.mjs +1 -1
  21. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  22. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  23. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  24. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  28. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  29. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  30. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  31. package/dist/builtins/local-network/address-book.d.ts +69 -0
  32. package/dist/builtins/local-network/local-network.addon.d.ts +38 -45
  33. package/dist/builtins/local-network/local-network.addon.js +359 -76
  34. package/dist/builtins/local-network/local-network.addon.mjs +360 -75
  35. package/dist/builtins/loki-logging/index.js +1 -1
  36. package/dist/builtins/loki-logging/index.mjs +1 -1
  37. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  38. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  39. package/dist/builtins/platform-probe/index.js +1 -1
  40. package/dist/builtins/platform-probe/index.mjs +1 -1
  41. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  42. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  43. package/dist/builtins/snapshot/index.js +1 -1
  44. package/dist/builtins/snapshot/index.mjs +1 -1
  45. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  46. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  47. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  48. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  49. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  50. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  51. package/dist/builtins/system-config/system-config.addon.js +1 -1
  52. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  53. package/dist/builtins/winston-logging/index.js +1 -1
  54. package/dist/builtins/winston-logging/index.mjs +1 -1
  55. package/dist/{child-cap-dispatch-C2dFiu87.mjs → child-cap-dispatch-Dm1TRDCr.mjs} +1 -1
  56. package/dist/{child-cap-dispatch-BWk99kmA.js → child-cap-dispatch-t61ohDpb.js} +1 -1
  57. package/dist/{composition-sources-BaHPH661.js → composition-sources-CCU_KizO.js} +1 -1
  58. package/dist/{composition-sources-D8Hapyav.mjs → composition-sources-CHlfWHl6.mjs} +1 -1
  59. package/dist/{dist-DzAHit0a.js → dist-W_X44h-s.js} +386 -106
  60. package/dist/{dist-D3bhbMY3.mjs → dist-pTfD_M-U.mjs} +353 -103
  61. package/dist/index.js +2 -2
  62. package/dist/index.mjs +2 -2
  63. package/dist/{retired-settings-keys-B6AFmtlO.mjs → retired-settings-keys-CK_ifret.mjs} +1 -1
  64. package/dist/{retired-settings-keys-CkXoPjKy.js → retired-settings-keys-jglEzgWR.js} +1 -1
  65. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_child_cap_dispatch = require("./child-cap-dispatch-BWk99kmA.js");
2
+ const require_child_cap_dispatch = require("./child-cap-dispatch-t61ohDpb.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { $t as RUNNER_RSS_BUDGET_ENV, Ft as resolveAddonClass, H as createUdsLoggerWithControl, Pt as installManifestNativeDeps, U as LocalChildClient, _t as getWorkerNativeCapSnapshot, f as installManifestSystemDeps, fn as startRunnerHeapWatch, g as createUdsAddonContext, gt as getWorkerNativeCapProvider, i as killOwnRunnerGroupAfterParentLoss, n as createChildCapDispatch, p as installManifestPythonDeps, u as startRunnerParentDeathWatchdog, wn as emitHeapDiagnosticReport, xt as validateProviderRegistrations, yt as setWorkerNativeCapsChangeListener } from "./child-cap-dispatch-C2dFiu87.mjs";
1
+ import { $t as RUNNER_RSS_BUDGET_ENV, Ft as resolveAddonClass, H as createUdsLoggerWithControl, Pt as installManifestNativeDeps, U as LocalChildClient, _t as getWorkerNativeCapSnapshot, f as installManifestSystemDeps, fn as startRunnerHeapWatch, g as createUdsAddonContext, gt as getWorkerNativeCapProvider, i as killOwnRunnerGroupAfterParentLoss, n as createChildCapDispatch, p as installManifestPythonDeps, u as startRunnerParentDeathWatchdog, wn as emitHeapDiagnosticReport, xt as validateProviderRegistrations, yt as setWorkerNativeCapsChangeListener } from "./child-cap-dispatch-Dm1TRDCr.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-B4Cf4O_X.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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.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 { $n as errMsg, Tr as EventCategory, U as addonPagesCapability, er as BaseAddon } from "../../dist-D3bhbMY3.mjs";
1
+ import { Ar as EventCategory, U as addonPagesCapability, ar as BaseAddon, ir as errMsg } from "../../dist-pTfD_M-U.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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.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 { $n as errMsg, G as addonWidgetsCapability, Tr as EventCategory, er as BaseAddon } from "../../dist-D3bhbMY3.mjs";
1
+ import { Ar as EventCategory, G as addonWidgetsCapability, ar as BaseAddon, ir as errMsg } from "../../dist-pTfD_M-U.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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.js");
7
7
  //#region src/builtins/alerts/device-label.ts
8
8
  /**
9
9
  * Operator-facing device label for alert messages.
@@ -1,4 +1,4 @@
1
- import { $n as errMsg, K as alertsCapability, Tr as EventCategory, er as BaseAddon, n as AlertSchema, ur as createEvent } from "../../dist-D3bhbMY3.mjs";
1
+ import { Ar as EventCategory, K as alertsCapability, ar as BaseAddon, hr as createEvent, ir as errMsg, n as AlertSchema } from "../../dist-pTfD_M-U.mjs";
2
2
  //#region src/builtins/alerts/device-label.ts
3
3
  /**
4
4
  * Operator-facing device label for alert messages.
@@ -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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.js");
7
7
  //#region src/builtins/autotrack/autotrack-config.ts
8
8
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
9
9
  deadZoneFraction: .5,
@@ -1,4 +1,4 @@
1
- import { $n as errMsg, S as FIRST_LEVEL_MACRO_CLASSES, Tr as EventCategory, Y as bareAddonId, er as BaseAddon, gr as isEvent, ln as ptzAutotrackCapability } from "../../dist-D3bhbMY3.mjs";
1
+ import { Ar as EventCategory, S as FIRST_LEVEL_MACRO_CLASSES, Y as bareAddonId, ar as BaseAddon, fn as ptzAutotrackCapability, ir as errMsg, xr as isEvent } from "../../dist-pTfD_M-U.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.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 { Dn as storageOccupancyCapability, J as backupCapability, Tr as EventCategory, Yt as mayWriteToLocation, _r as nodePin, er as BaseAddon, g as DATABASE_SNAPSHOT_SUFFIX, wr as toNodeId } from "../../dist-D3bhbMY3.mjs";
1
+ import { Ar as EventCategory, J as backupCapability, Mn as storageOccupancyCapability, Qt as mayWriteToLocation, Sr as nodePin, ar as BaseAddon, g as DATABASE_SNAPSHOT_SUFFIX, kr as toNodeId } from "../../dist-pTfD_M-U.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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/calendars/calendar-color.ts
@@ -1,4 +1,4 @@
1
- import { $ as calendarsCapability, er as BaseAddon, p as CalendarPreferencesSchema } from "../../dist-D3bhbMY3.mjs";
1
+ import { $ as calendarsCapability, ar as BaseAddon, p as CalendarPreferencesSchema } from "../../dist-pTfD_M-U.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/calendars/calendar-color.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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.js");
7
7
  let zod = require("zod");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $n as errMsg, $t as motionCapability, A as MOTION_CLOSE_AFTER_MS, Qn as DeviceType, Tr as EventCategory, Xn as DeviceFeature, Xt as memoizePinnedFfmpeg, b as DeclaredDevices, er as BaseAddon, et as cameraGridLayoutCapability, i as BaseDevice, kn as streamCatalogCapability, mr as hydrateSchema, pt as declarationOwnerNodeId, ur as createEvent, wn as snapshotCapability, y as DERIVED_CAMERA_SILENCED_CAP_NAMES, zn as buildFfmpegArgs } from "../../dist-D3bhbMY3.mjs";
1
+ import { $t as memoizePinnedFfmpeg, A as MOTION_CLOSE_AFTER_MS, Ar as EventCategory, Pn as streamCatalogCapability, Wn as buildFfmpegArgs, ar as BaseAddon, b as DeclaredDevices, et as cameraGridLayoutCapability, hr as createEvent, i as BaseDevice, ir as errMsg, kn as snapshotCapability, mt as declarationOwnerNodeId, nn as motionCapability, rr as DeviceType, tr as DeviceFeature, y as DERIVED_CAMERA_SILENCED_CAP_NAMES, yr as hydrateSchema } from "../../dist-pTfD_M-U.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } 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-DzAHit0a.js");
7
- const require_composition_sources = require("../../composition-sources-BaHPH661.js");
6
+ const require_dist = require("../../dist-W_X44h-s.js");
7
+ const require_composition_sources = require("../../composition-sources-CCU_KizO.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/shared/device-state-changed.ts
10
10
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -1,5 +1,5 @@
1
- import { $n as errMsg, Bn as cloneStatefulExpressionMemory, Gn as compositionSliceKey, Hn as composedDeviceStableId, Jn as disarmRoseMemory, Kn as compositionSourceKey, Ot as expressionContainsBuiltinCall, Qn as DeviceType, Rn as COMPOSER_ADDON_ID, Tr as EventCategory, Tt as evaluateCompositionField, Un as compositionFeatureEnabled, Vn as composedDeviceRef, Wn as compositionItemFieldPath, Yn as toExpressionValue, Z as buildCapabilityLookup, b as DeclaredDevices, er as BaseAddon, i as BaseDevice, l as COMPOSED_ITEM_FIXED_FIELDS, nt as composerCapability, on as planComposition, qn as createStatefulExpressionMemory, rt as compositionFieldKey, t as ALL_CAPABILITY_DEFINITIONS, ur as createEvent } from "../../dist-D3bhbMY3.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-D8Hapyav.mjs";
1
+ import { $n as disarmRoseMemory, Ar as EventCategory, Et as evaluateCompositionField, Gn as cloneStatefulExpressionMemory, Jn as compositionFeatureEnabled, Kn as composedDeviceRef, Qn as createStatefulExpressionMemory, Un as COMPOSER_ADDON_ID, Xn as compositionSliceKey, Yn as compositionItemFieldPath, Z as buildCapabilityLookup, Zn as compositionSourceKey, ar as BaseAddon, b as DeclaredDevices, er as toExpressionValue, hr as createEvent, i as BaseDevice, ir as errMsg, it as compositionFieldKey, kt as expressionContainsBuiltinCall, l as COMPOSED_ITEM_FIXED_FIELDS, ln as planComposition, qn as composedDeviceStableId, rr as DeviceType, rt as composerCapability, t as ALL_CAPABILITY_DEFINITIONS } from "../../dist-pTfD_M-U.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-CHlfWHl6.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/shared/device-state-changed.ts
5
5
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.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 { Gt as logDestinationCapability, er as BaseAddon } from "../../dist-D3bhbMY3.mjs";
1
+ import { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-pTfD_M-U.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,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-DzAHit0a.js");
4
- const require_composition_sources = require("../../composition-sources-BaHPH661.js");
3
+ const require_dist = require("../../dist-W_X44h-s.js");
4
+ const require_composition_sources = require("../../composition-sources-CCU_KizO.js");
5
5
  let node_crypto = require("node:crypto");
6
6
  let _camstack_types_node = require("@camstack/types/node");
7
7
  let node_fs_promises = require("node:fs/promises");
@@ -1,5 +1,5 @@
1
- import { $n as errMsg, Kn as compositionSourceKey, Mn as validateComposition, Vn as composedDeviceRef, Z as buildCapabilityLookup, _t as describeComposableCaps, at as coreBlockAddonId, b as DeclaredDevices, ct as coreBlockSourceKind, d as CORE_BLOCKS_ADDON_ID, dn as replacedFieldKeys, en as normalizeCoreBlockWrite, er as BaseAddon, f as CORE_BLOCK_ADDON_PREFIX, it as compositionSourceRefs, lt as coreBlocksCapability, m as CoreBlockSchema, mn as resolveCoreBlockFiles, mr as hydrateSchema, on as planComposition, ot as coreBlockComposition, pn as resolveCoreBlockEntry, st as coreBlockIdFromAddonId, t as ALL_CAPABILITY_DEFINITIONS, u as COMPOSER_RUNNER_ID } from "../../dist-D3bhbMY3.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-D8Hapyav.mjs";
1
+ import { Kn as composedDeviceRef, Ln as validateComposition, Z as buildCapabilityLookup, Zn as compositionSourceKey, _n as resolveCoreBlockFiles, ar as BaseAddon, at as compositionSourceRefs, b as DeclaredDevices, ct as coreBlockIdFromAddonId, d as CORE_BLOCKS_ADDON_ID, f as CORE_BLOCK_ADDON_PREFIX, gn as resolveCoreBlockEntry, ir as errMsg, ln as planComposition, lt as coreBlockSourceKind, m as CoreBlockSchema, mn as replacedFieldKeys, ot as coreBlockAddonId, rn as normalizeCoreBlockWrite, st as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, u as COMPOSER_RUNNER_ID, ut as coreBlocksCapability, vt as describeComposableCaps, yr as hydrateSchema } from "../../dist-pTfD_M-U.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-CHlfWHl6.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { customizationBlockName } from "@camstack/types/node";
@@ -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-DzAHit0a.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-CkXoPjKy.js");
6
+ const require_dist = require("../../dist-W_X44h-s.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-jglEzgWR.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
10
10
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,5 +1,5 @@
1
- import { $n as errMsg, Bt as legacyAutoLinkIds, C as FieldClaimModeSchema, Cn as siteZoneKey, Cr as sleep$1, Ct as enumerateItemArrayFields, D as LocationIconIdSchema, Dt as expandContainer, I as STREAM_PROFILE_META, Mt as formatMinutes, Q as buildStreamParamsConfigSchema, Qn as DeviceType, Tr as EventCategory, Wt as locationIconKey, Xn as DeviceFeature, Zn as DeviceRole, bt as deviceStateCapability, c as CAP_NAMES_WITH_STATUS, er as BaseAddon, hr as isDeviceConfigCap, ht as defineExtensionSlotProvider, in as parseStreamParamsFormPatch, k as MINUTES_PER_DAY, o as CAMERA_SWITCH_ORDER, or as WELL_KNOWN_TAB_MAP, t as ALL_CAPABILITY_DEFINITIONS, tn as normalizeUnit, ut as createDeviceExtensionProvider, v as DAY_NAMES, vn as runtimeStatePolicyFor, vt as deviceExtensionCapability, w as FieldClaimSchema, wt as enumerateSchemaFields, x as DeviceStatusSchema, xt as deviceStatusCapability, yt as deviceManagerCapability } from "../../dist-D3bhbMY3.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-B6AFmtlO.mjs";
1
+ import { Ar as EventCategory, C as FieldClaimModeSchema, Cn as runtimeStatePolicyFor, D as LocationIconIdSchema, I as STREAM_PROFILE_META, Nt as formatMinutes, On as siteZoneKey, Or as sleep$1, Ot as expandContainer, Q as buildStreamParamsConfigSchema, St as deviceStatusCapability, Tt as enumerateSchemaFields, Ut as legacyAutoLinkIds, ar as BaseAddon, br as isDeviceConfigCap, bt as deviceManagerCapability, c as CAP_NAMES_WITH_STATUS, dr as WELL_KNOWN_TAB_MAP, dt as createDeviceExtensionProvider, gt as defineExtensionSlotProvider, in as normalizeUnit, ir as errMsg, k as MINUTES_PER_DAY, nr as DeviceRole, o as CAMERA_SWITCH_ORDER, qt as locationIconKey, rr as DeviceType, sn as parseStreamParamsFormPatch, t as ALL_CAPABILITY_DEFINITIONS, tr as DeviceFeature, v as DAY_NAMES, w as FieldClaimSchema, wt as enumerateItemArrayFields, x as DeviceStatusSchema, xt as deviceStateCapability, yt as deviceExtensionCapability } from "../../dist-pTfD_M-U.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-CK_ifret.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
@@ -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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.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 { Gt as logDestinationCapability, er as BaseAddon } from "../../dist-D3bhbMY3.mjs";
1
+ import { Jt as logDestinationCapability, ar as BaseAddon } from "../../dist-pTfD_M-U.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-DzAHit0a.js");
3
+ const require_dist = require("../../dist-W_X44h-s.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 { $n as errMsg, P as RecordingStatusSchema, Tr as EventCategory, er as BaseAddon, j as RECORDING_SOURCE_CAMSTACK_ADDON, ur as createEvent } from "../../dist-D3bhbMY3.mjs";
1
+ import { Ar as EventCategory, P as RecordingStatusSchema, ar as BaseAddon, hr as createEvent, ir as errMsg, j as RECORDING_SOURCE_CAMSTACK_ADDON } from "../../dist-pTfD_M-U.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-DzAHit0a.js");
6
+ const require_dist = require("../../dist-W_X44h-s.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  node_crypto = require_chunk.__toESM(node_crypto);
@@ -1,5 +1,5 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { H as UserRecordSchema, L as ScopedTokenSchema, er as BaseAddon, jn as userManagementCapability, q as authProviderCapability, r as ApiKeyRecordSchema } from "../../dist-D3bhbMY3.mjs";
2
+ import { H as UserRecordSchema, In as userManagementCapability, L as ScopedTokenSchema, ar as BaseAddon, q as authProviderCapability, r as ApiKeyRecordSchema } from "../../dist-pTfD_M-U.mjs";
3
3
  import { z } from "zod";
4
4
  import * as crypto$2 from "node:crypto";
5
5
  import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
@@ -0,0 +1,69 @@
1
+ import { ConnectionEndpoint, HubAddressBook, HubAddressFlags, HubAddressRole } from '@camstack/types';
2
+ export interface CustomAddress {
3
+ readonly baseUrl: string;
4
+ readonly label: string;
5
+ }
6
+ /** The address-book keys of the addon's stored settings. */
7
+ export interface StoredAddressSettings {
8
+ readonly customAddresses: unknown;
9
+ readonly viewerBaseUrls: readonly string[];
10
+ readonly notificationBaseUrl: string;
11
+ readonly agentBaseUrl: string;
12
+ readonly signInBaseUrl: string;
13
+ }
14
+ export interface AddressBookState {
15
+ readonly custom: readonly CustomAddress[];
16
+ readonly flags: HubAddressFlags;
17
+ }
18
+ /** Parse the stored custom list; a malformed store reads as empty, never throws. */
19
+ export declare function parseCustomAddresses(raw: unknown): readonly CustomAddress[];
20
+ /**
21
+ * The address book as it stands: stored custom addresses, plus every
22
+ * single-valued flag that names neither a detected address, a custom one nor
23
+ * the app link, promoted to a custom address (see the module doc).
24
+ */
25
+ export declare function normalizeAddressBook(stored: StoredAddressSettings, detectedUrls: ReadonlySet<string>): AddressBookState;
26
+ /** The stored-settings patch that persists `state`. */
27
+ export declare function addressBookPatch(state: AddressBookState): {
28
+ readonly customAddresses: readonly CustomAddress[];
29
+ readonly viewerBaseUrls: readonly string[];
30
+ readonly notificationBaseUrl: string;
31
+ readonly agentBaseUrl: string;
32
+ readonly signInBaseUrl: string;
33
+ };
34
+ export declare function withCustomAddress(state: AddressBookState, entry: CustomAddress): AddressBookState;
35
+ /** Drop a custom address and every flag it carried (those roles turn automatic). */
36
+ export declare function withoutCustomAddress(state: AddressBookState, baseUrl: string): AddressBookState;
37
+ /** Every role back to automatic for `role`. */
38
+ export declare function withRoleAutomatic(state: AddressBookState, role: HubAddressRole): AddressBookState;
39
+ /**
40
+ * Flag or unflag `baseUrl` for `role`. A single-valued role flagged here moves
41
+ * off every other address (it is one URL); unflagging the address that carries
42
+ * it returns the role to automatic. The app link flagged for notifications IS
43
+ * the automatic answer, stored as automatic — one representation. `viewer`
44
+ * toggles inside the set; toggling while automatic starts from the automatic
45
+ * set (`autoViewer`) so the other addresses keep racing.
46
+ */
47
+ export declare function withRoleFlag(state: AddressBookState, role: HubAddressRole, baseUrl: string, enabled: boolean, autoViewer: readonly string[]): AddressBookState;
48
+ /** What a row may be flagged with. */
49
+ export declare function eligibleRoles(endpoint: ConnectionEndpoint): readonly HubAddressRole[];
50
+ export declare const CUSTOM_ADDRESS_PRIORITY = 200;
51
+ /** A custom address as a palette entry (`kind: 'custom'`). */
52
+ export declare function customEndpoint(entry: CustomAddress): ConnectionEndpoint;
53
+ /**
54
+ * The palette a client races: the detected endpoints plus the custom
55
+ * addresses flagged `viewer` (a detected URL is never listed twice).
56
+ */
57
+ export declare function withViewerCustomEndpoints(detected: readonly ConnectionEndpoint[], state: AddressBookState): ConnectionEndpoint[];
58
+ export interface AddressBookInputs {
59
+ /** Detected endpoints in the scheme the rows are shown in. */
60
+ readonly rowsPalette: readonly ConnectionEndpoint[];
61
+ /** Detected endpoints over HTTPS — what agents and sign-in resolve over. */
62
+ readonly httpsPalette: readonly ConnectionEndpoint[];
63
+ readonly appLink: ConnectionEndpoint;
64
+ readonly appLinkHub: string | null;
65
+ }
66
+ /** Every role's answer — the resolvers from `@camstack/types`, nothing else. */
67
+ export declare function resolveRoles(state: AddressBookState, viewerPalette: readonly ConnectionEndpoint[], httpsPalette: readonly ConnectionEndpoint[]): HubAddressBook['roles'];
68
+ /** The Addresses table: app link, detected rows, then custom-only rows. */
69
+ export declare function buildAddressBook(state: AddressBookState, inputs: AddressBookInputs): HubAddressBook;
@@ -1,4 +1,5 @@
1
1
  import { AdvertisedLocalPort, ConnectionEndpoint, LocalInterface, ProviderRegistration, BaseAddon } from '@camstack/types';
2
+ import { CustomAddress } from './address-book.js';
2
3
  /**
3
4
  * Cached mesh-reachable endpoint, learned from the `mesh-network`
4
5
  * provider via the `MeshNetworkChanged` event-tail + pull-reconcile.
@@ -32,18 +33,16 @@ interface LocalNetworkConfig {
32
33
  * allowlist" (true + empty → respect operator's choice). */
33
34
  readonly bootSeeded: boolean;
34
35
  /**
35
- * The endpoint outbound artifacts (notification attachment links, deep
36
- * links) must be addressed by. Empty = AUTO: the first public candidate,
37
- * never loopback. Stored VERBATIM rather than as an index into the candidate
38
- * list — interfaces come and go, and an index would silently re-point at a
39
- * different address after a reboot.
36
+ * Role flag `notifications` (D709): the ONE address notification links are
37
+ * addressed by. Empty = automatic (the CamStack app link). Stored VERBATIM
38
+ * rather than as an index into the candidate list — interfaces come and go,
39
+ * and an index would silently re-point after a reboot. See `address-book.ts`.
40
40
  */
41
41
  readonly notificationBaseUrl: string;
42
- /**
43
- * Base URLs the SDK / viewer should race. Empty = AUTO (LAN IPv4 + public
44
- * tunnel). Stored verbatim, same contract as `notificationBaseUrl`.
45
- */
42
+ /** Role flag `viewer`: the addresses the apps race. Empty = automatic. */
46
43
  readonly viewerBaseUrls: readonly string[];
44
+ /** Operator-entered custom addresses (`address-book.ts`). Parsed on read. */
45
+ readonly customAddresses: readonly CustomAddress[];
47
46
  /** LAN HTTP listener. Default true — native apps skip the private cert. */
48
47
  readonly httpEnabled: boolean;
49
48
  /** Dedicated HTTP port. Must not equal the HTTPS listen port. */
@@ -51,17 +50,12 @@ interface LocalNetworkConfig {
51
50
  /** Operator-declared DNS name advertised instead of the raw LAN IP. Empty = none. */
52
51
  readonly localHostname: string;
53
52
  /**
54
- * "Hub address for agents": the base URL agents pull addon bundles and
55
- * models from, when auto-detection names one they cannot reach (Docker
56
- * bridge networking, NAT, VPN). Empty = automatic. Validated on write
57
- * (`validateHubAddressOverride`): http(s), never loopback.
53
+ * Role flag `agents`: the ONE address agents and LAN devices pull from.
54
+ * Empty = automatic. The key is the D729 amendment's override, kept so a
55
+ * rolled-back hub reads it with the meaning it knew.
58
56
  */
59
57
  readonly agentBaseUrl: string;
60
- /**
61
- * "Public address for sign-in links": magic-link e-mails, the OIDC
62
- * callback, the WebAuthn relying party, OAuth2's hub URL. Empty =
63
- * automatic. Same validation as `agentBaseUrl`.
64
- */
58
+ /** Role flag `signIn`: the ONE sign-in address. Empty = automatic. Same key story. */
65
59
  readonly signInBaseUrl: string;
66
60
  }
67
61
  export declare class LocalNetworkAddon extends BaseAddon<LocalNetworkConfig> {
@@ -81,33 +75,42 @@ export declare class LocalNetworkAddon extends BaseAddon<LocalNetworkConfig> {
81
75
  private meshEndpoint;
82
76
  constructor();
83
77
  /**
84
- * Both audiences' hub address: the override when set, else the automatic
85
- * pick over the HTTPS palette (`resolveHubAddress`). The one reading every
86
- * consumer goes through — `getHubAddresses`.
78
+ * The detected palettes, with the mesh reconciled once: `https` (what agents
79
+ * and sign-in resolve over, and the app link's `hub=`) and `http` (what the
80
+ * viewer race resolves over, as before).
87
81
  */
88
- private snapshotHubAddresses;
82
+ private palettes;
83
+ /** The stored address book, normalised against what is detected now. */
84
+ private addressState;
85
+ /** The role flags alone — they do not depend on what is detected. */
86
+ private storedFlags;
87
+ /** `getAddresses`: the Addresses table and every role's answer. */
88
+ private addressBook;
89
89
  /**
90
- * The effective flagged notification address: the operator's explicit
91
- * choice, else AUTO — the CamStack app link (D709, operator decision
92
- * 2026-10-06; before it AUTO was the tunnel, then the mesh). The app link is
93
- * not a hub address: the NC's signed media and buttons keep their own hub
94
- * ladder when it is flagged; only viewer taps take the app form.
90
+ * Apply one change to the address book and persist it, normalised (a flag
91
+ * naming an address in no row becomes a custom address in the same write).
95
92
  */
96
- private resolveNotificationEndpoint;
93
+ private changeAddressBook;
94
+ /** The deprecated `getHubAddresses` shape, from the role resolvers. */
95
+ private snapshotHubAddresses;
97
96
  /**
98
- * The `hub=` an app link carries: the best public HTTPS address in this
99
- * cap's own palette (tunnel, then mesh) — so it can never disagree with
100
- * what the Network page lists. See `pickAppLinkHub`.
97
+ * Flag / unflag `baseUrl` for `role`, or (`baseUrl: null`) return the role
98
+ * to automatic. Validated: the address must be a row (detected, custom, or
99
+ * the app link for notifications), never loopback, and `signIn` on plain
100
+ * http only when accepted. A refusal stores nothing.
101
101
  */
102
- private resolveAppLinkHub;
102
+ private setRole;
103
103
  private notificationEndpointSnapshot;
104
104
  private snapshotViewerEndpoints;
105
105
  /**
106
- * Palette shown in the Network tab: LAN IPv4, stable LAN IPv6, public,
107
- * mesh. The viewer HTTP/WS race is a subset (`selectViewerEndpoints`) —
108
- * IPv6 stays in this list because ICE/WebRTC gathers it regardless.
106
+ * Palette shown to clients: LAN IPv4, stable LAN IPv6, public, mesh, and
107
+ * the custom addresses flagged `viewer` (`kind: 'custom'`). The viewer
108
+ * HTTP/WS race is a subset (`selectViewerEndpoints`) — IPv6 stays in this
109
+ * list because ICE/WebRTC gathers it regardless.
109
110
  */
110
111
  private buildAdvertisedEndpoints;
112
+ /** The DETECTED palette from the cached interface/tunnel/mesh state. */
113
+ private endpointsNow;
111
114
  protected onInitialize(): Promise<ProviderRegistration[]>;
112
115
  protected globalSettingsSchema(): import('@camstack/types').ConfigUISchema;
113
116
  protected onConfigChanged(): Promise<void>;
@@ -247,16 +250,6 @@ export interface LanHttpAdvertisement {
247
250
  */
248
251
  export declare function appLinkEndpoint(): ConnectionEndpoint;
249
252
  export declare function buildEndpoints(interfaces: readonly LocalInterface[], port: number, includeLoopback: boolean, ipv4Only: boolean, publicHostname: string, scheme?: 'http' | 'https', meshEndpoint?: MeshEndpointCache | null, lanHttp?: LanHttpAdvertisement | null): ConnectionEndpoint[];
250
- /** AUTO viewer race: LAN IPv4 + the public tunnel. Never IPv6, mesh, or loopback. */
251
- export declare function isDefaultViewerEndpoint(endpoint: ConnectionEndpoint): boolean;
252
- /**
253
- * The URLs the SDK should race for API / viewer access.
254
- *
255
- * Empty `viewerBaseUrls` = AUTO (IPv4 + public tunnel). A non-empty list is
256
- * the operator's pin; if none of those URLs are in the current palette,
257
- * fall back to AUTO rather than racing an empty set.
258
- */
259
- export declare function selectViewerEndpoints(endpoints: readonly ConnectionEndpoint[], viewerBaseUrls: readonly string[]): ConnectionEndpoint[];
260
253
  /**
261
254
  * First-boot heuristic: which addresses should the allowlist start
262
255
  * with? Includes LAN + Wi-Fi IPv4 addresses + plausible IPv6: