@camstack/system 1.2.331 → 1.2.332

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/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.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/camera-grid/index.js +1 -1
  12. package/dist/builtins/camera-grid/index.mjs +1 -1
  13. package/dist/builtins/composer/composer.addon.js +2 -2
  14. package/dist/builtins/composer/composer.addon.mjs +2 -2
  15. package/dist/builtins/console-logging/index.js +1 -1
  16. package/dist/builtins/console-logging/index.mjs +1 -1
  17. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  18. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  19. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  20. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  21. package/dist/builtins/hub-forwarder/index.js +1 -1
  22. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  23. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  24. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  25. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  26. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  27. package/dist/builtins/local-network/local-network.addon.js +1 -1
  28. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  29. package/dist/builtins/loki-logging/index.js +1 -1
  30. package/dist/builtins/loki-logging/index.mjs +1 -1
  31. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  32. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  33. package/dist/builtins/platform-probe/index.js +1 -1
  34. package/dist/builtins/platform-probe/index.mjs +1 -1
  35. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  36. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  37. package/dist/builtins/snapshot/index.js +1 -1
  38. package/dist/builtins/snapshot/index.mjs +1 -1
  39. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  40. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  41. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  42. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  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/{composition-sources-aEEer5gE.mjs → composition-sources-BpyaHvoR.mjs} +1 -1
  50. package/dist/{composition-sources-BXZorHDO.js → composition-sources-DK--XR5V.js} +1 -1
  51. package/dist/{dist-CoG8lY6H.mjs → dist-BEPK2RUO.mjs} +101 -15
  52. package/dist/{dist-DRUzy1SF.js → dist-CH3jfPMi.js} +101 -15
  53. package/dist/index.js +1 -1
  54. package/dist/index.mjs +1 -1
  55. package/dist/{retired-settings-keys-BY9H1I2b.js → retired-settings-keys-C5mSevGV.js} +1 -1
  56. package/dist/{retired-settings-keys-BcJDpASY.mjs → retired-settings-keys-tDI1g7ab.mjs} +1 -1
  57. package/package.json +1 -1
@@ -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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Hn as errMsg, Un as BaseAddon, V as addonPagesCapability, mr as EventCategory } from "../../dist-CoG8lY6H.mjs";
1
+ import { Hn as errMsg, Un as BaseAddon, V as addonPagesCapability, mr as EventCategory } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Hn as errMsg, U as addonWidgetsCapability, Un as BaseAddon, mr as EventCategory } from "../../dist-CoG8lY6H.mjs";
1
+ import { Hn as errMsg, U as addonWidgetsCapability, Un as BaseAddon, mr as EventCategory } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { $n as createEvent, Hn as errMsg, Un as BaseAddon, W as alertsCapability, mr as EventCategory, n as AlertSchema } from "../../dist-CoG8lY6H.mjs";
1
+ import { $n as createEvent, Hn as errMsg, Un as BaseAddon, W as alertsCapability, mr as EventCategory, n as AlertSchema } from "../../dist-BEPK2RUO.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
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Hn as errMsg, Un as BaseAddon, ar as isEvent, b as FIRST_LEVEL_MACRO_CLASSES, mr as EventCategory, q as bareAddonId, rn as ptzAutotrackCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { Hn as errMsg, Un as BaseAddon, ar as isEvent, b as FIRST_LEVEL_MACRO_CLASSES, mr as EventCategory, q as bareAddonId, rn as ptzAutotrackCapability } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Gt as mayWriteToLocation, K as backupCapability, Un as BaseAddon, m as DATABASE_SNAPSHOT_SUFFIX, mr as EventCategory, or as nodePin, pr as toNodeId, vn as storageOccupancyCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { Gt as mayWriteToLocation, K as backupCapability, Un as BaseAddon, m as DATABASE_SNAPSHOT_SUFFIX, mr as EventCategory, or as nodePin, pr as toNodeId, vn as storageOccupancyCapability } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 createEvent, Hn as errMsg, Kt as memoizePinnedFfmpeg, O as MOTION_CLOSE_AFTER_MS, Un as BaseAddon, Vn as DeviceType, Yt as motionCapability, Z as cameraGridLayoutCapability, _ as DERIVED_CAMERA_SILENCED_CAP_NAMES, bn as streamCatalogCapability, hn as snapshotCapability, i as BaseDevice, kn as buildFfmpegArgs, mr as EventCategory, rr as hydrateSchema, ut as declarationOwnerNodeId, v as DeclaredDevices, zn as DeviceFeature } from "../../dist-CoG8lY6H.mjs";
1
+ import { $n as createEvent, Hn as errMsg, Kt as memoizePinnedFfmpeg, O as MOTION_CLOSE_AFTER_MS, Un as BaseAddon, Vn as DeviceType, Yt as motionCapability, Z as cameraGridLayoutCapability, _ as DERIVED_CAMERA_SILENCED_CAP_NAMES, bn as streamCatalogCapability, hn as snapshotCapability, i as BaseDevice, kn as buildFfmpegArgs, mr as EventCategory, rr as hydrateSchema, ut as declarationOwnerNodeId, v as DeclaredDevices, zn as DeviceFeature } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
7
- const require_composition_sources = require("../../composition-sources-BXZorHDO.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.js");
7
+ const require_composition_sources = require("../../composition-sources-DK--XR5V.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 { $ as composerCapability, $n as createEvent, An as cloneStatefulExpressionMemory, Fn as compositionSliceKey, Hn as errMsg, In as compositionSourceKey, Ln as createStatefulExpressionMemory, Mn as composedDeviceStableId, Nn as compositionFeatureEnabled, On as COMPOSER_ADDON_ID, Pn as compositionItemFieldPath, Rn as toExpressionValue, St as evaluateCompositionField, Un as BaseAddon, Vn as DeviceType, Y as buildCapabilityLookup, c as COMPOSED_ITEM_FIXED_FIELDS, en as planComposition, et as compositionFieldKey, i as BaseDevice, jn as composedDeviceRef, mr as EventCategory, t as ALL_CAPABILITY_DEFINITIONS, v as DeclaredDevices } from "../../dist-CoG8lY6H.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-aEEer5gE.mjs";
1
+ import { $ as composerCapability, $n as createEvent, An as cloneStatefulExpressionMemory, Fn as compositionSliceKey, Hn as errMsg, In as compositionSourceKey, Ln as createStatefulExpressionMemory, Mn as composedDeviceStableId, Nn as compositionFeatureEnabled, On as COMPOSER_ADDON_ID, Pn as compositionItemFieldPath, Rn as toExpressionValue, St as evaluateCompositionField, Un as BaseAddon, Vn as DeviceType, Y as buildCapabilityLookup, c as COMPOSED_ITEM_FIXED_FIELDS, en as planComposition, et as compositionFieldKey, i as BaseDevice, jn as composedDeviceRef, mr as EventCategory, t as ALL_CAPABILITY_DEFINITIONS, v as DeclaredDevices } from "../../dist-BEPK2RUO.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-BpyaHvoR.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
4
- const require_composition_sources = require("../../composition-sources-BXZorHDO.js");
3
+ const require_dist = require("../../dist-CH3jfPMi.js");
4
+ const require_composition_sources = require("../../composition-sources-DK--XR5V.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 { Cn as validateComposition, Hn as errMsg, In as compositionSourceKey, Un as BaseAddon, Y as buildCapabilityLookup, an as replacedFieldKeys, at as coreBlockSourceKind, d as CORE_BLOCK_ADDON_PREFIX, en as planComposition, f as CoreBlockSchema, it as coreBlockIdFromAddonId, jn as composedDeviceRef, l as COMPOSER_RUNNER_ID, mt as describeComposableCaps, nt as coreBlockAddonId, ot as coreBlocksCapability, rt as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, tt as compositionSourceRefs, u as CORE_BLOCKS_ADDON_ID, v as DeclaredDevices } from "../../dist-CoG8lY6H.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-aEEer5gE.mjs";
1
+ import { Cn as validateComposition, Hn as errMsg, In as compositionSourceKey, Un as BaseAddon, Y as buildCapabilityLookup, an as replacedFieldKeys, at as coreBlockSourceKind, d as CORE_BLOCK_ADDON_PREFIX, en as planComposition, f as CoreBlockSchema, it as coreBlockIdFromAddonId, jn as composedDeviceRef, l as COMPOSER_RUNNER_ID, mt as describeComposableCaps, nt as coreBlockAddonId, ot as coreBlocksCapability, rt as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, tt as compositionSourceRefs, u as CORE_BLOCKS_ADDON_ID, v as DeclaredDevices } from "../../dist-BEPK2RUO.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-BpyaHvoR.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { customizationBlockName } from "@camstack/types/node";
5
5
  import * as fs from "node:fs/promises";
@@ -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-DRUzy1SF.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-BY9H1I2b.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-C5mSevGV.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 { $t as parseStreamParamsFormPatch, Bn as DeviceRole, Bt as locationIconKey, D as MINUTES_PER_DAY, Hn as errMsg, It as legacyAutoLinkIds, Ot as formatMinutes, P as STREAM_PROFILE_META, S as FieldClaimSchema, T as LocationIconIdSchema, Un as BaseAddon, Vn as DeviceType, X as buildStreamParamsConfigSchema, Xt as normalizeUnit, Yn as WELL_KNOWN_TAB_MAP, _t as deviceStateCapability, bt as enumerateItemArrayFields, fr as sleep$1, ft as defineExtensionSlotProvider, g as DAY_NAMES, gt as deviceManagerCapability, ht as deviceExtensionCapability, ir as isDeviceConfigCap, ln as runtimeStatePolicyFor, mn as siteZoneKey, mr as EventCategory, o as CAMERA_SWITCH_ORDER, s as CAP_NAMES_WITH_STATUS, st as createDeviceExtensionProvider, t as ALL_CAPABILITY_DEFINITIONS, vt as deviceStatusCapability, wt as expandContainer, x as FieldClaimModeSchema, xt as enumerateSchemaFields, y as DeviceStatusSchema, zn as DeviceFeature } from "../../dist-CoG8lY6H.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-BcJDpASY.mjs";
1
+ import { $t as parseStreamParamsFormPatch, Bn as DeviceRole, Bt as locationIconKey, D as MINUTES_PER_DAY, Hn as errMsg, It as legacyAutoLinkIds, Ot as formatMinutes, P as STREAM_PROFILE_META, S as FieldClaimSchema, T as LocationIconIdSchema, Un as BaseAddon, Vn as DeviceType, X as buildStreamParamsConfigSchema, Xt as normalizeUnit, Yn as WELL_KNOWN_TAB_MAP, _t as deviceStateCapability, bt as enumerateItemArrayFields, fr as sleep$1, ft as defineExtensionSlotProvider, g as DAY_NAMES, gt as deviceManagerCapability, ht as deviceExtensionCapability, ir as isDeviceConfigCap, ln as runtimeStatePolicyFor, mn as siteZoneKey, mr as EventCategory, o as CAMERA_SWITCH_ORDER, s as CAP_NAMES_WITH_STATUS, st as createDeviceExtensionProvider, t as ALL_CAPABILITY_DEFINITIONS, vt as deviceStatusCapability, wt as expandContainer, x as FieldClaimModeSchema, xt as enumerateSchemaFields, y as DeviceStatusSchema, zn as DeviceFeature } from "../../dist-BEPK2RUO.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-tDI1g7ab.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
3
+ const require_dist = require("../../dist-CH3jfPMi.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 createEvent, Hn as errMsg, M as RecordingStatusSchema, Un as BaseAddon, k as RECORDING_SOURCE_CAMSTACK_ADDON, mr as EventCategory } from "../../dist-CoG8lY6H.mjs";
1
+ import { $n as createEvent, Hn as errMsg, M as RecordingStatusSchema, Un as BaseAddon, k as RECORDING_SOURCE_CAMSTACK_ADDON, mr as EventCategory } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { B as UserRecordSchema, F as ScopedTokenSchema, G as authProviderCapability, Sn as userManagementCapability, Un as BaseAddon, r as ApiKeyRecordSchema } from "../../dist-CoG8lY6H.mjs";
2
+ import { B as UserRecordSchema, F as ScopedTokenSchema, G as authProviderCapability, Sn as userManagementCapability, Un as BaseAddon, r as ApiKeyRecordSchema } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
3
+ const require_dist = require("../../dist-CH3jfPMi.js");
4
4
  const require_tls = require("../../tls-D_wUeOTD.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 { Un as BaseAddon, mr as EventCategory, zt as localNetworkCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { Un as BaseAddon, mr as EventCategory, zt as localNetworkCapability } from "../../dist-BEPK2RUO.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-IM-v7JV4.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.js");
7
7
  const require_proc_stat = require("../../proc-stat-DL-WUOhl.js");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_fs = require("node:fs");
@@ -1,4 +1,4 @@
1
- import { $n as createEvent, Dt as foldSnapshotByFunction, Hn as errMsg, Un as BaseAddon, in as reducePoints, mr as EventCategory, on as resolveBucketMs, qt as metricsProviderCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { $n as createEvent, Dt as foldSnapshotByFunction, Hn as errMsg, Un as BaseAddon, in as reducePoints, mr as EventCategory, on as resolveBucketMs, qt as metricsProviderCapability } from "../../dist-BEPK2RUO.mjs";
2
2
  import { a as parseProcStat, i as nodeProcReader, n as elapsedSecSince, o as parseProcStatusRss, r as lifetimeCpuPercent, t as commandFromCmdline } from "../../proc-stat-CbC55Kqi.mjs";
3
3
  import { access, readFile, readdir } from "node:fs/promises";
4
4
  import * as fs from "node:fs";
@@ -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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.js");
7
7
  let node_fs = require("node:fs");
8
8
  node_fs = require_chunk.__toESM(node_fs);
9
9
  let node_child_process = require("node:child_process");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Hn as errMsg, Un as BaseAddon, fn as scoreRuntimes, mr as EventCategory, tn as platformProbeCapability, tr as emitReadiness, yt as enumerateInferenceDevices } from "../../dist-CoG8lY6H.mjs";
2
+ import { Hn as errMsg, Un as BaseAddon, fn as scoreRuntimes, mr as EventCategory, tn as platformProbeCapability, tr as emitReadiness, yt as enumerateInferenceDevices } from "../../dist-BEPK2RUO.mjs";
3
3
  import * as fs from "node:fs";
4
4
  import { execFile } from "node:child_process";
5
5
  import * as os from "node:os";
@@ -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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Un as BaseAddon, mr as EventCategory } from "../../dist-CoG8lY6H.mjs";
1
+ import { Un as BaseAddon, mr as EventCategory } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.js");
7
7
  const require_snapshot_courtesy = require("../../snapshot-courtesy-Cqs7GkOV.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { Hn as errMsg, J as batteryCapability, Kt as memoizePinnedFfmpeg, Un as BaseAddon, Vn as DeviceType, a as BatteryStatusSchema, hn as snapshotCapability, mr as EventCategory, or as nodePin, pt as deriveBatteryPresence, q as bareAddonId, xn as streamQualityLabel, zn as DeviceFeature } from "../../dist-CoG8lY6H.mjs";
1
+ import { Hn as errMsg, J as batteryCapability, Kt as memoizePinnedFfmpeg, Un as BaseAddon, Vn as DeviceType, a as BatteryStatusSchema, hn as snapshotCapability, mr as EventCategory, or as nodePin, pt as deriveBatteryPresence, q as bareAddonId, xn as streamQualityLabel, zn as DeviceFeature } from "../../dist-BEPK2RUO.mjs";
2
2
  import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-CZPvteq2.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 filesystemBrowseCapability, Un as BaseAddon, yn as storageProviderCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { Et as filesystemBrowseCapability, Un as BaseAddon, yn as storageProviderCapability } from "../../dist-BEPK2RUO.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";
@@ -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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.js");
7
7
  const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { A as REDACTED_SECRET, Ct as evictionPolicyOfLocation, Dn as withLocationMode, Gt as mayWriteToLocation, I as StorageCleanupJobSchema, Jt as modeMayWrite, L as StorageLocationModeSchema, Lt as legacyModeOf, Mt as isLocationEnabled, Q as collectSecretConfigKeys, R as StorageLocationTypeSchema, Un as BaseAddon, Wt as mayReadLocation, _n as storageMigrationCapability, gn as storageCapability, kt as gbToBytes, mr as EventCategory, pn as settingsStoreCapability, sn as resolveLocationMode, sr as parseJsonObject, w as LegacyStorageLocationDefaultSchema, z as StorageMigrationJobSchema } from "../../dist-CoG8lY6H.mjs";
1
+ import { A as REDACTED_SECRET, Ct as evictionPolicyOfLocation, Dn as withLocationMode, Gt as mayWriteToLocation, I as StorageCleanupJobSchema, Jt as modeMayWrite, L as StorageLocationModeSchema, Lt as legacyModeOf, Mt as isLocationEnabled, Q as collectSecretConfigKeys, R as StorageLocationTypeSchema, Un as BaseAddon, Wt as mayReadLocation, _n as storageMigrationCapability, gn as storageCapability, kt as gbToBytes, mr as EventCategory, pn as settingsStoreCapability, sn as resolveLocationMode, sr as parseJsonObject, w as LegacyStorageLocationDefaultSchema, z as StorageMigrationJobSchema } from "../../dist-BEPK2RUO.mjs";
2
2
  import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Hn as errMsg, Un as BaseAddon, rr as hydrateSchema } from "../../dist-CoG8lY6H.mjs";
1
+ import { Hn as errMsg, Un as BaseAddon, rr as hydrateSchema } from "../../dist-BEPK2RUO.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-DRUzy1SF.js");
6
+ const require_dist = require("../../dist-CH3jfPMi.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 { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-CoG8lY6H.mjs";
1
+ import { Un as BaseAddon, Vt as logDestinationCapability } from "../../dist-BEPK2RUO.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";
@@ -1,4 +1,4 @@
1
- import { Hn as errMsg, In as compositionSourceKey } from "./dist-CoG8lY6H.mjs";
1
+ import { Hn as errMsg, In as compositionSourceKey } from "./dist-BEPK2RUO.mjs";
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DRUzy1SF.js");
1
+ const require_dist = require("./dist-CH3jfPMi.js");
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -21396,6 +21396,37 @@ z.object({
21396
21396
  firstAt: z.number(),
21397
21397
  lastAt: z.number()
21398
21398
  });
21399
+ var NC_ALARM_TRIGGERED_MAX_SEC = 3600;
21400
+ var NcAlarmDelaySecSchema = z.number().int().min(0).max(600);
21401
+ var NcAlarmTriggeredSecSchema = z.number().int().min(0).max(NC_ALARM_TRIGGERED_MAX_SEC);
21402
+ var uniqueModes = (entries) => new Set(entries.map((e) => e.mode)).size === entries.length;
21403
+ /** One mode's OVERRIDES. An absent field inherits the global value (D697). */
21404
+ var NcAlarmModeDelaysSchema = z.object({
21405
+ mode: AlarmArmModeSchema,
21406
+ exitDelaySec: NcAlarmDelaySecSchema.optional(),
21407
+ entryDelaySec: NcAlarmDelaySecSchema.optional(),
21408
+ triggeredDurationSec: NcAlarmTriggeredSecSchema.optional()
21409
+ });
21410
+ var NcAlarmModeDelaysListSchema = z.array(NcAlarmModeDelaysSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
21411
+ /**
21412
+ * One mode's EDIT in a patch: a number sets the override, `null` removes it (the mode inherits
21413
+ * again), an absent field leaves it alone. Per field, so two editors changing two different
21414
+ * delays of one mode never undo each other.
21415
+ */
21416
+ var NcAlarmModeDelaysEditSchema = z.object({
21417
+ mode: AlarmArmModeSchema,
21418
+ exitDelaySec: NcAlarmDelaySecSchema.nullable().optional(),
21419
+ entryDelaySec: NcAlarmDelaySecSchema.nullable().optional(),
21420
+ triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional()
21421
+ });
21422
+ var NcAlarmModeDelaysEditListSchema = z.array(NcAlarmModeDelaysEditSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
21423
+ /** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
21424
+ var NcAlarmNonBlockingEditSchema = z.object({
21425
+ mode: AlarmArmModeSchema,
21426
+ deviceId: z.number().int().positive(),
21427
+ /** true = on the list (may be open, does not block); false = off the list (blocks). */
21428
+ nonBlocking: z.boolean()
21429
+ });
21399
21430
  /**
21400
21431
  * One arm mode's non-blocking list: devices that may be open when that mode
21401
21432
  * arms, without the arm being refused.
@@ -21409,10 +21440,10 @@ var NcAlarmNonBlockingSchema = z.object({
21409
21440
  * meaning a reader could agree on (union? the last one?), so they are refused
21410
21441
  * at the boundary rather than interpreted.
21411
21442
  */
21412
- var NcAlarmNonBlockingListSchema = z.array(NcAlarmNonBlockingSchema).max(8).refine((lists) => new Set(lists.map((l) => l.mode)).size === lists.length, { message: "nonBlocking: at most one list per arm mode" });
21443
+ var NcAlarmNonBlockingListSchema = z.array(NcAlarmNonBlockingSchema).max(8).refine(uniqueModes, { message: "nonBlocking: at most one list per arm mode" });
21413
21444
  /**
21414
- * The three durations the panel's state machine runs on, who hears about its
21415
- * transitions, and which openings each mode tolerates.
21445
+ * The three durations — global, and per mode since D697 — the panel's state
21446
+ * machine runs on, who hears about its transitions, and which openings each mode tolerates.
21416
21447
  *
21417
21448
  * They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
21418
21449
  * `alarm-panel` is `deviceNative` and its other provider mirrors somebody
@@ -21422,15 +21453,15 @@ var NcAlarmNonBlockingListSchema = z.array(NcAlarmNonBlockingSchema).max(8).refi
21422
21453
  */
21423
21454
  var NcAlarmSettingsSchema = z.object({
21424
21455
  /** Grace period between arming and the mode taking effect. 0 = immediate. */
21425
- exitDelaySec: z.number().int().min(0).max(600),
21456
+ exitDelaySec: NcAlarmDelaySecSchema,
21426
21457
  /** Grace period between a trigger and the alarm firing. 0 = immediate. */
21427
- entryDelaySec: z.number().int().min(0).max(600),
21458
+ entryDelaySec: NcAlarmDelaySecSchema,
21428
21459
  /**
21429
21460
  * How long `triggered` lasts before the panel re-arms itself.
21430
21461
  * **0 = until an operator disarms it** — the behaviour before this field
21431
21462
  * existed, and therefore what an untouched install keeps doing.
21432
21463
  */
21433
- triggeredDurationSec: z.number().int().min(0).max(3600),
21464
+ triggeredDurationSec: NcAlarmTriggeredSecSchema,
21434
21465
  /**
21435
21466
  * Deprecated by D630 — every transition is announced. Parsed, never read;
21436
21467
  * remove after one release. Optional so an older admin's patch (which still
@@ -21453,17 +21484,30 @@ var NcAlarmSettingsSchema = z.object({
21453
21484
  * per mode is meaningful. Defaulted to `[]` so a blob stored before D630
21454
21485
  * parses as "every opening blocks" — the behaviour it was written under.
21455
21486
  */
21456
- nonBlocking: NcAlarmNonBlockingListSchema.default([])
21487
+ nonBlocking: NcAlarmNonBlockingListSchema.default([]),
21488
+ /**
21489
+ * Per arm mode, the delays that mode OVERRIDES (D697). A mode with no entry, or an entry
21490
+ * without a field, uses the global value above — so `[]`, the default, is exactly the
21491
+ * behaviour of a blob stored before this field existed. Read through `resolveModeDelays`.
21492
+ */
21493
+ modeDelays: NcAlarmModeDelaysListSchema.default([])
21457
21494
  });
21458
21495
  /**
21459
21496
  * Every field optional — a tab edits one control at a time.
21460
21497
  *
21461
- * `nonBlocking` is re-declared WITHOUT its default: `.partial()` does not
21462
- * remove an inner `.default()`, so a patch that never named the field would
21463
- * parse to `nonBlocking: []` and wipe every mode's list on an unrelated edit
21464
- * (the same trap {@link NcRulePatchSchema} documents).
21498
+ * `nonBlocking` and `modeDelays` are re-declared WITHOUT their defaults:
21499
+ * `.partial()` does not remove an inner `.default()`, so a patch that never
21500
+ * named the field would parse to `[]` and wipe every mode's list on an
21501
+ * unrelated edit (the same trap {@link NcRulePatchSchema} documents). Here
21502
+ * `modeDelays` means EDITS, not the stored overrides.
21465
21503
  */
21466
- var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({ nonBlocking: NcAlarmNonBlockingListSchema }).partial();
21504
+ var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({
21505
+ nonBlocking: NcAlarmNonBlockingListSchema,
21506
+ /** Per-mode, per-field edits — NOT the whole list (see NcAlarmModeDelaysEditSchema). */
21507
+ modeDelays: NcAlarmModeDelaysEditListSchema,
21508
+ /** ONE membership change; the panel applies it to the list it holds at its turn. */
21509
+ nonBlockingEdit: NcAlarmNonBlockingEditSchema
21510
+ }).partial().refine((p) => p.nonBlocking === void 0 || p.nonBlockingEdit === void 0, { message: "nonBlocking and nonBlockingEdit are exclusive — send the whole lists or one edit" });
21467
21511
  /**
21468
21512
  * What one arm mode actually arms, DERIVED from the enabled rules gated on it.
21469
21513
  * Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
@@ -21563,6 +21607,28 @@ var NcAlarmConfigSchema = z.object({
21563
21607
  */
21564
21608
  live: NcAlarmLiveSchema.optional()
21565
21609
  });
21610
+ var NcAlarmSensorReadingSchema = z.enum([
21611
+ "open",
21612
+ "closed",
21613
+ "unknown",
21614
+ "not-opening"
21615
+ ]);
21616
+ /** One device's state as the alarm reads it — the classifier the arm check uses. */
21617
+ var NcAlarmSensorStateSchema = z.object({
21618
+ deviceId: z.number().int().positive(),
21619
+ reading: NcAlarmSensorReadingSchema,
21620
+ /** The word as read (`open`, `closed`, `unlocked`, `stopped`, …); null when unknown / not an opening. */
21621
+ state: z.string().nullable(),
21622
+ /** Why `unknown`: the read failed, or the slice holds no word its cap defines (a placeholder included). */
21623
+ unknownWhy: z.enum(["read-failed", "unknown-word"]).nullable(),
21624
+ /** The device manager's liveness as the centre mirrors it; null = not known. */
21625
+ online: z.boolean().nullable()
21626
+ });
21627
+ var NcAlarmSensorsInputSchema = z.object({ deviceIds: z.array(z.number().int().positive()).max(500) });
21628
+ var NcAlarmSensorsSchema = z.object({
21629
+ sensors: z.array(NcAlarmSensorStateSchema),
21630
+ readAt: z.number().int().nonnegative()
21631
+ });
21566
21632
  /**
21567
21633
  * ONE rule's demand on ONE camera's clip ring.
21568
21634
  *
@@ -21804,8 +21870,9 @@ var notificationRulesCapability = {
21804
21870
  */
21805
21871
  getAlarmConfig: method(z.object({}), NcAlarmConfigSchema, { auth: "admin" }),
21806
21872
  /**
21807
- * Patch the settings (durations, recipients, per-mode non-blocking lists;
21808
- * `announceArm` is accepted and ignored — D630). Returns the WHOLE config,
21873
+ * Patch the settings (durations — global and per mode —, recipients,
21874
+ * per-mode non-blocking lists or one membership edit; `announceArm` is
21875
+ * accepted and ignored — D630). Returns the WHOLE config,
21809
21876
  * coverage and `live` included, so a
21810
21877
  * client never has to guess what the server settled on — the panel clamps
21811
21878
  * and normalises, and a form that re-rendered from its own input would
@@ -21814,7 +21881,15 @@ var notificationRulesCapability = {
21814
21881
  setAlarmConfig: method(z.object({ patch: NcAlarmSettingsPatchSchema }), NcAlarmConfigSchema, {
21815
21882
  kind: "mutation",
21816
21883
  auth: "admin"
21817
- })
21884
+ }),
21885
+ /**
21886
+ * The CURRENT state of each asked device as the alarm reads it (D697) — open, closed,
21887
+ * unknown (why) or not an opening, plus liveness. Classified by the same table the arm
21888
+ * check uses (`alarm-openings.ts`), so the editor and the arm can never disagree. The
21889
+ * caller names the ids (the household openings it already holds); at most
21890
+ * `NC_ALARM_SENSORS_MAX`.
21891
+ */
21892
+ getAlarmSensors: method(NcAlarmSensorsInputSchema, NcAlarmSensorsSchema, { auth: "admin" })
21818
21893
  }
21819
21894
  };
21820
21895
  /**
@@ -51187,6 +51262,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
51187
51262
  addonId: null,
51188
51263
  access: "view"
51189
51264
  },
51265
+ "notificationRules.getAlarmSensors": {
51266
+ capName: "notification-rules",
51267
+ capScope: "system",
51268
+ addonId: null,
51269
+ access: "view"
51270
+ },
51190
51271
  "notificationRules.getClipRetentionAsks": {
51191
51272
  capName: "notification-rules",
51192
51273
  capScope: "system",
@@ -55670,6 +55751,11 @@ Object.freeze({
55670
55751
  form: "single",
55671
55752
  optional: false
55672
55753
  }],
55754
+ "notificationRules.getAlarmSensors": [{
55755
+ name: "deviceIds",
55756
+ form: "array",
55757
+ optional: false
55758
+ }],
55673
55759
  "notificationRules.setDeviceMuted": [{
55674
55760
  name: "deviceId",
55675
55761
  form: "single",
@@ -21396,6 +21396,37 @@ zod.z.object({
21396
21396
  firstAt: zod.z.number(),
21397
21397
  lastAt: zod.z.number()
21398
21398
  });
21399
+ var NC_ALARM_TRIGGERED_MAX_SEC = 3600;
21400
+ var NcAlarmDelaySecSchema = zod.z.number().int().min(0).max(600);
21401
+ var NcAlarmTriggeredSecSchema = zod.z.number().int().min(0).max(NC_ALARM_TRIGGERED_MAX_SEC);
21402
+ var uniqueModes = (entries) => new Set(entries.map((e) => e.mode)).size === entries.length;
21403
+ /** One mode's OVERRIDES. An absent field inherits the global value (D697). */
21404
+ var NcAlarmModeDelaysSchema = zod.z.object({
21405
+ mode: AlarmArmModeSchema,
21406
+ exitDelaySec: NcAlarmDelaySecSchema.optional(),
21407
+ entryDelaySec: NcAlarmDelaySecSchema.optional(),
21408
+ triggeredDurationSec: NcAlarmTriggeredSecSchema.optional()
21409
+ });
21410
+ var NcAlarmModeDelaysListSchema = zod.z.array(NcAlarmModeDelaysSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
21411
+ /**
21412
+ * One mode's EDIT in a patch: a number sets the override, `null` removes it (the mode inherits
21413
+ * again), an absent field leaves it alone. Per field, so two editors changing two different
21414
+ * delays of one mode never undo each other.
21415
+ */
21416
+ var NcAlarmModeDelaysEditSchema = zod.z.object({
21417
+ mode: AlarmArmModeSchema,
21418
+ exitDelaySec: NcAlarmDelaySecSchema.nullable().optional(),
21419
+ entryDelaySec: NcAlarmDelaySecSchema.nullable().optional(),
21420
+ triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional()
21421
+ });
21422
+ var NcAlarmModeDelaysEditListSchema = zod.z.array(NcAlarmModeDelaysEditSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
21423
+ /** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
21424
+ var NcAlarmNonBlockingEditSchema = zod.z.object({
21425
+ mode: AlarmArmModeSchema,
21426
+ deviceId: zod.z.number().int().positive(),
21427
+ /** true = on the list (may be open, does not block); false = off the list (blocks). */
21428
+ nonBlocking: zod.z.boolean()
21429
+ });
21399
21430
  /**
21400
21431
  * One arm mode's non-blocking list: devices that may be open when that mode
21401
21432
  * arms, without the arm being refused.
@@ -21409,10 +21440,10 @@ var NcAlarmNonBlockingSchema = zod.z.object({
21409
21440
  * meaning a reader could agree on (union? the last one?), so they are refused
21410
21441
  * at the boundary rather than interpreted.
21411
21442
  */
21412
- var NcAlarmNonBlockingListSchema = zod.z.array(NcAlarmNonBlockingSchema).max(8).refine((lists) => new Set(lists.map((l) => l.mode)).size === lists.length, { message: "nonBlocking: at most one list per arm mode" });
21443
+ var NcAlarmNonBlockingListSchema = zod.z.array(NcAlarmNonBlockingSchema).max(8).refine(uniqueModes, { message: "nonBlocking: at most one list per arm mode" });
21413
21444
  /**
21414
- * The three durations the panel's state machine runs on, who hears about its
21415
- * transitions, and which openings each mode tolerates.
21445
+ * The three durations — global, and per mode since D697 — the panel's state
21446
+ * machine runs on, who hears about its transitions, and which openings each mode tolerates.
21416
21447
  *
21417
21448
  * They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
21418
21449
  * `alarm-panel` is `deviceNative` and its other provider mirrors somebody
@@ -21422,15 +21453,15 @@ var NcAlarmNonBlockingListSchema = zod.z.array(NcAlarmNonBlockingSchema).max(8).
21422
21453
  */
21423
21454
  var NcAlarmSettingsSchema = zod.z.object({
21424
21455
  /** Grace period between arming and the mode taking effect. 0 = immediate. */
21425
- exitDelaySec: zod.z.number().int().min(0).max(600),
21456
+ exitDelaySec: NcAlarmDelaySecSchema,
21426
21457
  /** Grace period between a trigger and the alarm firing. 0 = immediate. */
21427
- entryDelaySec: zod.z.number().int().min(0).max(600),
21458
+ entryDelaySec: NcAlarmDelaySecSchema,
21428
21459
  /**
21429
21460
  * How long `triggered` lasts before the panel re-arms itself.
21430
21461
  * **0 = until an operator disarms it** — the behaviour before this field
21431
21462
  * existed, and therefore what an untouched install keeps doing.
21432
21463
  */
21433
- triggeredDurationSec: zod.z.number().int().min(0).max(3600),
21464
+ triggeredDurationSec: NcAlarmTriggeredSecSchema,
21434
21465
  /**
21435
21466
  * Deprecated by D630 — every transition is announced. Parsed, never read;
21436
21467
  * remove after one release. Optional so an older admin's patch (which still
@@ -21453,17 +21484,30 @@ var NcAlarmSettingsSchema = zod.z.object({
21453
21484
  * per mode is meaningful. Defaulted to `[]` so a blob stored before D630
21454
21485
  * parses as "every opening blocks" — the behaviour it was written under.
21455
21486
  */
21456
- nonBlocking: NcAlarmNonBlockingListSchema.default([])
21487
+ nonBlocking: NcAlarmNonBlockingListSchema.default([]),
21488
+ /**
21489
+ * Per arm mode, the delays that mode OVERRIDES (D697). A mode with no entry, or an entry
21490
+ * without a field, uses the global value above — so `[]`, the default, is exactly the
21491
+ * behaviour of a blob stored before this field existed. Read through `resolveModeDelays`.
21492
+ */
21493
+ modeDelays: NcAlarmModeDelaysListSchema.default([])
21457
21494
  });
21458
21495
  /**
21459
21496
  * Every field optional — a tab edits one control at a time.
21460
21497
  *
21461
- * `nonBlocking` is re-declared WITHOUT its default: `.partial()` does not
21462
- * remove an inner `.default()`, so a patch that never named the field would
21463
- * parse to `nonBlocking: []` and wipe every mode's list on an unrelated edit
21464
- * (the same trap {@link NcRulePatchSchema} documents).
21498
+ * `nonBlocking` and `modeDelays` are re-declared WITHOUT their defaults:
21499
+ * `.partial()` does not remove an inner `.default()`, so a patch that never
21500
+ * named the field would parse to `[]` and wipe every mode's list on an
21501
+ * unrelated edit (the same trap {@link NcRulePatchSchema} documents). Here
21502
+ * `modeDelays` means EDITS, not the stored overrides.
21465
21503
  */
21466
- var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({ nonBlocking: NcAlarmNonBlockingListSchema }).partial();
21504
+ var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({
21505
+ nonBlocking: NcAlarmNonBlockingListSchema,
21506
+ /** Per-mode, per-field edits — NOT the whole list (see NcAlarmModeDelaysEditSchema). */
21507
+ modeDelays: NcAlarmModeDelaysEditListSchema,
21508
+ /** ONE membership change; the panel applies it to the list it holds at its turn. */
21509
+ nonBlockingEdit: NcAlarmNonBlockingEditSchema
21510
+ }).partial().refine((p) => p.nonBlocking === void 0 || p.nonBlockingEdit === void 0, { message: "nonBlocking and nonBlockingEdit are exclusive — send the whole lists or one edit" });
21467
21511
  /**
21468
21512
  * What one arm mode actually arms, DERIVED from the enabled rules gated on it.
21469
21513
  * Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
@@ -21563,6 +21607,28 @@ var NcAlarmConfigSchema = zod.z.object({
21563
21607
  */
21564
21608
  live: NcAlarmLiveSchema.optional()
21565
21609
  });
21610
+ var NcAlarmSensorReadingSchema = zod.z.enum([
21611
+ "open",
21612
+ "closed",
21613
+ "unknown",
21614
+ "not-opening"
21615
+ ]);
21616
+ /** One device's state as the alarm reads it — the classifier the arm check uses. */
21617
+ var NcAlarmSensorStateSchema = zod.z.object({
21618
+ deviceId: zod.z.number().int().positive(),
21619
+ reading: NcAlarmSensorReadingSchema,
21620
+ /** The word as read (`open`, `closed`, `unlocked`, `stopped`, …); null when unknown / not an opening. */
21621
+ state: zod.z.string().nullable(),
21622
+ /** Why `unknown`: the read failed, or the slice holds no word its cap defines (a placeholder included). */
21623
+ unknownWhy: zod.z.enum(["read-failed", "unknown-word"]).nullable(),
21624
+ /** The device manager's liveness as the centre mirrors it; null = not known. */
21625
+ online: zod.z.boolean().nullable()
21626
+ });
21627
+ var NcAlarmSensorsInputSchema = zod.z.object({ deviceIds: zod.z.array(zod.z.number().int().positive()).max(500) });
21628
+ var NcAlarmSensorsSchema = zod.z.object({
21629
+ sensors: zod.z.array(NcAlarmSensorStateSchema),
21630
+ readAt: zod.z.number().int().nonnegative()
21631
+ });
21566
21632
  /**
21567
21633
  * ONE rule's demand on ONE camera's clip ring.
21568
21634
  *
@@ -21804,8 +21870,9 @@ var notificationRulesCapability = {
21804
21870
  */
21805
21871
  getAlarmConfig: method(zod.z.object({}), NcAlarmConfigSchema, { auth: "admin" }),
21806
21872
  /**
21807
- * Patch the settings (durations, recipients, per-mode non-blocking lists;
21808
- * `announceArm` is accepted and ignored — D630). Returns the WHOLE config,
21873
+ * Patch the settings (durations — global and per mode —, recipients,
21874
+ * per-mode non-blocking lists or one membership edit; `announceArm` is
21875
+ * accepted and ignored — D630). Returns the WHOLE config,
21809
21876
  * coverage and `live` included, so a
21810
21877
  * client never has to guess what the server settled on — the panel clamps
21811
21878
  * and normalises, and a form that re-rendered from its own input would
@@ -21814,7 +21881,15 @@ var notificationRulesCapability = {
21814
21881
  setAlarmConfig: method(zod.z.object({ patch: NcAlarmSettingsPatchSchema }), NcAlarmConfigSchema, {
21815
21882
  kind: "mutation",
21816
21883
  auth: "admin"
21817
- })
21884
+ }),
21885
+ /**
21886
+ * The CURRENT state of each asked device as the alarm reads it (D697) — open, closed,
21887
+ * unknown (why) or not an opening, plus liveness. Classified by the same table the arm
21888
+ * check uses (`alarm-openings.ts`), so the editor and the arm can never disagree. The
21889
+ * caller names the ids (the household openings it already holds); at most
21890
+ * `NC_ALARM_SENSORS_MAX`.
21891
+ */
21892
+ getAlarmSensors: method(NcAlarmSensorsInputSchema, NcAlarmSensorsSchema, { auth: "admin" })
21818
21893
  }
21819
21894
  };
21820
21895
  /**
@@ -51187,6 +51262,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
51187
51262
  addonId: null,
51188
51263
  access: "view"
51189
51264
  },
51265
+ "notificationRules.getAlarmSensors": {
51266
+ capName: "notification-rules",
51267
+ capScope: "system",
51268
+ addonId: null,
51269
+ access: "view"
51270
+ },
51190
51271
  "notificationRules.getClipRetentionAsks": {
51191
51272
  capName: "notification-rules",
51192
51273
  capScope: "system",
@@ -55670,6 +55751,11 @@ Object.freeze({
55670
55751
  form: "single",
55671
55752
  optional: false
55672
55753
  }],
55754
+ "notificationRules.getAlarmSensors": [{
55755
+ name: "deviceIds",
55756
+ form: "array",
55757
+ optional: false
55758
+ }],
55673
55759
  "notificationRules.setDeviceMuted": [{
55674
55760
  name: "deviceId",
55675
55761
  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-DRUzy1SF.js");
3
+ const require_dist = require("./dist-CH3jfPMi.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_builtins_composer_composer_addon = require("./builtins/composer/composer.addon.js");
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 { $n as createEvent, At as isArrayOutputSchema, C as LOG_LEVEL_RANK, E as METHOD_ACCESS_MAP, Ft as kebabToCamel, Gn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, H as addonSettingsCapability, Hn as errMsg$1, Ht as logLevelAtMost, Jn as ReadinessTimeoutError, Kn as DEVICE_STATUS_METHOD, Nt as isObjectInput, Pt as isVoidInput, Qn as asString$1, Qt as objectInputDeclaresRequiredDeviceId, Rt as lifecycleJobSchema, Tt as extractNestedAddonId, Ut as looseSchema, Wn as DATAPLANE_SECRET_HEADER$1, Xn as asJsonObject$1, Zn as asNumber, Zt as objectInputDeclaresAddonId, cn as resolveMethodAuth, cr as parseJsonUnknown, dn as scopesAllowDeviceCap, dr as scopeKey, er as emitDownForOwnedCaps, j as RUNTIME_DEFAULTS, jt as isCollectionArrayMethod, lr as readinessKey, mr as EventCategory$1, nn as procedureAuthKey, nr as expandCapMethods, qn as ReadinessRegistry, sr as parseJsonObject, t as ALL_CAPABILITY_DEFINITIONS, un as scopesAllowAddon, ur as resolveCapMount } from "./dist-CoG8lY6H.mjs";
2
+ import { $n as createEvent, At as isArrayOutputSchema, C as LOG_LEVEL_RANK, E as METHOD_ACCESS_MAP, Ft as kebabToCamel, Gn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, H as addonSettingsCapability, Hn as errMsg$1, Ht as logLevelAtMost, Jn as ReadinessTimeoutError, Kn as DEVICE_STATUS_METHOD, Nt as isObjectInput, Pt as isVoidInput, Qn as asString$1, Qt as objectInputDeclaresRequiredDeviceId, Rt as lifecycleJobSchema, Tt as extractNestedAddonId, Ut as looseSchema, Wn as DATAPLANE_SECRET_HEADER$1, Xn as asJsonObject$1, Zn as asNumber, Zt as objectInputDeclaresAddonId, cn as resolveMethodAuth, cr as parseJsonUnknown, dn as scopesAllowDeviceCap, dr as scopeKey, er as emitDownForOwnedCaps, j as RUNTIME_DEFAULTS, jt as isCollectionArrayMethod, lr as readinessKey, mr as EventCategory$1, nn as procedureAuthKey, nr as expandCapMethods, qn as ReadinessRegistry, sr as parseJsonObject, t as ALL_CAPABILITY_DEFINITIONS, un as scopesAllowAddon, ur as resolveCapMount } from "./dist-BEPK2RUO.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { ComposerAddon } from "./builtins/composer/composer.addon.mjs";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DRUzy1SF.js");
1
+ const require_dist = require("./dist-CH3jfPMi.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 { Xn as asJsonObject } from "./dist-CoG8lY6H.mjs";
1
+ import { Xn as asJsonObject } from "./dist-BEPK2RUO.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.331",
3
+ "version": "1.2.332",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",