@camstack/types 1.2.283 → 1.2.285

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 (43) hide show
  1. package/dist/addon.js +2 -2
  2. package/dist/addon.mjs +2 -2
  3. package/dist/capabilities/device-extension.cap.d.ts +8 -25
  4. package/dist/capabilities/device-manager.cap.d.ts +2 -2
  5. package/dist/capabilities/device-state.cap.d.ts +2 -2
  6. package/dist/capabilities/doorbell.cap.d.ts +13 -64
  7. package/dist/capabilities/index.d.ts +2 -2
  8. package/dist/capabilities/motion.cap.d.ts +9 -8
  9. package/dist/capabilities/notification-rules.cap.d.ts +230 -8
  10. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +147 -15
  11. package/dist/capabilities/pipeline-runner.cap.d.ts +2 -0
  12. package/dist/capabilities/ptz-autotrack.cap.d.ts +2 -3
  13. package/dist/catalogs/sensor-active-state.d.ts +8 -10
  14. package/dist/composition/presets/doorbell-feature.d.ts +1 -1
  15. package/dist/{composition-Dq42XWp0.mjs → composition-43aqsZQj.mjs} +6 -7
  16. package/dist/{composition-DG4jVTfB.js → composition-w3gBWMer.js} +6 -7
  17. package/dist/device/hub-motion-read.d.ts +22 -0
  18. package/dist/device-extension/slot-descriptor.d.ts +3 -3
  19. package/dist/enums/event-category.d.ts +9 -0
  20. package/dist/enums.js +1 -1
  21. package/dist/enums.mjs +1 -1
  22. package/dist/{event-category-C5xZWqz6.mjs → event-category-BGmz_oxW.mjs} +9 -0
  23. package/dist/{event-category-MbnB-6AN.js → event-category-DmS_tLsU.js} +9 -0
  24. package/dist/generated/addon-api.d.ts +7 -0
  25. package/dist/generated/extension-slots.d.ts +2 -6
  26. package/dist/generated/method-access-map.d.ts +1 -1
  27. package/dist/generated/method-device-selectors.d.ts +2 -2
  28. package/dist/generated/system-proxy.d.ts +1 -1
  29. package/dist/index.d.ts +5 -1
  30. package/dist/index.js +548 -217
  31. package/dist/index.mjs +523 -215
  32. package/dist/interfaces/event-bus.d.ts +5 -3
  33. package/dist/interfaces/pipeline-runner-capability.d.ts +2 -0
  34. package/dist/node.js +1 -1
  35. package/dist/node.mjs +1 -1
  36. package/dist/notification/alarm-settings.d.ts +58 -0
  37. package/dist/pipeline/camera-sensors.d.ts +133 -9
  38. package/dist/pipeline/motion-ownership.d.ts +13 -0
  39. package/dist/pipeline/provider-motion.d.ts +33 -0
  40. package/dist/{sleep-gU6hqv4_.mjs → sleep-CDCONfkt.mjs} +1 -1
  41. package/dist/{sleep-DCbD8sdg.js → sleep-G4F3X9X_.js} +1 -1
  42. package/dist/utils/addon-id.d.ts +2 -2
  43. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-DCbD8sdg.js");
3
- const require_event_category = require("./event-category-MbnB-6AN.js");
2
+ const require_sleep = require("./sleep-G4F3X9X_.js");
3
+ const require_event_category = require("./event-category-DmS_tLsU.js");
4
4
  const require_err_msg = require("./err-msg-Dx2Kor0g.js");
5
5
  //#region src/generated/cap-input-defaults.ts
6
6
  /**
package/dist/addon.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { At as normalizeAddonInitResult, B as nodePin, Ct as PEER_BYTES_STALL_MS, D as adminUiCapability, Et as DATAPLANE_SECRET_HEADER, N as expandCapMethods, Ot as DisposerChain, Pt as emitReadiness, S as DEVICE_CHILDREN_BATCH_MAX, St as PEER_BYTES_MAX_OUTSTANDING, T as describeCustomActions, U as ReadinessRegistry, V as readNodePin, W as ReadinessTimeoutError, a as asJsonObject, b as deviceOpsCapability, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, h as createEventBusSliceSource, kt as BaseAddon, m as createDeviceProxy, p as isDeviceScopedCap, q as scopeKey, s as asString, t as sleep, u as parseJsonUnknown, wt as PEER_BYTES_TICKET_TTL_MS, x as viewerUiCapability, xt as PEER_BYTES_CHUNK_BYTES } from "./sleep-gU6hqv4_.mjs";
2
- import { t as EventCategory } from "./event-category-C5xZWqz6.mjs";
1
+ import { At as normalizeAddonInitResult, B as nodePin, Ct as PEER_BYTES_STALL_MS, D as adminUiCapability, Et as DATAPLANE_SECRET_HEADER, N as expandCapMethods, Ot as DisposerChain, Pt as emitReadiness, S as DEVICE_CHILDREN_BATCH_MAX, St as PEER_BYTES_MAX_OUTSTANDING, T as describeCustomActions, U as ReadinessRegistry, V as readNodePin, W as ReadinessTimeoutError, a as asJsonObject, b as deviceOpsCapability, d as BOOT_RECOVERY_BACKOFF_MS, f as DEVICE_SCOPED_CAPS, h as createEventBusSliceSource, kt as BaseAddon, m as createDeviceProxy, p as isDeviceScopedCap, q as scopeKey, s as asString, t as sleep, u as parseJsonUnknown, wt as PEER_BYTES_TICKET_TTL_MS, x as viewerUiCapability, xt as PEER_BYTES_CHUNK_BYTES } from "./sleep-CDCONfkt.mjs";
2
+ import { t as EventCategory } from "./event-category-BGmz_oxW.mjs";
3
3
  import { a as DeviceType, t as errMsg } from "./err-msg-DX6i_MY4.mjs";
4
4
  //#region src/generated/cap-input-defaults.ts
5
5
  /**
@@ -2,8 +2,8 @@
2
2
  * `device-extension` — ONE place to see and author what a device is extended
3
3
  * with by OTHER devices (D648).
4
4
  *
5
- * **A contract, not a store.** Every slot (`linked-devices`, `doorbell-source`)
6
- * is declared by the cap that owns the function (`extensionSlots` in its
5
+ * **A contract, not a store.** Every slot (today one: `linked-devices`) is
6
+ * declared by the cap that owns the function (`extensionSlots` in its
7
7
  * `*.cap.ts`, D4) and SERVED by the addon that already owns its store, over
8
8
  * that store and its existing write path. This cap persists nothing and has no config method (guarded by
9
9
  * `scripts/check-extension-slots.ts`): D62 applied to the whole feature, and
@@ -12,7 +12,7 @@
12
12
  * **Shape.** A device-scoped wrapper COLLECTION, the D554 shape `videoclips`
13
13
  * uses: `resolveCapMount` gives it the `device-scoped` mount and
14
14
  * `requireDeviceCollection` dispatches it. Its providers are the slot owners
15
- * (device-manager, virtual-doorbell, …), and a device's sources are its
15
+ * (today device-manager alone), and a device's sources are its
16
16
  * bindings (step 0 of `getBindings`, derived, persisted nowhere).
17
17
  *
18
18
  * - `listSources` — one row per provider, the D554 source-listing convention
@@ -87,10 +87,11 @@ export declare const ExtensionSlotSourceSchema: z.ZodObject<{
87
87
  export type ExtensionSlotSource = z.infer<typeof ExtensionSlotSourceSchema>;
88
88
  /**
89
89
  * A DIFFERENT authority that gates whether the slot's sources do anything —
90
- * reported read-only, named, never written through this contract (D62). The
91
- * virtual doorbell's sources ring only while the wrapper is bound to the
92
- * camera, and that binding belongs to `deviceManager.setWrapperActive`.
93
- * `unknown` means the gate could not be read; it is not "inactive" (D315).
90
+ * reported read-only, named, never written through this contract (D62) — e.g.
91
+ * a slot whose sources act only while a wrapper is bound to the host, a
92
+ * binding that belongs to `deviceManager.setWrapperActive`. No slot reports
93
+ * one today (`linked-devices` answers `null`). `unknown` means the gate could
94
+ * not be read; it is not "inactive" (D315).
94
95
  */
95
96
  export declare const ExtensionSlotActivationSchema: z.ZodObject<{
96
97
  state: z.ZodEnum<{
@@ -108,7 +109,6 @@ export declare const ExtensionSlotStateSchema: z.ZodObject<{
108
109
  slotRef: z.ZodString;
109
110
  slot: z.ZodEnum<{
110
111
  "linked-devices": "linked-devices";
111
- "doorbell-source": "doorbell-source";
112
112
  }>;
113
113
  authority: z.ZodString;
114
114
  activation: z.ZodNullable<z.ZodObject<{
@@ -121,9 +121,6 @@ export declare const ExtensionSlotStateSchema: z.ZodObject<{
121
121
  detail: z.ZodOptional<z.ZodString>;
122
122
  }, z.core.$strip>>;
123
123
  value: z.ZodDiscriminatedUnion<[z.ZodObject<{
124
- deviceIds: z.ZodArray<z.ZodNumber>;
125
- slot: z.ZodLiteral<"doorbell-source">;
126
- }, z.core.$strip>, z.ZodObject<{
127
124
  deviceIds: z.ZodArray<z.ZodNumber>;
128
125
  trackedDeviceIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
129
126
  slot: z.ZodLiteral<"linked-devices">;
@@ -168,7 +165,6 @@ export declare const ExtensionSlotRowSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
168
165
  slotRef: z.ZodString;
169
166
  slot: z.ZodEnum<{
170
167
  "linked-devices": "linked-devices";
171
- "doorbell-source": "doorbell-source";
172
168
  }>;
173
169
  authority: z.ZodString;
174
170
  activation: z.ZodNullable<z.ZodObject<{
@@ -181,9 +177,6 @@ export declare const ExtensionSlotRowSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
181
177
  detail: z.ZodOptional<z.ZodString>;
182
178
  }, z.core.$strip>>;
183
179
  value: z.ZodDiscriminatedUnion<[z.ZodObject<{
184
- deviceIds: z.ZodArray<z.ZodNumber>;
185
- slot: z.ZodLiteral<"doorbell-source">;
186
- }, z.core.$strip>, z.ZodObject<{
187
180
  deviceIds: z.ZodArray<z.ZodNumber>;
188
181
  trackedDeviceIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
189
182
  slot: z.ZodLiteral<"linked-devices">;
@@ -265,9 +258,6 @@ export declare const ExtensionSetSlotInputSchema: z.ZodObject<{
265
258
  deviceId: z.ZodNumber;
266
259
  slotRef: z.ZodString;
267
260
  value: z.ZodDiscriminatedUnion<[z.ZodObject<{
268
- deviceIds: z.ZodArray<z.ZodNumber>;
269
- slot: z.ZodLiteral<"doorbell-source">;
270
- }, z.core.$strip>, z.ZodObject<{
271
261
  deviceIds: z.ZodArray<z.ZodNumber>;
272
262
  trackedDeviceIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
273
263
  slot: z.ZodLiteral<"linked-devices">;
@@ -316,7 +306,6 @@ export declare const deviceExtensionCapability: {
316
306
  slotRef: z.ZodString;
317
307
  slot: z.ZodEnum<{
318
308
  "linked-devices": "linked-devices";
319
- "doorbell-source": "doorbell-source";
320
309
  }>;
321
310
  authority: z.ZodString;
322
311
  activation: z.ZodNullable<z.ZodObject<{
@@ -329,9 +318,6 @@ export declare const deviceExtensionCapability: {
329
318
  detail: z.ZodOptional<z.ZodString>;
330
319
  }, z.core.$strip>>;
331
320
  value: z.ZodDiscriminatedUnion<[z.ZodObject<{
332
- deviceIds: z.ZodArray<z.ZodNumber>;
333
- slot: z.ZodLiteral<"doorbell-source">;
334
- }, z.core.$strip>, z.ZodObject<{
335
321
  deviceIds: z.ZodArray<z.ZodNumber>;
336
322
  trackedDeviceIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
337
323
  slot: z.ZodLiteral<"linked-devices">;
@@ -387,9 +373,6 @@ export declare const deviceExtensionCapability: {
387
373
  deviceId: z.ZodNumber;
388
374
  slotRef: z.ZodString;
389
375
  value: z.ZodDiscriminatedUnion<[z.ZodObject<{
390
- deviceIds: z.ZodArray<z.ZodNumber>;
391
- slot: z.ZodLiteral<"doorbell-source">;
392
- }, z.core.$strip>, z.ZodObject<{
393
376
  deviceIds: z.ZodArray<z.ZodNumber>;
394
377
  trackedDeviceIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
395
378
  slot: z.ZodLiteral<"linked-devices">;
@@ -1491,8 +1491,8 @@ export declare const deviceManagerCapability: {
1491
1491
  * (`value` / `missing` / `failed`, see {@link WrapperActivationReadSchema}).
1492
1492
  *
1493
1493
  * The narrow read of the durable authority behind `getBindings`: a
1494
- * consumer that must know what the operator PERSISTED (virtual-doorbell,
1495
- * before it drops a press) asks this instead of pulling device-manager's
1494
+ * consumer that must know what the operator PERSISTED (before it drops
1495
+ * work on the strength of an unbind) asks this instead of pulling device-manager's
1496
1496
  * whole addon store through `addonSettingsRaw.getGlobal` — which answered
1497
1497
  * `{}` on every isolated-engine hub and so never worked (D675). It reads
1498
1498
  * ONE row (the activation map, ~1.6 KB), never the ~625 KB store.
@@ -119,8 +119,8 @@ export declare const deviceStateCapability: {
119
119
  * Canonical cross-layer WRITE for one cap-keyed slice. Used by
120
120
  * everyone who needs to publish runtime state for a device:
121
121
  * device providers (via `BaseDevice.runtimeState.setCapState`
122
- * which delegates here), system-scope addons (e.g. the pipeline
123
- * runner writing the `motion` slice on phase transitions), and
122
+ * which delegates here), system-scope addons (e.g. the orchestrator
123
+ * writing a camera's effective `motion` slice, D696), and
124
124
  * direct cap-router callers in tests.
125
125
  *
126
126
  * Behavior on the hub:
@@ -1,29 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { type InferProvider } from './capability-definition.js';
3
3
  import { DeviceType } from '../device/device-type.js';
4
- /**
5
- * Doorbell button cap. Two kinds of providers coexist behind this cap
6
- * name (same pattern as `snapshot`):
7
- *
8
- * - **Native** providers: registered per-device by device-driver
9
- * addons via `ctx.registerNativeCap` — either on a
10
- * `DeviceType.Button` accessory with `role: DeviceRole.Doorbell`,
11
- * or directly on the camera (Reolink registers at camera level).
12
- * Emits an `onPressed` event every time the firmware pushes a
13
- * ring; status tracks the last press and a pressCount since start
14
- * (diagnostic).
15
- *
16
- * - **Wrapper** provider: the `virtual-doorbell` system builtin
17
- * (`@camstack/system/builtins/doorbell`). Turns ANY binary-ish
18
- * device (contact / switch / event-emitter …) into a doorbell for
19
- * a camera. `defaultActive: false` — the operator explicitly binds
20
- * it per camera in the device-bindings UI, then picks the source
21
- * device + trigger in the per-device settings.
22
- *
23
- * The DeviceEventPropagator re-emits `onPressed` on the camera parent
24
- * — subscribers listening at the camera level receive ring events
25
- * with `via[]` populated. No code on the parent needed.
26
- */
27
4
  export declare const DoorbellStatusSchema: z.ZodObject<{
28
5
  lastPressedAt: z.ZodNullable<z.ZodNumber>;
29
6
  pressCountSinceStart: z.ZodNumber;
@@ -35,54 +12,26 @@ export declare const DoorbellPressEventSchema: z.ZodObject<{
35
12
  }, z.core.$strip>;
36
13
  export type DoorbellPressEvent = z.infer<typeof DoorbellPressEventSchema>;
37
14
  /**
38
- * The `doorbell-source` extension slot's editable value (D648): the camera's
39
- * virtual-doorbell trigger devices, exactly what the wrapper's
40
- * `doorbellSources` persists (as `{ deviceId }` records).
41
- */
42
- export declare const DoorbellSourceSlotValueSchema: z.ZodObject<{
43
- deviceIds: z.ZodArray<z.ZodNumber>;
44
- }, z.core.$strip>;
45
- export type DoorbellSourceSlotValue = z.infer<typeof DoorbellSourceSlotValueSchema>;
46
- /**
47
- * The `doorbell-source` slot — which devices ring this camera's VIRTUAL
48
- * doorbell, owned by the `virtual-doorbell` wrapper over its
49
- * `doorbellSources` store (D648). A source rings when one of its
50
- * `SOURCE_CAPS` rises. Whether the wrapper is bound to the camera at all is a
51
- * different authority (`deviceManager.setWrapperActive`, D62) — the slot
52
- * reports it, it never writes it.
15
+ * Doorbell button cap. Two kinds of provider serve it, and to every consumer
16
+ * they are the same cap:
17
+ *
18
+ * - **Native** providers, registered per device by a driver addon through
19
+ * `ctx.registerNativeCap` — a `DeviceType.Button` accessory with
20
+ * `role: DeviceRole.Doorbell`, or the camera itself (Reolink registers at
21
+ * camera level). They emit `onPressed` on every firmware ring.
22
+ * - **A composed doorbell** (D670, D671): a camera's customization gives it
23
+ * the cap, its `lastPressedAt` rising from the sources the operator
24
+ * assigned in Customize → Doorbell, and the composer emits `onPressed`
25
+ * from that field's advance (`fromState`).
26
+ *
27
+ * The DeviceEventPropagator re-emits `onPressed` on the camera parent.
53
28
  */
54
- export declare const DOORBELL_SOURCE_SLOT: {
55
- readonly id: "doorbell-source";
56
- readonly label: "Doorbell trigger devices";
57
- readonly description: string;
58
- readonly shape: "association";
59
- readonly hostDeviceTypes: readonly [DeviceType.Camera];
60
- readonly sourceCaps: readonly string[];
61
- readonly cardinality: "many";
62
- readonly value: z.ZodObject<{
63
- deviceIds: z.ZodArray<z.ZodNumber>;
64
- }, z.core.$strip>;
65
- };
66
29
  export declare const doorbellCapability: {
67
30
  readonly name: "doorbell";
68
31
  readonly scope: "device";
69
32
  readonly deviceNative: true;
70
33
  readonly mode: "singleton";
71
- readonly kind: "wrapper";
72
- readonly defaultActive: false;
73
34
  readonly deviceTypes: readonly [DeviceType.Button, DeviceType.Camera];
74
- readonly extensionSlots: readonly [{
75
- readonly id: "doorbell-source";
76
- readonly label: "Doorbell trigger devices";
77
- readonly description: string;
78
- readonly shape: "association";
79
- readonly hostDeviceTypes: readonly [DeviceType.Camera];
80
- readonly sourceCaps: readonly string[];
81
- readonly cardinality: "many";
82
- readonly value: z.ZodObject<{
83
- deviceIds: z.ZodArray<z.ZodNumber>;
84
- }, z.core.$strip>;
85
- }];
86
35
  readonly methods: {};
87
36
  readonly events: {
88
37
  /**
@@ -86,7 +86,7 @@ export { AddBrokerInputSchema, BrokerConnectionDetailsSchema, BrokerInfoSchema,
86
86
  export type { NetworkAccessStatus, NetworkEndpoint } from './network-access.cap.js';
87
87
  export { NetworkAccessStatusSchema, NetworkEndpointSchema, networkAccessCapability, } from './network-access.cap.js';
88
88
  export { type Attachment, type AttachmentMediaType, AttachmentMediaTypeSchema, AttachmentSchema, type DiscoveredTarget, DiscoveredTargetSchema, type INotificationOutputProvider, type NotificationAction, type NotificationActionIcon, NotificationActionIconSchema, NotificationActionSchema, type NotificationFormat, NotificationFormatSchema, NotificationSchema, notificationOutputCapability, type RenderedAs, RenderedAsSchema, type SendResult, SendResultSchema, type Target, type TargetKind, type TargetKindCaps, TargetKindCapsSchema, type TargetKindLevel, TargetKindLevelSchema, TargetKindSchema, TargetSchema, type TestResult, TestResultSchema, } from './notification-output.cap.js';
89
- export { consumableLowPercentOf, type INotificationRulesProvider, NC_ALARM_SYSTEM_EVENT_KINDS, NC_AUDIO_DBFS_FLOOR, NC_AUTHORABLE_SYSTEM_EVENT_KINDS, NC_BATTERY_CONSUMABLE_SYSTEM_EVENT_KINDS, NC_CLIP_POST_ROLL_DEFAULT_SEC, NC_CLIP_PRE_ROLL_DEFAULT_SEC, NC_CLIP_RETENTION_MAX_SEC, NC_CONDITION_CATALOG, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX, NC_CONFIRM_DEFAULT_TIMEOUT_MS, NC_CONFIRM_MAX_TIMEOUT_MS, NC_CONFIRM_MIN_TIMEOUT_MS, NC_CONSUMABLE_LOW_PERCENT_DEFAULT, NC_CONSUMABLE_LOW_PERCENT_MAX, NC_CONSUMABLE_SYSTEM_EVENT_KINDS, NC_DEFAULT_SNOOZE_MINUTES, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_RULE_CLEARABLE_KEYS, NC_SNOOZE_MAX_MINUTES, NC_TANK_SYSTEM_EVENT_KINDS, type NcAlarmConfig, NcAlarmConfigSchema, type NcAlarmModeCoverage, NcAlarmModeCoverageSchema, type NcAlarmSettings, type NcAlarmSettingsPatch, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, type NcAlarmSkippedDevice, NcAlarmSkippedDeviceSchema, type NcAlarmSkipReason, NcAlarmSkipReasonSchema, type NcAudioCondition, NcAudioConditionSchema, type NcClipRetentionAsk, NcClipRetentionAskSchema, type NcClipRetentionPlan, NcClipRetentionPlanSchema, type NcConditionDescriptor, NcConditionDescriptorSchema, type NcConditions, NcConditionsSchema, type NcConfirm, type NcConfirmExpect, NcConfirmExpectSchema, NcConfirmSchema, type NcCrossing, NcCrossingSchema, type NcDelivery, NcDeliverySchema, type NcDeviceStateCondition, NcDeviceStateConditionSchema, type NcHistoryEntry, NcHistoryEntrySchema, type NcHistoryFilter, NcHistoryFilterSchema, type NcHistoryRecordKind, NcHistoryRecordKindSchema, type NcHistoryStatus, NcHistoryStatusSchema, type NcHistorySubject, NcHistorySubjectSchema, type NcLinkedCameraMode, NcLinkedCameraModeSchema, type NcMediaFrame, NcMediaFrameSchema, type NcMediaPolicy, NcMediaPolicySchema, type NcOccupancyCondition, NcOccupancyConditionSchema, type NcPlateMatcher, NcPlateMatcherSchema, type NcRule, type NcRuleAction, NcRuleActionSchema, type NcRuleActionSequence, NcRuleActionSequenceSchema, type NcRuleActions, NcRuleActionsSchema, type NcRuleClearableKey, NcRuleClearableKeySchema, type NcRuleInput, NcRuleInputSchema, NcRuleKindSchema, type NcRuleLastRun, NcRuleLastRunSchema, type NcRuleLastRuns, NcRuleLastRunsSchema, type NcRuleNotificationButton, NcRuleNotificationButtonSchema, type NcRulePatch, NcRulePatchSchema, NcRuleSchema, type NcRuleTarget, NcRuleTargetSchema, type NcRuleUpdateInput, NcRuleUpdateInputSchema, type NcSceneCondition, NcSceneConditionSchema, type NcSchedule, NcScheduleSchema, type NcScheduleWindow, NcScheduleWindowSchema, type NcSensorTransition, NcSensorTransitionSchema, type NcSnooze, type NcSnoozeInput, NcSnoozeInputSchema, NcSnoozeSchema, type NcSnoozeScope, NcSnoozeScopeSchema, type NcSnoozeSuppressed, NcSnoozeSuppressedSchema, type NcStateSummaryPreview, type NcStateSummaryPreviewRow, NcStateSummaryPreviewRowSchema, NcStateSummaryPreviewSchema, type NcStateSummaryPreviewSection, NcStateSummaryPreviewSectionSchema, type NcStateSummarySplit, NcStateSummarySplitSchema, type NcSystemEventCondition, NcSystemEventConditionSchema, type NcSystemEventDelivery, type NcSystemEventDeliveryMode, NcSystemEventDeliveryModeSchema, NcSystemEventDeliverySchema, type NcSystemEventKind, NcSystemEventKindSchema, type NcTemplateFamily, NcTemplateFamilySchema, type NcTemplateField, NcTemplateFieldSchema, type NcTemplatePreview, type NcTemplatePreviewInput, NcTemplatePreviewInputSchema, NcTemplatePreviewSchema, type NcTemplateVarContext, NcTemplateVarContextSchema, type NcTemplateVarDescriptor, NcTemplateVarDescriptorSchema, type NcTemplateVarGroup, NcTemplateVarGroupSchema, type NcTemplateVarKind, NcTemplateVarKindSchema, type NcTestResult, NcTestResultSchema, type NcThrottle, type NcThrottleGranularity, NcThrottleGranularitySchema, NcThrottleSchema, type NcZoneCondition, NcZoneConditionSchema, notificationRulesCapability, } from './notification-rules.cap.js';
89
+ export { consumableLowPercentOf, type INotificationRulesProvider, NC_ALARM_SYSTEM_EVENT_KINDS, NC_AUDIO_DBFS_FLOOR, NC_AUTHORABLE_SYSTEM_EVENT_KINDS, NC_BATTERY_CONSUMABLE_SYSTEM_EVENT_KINDS, NC_CLIP_POST_ROLL_DEFAULT_SEC, NC_CLIP_PRE_ROLL_DEFAULT_SEC, NC_CLIP_RETENTION_MAX_SEC, NC_CONDITION_CATALOG, NC_CONFIRM_DEFAULT_MAX_IMAGE_PX, NC_CONFIRM_DEFAULT_TIMEOUT_MS, NC_CONFIRM_MAX_TIMEOUT_MS, NC_CONFIRM_MIN_TIMEOUT_MS, NC_CONSUMABLE_LOW_PERCENT_DEFAULT, NC_CONSUMABLE_LOW_PERCENT_MAX, NC_CONSUMABLE_SYSTEM_EVENT_KINDS, NC_DEFAULT_SNOOZE_MINUTES, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_RULE_CLEARABLE_KEYS, NC_SNOOZE_MAX_MINUTES, NC_TANK_SYSTEM_EVENT_KINDS, NC_ALARM_DELAY_MAX_SEC, NC_ALARM_NONBLOCKING_MAX, NC_ALARM_SENSORS_MAX, NC_ALARM_TRIGGERED_MAX_SEC, type NcAlarmConfig, NcAlarmConfigSchema, type NcAlarmModeCoverage, NcAlarmModeCoverageSchema, type NcAlarmModeDelays, type NcAlarmModeDelaysEdit, NcAlarmModeDelaysEditSchema, NcAlarmModeDelaysSchema, type NcAlarmNonBlockingEdit, NcAlarmNonBlockingEditSchema, type NcAlarmSensorReading, NcAlarmSensorReadingSchema, type NcAlarmSensors, type NcAlarmSensorsInput, NcAlarmSensorsInputSchema, NcAlarmSensorsSchema, type NcAlarmSensorState, NcAlarmSensorStateSchema, type NcAlarmSettings, type NcAlarmSettingsPatch, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, type NcAlarmSkippedDevice, NcAlarmSkippedDeviceSchema, type NcAlarmSkipReason, NcAlarmSkipReasonSchema, type NcAudioCondition, NcAudioConditionSchema, type NcClipRetentionAsk, NcClipRetentionAskSchema, type NcClipRetentionPlan, NcClipRetentionPlanSchema, type NcConditionDescriptor, NcConditionDescriptorSchema, type NcConditions, NcConditionsSchema, type NcConfirm, type NcConfirmExpect, NcConfirmExpectSchema, NcConfirmSchema, type NcCrossing, NcCrossingSchema, type NcDelivery, NcDeliverySchema, type NcDeviceStateCondition, NcDeviceStateConditionSchema, type NcHistoryEntry, NcHistoryEntrySchema, type NcHistoryFilter, NcHistoryFilterSchema, type NcHistoryRecordKind, NcHistoryRecordKindSchema, type NcHistoryStatus, NcHistoryStatusSchema, type NcHistorySubject, NcHistorySubjectSchema, type NcLinkedCameraMode, NcLinkedCameraModeSchema, type NcMediaFrame, NcMediaFrameSchema, type NcMediaPolicy, NcMediaPolicySchema, type NcOccupancyCondition, NcOccupancyConditionSchema, type NcPlateMatcher, NcPlateMatcherSchema, type NcRule, type NcRuleAction, NcRuleActionSchema, type NcRuleActionSequence, NcRuleActionSequenceSchema, type NcRuleActions, NcRuleActionsSchema, type NcRuleClearableKey, NcRuleClearableKeySchema, type NcRuleInput, NcRuleInputSchema, NcRuleKindSchema, type NcRuleLastRun, NcRuleLastRunSchema, type NcRuleLastRuns, NcRuleLastRunsSchema, type NcRuleNotificationButton, NcRuleNotificationButtonSchema, type NcRulePatch, NcRulePatchSchema, NcRuleSchema, type NcRuleTarget, NcRuleTargetSchema, type NcRuleUpdateInput, NcRuleUpdateInputSchema, type NcSceneCondition, NcSceneConditionSchema, type NcSchedule, NcScheduleSchema, type NcScheduleWindow, NcScheduleWindowSchema, type NcSensorTransition, NcSensorTransitionSchema, type NcSnooze, type NcSnoozeInput, NcSnoozeInputSchema, NcSnoozeSchema, type NcSnoozeScope, NcSnoozeScopeSchema, type NcSnoozeSuppressed, NcSnoozeSuppressedSchema, type NcStateSummaryPreview, type NcStateSummaryPreviewRow, NcStateSummaryPreviewRowSchema, NcStateSummaryPreviewSchema, type NcStateSummaryPreviewSection, NcStateSummaryPreviewSectionSchema, type NcStateSummarySplit, NcStateSummarySplitSchema, type NcSystemEventCondition, NcSystemEventConditionSchema, type NcSystemEventDelivery, type NcSystemEventDeliveryMode, NcSystemEventDeliveryModeSchema, NcSystemEventDeliverySchema, type NcSystemEventKind, NcSystemEventKindSchema, type NcTemplateFamily, NcTemplateFamilySchema, type NcTemplateField, NcTemplateFieldSchema, type NcTemplatePreview, type NcTemplatePreviewInput, NcTemplatePreviewInputSchema, NcTemplatePreviewSchema, type NcTemplateVarContext, NcTemplateVarContextSchema, type NcTemplateVarDescriptor, NcTemplateVarDescriptorSchema, type NcTemplateVarGroup, NcTemplateVarGroupSchema, type NcTemplateVarKind, NcTemplateVarKindSchema, type NcTestResult, NcTestResultSchema, type NcThrottle, type NcThrottleGranularity, NcThrottleGranularitySchema, NcThrottleSchema, type NcZoneCondition, NcZoneConditionSchema, notificationRulesCapability, } from './notification-rules.cap.js';
90
90
  export { type IOauthIntegrationProvider, type OauthIntegrationDescriptor, OauthIntegrationDescriptorSchema, oauthIntegrationCapability, } from './oauth-integration.cap.js';
91
91
  export { AnalyticsLtsSeriesSchema, type AudioEvent, type AudioEventDraft, AudioEventSchema, type DetectionSource, DetectionSourceSchema, EVENT_DENSITY_BATCH_MAX, type EventDensityBucket, EventDensityBucketSchema, type EventDensityForDevice, EventDensityForDeviceSchema, type EventKind, type EventKindCategory, EventKindCategorySchema, type EventKindDescriptor, EventKindDescriptorSchema, type EventKindIcon, EventKindIconSchema, EventKindSchema, type EventKindsForDevice, EventKindsForDeviceSchema, type EventMediaKindBreakdown, type EventMediaKindFootprint, type EventPruneCounts, type EventStoreDeviceFootprint, type EventStoreFootprint, type IPipelineAnalyticsProvider, type KeyEvent, KeyEventSchema, type KeyEventsForDevice, type LabelAttribution, LabelAttributionSchema, type LabelTier, LabelTierSchema, LTS_SCOPE_CLASS_SEPARATOR, type LtsBucket, LtsBucketSchema, MAX_TRACK_DEBUG_NOTE_LEN, type MediaFile, type MediaFileBytes, type MediaFileInfo, MediaFileInfoSchema, type MediaFileKind, MediaFileKindEnum, type MediaFileRef, MediaFileRefSchema, MediaFileSchema, type MotionEvent, type MotionEventDraft, MotionEventSchema, type ObjectEvent, type ObjectEventDraft, ObjectEventSchema, occupancyScope, parseOccupancyScope, pipelineAnalyticsCapability, type RebuildObjectEmbeddingsRefusal, RebuildObjectEmbeddingsRefusalSchema, type RecentTracksPage, RecentTracksPageSchema, type RecentTracksQuery, RecentTracksQueryInput, type RetrainAnnotation, type RetrainAnnotationDraft, RetrainAnnotationDraftSchema, RetrainAnnotationKindSchema, RetrainAnnotationSchema, RetrainAnnotationSourceSchema, type RetrainAssistResult, RetrainAssistResultSchema, RetrainAssistSubjectSchema, RetrainCopyRefusalSchema, type RetrainFrame, type RetrainFrameCandidate, RetrainFrameCandidateSchema, type RetrainFrameList, RetrainFrameListSchema, RetrainFrameSchema, type RetrainFrameSelection, RetrainFrameSelectionSchema, type RetrainMacroClass, RetrainMacroClassSchema, type RetrainStatus, RetrainStatusSchema, type RetrainTrack, RetrainTrackSchema, type RetrainTransitionResult, RetrainTransitionResultSchema, type ScoredObjectEvent, ScoredObjectEventSchema, type SensorEvent, SensorEventSchema, type Track, type TrackCascadeCounts, TrackCascadeCountsSchema, type TrackEnvelope, TrackEnvelopeSchema, TrackedDetectionSchema, type TrackFlags, type TrackFlagsPatch, TrackFlagsPatchSchema, TrackFlagsSchema, type TrackProjection, TrackProjectionSchema, TrackSchema, type TrackSource, TrackSourceSchema, type TrackState, TrackStateSchema, type TrackZoneFilter, TrackZoneFilterSchema, type TrainingExportDeviceTotals, TrainingExportDeviceTotalsSchema, type TrainingExportSummary, TrainingExportSummarySchema, type ZoneCrossing, type ZoneCrossingDirection, ZoneCrossingDirectionSchema, ZoneCrossingSchema, } from './pipeline-analytics.cap.js';
92
92
  export type { EffectiveTuning, EffectiveTuningInput, NativeCropRef, PipelineStepInputOutput, PipelineValidationIssue, PipelineValidationResult, } from './pipeline-executor.cap.js';
@@ -154,7 +154,7 @@ export { type DayNightMode, DayNightModeSchema, type DayNightOptions, DayNightOp
154
154
  export { type DeviceDiscoveryStatus, DeviceDiscoveryStatusSchema, type DiscoveredChildDevice, DiscoveredChildDeviceSchema, type DiscoveredChildStatus, DiscoveredChildStatusSchema, deviceDiscoveryCapability, type IDeviceDiscoveryNativeProvider, type IDeviceDiscoveryProvider, } from './device-discovery.cap.js';
155
155
  export { deviceOpsCapability, type IDeviceOpsProvider, type RawStateResult, RawStateResultSchema, } from './device-ops.cap.js';
156
156
  export { type DeviceStatus, DeviceStatusSchema, deviceStatusCapability, type IDeviceStatusProvider, } from './device-status.cap.js';
157
- export { DOORBELL_SOURCE_SLOT, type DoorbellPressEvent, DoorbellPressEventSchema, type DoorbellSourceSlotValue, DoorbellSourceSlotValueSchema, type DoorbellStatus, DoorbellStatusSchema, doorbellCapability, type IDoorbellProvider, } from './doorbell.cap.js';
157
+ export { type DoorbellPressEvent, DoorbellPressEventSchema, type DoorbellStatus, DoorbellStatusSchema, doorbellCapability, type IDoorbellProvider, } from './doorbell.cap.js';
158
158
  export { type EnumSensorDateTimeFormat, EnumSensorDateTimeFormatSchema, type EnumSensorStatus, EnumSensorStatusSchema, enumSensorCapability, type IEnumSensorProvider, } from './enum-sensor.cap.js';
159
159
  export { type EventEmitterStatus, EventEmitterStatusSchema, type EventFire, EventFireSchema, eventEmitterCapability, type IEventEmitterProvider, } from './event-emitter.cap.js';
160
160
  export { type FaceCluster, type FaceInfo, type FaceSortDirection, type FaceSortField, faceGalleryCapability, type Identity, type IdentitySampleAudit, type IdentitySampleAuditRow, type IdentitySampleInfo, type IFaceGalleryProvider, type ListRecentFacesInput, type SuggestFaceClustersInput, } from './face-gallery.cap.js';
@@ -16,11 +16,11 @@ import { type InferProvider } from './capability-definition.js';
16
16
  /**
17
17
  * How long after a camera's last rising edge `pipeline-analytics` closes the
18
18
  * motion EPISODE row it kept open for it (D475) — "il delay della cap", in
19
- * the operator's words. One authority for the whole system: every provider
20
- * that seeds `autoClearAfterMs` on a `Camera` device writes this SAME
21
- * constant while `detected: true` (never its own number — Hikvision used to
22
- * seed its internal 3 s inactivity timer here, which is a different clock for
23
- * a different purpose), and `MotionEpisodeTracker` imports it directly rather
19
+ * the operator's words. One authority for the whole system: the writer of a
20
+ * `Camera` device's slice (the orchestrator, D696) writes this SAME constant
21
+ * in `autoClearAfterMs` while `detected: true` (never a camera's own clock —
22
+ * Hikvision used to seed its internal 3 s inactivity timer here, a different
23
+ * clock for a different purpose), and `MotionEpisodeTracker` imports it directly rather
24
24
  * than reading the live cap value on the hot path. A `Sensor` device (HA
25
25
  * binary sensor, Homematic) gets a genuine push both ways and has no episode
26
26
  * to close on a timer, so it writes `null`, never this constant.
@@ -157,11 +157,12 @@ export declare const motionCapability: {
157
157
  autoClearAfterMs: z.ZodNullable<z.ZodNumber>;
158
158
  }, z.core.$strip>;
159
159
  /**
160
- * Runtime-state durability: **session** — every writer of this slice
160
+ * Runtime-state durability: **session** — the writer of this slice
161
161
  * writes only on an EDGE, so a restored `detected: true` would stay
162
162
  * frozen until the next one instead of being corrected. The next edge
163
- * re-publishes the real state. (On who the writers are, and why there
164
- * is more than one, see `autoClearAfterMs` above.)
163
+ * re-publishes the real state, and the orchestrator re-publishes every
164
+ * camera when it starts writing (D696; on who writes it, see
165
+ * `autoClearAfterMs` above).
165
166
  *
166
167
  * See `RuntimeStateDurability`. Enforced by
167
168
  * `scripts/check-runtime-state-durability.ts`.
@@ -3000,6 +3000,56 @@ export declare const NcSnoozeSuppressedSchema: z.ZodObject<{
3000
3000
  lastAt: z.ZodNumber;
3001
3001
  }, z.core.$strip>;
3002
3002
  export type NcSnoozeSuppressed = z.infer<typeof NcSnoozeSuppressedSchema>;
3003
+ /** The bounds every alarm delay field carries — settings, per-mode overrides, both editors. */
3004
+ export declare const NC_ALARM_DELAY_MAX_SEC = 600;
3005
+ export declare const NC_ALARM_TRIGGERED_MAX_SEC = 3600;
3006
+ /** At most this many ids on one mode's non-blocking list. */
3007
+ export declare const NC_ALARM_NONBLOCKING_MAX = 200;
3008
+ /** One mode's OVERRIDES. An absent field inherits the global value (D697). */
3009
+ export declare const NcAlarmModeDelaysSchema: z.ZodObject<{
3010
+ mode: z.ZodEnum<{
3011
+ home: "home";
3012
+ away: "away";
3013
+ night: "night";
3014
+ vacation: "vacation";
3015
+ custom_bypass: "custom_bypass";
3016
+ }>;
3017
+ exitDelaySec: z.ZodOptional<z.ZodNumber>;
3018
+ entryDelaySec: z.ZodOptional<z.ZodNumber>;
3019
+ triggeredDurationSec: z.ZodOptional<z.ZodNumber>;
3020
+ }, z.core.$strip>;
3021
+ export type NcAlarmModeDelays = z.infer<typeof NcAlarmModeDelaysSchema>;
3022
+ /**
3023
+ * One mode's EDIT in a patch: a number sets the override, `null` removes it (the mode inherits
3024
+ * again), an absent field leaves it alone. Per field, so two editors changing two different
3025
+ * delays of one mode never undo each other.
3026
+ */
3027
+ export declare const NcAlarmModeDelaysEditSchema: z.ZodObject<{
3028
+ mode: z.ZodEnum<{
3029
+ home: "home";
3030
+ away: "away";
3031
+ night: "night";
3032
+ vacation: "vacation";
3033
+ custom_bypass: "custom_bypass";
3034
+ }>;
3035
+ exitDelaySec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3036
+ entryDelaySec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3037
+ triggeredDurationSec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3038
+ }, z.core.$strip>;
3039
+ export type NcAlarmModeDelaysEdit = z.infer<typeof NcAlarmModeDelaysEditSchema>;
3040
+ /** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
3041
+ export declare const NcAlarmNonBlockingEditSchema: z.ZodObject<{
3042
+ mode: z.ZodEnum<{
3043
+ home: "home";
3044
+ away: "away";
3045
+ night: "night";
3046
+ vacation: "vacation";
3047
+ custom_bypass: "custom_bypass";
3048
+ }>;
3049
+ deviceId: z.ZodNumber;
3050
+ nonBlocking: z.ZodBoolean;
3051
+ }, z.core.$strip>;
3052
+ export type NcAlarmNonBlockingEdit = z.infer<typeof NcAlarmNonBlockingEditSchema>;
3003
3053
  /**
3004
3054
  * One arm mode's non-blocking list: devices that may be open when that mode
3005
3055
  * arms, without the arm being refused.
@@ -3016,8 +3066,8 @@ export declare const NcAlarmNonBlockingSchema: z.ZodObject<{
3016
3066
  }, z.core.$strip>;
3017
3067
  export type NcAlarmNonBlocking = z.infer<typeof NcAlarmNonBlockingSchema>;
3018
3068
  /**
3019
- * The three durations the panel's state machine runs on, who hears about its
3020
- * transitions, and which openings each mode tolerates.
3069
+ * The three durations — global, and per mode since D697 — the panel's state
3070
+ * machine runs on, who hears about its transitions, and which openings each mode tolerates.
3021
3071
  *
3022
3072
  * They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
3023
3073
  * `alarm-panel` is `deviceNative` and its other provider mirrors somebody
@@ -3041,15 +3091,28 @@ export declare const NcAlarmSettingsSchema: z.ZodObject<{
3041
3091
  }>;
3042
3092
  deviceIds: z.ZodArray<z.ZodNumber>;
3043
3093
  }, z.core.$strip>>>;
3094
+ modeDelays: z.ZodDefault<z.ZodArray<z.ZodObject<{
3095
+ mode: z.ZodEnum<{
3096
+ home: "home";
3097
+ away: "away";
3098
+ night: "night";
3099
+ vacation: "vacation";
3100
+ custom_bypass: "custom_bypass";
3101
+ }>;
3102
+ exitDelaySec: z.ZodOptional<z.ZodNumber>;
3103
+ entryDelaySec: z.ZodOptional<z.ZodNumber>;
3104
+ triggeredDurationSec: z.ZodOptional<z.ZodNumber>;
3105
+ }, z.core.$strip>>>;
3044
3106
  }, z.core.$strip>;
3045
3107
  export type NcAlarmSettings = z.infer<typeof NcAlarmSettingsSchema>;
3046
3108
  /**
3047
3109
  * Every field optional — a tab edits one control at a time.
3048
3110
  *
3049
- * `nonBlocking` is re-declared WITHOUT its default: `.partial()` does not
3050
- * remove an inner `.default()`, so a patch that never named the field would
3051
- * parse to `nonBlocking: []` and wipe every mode's list on an unrelated edit
3052
- * (the same trap {@link NcRulePatchSchema} documents).
3111
+ * `nonBlocking` and `modeDelays` are re-declared WITHOUT their defaults:
3112
+ * `.partial()` does not remove an inner `.default()`, so a patch that never
3113
+ * named the field would parse to `[]` and wipe every mode's list on an
3114
+ * unrelated edit (the same trap {@link NcRulePatchSchema} documents). Here
3115
+ * `modeDelays` means EDITS, not the stored overrides.
3053
3116
  */
3054
3117
  export declare const NcAlarmSettingsPatchSchema: z.ZodObject<{
3055
3118
  exitDelaySec: z.ZodOptional<z.ZodNumber>;
@@ -3067,6 +3130,29 @@ export declare const NcAlarmSettingsPatchSchema: z.ZodObject<{
3067
3130
  }>;
3068
3131
  deviceIds: z.ZodArray<z.ZodNumber>;
3069
3132
  }, z.core.$strip>>>;
3133
+ modeDelays: z.ZodOptional<z.ZodArray<z.ZodObject<{
3134
+ mode: z.ZodEnum<{
3135
+ home: "home";
3136
+ away: "away";
3137
+ night: "night";
3138
+ vacation: "vacation";
3139
+ custom_bypass: "custom_bypass";
3140
+ }>;
3141
+ exitDelaySec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3142
+ entryDelaySec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3143
+ triggeredDurationSec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
3144
+ }, z.core.$strip>>>;
3145
+ nonBlockingEdit: z.ZodOptional<z.ZodObject<{
3146
+ mode: z.ZodEnum<{
3147
+ home: "home";
3148
+ away: "away";
3149
+ night: "night";
3150
+ vacation: "vacation";
3151
+ custom_bypass: "custom_bypass";
3152
+ }>;
3153
+ deviceId: z.ZodNumber;
3154
+ nonBlocking: z.ZodBoolean;
3155
+ }, z.core.$strip>>;
3070
3156
  }, z.core.$strip>;
3071
3157
  export type NcAlarmSettingsPatch = z.infer<typeof NcAlarmSettingsPatchSchema>;
3072
3158
  /**
@@ -3228,6 +3314,18 @@ export declare const NcAlarmConfigSchema: z.ZodObject<{
3228
3314
  }>;
3229
3315
  deviceIds: z.ZodArray<z.ZodNumber>;
3230
3316
  }, z.core.$strip>>>;
3317
+ modeDelays: z.ZodDefault<z.ZodArray<z.ZodObject<{
3318
+ mode: z.ZodEnum<{
3319
+ home: "home";
3320
+ away: "away";
3321
+ night: "night";
3322
+ vacation: "vacation";
3323
+ custom_bypass: "custom_bypass";
3324
+ }>;
3325
+ exitDelaySec: z.ZodOptional<z.ZodNumber>;
3326
+ entryDelaySec: z.ZodOptional<z.ZodNumber>;
3327
+ triggeredDurationSec: z.ZodOptional<z.ZodNumber>;
3328
+ }, z.core.$strip>>>;
3231
3329
  }, z.core.$strip>;
3232
3330
  coverage: z.ZodArray<z.ZodObject<{
3233
3331
  mode: z.ZodEnum<{
@@ -3304,6 +3402,55 @@ export declare const NcAlarmConfigSchema: z.ZodObject<{
3304
3402
  }, z.core.$strip>>;
3305
3403
  }, z.core.$strip>;
3306
3404
  export type NcAlarmConfig = z.infer<typeof NcAlarmConfigSchema>;
3405
+ /** At most this many ids in one `getAlarmSensors` call — a validation bound, not a target. */
3406
+ export declare const NC_ALARM_SENSORS_MAX = 500;
3407
+ export declare const NcAlarmSensorReadingSchema: z.ZodEnum<{
3408
+ unknown: "unknown";
3409
+ open: "open";
3410
+ closed: "closed";
3411
+ "not-opening": "not-opening";
3412
+ }>;
3413
+ export type NcAlarmSensorReading = z.infer<typeof NcAlarmSensorReadingSchema>;
3414
+ /** One device's state as the alarm reads it — the classifier the arm check uses. */
3415
+ export declare const NcAlarmSensorStateSchema: z.ZodObject<{
3416
+ deviceId: z.ZodNumber;
3417
+ reading: z.ZodEnum<{
3418
+ unknown: "unknown";
3419
+ open: "open";
3420
+ closed: "closed";
3421
+ "not-opening": "not-opening";
3422
+ }>;
3423
+ state: z.ZodNullable<z.ZodString>;
3424
+ unknownWhy: z.ZodNullable<z.ZodEnum<{
3425
+ "read-failed": "read-failed";
3426
+ "unknown-word": "unknown-word";
3427
+ }>>;
3428
+ online: z.ZodNullable<z.ZodBoolean>;
3429
+ }, z.core.$strip>;
3430
+ export type NcAlarmSensorState = z.infer<typeof NcAlarmSensorStateSchema>;
3431
+ export declare const NcAlarmSensorsInputSchema: z.ZodObject<{
3432
+ deviceIds: z.ZodArray<z.ZodNumber>;
3433
+ }, z.core.$strip>;
3434
+ export type NcAlarmSensorsInput = z.infer<typeof NcAlarmSensorsInputSchema>;
3435
+ export declare const NcAlarmSensorsSchema: z.ZodObject<{
3436
+ sensors: z.ZodArray<z.ZodObject<{
3437
+ deviceId: z.ZodNumber;
3438
+ reading: z.ZodEnum<{
3439
+ unknown: "unknown";
3440
+ open: "open";
3441
+ closed: "closed";
3442
+ "not-opening": "not-opening";
3443
+ }>;
3444
+ state: z.ZodNullable<z.ZodString>;
3445
+ unknownWhy: z.ZodNullable<z.ZodEnum<{
3446
+ "read-failed": "read-failed";
3447
+ "unknown-word": "unknown-word";
3448
+ }>>;
3449
+ online: z.ZodNullable<z.ZodBoolean>;
3450
+ }, z.core.$strip>>;
3451
+ readAt: z.ZodNumber;
3452
+ }, z.core.$strip>;
3453
+ export type NcAlarmSensors = z.infer<typeof NcAlarmSensorsSchema>;
3307
3454
  /**
3308
3455
  * The most seconds of footage any notification rule may ask a camera to retain.
3309
3456
  *
@@ -6435,6 +6582,18 @@ export declare const notificationRulesCapability: {
6435
6582
  }>;
6436
6583
  deviceIds: z.ZodArray<z.ZodNumber>;
6437
6584
  }, z.core.$strip>>>;
6585
+ modeDelays: z.ZodDefault<z.ZodArray<z.ZodObject<{
6586
+ mode: z.ZodEnum<{
6587
+ home: "home";
6588
+ away: "away";
6589
+ night: "night";
6590
+ vacation: "vacation";
6591
+ custom_bypass: "custom_bypass";
6592
+ }>;
6593
+ exitDelaySec: z.ZodOptional<z.ZodNumber>;
6594
+ entryDelaySec: z.ZodOptional<z.ZodNumber>;
6595
+ triggeredDurationSec: z.ZodOptional<z.ZodNumber>;
6596
+ }, z.core.$strip>>>;
6438
6597
  }, z.core.$strip>;
6439
6598
  coverage: z.ZodArray<z.ZodObject<{
6440
6599
  mode: z.ZodEnum<{
@@ -6511,8 +6670,9 @@ export declare const notificationRulesCapability: {
6511
6670
  }, z.core.$strip>>;
6512
6671
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
6513
6672
  /**
6514
- * Patch the settings (durations, recipients, per-mode non-blocking lists;
6515
- * `announceArm` is accepted and ignored — D630). Returns the WHOLE config,
6673
+ * Patch the settings (durations — global and per mode —, recipients,
6674
+ * per-mode non-blocking lists or one membership edit; `announceArm` is
6675
+ * accepted and ignored — D630). Returns the WHOLE config,
6516
6676
  * coverage and `live` included, so a
6517
6677
  * client never has to guess what the server settled on — the panel clamps
6518
6678
  * and normalises, and a form that re-rendered from its own input would
@@ -6535,6 +6695,29 @@ export declare const notificationRulesCapability: {
6535
6695
  }>;
6536
6696
  deviceIds: z.ZodArray<z.ZodNumber>;
6537
6697
  }, z.core.$strip>>>;
6698
+ modeDelays: z.ZodOptional<z.ZodArray<z.ZodObject<{
6699
+ mode: z.ZodEnum<{
6700
+ home: "home";
6701
+ away: "away";
6702
+ night: "night";
6703
+ vacation: "vacation";
6704
+ custom_bypass: "custom_bypass";
6705
+ }>;
6706
+ exitDelaySec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
6707
+ entryDelaySec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
6708
+ triggeredDurationSec: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
6709
+ }, z.core.$strip>>>;
6710
+ nonBlockingEdit: z.ZodOptional<z.ZodObject<{
6711
+ mode: z.ZodEnum<{
6712
+ home: "home";
6713
+ away: "away";
6714
+ night: "night";
6715
+ vacation: "vacation";
6716
+ custom_bypass: "custom_bypass";
6717
+ }>;
6718
+ deviceId: z.ZodNumber;
6719
+ nonBlocking: z.ZodBoolean;
6720
+ }, z.core.$strip>>;
6538
6721
  }, z.core.$strip>;
6539
6722
  }, z.core.$strip>, z.ZodObject<{
6540
6723
  deviceId: z.ZodNullable<z.ZodNumber>;
@@ -6554,6 +6737,18 @@ export declare const notificationRulesCapability: {
6554
6737
  }>;
6555
6738
  deviceIds: z.ZodArray<z.ZodNumber>;
6556
6739
  }, z.core.$strip>>>;
6740
+ modeDelays: z.ZodDefault<z.ZodArray<z.ZodObject<{
6741
+ mode: z.ZodEnum<{
6742
+ home: "home";
6743
+ away: "away";
6744
+ night: "night";
6745
+ vacation: "vacation";
6746
+ custom_bypass: "custom_bypass";
6747
+ }>;
6748
+ exitDelaySec: z.ZodOptional<z.ZodNumber>;
6749
+ entryDelaySec: z.ZodOptional<z.ZodNumber>;
6750
+ triggeredDurationSec: z.ZodOptional<z.ZodNumber>;
6751
+ }, z.core.$strip>>>;
6557
6752
  }, z.core.$strip>;
6558
6753
  coverage: z.ZodArray<z.ZodObject<{
6559
6754
  mode: z.ZodEnum<{
@@ -6629,6 +6824,33 @@ export declare const notificationRulesCapability: {
6629
6824
  }, z.core.$strip>>;
6630
6825
  }, z.core.$strip>>;
6631
6826
  }, z.core.$strip>, "mutation">;
6827
+ /**
6828
+ * The CURRENT state of each asked device as the alarm reads it (D697) — open, closed,
6829
+ * unknown (why) or not an opening, plus liveness. Classified by the same table the arm
6830
+ * check uses (`alarm-openings.ts`), so the editor and the arm can never disagree. The
6831
+ * caller names the ids (the household openings it already holds); at most
6832
+ * `NC_ALARM_SENSORS_MAX`.
6833
+ */
6834
+ readonly getAlarmSensors: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
6835
+ deviceIds: z.ZodArray<z.ZodNumber>;
6836
+ }, z.core.$strip>, z.ZodObject<{
6837
+ sensors: z.ZodArray<z.ZodObject<{
6838
+ deviceId: z.ZodNumber;
6839
+ reading: z.ZodEnum<{
6840
+ unknown: "unknown";
6841
+ open: "open";
6842
+ closed: "closed";
6843
+ "not-opening": "not-opening";
6844
+ }>;
6845
+ state: z.ZodNullable<z.ZodString>;
6846
+ unknownWhy: z.ZodNullable<z.ZodEnum<{
6847
+ "read-failed": "read-failed";
6848
+ "unknown-word": "unknown-word";
6849
+ }>>;
6850
+ online: z.ZodNullable<z.ZodBoolean>;
6851
+ }, z.core.$strip>>;
6852
+ readAt: z.ZodNumber;
6853
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
6632
6854
  };
6633
6855
  };
6634
6856
  export type INotificationRulesProvider = InferProvider<typeof notificationRulesCapability>;