@camstack/types 0.1.39 → 0.1.40

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 (83) hide show
  1. package/dist/addon/base-addon.d.ts +2 -2
  2. package/dist/addon/base-addon.d.ts.map +1 -1
  3. package/dist/capabilities/addon-settings.cap.d.ts +1 -0
  4. package/dist/capabilities/addon-settings.cap.d.ts.map +1 -1
  5. package/dist/capabilities/addons.cap.d.ts +187 -1
  6. package/dist/capabilities/addons.cap.d.ts.map +1 -1
  7. package/dist/capabilities/alerts.cap.d.ts +5 -5
  8. package/dist/capabilities/audio-analyzer.cap.d.ts +2 -2
  9. package/dist/capabilities/camera-pipeline-config.cap.d.ts +43 -0
  10. package/dist/capabilities/camera-pipeline-config.cap.d.ts.map +1 -0
  11. package/dist/capabilities/index.d.ts +11 -4
  12. package/dist/capabilities/index.d.ts.map +1 -1
  13. package/dist/capabilities/local-network.cap.d.ts +1 -1
  14. package/dist/capabilities/mask-shape.d.ts +99 -0
  15. package/dist/capabilities/mask-shape.d.ts.map +1 -0
  16. package/dist/capabilities/mesh-network.cap.d.ts +3 -3
  17. package/dist/capabilities/motion-zones.cap.d.ts +94 -13
  18. package/dist/capabilities/motion-zones.cap.d.ts.map +1 -1
  19. package/dist/capabilities/mqtt-broker.cap.d.ts +3 -3
  20. package/dist/capabilities/native-object-detection.cap.d.ts +73 -3
  21. package/dist/capabilities/native-object-detection.cap.d.ts.map +1 -1
  22. package/dist/capabilities/network-access.cap.d.ts +7 -7
  23. package/dist/capabilities/oauth-integration.cap.d.ts +4 -2
  24. package/dist/capabilities/oauth-integration.cap.d.ts.map +1 -1
  25. package/dist/capabilities/pipeline-runner.cap.d.ts +2 -0
  26. package/dist/capabilities/pipeline-runner.cap.d.ts.map +1 -1
  27. package/dist/capabilities/privacy-mask.cap.d.ts +206 -0
  28. package/dist/capabilities/privacy-mask.cap.d.ts.map +1 -0
  29. package/dist/capabilities/schemas/detection-shared.d.ts +14 -1
  30. package/dist/capabilities/schemas/detection-shared.d.ts.map +1 -1
  31. package/dist/capabilities/sso-bridge.cap.d.ts +3 -3
  32. package/dist/capabilities/stream-catalog.cap.d.ts +82 -0
  33. package/dist/capabilities/stream-catalog.cap.d.ts.map +1 -0
  34. package/dist/capabilities/user-management.cap.d.ts +20 -20
  35. package/dist/capabilities/webrtc-session.cap.d.ts +34 -0
  36. package/dist/capabilities/webrtc-session.cap.d.ts.map +1 -1
  37. package/dist/enums/event-category.d.ts +28 -1
  38. package/dist/enums/event-category.d.ts.map +1 -1
  39. package/dist/generated/addon-api.d.ts +1250 -670
  40. package/dist/generated/addon-api.d.ts.map +1 -1
  41. package/dist/generated/cap-status-types.d.ts +3 -1
  42. package/dist/generated/cap-status-types.d.ts.map +1 -1
  43. package/dist/generated/capability-router-map.d.ts +11 -2
  44. package/dist/generated/capability-router-map.d.ts.map +1 -1
  45. package/dist/generated/device-local-state.d.ts +6 -0
  46. package/dist/generated/device-local-state.d.ts.map +1 -1
  47. package/dist/generated/device-proxy.d.ts +8 -0
  48. package/dist/generated/device-proxy.d.ts.map +1 -1
  49. package/dist/generated/method-access-map.d.ts +1 -1
  50. package/dist/generated/method-access-map.d.ts.map +1 -1
  51. package/dist/generated/system-proxy.d.ts +1 -1
  52. package/dist/generated/system-proxy.d.ts.map +1 -1
  53. package/dist/health/wiring-health.d.ts +136 -0
  54. package/dist/health/wiring-health.d.ts.map +1 -0
  55. package/dist/{index-QRlzao1I.mjs → index-C2zzIDdX.mjs} +829 -420
  56. package/dist/index-C2zzIDdX.mjs.map +1 -0
  57. package/dist/{index-CMM1Y9W6.js → index-DnpdVFKv.js} +458 -49
  58. package/dist/index-DnpdVFKv.js.map +1 -0
  59. package/dist/index.d.ts +2 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +176 -4
  62. package/dist/index.js.map +1 -1
  63. package/dist/index.mjs +487 -315
  64. package/dist/index.mjs.map +1 -1
  65. package/dist/interfaces/addon.d.ts +1 -1
  66. package/dist/interfaces/addon.d.ts.map +1 -1
  67. package/dist/interfaces/capability.d.ts +17 -0
  68. package/dist/interfaces/capability.d.ts.map +1 -1
  69. package/dist/interfaces/event-bus.d.ts +56 -1
  70. package/dist/interfaces/event-bus.d.ts.map +1 -1
  71. package/dist/interfaces/stream-broker.d.ts +21 -1
  72. package/dist/interfaces/stream-broker.d.ts.map +1 -1
  73. package/dist/node.js +1 -1
  74. package/dist/node.mjs +1 -1
  75. package/dist/readiness/readiness-registry.d.ts.map +1 -1
  76. package/dist/schemas/auth-records.d.ts +4 -4
  77. package/dist/types/io.d.ts +13 -1
  78. package/dist/types/io.d.ts.map +1 -1
  79. package/dist/utils/privacy-grid-raster.d.ts +48 -0
  80. package/dist/utils/privacy-grid-raster.d.ts.map +1 -0
  81. package/package.json +1 -1
  82. package/dist/index-CMM1Y9W6.js.map +0 -1
  83. package/dist/index-QRlzao1I.mjs.map +0 -1
@@ -0,0 +1,206 @@
1
+ import { z } from 'zod';
2
+ import { type InferNativeProvider } from './capability-definition.js';
3
+ import { DeviceType } from '../device/device-type.js';
4
+ /**
5
+ * Privacy mask = up to `maxRegions` SHAPES the camera blanks out (NOT a
6
+ * cell grid). Reolink `<shelterList>` zones are rectangles; Hikvision
7
+ * ISAPI `<RegionCoordinatesList>` zones are free polygons (this camera:
8
+ * exactly 4 vertices, not necessarily axis-aligned). The cap composes the
9
+ * shared rect|polygon subset of the MaskShape vocabulary. All coords are
10
+ * normalized 0..1 (top-left origin).
11
+ */
12
+ /** A privacy-mask region's geometry — rectangle or free polygon. */
13
+ export declare const PrivacyMaskShapeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
14
+ kind: z.ZodLiteral<"rect">;
15
+ x: z.ZodNumber;
16
+ y: z.ZodNumber;
17
+ width: z.ZodNumber;
18
+ height: z.ZodNumber;
19
+ }, z.core.$strip>, z.ZodObject<{
20
+ kind: z.ZodLiteral<"polygon">;
21
+ points: z.ZodArray<z.ZodObject<{
22
+ x: z.ZodNumber;
23
+ y: z.ZodNumber;
24
+ }, z.core.$strip>>;
25
+ }, z.core.$strip>], "kind">;
26
+ /** A single privacy-mask zone. */
27
+ export declare const PrivacyMaskRegionSchema: z.ZodObject<{
28
+ id: z.ZodNumber;
29
+ enabled: z.ZodBoolean;
30
+ shape: z.ZodDiscriminatedUnion<[z.ZodObject<{
31
+ kind: z.ZodLiteral<"rect">;
32
+ x: z.ZodNumber;
33
+ y: z.ZodNumber;
34
+ width: z.ZodNumber;
35
+ height: z.ZodNumber;
36
+ }, z.core.$strip>, z.ZodObject<{
37
+ kind: z.ZodLiteral<"polygon">;
38
+ points: z.ZodArray<z.ZodObject<{
39
+ x: z.ZodNumber;
40
+ y: z.ZodNumber;
41
+ }, z.core.$strip>>;
42
+ }, z.core.$strip>], "kind">;
43
+ }, z.core.$strip>;
44
+ /** Current on-camera privacy-mask state — master enable + zones. */
45
+ export declare const PrivacyMaskStatusSchema: z.ZodObject<{
46
+ enabled: z.ZodBoolean;
47
+ regions: z.ZodArray<z.ZodObject<{
48
+ id: z.ZodNumber;
49
+ enabled: z.ZodBoolean;
50
+ shape: z.ZodDiscriminatedUnion<[z.ZodObject<{
51
+ kind: z.ZodLiteral<"rect">;
52
+ x: z.ZodNumber;
53
+ y: z.ZodNumber;
54
+ width: z.ZodNumber;
55
+ height: z.ZodNumber;
56
+ }, z.core.$strip>, z.ZodObject<{
57
+ kind: z.ZodLiteral<"polygon">;
58
+ points: z.ZodArray<z.ZodObject<{
59
+ x: z.ZodNumber;
60
+ y: z.ZodNumber;
61
+ }, z.core.$strip>>;
62
+ }, z.core.$strip>], "kind">;
63
+ }, z.core.$strip>>;
64
+ lastFetchedAt: z.ZodNumber;
65
+ }, z.core.$strip>;
66
+ /** Per-camera availability. */
67
+ export declare const PrivacyMaskOptionsSchema: z.ZodObject<{
68
+ maxRegions: z.ZodNumber;
69
+ supportedShapes: z.ZodArray<z.ZodEnum<{
70
+ polygon: "polygon";
71
+ rect: "rect";
72
+ grid: "grid";
73
+ line: "line";
74
+ }>>;
75
+ polygonVertices: z.ZodOptional<z.ZodObject<{
76
+ min: z.ZodNumber;
77
+ max: z.ZodNumber;
78
+ }, z.core.$strip>>;
79
+ }, z.core.$strip>;
80
+ /** Partial change — every field optional. */
81
+ export declare const PrivacyMaskPatchSchema: z.ZodObject<{
82
+ enabled: z.ZodOptional<z.ZodBoolean>;
83
+ regions: z.ZodOptional<z.ZodArray<z.ZodObject<{
84
+ id: z.ZodNumber;
85
+ enabled: z.ZodBoolean;
86
+ shape: z.ZodDiscriminatedUnion<[z.ZodObject<{
87
+ kind: z.ZodLiteral<"rect">;
88
+ x: z.ZodNumber;
89
+ y: z.ZodNumber;
90
+ width: z.ZodNumber;
91
+ height: z.ZodNumber;
92
+ }, z.core.$strip>, z.ZodObject<{
93
+ kind: z.ZodLiteral<"polygon">;
94
+ points: z.ZodArray<z.ZodObject<{
95
+ x: z.ZodNumber;
96
+ y: z.ZodNumber;
97
+ }, z.core.$strip>>;
98
+ }, z.core.$strip>], "kind">;
99
+ }, z.core.$strip>>>;
100
+ }, z.core.$strip>;
101
+ export type PrivacyMaskShape = z.infer<typeof PrivacyMaskShapeSchema>;
102
+ export type PrivacyMaskRegion = z.infer<typeof PrivacyMaskRegionSchema>;
103
+ export type PrivacyMaskStatus = z.infer<typeof PrivacyMaskStatusSchema>;
104
+ export type PrivacyMaskOptions = z.infer<typeof PrivacyMaskOptionsSchema>;
105
+ export type PrivacyMaskPatch = z.infer<typeof PrivacyMaskPatchSchema>;
106
+ export declare const privacyMaskCapability: {
107
+ readonly name: "privacy-mask";
108
+ readonly scope: "device";
109
+ readonly mode: "singleton";
110
+ readonly deviceTypes: readonly [DeviceType.Camera];
111
+ readonly deviceConfig: {
112
+ readonly ui: {
113
+ readonly kind: "widget";
114
+ readonly widgetId: "host/privacy-mask-grid";
115
+ readonly tab: "image";
116
+ readonly label: "Privacy Mask";
117
+ };
118
+ };
119
+ readonly methods: {
120
+ readonly getOptions: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
121
+ deviceId: z.ZodNumber;
122
+ }, z.core.$strip>, z.ZodObject<{
123
+ maxRegions: z.ZodNumber;
124
+ supportedShapes: z.ZodArray<z.ZodEnum<{
125
+ polygon: "polygon";
126
+ rect: "rect";
127
+ grid: "grid";
128
+ line: "line";
129
+ }>>;
130
+ polygonVertices: z.ZodOptional<z.ZodObject<{
131
+ min: z.ZodNumber;
132
+ max: z.ZodNumber;
133
+ }, z.core.$strip>>;
134
+ }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
135
+ readonly setMask: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
136
+ deviceId: z.ZodNumber;
137
+ patch: z.ZodObject<{
138
+ enabled: z.ZodOptional<z.ZodBoolean>;
139
+ regions: z.ZodOptional<z.ZodArray<z.ZodObject<{
140
+ id: z.ZodNumber;
141
+ enabled: z.ZodBoolean;
142
+ shape: z.ZodDiscriminatedUnion<[z.ZodObject<{
143
+ kind: z.ZodLiteral<"rect">;
144
+ x: z.ZodNumber;
145
+ y: z.ZodNumber;
146
+ width: z.ZodNumber;
147
+ height: z.ZodNumber;
148
+ }, z.core.$strip>, z.ZodObject<{
149
+ kind: z.ZodLiteral<"polygon">;
150
+ points: z.ZodArray<z.ZodObject<{
151
+ x: z.ZodNumber;
152
+ y: z.ZodNumber;
153
+ }, z.core.$strip>>;
154
+ }, z.core.$strip>], "kind">;
155
+ }, z.core.$strip>>>;
156
+ }, z.core.$strip>;
157
+ }, z.core.$strip>, z.ZodVoid, "mutation">;
158
+ };
159
+ readonly status: {
160
+ readonly schema: z.ZodObject<{
161
+ enabled: z.ZodBoolean;
162
+ regions: z.ZodArray<z.ZodObject<{
163
+ id: z.ZodNumber;
164
+ enabled: z.ZodBoolean;
165
+ shape: z.ZodDiscriminatedUnion<[z.ZodObject<{
166
+ kind: z.ZodLiteral<"rect">;
167
+ x: z.ZodNumber;
168
+ y: z.ZodNumber;
169
+ width: z.ZodNumber;
170
+ height: z.ZodNumber;
171
+ }, z.core.$strip>, z.ZodObject<{
172
+ kind: z.ZodLiteral<"polygon">;
173
+ points: z.ZodArray<z.ZodObject<{
174
+ x: z.ZodNumber;
175
+ y: z.ZodNumber;
176
+ }, z.core.$strip>>;
177
+ }, z.core.$strip>], "kind">;
178
+ }, z.core.$strip>>;
179
+ lastFetchedAt: z.ZodNumber;
180
+ }, z.core.$strip>;
181
+ readonly kind: "poll";
182
+ };
183
+ readonly runtimeState: z.ZodObject<{
184
+ enabled: z.ZodBoolean;
185
+ regions: z.ZodArray<z.ZodObject<{
186
+ id: z.ZodNumber;
187
+ enabled: z.ZodBoolean;
188
+ shape: z.ZodDiscriminatedUnion<[z.ZodObject<{
189
+ kind: z.ZodLiteral<"rect">;
190
+ x: z.ZodNumber;
191
+ y: z.ZodNumber;
192
+ width: z.ZodNumber;
193
+ height: z.ZodNumber;
194
+ }, z.core.$strip>, z.ZodObject<{
195
+ kind: z.ZodLiteral<"polygon">;
196
+ points: z.ZodArray<z.ZodObject<{
197
+ x: z.ZodNumber;
198
+ y: z.ZodNumber;
199
+ }, z.core.$strip>>;
200
+ }, z.core.$strip>], "kind">;
201
+ }, z.core.$strip>>;
202
+ lastFetchedAt: z.ZodNumber;
203
+ }, z.core.$strip>;
204
+ };
205
+ export type IPrivacyMaskProvider = InferNativeProvider<typeof privacyMaskCapability>;
206
+ //# sourceMappingURL=privacy-mask.cap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-mask.cap.d.ts","sourceRoot":"","sources":["../../src/capabilities/privacy-mask.cap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAqC,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAQrD;;;;;;;GAOG;AAEH,oEAAoE;AACpE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;2BAGjC,CAAA;AAEF,kCAAkC;AAClC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;iBAMlC,CAAA;AAEF,oEAAoE;AACpE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;iBAKlC,CAAA;AAEF,+BAA+B;AAC/B,eAAO,MAAM,wBAAwB;;;;;;;;;;;;iBAOnC,CAAA;AAEF,6CAA6C;AAC7C,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;iBAGjC,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AACrE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AACvE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AACvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBO,CAAA;AAEzC,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,OAAO,qBAAqB,CAAC,CAAA"}
@@ -44,8 +44,21 @@ export declare const SpatialDetectionSchema: z.ZodObject<{
44
44
  h: z.ZodNumber;
45
45
  }, z.core.$strip>;
46
46
  }, z.core.$strip>;
47
+ /**
48
+ * `data` carries the raw f32le bytes of the PCM samples (4 bytes per
49
+ * sample, little-endian IEEE 754). `Uint8Array` is the wire-safe choice
50
+ * because `@msgpack/msgpack` serialises it as a MsgPack `bin` type that
51
+ * round-trips losslessly over the UDS transport. `Float32Array` is NOT
52
+ * preserved — the encoder serialises it as `bin` (its raw bytes) but
53
+ * the decoder returns `Uint8Array`, so treating a `Float32Array` as the
54
+ * wire type causes receivers to read bytes as sample values, producing
55
+ * wildly wrong RMS/dBFS results (~+43 dBFS instead of ≤0).
56
+ *
57
+ * Callers that need float arithmetic reconstruct the view with:
58
+ * `new Float32Array(chunk.data.buffer, chunk.data.byteOffset, chunk.data.byteLength / 4)`
59
+ */
47
60
  export declare const AudioChunkInputSchema: z.ZodObject<{
48
- data: z.ZodCustom<Float32Array<ArrayBuffer>, Float32Array<ArrayBuffer>>;
61
+ data: z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>;
49
62
  sampleRate: z.ZodNumber;
50
63
  channels: z.ZodNumber;
51
64
  timestamp: z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"detection-shared.d.ts","sourceRoot":"","sources":["../../../src/capabilities/schemas/detection-shared.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAAmD,CAAA;AAEjF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;iBAM3B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;iBAKjC,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;iBAOhC,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAA;AAEF,eAAO,MAAM,8BAA8B;;;;iBAgBzC,CAAA"}
1
+ {"version":3,"file":"detection-shared.d.ts","sourceRoot":"","sources":["../../../src/capabilities/schemas/detection-shared.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAAmD,CAAA;AAEjF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;iBAM3B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;iBAKjC,CAAA;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB;;;;;;iBAOhC,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAA;AAEF,eAAO,MAAM,8BAA8B;;;;iBAgBzC,CAAA"}
@@ -25,8 +25,8 @@ declare const SsoBridgeClaimsSchema: z.ZodObject<{
25
25
  scopes: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
26
26
  type: z.ZodLiteral<"category">;
27
27
  target: z.ZodEnum<{
28
- system: "system";
29
28
  device: "device";
29
+ system: "system";
30
30
  }>;
31
31
  access: z.ZodArray<z.ZodEnum<{
32
32
  view: "view";
@@ -81,8 +81,8 @@ export declare const ssoBridgeCapability: {
81
81
  scopes: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
82
82
  type: z.ZodLiteral<"category">;
83
83
  target: z.ZodEnum<{
84
- system: "system";
85
84
  device: "device";
85
+ system: "system";
86
86
  }>;
87
87
  access: z.ZodArray<z.ZodEnum<{
88
88
  view: "view";
@@ -136,8 +136,8 @@ export declare const ssoBridgeCapability: {
136
136
  scopes: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
137
137
  type: z.ZodLiteral<"category">;
138
138
  target: z.ZodEnum<{
139
- system: "system";
140
139
  device: "device";
140
+ system: "system";
141
141
  }>;
142
142
  access: z.ZodArray<z.ZodEnum<{
143
143
  view: "view";
@@ -0,0 +1,82 @@
1
+ import { z } from 'zod';
2
+ import { type InferNativeProvider } from './capability-definition.js';
3
+ import { DeviceType } from '../device/device-type.js';
4
+ /**
5
+ * One publishable camera stream as its OWNING PROVIDER describes it — the same
6
+ * payload the (legacy) push `streamBroker.publishCameraStream` carried, minus
7
+ * `deviceId`.
8
+ *
9
+ * The stream-broker PULLS this catalog per camera (on start, on a configurable
10
+ * reconcile poll, and on device / stream-params events) to (re)build its
11
+ * cam-stream registry, instead of relying on providers to push. Pull is
12
+ * authoritative (RPC); the poll is the backstop for any missed event. This
13
+ * makes the broker self-heal after a restart — it re-derives the full catalog
14
+ * from the providers rather than waiting to be re-fed.
15
+ *
16
+ * `url` is the dial source where the provider can resolve it synchronously
17
+ * (rtsp / rtmp / http). For lazy sources (Reolink rfc4571) it carries the
18
+ * `lazy:rfc4571:` sentinel; the real URL is still materialised at DIAL time via
19
+ * the broker's `onRequestStreamSourceRefresh` round-trip — unchanged by the
20
+ * pull model. `push-annexb` sources carry no URL (the provider pushes frames).
21
+ */
22
+ export declare const CamStreamDescriptorSchema: z.ZodObject<{
23
+ camStreamId: z.ZodString;
24
+ kind: z.ZodEnum<{
25
+ "pull-rtsp": "pull-rtsp";
26
+ "pull-rtmp": "pull-rtmp";
27
+ "pull-http": "pull-http";
28
+ "pull-rfc4571": "pull-rfc4571";
29
+ "push-annexb": "push-annexb";
30
+ }>;
31
+ url: z.ZodOptional<z.ZodString>;
32
+ codec: z.ZodOptional<z.ZodString>;
33
+ resolution: z.ZodOptional<z.ZodObject<{
34
+ width: z.ZodNumber;
35
+ height: z.ZodNumber;
36
+ }, z.core.$strip>>;
37
+ fps: z.ZodOptional<z.ZodNumber>;
38
+ label: z.ZodOptional<z.ZodString>;
39
+ deviceFeatures: z.ZodOptional<z.ZodArray<z.ZodString>>;
40
+ autoEligible: z.ZodOptional<z.ZodBoolean>;
41
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
42
+ }, z.core.$strip>;
43
+ export type CamStreamDescriptor = z.infer<typeof CamStreamDescriptorSchema>;
44
+ /**
45
+ * `stream-catalog` — device-scoped, provider-implemented. The pull counterpart
46
+ * of the removed `publishCameraStream` push: a camera provider returns the full
47
+ * set of stream descriptors it can offer for the device, synchronously, so the
48
+ * broker can reconcile its registry against the authoritative provider state.
49
+ */
50
+ export declare const streamCatalogCapability: {
51
+ readonly name: "stream-catalog";
52
+ readonly scope: "device";
53
+ readonly mode: "singleton";
54
+ readonly deviceTypes: readonly [DeviceType.Camera];
55
+ readonly methods: {
56
+ readonly getCatalog: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
57
+ deviceId: z.ZodNumber;
58
+ }, z.core.$strip>, z.ZodReadonly<z.ZodArray<z.ZodObject<{
59
+ camStreamId: z.ZodString;
60
+ kind: z.ZodEnum<{
61
+ "pull-rtsp": "pull-rtsp";
62
+ "pull-rtmp": "pull-rtmp";
63
+ "pull-http": "pull-http";
64
+ "pull-rfc4571": "pull-rfc4571";
65
+ "push-annexb": "push-annexb";
66
+ }>;
67
+ url: z.ZodOptional<z.ZodString>;
68
+ codec: z.ZodOptional<z.ZodString>;
69
+ resolution: z.ZodOptional<z.ZodObject<{
70
+ width: z.ZodNumber;
71
+ height: z.ZodNumber;
72
+ }, z.core.$strip>>;
73
+ fps: z.ZodOptional<z.ZodNumber>;
74
+ label: z.ZodOptional<z.ZodString>;
75
+ deviceFeatures: z.ZodOptional<z.ZodArray<z.ZodString>>;
76
+ autoEligible: z.ZodOptional<z.ZodBoolean>;
77
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
78
+ }, z.core.$strip>>>, import("./capability-definition.js").CapabilityMethodKind>;
79
+ };
80
+ };
81
+ export type IStreamCatalogProvider = InferNativeProvider<typeof streamCatalogCapability>;
82
+ //# sourceMappingURL=stream-catalog.cap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-catalog.cap.d.ts","sourceRoot":"","sources":["../../src/capabilities/stream-catalog.cap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAqC,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAGrD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;iBAcpC,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWK,CAAA;AAEzC,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
@@ -9,8 +9,8 @@ declare const UserSummarySchema: z.ZodObject<{
9
9
  scopes: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
10
10
  type: z.ZodLiteral<"category">;
11
11
  target: z.ZodEnum<{
12
- system: "system";
13
12
  device: "device";
13
+ system: "system";
14
14
  }>;
15
15
  access: z.ZodArray<z.ZodEnum<{
16
16
  view: "view";
@@ -55,8 +55,8 @@ declare const CreateUserInputSchema: z.ZodObject<{
55
55
  scopes: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
56
56
  type: z.ZodLiteral<"category">;
57
57
  target: z.ZodEnum<{
58
- system: "system";
59
58
  device: "device";
59
+ system: "system";
60
60
  }>;
61
61
  access: z.ZodArray<z.ZodEnum<{
62
62
  view: "view";
@@ -97,8 +97,8 @@ declare const UpdateUserInputSchema: z.ZodObject<{
97
97
  scopes: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
98
98
  type: z.ZodLiteral<"category">;
99
99
  target: z.ZodEnum<{
100
- system: "system";
101
100
  device: "device";
101
+ system: "system";
102
102
  }>;
103
103
  access: z.ZodArray<z.ZodEnum<{
104
104
  view: "view";
@@ -168,8 +168,8 @@ declare const ScopedTokenSummarySchema: z.ZodObject<{
168
168
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
169
169
  type: z.ZodLiteral<"category">;
170
170
  target: z.ZodEnum<{
171
- system: "system";
172
171
  device: "device";
172
+ system: "system";
173
173
  }>;
174
174
  access: z.ZodArray<z.ZodEnum<{
175
175
  view: "view";
@@ -211,8 +211,8 @@ declare const CreateScopedTokenInputSchema: z.ZodObject<{
211
211
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
212
212
  type: z.ZodLiteral<"category">;
213
213
  target: z.ZodEnum<{
214
- system: "system";
215
214
  device: "device";
215
+ system: "system";
216
216
  }>;
217
217
  access: z.ZodArray<z.ZodEnum<{
218
218
  view: "view";
@@ -256,8 +256,8 @@ declare const CreateScopedTokenResultSchema: z.ZodObject<{
256
256
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
257
257
  type: z.ZodLiteral<"category">;
258
258
  target: z.ZodEnum<{
259
- system: "system";
260
259
  device: "device";
260
+ system: "system";
261
261
  }>;
262
262
  access: z.ZodArray<z.ZodEnum<{
263
263
  view: "view";
@@ -302,8 +302,8 @@ declare const OauthSessionSummarySchema: z.ZodObject<{
302
302
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
303
303
  type: z.ZodLiteral<"category">;
304
304
  target: z.ZodEnum<{
305
- system: "system";
306
305
  device: "device";
306
+ system: "system";
307
307
  }>;
308
308
  access: z.ZodArray<z.ZodEnum<{
309
309
  view: "view";
@@ -363,8 +363,8 @@ export declare const userManagementCapability: {
363
363
  scopes: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
364
364
  type: z.ZodLiteral<"category">;
365
365
  target: z.ZodEnum<{
366
- system: "system";
367
366
  device: "device";
367
+ system: "system";
368
368
  }>;
369
369
  access: z.ZodArray<z.ZodEnum<{
370
370
  view: "view";
@@ -409,8 +409,8 @@ export declare const userManagementCapability: {
409
409
  scopes: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
410
410
  type: z.ZodLiteral<"category">;
411
411
  target: z.ZodEnum<{
412
- system: "system";
413
412
  device: "device";
413
+ system: "system";
414
414
  }>;
415
415
  access: z.ZodArray<z.ZodEnum<{
416
416
  view: "view";
@@ -451,8 +451,8 @@ export declare const userManagementCapability: {
451
451
  scopes: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
452
452
  type: z.ZodLiteral<"category">;
453
453
  target: z.ZodEnum<{
454
- system: "system";
455
454
  device: "device";
455
+ system: "system";
456
456
  }>;
457
457
  access: z.ZodArray<z.ZodEnum<{
458
458
  view: "view";
@@ -496,8 +496,8 @@ export declare const userManagementCapability: {
496
496
  scopes: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
497
497
  type: z.ZodLiteral<"category">;
498
498
  target: z.ZodEnum<{
499
- system: "system";
500
499
  device: "device";
500
+ system: "system";
501
501
  }>;
502
502
  access: z.ZodArray<z.ZodEnum<{
503
503
  view: "view";
@@ -548,8 +548,8 @@ export declare const userManagementCapability: {
548
548
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
549
549
  type: z.ZodLiteral<"category">;
550
550
  target: z.ZodEnum<{
551
- system: "system";
552
551
  device: "device";
552
+ system: "system";
553
553
  }>;
554
554
  access: z.ZodArray<z.ZodEnum<{
555
555
  view: "view";
@@ -596,8 +596,8 @@ export declare const userManagementCapability: {
596
596
  scopes: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
597
597
  type: z.ZodLiteral<"category">;
598
598
  target: z.ZodEnum<{
599
- system: "system";
600
599
  device: "device";
600
+ system: "system";
601
601
  }>;
602
602
  access: z.ZodArray<z.ZodEnum<{
603
603
  view: "view";
@@ -685,8 +685,8 @@ export declare const userManagementCapability: {
685
685
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
686
686
  type: z.ZodLiteral<"category">;
687
687
  target: z.ZodEnum<{
688
- system: "system";
689
688
  device: "device";
689
+ system: "system";
690
690
  }>;
691
691
  access: z.ZodArray<z.ZodEnum<{
692
692
  view: "view";
@@ -729,8 +729,8 @@ export declare const userManagementCapability: {
729
729
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
730
730
  type: z.ZodLiteral<"category">;
731
731
  target: z.ZodEnum<{
732
- system: "system";
733
732
  device: "device";
733
+ system: "system";
734
734
  }>;
735
735
  access: z.ZodArray<z.ZodEnum<{
736
736
  view: "view";
@@ -782,8 +782,8 @@ export declare const userManagementCapability: {
782
782
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
783
783
  type: z.ZodLiteral<"category">;
784
784
  target: z.ZodEnum<{
785
- system: "system";
786
785
  device: "device";
786
+ system: "system";
787
787
  }>;
788
788
  access: z.ZodArray<z.ZodEnum<{
789
789
  view: "view";
@@ -829,8 +829,8 @@ export declare const userManagementCapability: {
829
829
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
830
830
  type: z.ZodLiteral<"category">;
831
831
  target: z.ZodEnum<{
832
- system: "system";
833
832
  device: "device";
833
+ system: "system";
834
834
  }>;
835
835
  access: z.ZodArray<z.ZodEnum<{
836
836
  view: "view";
@@ -902,8 +902,8 @@ export declare const userManagementCapability: {
902
902
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
903
903
  type: z.ZodLiteral<"category">;
904
904
  target: z.ZodEnum<{
905
- system: "system";
906
905
  device: "device";
906
+ system: "system";
907
907
  }>;
908
908
  access: z.ZodArray<z.ZodEnum<{
909
909
  view: "view";
@@ -963,8 +963,8 @@ export declare const userManagementCapability: {
963
963
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
964
964
  type: z.ZodLiteral<"category">;
965
965
  target: z.ZodEnum<{
966
- system: "system";
967
966
  device: "device";
967
+ system: "system";
968
968
  }>;
969
969
  access: z.ZodArray<z.ZodEnum<{
970
970
  view: "view";
@@ -1005,8 +1005,8 @@ export declare const userManagementCapability: {
1005
1005
  scopes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
1006
1006
  type: z.ZodLiteral<"category">;
1007
1007
  target: z.ZodEnum<{
1008
- system: "system";
1009
1008
  device: "device";
1009
+ system: "system";
1010
1010
  }>;
1011
1011
  access: z.ZodArray<z.ZodEnum<{
1012
1012
  view: "view";
@@ -155,6 +155,7 @@ export declare const webrtcSessionCapability: {
155
155
  downlinkMbps: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
156
156
  prefersTier: z.ZodOptional<z.ZodOptional<z.ZodString>>;
157
157
  }, z.core.$strip>>;
158
+ relayOnly: z.ZodOptional<z.ZodBoolean>;
158
159
  }, z.core.$strip>, z.ZodObject<{
159
160
  sessionId: z.ZodString;
160
161
  sdpOffer: z.ZodString;
@@ -189,6 +190,7 @@ export declare const webrtcSessionCapability: {
189
190
  }, z.core.$strip>], "kind">>;
190
191
  sdpOffer: z.ZodString;
191
192
  sessionId: z.ZodOptional<z.ZodString>;
193
+ relayOnly: z.ZodOptional<z.ZodBoolean>;
192
194
  }, z.core.$strip>, z.ZodObject<{
193
195
  sessionId: z.ZodString;
194
196
  sdpAnswer: z.ZodString;
@@ -198,6 +200,38 @@ export declare const webrtcSessionCapability: {
198
200
  sessionId: z.ZodString;
199
201
  sdpAnswer: z.ZodString;
200
202
  }, z.core.$strip>, z.ZodVoid, "mutation">;
203
+ /**
204
+ * Trickle ICE — add a remote (client) ICE candidate to a live session.
205
+ * Lets the client send its SDP offer/answer IMMEDIATELY (before ICE
206
+ * gathering finishes) and deliver candidates as they arrive, so the
207
+ * connection establishes in ~0s instead of waiting for full gathering.
208
+ * The dual of `getIceCandidates`. Mirrors Scrypted's signaling.
209
+ */
210
+ readonly addIceCandidate: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
211
+ deviceId: z.ZodNumber;
212
+ sessionId: z.ZodString;
213
+ candidate: z.ZodString;
214
+ sdpMid: z.ZodOptional<z.ZodNullable<z.ZodString>>;
215
+ sdpMLineIndex: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
216
+ }, z.core.$strip>, z.ZodVoid, "mutation">;
217
+ /**
218
+ * Trickle ICE — poll the server's gathered ICE candidates for a session.
219
+ * The server answers immediately (no gathering wait) and the client polls
220
+ * this to receive host/srflx/relay candidates as werift gathers them,
221
+ * adding each to its PeerConnection. Returns all candidates gathered so
222
+ * far; the client dedupes. `done` flips true once gathering completes.
223
+ */
224
+ readonly getIceCandidates: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
225
+ deviceId: z.ZodNumber;
226
+ sessionId: z.ZodString;
227
+ }, z.core.$strip>, z.ZodObject<{
228
+ candidates: z.ZodArray<z.ZodObject<{
229
+ candidate: z.ZodString;
230
+ sdpMid: z.ZodNullable<z.ZodString>;
231
+ sdpMLineIndex: z.ZodNullable<z.ZodNumber>;
232
+ }, z.core.$strip>>;
233
+ done: z.ZodBoolean;
234
+ }, z.core.$strip>, "query">;
201
235
  readonly closeSession: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
202
236
  deviceId: z.ZodNumber;
203
237
  sessionId: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-session.cap.d.ts","sourceRoot":"","sources":["../../src/capabilities/webrtc-session.cap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAIrD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;2BAInC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,qDAAqD;AACrD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;QAQhC;;;;;WAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAKH;;;;;;WAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;QAUH;;;;;;;;;;;;WAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BH,kFAAkF;;;;;;;;;;CAS7C,CAAA;AAEzC,MAAM,MAAM,sBAAsB,GAAG,aAAa,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
1
+ {"version":3,"file":"webrtc-session.cap.d.ts","sourceRoot":"","sources":["../../src/capabilities/webrtc-session.cap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAIrD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;2BAInC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,qDAAqD;AACrD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;QAQhC;;;;;WAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAKH;;;;;;WAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuBH;;;;;;;;;;;;WAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAmCH;;;;;;WAMG;;;;;;;;QAYH;;;;;;WAMG;;;;;;;;;;;;;;;;QAwBH,kFAAkF;;;;;;;;;;CAS7C,CAAA;AAEzC,MAAM,MAAM,sBAAsB,GAAG,aAAa,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
@@ -192,6 +192,15 @@ export declare enum EventCategory {
192
192
  * Payload: `{ deviceId, camStreamId, brokerId }`.
193
193
  */
194
194
  StreamBrokerOnRequestStreamSourceRefresh = "stream-broker.onRequestStreamSourceRefresh",
195
+ /**
196
+ * A camera provider changed a device's stream parameters (codec /
197
+ * resolution / bitrate / a stream added or removed). A LOW-LATENCY NUDGE
198
+ * for the stream-broker's catalog reconcile: it carries NO authoritative
199
+ * data — the broker re-PULLS that device's `stream-catalog` cap on receipt
200
+ * (the 30s reconcile poll is the backstop if this nudge is dropped). Emitted
201
+ * by providers from `stream-params.setProfile`. Payload: `{ deviceId }`.
202
+ */
203
+ StreamParamsChanged = "stream-params.changed",
195
204
  /**
196
205
  * Generic per-device runtime-state change. Fired by `device-manager`
197
206
  * whenever a persisted slice in any cap's `runtimeState` shape
@@ -336,6 +345,15 @@ export declare enum EventCategory {
336
345
  /** Fired by the `local-network` cap when the host's interface set
337
346
  * changes (new IP from DHCP, VPN connect, docker bridge added). */
338
347
  LocalNetworkChanged = "network.local.changed",
348
+ /**
349
+ * Fired by a `mesh-network` provider (Tailscale, …) when its
350
+ * mesh-reachable host changes (join / leave / MagicDNS or 100.x IP
351
+ * change). Lets `local-network` fold the mesh endpoint into its
352
+ * connection-endpoint list without a cross-package import. Payload
353
+ * carries the preferred host (`host: ''` = no longer reachable),
354
+ * the hub port, and the scheme. Telemetry-grade (D8): consumers
355
+ * pull-reconcile from the provider's `getStatus` on reconnect. */
356
+ MeshNetworkChanged = "network.mesh.changed",
339
357
  BackupCompleted = "backup.completed",
340
358
  BackupRestored = "backup.restored",
341
359
  NotificationDispatched = "notification.dispatched",
@@ -366,6 +384,15 @@ export declare enum EventCategory {
366
384
  * Battery cam went to sleep. See `DeviceAwake`.
367
385
  */
368
386
  DeviceSleeping = "device.sleeping",
369
- RetentionCleanup = "retention.cleanup"
387
+ RetentionCleanup = "retention.cleanup",
388
+ /**
389
+ * Progress snapshot emitted by `BulkUpdateCoordinator` on every state
390
+ * transition (item status change, phase change, completion, cancel).
391
+ * Payload is `BulkUpdateState`. Admin UI subscribes via `useLiveEvent`
392
+ * to drive the sticky `BulkUpdateBanner` and per-row `AddonRowBadge`.
393
+ *
394
+ * Spec: docs/superpowers/specs/2026-05-21-addons-bulk-update-progress-design.md
395
+ */
396
+ AddonsBulkUpdateProgress = "addons.bulk-update-progress"
370
397
  }
371
398
  //# sourceMappingURL=event-category.d.ts.map