@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
@@ -79,6 +79,10 @@ export interface MotionAnalysisPayload {
79
79
  export type MotionOnMotionChangedPayload = import('../capabilities/motion.cap.js').MotionOnMotionChangedData & {
80
80
  [key: string]: unknown;
81
81
  };
82
+ /** A camera's RAW onboard push (D673) — see `pipeline/provider-motion.ts`. */
83
+ export type ProviderMotionPayload = import('../pipeline/provider-motion.js').ProviderMotionData & {
84
+ [key: string]: unknown;
85
+ };
82
86
  /** Raw motion zone from CCL (before minArea filter). */
83
87
  export interface MotionRawZone {
84
88
  readonly bbox: readonly [number, number, number, number];
@@ -1055,9 +1059,7 @@ export interface EventCatalog {
1055
1059
  deviceId: number;
1056
1060
  addonId?: string;
1057
1061
  };
1058
- 'provider.motion': {
1059
- active: boolean;
1060
- };
1062
+ 'provider.motion': ProviderMotionPayload;
1061
1063
  'provider.detection': {
1062
1064
  detections: unknown;
1063
1065
  };
@@ -165,6 +165,8 @@ export interface RunnerLocalLoad {
165
165
  * / pre-multi-device runners. */
166
166
  readonly devices: readonly RunnerDeviceLoad[];
167
167
  readonly hardware: RunnerHardwareCapabilities;
168
+ /** D696: `'orchestrator'` = this runner never writes a camera's `motion` slice. Absent = an older runner, which does. */
169
+ readonly motionSliceWriter?: 'orchestrator';
168
170
  }
169
171
  /**
170
172
  * Aggregate runtime metrics for a runner's whole local pool. Mirrors the
package/dist/node.js CHANGED
@@ -21,7 +21,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  enumerable: true
22
22
  }) : target, mod));
23
23
  //#endregion
24
- const require_composition = require("./composition-DG4jVTfB.js");
24
+ const require_composition = require("./composition-w3gBWMer.js");
25
25
  const require_err_msg = require("./err-msg-Dx2Kor0g.js");
26
26
  let node_crypto = require("node:crypto");
27
27
  let node_fs = require("node:fs");
package/dist/node.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { Ct as chooseFfmpegBinary, Dt as getFfmpegDownloadUrl, Et as getFfmpegArtifact, Lt as isSoftwareDecode, Nt as buildFfmpegArgs, Ot as canonicalHash, P as compositionSourceKey, St as FFMPEG_PATH_ENV, Tt as FFMPEG_RELEASE, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, kt as Fmp4BoxSplitter, wt as ffmpegBinaryName } from "./composition-Dq42XWp0.mjs";
1
+ import { Ct as chooseFfmpegBinary, Dt as getFfmpegDownloadUrl, Et as getFfmpegArtifact, Lt as isSoftwareDecode, Nt as buildFfmpegArgs, Ot as canonicalHash, P as compositionSourceKey, St as FFMPEG_PATH_ENV, Tt as FFMPEG_RELEASE, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, kt as Fmp4BoxSplitter, wt as ffmpegBinaryName } from "./composition-43aqsZQj.mjs";
2
2
  import { t as errMsg } from "./err-msg-DX6i_MY4.mjs";
3
3
  import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
4
4
  import * as fs from "node:fs";
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Alarm settings, as pure functions (D697). Inheritance of per-mode delays, application of a
3
+ * patch's per-field edits and single-membership edit, and the "did my patch land" check.
4
+ *
5
+ * The engine and both clients call these; nobody re-implements them. No I/O, no clock.
6
+ */
7
+ import type { AlarmArmMode } from '../capabilities/alarm-panel.cap.js';
8
+ import { type NcAlarmModeDelays, type NcAlarmModeDelaysEdit, type NcAlarmNonBlocking, type NcAlarmNonBlockingEdit, type NcAlarmSettings, type NcAlarmSettingsPatch } from '../capabilities/notification-rules.cap.js';
9
+ export type NcAlarmDelayField = 'exitDelaySec' | 'entryDelaySec' | 'triggeredDurationSec';
10
+ export declare const NC_ALARM_DELAY_FIELDS: readonly NcAlarmDelayField[];
11
+ export type NcAlarmDelaySource = 'mode' | 'default';
12
+ export interface NcAlarmResolvedDelays {
13
+ readonly exitDelaySec: number;
14
+ readonly entryDelaySec: number;
15
+ readonly triggeredDurationSec: number;
16
+ readonly source: Readonly<Record<NcAlarmDelayField, NcAlarmDelaySource>>;
17
+ }
18
+ /**
19
+ * A settings answer as it travels on the wire. Clients do not parse answers, so a hub older
20
+ * than D697 sends no `modeDelays` (nor, before D636, `nonBlocking`); every reader here treats an absent key as "no overrides".
21
+ */
22
+ export type NcAlarmSettingsAnswer = Omit<NcAlarmSettings, 'modeDelays' | 'nonBlocking'> & {
23
+ readonly modeDelays?: readonly NcAlarmModeDelays[];
24
+ /** Absent on a hub older than D636: read as "no lists". */
25
+ readonly nonBlocking?: readonly NcAlarmNonBlocking[];
26
+ };
27
+ export type NcAlarmDelaySettings = Pick<NcAlarmSettingsAnswer, NcAlarmDelayField | 'modeDelays'>;
28
+ /** What `mode` actually runs on: its own overrides, the global value for every other field. */
29
+ export declare function resolveModeDelays(settings: NcAlarmDelaySettings, mode: AlarmArmMode): NcAlarmResolvedDelays;
30
+ /**
31
+ * Apply per-field edits to the stored overrides. Returns new arrays, never mutates the input;
32
+ * an entry with no field left is dropped (the mode inherits everything again).
33
+ */
34
+ export declare function applyModeDelaysEdits(current: readonly NcAlarmModeDelays[], edits: readonly NcAlarmModeDelaysEdit[]): NcAlarmModeDelays[];
35
+ export type NcAlarmNonBlockingEditResult = {
36
+ readonly kind: 'applied';
37
+ readonly lists: NcAlarmNonBlocking[];
38
+ readonly changed: boolean;
39
+ } | {
40
+ readonly kind: 'refused';
41
+ readonly reason: 'list-full';
42
+ readonly mode: AlarmArmMode;
43
+ readonly max: number;
44
+ };
45
+ /**
46
+ * Put ONE device on, or take it off, ONE mode's list. A no-op answers `changed: false`; an add
47
+ * to a full list is REFUSED by reason (never silently dropped); an emptied list drops its entry.
48
+ */
49
+ export declare function applyNonBlockingEdit(lists: readonly NcAlarmNonBlocking[], edit: NcAlarmNonBlockingEdit): NcAlarmNonBlockingEditResult;
50
+ /**
51
+ * True iff every key the patch sent is reflected in what the host returned. A host older than
52
+ * this build strips the keys it does not know; this is how a client tells "saved" from "parsed
53
+ * and dropped". `announceArm` is ignored (parsed, never read). A `null` clear "lands" on a host
54
+ * that stripped the key (it lacks the field) — harmless, because such a host stores no overrides.
55
+ * A whole-list `nonBlocking` naming a mode the panel does not offer reads as "not landed" (the host
56
+ * drops it); only older clients and the prune send whole lists, and they do not call this.
57
+ */
58
+ export declare function alarmPatchLanded(patch: NcAlarmSettingsPatch, returned: NcAlarmSettingsAnswer): boolean;
@@ -28,18 +28,45 @@ export declare const CameraSensorRefSchema: z.ZodObject<{
28
28
  }, z.core.$strip>;
29
29
  export type CameraSensorRef = z.infer<typeof CameraSensorRefSchema>;
30
30
  export declare function cameraSensorRefKey(ref: CameraSensorRef): string;
31
- /** CS-1 accepts exactly one mode; CS-2 (D673) widens it to confirm / replace. */
32
- export declare const CameraSensorsModeSchema: z.ZodEnum<{
31
+ /**
32
+ * A sensor's mode (D673). `in-addition`: its motion is the camera's motion too.
33
+ * `replace`: its motion is the camera's, and while one is READY the camera's
34
+ * own motion no longer counts on its own. `confirm`: while one is READY the
35
+ * camera's own motion counts only while a confirm sensor is active — with or
36
+ * without a replace sensor (spec C2, the controller's ruling on Q1).
37
+ */
38
+ export declare const CameraSensorModeSchema: z.ZodEnum<{
33
39
  "in-addition": "in-addition";
40
+ confirm: "confirm";
41
+ replace: "replace";
34
42
  }>;
35
- export type CameraSensorsMode = z.infer<typeof CameraSensorsModeSchema>;
36
- export declare const CameraSensorsConfigSchema: z.ZodObject<{
37
- mode: z.ZodEnum<{
43
+ export type CameraSensorMode = z.infer<typeof CameraSensorModeSchema>;
44
+ /** A stored sensor with no mode — every CS-1 row — is in addition. */
45
+ export declare const DEFAULT_CAMERA_SENSOR_MODE: CameraSensorMode;
46
+ export declare const CameraSensorEntrySchema: z.ZodObject<{
47
+ addonId: z.ZodString;
48
+ stableId: z.ZodString;
49
+ mode: z.ZodDefault<z.ZodEnum<{
38
50
  "in-addition": "in-addition";
39
- }>;
51
+ confirm: "confirm";
52
+ replace: "replace";
53
+ }>>;
54
+ }, z.core.$strip>;
55
+ export type CameraSensorEntry = z.infer<typeof CameraSensorEntrySchema>;
56
+ /**
57
+ * A camera's attached sensors. A CS-1 row carried an envelope
58
+ * `mode: 'in-addition'`: `z.object` drops it on parse, and the PARSED value is
59
+ * what the write stores (D672 rule 3), so it is never written again.
60
+ */
61
+ export declare const CameraSensorsConfigSchema: z.ZodObject<{
40
62
  sensors: z.ZodArray<z.ZodObject<{
41
63
  addonId: z.ZodString;
42
64
  stableId: z.ZodString;
65
+ mode: z.ZodDefault<z.ZodEnum<{
66
+ "in-addition": "in-addition";
67
+ confirm: "confirm";
68
+ replace: "replace";
69
+ }>>;
43
70
  }, z.core.$strip>>;
44
71
  }, z.core.$strip>;
45
72
  export type CameraSensorsConfig = z.infer<typeof CameraSensorsConfigSchema>;
@@ -50,6 +77,11 @@ export declare const CameraSensorAttachmentSchema: z.ZodDiscriminatedUnion<[z.Zo
50
77
  caps: z.ZodReadonly<z.ZodArray<z.ZodString>>;
51
78
  addonId: z.ZodString;
52
79
  stableId: z.ZodString;
80
+ mode: z.ZodDefault<z.ZodEnum<{
81
+ "in-addition": "in-addition";
82
+ confirm: "confirm";
83
+ replace: "replace";
84
+ }>>;
53
85
  }, z.core.$strip>, z.ZodObject<{
54
86
  state: z.ZodLiteral<"offline">;
55
87
  deviceId: z.ZodNumber;
@@ -60,11 +92,21 @@ export declare const CameraSensorAttachmentSchema: z.ZodDiscriminatedUnion<[z.Zo
60
92
  }>;
61
93
  addonId: z.ZodString;
62
94
  stableId: z.ZodString;
95
+ mode: z.ZodDefault<z.ZodEnum<{
96
+ "in-addition": "in-addition";
97
+ confirm: "confirm";
98
+ replace: "replace";
99
+ }>>;
63
100
  }, z.core.$strip>, z.ZodObject<{
64
101
  state: z.ZodLiteral<"missing">;
65
102
  reason: z.ZodString;
66
103
  addonId: z.ZodString;
67
104
  stableId: z.ZodString;
105
+ mode: z.ZodDefault<z.ZodEnum<{
106
+ "in-addition": "in-addition";
107
+ confirm: "confirm";
108
+ replace: "replace";
109
+ }>>;
68
110
  }, z.core.$strip>, z.ZodObject<{
69
111
  state: z.ZodLiteral<"unsupported">;
70
112
  deviceId: z.ZodNumber;
@@ -72,11 +114,21 @@ export declare const CameraSensorAttachmentSchema: z.ZodDiscriminatedUnion<[z.Zo
72
114
  reason: z.ZodString;
73
115
  addonId: z.ZodString;
74
116
  stableId: z.ZodString;
117
+ mode: z.ZodDefault<z.ZodEnum<{
118
+ "in-addition": "in-addition";
119
+ confirm: "confirm";
120
+ replace: "replace";
121
+ }>>;
75
122
  }, z.core.$strip>, z.ZodObject<{
76
123
  state: z.ZodLiteral<"unreadable">;
77
124
  reason: z.ZodString;
78
125
  addonId: z.ZodString;
79
126
  stableId: z.ZodString;
127
+ mode: z.ZodDefault<z.ZodEnum<{
128
+ "in-addition": "in-addition";
129
+ confirm: "confirm";
130
+ replace: "replace";
131
+ }>>;
80
132
  }, z.core.$strip>], "state">;
81
133
  export type CameraSensorAttachment = z.infer<typeof CameraSensorAttachmentSchema>;
82
134
  /**
@@ -91,16 +143,55 @@ export declare const CameraSensorsNotForwardedSchema: z.ZodEnum<{
91
143
  "no-active-detection": "no-active-detection";
92
144
  }>;
93
145
  export type CameraSensorsNotForwarded = z.infer<typeof CameraSensorsNotForwardedSchema>;
146
+ /** Whether the camera's OWN motion counts on its own (D673 C2), from its READY sensors (C3). */
147
+ export declare const CameraOwnMotionSchema: z.ZodEnum<{
148
+ never: "never";
149
+ always: "always";
150
+ "when-confirmed": "when-confirmed";
151
+ }>;
152
+ export type CameraOwnMotion = z.infer<typeof CameraOwnMotionSchema>;
153
+ /** Confirm / Replace cannot suppress this camera's motion: its provider still emits it directly (D673 C13). */
154
+ export declare const CameraSensorsNotEnforcedSchema: z.ZodEnum<{
155
+ "provider-not-split": "provider-not-split";
156
+ }>;
157
+ export type CameraSensorsNotEnforced = z.infer<typeof CameraSensorsNotEnforcedSchema>;
158
+ /**
159
+ * The camera's OWN onboard motion (D696): the raw input the bridge combines,
160
+ * never the effective value. The camera's `motion` slice is the effective one,
161
+ * so a view of the camera's own row reads this.
162
+ * - `atMs`: when the bridge received the camera's last own edge.
163
+ * - `detected`: evaluated WHEN THE STATUS IS ASKED — the last edge said `true`
164
+ * AND it is younger than the window the bridge counts the camera's own motion
165
+ * for (`motionCooldownMs`, floored at two sustain ticks). A camera that never
166
+ * sends a clear (heartbeats only) therefore reads `false` once no push came
167
+ * within the window; a status read is a snapshot, so a live view re-asks.
168
+ * Absent = this orchestrator has not received the camera's own motion since it
169
+ * started (unknown, never "quiet"), or an orchestrator older than D696.
170
+ */
171
+ export declare const CameraRawLevelSchema: z.ZodObject<{
172
+ detected: z.ZodBoolean;
173
+ atMs: z.ZodNumber;
174
+ }, z.core.$strip>;
175
+ export type CameraRawLevel = z.infer<typeof CameraRawLevelSchema>;
94
176
  export declare const CameraSensorsStatusSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
95
177
  state: z.ZodLiteral<"not-configured">;
178
+ cameraLevel: z.ZodOptional<z.ZodObject<{
179
+ detected: z.ZodBoolean;
180
+ atMs: z.ZodNumber;
181
+ }, z.core.$strip>>;
96
182
  }, z.core.$strip>, z.ZodObject<{
97
183
  state: z.ZodLiteral<"unreadable">;
98
184
  reason: z.ZodString;
185
+ cameraLevel: z.ZodOptional<z.ZodObject<{
186
+ detected: z.ZodBoolean;
187
+ atMs: z.ZodNumber;
188
+ }, z.core.$strip>>;
99
189
  }, z.core.$strip>, z.ZodObject<{
100
190
  state: z.ZodLiteral<"configured">;
101
- mode: z.ZodEnum<{
102
- "in-addition": "in-addition";
103
- }>;
191
+ cameraLevel: z.ZodOptional<z.ZodObject<{
192
+ detected: z.ZodBoolean;
193
+ atMs: z.ZodNumber;
194
+ }, z.core.$strip>>;
104
195
  sensors: z.ZodReadonly<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
105
196
  state: z.ZodLiteral<"ready">;
106
197
  deviceId: z.ZodNumber;
@@ -108,6 +199,11 @@ export declare const CameraSensorsStatusSchema: z.ZodDiscriminatedUnion<[z.ZodOb
108
199
  caps: z.ZodReadonly<z.ZodArray<z.ZodString>>;
109
200
  addonId: z.ZodString;
110
201
  stableId: z.ZodString;
202
+ mode: z.ZodDefault<z.ZodEnum<{
203
+ "in-addition": "in-addition";
204
+ confirm: "confirm";
205
+ replace: "replace";
206
+ }>>;
111
207
  }, z.core.$strip>, z.ZodObject<{
112
208
  state: z.ZodLiteral<"offline">;
113
209
  deviceId: z.ZodNumber;
@@ -118,11 +214,21 @@ export declare const CameraSensorsStatusSchema: z.ZodDiscriminatedUnion<[z.ZodOb
118
214
  }>;
119
215
  addonId: z.ZodString;
120
216
  stableId: z.ZodString;
217
+ mode: z.ZodDefault<z.ZodEnum<{
218
+ "in-addition": "in-addition";
219
+ confirm: "confirm";
220
+ replace: "replace";
221
+ }>>;
121
222
  }, z.core.$strip>, z.ZodObject<{
122
223
  state: z.ZodLiteral<"missing">;
123
224
  reason: z.ZodString;
124
225
  addonId: z.ZodString;
125
226
  stableId: z.ZodString;
227
+ mode: z.ZodDefault<z.ZodEnum<{
228
+ "in-addition": "in-addition";
229
+ confirm: "confirm";
230
+ replace: "replace";
231
+ }>>;
126
232
  }, z.core.$strip>, z.ZodObject<{
127
233
  state: z.ZodLiteral<"unsupported">;
128
234
  deviceId: z.ZodNumber;
@@ -130,16 +236,34 @@ export declare const CameraSensorsStatusSchema: z.ZodDiscriminatedUnion<[z.ZodOb
130
236
  reason: z.ZodString;
131
237
  addonId: z.ZodString;
132
238
  stableId: z.ZodString;
239
+ mode: z.ZodDefault<z.ZodEnum<{
240
+ "in-addition": "in-addition";
241
+ confirm: "confirm";
242
+ replace: "replace";
243
+ }>>;
133
244
  }, z.core.$strip>, z.ZodObject<{
134
245
  state: z.ZodLiteral<"unreadable">;
135
246
  reason: z.ZodString;
136
247
  addonId: z.ZodString;
137
248
  stableId: z.ZodString;
249
+ mode: z.ZodDefault<z.ZodEnum<{
250
+ "in-addition": "in-addition";
251
+ confirm: "confirm";
252
+ replace: "replace";
253
+ }>>;
138
254
  }, z.core.$strip>], "state">>>;
255
+ cameraMotion: z.ZodOptional<z.ZodEnum<{
256
+ never: "never";
257
+ always: "always";
258
+ "when-confirmed": "when-confirmed";
259
+ }>>;
139
260
  notForwarded: z.ZodOptional<z.ZodEnum<{
140
261
  "onboard-not-listed": "onboard-not-listed";
141
262
  "no-active-detection": "no-active-detection";
142
263
  }>>;
264
+ notEnforced: z.ZodOptional<z.ZodEnum<{
265
+ "provider-not-split": "provider-not-split";
266
+ }>>;
143
267
  }, z.core.$strip>], "state">;
144
268
  export type CameraSensorsStatus = z.infer<typeof CameraSensorsStatusSchema>;
145
269
  /** What a camera reads before its first settings read ANSWERED (D315). */
@@ -0,0 +1,13 @@
1
+ /**
2
+ * D475's rule, in ONE place: a camera whose `motionSources` lists anything
3
+ * other than `'analyzer'` (firmware `onboard`, a device's own
4
+ * `device-activity`) owns its motion through that SENSOR, and the analyzer
5
+ * never re-describes it — even when the list carries `'analyzer'` too. A
6
+ * camera with `['analyzer']` alone is driven by the analyzer.
7
+ *
8
+ * Read by the runner (which analyzer edge reaches its phase machine) and by
9
+ * the orchestrator's camera motion slice (which motion events the slice
10
+ * counts, D696). Two copies of the rule would be two authorities.
11
+ */
12
+ import type { MotionSources } from '../capabilities/pipeline-runner.cap.js';
13
+ export declare function cameraOwnsMotionViaSensor(motionSources: MotionSources): boolean;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * A camera provider's RAW onboard motion push (D673). Providers emit THIS —
3
+ * never `MotionOnMotionChanged` — and the orchestrator's camera-sensors bridge
4
+ * is the one emitter of the camera's EFFECTIVE onboard motion (a pass-through
5
+ * for a camera with no attached sensor). Guarded by
6
+ * `scripts/check-onboard-motion-emitters.ts`.
7
+ */
8
+ import type { z } from 'zod';
9
+ import { EventCategory } from '../enums/event-category.js';
10
+ import { type EventSource, type TypedSystemEvent } from '../interfaces/event-bus.js';
11
+ /** The motion event's data without `triggeredBy`: only the bridge names a trigger. */
12
+ export declare const ProviderMotionDataSchema: z.ZodObject<{
13
+ timestamp: z.ZodNumber;
14
+ deviceId: z.ZodNumber;
15
+ detected: z.ZodBoolean;
16
+ source: z.ZodEnum<{
17
+ onboard: "onboard";
18
+ analyzer: "analyzer";
19
+ "device-activity": "device-activity";
20
+ }>;
21
+ regions: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodObject<{
22
+ bbox: z.ZodObject<{
23
+ x: z.ZodNumber;
24
+ y: z.ZodNumber;
25
+ w: z.ZodNumber;
26
+ h: z.ZodNumber;
27
+ }, z.core.$strip>;
28
+ pixelCount: z.ZodNumber;
29
+ intensity: z.ZodNumber;
30
+ }, z.core.$strip>>>>;
31
+ }, z.core.$strip>;
32
+ export type ProviderMotionData = z.infer<typeof ProviderMotionDataSchema>;
33
+ export declare function providerMotionEvent(source: EventSource, data: ProviderMotionData): TypedSystemEvent<EventCategory.ProviderMotion>;
@@ -1,4 +1,4 @@
1
- import { t as EventCategory } from "./event-category-C5xZWqz6.mjs";
1
+ import { t as EventCategory } from "./event-category-BGmz_oxW.mjs";
2
2
  import { z } from "zod";
3
3
  //#region src/audio/audio-chunk-format.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- const require_event_category = require("./event-category-MbnB-6AN.js");
1
+ const require_event_category = require("./event-category-DmS_tLsU.js");
2
2
  let zod = require("zod");
3
3
  //#region src/audio/audio-chunk-format.ts
4
4
  /**
@@ -17,8 +17,8 @@
17
17
  * So `entry.providerAddonId === this.ctx.id` is silently, permanently false
18
18
  * for a builtin — and only for a builtin, which is why it survives a green
19
19
  * suite whose fake supplies the bare id. That is exactly how camera 615's
20
- * virtual doorbell latched `unbound` for twelve hours on 2026-08-07 while its
21
- * binding was intact ([D72](../../../../docs/decisions/adr-0072.md)).
20
+ * virtual doorbell (retired since, D671) latched `unbound` for twelve hours on
21
+ * 2026-08-07 while its binding was intact ([D72](../../../../docs/decisions/adr-0072.md)).
22
22
  *
23
23
  * Route every comparison between `ctx.id` and a registry/store addon id
24
24
  * through {@link isSameAddonId}. `scripts/check-addon-id-comparison.ts`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.283",
3
+ "version": "1.2.285",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",