@camstack/addon-agent-ui 1.2.317 → 1.2.319
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/CHANGELOG.md +12 -0
- package/dist/.bundle-modules.json +19 -11
- package/dist/addon.js +384 -170
- package/dist/assets/{MotionZonesSettings-D5XMXmky.js → MotionZonesSettings-h0Q9BhTM.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-DEi5ksRJ.js → PrivacyMaskSettings-DDUr4O5T.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-BY-C2cHf.js → SceneMonitorEditor-CWm4_dTn.js} +1 -1
- package/dist/assets/index-D38ZZu5a.js +145 -0
- package/dist/assets/index-DCzD3MGc.css +2 -0
- package/dist/index.html +2 -2
- package/package.json +2 -2
- package/dist/assets/index-BV77JC4K.css +0 -2
- package/dist/assets/index-DMz4jMip.js +0 -127
package/dist/addon.js
CHANGED
|
@@ -786,7 +786,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
786
786
|
return EventCategory;
|
|
787
787
|
}({});
|
|
788
788
|
//#endregion
|
|
789
|
-
//#region ../types/dist/device-type-
|
|
789
|
+
//#region ../types/dist/device-type-D1fH5kaC.mjs
|
|
790
790
|
/**
|
|
791
791
|
import { errMsg } from '@camstack/types'
|
|
792
792
|
* Extract a human-readable message from an unknown error value.
|
|
@@ -1017,6 +1017,12 @@ var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
|
|
|
1017
1017
|
DeviceFeature["MediaPlayerPrevious"] = "media-player-previous";
|
|
1018
1018
|
/** Media player exposes stop distinct from pause. */
|
|
1019
1019
|
DeviceFeature["MediaPlayerStop"] = "media-player-stop";
|
|
1020
|
+
/** Media player exposes volume up / down in steps (an infrared TV has no level). */
|
|
1021
|
+
DeviceFeature["MediaPlayerVolumeStep"] = "media-player-volume-step";
|
|
1022
|
+
/** Media player exposes channel up / down in steps. */
|
|
1023
|
+
DeviceFeature["MediaPlayerChannelStep"] = "media-player-channel-step";
|
|
1024
|
+
/** Media player exposes power on / off. */
|
|
1025
|
+
DeviceFeature["MediaPlayerPower"] = "media-player-power";
|
|
1020
1026
|
/** Alarm panel requires a PIN code on arm/disarm. */
|
|
1021
1027
|
DeviceFeature["AlarmPinRequired"] = "alarm-pin-required";
|
|
1022
1028
|
/** Presence device carries GPS coordinates (lat/lng/accuracy) in
|
|
@@ -5843,7 +5849,7 @@ var ZodIssueCode = {
|
|
|
5843
5849
|
var ZodFirstPartyTypeKind;
|
|
5844
5850
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5845
5851
|
//#endregion
|
|
5846
|
-
//#region ../types/dist/sleep-
|
|
5852
|
+
//#region ../types/dist/sleep-DV4qxEyD.mjs
|
|
5847
5853
|
/**
|
|
5848
5854
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5849
5855
|
* window to float samples (D455).
|
|
@@ -5922,6 +5928,22 @@ function buildAlawTable() {
|
|
|
5922
5928
|
}
|
|
5923
5929
|
buildUlawTable();
|
|
5924
5930
|
buildAlawTable();
|
|
5931
|
+
/**
|
|
5932
|
+
* An addon whose own migrations did not apply refuses to initialise (D987). The error is typed
|
|
5933
|
+
* so a runner hosting several addons can tell "this addon is blocked" from a crash and keep its
|
|
5934
|
+
* co-located siblings running. Recognised by NAME and shape, never `instanceof`: a forked addon
|
|
5935
|
+
* bundles its own copy of this module, so the class the runner sees is not the one that threw.
|
|
5936
|
+
*/
|
|
5937
|
+
var MIGRATIONS_BLOCKED_ERROR_NAME = "AddonMigrationsBlockedError";
|
|
5938
|
+
var AddonMigrationsBlockedError = class extends Error {
|
|
5939
|
+
/** The ledger ids that did not apply and block the owner. */
|
|
5940
|
+
migrationIds;
|
|
5941
|
+
constructor(migrationIds) {
|
|
5942
|
+
super(`migration(s) ${migrationIds.join(", ")} did not apply and block this addon — fix or retry them (migrations.retry), then restart it`);
|
|
5943
|
+
this.name = MIGRATIONS_BLOCKED_ERROR_NAME;
|
|
5944
|
+
this.migrationIds = migrationIds;
|
|
5945
|
+
}
|
|
5946
|
+
};
|
|
5925
5947
|
/** Is this field's stored value a credential? */
|
|
5926
5948
|
function isSecretConfigField(field) {
|
|
5927
5949
|
if (field.type === "password") return true;
|
|
@@ -7528,7 +7550,7 @@ var BaseAddon = class {
|
|
|
7528
7550
|
startMigration: (input) => api.startMigration.mutate(input),
|
|
7529
7551
|
finishMigration: (input) => api.finishMigration.mutate(input)
|
|
7530
7552
|
}, migrations, this.ctx.logger);
|
|
7531
|
-
if (report.blockOwner.length > 0) throw new
|
|
7553
|
+
if (report.blockOwner.length > 0) throw new AddonMigrationsBlockedError(report.blockOwner);
|
|
7532
7554
|
return report;
|
|
7533
7555
|
}
|
|
7534
7556
|
/**
|
|
@@ -7868,6 +7890,10 @@ var BaseAddon = class {
|
|
|
7868
7890
|
const stored = keychain ? await this.readAddonStoreWithRetry() : {};
|
|
7869
7891
|
const patch = {};
|
|
7870
7892
|
for (const key of keys) {
|
|
7893
|
+
if (tree.get(key)?.kind === "array") {
|
|
7894
|
+
patch[key] = [];
|
|
7895
|
+
continue;
|
|
7896
|
+
}
|
|
7871
7897
|
const keychainStored = tree.has(key) || collectSecretMarkerRefs(stored[key]).length > 0;
|
|
7872
7898
|
patch[key] = keychain && keychainStored ? SECRET_CLEAR : "";
|
|
7873
7899
|
}
|
|
@@ -11283,7 +11309,7 @@ object({
|
|
|
11283
11309
|
params: record(string(), union([string(), number()])).optional()
|
|
11284
11310
|
});
|
|
11285
11311
|
//#endregion
|
|
11286
|
-
//#region ../types/dist/composition-
|
|
11312
|
+
//#region ../types/dist/composition-CD1GdFuv.mjs
|
|
11287
11313
|
/**
|
|
11288
11314
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
11289
11315
|
*
|
|
@@ -12420,7 +12446,14 @@ var CompositionForwardCommandSchema = object({
|
|
|
12420
12446
|
method: string().min(1),
|
|
12421
12447
|
args: record(string().min(1), CompositionForwardArgSchema).optional()
|
|
12422
12448
|
});
|
|
12423
|
-
var CompositionCommandTargetSchema = discriminatedUnion("kind", [
|
|
12449
|
+
var CompositionCommandTargetSchema = discriminatedUnion("kind", [
|
|
12450
|
+
CompositionForwardCommandSchema,
|
|
12451
|
+
CompositionCodeSourceSchema,
|
|
12452
|
+
object({
|
|
12453
|
+
kind: literal("extension"),
|
|
12454
|
+
target: literal("remote")
|
|
12455
|
+
})
|
|
12456
|
+
]);
|
|
12424
12457
|
/** An item key inside an item-array cap (`consumables.items[<key>]`). */
|
|
12425
12458
|
var COMPOSITION_ITEM_KEY_RE = /^[a-z0-9][a-z0-9-]{0,47}$/;
|
|
12426
12459
|
/**
|
|
@@ -12465,7 +12498,7 @@ var CompositionSchema = object({
|
|
|
12465
12498
|
kind: literal("existing"),
|
|
12466
12499
|
device: CompositionSourceRefSchema
|
|
12467
12500
|
})]),
|
|
12468
|
-
features: array(CompositionFeatureSchema).min(
|
|
12501
|
+
features: array(CompositionFeatureSchema).min(0).max(16),
|
|
12469
12502
|
/**
|
|
12470
12503
|
* Present when the block is a helper template. Absent on a free
|
|
12471
12504
|
* composition (the room example, device 4603). The editor reads this,
|
|
@@ -18927,6 +18960,48 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
18927
18960
|
scope: "device",
|
|
18928
18961
|
noun: t("Media player", "Lettore multimediale"),
|
|
18929
18962
|
actions: [
|
|
18963
|
+
{
|
|
18964
|
+
id: "media.turnOn",
|
|
18965
|
+
method: "turnOn",
|
|
18966
|
+
label: t("Turn on", "Accendi"),
|
|
18967
|
+
phrase: t("Turn on {device}", "Accendi {device}"),
|
|
18968
|
+
icon: "power"
|
|
18969
|
+
},
|
|
18970
|
+
{
|
|
18971
|
+
id: "media.turnOff",
|
|
18972
|
+
method: "turnOff",
|
|
18973
|
+
label: t("Turn off", "Spegni"),
|
|
18974
|
+
phrase: t("Turn off {device}", "Spegni {device}"),
|
|
18975
|
+
icon: "power"
|
|
18976
|
+
},
|
|
18977
|
+
{
|
|
18978
|
+
id: "media.volumeUp",
|
|
18979
|
+
method: "volumeUp",
|
|
18980
|
+
label: t("Volume up", "Alza il volume"),
|
|
18981
|
+
phrase: t("Raise the volume of {device}", "Alza il volume di {device}"),
|
|
18982
|
+
icon: "volume-2"
|
|
18983
|
+
},
|
|
18984
|
+
{
|
|
18985
|
+
id: "media.volumeDown",
|
|
18986
|
+
method: "volumeDown",
|
|
18987
|
+
label: t("Volume down", "Abbassa il volume"),
|
|
18988
|
+
phrase: t("Lower the volume of {device}", "Abbassa il volume di {device}"),
|
|
18989
|
+
icon: "volume-2"
|
|
18990
|
+
},
|
|
18991
|
+
{
|
|
18992
|
+
id: "media.channelUp",
|
|
18993
|
+
method: "channelUp",
|
|
18994
|
+
label: t("Channel up", "Canale successivo"),
|
|
18995
|
+
phrase: t("Go to the next channel on {device}", "Passa al canale successivo su {device}"),
|
|
18996
|
+
icon: "skip-forward"
|
|
18997
|
+
},
|
|
18998
|
+
{
|
|
18999
|
+
id: "media.channelDown",
|
|
19000
|
+
method: "channelDown",
|
|
19001
|
+
label: t("Channel down", "Canale precedente"),
|
|
19002
|
+
phrase: t("Go to the previous channel on {device}", "Torna al canale precedente su {device}"),
|
|
19003
|
+
icon: "skip-back"
|
|
19004
|
+
},
|
|
18930
19005
|
{
|
|
18931
19006
|
id: "media.play",
|
|
18932
19007
|
method: "play",
|
|
@@ -47377,6 +47452,188 @@ DeviceType.Control, method(object({
|
|
|
47377
47452
|
kind: "mutation",
|
|
47378
47453
|
auth: "protected"
|
|
47379
47454
|
});
|
|
47455
|
+
/**
|
|
47456
|
+
* Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
|
|
47457
|
+
* Apple TV, Spotify, Roku, generic OTT receivers, …) on
|
|
47458
|
+
* `DeviceType.MediaPlayer`. Disjoint from the camera streaming
|
|
47459
|
+
* surface — those use `DeviceType.Camera` + the broker pipeline.
|
|
47460
|
+
*
|
|
47461
|
+
* The cap declares a wide method surface; not every backend supports
|
|
47462
|
+
* every method. Drivers signal sub-capability via the
|
|
47463
|
+
* `DeviceFeature.MediaPlayerXxx` flags (paired one-to-one with the
|
|
47464
|
+
* corresponding method) so the UI gates buttons without a slice
|
|
47465
|
+
* fetch — same pattern as `PanTiltZoom` for cameras.
|
|
47466
|
+
*/
|
|
47467
|
+
var MediaPlayerStateSchema = _enum([
|
|
47468
|
+
"off",
|
|
47469
|
+
"on",
|
|
47470
|
+
"idle",
|
|
47471
|
+
"playing",
|
|
47472
|
+
"paused",
|
|
47473
|
+
"buffering",
|
|
47474
|
+
"standby"
|
|
47475
|
+
]);
|
|
47476
|
+
var MediaPlayerRepeatSchema = _enum([
|
|
47477
|
+
"off",
|
|
47478
|
+
"all",
|
|
47479
|
+
"one"
|
|
47480
|
+
]);
|
|
47481
|
+
var MediaInfoSchema = object({
|
|
47482
|
+
/** Free-form media kind (`music`, `tvshow`, `movie`, `app`, `channel`,
|
|
47483
|
+
* `podcast`, …). */
|
|
47484
|
+
type: string(),
|
|
47485
|
+
/** Human-readable title. */
|
|
47486
|
+
title: string(),
|
|
47487
|
+
/** Optional artist / channel / station label. */
|
|
47488
|
+
artist: string().optional(),
|
|
47489
|
+
/** Optional album / season / show name. */
|
|
47490
|
+
album: string().optional(),
|
|
47491
|
+
/** Optional cover-art / thumbnail URL. */
|
|
47492
|
+
imageUrl: string().optional()
|
|
47493
|
+
});
|
|
47494
|
+
/**
|
|
47495
|
+
* Where `state`, `volumeLevel`, `isMuted` and `source` come from. `reported`:
|
|
47496
|
+
* the device said so. `assumed`: the driver has no feedback (infrared) and
|
|
47497
|
+
* tracks what it last SENT; it moves only after a send was accepted, and a
|
|
47498
|
+
* human at the real remote makes it wrong. A UI shows an assumed value as a
|
|
47499
|
+
* guess, never as a reading.
|
|
47500
|
+
*/
|
|
47501
|
+
var MediaPlayerStateSourceSchema = _enum(["reported", "assumed"]);
|
|
47502
|
+
/** The fields of a media-player status a driver can only guess. */
|
|
47503
|
+
var MediaPlayerAssumedFieldSchema = _enum([
|
|
47504
|
+
"state",
|
|
47505
|
+
"volumeLevel",
|
|
47506
|
+
"isMuted",
|
|
47507
|
+
"source"
|
|
47508
|
+
]);
|
|
47509
|
+
var MediaPlayerStatusSchema = object({
|
|
47510
|
+
/** Playback lifecycle state. */
|
|
47511
|
+
state: MediaPlayerStateSchema,
|
|
47512
|
+
/**
|
|
47513
|
+
* Whether the state fields are readings or the driver's own bookkeeping.
|
|
47514
|
+
* A slice written before this field existed parses as `reported`.
|
|
47515
|
+
*/
|
|
47516
|
+
stateSource: MediaPlayerStateSourceSchema.default("reported"),
|
|
47517
|
+
/**
|
|
47518
|
+
* Which fields are the driver's own guess. `stateSource` is `assumed` when
|
|
47519
|
+
* this is not empty; a field not listed here is a reading even then (power
|
|
47520
|
+
* from a running-state source, mute guessed from the last send).
|
|
47521
|
+
*/
|
|
47522
|
+
assumedFields: array(MediaPlayerAssumedFieldSchema).default([]),
|
|
47523
|
+
/** Volume as 0..100 inclusive. Null when the device has no volume
|
|
47524
|
+
* surface. Pair with `DeviceFeature.MediaPlayerVolume`. */
|
|
47525
|
+
volumeLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
47526
|
+
/** Mute toggle distinct from volume=0. Null when no mute surface.
|
|
47527
|
+
* Pair with `DeviceFeature.MediaPlayerMute`. */
|
|
47528
|
+
isMuted: boolean().nullable(),
|
|
47529
|
+
/** Active source / input. Empty when no source surface. */
|
|
47530
|
+
source: string(),
|
|
47531
|
+
/** Selectable sources. Empty when no source surface.
|
|
47532
|
+
* Pair with `DeviceFeature.MediaPlayerSelectSource`. */
|
|
47533
|
+
availableSources: array(string()),
|
|
47534
|
+
/** Currently-playing media info. Null when nothing is playing. */
|
|
47535
|
+
currentMedia: MediaInfoSchema.nullable(),
|
|
47536
|
+
/** Current playback position in ms. Null when not seekable or
|
|
47537
|
+
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
47538
|
+
position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
47539
|
+
/** Total duration of the current media in ms. Null when unknown
|
|
47540
|
+
* (live stream) or nothing is playing. */
|
|
47541
|
+
duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
47542
|
+
/** Shuffle toggle. Null when no shuffle surface.
|
|
47543
|
+
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
47544
|
+
shuffle: boolean().nullable(),
|
|
47545
|
+
/** Repeat mode. Null when no repeat surface.
|
|
47546
|
+
* Pair with `DeviceFeature.MediaPlayerRepeat`. */
|
|
47547
|
+
repeat: MediaPlayerRepeatSchema.nullable(),
|
|
47548
|
+
/** Ms epoch when the slice was last updated. */
|
|
47549
|
+
lastChangedAt: number()
|
|
47550
|
+
});
|
|
47551
|
+
var stepInput = object({
|
|
47552
|
+
deviceId: number().int().nonnegative(),
|
|
47553
|
+
/** How many presses: the caller's count (Alexa `volumeSteps`, `channelCount`). */
|
|
47554
|
+
steps: number().int().min(1).max(50).default(1)
|
|
47555
|
+
});
|
|
47556
|
+
var deviceOnly = object({ deviceId: number().int().nonnegative() });
|
|
47557
|
+
DeviceType.MediaPlayer, method(deviceOnly, _void(), {
|
|
47558
|
+
kind: "mutation",
|
|
47559
|
+
auth: "protected"
|
|
47560
|
+
}), method(deviceOnly, _void(), {
|
|
47561
|
+
kind: "mutation",
|
|
47562
|
+
auth: "protected"
|
|
47563
|
+
}), method(stepInput, _void(), {
|
|
47564
|
+
kind: "mutation",
|
|
47565
|
+
auth: "protected"
|
|
47566
|
+
}), method(stepInput, _void(), {
|
|
47567
|
+
kind: "mutation",
|
|
47568
|
+
auth: "protected"
|
|
47569
|
+
}), method(stepInput, _void(), {
|
|
47570
|
+
kind: "mutation",
|
|
47571
|
+
auth: "protected"
|
|
47572
|
+
}), method(stepInput, _void(), {
|
|
47573
|
+
kind: "mutation",
|
|
47574
|
+
auth: "protected"
|
|
47575
|
+
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
47576
|
+
kind: "mutation",
|
|
47577
|
+
auth: "protected"
|
|
47578
|
+
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
47579
|
+
kind: "mutation",
|
|
47580
|
+
auth: "protected"
|
|
47581
|
+
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
47582
|
+
kind: "mutation",
|
|
47583
|
+
auth: "protected"
|
|
47584
|
+
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
47585
|
+
kind: "mutation",
|
|
47586
|
+
auth: "protected"
|
|
47587
|
+
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
47588
|
+
kind: "mutation",
|
|
47589
|
+
auth: "protected"
|
|
47590
|
+
}), method(object({
|
|
47591
|
+
deviceId: number().int().nonnegative(),
|
|
47592
|
+
position: number().int().nonnegative()
|
|
47593
|
+
}), _void(), {
|
|
47594
|
+
kind: "mutation",
|
|
47595
|
+
auth: "protected"
|
|
47596
|
+
}), method(object({
|
|
47597
|
+
deviceId: number().int().nonnegative(),
|
|
47598
|
+
volumeLevel: number().min(0).max(100)
|
|
47599
|
+
}), _void(), {
|
|
47600
|
+
kind: "mutation",
|
|
47601
|
+
auth: "protected"
|
|
47602
|
+
}), method(object({
|
|
47603
|
+
deviceId: number().int().nonnegative(),
|
|
47604
|
+
muted: boolean()
|
|
47605
|
+
}), _void(), {
|
|
47606
|
+
kind: "mutation",
|
|
47607
|
+
auth: "protected"
|
|
47608
|
+
}), method(object({
|
|
47609
|
+
deviceId: number().int().nonnegative(),
|
|
47610
|
+
shuffle: boolean()
|
|
47611
|
+
}), _void(), {
|
|
47612
|
+
kind: "mutation",
|
|
47613
|
+
auth: "protected"
|
|
47614
|
+
}), method(object({
|
|
47615
|
+
deviceId: number().int().nonnegative(),
|
|
47616
|
+
repeat: MediaPlayerRepeatSchema
|
|
47617
|
+
}), _void(), {
|
|
47618
|
+
kind: "mutation",
|
|
47619
|
+
auth: "protected"
|
|
47620
|
+
}), method(object({
|
|
47621
|
+
deviceId: number().int().nonnegative(),
|
|
47622
|
+
source: string().min(1)
|
|
47623
|
+
}), _void(), {
|
|
47624
|
+
kind: "mutation",
|
|
47625
|
+
auth: "protected"
|
|
47626
|
+
}), method(object({
|
|
47627
|
+
deviceId: number().int().nonnegative(),
|
|
47628
|
+
/** Media identifier / URL. */
|
|
47629
|
+
mediaId: string().min(1),
|
|
47630
|
+
/** Media kind (`music`, `tvshow`, `movie`, `app`, …) — provider
|
|
47631
|
+
* passes it through to the upstream service. */
|
|
47632
|
+
mediaType: string().min(1)
|
|
47633
|
+
}), _void(), {
|
|
47634
|
+
kind: "mutation",
|
|
47635
|
+
auth: "protected"
|
|
47636
|
+
});
|
|
47380
47637
|
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Heater, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Fan, DeviceType.Lock, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Heater, DeviceType.Gateway, DeviceType.Hub, DeviceType.Camera, DeviceType.Sensor, DeviceType.MediaPlayer, DeviceType.Vacuum, DeviceType.Generic, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.PetFountain, DeviceType.Fan, DeviceType.Humidifier, DeviceType.Climate, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder, DeviceType.Heater;
|
|
47381
47638
|
var NUMBER = {
|
|
47382
47639
|
kind: "fixed",
|
|
@@ -54859,164 +55116,6 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
54859
55116
|
]);
|
|
54860
55117
|
method(_void(), array(LoginMethodContributionSchema).readonly());
|
|
54861
55118
|
/**
|
|
54862
|
-
* Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
|
|
54863
|
-
* Apple TV, Spotify, Roku, generic OTT receivers, …) on
|
|
54864
|
-
* `DeviceType.MediaPlayer`. Disjoint from the camera streaming
|
|
54865
|
-
* surface — those use `DeviceType.Camera` + the broker pipeline.
|
|
54866
|
-
*
|
|
54867
|
-
* The cap declares a wide method surface; not every backend supports
|
|
54868
|
-
* every method. Drivers signal sub-capability via the
|
|
54869
|
-
* `DeviceFeature.MediaPlayerXxx` flags (paired one-to-one with the
|
|
54870
|
-
* corresponding method) so the UI gates buttons without a slice
|
|
54871
|
-
* fetch — same pattern as `PanTiltZoom` for cameras.
|
|
54872
|
-
*/
|
|
54873
|
-
var MediaPlayerStateSchema = _enum([
|
|
54874
|
-
"off",
|
|
54875
|
-
"on",
|
|
54876
|
-
"idle",
|
|
54877
|
-
"playing",
|
|
54878
|
-
"paused",
|
|
54879
|
-
"buffering",
|
|
54880
|
-
"standby"
|
|
54881
|
-
]);
|
|
54882
|
-
var MediaPlayerRepeatSchema = _enum([
|
|
54883
|
-
"off",
|
|
54884
|
-
"all",
|
|
54885
|
-
"one"
|
|
54886
|
-
]);
|
|
54887
|
-
var MediaInfoSchema = object({
|
|
54888
|
-
/** Free-form media kind (`music`, `tvshow`, `movie`, `app`, `channel`,
|
|
54889
|
-
* `podcast`, …). */
|
|
54890
|
-
type: string(),
|
|
54891
|
-
/** Human-readable title. */
|
|
54892
|
-
title: string(),
|
|
54893
|
-
/** Optional artist / channel / station label. */
|
|
54894
|
-
artist: string().optional(),
|
|
54895
|
-
/** Optional album / season / show name. */
|
|
54896
|
-
album: string().optional(),
|
|
54897
|
-
/** Optional cover-art / thumbnail URL. */
|
|
54898
|
-
imageUrl: string().optional()
|
|
54899
|
-
});
|
|
54900
|
-
/**
|
|
54901
|
-
* Where `state`, `volumeLevel`, `isMuted` and `source` come from. `reported`:
|
|
54902
|
-
* the device said so. `assumed`: the driver has no feedback (infrared) and
|
|
54903
|
-
* tracks what it last SENT; it moves only after a send was accepted, and a
|
|
54904
|
-
* human at the real remote makes it wrong. A UI shows an assumed value as a
|
|
54905
|
-
* guess, never as a reading.
|
|
54906
|
-
*/
|
|
54907
|
-
var MediaPlayerStateSourceSchema = _enum(["reported", "assumed"]);
|
|
54908
|
-
/** The fields of a media-player status a driver can only guess. */
|
|
54909
|
-
var MediaPlayerAssumedFieldSchema = _enum([
|
|
54910
|
-
"state",
|
|
54911
|
-
"volumeLevel",
|
|
54912
|
-
"isMuted",
|
|
54913
|
-
"source"
|
|
54914
|
-
]);
|
|
54915
|
-
object({
|
|
54916
|
-
/** Playback lifecycle state. */
|
|
54917
|
-
state: MediaPlayerStateSchema,
|
|
54918
|
-
/**
|
|
54919
|
-
* Whether the state fields are readings or the driver's own bookkeeping.
|
|
54920
|
-
* A slice written before this field existed parses as `reported`.
|
|
54921
|
-
*/
|
|
54922
|
-
stateSource: MediaPlayerStateSourceSchema.default("reported"),
|
|
54923
|
-
/**
|
|
54924
|
-
* Which fields are the driver's own guess. `stateSource` is `assumed` when
|
|
54925
|
-
* this is not empty; a field not listed here is a reading even then (power
|
|
54926
|
-
* from a running-state source, mute guessed from the last send).
|
|
54927
|
-
*/
|
|
54928
|
-
assumedFields: array(MediaPlayerAssumedFieldSchema).default([]),
|
|
54929
|
-
/** Volume as 0..100 inclusive. Null when the device has no volume
|
|
54930
|
-
* surface. Pair with `DeviceFeature.MediaPlayerVolume`. */
|
|
54931
|
-
volumeLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
54932
|
-
/** Mute toggle distinct from volume=0. Null when no mute surface.
|
|
54933
|
-
* Pair with `DeviceFeature.MediaPlayerMute`. */
|
|
54934
|
-
isMuted: boolean().nullable(),
|
|
54935
|
-
/** Active source / input. Empty when no source surface. */
|
|
54936
|
-
source: string(),
|
|
54937
|
-
/** Selectable sources. Empty when no source surface.
|
|
54938
|
-
* Pair with `DeviceFeature.MediaPlayerSelectSource`. */
|
|
54939
|
-
availableSources: array(string()),
|
|
54940
|
-
/** Currently-playing media info. Null when nothing is playing. */
|
|
54941
|
-
currentMedia: MediaInfoSchema.nullable(),
|
|
54942
|
-
/** Current playback position in ms. Null when not seekable or
|
|
54943
|
-
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
54944
|
-
position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
54945
|
-
/** Total duration of the current media in ms. Null when unknown
|
|
54946
|
-
* (live stream) or nothing is playing. */
|
|
54947
|
-
duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
54948
|
-
/** Shuffle toggle. Null when no shuffle surface.
|
|
54949
|
-
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
54950
|
-
shuffle: boolean().nullable(),
|
|
54951
|
-
/** Repeat mode. Null when no repeat surface.
|
|
54952
|
-
* Pair with `DeviceFeature.MediaPlayerRepeat`. */
|
|
54953
|
-
repeat: MediaPlayerRepeatSchema.nullable(),
|
|
54954
|
-
/** Ms epoch when the slice was last updated. */
|
|
54955
|
-
lastChangedAt: number()
|
|
54956
|
-
});
|
|
54957
|
-
DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
54958
|
-
kind: "mutation",
|
|
54959
|
-
auth: "protected"
|
|
54960
|
-
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
54961
|
-
kind: "mutation",
|
|
54962
|
-
auth: "protected"
|
|
54963
|
-
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
54964
|
-
kind: "mutation",
|
|
54965
|
-
auth: "protected"
|
|
54966
|
-
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
54967
|
-
kind: "mutation",
|
|
54968
|
-
auth: "protected"
|
|
54969
|
-
}), method(object({ deviceId: number().int().nonnegative() }), _void(), {
|
|
54970
|
-
kind: "mutation",
|
|
54971
|
-
auth: "protected"
|
|
54972
|
-
}), method(object({
|
|
54973
|
-
deviceId: number().int().nonnegative(),
|
|
54974
|
-
position: number().int().nonnegative()
|
|
54975
|
-
}), _void(), {
|
|
54976
|
-
kind: "mutation",
|
|
54977
|
-
auth: "protected"
|
|
54978
|
-
}), method(object({
|
|
54979
|
-
deviceId: number().int().nonnegative(),
|
|
54980
|
-
volumeLevel: number().min(0).max(100)
|
|
54981
|
-
}), _void(), {
|
|
54982
|
-
kind: "mutation",
|
|
54983
|
-
auth: "protected"
|
|
54984
|
-
}), method(object({
|
|
54985
|
-
deviceId: number().int().nonnegative(),
|
|
54986
|
-
muted: boolean()
|
|
54987
|
-
}), _void(), {
|
|
54988
|
-
kind: "mutation",
|
|
54989
|
-
auth: "protected"
|
|
54990
|
-
}), method(object({
|
|
54991
|
-
deviceId: number().int().nonnegative(),
|
|
54992
|
-
shuffle: boolean()
|
|
54993
|
-
}), _void(), {
|
|
54994
|
-
kind: "mutation",
|
|
54995
|
-
auth: "protected"
|
|
54996
|
-
}), method(object({
|
|
54997
|
-
deviceId: number().int().nonnegative(),
|
|
54998
|
-
repeat: MediaPlayerRepeatSchema
|
|
54999
|
-
}), _void(), {
|
|
55000
|
-
kind: "mutation",
|
|
55001
|
-
auth: "protected"
|
|
55002
|
-
}), method(object({
|
|
55003
|
-
deviceId: number().int().nonnegative(),
|
|
55004
|
-
source: string().min(1)
|
|
55005
|
-
}), _void(), {
|
|
55006
|
-
kind: "mutation",
|
|
55007
|
-
auth: "protected"
|
|
55008
|
-
}), method(object({
|
|
55009
|
-
deviceId: number().int().nonnegative(),
|
|
55010
|
-
/** Media identifier / URL. */
|
|
55011
|
-
mediaId: string().min(1),
|
|
55012
|
-
/** Media kind (`music`, `tvshow`, `movie`, `app`, …) — provider
|
|
55013
|
-
* passes it through to the upstream service. */
|
|
55014
|
-
mediaType: string().min(1)
|
|
55015
|
-
}), _void(), {
|
|
55016
|
-
kind: "mutation",
|
|
55017
|
-
auth: "protected"
|
|
55018
|
-
});
|
|
55019
|
-
/**
|
|
55020
55119
|
* mesh-network — collection cap for mesh-VPN providers.
|
|
55021
55120
|
*
|
|
55022
55121
|
* Different shape from `network-access` (public tunnels):
|
|
@@ -63309,6 +63408,21 @@ var NcTemplateVarKindSchema = _enum([
|
|
|
63309
63408
|
"sound",
|
|
63310
63409
|
"system"
|
|
63311
63410
|
]);
|
|
63411
|
+
/**
|
|
63412
|
+
* The default title/body a rule of one SITUATION is delivered with when the
|
|
63413
|
+
* operator wrote no template — served so an editor can pre-fill it (and the
|
|
63414
|
+
* operator can rebuild it from placeholders) instead of starting from a blank
|
|
63415
|
+
* box that, once saved, silently replaces it. `id` names the situation inside
|
|
63416
|
+
* a rule `kind`: `appliance-cycle` is a `sensor` rule whose device is an
|
|
63417
|
+
* appliance finishing a cycle. Texts are raw templates (`{{var}}` intact), in
|
|
63418
|
+
* the hub's current language and with its overrides applied.
|
|
63419
|
+
*/
|
|
63420
|
+
var NcTemplateDefaultSchema = object({
|
|
63421
|
+
id: _enum(["appliance-cycle"]),
|
|
63422
|
+
kind: NcRuleKindSchema,
|
|
63423
|
+
title: string(),
|
|
63424
|
+
body: string()
|
|
63425
|
+
});
|
|
63312
63426
|
/** Which producer renders a template: an ordinary rule, a timelapse, a digest. */
|
|
63313
63427
|
var NcTemplateFamilySchema = _enum([
|
|
63314
63428
|
"rule",
|
|
@@ -64164,7 +64278,11 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
64164
64278
|
}), method(object({}), object({
|
|
64165
64279
|
catalog: array(NcConditionDescriptorSchema),
|
|
64166
64280
|
taxonomy: NcTaxonomySchema.optional()
|
|
64167
|
-
})), method(object({}), object({
|
|
64281
|
+
})), method(object({}), object({
|
|
64282
|
+
vars: array(NcTemplateVarDescriptorSchema),
|
|
64283
|
+
/** Per-situation default texts; absent on a hub that predates them. */
|
|
64284
|
+
defaults: array(NcTemplateDefaultSchema)
|
|
64285
|
+
})), method(NcTemplatePreviewInputSchema, NcTemplatePreviewSchema, {
|
|
64168
64286
|
kind: "mutation",
|
|
64169
64287
|
access: "view"
|
|
64170
64288
|
}), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({}), NcRuleLastRunsSchema, { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
@@ -69636,7 +69754,13 @@ var RemoteMediaCommandSchema = _enum([
|
|
|
69636
69754
|
"next",
|
|
69637
69755
|
"previous",
|
|
69638
69756
|
"setMute",
|
|
69639
|
-
"selectSource"
|
|
69757
|
+
"selectSource",
|
|
69758
|
+
"turnOn",
|
|
69759
|
+
"turnOff",
|
|
69760
|
+
"volumeUp",
|
|
69761
|
+
"volumeDown",
|
|
69762
|
+
"channelUp",
|
|
69763
|
+
"channelDown"
|
|
69640
69764
|
]);
|
|
69641
69765
|
/** A send result, or `not-routed`: the role is not bound, so the native cap answers. */
|
|
69642
69766
|
var RemoteMediaCommandResultSchema = discriminatedUnion("status", [...RemoteSendResultSchema.options, object({ status: literal("not-routed") })]);
|
|
@@ -69657,7 +69781,7 @@ method(deviceInput, RemoteConfigSchema, { auth: "admin" }), method(deviceInput.e
|
|
|
69657
69781
|
}), RemoteSendResultSchema, {
|
|
69658
69782
|
kind: "mutation",
|
|
69659
69783
|
auth: "protected"
|
|
69660
|
-
}), method(deviceInput.extend({
|
|
69784
|
+
}), method(deviceInput, MediaPlayerStatusSchema.nullable(), { auth: "protected" }), method(deviceInput.extend({
|
|
69661
69785
|
command: RemoteMediaCommandSchema,
|
|
69662
69786
|
muted: boolean().optional(),
|
|
69663
69787
|
source: string().optional(),
|
|
@@ -71485,7 +71609,11 @@ object({
|
|
|
71485
71609
|
});
|
|
71486
71610
|
Object.values(DeviceType), method(_void(), array(StreamSignalSchema).readonly());
|
|
71487
71611
|
object({
|
|
71488
|
-
|
|
71612
|
+
/**
|
|
71613
|
+
* `null` = the device has never reported its state (a measurement that
|
|
71614
|
+
* has not happened is unknown, never `false`).
|
|
71615
|
+
*/
|
|
71616
|
+
on: boolean().nullable().meta({ label: "On" }),
|
|
71489
71617
|
/** Ms epoch of the last state change. Useful for UI "X minutes ago". */
|
|
71490
71618
|
lastChangedAt: number()
|
|
71491
71619
|
});
|
|
@@ -71497,7 +71625,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceTyp
|
|
|
71497
71625
|
auth: "protected"
|
|
71498
71626
|
}), object({
|
|
71499
71627
|
deviceId: number(),
|
|
71500
|
-
on: boolean(),
|
|
71628
|
+
on: boolean().nullable(),
|
|
71501
71629
|
lastChangedAt: number()
|
|
71502
71630
|
});
|
|
71503
71631
|
/** C0 controls, DEL and the C1 range: none of them belongs in a name. */
|
|
@@ -74509,6 +74637,7 @@ function buildDescriptor(capName, kind) {
|
|
|
74509
74637
|
* contributes one entry per bound cap present in this map.
|
|
74510
74638
|
*/
|
|
74511
74639
|
var EVENT_KIND_BY_CAP = Object.freeze(Object.fromEntries(Object.entries(CAP_TO_KIND).map(([capName, kind]) => [capName, buildDescriptor(capName, kind)])));
|
|
74640
|
+
DeviceFeature.MediaPlayerPower, DeviceFeature.MediaPlayerVolumeStep, DeviceFeature.MediaPlayerChannelStep, DeviceFeature.MediaPlayerMute, DeviceFeature.MediaPlayerStop, DeviceFeature.MediaPlayerNext, DeviceFeature.MediaPlayerPrevious;
|
|
74512
74641
|
var btn = (idSuffix, row, col, init) => ({
|
|
74513
74642
|
idSuffix,
|
|
74514
74643
|
row,
|
|
@@ -79123,6 +79252,20 @@ Object.freeze({
|
|
|
79123
79252
|
access: "view",
|
|
79124
79253
|
role: "admin"
|
|
79125
79254
|
},
|
|
79255
|
+
"mediaPlayer.channelDown": {
|
|
79256
|
+
capName: "media-player",
|
|
79257
|
+
capScope: "device",
|
|
79258
|
+
addonId: null,
|
|
79259
|
+
access: "create",
|
|
79260
|
+
role: "viewer"
|
|
79261
|
+
},
|
|
79262
|
+
"mediaPlayer.channelUp": {
|
|
79263
|
+
capName: "media-player",
|
|
79264
|
+
capScope: "device",
|
|
79265
|
+
addonId: null,
|
|
79266
|
+
access: "create",
|
|
79267
|
+
role: "viewer"
|
|
79268
|
+
},
|
|
79126
79269
|
"mediaPlayer.getStatus": {
|
|
79127
79270
|
capName: "media-player",
|
|
79128
79271
|
capScope: "device",
|
|
@@ -79214,6 +79357,34 @@ Object.freeze({
|
|
|
79214
79357
|
access: "create",
|
|
79215
79358
|
role: "viewer"
|
|
79216
79359
|
},
|
|
79360
|
+
"mediaPlayer.turnOff": {
|
|
79361
|
+
capName: "media-player",
|
|
79362
|
+
capScope: "device",
|
|
79363
|
+
addonId: null,
|
|
79364
|
+
access: "create",
|
|
79365
|
+
role: "viewer"
|
|
79366
|
+
},
|
|
79367
|
+
"mediaPlayer.turnOn": {
|
|
79368
|
+
capName: "media-player",
|
|
79369
|
+
capScope: "device",
|
|
79370
|
+
addonId: null,
|
|
79371
|
+
access: "create",
|
|
79372
|
+
role: "viewer"
|
|
79373
|
+
},
|
|
79374
|
+
"mediaPlayer.volumeDown": {
|
|
79375
|
+
capName: "media-player",
|
|
79376
|
+
capScope: "device",
|
|
79377
|
+
addonId: null,
|
|
79378
|
+
access: "create",
|
|
79379
|
+
role: "viewer"
|
|
79380
|
+
},
|
|
79381
|
+
"mediaPlayer.volumeUp": {
|
|
79382
|
+
capName: "media-player",
|
|
79383
|
+
capScope: "device",
|
|
79384
|
+
addonId: null,
|
|
79385
|
+
access: "create",
|
|
79386
|
+
role: "viewer"
|
|
79387
|
+
},
|
|
79217
79388
|
"meshNetwork.getStatus": {
|
|
79218
79389
|
capName: "mesh-network",
|
|
79219
79390
|
capScope: "system",
|
|
@@ -82770,6 +82941,13 @@ Object.freeze({
|
|
|
82770
82941
|
access: "create",
|
|
82771
82942
|
role: "admin"
|
|
82772
82943
|
},
|
|
82944
|
+
"remote.getAssumedStatus": {
|
|
82945
|
+
capName: "remote",
|
|
82946
|
+
capScope: "system",
|
|
82947
|
+
addonId: null,
|
|
82948
|
+
access: "view",
|
|
82949
|
+
role: "admin"
|
|
82950
|
+
},
|
|
82773
82951
|
"remote.getConfig": {
|
|
82774
82952
|
capName: "remote",
|
|
82775
82953
|
capScope: "system",
|
|
@@ -86436,6 +86614,16 @@ Object.freeze({
|
|
|
86436
86614
|
form: "single",
|
|
86437
86615
|
optional: true
|
|
86438
86616
|
}],
|
|
86617
|
+
"mediaPlayer.channelDown": [{
|
|
86618
|
+
name: "deviceId",
|
|
86619
|
+
form: "single",
|
|
86620
|
+
optional: false
|
|
86621
|
+
}],
|
|
86622
|
+
"mediaPlayer.channelUp": [{
|
|
86623
|
+
name: "deviceId",
|
|
86624
|
+
form: "single",
|
|
86625
|
+
optional: false
|
|
86626
|
+
}],
|
|
86439
86627
|
"mediaPlayer.getStatus": [{
|
|
86440
86628
|
name: "deviceId",
|
|
86441
86629
|
form: "single",
|
|
@@ -86501,6 +86689,26 @@ Object.freeze({
|
|
|
86501
86689
|
form: "single",
|
|
86502
86690
|
optional: false
|
|
86503
86691
|
}],
|
|
86692
|
+
"mediaPlayer.turnOff": [{
|
|
86693
|
+
name: "deviceId",
|
|
86694
|
+
form: "single",
|
|
86695
|
+
optional: false
|
|
86696
|
+
}],
|
|
86697
|
+
"mediaPlayer.turnOn": [{
|
|
86698
|
+
name: "deviceId",
|
|
86699
|
+
form: "single",
|
|
86700
|
+
optional: false
|
|
86701
|
+
}],
|
|
86702
|
+
"mediaPlayer.volumeDown": [{
|
|
86703
|
+
name: "deviceId",
|
|
86704
|
+
form: "single",
|
|
86705
|
+
optional: false
|
|
86706
|
+
}],
|
|
86707
|
+
"mediaPlayer.volumeUp": [{
|
|
86708
|
+
name: "deviceId",
|
|
86709
|
+
form: "single",
|
|
86710
|
+
optional: false
|
|
86711
|
+
}],
|
|
86504
86712
|
"meter.getStatus": [{
|
|
86505
86713
|
name: "deviceId",
|
|
86506
86714
|
form: "single",
|
|
@@ -87666,6 +87874,11 @@ Object.freeze({
|
|
|
87666
87874
|
form: "single",
|
|
87667
87875
|
optional: true
|
|
87668
87876
|
}],
|
|
87877
|
+
"remote.getAssumedStatus": [{
|
|
87878
|
+
name: "deviceId",
|
|
87879
|
+
form: "single",
|
|
87880
|
+
optional: false
|
|
87881
|
+
}],
|
|
87669
87882
|
"remote.getConfig": [{
|
|
87670
87883
|
name: "deviceId",
|
|
87671
87884
|
form: "single",
|
|
@@ -88921,6 +89134,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
88921
89134
|
[...RULE_TEXT],
|
|
88922
89135
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
88923
89136
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
89137
|
+
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
88924
89138
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
88925
89139
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
88926
89140
|
([...RULE_TEXT], [...CONSUMABLE]),
|
|
@@ -89656,7 +89870,7 @@ var AgentUIAddon = class extends BaseAddon {
|
|
|
89656
89870
|
capability: adminUiCapability,
|
|
89657
89871
|
provider: {
|
|
89658
89872
|
getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
|
|
89659
|
-
getVersion: async () => ({ version: "1.2.
|
|
89873
|
+
getVersion: async () => ({ version: "1.2.319" })
|
|
89660
89874
|
}
|
|
89661
89875
|
}];
|
|
89662
89876
|
}
|