@camstack/types 1.2.43 → 1.2.44
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 +8 -2
- package/dist/addon.mjs +8 -2
- package/dist/capabilities/index.d.ts +5 -2
- package/dist/capabilities/osd-manager.cap.d.ts +900 -0
- package/dist/capabilities/pipeline-analytics.cap.d.ts +171 -4
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +10 -0
- package/dist/capabilities/schemas/streaming-shared.d.ts +2 -0
- package/dist/capabilities/server-management.cap.d.ts +3 -3
- package/dist/capabilities/stream-broker.cap.d.ts +32 -0
- package/dist/ffmpeg/fmp4-box-splitter.d.ts +113 -0
- package/dist/ffmpeg/fmp4-fragment-child.d.ts +85 -0
- package/dist/ffmpeg/fmp4-fragment-plane.d.ts +142 -0
- package/dist/ffmpeg/invocation.d.ts +4 -2
- package/dist/fmp4-box-splitter-B53u9-Nu.mjs +615 -0
- package/dist/fmp4-box-splitter-BkWH7O3L.js +686 -0
- package/dist/generated/addon-api.d.ts +85 -0
- package/dist/generated/cap-input-defaults.d.ts +1 -1
- package/dist/generated/capability-router-map.d.ts +5 -2
- package/dist/generated/device-proxy.d.ts +3 -1
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/system-proxy.d.ts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +581 -404
- package/dist/index.mjs +558 -394
- package/dist/interfaces/camera-switches.d.ts +48 -0
- package/dist/interfaces/stream-broker.d.ts +18 -0
- package/dist/node.d.ts +4 -0
- package/dist/node.js +509 -3
- package/dist/node.mjs +507 -3
- package/dist/notification/schedule.d.ts +20 -0
- package/dist/{sleep-DtstvzWm.mjs → sleep-cC4Fuup8.mjs} +26 -1
- package/dist/{sleep-Bx9IIoT0.js → sleep-eiC10_cX.js} +26 -1
- package/dist/types/pipeline-step.d.ts +1 -1
- package/package.json +1 -1
- package/dist/canonical-hash-7nfBbEqR.mjs +0 -35
- package/dist/canonical-hash-BcZHRHIx.js +0 -40
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as EventCategory } from "./event-category-41fKf-q9.mjs";
|
|
2
|
-
import { $ as FrameHandleSchema, A as method, B as readinessKey, C as DeviceType, Ct as collectHydratedFieldEntries, D as event, E as DEVICE_STATUS_METHOD, Et as resolveHydratedFieldValue, F as readNodePin, G as CamProfileSchema, H as BrokerStatsSchema, I as toNodeId, J as CameraStreamSchema, K as CamStreamKindSchema, L as ReadinessRegistry, M as systemMethod, N as CAP_NODE_PIN_CONTEXT_KEY, O as expandCapMethods, P as nodePin, Q as FrameHandleFormatSchema, R as ReadinessTimeoutError, S as DeviceRole, St as WELL_KNOWN_TAB_MAP, T as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Tt as hydrateSchema, U as BrokerStatusSchema, V as scopeKey, W as CAM_PROFILE_ORDER, X as DecodedFrameSchema, Y as DecodedAudioChunkSchema, Z as EncodedPacketSchema, _ as RawStateResultSchema, _t as createDurableState, a as asJsonObject, at as SubscribeAudioChunksInputSchema, b as ChargingStatus, bt as isEvent, c as parseJsonArray, ct as SubscribeFramesResultSchema, d as DEVICE_SCOPED_CAPS, dt as parseProfileBrokerId, et as ProfileRtspEntrySchema, f as isDeviceScopedCap, ft as selectAssignedProfileSlots, g as createSliceHandle, gt as normalizeAddonInitResult, h as createMirrorSource, ht as BaseAddon, i as asJsonArray, it as StreamSourceSchema, j as resolveCapMount, k as isDeviceConfigCap, l as parseJsonObject, lt as makeProfileBrokerId, m as createLazyTrpcSource, mt as DisposerChain, n as sleepCancellable, nt as ProfileSlotStatusSchema, o as asNumber, ot as SubscribeAudioChunksResultSchema, p as createDeviceProxy, pt as DATAPLANE_SECRET_HEADER, q as CamStreamResolutionSchema, r as asBoolean, rt as StreamSourceEntrySchema, s as asString, st as SubscribeFramesInputSchema, t as sleep, tt as ProfileSlotSchema, u as parseJsonUnknown, ut as makeSourceBrokerId, v as deviceOpsCapability, vt as createEvent, w as adminUiCapability, wt as collectHydratedFieldValues, x as DeviceFeature, xt as WELL_KNOWN_TABS, y as viewerUiCapability, yt as emitReadiness, z as emitDownForOwnedCaps } from "./sleep-
|
|
3
|
-
import {
|
|
2
|
+
import { $ as FrameHandleSchema, A as method, B as readinessKey, C as DeviceType, Ct as collectHydratedFieldEntries, D as event, E as DEVICE_STATUS_METHOD, Et as resolveHydratedFieldValue, F as readNodePin, G as CamProfileSchema, H as BrokerStatsSchema, I as toNodeId, J as CameraStreamSchema, K as CamStreamKindSchema, L as ReadinessRegistry, M as systemMethod, N as CAP_NODE_PIN_CONTEXT_KEY, O as expandCapMethods, P as nodePin, Q as FrameHandleFormatSchema, R as ReadinessTimeoutError, S as DeviceRole, St as WELL_KNOWN_TAB_MAP, T as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Tt as hydrateSchema, U as BrokerStatusSchema, V as scopeKey, W as CAM_PROFILE_ORDER, X as DecodedFrameSchema, Y as DecodedAudioChunkSchema, Z as EncodedPacketSchema, _ as RawStateResultSchema, _t as createDurableState, a as asJsonObject, at as SubscribeAudioChunksInputSchema, b as ChargingStatus, bt as isEvent, c as parseJsonArray, ct as SubscribeFramesResultSchema, d as DEVICE_SCOPED_CAPS, dt as parseProfileBrokerId, et as ProfileRtspEntrySchema, f as isDeviceScopedCap, ft as selectAssignedProfileSlots, g as createSliceHandle, gt as normalizeAddonInitResult, h as createMirrorSource, ht as BaseAddon, i as asJsonArray, it as StreamSourceSchema, j as resolveCapMount, k as isDeviceConfigCap, l as parseJsonObject, lt as makeProfileBrokerId, m as createLazyTrpcSource, mt as DisposerChain, n as sleepCancellable, nt as ProfileSlotStatusSchema, o as asNumber, ot as SubscribeAudioChunksResultSchema, p as createDeviceProxy, pt as DATAPLANE_SECRET_HEADER, q as CamStreamResolutionSchema, r as asBoolean, rt as StreamSourceEntrySchema, s as asString, st as SubscribeFramesInputSchema, t as sleep, tt as ProfileSlotSchema, u as parseJsonUnknown, ut as makeSourceBrokerId, v as deviceOpsCapability, vt as createEvent, w as adminUiCapability, wt as collectHydratedFieldValues, x as DeviceFeature, xt as WELL_KNOWN_TABS, y as viewerUiCapability, yt as emitReadiness, z as emitDownForOwnedCaps } from "./sleep-cC4Fuup8.mjs";
|
|
3
|
+
import { a as buildAudioArgs, c as buildVideoArgs, d as logBannerArgs, f as pickVideoEncoder, i as audioPlanFromEncodeProfile, l as invocationFromEncodeProfile, n as canonicalHash, o as buildFfmpegArgs, r as AUDIO_PRESETS, s as buildInputArgs, t as Fmp4BoxSplitter, u as isSoftwareDecode } from "./fmp4-box-splitter-B53u9-Nu.mjs";
|
|
4
4
|
import { EventSourceType } from "./enums.mjs";
|
|
5
5
|
import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
@@ -230,383 +230,6 @@ function encodeProfileFromStreamShape(stream) {
|
|
|
230
230
|
};
|
|
231
231
|
}
|
|
232
232
|
//#endregion
|
|
233
|
-
//#region src/ffmpeg/invocation.ts
|
|
234
|
-
var AUDIO_ENCODER_BY_CODEC = {
|
|
235
|
-
opus: "libopus",
|
|
236
|
-
aac: "aac",
|
|
237
|
-
pcmu: "pcm_mulaw",
|
|
238
|
-
pcma: "pcm_alaw"
|
|
239
|
-
};
|
|
240
|
-
/**
|
|
241
|
-
* Camera-microphone audio, per codec. Lives HERE rather than in
|
|
242
|
-
* `encode-defaults.ts` only to avoid an import cycle (`encode-defaults` depends
|
|
243
|
-
* on these types); it is re-exported from there, which is where to read it.
|
|
244
|
-
*
|
|
245
|
-
* Every source in this repo is a mono camera mic. The former broker preset
|
|
246
|
-
* encoded Opus at `channels: 2`, spending bitrate duplicating one channel —
|
|
247
|
-
* that is the value this consolidation changed.
|
|
248
|
-
*/
|
|
249
|
-
var AUDIO_PRESETS = {
|
|
250
|
-
aac: {
|
|
251
|
-
kind: "encode",
|
|
252
|
-
codec: "aac",
|
|
253
|
-
bitrateKbps: 128,
|
|
254
|
-
sampleRateHz: 48e3,
|
|
255
|
-
channels: 1
|
|
256
|
-
},
|
|
257
|
-
opus: {
|
|
258
|
-
kind: "encode",
|
|
259
|
-
codec: "opus",
|
|
260
|
-
bitrateKbps: 64,
|
|
261
|
-
sampleRateHz: 48e3,
|
|
262
|
-
channels: 1
|
|
263
|
-
},
|
|
264
|
-
pcmu: {
|
|
265
|
-
kind: "encode",
|
|
266
|
-
codec: "pcmu",
|
|
267
|
-
sampleRateHz: 8e3,
|
|
268
|
-
channels: 1
|
|
269
|
-
}
|
|
270
|
-
};
|
|
271
|
-
/** `-hide_banner -loglevel <level>` — every ffmpeg site opens with this. */
|
|
272
|
-
function logBannerArgs(level) {
|
|
273
|
-
return [
|
|
274
|
-
"-hide_banner",
|
|
275
|
-
"-loglevel",
|
|
276
|
-
level
|
|
277
|
-
];
|
|
278
|
-
}
|
|
279
|
-
/** `true` when the resolved value means "decode in software" (⇒ no `-hwaccel`). */
|
|
280
|
-
function isSoftwareDecode(decodeHwAccel) {
|
|
281
|
-
return !decodeHwAccel || decodeHwAccel === "none" || decodeHwAccel === "copy";
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Every INPUT option, in order, terminated by `-i <url>`. Nothing may be
|
|
285
|
-
* appended to this list by a caller — that is the whole point of the function.
|
|
286
|
-
*/
|
|
287
|
-
function buildInputArgs(input, decodeHwAccel) {
|
|
288
|
-
const args = [];
|
|
289
|
-
if (!isSoftwareDecode(decodeHwAccel)) args.push("-hwaccel", String(decodeHwAccel));
|
|
290
|
-
if (input.extraArgs?.length) args.push(...input.extraArgs);
|
|
291
|
-
if (input.analyzeDurationUs !== void 0) args.push("-analyzeduration", String(input.analyzeDurationUs));
|
|
292
|
-
if (input.probeSizeBytes !== void 0) args.push("-probesize", String(input.probeSizeBytes));
|
|
293
|
-
if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
|
|
294
|
-
if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
|
|
295
|
-
args.push("-i", input.url);
|
|
296
|
-
return args;
|
|
297
|
-
}
|
|
298
|
-
/** The `-vf` filter args, or `[]` when a consumer `-vf` already claims the slot. */
|
|
299
|
-
function buildVideoFilterArgs(scale, outputArgs) {
|
|
300
|
-
if (!scale) return [];
|
|
301
|
-
if (outputArgs.some((a) => a === "-vf")) return [];
|
|
302
|
-
if (scale.mode === "exact") return ["-vf", `scale=${scale.width}:${scale.height}`];
|
|
303
|
-
return ["-vf", `scale='min(${scale.width},iw)':'min(${scale.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2`];
|
|
304
|
-
}
|
|
305
|
-
/** Rate-control args for an encode plan. */
|
|
306
|
-
function buildRateControlArgs(video) {
|
|
307
|
-
const kbps = video.bitrateKbps;
|
|
308
|
-
if (kbps === void 0) return [];
|
|
309
|
-
const rc = video.rateControl ?? {
|
|
310
|
-
kind: "cap",
|
|
311
|
-
vbvSeconds: 2
|
|
312
|
-
};
|
|
313
|
-
const bufsize = Math.max(1, Math.round(kbps * rc.vbvSeconds));
|
|
314
|
-
return [
|
|
315
|
-
...rc.kind === "cbr" ? ["-b:v", `${kbps}k`] : [],
|
|
316
|
-
"-maxrate",
|
|
317
|
-
`${kbps}k`,
|
|
318
|
-
"-bufsize",
|
|
319
|
-
`${bufsize}k`
|
|
320
|
-
];
|
|
321
|
-
}
|
|
322
|
-
/** The whole video block (`-vf` … `-c:v` … knobs), after `-i`. */
|
|
323
|
-
function buildVideoArgs(video, outputArgs) {
|
|
324
|
-
if (video.kind === "copy") return [
|
|
325
|
-
"-c:v",
|
|
326
|
-
"copy",
|
|
327
|
-
...video.bitstreamFilter ? ["-bsf:v", video.bitstreamFilter] : []
|
|
328
|
-
];
|
|
329
|
-
const args = [
|
|
330
|
-
...buildVideoFilterArgs(video.scale, outputArgs),
|
|
331
|
-
"-c:v",
|
|
332
|
-
video.encoder
|
|
333
|
-
];
|
|
334
|
-
if (video.preset !== void 0) args.push("-preset", video.preset);
|
|
335
|
-
if (video.tune !== void 0) args.push("-tune", video.tune);
|
|
336
|
-
if (video.profile !== void 0) args.push("-profile:v", video.profile);
|
|
337
|
-
if (video.level !== void 0) args.push("-level", video.level);
|
|
338
|
-
if (video.pixelFormat !== void 0) args.push("-pix_fmt", video.pixelFormat);
|
|
339
|
-
if (video.fps !== void 0) args.push("-r", String(video.fps));
|
|
340
|
-
if (video.gopFrames !== void 0) args.push("-g", String(video.gopFrames));
|
|
341
|
-
if (video.forceKeyFramesSeconds !== void 0) args.push("-force_key_frames", `expr:gte(t,n_forced*${video.forceKeyFramesSeconds})`);
|
|
342
|
-
if (video.bf !== void 0) args.push("-bf", String(video.bf));
|
|
343
|
-
args.push(...buildRateControlArgs(video));
|
|
344
|
-
if (video.bitstreamFilter !== void 0) args.push("-bsf:v", video.bitstreamFilter);
|
|
345
|
-
return args;
|
|
346
|
-
}
|
|
347
|
-
/** The whole audio block, after `-i`. */
|
|
348
|
-
function buildAudioArgs(audio) {
|
|
349
|
-
if (audio.kind === "none") return ["-an"];
|
|
350
|
-
if (audio.kind === "copy") return ["-c:a", "copy"];
|
|
351
|
-
const args = [];
|
|
352
|
-
if (audio.filter !== void 0) args.push("-af", audio.filter);
|
|
353
|
-
args.push("-c:a", AUDIO_ENCODER_BY_CODEC[audio.codec]);
|
|
354
|
-
if (audio.application !== void 0) args.push("-application", audio.application);
|
|
355
|
-
if (audio.frameDurationMs !== void 0) args.push("-frame_duration", String(audio.frameDurationMs));
|
|
356
|
-
if (audio.globalHeader === true) args.push("-flags", "+global_header");
|
|
357
|
-
if (audio.sampleRateHz !== void 0) args.push("-ar", String(audio.sampleRateHz));
|
|
358
|
-
if (audio.bitrateKbps !== void 0) args.push("-b:a", `${audio.bitrateKbps}k`);
|
|
359
|
-
if (audio.vbvBufferKbits !== void 0) args.push("-bufsize", `${audio.vbvBufferKbits}k`);
|
|
360
|
-
if (audio.channels !== void 0) args.push("-ac", String(audio.channels));
|
|
361
|
-
return args;
|
|
362
|
-
}
|
|
363
|
-
/** RTP output-leg args (`-payload_type`, `-ssrc`, `-sdp_file`, `-f rtp <url>`). */
|
|
364
|
-
function buildRtpOutputArgs(out) {
|
|
365
|
-
const args = [];
|
|
366
|
-
if (out.payloadType !== void 0) args.push("-payload_type", String(out.payloadType));
|
|
367
|
-
if (out.ssrc !== void 0) args.push("-ssrc", String(out.ssrc));
|
|
368
|
-
if (out.sdpFile !== void 0) args.push("-sdp_file", out.sdpFile);
|
|
369
|
-
args.push("-f", "rtp", out.url);
|
|
370
|
-
return args;
|
|
371
|
-
}
|
|
372
|
-
/** `true` when the sink is a raw elementary bytestream that cannot mux audio. */
|
|
373
|
-
function isElementaryVideoSink(sink) {
|
|
374
|
-
return sink.kind === "stdout" && (sink.container === "h264" || sink.container === "hevc");
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* The fragmented-MP4 muxer flags, in the order the recorder has proven them
|
|
378
|
-
* (`recorder/addon/ffmpeg-args.ts` passes the same `movflags` string through
|
|
379
|
-
* `-segment_format_options`, across every vendor in the fleet):
|
|
380
|
-
*
|
|
381
|
-
* - `frag_keyframe` — cut a fragment at each key frame, so every fragment
|
|
382
|
-
* opens on a sync sample. HKSV's whole requirement.
|
|
383
|
-
* - `empty_moov` — write `ftyp`+`moov` up front with no samples in it, which
|
|
384
|
-
* is what makes the head a standalone INITIALISATION segment.
|
|
385
|
-
* - `default_base_moof` — fragment offsets are self-relative, so a fragment is
|
|
386
|
-
* demuxable without the bytes that preceded it. D31's byte-range read path
|
|
387
|
-
* depends on exactly this property of the recorder's segments.
|
|
388
|
-
*/
|
|
389
|
-
var FMP4_MOVFLAGS = "+frag_keyframe+empty_moov+default_base_moof";
|
|
390
|
-
/**
|
|
391
|
-
* The terminal sink args for every non-`rtp-outputs` sink. Exhaustive over the
|
|
392
|
-
* union so a new member cannot fall through to `['-f', container, 'pipe:1']`,
|
|
393
|
-
* which is what a plain `container` read would have done for `mp4` — a valid
|
|
394
|
-
* argv that writes a NON-fragmented, unseekable-to-a-pipe MP4 and produces one
|
|
395
|
-
* unusable byte stream.
|
|
396
|
-
*/
|
|
397
|
-
function buildStdoutOrRtspSinkArgs(sink) {
|
|
398
|
-
if (sink.kind === "rtsp-listen") return [
|
|
399
|
-
"-f",
|
|
400
|
-
"rtsp",
|
|
401
|
-
"-rtsp_transport",
|
|
402
|
-
"tcp",
|
|
403
|
-
"-rtsp_flags",
|
|
404
|
-
"listen",
|
|
405
|
-
sink.url
|
|
406
|
-
];
|
|
407
|
-
if (sink.kind === "rtp-outputs") return [];
|
|
408
|
-
return sink.container === "mp4" ? buildFmp4SinkArgs(sink) : [
|
|
409
|
-
"-f",
|
|
410
|
-
sink.container,
|
|
411
|
-
"pipe:1"
|
|
412
|
-
];
|
|
413
|
-
}
|
|
414
|
-
/** `-movflags … -min_frag_duration <us> -f mp4 pipe:1`. */
|
|
415
|
-
function buildFmp4SinkArgs(sink) {
|
|
416
|
-
return [
|
|
417
|
-
"-movflags",
|
|
418
|
-
FMP4_MOVFLAGS,
|
|
419
|
-
"-min_frag_duration",
|
|
420
|
-
String(Math.max(0, Math.round(sink.fragmentMs * 1e3))),
|
|
421
|
-
"-f",
|
|
422
|
-
"mp4",
|
|
423
|
-
"pipe:1"
|
|
424
|
-
];
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* A second output mapping source audio to RTP-over-UDP. `0:a:0?` makes the
|
|
428
|
-
* audio optional so a source with no audio skips it instead of failing the
|
|
429
|
-
* whole invocation.
|
|
430
|
-
*/
|
|
431
|
-
function buildAudioSidecarArgs(sidecar) {
|
|
432
|
-
return [
|
|
433
|
-
"-map",
|
|
434
|
-
"0:a:0?",
|
|
435
|
-
...buildAudioArgs(sidecar.codec === "pcma" ? {
|
|
436
|
-
kind: "encode",
|
|
437
|
-
codec: "pcma",
|
|
438
|
-
sampleRateHz: 8e3,
|
|
439
|
-
channels: 1
|
|
440
|
-
} : AUDIO_PRESETS[sidecar.codec]),
|
|
441
|
-
...buildRtpOutputArgs({
|
|
442
|
-
url: sidecar.rtpUrl,
|
|
443
|
-
sdpFile: sidecar.sdpFile
|
|
444
|
-
})
|
|
445
|
-
];
|
|
446
|
-
}
|
|
447
|
-
/**
|
|
448
|
-
* Assemble the full ffmpeg argument list. Layout:
|
|
449
|
-
*
|
|
450
|
-
* -hide_banner -loglevel <level>
|
|
451
|
-
* [-hwaccel <backend|auto>] ─┐ INPUT options — strictly before -i.
|
|
452
|
-
* [<input.extraArgs>] │
|
|
453
|
-
* [-fflags <flag>…] │
|
|
454
|
-
* [-rtsp_transport tcp] │
|
|
455
|
-
* -i <url> ─┘
|
|
456
|
-
* <video block> <threads> <audio block> ─┐ OUTPUT options.
|
|
457
|
-
* <consumer outputArgs verbatim> │
|
|
458
|
-
* <sink> ─┘ terminal
|
|
459
|
-
*/
|
|
460
|
-
function buildFfmpegArgs(inv) {
|
|
461
|
-
const head = [...logBannerArgs(inv.logLevel), ...buildInputArgs(inv.input, inv.decodeHwAccel)];
|
|
462
|
-
const threadArgs = inv.threadCount > 0 ? ["-threads", String(inv.threadCount)] : [];
|
|
463
|
-
if (inv.sink.kind === "rtp-outputs") {
|
|
464
|
-
const videoLeg = inv.sink.video ? [
|
|
465
|
-
"-an",
|
|
466
|
-
"-map",
|
|
467
|
-
"0:v:0",
|
|
468
|
-
...buildVideoArgs(inv.video, inv.outputArgs),
|
|
469
|
-
...threadArgs,
|
|
470
|
-
...inv.outputArgs,
|
|
471
|
-
...buildRtpOutputArgs(inv.sink.video)
|
|
472
|
-
] : [];
|
|
473
|
-
const audioLeg = inv.sink.audio ? [
|
|
474
|
-
"-vn",
|
|
475
|
-
"-map",
|
|
476
|
-
"0:a:0?",
|
|
477
|
-
...buildAudioArgs(inv.audio),
|
|
478
|
-
...buildRtpOutputArgs(inv.sink.audio)
|
|
479
|
-
] : [];
|
|
480
|
-
return [
|
|
481
|
-
...head,
|
|
482
|
-
...videoLeg,
|
|
483
|
-
...audioLeg
|
|
484
|
-
];
|
|
485
|
-
}
|
|
486
|
-
const audioArgs = isElementaryVideoSink(inv.sink) ? ["-an"] : buildAudioArgs(inv.audio);
|
|
487
|
-
const sinkArgs = buildStdoutOrRtspSinkArgs(inv.sink);
|
|
488
|
-
return [
|
|
489
|
-
...head,
|
|
490
|
-
...buildVideoArgs(inv.video, inv.outputArgs),
|
|
491
|
-
...threadArgs,
|
|
492
|
-
...audioArgs,
|
|
493
|
-
...inv.outputArgs,
|
|
494
|
-
...sinkArgs,
|
|
495
|
-
...inv.audioSidecar ? buildAudioSidecarArgs(inv.audioSidecar) : []
|
|
496
|
-
];
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Hardware ENCODER ids per decode-hwaccel backend — a static, deterministic
|
|
500
|
-
* map (the same shape the reference NVR uses: platform → encoder, no probe).
|
|
501
|
-
*/
|
|
502
|
-
var ENCODER_IDS_BY_BACKEND = {
|
|
503
|
-
videotoolbox: {
|
|
504
|
-
h264: "h264_videotoolbox",
|
|
505
|
-
h265: "hevc_videotoolbox"
|
|
506
|
-
},
|
|
507
|
-
vaapi: {
|
|
508
|
-
h264: "h264_vaapi",
|
|
509
|
-
h265: "hevc_vaapi"
|
|
510
|
-
},
|
|
511
|
-
qsv: {
|
|
512
|
-
h264: "h264_qsv",
|
|
513
|
-
h265: "hevc_qsv"
|
|
514
|
-
},
|
|
515
|
-
cuda: {
|
|
516
|
-
h264: "h264_nvenc",
|
|
517
|
-
h265: "hevc_nvenc"
|
|
518
|
-
},
|
|
519
|
-
nvdec: {
|
|
520
|
-
h264: "h264_nvenc",
|
|
521
|
-
h265: "hevc_nvenc"
|
|
522
|
-
},
|
|
523
|
-
amf: {
|
|
524
|
-
h264: "h264_amf",
|
|
525
|
-
h265: "hevc_amf"
|
|
526
|
-
}
|
|
527
|
-
};
|
|
528
|
-
/**
|
|
529
|
-
* The hardware encoder for a target codec on `backend`, or the software one.
|
|
530
|
-
* `'auto'` is NOT a backend identity (it is an instruction to ffmpeg), so it
|
|
531
|
-
* maps to software encoding.
|
|
532
|
-
*/
|
|
533
|
-
function pickVideoEncoder(target, backend, useHardware) {
|
|
534
|
-
const software = target === "h264" ? "libx264" : "libx265";
|
|
535
|
-
if (!useHardware || backend === null || isSoftwareDecode(backend) || backend === "auto") return software;
|
|
536
|
-
const ids = ENCODER_IDS_BY_BACKEND[backend.toLowerCase()];
|
|
537
|
-
if (!ids) return software;
|
|
538
|
-
return target === "h264" ? ids.h264 : ids.h265;
|
|
539
|
-
}
|
|
540
|
-
/** Map an `EncodeProfile.audio` to an audio plan. */
|
|
541
|
-
function audioPlanFromEncodeProfile(audio) {
|
|
542
|
-
if (audio === "passthrough") return { kind: "none" };
|
|
543
|
-
if (audio.codec === "copy") return { kind: "copy" };
|
|
544
|
-
return {
|
|
545
|
-
kind: "encode",
|
|
546
|
-
codec: audio.codec,
|
|
547
|
-
...audio.bitrateKbps !== void 0 ? { bitrateKbps: audio.bitrateKbps } : {},
|
|
548
|
-
...audio.sampleRateHz !== void 0 ? { sampleRateHz: audio.sampleRateHz } : {},
|
|
549
|
-
...audio.channels !== void 0 ? { channels: audio.channels } : {}
|
|
550
|
-
};
|
|
551
|
-
}
|
|
552
|
-
/**
|
|
553
|
-
* Adapt an `EncodeProfile` (the operator/consumer-facing shape) into an
|
|
554
|
-
* {@link FfmpegInvocation}. This is the ONLY bridge between the two models —
|
|
555
|
-
* a second one is how the repo grew two argv builders that disagreed about
|
|
556
|
-
* hardware.
|
|
557
|
-
*
|
|
558
|
-
* Smart video copy: when the source already speaks the requested codec the
|
|
559
|
-
* encode block is elided entirely and ffmpeg runs as a re-muxer on the video
|
|
560
|
-
* plane. Width / height / fps / bitrate in the profile are a downstream BUDGET,
|
|
561
|
-
* not a forced rescale.
|
|
562
|
-
*/
|
|
563
|
-
function invocationFromEncodeProfile(input) {
|
|
564
|
-
const v = input.profile.video;
|
|
565
|
-
const shouldCopy = v.codec === "copy" || input.forceReencode !== true && v.codec === input.sourceCodec;
|
|
566
|
-
const scale = v.width !== void 0 && v.height !== void 0 ? {
|
|
567
|
-
mode: "fit",
|
|
568
|
-
width: v.width,
|
|
569
|
-
height: v.height
|
|
570
|
-
} : null;
|
|
571
|
-
const target = v.codec === "h265" ? "h265" : "h264";
|
|
572
|
-
const video = shouldCopy ? {
|
|
573
|
-
kind: "copy",
|
|
574
|
-
...input.bitstreamFilter !== void 0 ? { bitstreamFilter: input.bitstreamFilter } : {}
|
|
575
|
-
} : {
|
|
576
|
-
kind: "encode",
|
|
577
|
-
encoder: pickVideoEncoder(target, input.decodeHwAccel, input.hardwareEncoders === true),
|
|
578
|
-
scale,
|
|
579
|
-
...v.preset !== void 0 ? { preset: v.preset } : {},
|
|
580
|
-
...v.tune !== void 0 ? { tune: v.tune } : {},
|
|
581
|
-
...v.profile !== void 0 ? { profile: v.profile } : {},
|
|
582
|
-
...v.level !== void 0 ? { level: v.level } : {},
|
|
583
|
-
...input.pixelFormat !== void 0 ? { pixelFormat: input.pixelFormat } : {},
|
|
584
|
-
...v.fps !== void 0 ? { fps: v.fps } : {},
|
|
585
|
-
...v.gopFrames !== void 0 ? { gopFrames: v.gopFrames } : {},
|
|
586
|
-
...input.forceKeyFramesSeconds !== void 0 ? { forceKeyFramesSeconds: input.forceKeyFramesSeconds } : {},
|
|
587
|
-
...v.bf !== void 0 ? { bf: v.bf } : {},
|
|
588
|
-
...v.bitrateKbps !== void 0 ? { bitrateKbps: v.bitrateKbps } : {},
|
|
589
|
-
...input.rateControl !== void 0 ? { rateControl: input.rateControl } : {},
|
|
590
|
-
...input.bitstreamFilter !== void 0 ? { bitstreamFilter: input.bitstreamFilter } : {}
|
|
591
|
-
};
|
|
592
|
-
return {
|
|
593
|
-
logLevel: input.logLevel ?? "error",
|
|
594
|
-
decodeHwAccel: input.decodeHwAccel,
|
|
595
|
-
input: {
|
|
596
|
-
url: input.sourceUrl,
|
|
597
|
-
rtspTransport: "tcp",
|
|
598
|
-
fflags: ["+discardcorrupt"],
|
|
599
|
-
...input.profile.inputArgs?.length ? { extraArgs: input.profile.inputArgs } : {}
|
|
600
|
-
},
|
|
601
|
-
video,
|
|
602
|
-
audio: audioPlanFromEncodeProfile(input.profile.audio),
|
|
603
|
-
threadCount: input.threadCount ?? 0,
|
|
604
|
-
outputArgs: input.profile.outputArgs ?? [],
|
|
605
|
-
sink: input.sink,
|
|
606
|
-
...input.audioSidecar !== void 0 ? { audioSidecar: input.audioSidecar } : {}
|
|
607
|
-
};
|
|
608
|
-
}
|
|
609
|
-
//#endregion
|
|
610
233
|
//#region src/ffmpeg/encode-defaults.ts
|
|
611
234
|
/**
|
|
612
235
|
* The shape every live egress starts from: H.264 Baseline 3.1 at 720p25.
|
|
@@ -990,6 +613,19 @@ var DEFAULT_RETENTION = {
|
|
|
990
613
|
* | `notifications` | `notificationRules.setDeviceMuted` | `NotificationCenter.evaluateAndEnqueue` returns before any rule is evaluated |
|
|
991
614
|
* | `privacy-mask` | `privacyMask.setMask({ enabled })` → the CAMERA | the camera blanks the masked regions itself; every stream and recording carries the black boxes |
|
|
992
615
|
* | `device-audio` | `privacyMask.setAudioEnabled` → the CAMERA | the camera stops encoding an audio track at all; every consumer sees silent video |
|
|
616
|
+
* | `broker-audio` | `streamBroker.setDeviceAudioMute` → `DeviceOverride.audioMuted` | `StreamBroker.setAudioMuted` drops the audio plane at the source: no `type:'audio'` packet leaves `fanOutEncoded`, no RTP reaches the restreamer, and the restreamer serves the video-only SDP |
|
|
617
|
+
*
|
|
618
|
+
* ## `device-audio` and `broker-audio` are two functions, not two knobs
|
|
619
|
+
*
|
|
620
|
+
* They look adjacent and they are not the same control ([D83](../../../../docs/decisions/adr-0083.md)):
|
|
621
|
+
* `device-audio` writes the CAMERA, so it is hardware privacy — the microphone
|
|
622
|
+
* genuinely stops, it survives CamStack entirely, and it costs a multi-second
|
|
623
|
+
* encoder restart on every flip. `broker-audio` writes THIS server, so it is
|
|
624
|
+
* instant, vendor-independent and reversible without touching the camera, and
|
|
625
|
+
* a camera that ignores or lacks the ISAPI/Reolink control is still silenced.
|
|
626
|
+
* D62 forbids a second switch that *disagrees* with the first; these two
|
|
627
|
+
* cannot disagree, because neither reads the other's store — the camera holds
|
|
628
|
+
* one, the broker holds the other, and each reports its own fact.
|
|
993
629
|
*
|
|
994
630
|
* ## The two switches whose authority is not on this server
|
|
995
631
|
*
|
|
@@ -1051,6 +687,7 @@ var CameraSwitchIdSchema = z.enum([
|
|
|
1051
687
|
"object-detection",
|
|
1052
688
|
"privacy-mask",
|
|
1053
689
|
"device-audio",
|
|
690
|
+
"broker-audio",
|
|
1054
691
|
"audio-analysis",
|
|
1055
692
|
"recording",
|
|
1056
693
|
"notifications"
|
|
@@ -1066,12 +703,17 @@ var CameraSwitchIdSchema = z.enum([
|
|
|
1066
703
|
* `object-detection` despite feeding it: a mask blanks REGIONS, so its blast
|
|
1067
704
|
* radius is partial, and the "broadest first" rule does not rank a partial
|
|
1068
705
|
* control above a whole-function one.
|
|
706
|
+
*
|
|
707
|
+
* `broker-audio` sits directly BELOW `device-audio` by the same source-first
|
|
708
|
+
* rule: the camera's microphone feeds the broker, so silencing the camera
|
|
709
|
+
* leaves the broker's mute with nothing to suppress; the reverse is not true.
|
|
1069
710
|
*/
|
|
1070
711
|
var CAMERA_SWITCH_ORDER = [
|
|
1071
712
|
"stream-broker",
|
|
1072
713
|
"object-detection",
|
|
1073
714
|
"privacy-mask",
|
|
1074
715
|
"device-audio",
|
|
716
|
+
"broker-audio",
|
|
1075
717
|
"audio-analysis",
|
|
1076
718
|
"recording",
|
|
1077
719
|
"notifications"
|
|
@@ -1097,7 +739,8 @@ var CameraSwitchAuthoritySchema = z.discriminatedUnion("kind", [
|
|
|
1097
739
|
z.object({
|
|
1098
740
|
kind: z.literal("camera-mask"),
|
|
1099
741
|
capName: z.string()
|
|
1100
|
-
})
|
|
742
|
+
}),
|
|
743
|
+
z.object({ kind: z.literal("broker-audio-mute") })
|
|
1101
744
|
]);
|
|
1102
745
|
/**
|
|
1103
746
|
* Why a switch is not offered for this camera. Rendered instead of the
|
|
@@ -1196,6 +839,13 @@ var CAMERA_SWITCH_CATALOG = {
|
|
|
1196
839
|
},
|
|
1197
840
|
countsAsSwitchedOff: true
|
|
1198
841
|
},
|
|
842
|
+
"broker-audio": {
|
|
843
|
+
id: "broker-audio",
|
|
844
|
+
label: "Audio distribution",
|
|
845
|
+
costWhenOff: "Off: this server distributes no sound for this camera — live view is silent and everything recorded while it is off is silent FOREVER, even after you turn it back on. Audio detection and classification also have nothing to analyse. The camera keeps capturing sound, so nothing about the camera changes and turning this back on is instant, with no interruption to the picture.",
|
|
846
|
+
authority: { kind: "broker-audio-mute" },
|
|
847
|
+
countsAsSwitchedOff: true
|
|
848
|
+
},
|
|
1199
849
|
"audio-analysis": {
|
|
1200
850
|
id: "audio-analysis",
|
|
1201
851
|
label: "Audio detection & classification",
|
|
@@ -1314,6 +964,18 @@ function resolveState(descriptor, input) {
|
|
|
1314
964
|
enabled: mask.enabled
|
|
1315
965
|
};
|
|
1316
966
|
}
|
|
967
|
+
case "broker-audio-mute": {
|
|
968
|
+
const broker = input.brokerAudio;
|
|
969
|
+
if (broker === null) return {
|
|
970
|
+
available: false,
|
|
971
|
+
enabled: true,
|
|
972
|
+
unavailableReason: "source-unreachable"
|
|
973
|
+
};
|
|
974
|
+
return {
|
|
975
|
+
available: true,
|
|
976
|
+
enabled: !broker.muted
|
|
977
|
+
};
|
|
978
|
+
}
|
|
1317
979
|
}
|
|
1318
980
|
}
|
|
1319
981
|
/**
|
|
@@ -4755,7 +4417,44 @@ var streamBrokerCapability = {
|
|
|
4755
4417
|
kind: "mutation",
|
|
4756
4418
|
auth: "admin"
|
|
4757
4419
|
}),
|
|
4758
|
-
isRtspEnabled: method(z.object({ brokerId: z.string() }), z.boolean())
|
|
4420
|
+
isRtspEnabled: method(z.object({ brokerId: z.string() }), z.boolean()),
|
|
4421
|
+
/**
|
|
4422
|
+
* ── Per-device audio-plane policy (D83) ───────────────────────────
|
|
4423
|
+
*
|
|
4424
|
+
* The BROKER-side mute: while `muted`, this node distributes none of
|
|
4425
|
+
* the device's audio, on any plane it serves — live (WebRTC / encoded
|
|
4426
|
+
* subscribers) AND recording (the RTSP restreamer the recorder pulls,
|
|
4427
|
+
* which additionally serves the video-only SDP so the recorder's ffmpeg
|
|
4428
|
+
* never declares an audio stream it will not receive).
|
|
4429
|
+
*
|
|
4430
|
+
* Keyed by `deviceId`, not `brokerId`: every one of a camera's streams
|
|
4431
|
+
* carries the same microphone, and a per-stream answer would let main
|
|
4432
|
+
* and sub disagree about whether the camera is silent.
|
|
4433
|
+
*
|
|
4434
|
+
* The state lives in the broker's existing `DeviceOverride` blob — no
|
|
4435
|
+
* new store — and the mute is applied to a fresh broker at creation, so
|
|
4436
|
+
* a restart, a re-dial or a catalog republish never un-mutes a camera.
|
|
4437
|
+
*/
|
|
4438
|
+
getDeviceAudioMute: method(z.object({ deviceId: z.number().int() }), z.object({
|
|
4439
|
+
muted: z.boolean(),
|
|
4440
|
+
/**
|
|
4441
|
+
* How many live non-derived brokers currently hold the mute. Purely
|
|
4442
|
+
* diagnostic: `muted` is the policy and is authoritative on its own
|
|
4443
|
+
* (it applies to brokers that do not exist yet), while this says
|
|
4444
|
+
* whether anything is presently being silenced.
|
|
4445
|
+
*/
|
|
4446
|
+
appliedBrokers: z.number().int().nonnegative()
|
|
4447
|
+
})),
|
|
4448
|
+
setDeviceAudioMute: method(z.object({
|
|
4449
|
+
deviceId: z.number().int(),
|
|
4450
|
+
muted: z.boolean()
|
|
4451
|
+
}), z.object({
|
|
4452
|
+
muted: z.boolean(),
|
|
4453
|
+
appliedBrokers: z.number().int().nonnegative()
|
|
4454
|
+
}), {
|
|
4455
|
+
kind: "mutation",
|
|
4456
|
+
auth: "admin"
|
|
4457
|
+
})
|
|
4759
4458
|
},
|
|
4760
4459
|
events: {
|
|
4761
4460
|
onCamStreamDemand: event(z.object({
|
|
@@ -12602,6 +12301,30 @@ var TrackSourceSchema = z.enum([
|
|
|
12602
12301
|
"audio"
|
|
12603
12302
|
]);
|
|
12604
12303
|
/**
|
|
12304
|
+
* Where a track sits in the RETRAIN lifecycle (D81).
|
|
12305
|
+
*
|
|
12306
|
+
* - `none` — never marked, or un-marked. Evictable.
|
|
12307
|
+
* - `staging` — the operator wants this track as training material and has not
|
|
12308
|
+
* finished with it. **This is the only state retention holds**: the track and
|
|
12309
|
+
* everything it owns (object events, crops, keyframes, CLIP vector) survive
|
|
12310
|
+
* the device's age window.
|
|
12311
|
+
* - `trained` — the retrain page has taken what it needed. The frames it chose
|
|
12312
|
+
* were COPIED into the retrain dataset at selection time, so the dataset no
|
|
12313
|
+
* longer depends on the track's media and the track becomes EVICTABLE again.
|
|
12314
|
+
* Terminal for the plain `markForTrain` toggle: returning it to `staging` is
|
|
12315
|
+
* a deliberate action of the retrain page, not a side effect of a checkbox.
|
|
12316
|
+
*
|
|
12317
|
+
* There is no `null`. The state is stored `TEXT NOT NULL DEFAULT 'none'` because
|
|
12318
|
+
* the store's filter language has only positive equality and `whereIn` — no
|
|
12319
|
+
* negation, no IS NULL — so a NULL would be unselectable by ANY predicate and
|
|
12320
|
+
* would make the entire pre-column history immortal in one deploy.
|
|
12321
|
+
*/
|
|
12322
|
+
var RetrainStatusSchema = z.enum([
|
|
12323
|
+
"none",
|
|
12324
|
+
"staging",
|
|
12325
|
+
"trained"
|
|
12326
|
+
]);
|
|
12327
|
+
/**
|
|
12605
12328
|
* Per-track OPERATOR flags — set by hand from the admin UI or the viewer, never
|
|
12606
12329
|
* by the pipeline. Spread into `TrackSchema` and `KeyEventSchema` from one place
|
|
12607
12330
|
* so the two surfaces cannot drift.
|
|
@@ -12611,18 +12334,31 @@ var TrackSourceSchema = z.enum([
|
|
|
12611
12334
|
* columns existed read as absent, and a consumer that needs a boolean should say
|
|
12612
12335
|
* `flag === true`, not `flag !== false`.
|
|
12613
12336
|
*
|
|
12614
|
-
*
|
|
12615
|
-
*
|
|
12616
|
-
*
|
|
12617
|
-
* `
|
|
12337
|
+
* `markForTrain` is the WIRE FACE of {@link RetrainStatusSchema}, not a column:
|
|
12338
|
+
* it is exactly `retrainStatus === 'staging'`, in both directions. Writing
|
|
12339
|
+
* `true` moves `none → staging`, writing `false` moves `staging → none`, and a
|
|
12340
|
+
* `trained` track reports `false` while refusing both writes. The boolean is
|
|
12341
|
+
* kept because three surfaces drive a toggle off it; anything that needs to tell
|
|
12342
|
+
* "never marked" from "already trained" must read `retrainStatus`.
|
|
12343
|
+
*
|
|
12344
|
+
* `debug` does NOT pin; it is attention, not durability.
|
|
12618
12345
|
*/
|
|
12619
12346
|
var TrackFlagFields = {
|
|
12620
|
-
/** Operator marked this track as training material.
|
|
12347
|
+
/** Operator marked this track as training material — i.e. `retrainStatus` is
|
|
12348
|
+
* `'staging'`. */
|
|
12621
12349
|
markForTrain: z.boolean().optional(),
|
|
12622
12350
|
/** Operator marked this track for diagnostic attention. */
|
|
12623
12351
|
debug: z.boolean().optional()
|
|
12624
12352
|
};
|
|
12625
12353
|
/**
|
|
12354
|
+
* The lifecycle field itself, on the READ surfaces only (`Track`, `KeyEvent`).
|
|
12355
|
+
* Deliberately NOT part of {@link TrackFlagFields}: that group also builds the
|
|
12356
|
+
* write patch, and the status is not something the toggle sets — it is what the
|
|
12357
|
+
* toggle's boolean is derived from. Absent on an in-RAM track never touched;
|
|
12358
|
+
* always present on a persisted row (the column default materialises `'none'`).
|
|
12359
|
+
*/
|
|
12360
|
+
var TrackRetrainFields = { retrainStatus: RetrainStatusSchema.optional() };
|
|
12361
|
+
/**
|
|
12626
12362
|
* The write half: a PARTIAL patch. An omitted key is left untouched, so setting
|
|
12627
12363
|
* one flag can never clear the other — the toggles are independent and are
|
|
12628
12364
|
* driven from three surfaces that do not know about each other.
|
|
@@ -12636,7 +12372,32 @@ var TrackFlagsPatchSchema = z.object(TrackFlagFields);
|
|
|
12636
12372
|
var TrackFlagsSchema = z.object({
|
|
12637
12373
|
trackId: z.string(),
|
|
12638
12374
|
markForTrain: z.boolean(),
|
|
12639
|
-
debug: z.boolean()
|
|
12375
|
+
debug: z.boolean(),
|
|
12376
|
+
/** The lifecycle state the boolean was derived from. Required here (unlike on
|
|
12377
|
+
* a track row) because this shape is only ever produced by the write body,
|
|
12378
|
+
* which always knows it — and a surface that has just written needs to render
|
|
12379
|
+
* `trained` without a re-fetch. */
|
|
12380
|
+
retrainStatus: RetrainStatusSchema
|
|
12381
|
+
});
|
|
12382
|
+
/** Per-camera slice of a training-export estimate. */
|
|
12383
|
+
var TrainingExportDeviceTotalsSchema = z.object({
|
|
12384
|
+
deviceId: z.number(),
|
|
12385
|
+
tracks: z.number().int(),
|
|
12386
|
+
files: z.number().int(),
|
|
12387
|
+
bytes: z.number().int()
|
|
12388
|
+
});
|
|
12389
|
+
/**
|
|
12390
|
+
* What a training export WOULD contain. Computed from media index rows only —
|
|
12391
|
+
* no blob is read to produce this.
|
|
12392
|
+
*/
|
|
12393
|
+
var TrainingExportSummarySchema = z.object({
|
|
12394
|
+
generatedAt: z.number(),
|
|
12395
|
+
trackCount: z.number().int(),
|
|
12396
|
+
fileCount: z.number().int(),
|
|
12397
|
+
byteCount: z.number().int(),
|
|
12398
|
+
/** More marked tracks exist than a single pass carries. */
|
|
12399
|
+
truncated: z.boolean(),
|
|
12400
|
+
devices: z.array(TrainingExportDeviceTotalsSchema).readonly()
|
|
12640
12401
|
});
|
|
12641
12402
|
var TrackSchema = z.object({
|
|
12642
12403
|
trackId: z.string(),
|
|
@@ -12681,7 +12442,8 @@ var TrackSchema = z.object({
|
|
|
12681
12442
|
* Populated from the persisted envelope columns on historical reads;
|
|
12682
12443
|
* absent on legacy rows, dims-less tracks and active (in-RAM) tracks. */
|
|
12683
12444
|
envelope: TrackEnvelopeSchema.optional(),
|
|
12684
|
-
...TrackFlagFields
|
|
12445
|
+
...TrackFlagFields,
|
|
12446
|
+
...TrackRetrainFields
|
|
12685
12447
|
});
|
|
12686
12448
|
var BaseEventFields = {
|
|
12687
12449
|
id: z.string(),
|
|
@@ -12903,7 +12665,8 @@ var KeyEventSchema = z.object({
|
|
|
12903
12665
|
bestEventId: z.string(),
|
|
12904
12666
|
/** Track lifetime in ms (lastSeen - firstSeen). */
|
|
12905
12667
|
windowMs: z.number().optional(),
|
|
12906
|
-
...TrackFlagFields
|
|
12668
|
+
...TrackFlagFields,
|
|
12669
|
+
...TrackRetrainFields
|
|
12907
12670
|
});
|
|
12908
12671
|
var TrackedDetectionSchema = z.object({
|
|
12909
12672
|
trackId: z.string(),
|
|
@@ -13265,11 +13028,29 @@ var pipelineAnalyticsCapability = {
|
|
|
13265
13028
|
*
|
|
13266
13029
|
* `auth: 'protected'` (the default), NOT `admin`: the viewer is an
|
|
13267
13030
|
* authenticated non-admin surface and two of the three call sites are
|
|
13268
|
-
* there.
|
|
13269
|
-
*
|
|
13031
|
+
* there. The note that used to sit here said to revisit this the day a flag
|
|
13032
|
+
* gained an effect that costs storage, and D81 is that day — `markForTrain`
|
|
13033
|
+
* now pins. It STAYS protected, and the reason is that the alternative
|
|
13034
|
+
* makes the feature pointless: marking a track is something you do while
|
|
13035
|
+
* looking at it, on the surface you were already looking at it on, and that
|
|
13036
|
+
* surface is the viewer. What the storage cost gets instead is a BOUND — a
|
|
13037
|
+
* per-device pin budget enforced in the body, refusing a new pin past the
|
|
13038
|
+
* limit while always allowing un-marking. `deleteTracks` next door is still
|
|
13039
|
+
* admin, because destroying evidence and preserving it are not symmetric.
|
|
13040
|
+
*
|
|
13041
|
+
* `markForTrain` writes the retrain LIFECYCLE, not a boolean column: `true`
|
|
13042
|
+
* is `none → staging`, `false` is `staging → none`. A track already
|
|
13043
|
+
* `trained` refuses BOTH — its frames are copies inside the retrain dataset
|
|
13044
|
+
* and re-staging it from a generic toggle is how the same material gets
|
|
13045
|
+
* annotated twice under two ground truths. Returning a trained track to
|
|
13046
|
+
* staging is a deliberate action of the retrain page, which is also the only
|
|
13047
|
+
* thing that produces `trained` in the first place.
|
|
13270
13048
|
*
|
|
13271
|
-
* Returns the RESOLVED state of both flags (absent → `false`)
|
|
13272
|
-
*
|
|
13049
|
+
* Returns the RESOLVED state of both flags (absent → `false`) plus the
|
|
13050
|
+
* `retrainStatus` they were derived from, so a caller can drive its toggle
|
|
13051
|
+
* — and render a `trained` badge — without a re-fetch. Rejects an unknown
|
|
13052
|
+
* track, a new staging mark on a device already holding its full budget, and
|
|
13053
|
+
* any `markForTrain` write against a trained track.
|
|
13273
13054
|
*/
|
|
13274
13055
|
setTrackFlags: method(z.object({
|
|
13275
13056
|
/** Log/audit scope only — the trackId is globally unique on its own. */
|
|
@@ -13333,6 +13114,42 @@ var pipelineAnalyticsCapability = {
|
|
|
13333
13114
|
kind: "query",
|
|
13334
13115
|
auth: "admin"
|
|
13335
13116
|
}),
|
|
13117
|
+
/**
|
|
13118
|
+
* The CHEAP QUESTION, asked before any media moves: how big is the dataset
|
|
13119
|
+
* the marked (`markForTrain`) tracks would produce?
|
|
13120
|
+
*
|
|
13121
|
+
* Answered from media INDEX rows only — key, kind, size, timestamp — so it
|
|
13122
|
+
* costs ~2 KB of reads per track and no blob reads at all. The measured harm
|
|
13123
|
+
* behind D56 was a bulk pass that read and base64'd every blob a track owned
|
|
13124
|
+
* before deciding anything, taking hub-main to 82 s busy out of 120; an
|
|
13125
|
+
* export is that same I/O shape, so it inherits the same discipline: know
|
|
13126
|
+
* the size, then decide.
|
|
13127
|
+
*
|
|
13128
|
+
* `truncated` reports that more marked tracks exist than one pass carries.
|
|
13129
|
+
* Empty `deviceIds` ⇒ every device that has marked tracks.
|
|
13130
|
+
*/
|
|
13131
|
+
getTrainingExportSummary: method(z.object({ deviceIds: z.array(z.number()).optional() }), TrainingExportSummarySchema, {
|
|
13132
|
+
kind: "query",
|
|
13133
|
+
auth: "admin"
|
|
13134
|
+
}),
|
|
13135
|
+
/**
|
|
13136
|
+
* Where to download the dataset archive.
|
|
13137
|
+
*
|
|
13138
|
+
* The BYTES do not come back through this cap — they come from the returned
|
|
13139
|
+
* data-plane URL, which streams a tar built entry by entry. A multi-gigabyte
|
|
13140
|
+
* archive base64'd through a unary RPC envelope would be held whole in
|
|
13141
|
+
* memory twice on a hub this repo has already OOM'd once (D9/D18 are the
|
|
13142
|
+
* same lesson about frames). `getDownloadUrl` on `recordingExport` is the
|
|
13143
|
+
* precedent, and this follows it deliberately.
|
|
13144
|
+
*
|
|
13145
|
+
* The archive contains a `manifest.json` FIRST, then the stored media
|
|
13146
|
+
* VERBATIM under `tracks/<deviceId>/<trackId>/…`. No crop is derived and no
|
|
13147
|
+
* model is run: a training set's pixels must be the pixels the pipeline saw.
|
|
13148
|
+
*/
|
|
13149
|
+
getTrainingExportUrl: method(z.object({ deviceIds: z.array(z.number()).optional() }), z.object({ url: z.string() }), {
|
|
13150
|
+
kind: "query",
|
|
13151
|
+
auth: "admin"
|
|
13152
|
+
}),
|
|
13336
13153
|
getEventMedia: method(z.object({
|
|
13337
13154
|
eventId: z.string(),
|
|
13338
13155
|
kind: MediaFileKindEnum.optional()
|
|
@@ -22097,6 +21914,216 @@ setOverlay: method(z.object({
|
|
|
22097
21914
|
}] }
|
|
22098
21915
|
};
|
|
22099
21916
|
//#endregion
|
|
21917
|
+
//#region src/capabilities/osd-manager.cap.ts
|
|
21918
|
+
/**
|
|
21919
|
+
* `osd-manager` — the ORCHESTRATOR over the device-scope `osd` cap.
|
|
21920
|
+
*
|
|
21921
|
+
* The `osd` cap is the firmware contract: it probes a camera's overlay
|
|
21922
|
+
* SLOTS and writes literal text into one. It has no idea WHERE that text
|
|
21923
|
+
* comes from, and it must not — a driver that grew a "show the temperature
|
|
21924
|
+
* here" feature would grow it once per vendor.
|
|
21925
|
+
*
|
|
21926
|
+
* This cap owns the other half: a per-(camera, slot) BINDING that says
|
|
21927
|
+
* which value feeds the slot, how it is formatted, and under which
|
|
21928
|
+
* conditions it is shown at all. One addon renders every binding on every
|
|
21929
|
+
* camera, so a new source costs zero driver code.
|
|
21930
|
+
*
|
|
21931
|
+
* Three deliberate choices, each with a rejected alternative:
|
|
21932
|
+
*
|
|
21933
|
+
* 1. A source is `(capName, valuePath)` over the kernel's device
|
|
21934
|
+
* runtime-state mirror — NOT a closed enum of source kinds. Every
|
|
21935
|
+
* cap-keyed slice a device publishes is bindable the day the cap
|
|
21936
|
+
* ships. The rejected alternative (one enum member per source, with
|
|
21937
|
+
* a resolver branch each) is what makes "add the humidity too" a
|
|
21938
|
+
* code change.
|
|
21939
|
+
* 2. The display gate reuses `NcConditionsSchema` verbatim — the
|
|
21940
|
+
* notification centre's condition vocabulary — rather than a parallel
|
|
21941
|
+
* model. An operator who has learned one condition editor has learned
|
|
21942
|
+
* both.
|
|
21943
|
+
* 3. Because the renderer's facts are device STATE and not a detection
|
|
21944
|
+
* record, only a SUBSET of that vocabulary can be answered here.
|
|
21945
|
+
* `setSlotBinding` REJECTS the rest at write time (see
|
|
21946
|
+
* `getConditionSupport`). It does not accept-then-fail-closed: a
|
|
21947
|
+
* condition that can never be true renders a permanently blank
|
|
21948
|
+
* overlay, and a blank overlay looks exactly like a broken camera.
|
|
21949
|
+
*/
|
|
21950
|
+
/** Where a slot's value comes from. */
|
|
21951
|
+
var OsdSourceSchema = z.discriminatedUnion("kind", [
|
|
21952
|
+
z.object({
|
|
21953
|
+
kind: z.literal("static"),
|
|
21954
|
+
text: z.string().max(64)
|
|
21955
|
+
}),
|
|
21956
|
+
z.object({
|
|
21957
|
+
kind: z.literal("clock"),
|
|
21958
|
+
/** Token pattern: `YYYY MM DD HH mm ss`. Everything else is literal. */
|
|
21959
|
+
pattern: z.string().min(1).max(32).default("HH:mm"),
|
|
21960
|
+
/** IANA zone. Omitted = the server's zone. */
|
|
21961
|
+
timezone: z.string().min(1).max(64).optional()
|
|
21962
|
+
}),
|
|
21963
|
+
z.object({
|
|
21964
|
+
kind: z.literal("device-state"),
|
|
21965
|
+
deviceId: z.number().int().optional(),
|
|
21966
|
+
capName: z.string().min(1).max(64),
|
|
21967
|
+
/** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
|
|
21968
|
+
valuePath: z.string().min(1).max(64)
|
|
21969
|
+
})
|
|
21970
|
+
]);
|
|
21971
|
+
var OsdSlotBindingSchema = z.object({
|
|
21972
|
+
/** Off = the manager stops driving this slot. It does NOT clear it. */
|
|
21973
|
+
enabled: z.boolean().default(true),
|
|
21974
|
+
source: OsdSourceSchema,
|
|
21975
|
+
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
21976
|
+
template: z.string().max(96).default("${value}"),
|
|
21977
|
+
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
21978
|
+
maxCharacters: z.number().int().min(4).max(64).optional(),
|
|
21979
|
+
/**
|
|
21980
|
+
* Decimal places for a numeric value. `0` yields an integer — the
|
|
21981
|
+
* documented workaround for firmwares that reject `.` in overlay text.
|
|
21982
|
+
*/
|
|
21983
|
+
maxDecimals: z.number().int().min(0).max(4).default(1),
|
|
21984
|
+
/** Appended via `${unit}`. The state mirror does not carry units. */
|
|
21985
|
+
unitLabel: z.string().max(8).optional(),
|
|
21986
|
+
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
21987
|
+
valueMap: z.record(z.string(), z.string()).optional(),
|
|
21988
|
+
/** Time windows in which the slot is shown. Absent = always. */
|
|
21989
|
+
schedule: NcScheduleSchema.optional(),
|
|
21990
|
+
/**
|
|
21991
|
+
* Display gate, in the notification centre's condition vocabulary.
|
|
21992
|
+
* Only the keys reported by `getConditionSupport` are accepted.
|
|
21993
|
+
*/
|
|
21994
|
+
conditions: NcConditionsSchema.optional(),
|
|
21995
|
+
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
21996
|
+
fallbackText: z.string().max(64).default("")
|
|
21997
|
+
});
|
|
21998
|
+
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
21999
|
+
var OsdSlotViewSchema = z.object({
|
|
22000
|
+
slotId: z.string(),
|
|
22001
|
+
kind: OsdOverlayKindEnum,
|
|
22002
|
+
/** Firmware refuses text edits (a timestamp, the channel name). */
|
|
22003
|
+
readOnly: z.boolean(),
|
|
22004
|
+
cameraEnabled: z.boolean(),
|
|
22005
|
+
cameraText: z.string().optional(),
|
|
22006
|
+
binding: OsdSlotBindingSchema.nullable()
|
|
22007
|
+
});
|
|
22008
|
+
/**
|
|
22009
|
+
* What happened to one slot on one render pass. `unchanged` exists so the
|
|
22010
|
+
* operator can tell "we are driving this and the value is steady" from
|
|
22011
|
+
* "we never got there" — and so the loop can prove it is not rewriting
|
|
22012
|
+
* identical text to the camera every tick.
|
|
22013
|
+
*/
|
|
22014
|
+
var OsdRenderOutcomeEnum = z.enum([
|
|
22015
|
+
"written",
|
|
22016
|
+
"unchanged",
|
|
22017
|
+
"gated",
|
|
22018
|
+
"unreadable",
|
|
22019
|
+
"disabled",
|
|
22020
|
+
"unbound",
|
|
22021
|
+
"failed"
|
|
22022
|
+
]);
|
|
22023
|
+
var OsdRenderResultSchema = z.object({
|
|
22024
|
+
slotId: z.string(),
|
|
22025
|
+
outcome: OsdRenderOutcomeEnum,
|
|
22026
|
+
/** The text the slot should carry. Empty = the slot is switched off. */
|
|
22027
|
+
text: z.string(),
|
|
22028
|
+
/** Why, whenever the outcome is not a plain write. Never silent. */
|
|
22029
|
+
reason: z.string().optional()
|
|
22030
|
+
});
|
|
22031
|
+
var OsdSourceValueTypeEnum = z.enum([
|
|
22032
|
+
"number",
|
|
22033
|
+
"boolean",
|
|
22034
|
+
"string",
|
|
22035
|
+
"enum"
|
|
22036
|
+
]);
|
|
22037
|
+
/**
|
|
22038
|
+
* One bindable value, derived from a cap's `runtimeState` schema — never
|
|
22039
|
+
* hand-listed. The editor renders from this, so a cap that ships a new
|
|
22040
|
+
* state field becomes bindable with no UI change.
|
|
22041
|
+
*/
|
|
22042
|
+
var OsdSourceOptionSchema = z.object({
|
|
22043
|
+
deviceId: z.number().int(),
|
|
22044
|
+
deviceName: z.string(),
|
|
22045
|
+
capName: z.string(),
|
|
22046
|
+
valuePath: z.string(),
|
|
22047
|
+
label: z.string(),
|
|
22048
|
+
valueType: OsdSourceValueTypeEnum,
|
|
22049
|
+
/** Present for `enum`; the editor offers these as `valueMap` keys. */
|
|
22050
|
+
enumValues: z.array(z.string()).readonly().optional()
|
|
22051
|
+
});
|
|
22052
|
+
var osdManagerCapability = {
|
|
22053
|
+
name: "osd-manager",
|
|
22054
|
+
scope: "system",
|
|
22055
|
+
mode: "singleton",
|
|
22056
|
+
methods: {
|
|
22057
|
+
/**
|
|
22058
|
+
* The camera's slots, each with its binding. `supported: false` when
|
|
22059
|
+
* the camera publishes no `osd` cap — the page then says so instead
|
|
22060
|
+
* of rendering an empty list that reads as "no overlays configured".
|
|
22061
|
+
*/
|
|
22062
|
+
getDeviceOsd: method(z.object({ deviceId: z.number().int() }), z.object({
|
|
22063
|
+
supported: z.boolean(),
|
|
22064
|
+
slots: z.array(OsdSlotViewSchema)
|
|
22065
|
+
}), { auth: "admin" }),
|
|
22066
|
+
/**
|
|
22067
|
+
* Every value bindable on this camera: its own state leaves first,
|
|
22068
|
+
* then every other device's. Derived from the cap definitions, so it
|
|
22069
|
+
* cannot drift from what the resolver can actually read.
|
|
22070
|
+
*/
|
|
22071
|
+
getSourceCatalog: method(z.object({ deviceId: z.number().int() }), z.object({ sources: z.array(OsdSourceOptionSchema) }), { auth: "admin" }),
|
|
22072
|
+
/**
|
|
22073
|
+
* The condition ids this gate can answer, alongside the FULL notification
|
|
22074
|
+
* condition catalog. Both, in one call, on purpose: an editor that showed
|
|
22075
|
+
* the catalog without the supported set would offer conditions that
|
|
22076
|
+
* `setSlotBinding` then rejects.
|
|
22077
|
+
*/
|
|
22078
|
+
getConditionSupport: method(z.object({}), z.object({
|
|
22079
|
+
supported: z.array(z.string()),
|
|
22080
|
+
catalog: z.array(NcConditionDescriptorSchema)
|
|
22081
|
+
}), { auth: "admin" }),
|
|
22082
|
+
/**
|
|
22083
|
+
* Persist a binding and render it immediately, returning the slot as
|
|
22084
|
+
* it now stands. Throws when the binding names an unsupported
|
|
22085
|
+
* condition, an unknown cap, or a value path that cap does not have.
|
|
22086
|
+
*/
|
|
22087
|
+
setSlotBinding: method(z.object({
|
|
22088
|
+
deviceId: z.number().int(),
|
|
22089
|
+
slotId: z.string().min(1),
|
|
22090
|
+
binding: OsdSlotBindingSchema
|
|
22091
|
+
}), z.object({
|
|
22092
|
+
slot: OsdSlotViewSchema,
|
|
22093
|
+
render: OsdRenderResultSchema
|
|
22094
|
+
}), {
|
|
22095
|
+
kind: "mutation",
|
|
22096
|
+
auth: "admin"
|
|
22097
|
+
}),
|
|
22098
|
+
/** Forget the binding. The slot keeps whatever text it last carried. */
|
|
22099
|
+
clearSlotBinding: method(z.object({
|
|
22100
|
+
deviceId: z.number().int(),
|
|
22101
|
+
slotId: z.string().min(1)
|
|
22102
|
+
}), z.object({ success: z.literal(true) }), {
|
|
22103
|
+
kind: "mutation",
|
|
22104
|
+
auth: "admin"
|
|
22105
|
+
}),
|
|
22106
|
+
/**
|
|
22107
|
+
* Render without writing. `binding` overrides the stored one so an
|
|
22108
|
+
* editor can preview an unsaved change. Mutation kind only to carry
|
|
22109
|
+
* the binding object safely; no side effects.
|
|
22110
|
+
*/
|
|
22111
|
+
previewSlot: method(z.object({
|
|
22112
|
+
deviceId: z.number().int(),
|
|
22113
|
+
slotId: z.string().min(1),
|
|
22114
|
+
binding: OsdSlotBindingSchema.optional()
|
|
22115
|
+
}), OsdRenderResultSchema, {
|
|
22116
|
+
kind: "mutation",
|
|
22117
|
+
auth: "admin"
|
|
22118
|
+
}),
|
|
22119
|
+
/** Force a render pass over one camera now, instead of at the next tick. */
|
|
22120
|
+
renderDevice: method(z.object({ deviceId: z.number().int() }), z.object({ results: z.array(OsdRenderResultSchema) }), {
|
|
22121
|
+
kind: "mutation",
|
|
22122
|
+
auth: "admin"
|
|
22123
|
+
})
|
|
22124
|
+
}
|
|
22125
|
+
};
|
|
22126
|
+
//#endregion
|
|
22100
22127
|
//#region src/capabilities/pet-feeder.cap.ts
|
|
22101
22128
|
/**
|
|
22102
22129
|
* PetKit pet-feeder cap. Models the control + telemetry surface of a
|
|
@@ -28184,6 +28211,7 @@ var CAPABILITY_NAMES = {
|
|
|
28184
28211
|
numericSensor: "numeric-sensor",
|
|
28185
28212
|
oauthIntegration: "oauth-integration",
|
|
28186
28213
|
osd: "osd",
|
|
28214
|
+
osdManager: "osd-manager",
|
|
28187
28215
|
petFeeder: "pet-feeder",
|
|
28188
28216
|
pipelineAnalytics: "pipeline-analytics",
|
|
28189
28217
|
pipelineExecutor: "pipeline-executor",
|
|
@@ -28615,6 +28643,10 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
28615
28643
|
key: "osd",
|
|
28616
28644
|
name: "osd"
|
|
28617
28645
|
},
|
|
28646
|
+
{
|
|
28647
|
+
key: "osdManager",
|
|
28648
|
+
name: "osd-manager"
|
|
28649
|
+
},
|
|
28618
28650
|
{
|
|
28619
28651
|
key: "petFeeder",
|
|
28620
28652
|
name: "pet-feeder"
|
|
@@ -28928,6 +28960,7 @@ var ALL_CAPABILITY_DEFINITIONS = [
|
|
|
28928
28960
|
numericSensorCapability,
|
|
28929
28961
|
oauthIntegrationCapability,
|
|
28930
28962
|
osdCapability,
|
|
28963
|
+
osdManagerCapability,
|
|
28931
28964
|
petFeederCapability,
|
|
28932
28965
|
pipelineAnalyticsCapability,
|
|
28933
28966
|
pipelineExecutorCapability,
|
|
@@ -31846,6 +31879,48 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
31846
31879
|
addonId: null,
|
|
31847
31880
|
access: "create"
|
|
31848
31881
|
},
|
|
31882
|
+
"osdManager.clearSlotBinding": {
|
|
31883
|
+
capName: "osd-manager",
|
|
31884
|
+
capScope: "system",
|
|
31885
|
+
addonId: null,
|
|
31886
|
+
access: "delete"
|
|
31887
|
+
},
|
|
31888
|
+
"osdManager.getConditionSupport": {
|
|
31889
|
+
capName: "osd-manager",
|
|
31890
|
+
capScope: "system",
|
|
31891
|
+
addonId: null,
|
|
31892
|
+
access: "view"
|
|
31893
|
+
},
|
|
31894
|
+
"osdManager.getDeviceOsd": {
|
|
31895
|
+
capName: "osd-manager",
|
|
31896
|
+
capScope: "system",
|
|
31897
|
+
addonId: null,
|
|
31898
|
+
access: "view"
|
|
31899
|
+
},
|
|
31900
|
+
"osdManager.getSourceCatalog": {
|
|
31901
|
+
capName: "osd-manager",
|
|
31902
|
+
capScope: "system",
|
|
31903
|
+
addonId: null,
|
|
31904
|
+
access: "view"
|
|
31905
|
+
},
|
|
31906
|
+
"osdManager.previewSlot": {
|
|
31907
|
+
capName: "osd-manager",
|
|
31908
|
+
capScope: "system",
|
|
31909
|
+
addonId: null,
|
|
31910
|
+
access: "create"
|
|
31911
|
+
},
|
|
31912
|
+
"osdManager.renderDevice": {
|
|
31913
|
+
capName: "osd-manager",
|
|
31914
|
+
capScope: "system",
|
|
31915
|
+
addonId: null,
|
|
31916
|
+
access: "create"
|
|
31917
|
+
},
|
|
31918
|
+
"osdManager.setSlotBinding": {
|
|
31919
|
+
capName: "osd-manager",
|
|
31920
|
+
capScope: "system",
|
|
31921
|
+
addonId: null,
|
|
31922
|
+
access: "create"
|
|
31923
|
+
},
|
|
31849
31924
|
"petFeeder.callPet": {
|
|
31850
31925
|
capName: "pet-feeder",
|
|
31851
31926
|
capScope: "device",
|
|
@@ -32008,6 +32083,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
32008
32083
|
addonId: null,
|
|
32009
32084
|
access: "view"
|
|
32010
32085
|
},
|
|
32086
|
+
"pipelineAnalytics.getTrainingExportSummary": {
|
|
32087
|
+
capName: "pipeline-analytics",
|
|
32088
|
+
capScope: "device",
|
|
32089
|
+
addonId: null,
|
|
32090
|
+
access: "view"
|
|
32091
|
+
},
|
|
32092
|
+
"pipelineAnalytics.getTrainingExportUrl": {
|
|
32093
|
+
capName: "pipeline-analytics",
|
|
32094
|
+
capScope: "device",
|
|
32095
|
+
addonId: null,
|
|
32096
|
+
access: "view"
|
|
32097
|
+
},
|
|
32011
32098
|
"pipelineAnalytics.listEventKinds": {
|
|
32012
32099
|
capName: "pipeline-analytics",
|
|
32013
32100
|
capScope: "device",
|
|
@@ -33484,6 +33571,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
33484
33571
|
addonId: null,
|
|
33485
33572
|
access: "view"
|
|
33486
33573
|
},
|
|
33574
|
+
"streamBroker.getDeviceAudioMute": {
|
|
33575
|
+
capName: "stream-broker",
|
|
33576
|
+
capScope: "system",
|
|
33577
|
+
addonId: null,
|
|
33578
|
+
access: "view"
|
|
33579
|
+
},
|
|
33487
33580
|
"streamBroker.getPreBufferInfo": {
|
|
33488
33581
|
capName: "stream-broker",
|
|
33489
33582
|
capScope: "system",
|
|
@@ -33604,6 +33697,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
33604
33697
|
addonId: null,
|
|
33605
33698
|
access: "create"
|
|
33606
33699
|
},
|
|
33700
|
+
"streamBroker.setDeviceAudioMute": {
|
|
33701
|
+
capName: "stream-broker",
|
|
33702
|
+
capScope: "system",
|
|
33703
|
+
addonId: null,
|
|
33704
|
+
access: "create"
|
|
33705
|
+
},
|
|
33607
33706
|
"streamBroker.setPreBufferDuration": {
|
|
33608
33707
|
capName: "stream-broker",
|
|
33609
33708
|
capScope: "system",
|
|
@@ -34319,6 +34418,7 @@ var KNOWN_CAP_NAMES = [
|
|
|
34319
34418
|
"notifier",
|
|
34320
34419
|
"oauth-integration",
|
|
34321
34420
|
"osd",
|
|
34421
|
+
"osd-manager",
|
|
34322
34422
|
"pet-feeder",
|
|
34323
34423
|
"pipeline-analytics",
|
|
34324
34424
|
"pipeline-executor",
|
|
@@ -34466,6 +34566,7 @@ var SYSTEM_CAP_NAMES = [
|
|
|
34466
34566
|
"notification-output",
|
|
34467
34567
|
"notification-rules",
|
|
34468
34568
|
"oauth-integration",
|
|
34569
|
+
"osd-manager",
|
|
34469
34570
|
"pipeline-executor",
|
|
34470
34571
|
"pipeline-orchestrator",
|
|
34471
34572
|
"pipeline-runner",
|
|
@@ -34924,6 +35025,7 @@ function createSystemProxy(api) {
|
|
|
34924
35025
|
deleteTarget: (input) => dispatch("notificationOutput", "deleteTarget", "mutation", input),
|
|
34925
35026
|
setTargetEnabled: (input) => dispatch("notificationOutput", "setTargetEnabled", "mutation", input)
|
|
34926
35027
|
},
|
|
35028
|
+
osdManager: { getConditionSupport: (input) => dispatch("osdManager", "getConditionSupport", "query", input) },
|
|
34927
35029
|
pipelineExecutor: {
|
|
34928
35030
|
getAvailableEngines: (input) => dispatch("pipelineExecutor", "getAvailableEngines", "query", input),
|
|
34929
35031
|
getSelectedEngine: (input) => dispatch("pipelineExecutor", "getSelectedEngine", "query", input),
|
|
@@ -35465,6 +35567,68 @@ function prepareNotification(caps, n) {
|
|
|
35465
35567
|
};
|
|
35466
35568
|
}
|
|
35467
35569
|
//#endregion
|
|
35570
|
+
//#region src/notification/schedule.ts
|
|
35571
|
+
var WEEKDAY_TO_DAY = {
|
|
35572
|
+
Sun: 0,
|
|
35573
|
+
Mon: 1,
|
|
35574
|
+
Tue: 2,
|
|
35575
|
+
Wed: 3,
|
|
35576
|
+
Thu: 4,
|
|
35577
|
+
Fri: 5,
|
|
35578
|
+
Sat: 6
|
|
35579
|
+
};
|
|
35580
|
+
/** Resolve (weekday, minute-of-day) of `atMs` in the schedule's timezone.
|
|
35581
|
+
* An invalid/unknown IANA name falls back to the host timezone. */
|
|
35582
|
+
function localDayMinute(atMs, timezone) {
|
|
35583
|
+
const d = new Date(atMs);
|
|
35584
|
+
if (timezone !== void 0) try {
|
|
35585
|
+
const parts = new Intl.DateTimeFormat("en-US", {
|
|
35586
|
+
timeZone: timezone,
|
|
35587
|
+
weekday: "short",
|
|
35588
|
+
hour: "numeric",
|
|
35589
|
+
minute: "numeric",
|
|
35590
|
+
hourCycle: "h23"
|
|
35591
|
+
}).formatToParts(d);
|
|
35592
|
+
let weekday;
|
|
35593
|
+
let hour;
|
|
35594
|
+
let minute;
|
|
35595
|
+
for (const p of parts) if (p.type === "weekday") weekday = p.value;
|
|
35596
|
+
else if (p.type === "hour") hour = Number(p.value);
|
|
35597
|
+
else if (p.type === "minute") minute = Number(p.value);
|
|
35598
|
+
const day = weekday !== void 0 ? WEEKDAY_TO_DAY[weekday] : void 0;
|
|
35599
|
+
if (day !== void 0 && hour !== void 0 && minute !== void 0) return {
|
|
35600
|
+
day,
|
|
35601
|
+
minute: hour * 60 + minute
|
|
35602
|
+
};
|
|
35603
|
+
} catch {}
|
|
35604
|
+
return {
|
|
35605
|
+
day: d.getDay(),
|
|
35606
|
+
minute: d.getHours() * 60 + d.getMinutes()
|
|
35607
|
+
};
|
|
35608
|
+
}
|
|
35609
|
+
/**
|
|
35610
|
+
* Is the schedule active at `atMs`? No schedule = always active. Windows
|
|
35611
|
+
* are OR'd; a window with `startMinute > endMinute` crosses midnight (it
|
|
35612
|
+
* starts on a listed day and spills into the next). `invert` flips the
|
|
35613
|
+
* result (active OUTSIDE the windows).
|
|
35614
|
+
*/
|
|
35615
|
+
function isScheduleActive(schedule, atMs) {
|
|
35616
|
+
if (schedule === void 0) return true;
|
|
35617
|
+
const { day, minute } = localDayMinute(atMs, schedule.timezone);
|
|
35618
|
+
const prevDay = (day + 6) % 7;
|
|
35619
|
+
let inside = false;
|
|
35620
|
+
for (const w of schedule.windows) if (w.startMinute <= w.endMinute) {
|
|
35621
|
+
if (w.days.includes(day) && minute >= w.startMinute && minute < w.endMinute) {
|
|
35622
|
+
inside = true;
|
|
35623
|
+
break;
|
|
35624
|
+
}
|
|
35625
|
+
} else if (w.days.includes(day) && minute >= w.startMinute || w.days.includes(prevDay) && minute < w.endMinute) {
|
|
35626
|
+
inside = true;
|
|
35627
|
+
break;
|
|
35628
|
+
}
|
|
35629
|
+
return schedule.invert === true ? !inside : inside;
|
|
35630
|
+
}
|
|
35631
|
+
//#endregion
|
|
35468
35632
|
//#region src/notification/timelapse-rule.ts
|
|
35469
35633
|
/**
|
|
35470
35634
|
* TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
|
|
@@ -37318,4 +37482,4 @@ function enumerateInferenceDevices(hw) {
|
|
|
37318
37482
|
return out;
|
|
37319
37483
|
}
|
|
37320
37484
|
//#endregion
|
|
37321
|
-
export { ACCESSORY_LABEL, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AUDIO_PRESETS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationControlStatusSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, COCO_80_LABELS, COCO_TO_MACRO, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileResultSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_PIPELINE_CAP_NAME, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, EngineInfoSchema as DataStoreEngineInfoSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceLinkModeSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionEvalError, ExpressionParseError, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelDefinitionSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TTL_FIELD, NATIVE_LEASE_TTL_KEY, NC_BASE_CONDITION_KEYS, NC_CONDITION_CATALOG, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_SNOOZE_MAX_MINUTES, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, WEBRTC_EGRESS_PROFILE, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, applyTransform, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlocksCapability, cosineSimilarity, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, decodeVectorBase64, decoderCapability, defaultDeviceFor, defineCustomActions, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateLinkExpression, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isBaseConditionKey, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isDeviceScopedCap, isEvent, isNode, isObjectInput, isSameAddonId, isSoftwareDecode, isVoidInput, jobKindSchema, kebabToCamel, knownValues, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logBannerArgs, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, petFeederCapability, pickAccessoryControl, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
|
|
37485
|
+
export { ACCESSORY_LABEL, ALEXA_EGRESS_PROFILE, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_ANALYSIS_CAP_NAME, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AUDIO_PRESETS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationControlStatusSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BASE_LIVE_EGRESS_PROFILE, BATTERY_DEVICE_PROFILE, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAMERA_SWITCH_CATALOG, CAMERA_SWITCH_ORDER, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, COCO_80_LABELS, COCO_TO_MACRO, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusSchema, CameraStreamSchema, CameraSwitchAuthoritySchema, CameraSwitchGroupSchema, CameraSwitchIdSchema, CameraSwitchSchema, CameraSwitchUnavailableReasonSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoreBlockCompileResultSchema, CoreBlockInputSchema, CoreBlockPlacementSchema, CoreBlockSchema, CoreBlockStatusSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_DETAIL_CROP_CONVENTION, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_NATIVE_LEASE_SETTINGS, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, DETECTION_PIPELINE_CAP_NAME, DEVICE_BACKEND_TO_FORMAT, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SCOPED_CAPS, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATE_READERS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, EngineInfoSchema as DataStoreEngineInfoSchema, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetailCropConventionSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceLinkModeSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, EgressEncodeSchema, EgressRateControlSchema, EgressTranscodeRequestSchema, EgressTranscodeSchema, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventKindsForDeviceSchema, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionEvalError, ExpressionParseError, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, Fmp4BoxSplitter, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HAP_AUDIO_BASE, HAP_AUDIO_BITRATE_KBPS, HAP_AUDIO_VBV_KBITS, HAP_KEYFRAME_INTERVAL_SEC, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageContractSchema, ImageContractStateSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LOG_LEVEL_RANK, LabelDefinitionSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileInfoSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, MutationFilterSchema, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TTL_FIELD, NATIVE_LEASE_TTL_KEY, NC_BASE_CONDITION_KEYS, NC_CONDITION_CATALOG, NC_HISTORY_LIMIT_DEFAULT, NC_HISTORY_LIMIT_MAX, NC_MAX_PER_TRACK_IMMEDIATE, NC_SNOOZE_MAX_MINUTES, NC_TAXONOMY, NativeCropBboxSchema, NativeCropRefSchema, NativeCropResultSchema, NativeDetectionSchema, NativeLeaseAdmissionSchema, NativeLeaseSettingsSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NcAlarmConfigSchema, NcAlarmModeCoverageSchema, NcAlarmSettingsPatchSchema, NcAlarmSettingsSchema, NcConditionDescriptorSchema, NcConditionsSchema, NcCrossingSchema, NcDeliverySchema, NcDeviceStateConditionSchema, NcHistoryEntrySchema, NcHistoryFilterSchema, NcHistoryRecordKindSchema, NcHistoryStatusSchema, NcHistorySubjectSchema, NcMediaFrameSchema, NcMediaPolicySchema, NcOccupancyConditionSchema, NcPlateMatcherSchema, NcRuleActionSchema, NcRuleActionSequenceSchema, NcRuleActionsSchema, NcRuleInputSchema, NcRuleNotificationButtonSchema, NcRulePatchSchema, NcRuleSchema, NcRuleTargetSchema, NcScheduleSchema, NcScheduleWindowSchema, NcSnoozeInputSchema, NcSnoozeSchema, NcSnoozeScopeSchema, NcSnoozeSuppressedSchema, NcTaxonomyEntrySchema, NcTaxonomySchema, NcTestResultSchema, NcThrottleGranularitySchema, NcThrottleSchema, NcZoneConditionSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionIconSchema, NotificationActionSchema, NotificationFormatSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdRenderOutcomeEnum, OsdRenderResultSchema, OsdSlotBindingSchema, OsdSlotViewSchema, OsdSourceOptionSchema, OsdSourceSchema, OsdSourceValueTypeEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PRIVACY_MASK_CAP_NAME, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzOptionsSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, RATE_CONTROL_RELAXED, RATE_CONTROL_TIGHT, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadGopBytesResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RelocateFootageInputSchema, RelocateJobSchema, RelocateJobStateSchema, RelocateMediaInputSchema, RenderedAsSchema, ReportMotionInputSchema, RetrainStatusSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerInferenceDeviceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMEZONES, TRANSCODE_DOWN_MAX_BITRATE_KBPS, TRANSCODE_DOWN_MAX_HEIGHT, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TerminalProfileInfoSchema, TerminalSessionInfoSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestResultSchema, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackFlagsPatchSchema, TrackFlagsSchema, TrackProjectionSchema, TrackSchema, TrackSourceSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TrainingExportDeviceTotalsSchema, TrainingExportSummarySchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VectorDeclareIndexInputSchema, VectorDeleteByFilterInputSchema, VectorDeleteInputSchema, VectorDeleteResultSchema, VectorFilterSchema, VectorGetInputSchema, VectorGetResultSchema, VectorItemSchema, VectorMatchSchema, VectorMetadataSchema, VectorMetricSchema, VectorQueryInputSchema, VectorQueryResultSchema, VectorStatsInputSchema, VectorStatsResultSchema, VectorUpsertInputSchema, VectorUpsertResultSchema, VibrationStatusSchema, VideoEncodeSchema, WEBRTC_EGRESS_PROFILE, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneCrossingDirectionSchema, ZoneCrossingSchema, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, applyTransform, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, audioPlanFromEncodeProfile, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, bareAddonId, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildAudioArgs, buildEventKindDescriptor, buildFfmpegArgs, buildInputArgs, buildModelVariantGroups, buildNcTaxonomy, buildStreamParamsConfigSchema, buildVideoArgs, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, canonicalEgressPlan, carbonMonoxideCapability, cellsToRects, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, coreBlocksCapability, cosineSimilarity, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createHwAccelCache, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dataStoreProviderCapability, dayNightCapability, decodeVectorBase64, decoderCapability, defaultDeviceFor, defineCustomActions, deriveCameraSwitches, deriveDetailCropRect, deriveRecordingMode, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceBackendToFormat, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, egressTranscodeSharingKey, egressTransportFromRequest, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, encodeVectorBase64, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateLinkExpression, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, invocationFromEncodeProfile, isAgentOnlyPlacement, isArrayOutputSchema, isBaseConditionKey, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isDeviceScopedCap, isEvent, isNode, isObjectInput, isSameAddonId, isScheduleActive, isSoftwareDecode, isVoidInput, jobKindSchema, kebabToCamel, knownValues, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logBannerArgs, logDestinationCapability, logLevelAtMost, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, metricsProviderCapability, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notificationRulesCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, osdManagerCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, petFeederCapability, pickAccessoryControl, pickDetailCropConvention, pickNativeLeaseOverride, pickPreferredRtspEntry, pickVideoEncoder, pickerForCondition, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readDetailCropConvention, readDeviceStateFrom, readNativeLeaseOverride, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveEgressDecodeHwAccel, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, stateVocabularyFor, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, summarisePrivacyAudio, supportedRuntimes, switchCapability, switchedOffIds, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, terminalSessionCapability, textToHtml, toDeviceSummary, toExpressionValue, toNodeId, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, valveCapability, vectorDimFromBase64, vectorStoreCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
|