@camstack/types 1.2.283 → 1.2.284

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 (37) 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 +1 -1
  8. package/dist/capabilities/motion.cap.d.ts +9 -8
  9. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +147 -15
  10. package/dist/capabilities/pipeline-runner.cap.d.ts +2 -0
  11. package/dist/capabilities/ptz-autotrack.cap.d.ts +2 -3
  12. package/dist/catalogs/sensor-active-state.d.ts +8 -10
  13. package/dist/composition/presets/doorbell-feature.d.ts +1 -1
  14. package/dist/{composition-Dq42XWp0.mjs → composition-43aqsZQj.mjs} +6 -7
  15. package/dist/{composition-DG4jVTfB.js → composition-w3gBWMer.js} +6 -7
  16. package/dist/device/hub-motion-read.d.ts +22 -0
  17. package/dist/device-extension/slot-descriptor.d.ts +3 -3
  18. package/dist/enums/event-category.d.ts +9 -0
  19. package/dist/enums.js +1 -1
  20. package/dist/enums.mjs +1 -1
  21. package/dist/{event-category-C5xZWqz6.mjs → event-category-BGmz_oxW.mjs} +9 -0
  22. package/dist/{event-category-MbnB-6AN.js → event-category-DmS_tLsU.js} +9 -0
  23. package/dist/generated/extension-slots.d.ts +2 -6
  24. package/dist/index.d.ts +4 -1
  25. package/dist/index.js +252 -201
  26. package/dist/index.mjs +243 -199
  27. package/dist/interfaces/event-bus.d.ts +5 -3
  28. package/dist/interfaces/pipeline-runner-capability.d.ts +2 -0
  29. package/dist/node.js +1 -1
  30. package/dist/node.mjs +1 -1
  31. package/dist/pipeline/camera-sensors.d.ts +133 -9
  32. package/dist/pipeline/motion-ownership.d.ts +13 -0
  33. package/dist/pipeline/provider-motion.d.ts +33 -0
  34. package/dist/{sleep-gU6hqv4_.mjs → sleep-CDCONfkt.mjs} +1 -1
  35. package/dist/{sleep-DCbD8sdg.js → sleep-G4F3X9X_.js} +1 -1
  36. package/dist/utils/addon-id.d.ts +2 -2
  37. 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";
@@ -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.284",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",