@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.
- package/dist/addon.js +599 -140
- package/dist/addon.mjs +599 -140
- 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-
|
|
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
|
-
*
|
|
7512
|
-
*
|
|
7511
|
+
* THE table "which boolean of this device type counts as HIGH", and the
|
|
7512
|
+
* pure evaluator of its EDGE.
|
|
7513
7513
|
*
|
|
7514
|
-
*
|
|
7515
|
-
*
|
|
7516
|
-
*
|
|
7517
|
-
*
|
|
7518
|
-
*
|
|
7519
|
-
*
|
|
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
|
-
* ⚠
|
|
7522
|
-
*
|
|
7523
|
-
*
|
|
7524
|
-
*
|
|
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
|
-
*
|
|
9152
|
-
*
|
|
9153
|
+
* The FIRST-LEVEL macro classes: those an object detector emits and that
|
|
9154
|
+
* an operator can select.
|
|
9153
9155
|
*
|
|
9154
|
-
*
|
|
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`
|
|
9157
|
-
* `MACRO_LABELS` —
|
|
9158
|
-
* `package-detection`,
|
|
9159
|
-
*
|
|
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
|
-
*
|
|
9163
|
-
*
|
|
9164
|
-
* (`types/detection.ts`);
|
|
9165
|
-
* (`RecordingTriggers.objectClasses`)
|
|
9166
|
-
*
|
|
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
|
-
*
|
|
9232
|
-
*
|
|
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
|
|
9239
|
+
* True when `values` does not repeat an element.
|
|
9238
9240
|
*
|
|
9239
|
-
*
|
|
9240
|
-
*
|
|
9241
|
-
*
|
|
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
|
-
*
|
|
9250
|
-
*
|
|
9251
|
-
*
|
|
9252
|
-
*
|
|
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
|
-
*
|
|
9255
|
-
*
|
|
9256
|
-
* `minConfidence<Macro>`
|
|
9257
|
-
* (`source: 'onboard'`)
|
|
9258
|
-
*
|
|
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
|
-
*
|
|
9263
|
-
*
|
|
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
|
-
*
|
|
9267
|
-
*
|
|
9268
|
-
*
|
|
9269
|
-
*
|
|
9270
|
-
* device (D12) —
|
|
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
|
-
*
|
|
9273
|
-
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`)
|
|
9274
|
-
*
|
|
9275
|
-
*
|
|
9276
|
-
*
|
|
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-
|
|
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
|
|
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
|
|
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-
|
|
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"
|
|
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
|
-
*
|
|
19669
|
-
*
|
|
19670
|
-
*
|
|
19671
|
-
*
|
|
19672
|
-
*
|
|
19673
|
-
*
|
|
19674
|
-
*
|
|
19675
|
-
*
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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-
|
|
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
|