@camstack/types 1.1.16 → 1.1.17

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.
package/dist/addon.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_sleep = require("./sleep-BQzZ7joF.js");
2
+ const require_sleep = require("./sleep-BabrCASa.js");
3
3
  const require_err_msg = require("./err-msg-COpsHMw2.js");
4
4
  exports.BaseAddon = require_sleep.BaseAddon;
5
5
  exports.DATAPLANE_SECRET_HEADER = require_sleep.DATAPLANE_SECRET_HEADER;
package/dist/addon.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { A as ReadinessRegistry, C as asJsonObject, O as parseJsonUnknown, P as scopeKey, T as asString, a as adminUiCapability, b as DeviceType, gt as DisposerChain, ht as EventCategory, i as deviceOpsCapability, j as ReadinessTimeoutError, k as DATAPLANE_SECRET_HEADER, o as createDeviceProxy, ot as BaseAddon, p as expandCapMethods, st as normalizeAddonInitResult, t as sleep, ut as emitReadiness } from "./sleep-C2M2zF7x.mjs";
1
+ import { A as ReadinessRegistry, C as asJsonObject, O as parseJsonUnknown, P as scopeKey, T as asString, a as adminUiCapability, b as DeviceType, gt as DisposerChain, ht as EventCategory, i as deviceOpsCapability, j as ReadinessTimeoutError, k as DATAPLANE_SECRET_HEADER, o as createDeviceProxy, ot as BaseAddon, p as expandCapMethods, st as normalizeAddonInitResult, t as sleep, ut as emitReadiness } from "./sleep-MHm--th-.mjs";
2
2
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
3
3
  export { BaseAddon, DATAPLANE_SECRET_HEADER, DeviceType, DisposerChain, EventCategory, ReadinessRegistry, ReadinessTimeoutError, adminUiCapability, asJsonObject, asString, createDeviceProxy, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods, normalizeAddonInitResult, parseJsonUnknown, scopeKey, sleep };
@@ -86,6 +86,7 @@ export declare const cameraStreamsCapability: {
86
86
  "pull-rtsp": "pull-rtsp";
87
87
  "pull-rtmp": "pull-rtmp";
88
88
  "pull-http": "pull-http";
89
+ "pull-flv": "pull-flv";
89
90
  "pull-rfc4571": "pull-rfc4571";
90
91
  "push-annexb": "push-annexb";
91
92
  derived: "derived";
@@ -247,6 +248,7 @@ export declare const cameraStreamsCapability: {
247
248
  "pull-rtsp": "pull-rtsp";
248
249
  "pull-rtmp": "pull-rtmp";
249
250
  "pull-http": "pull-http";
251
+ "pull-flv": "pull-flv";
250
252
  "pull-rfc4571": "pull-rfc4571";
251
253
  "push-annexb": "push-annexb";
252
254
  derived: "derived";
@@ -67,7 +67,7 @@ export type { BrokerConnectionDetails, BrokerInfo, BrokerStatus as MqttBrokerLiv
67
67
  export { AddBrokerInputSchema, BrokerConnectionDetailsSchema, BrokerInfoSchema, MqttBrokerStatusSchema, mqttBrokerCapability, StartEmbeddedInputSchema, } from './mqtt-broker.cap.js';
68
68
  export type { NetworkAccessStatus, NetworkEndpoint } from './network-access.cap.js';
69
69
  export { NetworkAccessStatusSchema, NetworkEndpointSchema, networkAccessCapability, } from './network-access.cap.js';
70
- export { NotificationSchema, notificationOutputCapability } from './notification-output.cap.js';
70
+ export { type Attachment, AttachmentMediaTypeSchema, type AttachmentMediaType, AttachmentSchema, type DiscoveredTarget, DiscoveredTargetSchema, type INotificationOutputProvider, type NotificationAction, NotificationActionSchema, type NotificationFormat, NotificationFormatSchema, NotificationSchema, type RenderedAs, RenderedAsSchema, type SendResult, SendResultSchema, type Target, type TargetKind, type TargetKindCaps, TargetKindCapsSchema, type TargetKindLevel, TargetKindLevelSchema, TargetKindSchema, TargetSchema, type TestResult, TestResultSchema, notificationOutputCapability, } from './notification-output.cap.js';
71
71
  export { type IOauthIntegrationProvider, type OauthIntegrationDescriptor, OauthIntegrationDescriptorSchema, oauthIntegrationCapability, } from './oauth-integration.cap.js';
72
72
  export { type AudioEvent, AudioEventSchema, type DetectionSource, DetectionSourceSchema, type EventKind, EventKindSchema, type IPipelineAnalyticsProvider, type MediaFile, type MediaFileKind, MediaFileSchema, type MotionEvent, MotionEventSchema, type ObjectEvent, ObjectEventSchema, pipelineAnalyticsCapability, type ScoredObjectEvent, ScoredObjectEventSchema, type Track, TrackedDetectionSchema, TrackSchema, type TrackState, TrackStateSchema, } from './pipeline-analytics.cap.js';
73
73
  export type { PipelineStepInputOutput } from './pipeline-executor.cap.js';
@@ -1,43 +1,522 @@
1
1
  import { z } from 'zod';
2
+ import type { ConfigUISchema } from '../interfaces/config-ui.js';
2
3
  import { type InferProvider } from './capability-definition.js';
3
- declare const NotificationSchema: z.ZodObject<{
4
- title: z.ZodString;
4
+ /**
5
+ * notification-output — canonical, capability-gated notification delivery.
6
+ *
7
+ * Apprise-derived model (see
8
+ * `docs/superpowers/specs/2026-07-03-notification-output-notifier-matrix.md`):
9
+ * callers emit ONE canonical `Notification`; each provider declares a
10
+ * per-kind capability descriptor (`TargetKind`), and the pure degrade
11
+ * engine (`@camstack/types` `prepareNotification`) transcodes / degrades the
12
+ * message to what the kind supports — callers never special-case a service.
13
+ *
14
+ * DESIGN DECISIONS (locked):
15
+ * - Target CRUD lives on THIS cap (`upsertTarget` / `deleteTarget` /
16
+ * `setTargetEnabled`), each provider persisting via the `settings-store`
17
+ * cap. Rationale: the admin UI needs one uniform surface across the
18
+ * notifiers addon AND the HA addon; the addon-`globalSettingsSchema`-array
19
+ * alternative would fork the UI per addon and cannot host the
20
+ * discovery→adopt flow.
21
+ * - `listTargetKinds` / `listTargets` / `discoverTargets` return arrays →
22
+ * the generated cap-mount auto-`concatCollection`-fans them across every
23
+ * registered provider (notifiers addon + HA addon) so one catalog is
24
+ * routable. `send` / `testTarget` / CRUD route to ONE provider by the
25
+ * `addonId` the generated collection router extracts from the call input.
26
+ * - `Attachment.bytes` is `Uint8Array`. Transport-safe: superjson (the tRPC
27
+ * transformer) + UDS MsgPack both round-trip typed arrays — already used by
28
+ * `storage` / `storage-provider` / `recording` caps over the same path. No
29
+ * base64 fallback needed.
30
+ *
31
+ * TODO (deferred, closed-set change — separate decision): add
32
+ * `providerKind: 'notify'` so notification providers surface on the unified
33
+ * admin "Integrations" page.
34
+ */
35
+ /**
36
+ * Zentik-derived typed-media enum — the superset across every kind. Each
37
+ * adapter picks what it supports and the degrade engine filters the rest.
38
+ */
39
+ export declare const AttachmentMediaTypeSchema: z.ZodEnum<{
40
+ image: "image";
41
+ audio: "audio";
42
+ icon: "icon";
43
+ video: "video";
44
+ gif: "gif";
45
+ }>;
46
+ export type AttachmentMediaType = z.infer<typeof AttachmentMediaTypeSchema>;
47
+ /**
48
+ * A single attachment. Exactly one of `url` (remote source, most adapters
49
+ * prefer this) or `bytes` (inline source; required for Pushover-style
50
+ * bytes-only kinds) MUST be present — the degrade engine expresses a
51
+ * url→bytes fetch as a `needsFetch` directive the adapter executes.
52
+ */
53
+ export declare const AttachmentSchema: z.ZodObject<{
54
+ mediaType: z.ZodEnum<{
55
+ image: "image";
56
+ audio: "audio";
57
+ icon: "icon";
58
+ video: "video";
59
+ gif: "gif";
60
+ }>;
61
+ url: z.ZodOptional<z.ZodString>;
62
+ bytes: z.ZodOptional<z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>>;
63
+ mime: z.ZodOptional<z.ZodString>;
64
+ name: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$strip>;
66
+ export type Attachment = z.infer<typeof AttachmentSchema>;
67
+ export declare const NotificationFormatSchema: z.ZodEnum<{
68
+ text: "text";
69
+ markdown: "markdown";
70
+ html: "html";
71
+ }>;
72
+ export type NotificationFormat = z.infer<typeof NotificationFormatSchema>;
73
+ /** A single tap-through action button. */
74
+ export declare const NotificationActionSchema: z.ZodObject<{
75
+ id: z.ZodString;
76
+ label: z.ZodString;
77
+ url: z.ZodOptional<z.ZodString>;
78
+ }, z.core.$strip>;
79
+ export type NotificationAction = z.infer<typeof NotificationActionSchema>;
80
+ /**
81
+ * The canonical notification. `body` is the only hard field (Apprise model).
82
+ * `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
83
+ * NOT a fixed severity enum — each kind declares its own `caps.levels` and
84
+ * the adapter maps this ordinal onto its native level. `level?` is an
85
+ * optional kind-native level id (`emergency`, `silent`, …) that overrides
86
+ * `priority` for that one target.
87
+ */
88
+ export declare const NotificationSchema: z.ZodObject<{
5
89
  body: z.ZodString;
6
- imageUrl: z.ZodOptional<z.ZodString>;
90
+ title: z.ZodOptional<z.ZodString>;
91
+ format: z.ZodDefault<z.ZodEnum<{
92
+ text: "text";
93
+ markdown: "markdown";
94
+ html: "html";
95
+ }>>;
96
+ priority: z.ZodDefault<z.ZodNumber>;
97
+ level: z.ZodOptional<z.ZodString>;
98
+ attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
99
+ mediaType: z.ZodEnum<{
100
+ image: "image";
101
+ audio: "audio";
102
+ icon: "icon";
103
+ video: "video";
104
+ gif: "gif";
105
+ }>;
106
+ url: z.ZodOptional<z.ZodString>;
107
+ bytes: z.ZodOptional<z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>>;
108
+ mime: z.ZodOptional<z.ZodString>;
109
+ name: z.ZodOptional<z.ZodString>;
110
+ }, z.core.$strip>>>;
111
+ clickUrl: z.ZodOptional<z.ZodString>;
112
+ actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
113
+ id: z.ZodString;
114
+ label: z.ZodString;
115
+ url: z.ZodOptional<z.ZodString>;
116
+ }, z.core.$strip>>>;
117
+ sound: z.ZodOptional<z.ZodString>;
118
+ ttl: z.ZodOptional<z.ZodNumber>;
119
+ tag: z.ZodOptional<z.ZodString>;
7
120
  deviceId: z.ZodOptional<z.ZodNumber>;
8
121
  eventId: z.ZodOptional<z.ZodString>;
9
- priority: z.ZodDefault<z.ZodEnum<{
10
- high: "high";
11
- low: "low";
12
- normal: "normal";
13
- critical: "critical";
14
- }>>;
15
122
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
16
123
  }, z.core.$strip>;
124
+ /** One declared native severity/priority level for a kind. */
125
+ export declare const TargetKindLevelSchema: z.ZodObject<{
126
+ id: z.ZodString;
127
+ label: z.ZodString;
128
+ ordinal: z.ZodNullable<z.ZodNumber>;
129
+ flags: z.ZodOptional<z.ZodObject<{
130
+ critical: z.ZodOptional<z.ZodBoolean>;
131
+ silent: z.ZodOptional<z.ZodBoolean>;
132
+ noPush: z.ZodOptional<z.ZodBoolean>;
133
+ }, z.core.$strip>>;
134
+ requires: z.ZodOptional<z.ZodArray<z.ZodString>>;
135
+ description: z.ZodOptional<z.ZodString>;
136
+ }, z.core.$strip>;
137
+ export type TargetKindLevel = z.infer<typeof TargetKindLevelSchema>;
138
+ /** Attachment capabilities for a kind (drives the degrade engine + test panel). */
139
+ export declare const TargetKindAttachmentsCapsSchema: z.ZodObject<{
140
+ mediaTypes: z.ZodArray<z.ZodEnum<{
141
+ image: "image";
142
+ audio: "audio";
143
+ icon: "icon";
144
+ video: "video";
145
+ gif: "gif";
146
+ }>>;
147
+ mode: z.ZodEnum<{
148
+ url: "url";
149
+ both: "both";
150
+ bytes: "bytes";
151
+ }>;
152
+ max: z.ZodNumber;
153
+ maxBytes: z.ZodOptional<z.ZodNumber>;
154
+ }, z.core.$strip>;
155
+ /** The full capability block consulted before dispatch. */
156
+ export declare const TargetKindCapsSchema: z.ZodObject<{
157
+ attachments: z.ZodObject<{
158
+ mediaTypes: z.ZodArray<z.ZodEnum<{
159
+ image: "image";
160
+ audio: "audio";
161
+ icon: "icon";
162
+ video: "video";
163
+ gif: "gif";
164
+ }>>;
165
+ mode: z.ZodEnum<{
166
+ url: "url";
167
+ both: "both";
168
+ bytes: "bytes";
169
+ }>;
170
+ max: z.ZodNumber;
171
+ maxBytes: z.ZodOptional<z.ZodNumber>;
172
+ }, z.core.$strip>;
173
+ actions: z.ZodNumber;
174
+ levels: z.ZodArray<z.ZodObject<{
175
+ id: z.ZodString;
176
+ label: z.ZodString;
177
+ ordinal: z.ZodNullable<z.ZodNumber>;
178
+ flags: z.ZodOptional<z.ZodObject<{
179
+ critical: z.ZodOptional<z.ZodBoolean>;
180
+ silent: z.ZodOptional<z.ZodBoolean>;
181
+ noPush: z.ZodOptional<z.ZodBoolean>;
182
+ }, z.core.$strip>>;
183
+ requires: z.ZodOptional<z.ZodArray<z.ZodString>>;
184
+ description: z.ZodOptional<z.ZodString>;
185
+ }, z.core.$strip>>;
186
+ format: z.ZodArray<z.ZodEnum<{
187
+ text: "text";
188
+ markdown: "markdown";
189
+ html: "html";
190
+ }>>;
191
+ clickUrl: z.ZodBoolean;
192
+ sound: z.ZodBoolean;
193
+ ttl: z.ZodBoolean;
194
+ bodyMaxLen: z.ZodNumber;
195
+ }, z.core.$strip>;
196
+ export type TargetKindCaps = z.infer<typeof TargetKindCapsSchema>;
197
+ export declare const TargetKindSchema: z.ZodObject<{
198
+ kind: z.ZodString;
199
+ label: z.ZodString;
200
+ icon: z.ZodString;
201
+ addonId: z.ZodString;
202
+ configSchema: z.ZodUnknown;
203
+ supportsDiscovery: z.ZodBoolean;
204
+ caps: z.ZodObject<{
205
+ attachments: z.ZodObject<{
206
+ mediaTypes: z.ZodArray<z.ZodEnum<{
207
+ image: "image";
208
+ audio: "audio";
209
+ icon: "icon";
210
+ video: "video";
211
+ gif: "gif";
212
+ }>>;
213
+ mode: z.ZodEnum<{
214
+ url: "url";
215
+ both: "both";
216
+ bytes: "bytes";
217
+ }>;
218
+ max: z.ZodNumber;
219
+ maxBytes: z.ZodOptional<z.ZodNumber>;
220
+ }, z.core.$strip>;
221
+ actions: z.ZodNumber;
222
+ levels: z.ZodArray<z.ZodObject<{
223
+ id: z.ZodString;
224
+ label: z.ZodString;
225
+ ordinal: z.ZodNullable<z.ZodNumber>;
226
+ flags: z.ZodOptional<z.ZodObject<{
227
+ critical: z.ZodOptional<z.ZodBoolean>;
228
+ silent: z.ZodOptional<z.ZodBoolean>;
229
+ noPush: z.ZodOptional<z.ZodBoolean>;
230
+ }, z.core.$strip>>;
231
+ requires: z.ZodOptional<z.ZodArray<z.ZodString>>;
232
+ description: z.ZodOptional<z.ZodString>;
233
+ }, z.core.$strip>>;
234
+ format: z.ZodArray<z.ZodEnum<{
235
+ text: "text";
236
+ markdown: "markdown";
237
+ html: "html";
238
+ }>>;
239
+ clickUrl: z.ZodBoolean;
240
+ sound: z.ZodBoolean;
241
+ ttl: z.ZodBoolean;
242
+ bodyMaxLen: z.ZodNumber;
243
+ }, z.core.$strip>;
244
+ }, z.core.$strip>;
245
+ /** A kind descriptor with `configSchema` tightened to `ConfigUISchema`. */
246
+ export type TargetKind = Omit<z.infer<typeof TargetKindSchema>, 'configSchema'> & {
247
+ readonly configSchema: ConfigUISchema;
248
+ };
249
+ /**
250
+ * A persisted target. `config` holds secrets; providers REDACT secret fields
251
+ * (return a presence marker only) when serving `listTargets` — never
252
+ * round-trip a stored secret to the UI.
253
+ */
254
+ export declare const TargetSchema: z.ZodObject<{
255
+ id: z.ZodString;
256
+ name: z.ZodString;
257
+ kind: z.ZodString;
258
+ addonId: z.ZodString;
259
+ enabled: z.ZodBoolean;
260
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
261
+ }, z.core.$strip>;
262
+ export type Target = z.infer<typeof TargetSchema>;
263
+ /** A discovery-surfaced candidate (config is partial + non-secret). */
264
+ export declare const DiscoveredTargetSchema: z.ZodObject<{
265
+ kind: z.ZodString;
266
+ suggestedName: z.ZodString;
267
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
268
+ }, z.core.$strip>;
269
+ export type DiscoveredTarget = z.infer<typeof DiscoveredTargetSchema>;
270
+ /** The degrade engine's report — what was resolved / dropped / degraded. */
271
+ export declare const RenderedAsSchema: z.ZodObject<{
272
+ level: z.ZodString;
273
+ format: z.ZodEnum<{
274
+ text: "text";
275
+ markdown: "markdown";
276
+ html: "html";
277
+ }>;
278
+ attachmentsSent: z.ZodNumber;
279
+ actionsSent: z.ZodNumber;
280
+ truncated: z.ZodBoolean;
281
+ dropped: z.ZodArray<z.ZodString>;
282
+ }, z.core.$strip>;
283
+ export type RenderedAs = z.infer<typeof RenderedAsSchema>;
284
+ export declare const SendResultSchema: z.ZodObject<{
285
+ success: z.ZodBoolean;
286
+ error: z.ZodOptional<z.ZodString>;
287
+ renderedAs: z.ZodOptional<z.ZodObject<{
288
+ level: z.ZodString;
289
+ format: z.ZodEnum<{
290
+ text: "text";
291
+ markdown: "markdown";
292
+ html: "html";
293
+ }>;
294
+ attachmentsSent: z.ZodNumber;
295
+ actionsSent: z.ZodNumber;
296
+ truncated: z.ZodBoolean;
297
+ dropped: z.ZodArray<z.ZodString>;
298
+ }, z.core.$strip>>;
299
+ }, z.core.$strip>;
300
+ export type SendResult = z.infer<typeof SendResultSchema>;
301
+ /** Same shape as SendResult — kept as a distinct name for the test panel. */
302
+ export declare const TestResultSchema: z.ZodObject<{
303
+ success: z.ZodBoolean;
304
+ error: z.ZodOptional<z.ZodString>;
305
+ renderedAs: z.ZodOptional<z.ZodObject<{
306
+ level: z.ZodString;
307
+ format: z.ZodEnum<{
308
+ text: "text";
309
+ markdown: "markdown";
310
+ html: "html";
311
+ }>;
312
+ attachmentsSent: z.ZodNumber;
313
+ actionsSent: z.ZodNumber;
314
+ truncated: z.ZodBoolean;
315
+ dropped: z.ZodArray<z.ZodString>;
316
+ }, z.core.$strip>>;
317
+ }, z.core.$strip>;
318
+ export type TestResult = SendResult;
17
319
  export declare const notificationOutputCapability: {
18
320
  readonly name: "notification-output";
19
321
  readonly scope: "system";
20
322
  readonly mode: "collection";
21
323
  readonly methods: {
324
+ readonly listTargetKinds: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{}, z.core.$strip>, z.ZodArray<z.ZodObject<{
325
+ kind: z.ZodString;
326
+ label: z.ZodString;
327
+ icon: z.ZodString;
328
+ addonId: z.ZodString;
329
+ configSchema: z.ZodUnknown;
330
+ supportsDiscovery: z.ZodBoolean;
331
+ caps: z.ZodObject<{
332
+ attachments: z.ZodObject<{
333
+ mediaTypes: z.ZodArray<z.ZodEnum<{
334
+ image: "image";
335
+ audio: "audio";
336
+ icon: "icon";
337
+ video: "video";
338
+ gif: "gif";
339
+ }>>;
340
+ mode: z.ZodEnum<{
341
+ url: "url";
342
+ both: "both";
343
+ bytes: "bytes";
344
+ }>;
345
+ max: z.ZodNumber;
346
+ maxBytes: z.ZodOptional<z.ZodNumber>;
347
+ }, z.core.$strip>;
348
+ actions: z.ZodNumber;
349
+ levels: z.ZodArray<z.ZodObject<{
350
+ id: z.ZodString;
351
+ label: z.ZodString;
352
+ ordinal: z.ZodNullable<z.ZodNumber>;
353
+ flags: z.ZodOptional<z.ZodObject<{
354
+ critical: z.ZodOptional<z.ZodBoolean>;
355
+ silent: z.ZodOptional<z.ZodBoolean>;
356
+ noPush: z.ZodOptional<z.ZodBoolean>;
357
+ }, z.core.$strip>>;
358
+ requires: z.ZodOptional<z.ZodArray<z.ZodString>>;
359
+ description: z.ZodOptional<z.ZodString>;
360
+ }, z.core.$strip>>;
361
+ format: z.ZodArray<z.ZodEnum<{
362
+ text: "text";
363
+ markdown: "markdown";
364
+ html: "html";
365
+ }>>;
366
+ clickUrl: z.ZodBoolean;
367
+ sound: z.ZodBoolean;
368
+ ttl: z.ZodBoolean;
369
+ bodyMaxLen: z.ZodNumber;
370
+ }, z.core.$strip>;
371
+ }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
372
+ readonly listTargets: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{}, z.core.$strip>, z.ZodArray<z.ZodObject<{
373
+ id: z.ZodString;
374
+ name: z.ZodString;
375
+ kind: z.ZodString;
376
+ addonId: z.ZodString;
377
+ enabled: z.ZodBoolean;
378
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
379
+ }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
380
+ readonly discoverTargets: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
381
+ kind: z.ZodString;
382
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
383
+ }, z.core.$strip>, z.ZodArray<z.ZodObject<{
384
+ kind: z.ZodString;
385
+ suggestedName: z.ZodString;
386
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
387
+ }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
22
388
  readonly send: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
23
- title: z.ZodString;
24
- body: z.ZodString;
25
- imageUrl: z.ZodOptional<z.ZodString>;
26
- deviceId: z.ZodOptional<z.ZodNumber>;
27
- eventId: z.ZodOptional<z.ZodString>;
28
- priority: z.ZodDefault<z.ZodEnum<{
29
- high: "high";
30
- low: "low";
31
- normal: "normal";
32
- critical: "critical";
33
- }>>;
34
- metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
35
- }, z.core.$strip>, z.ZodVoid, "mutation">;
36
- readonly sendTest: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodObject<{
389
+ targetId: z.ZodString;
390
+ notification: z.ZodObject<{
391
+ body: z.ZodString;
392
+ title: z.ZodOptional<z.ZodString>;
393
+ format: z.ZodDefault<z.ZodEnum<{
394
+ text: "text";
395
+ markdown: "markdown";
396
+ html: "html";
397
+ }>>;
398
+ priority: z.ZodDefault<z.ZodNumber>;
399
+ level: z.ZodOptional<z.ZodString>;
400
+ attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
401
+ mediaType: z.ZodEnum<{
402
+ image: "image";
403
+ audio: "audio";
404
+ icon: "icon";
405
+ video: "video";
406
+ gif: "gif";
407
+ }>;
408
+ url: z.ZodOptional<z.ZodString>;
409
+ bytes: z.ZodOptional<z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>>;
410
+ mime: z.ZodOptional<z.ZodString>;
411
+ name: z.ZodOptional<z.ZodString>;
412
+ }, z.core.$strip>>>;
413
+ clickUrl: z.ZodOptional<z.ZodString>;
414
+ actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
415
+ id: z.ZodString;
416
+ label: z.ZodString;
417
+ url: z.ZodOptional<z.ZodString>;
418
+ }, z.core.$strip>>>;
419
+ sound: z.ZodOptional<z.ZodString>;
420
+ ttl: z.ZodOptional<z.ZodNumber>;
421
+ tag: z.ZodOptional<z.ZodString>;
422
+ deviceId: z.ZodOptional<z.ZodNumber>;
423
+ eventId: z.ZodOptional<z.ZodString>;
424
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
425
+ }, z.core.$strip>;
426
+ }, z.core.$strip>, z.ZodObject<{
37
427
  success: z.ZodBoolean;
38
428
  error: z.ZodOptional<z.ZodString>;
429
+ renderedAs: z.ZodOptional<z.ZodObject<{
430
+ level: z.ZodString;
431
+ format: z.ZodEnum<{
432
+ text: "text";
433
+ markdown: "markdown";
434
+ html: "html";
435
+ }>;
436
+ attachmentsSent: z.ZodNumber;
437
+ actionsSent: z.ZodNumber;
438
+ truncated: z.ZodBoolean;
439
+ dropped: z.ZodArray<z.ZodString>;
440
+ }, z.core.$strip>>;
39
441
  }, z.core.$strip>, "mutation">;
442
+ readonly testTarget: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
443
+ targetId: z.ZodString;
444
+ sample: z.ZodOptional<z.ZodObject<{
445
+ body: z.ZodString;
446
+ title: z.ZodOptional<z.ZodString>;
447
+ format: z.ZodDefault<z.ZodEnum<{
448
+ text: "text";
449
+ markdown: "markdown";
450
+ html: "html";
451
+ }>>;
452
+ priority: z.ZodDefault<z.ZodNumber>;
453
+ level: z.ZodOptional<z.ZodString>;
454
+ attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
455
+ mediaType: z.ZodEnum<{
456
+ image: "image";
457
+ audio: "audio";
458
+ icon: "icon";
459
+ video: "video";
460
+ gif: "gif";
461
+ }>;
462
+ url: z.ZodOptional<z.ZodString>;
463
+ bytes: z.ZodOptional<z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>>;
464
+ mime: z.ZodOptional<z.ZodString>;
465
+ name: z.ZodOptional<z.ZodString>;
466
+ }, z.core.$strip>>>;
467
+ clickUrl: z.ZodOptional<z.ZodString>;
468
+ actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
469
+ id: z.ZodString;
470
+ label: z.ZodString;
471
+ url: z.ZodOptional<z.ZodString>;
472
+ }, z.core.$strip>>>;
473
+ sound: z.ZodOptional<z.ZodString>;
474
+ ttl: z.ZodOptional<z.ZodNumber>;
475
+ tag: z.ZodOptional<z.ZodString>;
476
+ deviceId: z.ZodOptional<z.ZodNumber>;
477
+ eventId: z.ZodOptional<z.ZodString>;
478
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
479
+ }, z.core.$strip>>;
480
+ }, z.core.$strip>, z.ZodObject<{
481
+ success: z.ZodBoolean;
482
+ error: z.ZodOptional<z.ZodString>;
483
+ renderedAs: z.ZodOptional<z.ZodObject<{
484
+ level: z.ZodString;
485
+ format: z.ZodEnum<{
486
+ text: "text";
487
+ markdown: "markdown";
488
+ html: "html";
489
+ }>;
490
+ attachmentsSent: z.ZodNumber;
491
+ actionsSent: z.ZodNumber;
492
+ truncated: z.ZodBoolean;
493
+ dropped: z.ZodArray<z.ZodString>;
494
+ }, z.core.$strip>>;
495
+ }, z.core.$strip>, "mutation">;
496
+ readonly upsertTarget: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
497
+ target: z.ZodObject<{
498
+ id: z.ZodString;
499
+ name: z.ZodString;
500
+ kind: z.ZodString;
501
+ addonId: z.ZodString;
502
+ enabled: z.ZodBoolean;
503
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
504
+ }, z.core.$strip>;
505
+ }, z.core.$strip>, z.ZodObject<{
506
+ id: z.ZodString;
507
+ name: z.ZodString;
508
+ kind: z.ZodString;
509
+ addonId: z.ZodString;
510
+ enabled: z.ZodBoolean;
511
+ config: z.ZodRecord<z.ZodString, z.ZodUnknown>;
512
+ }, z.core.$strip>, "mutation">;
513
+ readonly deleteTarget: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
514
+ targetId: z.ZodString;
515
+ }, z.core.$strip>, z.ZodVoid, "mutation">;
516
+ readonly setTargetEnabled: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
517
+ targetId: z.ZodString;
518
+ enabled: z.ZodBoolean;
519
+ }, z.core.$strip>, z.ZodVoid, "mutation">;
40
520
  };
41
521
  };
42
522
  export type INotificationOutputProvider = InferProvider<typeof notificationOutputCapability>;
43
- export { NotificationSchema };
@@ -646,10 +646,11 @@ export declare const pipelineOrchestratorCapability: {
646
646
  }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
647
647
  /**
648
648
  * Get one camera's decoder placement (computed if not yet pinned).
649
- * Consumed by `stream-broker.createBroker` so decoder provider
650
- * selection is deterministic fixes the 2026-04-18 race where
651
- * `capProviders[0]` silently picked ffmpeg-on-agent-0 for a
652
- * hub-assigned camera.
649
+ *
650
+ * ADVISORY today: reports the orchestrator's decoder preference only.
651
+ * Actual decode placement is broker-owned (local-node pin + frame-plane
652
+ * co-location guard). Reserved to become the binding source/decoder-owner
653
+ * control in the stream-LB epic (Phase 2).
653
654
  *
654
655
  * `pipelineNodeId` is the node already chosen to run inference for
655
656
  * this camera. When provided, the balancer prefers co-location with
@@ -1310,4 +1311,4 @@ export type CameraDetectionPhase = z.infer<typeof CameraDetectionPhaseSchema>;
1310
1311
  export type CameraAudioStatus = z.infer<typeof CameraAudioStatusSchema>;
1311
1312
  export type CameraRecordingStatus = z.infer<typeof CameraRecordingStatusSchema>;
1312
1313
  export type CameraRecordingMode = z.infer<typeof CameraRecordingModeSchema>;
1313
- export { PipelineAssignmentSchema, DecoderAssignmentSchema, AgentLoadSummarySchema, GlobalMetricsSchema, CapabilityBindingsSchema, CameraPipelineConfigSchema, CameraStepOverridePatchSchema, PipelineTemplateSchema as OrchestratorPipelineTemplateSchema, CameraStatusSchema, CameraAssignmentStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraBrokerStatusSchema, CameraBrokerProfileSchema, CameraDecoderStatusSchema, CameraDecoderShmSchema, CameraMotionStatusSchema, CameraDetectionStatusSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionPhaseSchema, CameraAudioStatusSchema, CameraRecordingStatusSchema, CameraRecordingModeSchema, };
1314
+ export { AgentLoadSummarySchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMotionStatusSchema, CameraPipelineConfigSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusSchema, CameraStepOverridePatchSchema, CapabilityBindingsSchema, DecoderAssignmentSchema, GlobalMetricsSchema, PipelineAssignmentSchema, PipelineTemplateSchema as OrchestratorPipelineTemplateSchema, };
@@ -12,6 +12,7 @@ export declare const CamStreamKindSchema: z.ZodEnum<{
12
12
  "pull-rtsp": "pull-rtsp";
13
13
  "pull-rtmp": "pull-rtmp";
14
14
  "pull-http": "pull-http";
15
+ "pull-flv": "pull-flv";
15
16
  "pull-rfc4571": "pull-rfc4571";
16
17
  "push-annexb": "push-annexb";
17
18
  derived: "derived";
@@ -28,6 +29,7 @@ export declare const CameraStreamSchema: z.ZodObject<{
28
29
  "pull-rtsp": "pull-rtsp";
29
30
  "pull-rtmp": "pull-rtmp";
30
31
  "pull-http": "pull-http";
32
+ "pull-flv": "pull-flv";
31
33
  "pull-rfc4571": "pull-rfc4571";
32
34
  "push-annexb": "push-annexb";
33
35
  derived: "derived";
@@ -284,6 +284,7 @@ export declare const streamBrokerCapability: {
284
284
  "pull-rtsp": "pull-rtsp";
285
285
  "pull-rtmp": "pull-rtmp";
286
286
  "pull-http": "pull-http";
287
+ "pull-flv": "pull-flv";
287
288
  "pull-rfc4571": "pull-rfc4571";
288
289
  "push-annexb": "push-annexb";
289
290
  derived: "derived";
@@ -384,6 +385,7 @@ export declare const streamBrokerCapability: {
384
385
  "pull-rtsp": "pull-rtsp";
385
386
  "pull-rtmp": "pull-rtmp";
386
387
  "pull-http": "pull-http";
388
+ "pull-flv": "pull-flv";
387
389
  "pull-rfc4571": "pull-rfc4571";
388
390
  "push-annexb": "push-annexb";
389
391
  derived: "derived";
@@ -25,6 +25,7 @@ export declare const CamStreamDescriptorSchema: z.ZodObject<{
25
25
  "pull-rtsp": "pull-rtsp";
26
26
  "pull-rtmp": "pull-rtmp";
27
27
  "pull-http": "pull-http";
28
+ "pull-flv": "pull-flv";
28
29
  "pull-rfc4571": "pull-rfc4571";
29
30
  "push-annexb": "push-annexb";
30
31
  derived: "derived";
@@ -63,6 +64,7 @@ export declare const streamCatalogCapability: {
63
64
  "pull-rtsp": "pull-rtsp";
64
65
  "pull-rtmp": "pull-rtmp";
65
66
  "pull-http": "pull-http";
67
+ "pull-flv": "pull-flv";
66
68
  "pull-rfc4571": "pull-rfc4571";
67
69
  "push-annexb": "push-annexb";
68
70
  derived: "derived";