@camstack/addon-provider-wyze 0.2.123 → 0.2.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/addon.js +599 -140
  2. package/dist/addon.mjs +599 -140
  3. package/package.json +1 -3
package/dist/addon.js CHANGED
@@ -7454,7 +7454,7 @@ function errMsg(err) {
7454
7454
  return String(err);
7455
7455
  }
7456
7456
  //#endregion
7457
- //#region ../types/dist/composition-43aqsZQj.mjs
7457
+ //#region ../types/dist/composition-Bzr7GwgP.mjs
7458
7458
  /**
7459
7459
  * The ffmpeg build every CamStack node downloads, per platform and arch.
7460
7460
  *
@@ -7508,20 +7508,20 @@ function portable(target) {
7508
7508
  }
7509
7509
  portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
7510
7510
  /**
7511
- * LA tabella "quale booleano di questo tipo di device conta come ALTO", e il
7512
- * valutatore puro del suo FRONTE.
7511
+ * THE table "which boolean of this device type counts as HIGH", and the
7512
+ * pure evaluator of its EDGE.
7513
7513
  *
7514
- * UNA tabella per tutti quelli che chiedono "questo device è ALTO?": il
7515
- * trigger `RecordingTriggers.sensorDeviceIds` del recorder, i marker dei
7516
- * sensori della post-analysis, il bridge camera-sensors dell'orchestratore e
7517
- * le sorgenti di un campanello composto (`doorbellFeatureSources`, D671).
7518
- * Una seconda copia divergerebbe alla prima cap aggiunta, e il sintomo — "il
7519
- * sensore fa suonare il campanello ma non registra" — è esattamente D62.
7514
+ * ONE table for everyone who asks "is this device HIGH?": the
7515
+ * recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
7516
+ * sensor markers, the orchestrator's camera-sensors bridge and
7517
+ * the sources of a composite doorbell (`doorbellFeatureSources`, D671).
7518
+ * A second copy would diverge at the first cap added, and the symptom — "the
7519
+ * sensor rings the doorbell but does not record" — is exactly D62.
7520
7520
  *
7521
- * ⚠ NON è `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), e le
7522
- * due non vanno unificate: quella risponde a "qual è la PAROLA di stato per una
7523
- * regola" (e include `presence`, `cover`, `alarm-panel`), questa a "qual è il
7524
- * booleano il cui FRONTE conta". Vocabolari deliberatamente diversi.
7521
+ * ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
7522
+ * two must not be unified: that one answers "what is the state WORD for a
7523
+ * rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
7524
+ * boolean's EDGE counts". Deliberately different vocabularies.
7525
7525
  */
7526
7526
  /**
7527
7527
  * Known binary / switch source caps → the boolean slice field whose
@@ -7542,6 +7542,8 @@ var SOURCE_CAP_ACTIVE_FIELD = {
7542
7542
  vibration: "detected",
7543
7543
  tamper: "tampered"
7544
7544
  };
7545
+ /** Cap names whose presence in a device's bindings qualify it as a source. */
7546
+ var SOURCE_CAPS = Object.keys(SOURCE_CAP_ACTIVE_FIELD);
7545
7547
  /**
7546
7548
  * Error types for the safe expression engine. Two distinct classes so callers
7547
7549
  * can tell a compile-time (grammar) failure from a runtime (evaluation)
@@ -9148,22 +9150,22 @@ var CLASS_MAP_MACRO_TARGETS = [
9148
9150
  "package"
9149
9151
  ];
9150
9152
  /**
9151
- * Le macro classi di PRIMO LIVELLO: quelle che un object detector emette e che
9152
- * un operatore può selezionare.
9153
+ * The FIRST-LEVEL macro classes: those an object detector emits and that
9154
+ * an operator can select.
9153
9155
  *
9154
- * Sono le tre offerte dallo step `object-detection`
9156
+ * They are the three offered by the `object-detection` step
9155
9157
  * (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
9156
- * `enabledMacroClasses`). `package` sta in {@link CLASS_MAP_MACRO_TARGETS} e in
9157
- * `MACRO_LABELS` — è una macro vera — ma NON qui: appartiene allo step
9158
- * `package-detection`, la cui abilitazione è guidata dalle zone, e offrire la
9159
- * stessa parola due volte ha già fatto accendere a un operatore il proxy COCO
9158
+ * `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
9159
+ * `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
9160
+ * `package-detection`, whose enablement is driven by zones, and offering the
9161
+ * same word twice has already made an operator turn on the COCO proxy
9160
9162
  * (suitcase/backpack/handbag) lasciando spento il detector dedicato.
9161
9163
  *
9162
- * UNA lista. Prima di oggi le stesse tre erano scritte a mano nell'offerta
9163
- * dello step e una seconda volta come union `FirstLevelMacro`
9164
- * (`types/detection.ts`); una terza copia per il trigger di registrazione
9165
- * (`RecordingTriggers.objectClasses`) avrebbe reso invisibile la divergenza
9166
- * successiva.
9164
+ * ONE list. Before today the same three were hand-written in the step's offer
9165
+ * and a second time as the union `FirstLevelMacro`
9166
+ * (`types/detection.ts`); a third copy for the recording trigger
9167
+ * (`RecordingTriggers.objectClasses`) would have made the later divergence
9168
+ * invisible.
9167
9169
  */
9168
9170
  var FIRST_LEVEL_MACRO_CLASSES = [
9169
9171
  "person",
@@ -9228,17 +9230,17 @@ var RecordingStorageModeSchema = _enum([
9228
9230
  "on-device-decision"
9229
9231
  ]);
9230
9232
  /**
9231
- * Le macro classi che possono aprire una finestra di registrazione — le stesse
9232
- * tre offerte dallo step `object-detection`, da UNA lista
9233
+ * The macro classes that can open a recording window — the same
9234
+ * three offered by the `object-detection` step, from ONE list
9233
9235
  * ({@link FIRST_LEVEL_MACRO_CLASSES}).
9234
9236
  */
9235
9237
  var RecordingObjectTriggerClassSchema = _enum(FIRST_LEVEL_MACRO_CLASSES);
9236
9238
  /**
9237
- * True quando `values` non ripete un elemento.
9239
+ * True when `values` does not repeat an element.
9238
9240
  *
9239
- * Un duplicato non è innocuo: ogni voce di `objectClasses` / `sensorDeviceIds`
9240
- * diventa una SORGENTE in `bandTriggerSources`, e la stessa sorgente due volte
9241
- * conterebbe due volte le sue finestre in `segmentMissedByMs`.
9241
+ * A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
9242
+ * becomes a SOURCE in `bandTriggerSources`, and the same source twice
9243
+ * would count its windows twice in `segmentMissedByMs`.
9242
9244
  */
9243
9245
  var noDuplicates = (values) => new Set(values).size === values.length;
9244
9246
  /** Which detectors trigger an `events`-mode band. */
@@ -9246,34 +9248,34 @@ var RecordingTriggersSchema = object({
9246
9248
  motion: boolean().optional(),
9247
9249
  audioThresholdDbfs: number().optional(),
9248
9250
  /**
9249
- * Le macro classi la cui detection apre una finestra. ASSENTE = la sorgente
9250
- * non è ascoltata; un array VUOTO è rifiutato, perché "banda events, trigger
9251
- * object acceso, nessuna classe" è la stessa forma "abilitata e non registra
9252
- * nulla, per sempre" contro cui è scritto `eventsBandCanEverDemand`.
9251
+ * The macro classes whose detection opens a window. ABSENT = the source
9252
+ * is not listened to; an EMPTY array is rejected, because "events band, object
9253
+ * trigger on, no class" is the same shape "enabled and records
9254
+ * nothing, forever" that `eventsBandCanEverDemand` is written against.
9253
9255
  *
9254
- * Il segnale letto è GIÀ FILTRATO: solo detection `source: 'pipeline'`, cioè
9255
- * quelle che hanno attraversato `enabledMacroClasses`, i
9256
- * `minConfidence<Macro>` e il full-frame guard. L'AI a bordo camera
9257
- * (`source: 'onboard'`) non attraversa nessuno di quei gate e NON apre
9258
- * finestre — vedi `recorder/object-trigger.ts`.
9256
+ * The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
9257
+ * those that went through `enabledMacroClasses`, the
9258
+ * `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
9259
+ * (`source: 'onboard'`) goes through none of those gates and does NOT open
9260
+ * windows — see `recorder/object-trigger.ts`.
9259
9261
  */
9260
9262
  objectClasses: array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
9261
9263
  /**
9262
- * I device LINKED il cui FRONTE ALTO apre una finestra. Assente = la sorgente
9263
- * non è ascoltata; un array vuoto è rifiutato per la stessa ragione di
9264
+ * The LINKED devices whose RISING EDGE opens a window. Absent = the source
9265
+ * is not listened to; an empty array is rejected for the same reason as
9264
9266
  * `objectClasses`.
9265
9267
  *
9266
- * Sono id di device SORGENTE, non camere: la banda li nomina, quindi il
9267
- * percorso caldo (`DeviceStateChanged`, a ritmo di bus su tutta la flotta)
9268
- * non fa RPC. L'OFFERTA da cui l'operatore li sceglie è un'altra domanda, e
9269
- * si risolve con `deviceManager.getLinkedDevices` + `getBindingsBatch` per
9270
- * device (D12) — mai un elenco globale di cap.
9268
+ * These are SOURCE device ids, not cameras: the band names them, so the
9269
+ * hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
9270
+ * does no RPC. The OFFER from which the operator picks them is another question, and
9271
+ * is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
9272
+ * device (D12) — never a global list of caps.
9271
9273
  *
9272
- * Cosa vuol dire "alto" dipende dal TIPO di device e non è deciso qui:
9273
- * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) è LA tabella,
9274
- * la stessa del campanello composto (D671). Ed è il FRONTE, non
9275
- * il livello: un contatto trovato già aperto al riavvio del runner non fa
9276
- * registrare.
9274
+ * What "high" means depends on the device TYPE and is not decided here:
9275
+ * `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
9276
+ * the same one as the composite doorbell (D671). And it is the EDGE, not
9277
+ * the level: a contact found already open at runner restart does not
9278
+ * record.
9277
9279
  */
9278
9280
  sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
9279
9281
  });
@@ -10350,7 +10352,7 @@ var DecoderSessionConfigSchema = object({
10350
10352
  * - **VALUE** — at which level, for which scope, until when. That stays ONE
10351
10353
  * thing: the logging settings document on the `system` cap. Two authorities
10352
10354
  * over the values is the exact defect
10353
- * `docs/design/plans/2026-08-26-logging-per-componente.md` was written to
10355
+ * `docs/design/plans/2026-08-26-per-component-logging.md` was written to
10354
10356
  * remove; re-introducing it from the cure side would be grotesque.
10355
10357
  *
10356
10358
  * Nothing in this file reads a clock, an env var or a store. The registry is
@@ -12061,7 +12063,7 @@ var BrokerStatusEnum = _enum([
12061
12063
  "unreachable",
12062
12064
  "error"
12063
12065
  ]);
12064
- var BrokerInfoSchema$1 = object({
12066
+ var BrokerInfoSchema = object({
12065
12067
  /** Stable broker id. Persisted; survives addon restarts. */
12066
12068
  id: string(),
12067
12069
  /** Addon id of the provider that OWNS this broker.
@@ -12194,7 +12196,7 @@ var GetStateInputSchema = object({
12194
12196
  * HA: entity_id (returns the cached entity state). */
12195
12197
  key: string()
12196
12198
  });
12197
- method(ListInputSchema, array(BrokerInfoSchema$1)), method(GetInputSchema, BrokerInfoSchema$1.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
12199
+ method(ListInputSchema, array(BrokerInfoSchema)), method(GetInputSchema, BrokerInfoSchema.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
12198
12200
  kind: "mutation",
12199
12201
  auth: "admin"
12200
12202
  }), method(RemoveInputSchema, _void(), {
@@ -13905,7 +13907,7 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
13905
13907
  *
13906
13908
  * ⚠ An earlier version of this comment blamed Zod stripping, and that
13907
13909
  * was wrong — corrected 2026-08-26 after the hop map
13908
- * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
13910
+ * (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
13909
13911
  * There is **no Zod parse at all** between the door and the engine: the
13910
13912
  * dispatcher forwards the payload verbatim and UDS carries it whole. A
13911
13913
  * field declared here reaches `SqliteSettingsBackend` either way.
@@ -16012,7 +16014,7 @@ method(object({
16012
16014
  * per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
16013
16015
  * ends in a log line, and a log line is the thing the operator asked to stop
16014
16016
  * needing: *"possiamo armare questi errori intanto? Così al prossimo giro
16015
- * ricontrolliamo tutti questi punti"*. Reading them meant grepping Loki and
16017
+ * ricontrolliamo tutti questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]. Reading them meant grepping Loki and
16016
16018
  * hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
16017
16019
  * media blackout were both diagnosed. The counters stay; this is where they can
16018
16020
  * be READ.
@@ -17388,7 +17390,7 @@ var BrokerStatusSchema$1 = _enum([
17388
17390
  "unreachable",
17389
17391
  "tls-error"
17390
17392
  ]);
17391
- var BrokerInfoSchema = object({
17393
+ var BrokerInfoSchema$1 = object({
17392
17394
  id: string(),
17393
17395
  name: string(),
17394
17396
  url: string(),
@@ -17451,7 +17453,7 @@ var StatusSchema = object({
17451
17453
  brokerCount: number(),
17452
17454
  embeddedRunning: boolean()
17453
17455
  });
17454
- method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
17456
+ method(_void(), array(BrokerInfoSchema$1)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
17455
17457
  kind: "mutation",
17456
17458
  auth: "admin"
17457
17459
  }), method(IdInputSchema, _void(), {
@@ -19665,78 +19667,16 @@ var NcRuleInputSchema = object({
19665
19667
  */
19666
19668
  confirm: NcConfirmSchema.optional(),
19667
19669
  /**
19668
- * WAIT for face/plate recognition before saying anything.
19669
- *
19670
- * A notification's TEXT is frozen at enqueue and its media is re-resolved at
19671
- * send; the identity is neither. A face is confirmed after `confirmFrames`
19672
- * agreeing observations — p50 **11.4 s** after the track was first seen,
19673
- * measured on this hub — and an `immediate` rule enqueues on the first object
19674
- * event, seconds before that. So "Gianluca è arrivato" is unsayable on the
19675
- * immediate path, and no amount of media re-resolution fixes a sentence.
19676
- *
19677
- * Only two honest answers exist, and this flag picks between them. It has
19678
- * effect ONLY on a rule that declares a recognition scope
19679
- * ({@link NcConditions.identities} or {@link NcConditions.plates}) — on any
19680
- * other rule there is nothing to wait for and the flag is inert.
19681
- *
19682
- * | value | what happens |
19683
- * | --- | --- |
19684
- * | `true` | the rule stops firing on the object event and fires at TRACK CLOSE instead, once, with the name — later, and complete |
19685
- * | absent / `false` | it fires at once WITHOUT the name, and if recognition lands before the track closes a SECOND, "…is Gianluca" notification follows (one per track, per rule, per target) |
19686
- *
19687
- * `.optional()` and deliberately NOT `.default()`: a Zod default does not run
19688
- * on the addon cap path, and absent has to keep meaning exactly what every
19689
- * rule authored before this field meant.
19690
- *
19691
- * The cost of `true` is stated here because the editor states it too: a rule
19692
- * that waits also inherits track-close SEMANTICS — its `zones` condition
19693
- * tests every zone the track visited and a `crossing` condition can no longer
19694
- * be satisfied, because a closed track carries no crossing.
19670
+ * IMMEDIATE GROUPED (D692): the first matching subject opens a window of this many
19671
+ * seconds; the rule sends ONE message when the window closes — early, once every
19672
+ * subject in it is final, never before {@link NC_GROUPING_MIN_SEC} — naming everybody
19673
+ * the rule matched, with one mosaic tile per subject.
19674
+ * Absent = plain immediate (one message per track, at the first match).
19675
+ * Only an `immediate` DETECTION rule may carry it (`ruleGroupingApplies`, enforced on
19676
+ * save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
19677
+ * path does not run Zod defaults.
19695
19678
  */
19696
- waitForEnhancement: boolean().optional(),
19697
- /**
19698
- * GROUP a burst of subjects into ONE notification that grows.
19699
- *
19700
- * Seconds of quiet after the last matching subject before the burst is
19701
- * considered over. While it is open, the first subject enqueues immediately —
19702
- * **exactly as today, with no added latency** — and every real growth (a new
19703
- * subject, or a name confirmed on one already in it) REPLACES that
19704
- * notification with an updated one naming everybody. The push carries the
19705
- * group's own coalescing tag, so the phone replaces rather than stacks.
19706
- *
19707
- * `0` / absent = off, and off is today's behaviour byte for byte.
19708
- *
19709
- * ### Why an idle cutoff and not a window
19710
- *
19711
- * The measured seven-person arrival on device 590 spans 110 s with every
19712
- * internal gap under 30 s. A 12 s fixed window cuts it into three groups; an
19713
- * idle cutoff holds it as one and ends it when the arrival actually ends.
19714
- * 30 s is a widely shipped value for the same decision.
19715
- *
19716
- * ### What it replaces
19717
- *
19718
- * The blind cooldown, which collapses a burst by DISCARDING it. Measured on
19719
- * device 615 / *Persona su Uscio* over six days: 116 qualifying tracks → 74
19720
- * notifications, **44 (37.9%) suppressed outright**, 23 of them overlapping a
19721
- * track that did fire and 7 carrying a confirmed identity nobody heard about.
19722
- * A group collapses the same volume by MERGING, so the cooldown becomes a
19723
- * budget over GROUPS — which is what it always meant — and a growth is never
19724
- * throttled by the window its own first member spent.
19725
- *
19726
- * ### Interaction with {@link waitForEnhancement}
19727
- *
19728
- * They compose, and the order matters. `waitForEnhancement` defers the rule to
19729
- * TRACK CLOSE, so with both set the group is opened by the first member to
19730
- * CLOSE — already carrying its name — and grows as later members close. That
19731
- * is later, and complete. With grouping alone the group opens on the first
19732
- * object event and picks up names as they are confirmed, through the growth
19733
- * path. Neither combination fires twice for one subject.
19734
- *
19735
- * `.optional()` and deliberately NOT `.default()`: a Zod default does not run
19736
- * on the addon cap path, so absent must keep meaning what it meant before this
19737
- * field existed.
19738
- */
19739
- groupIdleSec: number().int().min(0).max(600).optional()
19679
+ groupingSec: number().int().min(5).max(60).optional()
19740
19680
  });
19741
19681
  /**
19742
19682
  * Partial patch for `updateRule` — any subset of the input fields, plus the
@@ -19784,9 +19724,10 @@ var NcRuleClearableKeySchema = _enum([
19784
19724
  "targetUsers",
19785
19725
  "snoozeOptions",
19786
19726
  "snoozeAllowGlobal",
19787
- "waitForEnhancement",
19788
19727
  "actions",
19789
19728
  "confirm",
19729
+ "groupingSec",
19730
+ "waitForEnhancement",
19790
19731
  "groupIdleSec"
19791
19732
  ]);
19792
19733
  var NcRuleUpdateInputSchema = object({
@@ -19808,9 +19749,25 @@ var NcRuleSchema = NcRuleInputSchema.extend({
19808
19749
  */
19809
19750
  disabledTargetIds: array(string()).default([])
19810
19751
  });
19752
+ /**
19753
+ * The state-summary SECTIONS (D647 / D698): the D637 kind groups that report a
19754
+ * still-true state. `backups-exports` and `alarm` are not sections — a completed
19755
+ * job is not an open state, and the alarm stays instant.
19756
+ */
19757
+ var NcStateSummarySectionIdSchema = _enum([
19758
+ "device-state",
19759
+ "streams",
19760
+ "battery",
19761
+ "consumables",
19762
+ "tanks",
19763
+ "detection-blind",
19764
+ "nodes",
19765
+ "addons",
19766
+ "updates"
19767
+ ]);
19811
19768
  /** One section of a previewed state summary. `unavailable` = its state could not be read. */
19812
19769
  var NcStateSummaryPreviewSectionSchema = object({
19813
- id: string(),
19770
+ id: NcStateSummarySectionIdSchema,
19814
19771
  status: _enum(["read", "unavailable"]),
19815
19772
  items: number().int().nonnegative(),
19816
19773
  reason: string().optional()
@@ -19820,7 +19777,7 @@ var NcStateSummaryPreviewSectionSchema = object({
19820
19777
  * a `rule` split (no `section`), one section's on a `section` split.
19821
19778
  */
19822
19779
  var NcStateSummaryPreviewRowSchema = object({
19823
- section: string().optional(),
19780
+ section: NcStateSummarySectionIdSchema.optional(),
19824
19781
  /** The section's name on a per-section row; every reported section's, joined, on a combined one. */
19825
19782
  title: string(),
19826
19783
  text: string(),
@@ -21719,14 +21676,14 @@ var TrackSchema = object({
21719
21676
  * `derive-returned-null tile=standin`,
21720
21677
  * `native-tile tile=native no-key-frame-at-close`, …) written at close and
21721
21678
  * CLEARED by the late-keyFrame upgrade when a native tile lands after all.
21722
- * The operator-facing answer to "perché manca l'immagine?" on a track whose
21679
+ * The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
21723
21680
  * tile is a face/plate stand-in, a raster crop, or an icon.
21724
21681
  *
21725
21682
  * **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
21726
21683
  * the TILE ranked below native, so a track whose thumbnail landed natively
21727
21684
  * while its key frame missed carried no reason at all — three of the four
21728
21685
  * `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
21729
- * that shape, and their "niente ultimo" had no cause anywhere on the row.
21686
+ * that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
21730
21687
  * The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
21731
21688
  * lastFrame copy source`), so its absence is now on this line whatever the
21732
21689
  * tile ended up being.
@@ -21813,7 +21770,7 @@ var MotionEventSchema = object({
21813
21770
  /**
21814
21771
  * Ms offsets from `timestamp` (the episode's own first rising edge, so the
21815
21772
  * first entry is always `0`) of every genuine off→on transition the
21816
- * episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
21773
+ * episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
21817
21774
  * push: a firmware source that keepalives at ~1 Hz for the whole burst
21818
21775
  * (Reolink, Hikvision) produces exactly one edge; a source that reports an
21819
21776
  * explicit `false` mid-episode and then resumes before the quiet window
@@ -22337,6 +22294,7 @@ var KeyEventSchema = object({
22337
22294
  bestEventId: string(),
22338
22295
  /** Track lifetime in ms (lastSeen - firstSeen). */
22339
22296
  windowMs: number().optional(),
22297
+ audioLabels: array(TrackAudioLabelSchema).readonly().optional(),
22340
22298
  ...TrackFlagFields,
22341
22299
  ...TrackRetrainFields
22342
22300
  });
@@ -27222,7 +27180,7 @@ var ClipPlaybackSchema = object({
27222
27180
  * **One authorised yes is one wake.** `next-natural` — take the clip the next
27223
27181
  * time the camera is awake for its own reasons — is deliberately not a member:
27224
27182
  * it was proposed, it is free on the battery, and the operator declined it on
27225
- * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."*,
27183
+ * 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
27226
27184
  * D558 "Considered and not taken").
27227
27185
  */
27228
27186
  var ClipWakeSchema = _enum(["authorised"]);
@@ -27483,7 +27441,7 @@ DeviceType.Camera, method(object({
27483
27441
  * It replaced `sources?: string[]`, a VIEW filter over source ids that
27484
27442
  * assumed the answer was a fan-out over everything a camera has. The
27485
27443
  * operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
27486
- * solo"* — so the list is asked of one provider at a time and there is
27444
+ * solo"* [there is only one user] — so the list is asked of one provider at a time and there is
27487
27445
  * nothing to filter out of it.
27488
27446
  */
27489
27447
  provider: string().min(1)
@@ -35481,7 +35439,7 @@ var ReadGopBytesResultSchema = object({
35481
35439
  /**
35482
35440
  * A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
35483
35441
  * twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
35484
- * replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
35442
+ * replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
35485
35443
  * a replay needs several seconds of native pixels, not one frame.
35486
35444
  *
35487
35445
  * `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
@@ -38845,6 +38803,7 @@ var zoneRulesCapability = {
38845
38803
  */
38846
38804
  durability: "restored"
38847
38805
  };
38806
+ SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
38848
38807
  /**
38849
38808
  * Accessory device helpers — shared across drivers.
38850
38809
  *
@@ -48931,6 +48890,11 @@ Object.freeze({
48931
48890
  }
48932
48891
  });
48933
48892
  Object.freeze({
48893
+ "accessories.getStatus": [{
48894
+ name: "deviceId",
48895
+ form: "single",
48896
+ optional: false
48897
+ }],
48934
48898
  "accessories.setChildHidden": [{
48935
48899
  name: "childDeviceId",
48936
48900
  form: "single",
@@ -48950,6 +48914,11 @@ Object.freeze({
48950
48914
  form: "single",
48951
48915
  optional: false
48952
48916
  }],
48917
+ "airQualitySensor.getStatus": [{
48918
+ name: "deviceId",
48919
+ form: "single",
48920
+ optional: false
48921
+ }],
48953
48922
  "alarmPanel.arm": [{
48954
48923
  name: "deviceId",
48955
48924
  form: "single",
@@ -48960,11 +48929,36 @@ Object.freeze({
48960
48929
  form: "single",
48961
48930
  optional: false
48962
48931
  }],
48932
+ "alarmPanel.getStatus": [{
48933
+ name: "deviceId",
48934
+ form: "single",
48935
+ optional: false
48936
+ }],
48963
48937
  "alarmPanel.trigger": [{
48964
48938
  name: "deviceId",
48965
48939
  form: "single",
48966
48940
  optional: false
48967
48941
  }],
48942
+ "ambientLightSensor.getStatus": [{
48943
+ name: "deviceId",
48944
+ form: "single",
48945
+ optional: false
48946
+ }],
48947
+ "audioAnalysis.applyDeviceSettingsPatch": [{
48948
+ name: "deviceId",
48949
+ form: "single",
48950
+ optional: false
48951
+ }],
48952
+ "audioAnalysis.getDeviceLiveContribution": [{
48953
+ name: "deviceId",
48954
+ form: "single",
48955
+ optional: false
48956
+ }],
48957
+ "audioAnalysis.getDeviceSettingsContribution": [{
48958
+ name: "deviceId",
48959
+ form: "single",
48960
+ optional: false
48961
+ }],
48968
48962
  "audioAnalysis.resolveDeviceSettings": [{
48969
48963
  name: "deviceId",
48970
48964
  form: "single",
@@ -49005,16 +48999,36 @@ Object.freeze({
49005
48999
  form: "single",
49006
49000
  optional: false
49007
49001
  }],
49002
+ "automationControl.getStatus": [{
49003
+ name: "deviceId",
49004
+ form: "single",
49005
+ optional: false
49006
+ }],
49008
49007
  "automationControl.trigger": [{
49009
49008
  name: "deviceId",
49010
49009
  form: "single",
49011
49010
  optional: false
49012
49011
  }],
49012
+ "battery.getStatus": [{
49013
+ name: "deviceId",
49014
+ form: "single",
49015
+ optional: false
49016
+ }],
49013
49017
  "battery.wakeForStream": [{
49014
49018
  name: "deviceId",
49015
49019
  form: "single",
49016
49020
  optional: false
49017
49021
  }],
49022
+ "binary.getStatus": [{
49023
+ name: "deviceId",
49024
+ form: "single",
49025
+ optional: false
49026
+ }],
49027
+ "brightness.getStatus": [{
49028
+ name: "deviceId",
49029
+ form: "single",
49030
+ optional: false
49031
+ }],
49018
49032
  "brightness.setBrightness": [{
49019
49033
  name: "deviceId",
49020
49034
  form: "single",
@@ -49030,6 +49044,26 @@ Object.freeze({
49030
49044
  form: "single",
49031
49045
  optional: false
49032
49046
  }],
49047
+ "cameraCredentials.getStatus": [{
49048
+ name: "deviceId",
49049
+ form: "single",
49050
+ optional: false
49051
+ }],
49052
+ "cameraGridLayout.applyDeviceSettingsPatch": [{
49053
+ name: "deviceId",
49054
+ form: "single",
49055
+ optional: false
49056
+ }],
49057
+ "cameraGridLayout.getDeviceLiveContribution": [{
49058
+ name: "deviceId",
49059
+ form: "single",
49060
+ optional: false
49061
+ }],
49062
+ "cameraGridLayout.getDeviceSettingsContribution": [{
49063
+ name: "deviceId",
49064
+ form: "single",
49065
+ optional: false
49066
+ }],
49033
49067
  "cameraGridLayout.getLayout": [{
49034
49068
  name: "deviceId",
49035
49069
  form: "single",
@@ -49045,6 +49079,21 @@ Object.freeze({
49045
49079
  form: "single",
49046
49080
  optional: false
49047
49081
  }],
49082
+ "cameraPipelineConfig.applyDeviceSettingsPatch": [{
49083
+ name: "deviceId",
49084
+ form: "single",
49085
+ optional: false
49086
+ }],
49087
+ "cameraPipelineConfig.getDeviceLiveContribution": [{
49088
+ name: "deviceId",
49089
+ form: "single",
49090
+ optional: false
49091
+ }],
49092
+ "cameraPipelineConfig.getDeviceSettingsContribution": [{
49093
+ name: "deviceId",
49094
+ form: "single",
49095
+ optional: false
49096
+ }],
49048
49097
  "cameraStreams.getBrokerStreams": [{
49049
49098
  name: "deviceId",
49050
49099
  form: "single",
@@ -49070,6 +49119,16 @@ Object.freeze({
49070
49119
  form: "single",
49071
49120
  optional: false
49072
49121
  }],
49122
+ "carbonMonoxide.getStatus": [{
49123
+ name: "deviceId",
49124
+ form: "single",
49125
+ optional: false
49126
+ }],
49127
+ "climateControl.getStatus": [{
49128
+ name: "deviceId",
49129
+ form: "single",
49130
+ optional: false
49131
+ }],
49073
49132
  "climateControl.setFanMode": [{
49074
49133
  name: "deviceId",
49075
49134
  form: "single",
@@ -49110,16 +49169,41 @@ Object.freeze({
49110
49169
  form: "single",
49111
49170
  optional: false
49112
49171
  }],
49172
+ "color.getStatus": [{
49173
+ name: "deviceId",
49174
+ form: "single",
49175
+ optional: false
49176
+ }],
49113
49177
  "color.setColor": [{
49114
49178
  name: "deviceId",
49115
49179
  form: "single",
49116
49180
  optional: false
49117
49181
  }],
49182
+ "connectivity.getStatus": [{
49183
+ name: "deviceId",
49184
+ form: "single",
49185
+ optional: false
49186
+ }],
49187
+ "consumables.getStatus": [{
49188
+ name: "deviceId",
49189
+ form: "single",
49190
+ optional: false
49191
+ }],
49118
49192
  "consumables.reset": [{
49119
49193
  name: "deviceId",
49120
49194
  form: "single",
49121
49195
  optional: false
49122
49196
  }],
49197
+ "contact.getStatus": [{
49198
+ name: "deviceId",
49199
+ form: "single",
49200
+ optional: false
49201
+ }],
49202
+ "control.getStatus": [{
49203
+ name: "deviceId",
49204
+ form: "single",
49205
+ optional: false
49206
+ }],
49123
49207
  "control.setValue": [{
49124
49208
  name: "deviceId",
49125
49209
  form: "single",
@@ -49130,6 +49214,11 @@ Object.freeze({
49130
49214
  form: "single",
49131
49215
  optional: false
49132
49216
  }],
49217
+ "cover.getStatus": [{
49218
+ name: "deviceId",
49219
+ form: "single",
49220
+ optional: false
49221
+ }],
49133
49222
  "cover.open": [{
49134
49223
  name: "deviceId",
49135
49224
  form: "single",
@@ -49155,6 +49244,11 @@ Object.freeze({
49155
49244
  form: "single",
49156
49245
  optional: false
49157
49246
  }],
49247
+ "dayNight.getStatus": [{
49248
+ name: "deviceId",
49249
+ form: "single",
49250
+ optional: false
49251
+ }],
49158
49252
  "dayNight.setSettings": [{
49159
49253
  name: "deviceId",
49160
49254
  form: "single",
@@ -49165,11 +49259,31 @@ Object.freeze({
49165
49259
  form: "single",
49166
49260
  optional: true
49167
49261
  }],
49262
+ "detectionPipeline.applyDeviceSettingsPatch": [{
49263
+ name: "deviceId",
49264
+ form: "single",
49265
+ optional: false
49266
+ }],
49267
+ "detectionPipeline.getDeviceLiveContribution": [{
49268
+ name: "deviceId",
49269
+ form: "single",
49270
+ optional: false
49271
+ }],
49272
+ "detectionPipeline.getDeviceSettingsContribution": [{
49273
+ name: "deviceId",
49274
+ form: "single",
49275
+ optional: false
49276
+ }],
49168
49277
  "deviceAdminLink.getAdminLink": [{
49169
49278
  name: "deviceId",
49170
49279
  form: "single",
49171
49280
  optional: false
49172
49281
  }],
49282
+ "deviceAdoption.getStatus": [{
49283
+ name: "deviceId",
49284
+ form: "single",
49285
+ optional: false
49286
+ }],
49173
49287
  "deviceAdoption.release": [{
49174
49288
  name: "camDeviceId",
49175
49289
  form: "single",
@@ -49185,6 +49299,11 @@ Object.freeze({
49185
49299
  form: "single",
49186
49300
  optional: false
49187
49301
  }],
49302
+ "deviceDiscovery.getStatus": [{
49303
+ name: "deviceId",
49304
+ form: "single",
49305
+ optional: false
49306
+ }],
49188
49307
  "deviceDiscovery.listDiscovered": [{
49189
49308
  name: "deviceId",
49190
49309
  form: "single",
@@ -49204,6 +49323,21 @@ Object.freeze({
49204
49323
  form: "single",
49205
49324
  optional: false
49206
49325
  }],
49326
+ "deviceExport.applyDeviceSettingsPatch": [{
49327
+ name: "deviceId",
49328
+ form: "single",
49329
+ optional: false
49330
+ }],
49331
+ "deviceExport.getDeviceLiveContribution": [{
49332
+ name: "deviceId",
49333
+ form: "single",
49334
+ optional: false
49335
+ }],
49336
+ "deviceExport.getDeviceSettingsContribution": [{
49337
+ name: "deviceId",
49338
+ form: "single",
49339
+ optional: false
49340
+ }],
49207
49341
  "deviceExtension.listCandidates": [{
49208
49342
  name: "deviceId",
49209
49343
  form: "single",
@@ -49552,6 +49686,26 @@ Object.freeze({
49552
49686
  form: "single",
49553
49687
  optional: false
49554
49688
  }],
49689
+ "deviceStatus.getStatus": [{
49690
+ name: "deviceId",
49691
+ form: "single",
49692
+ optional: false
49693
+ }],
49694
+ "doorbell.getStatus": [{
49695
+ name: "deviceId",
49696
+ form: "single",
49697
+ optional: false
49698
+ }],
49699
+ "enumSensor.getStatus": [{
49700
+ name: "deviceId",
49701
+ form: "single",
49702
+ optional: false
49703
+ }],
49704
+ "eventEmitter.getStatus": [{
49705
+ name: "deviceId",
49706
+ form: "single",
49707
+ optional: false
49708
+ }],
49555
49709
  "faceGallery.getFaceByTrack": [{
49556
49710
  name: "deviceId",
49557
49711
  form: "single",
@@ -49566,6 +49720,11 @@ Object.freeze({
49566
49720
  form: "array",
49567
49721
  optional: true
49568
49722
  }],
49723
+ "fanControl.getStatus": [{
49724
+ name: "deviceId",
49725
+ form: "single",
49726
+ optional: false
49727
+ }],
49569
49728
  "fanControl.setDirection": [{
49570
49729
  name: "deviceId",
49571
49730
  form: "single",
@@ -49586,6 +49745,26 @@ Object.freeze({
49586
49745
  form: "single",
49587
49746
  optional: false
49588
49747
  }],
49748
+ "featureProbe.getStatus": [{
49749
+ name: "deviceId",
49750
+ form: "single",
49751
+ optional: false
49752
+ }],
49753
+ "flood.getStatus": [{
49754
+ name: "deviceId",
49755
+ form: "single",
49756
+ optional: false
49757
+ }],
49758
+ "gas.getStatus": [{
49759
+ name: "deviceId",
49760
+ form: "single",
49761
+ optional: false
49762
+ }],
49763
+ "humidifier.getStatus": [{
49764
+ name: "deviceId",
49765
+ form: "single",
49766
+ optional: false
49767
+ }],
49589
49768
  "humidifier.setMode": [{
49590
49769
  name: "deviceId",
49591
49770
  form: "single",
@@ -49601,11 +49780,26 @@ Object.freeze({
49601
49780
  form: "single",
49602
49781
  optional: false
49603
49782
  }],
49783
+ "humiditySensor.getStatus": [{
49784
+ name: "deviceId",
49785
+ form: "single",
49786
+ optional: false
49787
+ }],
49788
+ "image.getStatus": [{
49789
+ name: "deviceId",
49790
+ form: "single",
49791
+ optional: false
49792
+ }],
49604
49793
  "imageSettings.getOptions": [{
49605
49794
  name: "deviceId",
49606
49795
  form: "single",
49607
49796
  optional: false
49608
49797
  }],
49798
+ "imageSettings.getStatus": [{
49799
+ name: "deviceId",
49800
+ form: "single",
49801
+ optional: false
49802
+ }],
49609
49803
  "imageSettings.setSettings": [{
49610
49804
  name: "deviceId",
49611
49805
  form: "single",
@@ -49616,6 +49810,11 @@ Object.freeze({
49616
49810
  form: "single",
49617
49811
  optional: false
49618
49812
  }],
49813
+ "intercom.getStatus": [{
49814
+ name: "deviceId",
49815
+ form: "single",
49816
+ optional: false
49817
+ }],
49619
49818
  "intercom.handleAnswer": [{
49620
49819
  name: "deviceId",
49621
49820
  form: "single",
@@ -49646,6 +49845,11 @@ Object.freeze({
49646
49845
  form: "single",
49647
49846
  optional: false
49648
49847
  }],
49848
+ "lawnMowerControl.getStatus": [{
49849
+ name: "deviceId",
49850
+ form: "single",
49851
+ optional: false
49852
+ }],
49649
49853
  "lawnMowerControl.pause": [{
49650
49854
  name: "deviceId",
49651
49855
  form: "single",
@@ -49656,6 +49860,11 @@ Object.freeze({
49656
49860
  form: "single",
49657
49861
  optional: false
49658
49862
  }],
49863
+ "lockControl.getStatus": [{
49864
+ name: "deviceId",
49865
+ form: "single",
49866
+ optional: false
49867
+ }],
49659
49868
  "lockControl.lock": [{
49660
49869
  name: "deviceId",
49661
49870
  form: "single",
@@ -49671,6 +49880,11 @@ Object.freeze({
49671
49880
  form: "single",
49672
49881
  optional: false
49673
49882
  }],
49883
+ "mediaPlayer.getStatus": [{
49884
+ name: "deviceId",
49885
+ form: "single",
49886
+ optional: false
49887
+ }],
49674
49888
  "mediaPlayer.next": [{
49675
49889
  name: "deviceId",
49676
49890
  form: "single",
@@ -49731,6 +49945,11 @@ Object.freeze({
49731
49945
  form: "single",
49732
49946
  optional: false
49733
49947
  }],
49948
+ "motion.getStatus": [{
49949
+ name: "deviceId",
49950
+ form: "single",
49951
+ optional: false
49952
+ }],
49734
49953
  "motion.isDetected": [{
49735
49954
  name: "deviceId",
49736
49955
  form: "single",
@@ -49741,11 +49960,31 @@ Object.freeze({
49741
49960
  form: "single",
49742
49961
  optional: false
49743
49962
  }],
49963
+ "motionDetection.applyDeviceSettingsPatch": [{
49964
+ name: "deviceId",
49965
+ form: "single",
49966
+ optional: false
49967
+ }],
49968
+ "motionDetection.getDeviceLiveContribution": [{
49969
+ name: "deviceId",
49970
+ form: "single",
49971
+ optional: false
49972
+ }],
49973
+ "motionDetection.getDeviceSettingsContribution": [{
49974
+ name: "deviceId",
49975
+ form: "single",
49976
+ optional: false
49977
+ }],
49744
49978
  "motionDetection.removeCamera": [{
49745
49979
  name: "deviceId",
49746
49980
  form: "single",
49747
49981
  optional: false
49748
49982
  }],
49983
+ "motionTrigger.getStatus": [{
49984
+ name: "deviceId",
49985
+ form: "single",
49986
+ optional: false
49987
+ }],
49749
49988
  "motionTrigger.setMotionTrigger": [{
49750
49989
  name: "deviceId",
49751
49990
  form: "single",
@@ -49756,6 +49995,11 @@ Object.freeze({
49756
49995
  form: "single",
49757
49996
  optional: false
49758
49997
  }],
49998
+ "motionZones.getStatus": [{
49999
+ name: "deviceId",
50000
+ form: "single",
50001
+ optional: false
50002
+ }],
49759
50003
  "motionZones.setZone": [{
49760
50004
  name: "deviceId",
49761
50005
  form: "single",
@@ -49766,6 +50010,11 @@ Object.freeze({
49766
50010
  form: "single",
49767
50011
  optional: false
49768
50012
  }],
50013
+ "nativeObjectDetection.getStatus": [{
50014
+ name: "deviceId",
50015
+ form: "single",
50016
+ optional: false
50017
+ }],
49769
50018
  "nativeObjectDetection.setEnabled": [{
49770
50019
  name: "deviceId",
49771
50020
  form: "single",
@@ -49781,6 +50030,11 @@ Object.freeze({
49781
50030
  form: "single",
49782
50031
  optional: false
49783
50032
  }],
50033
+ "navigation.getStatus": [{
50034
+ name: "deviceId",
50035
+ form: "single",
50036
+ optional: false
50037
+ }],
49784
50038
  "navigation.goToPoint": [{
49785
50039
  name: "deviceId",
49786
50040
  form: "single",
@@ -49826,6 +50080,11 @@ Object.freeze({
49826
50080
  form: "single",
49827
50081
  optional: false
49828
50082
  }],
50083
+ "networkLink.getStatus": [{
50084
+ name: "deviceId",
50085
+ form: "single",
50086
+ optional: false
50087
+ }],
49829
50088
  "networkQuality.getDeviceStats": [{
49830
50089
  name: "deviceId",
49831
50090
  form: "single",
@@ -49851,11 +50110,26 @@ Object.freeze({
49851
50110
  form: "single",
49852
50111
  optional: false
49853
50112
  }],
50113
+ "notifier.getStatus": [{
50114
+ name: "deviceId",
50115
+ form: "single",
50116
+ optional: false
50117
+ }],
49854
50118
  "notifier.send": [{
49855
50119
  name: "deviceId",
49856
50120
  form: "single",
49857
50121
  optional: false
49858
50122
  }],
50123
+ "numericSensor.getStatus": [{
50124
+ name: "deviceId",
50125
+ form: "single",
50126
+ optional: false
50127
+ }],
50128
+ "osd.getStatus": [{
50129
+ name: "deviceId",
50130
+ form: "single",
50131
+ optional: false
50132
+ }],
49859
50133
  "osd.setOverlay": [{
49860
50134
  name: "deviceId",
49861
50135
  form: "single",
@@ -49915,6 +50189,11 @@ Object.freeze({
49915
50189
  form: "single",
49916
50190
  optional: false
49917
50191
  }],
50192
+ "petFeeder.getStatus": [{
50193
+ name: "deviceId",
50194
+ form: "single",
50195
+ optional: false
50196
+ }],
49918
50197
  "petFeeder.markFoodReplenished": [{
49919
50198
  name: "deviceId",
49920
50199
  form: "single",
@@ -49950,6 +50229,11 @@ Object.freeze({
49950
50229
  form: "single",
49951
50230
  optional: false
49952
50231
  }],
50232
+ "pipelineAnalytics.applyDeviceSettingsPatch": [{
50233
+ name: "deviceId",
50234
+ form: "single",
50235
+ optional: false
50236
+ }],
49953
50237
  "pipelineAnalytics.clearTrackRelation": [{
49954
50238
  name: "deviceId",
49955
50239
  form: "single",
@@ -49990,6 +50274,16 @@ Object.freeze({
49990
50274
  form: "single",
49991
50275
  optional: false
49992
50276
  }],
50277
+ "pipelineAnalytics.getDeviceLiveContribution": [{
50278
+ name: "deviceId",
50279
+ form: "single",
50280
+ optional: false
50281
+ }],
50282
+ "pipelineAnalytics.getDeviceSettingsContribution": [{
50283
+ name: "deviceId",
50284
+ form: "single",
50285
+ optional: false
50286
+ }],
49993
50287
  "pipelineAnalytics.getEventDensity": [{
49994
50288
  name: "deviceId",
49995
50289
  form: "single",
@@ -50205,6 +50499,11 @@ Object.freeze({
50205
50499
  form: "single",
50206
50500
  optional: true
50207
50501
  }],
50502
+ "pipelineOrchestrator.applyDeviceSettingsPatch": [{
50503
+ name: "deviceId",
50504
+ form: "single",
50505
+ optional: false
50506
+ }],
50208
50507
  "pipelineOrchestrator.assignAudio": [{
50209
50508
  name: "deviceId",
50210
50509
  form: "single",
@@ -50250,6 +50549,16 @@ Object.freeze({
50250
50549
  form: "single",
50251
50550
  optional: false
50252
50551
  }],
50552
+ "pipelineOrchestrator.getDeviceLiveContribution": [{
50553
+ name: "deviceId",
50554
+ form: "single",
50555
+ optional: false
50556
+ }],
50557
+ "pipelineOrchestrator.getDeviceSettingsContribution": [{
50558
+ name: "deviceId",
50559
+ form: "single",
50560
+ optional: false
50561
+ }],
50253
50562
  "pipelineOrchestrator.getPipelineAssignment": [{
50254
50563
  name: "deviceId",
50255
50564
  form: "single",
@@ -50370,11 +50679,31 @@ Object.freeze({
50370
50679
  form: "single",
50371
50680
  optional: true
50372
50681
  }],
50682
+ "powerMeter.getStatus": [{
50683
+ name: "deviceId",
50684
+ form: "single",
50685
+ optional: false
50686
+ }],
50687
+ "presence.getStatus": [{
50688
+ name: "deviceId",
50689
+ form: "single",
50690
+ optional: false
50691
+ }],
50692
+ "pressureSensor.getStatus": [{
50693
+ name: "deviceId",
50694
+ form: "single",
50695
+ optional: false
50696
+ }],
50373
50697
  "privacyMask.getOptions": [{
50374
50698
  name: "deviceId",
50375
50699
  form: "single",
50376
50700
  optional: false
50377
50701
  }],
50702
+ "privacyMask.getStatus": [{
50703
+ name: "deviceId",
50704
+ form: "single",
50705
+ optional: false
50706
+ }],
50378
50707
  "privacyMask.setAudioEnabled": [{
50379
50708
  name: "deviceId",
50380
50709
  form: "single",
@@ -50425,6 +50754,11 @@ Object.freeze({
50425
50754
  form: "single",
50426
50755
  optional: false
50427
50756
  }],
50757
+ "ptz.getStatus": [{
50758
+ name: "deviceId",
50759
+ form: "single",
50760
+ optional: false
50761
+ }],
50428
50762
  "ptz.goHome": [{
50429
50763
  name: "deviceId",
50430
50764
  form: "single",
@@ -50515,6 +50849,11 @@ Object.freeze({
50515
50849
  form: "single",
50516
50850
  optional: false
50517
50851
  }],
50852
+ "recordingArchive.applyDeviceSettingsPatch": [{
50853
+ name: "deviceId",
50854
+ form: "single",
50855
+ optional: false
50856
+ }],
50518
50857
  "recordingArchive.deleteFootprint": [{
50519
50858
  name: "deviceId",
50520
50859
  form: "single",
@@ -50535,6 +50874,21 @@ Object.freeze({
50535
50874
  form: "single",
50536
50875
  optional: false
50537
50876
  }],
50877
+ "recordingArchive.getDeviceLiveContribution": [{
50878
+ name: "deviceId",
50879
+ form: "single",
50880
+ optional: false
50881
+ }],
50882
+ "recordingArchive.getDeviceSettingsContribution": [{
50883
+ name: "deviceId",
50884
+ form: "single",
50885
+ optional: false
50886
+ }],
50887
+ "recordingArchive.getStatus": [{
50888
+ name: "deviceId",
50889
+ form: "single",
50890
+ optional: false
50891
+ }],
50538
50892
  "recordingArchive.listOpsLog": [{
50539
50893
  name: "deviceId",
50540
50894
  form: "single",
@@ -50620,6 +50974,11 @@ Object.freeze({
50620
50974
  form: "single",
50621
50975
  optional: false
50622
50976
  }],
50977
+ "recordingOnboard.getStatus": [{
50978
+ name: "deviceId",
50979
+ form: "single",
50980
+ optional: false
50981
+ }],
50623
50982
  "recordingOnboard.setSettings": [{
50624
50983
  name: "deviceId",
50625
50984
  form: "single",
@@ -50650,6 +51009,11 @@ Object.freeze({
50650
51009
  form: "single",
50651
51010
  optional: false
50652
51011
  }],
51012
+ "sceneMonitor.getStatus": [{
51013
+ name: "deviceId",
51014
+ form: "single",
51015
+ optional: false
51016
+ }],
50653
51017
  "sceneMonitor.listScenes": [{
50654
51018
  name: "deviceId",
50655
51019
  form: "single",
@@ -50675,6 +51039,11 @@ Object.freeze({
50675
51039
  form: "single",
50676
51040
  optional: false
50677
51041
  }],
51042
+ "scriptRunner.getStatus": [{
51043
+ name: "deviceId",
51044
+ form: "single",
51045
+ optional: false
51046
+ }],
50678
51047
  "scriptRunner.run": [{
50679
51048
  name: "deviceId",
50680
51049
  form: "single",
@@ -50685,11 +51054,31 @@ Object.freeze({
50685
51054
  form: "single",
50686
51055
  optional: false
50687
51056
  }],
51057
+ "smoke.getStatus": [{
51058
+ name: "deviceId",
51059
+ form: "single",
51060
+ optional: false
51061
+ }],
51062
+ "snapshot.applyDeviceSettingsPatch": [{
51063
+ name: "deviceId",
51064
+ form: "single",
51065
+ optional: false
51066
+ }],
50688
51067
  "snapshot.getDebugState": [{
50689
51068
  name: "deviceId",
50690
51069
  form: "single",
50691
51070
  optional: false
50692
51071
  }],
51072
+ "snapshot.getDeviceLiveContribution": [{
51073
+ name: "deviceId",
51074
+ form: "single",
51075
+ optional: false
51076
+ }],
51077
+ "snapshot.getDeviceSettingsContribution": [{
51078
+ name: "deviceId",
51079
+ form: "single",
51080
+ optional: false
51081
+ }],
50693
51082
  "snapshot.getSnapshot": [{
50694
51083
  name: "deviceId",
50695
51084
  form: "single",
@@ -50706,6 +51095,11 @@ Object.freeze({
50706
51095
  form: "array",
50707
51096
  optional: false
50708
51097
  }],
51098
+ "snapshot.getStatus": [{
51099
+ name: "deviceId",
51100
+ form: "single",
51101
+ optional: false
51102
+ }],
50709
51103
  "snapshot.invalidateCache": [{
50710
51104
  name: "deviceId",
50711
51105
  form: "single",
@@ -50716,6 +51110,11 @@ Object.freeze({
50716
51110
  form: "single",
50717
51111
  optional: false
50718
51112
  }],
51113
+ "streamBroker.applyDeviceSettingsPatch": [{
51114
+ name: "deviceId",
51115
+ form: "single",
51116
+ optional: false
51117
+ }],
50719
51118
  "streamBroker.assignProfile": [{
50720
51119
  name: "deviceId",
50721
51120
  form: "single",
@@ -50731,6 +51130,16 @@ Object.freeze({
50731
51130
  form: "single",
50732
51131
  optional: false
50733
51132
  }],
51133
+ "streamBroker.getDeviceLiveContribution": [{
51134
+ name: "deviceId",
51135
+ form: "single",
51136
+ optional: false
51137
+ }],
51138
+ "streamBroker.getDeviceSettingsContribution": [{
51139
+ name: "deviceId",
51140
+ form: "single",
51141
+ optional: false
51142
+ }],
50734
51143
  "streamBroker.getStreamWithCodec": [{
50735
51144
  name: "deviceId",
50736
51145
  form: "single",
@@ -50791,16 +51200,46 @@ Object.freeze({
50791
51200
  form: "single",
50792
51201
  optional: false
50793
51202
  }],
51203
+ "streamParams.getStatus": [{
51204
+ name: "deviceId",
51205
+ form: "single",
51206
+ optional: false
51207
+ }],
50794
51208
  "streamParams.setProfile": [{
50795
51209
  name: "deviceId",
50796
51210
  form: "single",
50797
51211
  optional: false
50798
51212
  }],
51213
+ "switch.getStatus": [{
51214
+ name: "deviceId",
51215
+ form: "single",
51216
+ optional: false
51217
+ }],
50799
51218
  "switch.setState": [{
50800
51219
  name: "deviceId",
50801
51220
  form: "single",
50802
51221
  optional: false
50803
51222
  }],
51223
+ "tamper.getStatus": [{
51224
+ name: "deviceId",
51225
+ form: "single",
51226
+ optional: false
51227
+ }],
51228
+ "temperatureSensor.getStatus": [{
51229
+ name: "deviceId",
51230
+ form: "single",
51231
+ optional: false
51232
+ }],
51233
+ "update.getStatus": [{
51234
+ name: "deviceId",
51235
+ form: "single",
51236
+ optional: false
51237
+ }],
51238
+ "vacuumControl.getStatus": [{
51239
+ name: "deviceId",
51240
+ form: "single",
51241
+ optional: false
51242
+ }],
50804
51243
  "vacuumControl.locate": [{
50805
51244
  name: "deviceId",
50806
51245
  form: "single",
@@ -50836,6 +51275,11 @@ Object.freeze({
50836
51275
  form: "single",
50837
51276
  optional: false
50838
51277
  }],
51278
+ "valve.getStatus": [{
51279
+ name: "deviceId",
51280
+ form: "single",
51281
+ optional: false
51282
+ }],
50839
51283
  "valve.open": [{
50840
51284
  name: "deviceId",
50841
51285
  form: "single",
@@ -50851,6 +51295,11 @@ Object.freeze({
50851
51295
  form: "single",
50852
51296
  optional: false
50853
51297
  }],
51298
+ "vibration.getStatus": [{
51299
+ name: "deviceId",
51300
+ form: "single",
51301
+ optional: false
51302
+ }],
50854
51303
  "videoclips.dialClipStream": [{
50855
51304
  name: "deviceId",
50856
51305
  form: "single",
@@ -50886,6 +51335,11 @@ Object.freeze({
50886
51335
  form: "single",
50887
51336
  optional: false
50888
51337
  }],
51338
+ "waterHeater.getStatus": [{
51339
+ name: "deviceId",
51340
+ form: "single",
51341
+ optional: false
51342
+ }],
50889
51343
  "waterHeater.setAway": [{
50890
51344
  name: "deviceId",
50891
51345
  form: "single",
@@ -50901,6 +51355,11 @@ Object.freeze({
50901
51355
  form: "single",
50902
51356
  optional: false
50903
51357
  }],
51358
+ "weather.getStatus": [{
51359
+ name: "deviceId",
51360
+ form: "single",
51361
+ optional: false
51362
+ }],
50904
51363
  "webrtcSession.addIceCandidate": [{
50905
51364
  name: "deviceId",
50906
51365
  form: "single",
@@ -51638,7 +52097,7 @@ var PreviewTextField = string().max(200);
51638
52097
  * Whether the notification's preview is a STILL or a short animation.
51639
52098
  *
51640
52099
  * The operator's ask, verbatim: *"inviato come gif o video (come per le altre
51641
- * rule)"* — the other rules already offer an animated preview, and a ten-hour
52100
+ * rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
51642
52101
  * night reads better as three seconds of motion than as one frame of it. Both
51643
52102
  * modes get the SAME treatment (blurred frame, large centred title); `'gif'`
51644
52103
  * simply applies it to a dozen frames sampled across the render and assembles