@camstack/addon-google-services 0.2.26 → 0.2.27
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/google-services.addon.js +151 -83
- package/dist/google-services.addon.mjs +151 -83
- package/package.json +1 -1
|
@@ -5568,7 +5568,7 @@ var ZodIssueCode = {
|
|
|
5568
5568
|
var ZodFirstPartyTypeKind;
|
|
5569
5569
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5570
5570
|
//#endregion
|
|
5571
|
-
//#region ../types/dist/sleep-
|
|
5571
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
5572
5572
|
/**
|
|
5573
5573
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5574
5574
|
* window to float samples (D455).
|
|
@@ -8648,7 +8648,11 @@ var ContributionSectionSchema = object({
|
|
|
8648
8648
|
literal(4)
|
|
8649
8649
|
]).optional(),
|
|
8650
8650
|
tab: string().optional(),
|
|
8651
|
-
location: _enum([
|
|
8651
|
+
location: _enum([
|
|
8652
|
+
"settings",
|
|
8653
|
+
"top-tab",
|
|
8654
|
+
"hero"
|
|
8655
|
+
]).optional(),
|
|
8652
8656
|
order: number().optional(),
|
|
8653
8657
|
fields: array(any())
|
|
8654
8658
|
});
|
|
@@ -13717,7 +13721,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
13717
13721
|
literal(4)
|
|
13718
13722
|
]).optional(),
|
|
13719
13723
|
tab: string().optional(),
|
|
13720
|
-
location: _enum([
|
|
13724
|
+
location: _enum([
|
|
13725
|
+
"settings",
|
|
13726
|
+
"top-tab",
|
|
13727
|
+
"hero"
|
|
13728
|
+
]).optional(),
|
|
13721
13729
|
order: number().optional(),
|
|
13722
13730
|
fields: array(any())
|
|
13723
13731
|
});
|
|
@@ -17540,6 +17548,52 @@ var TierStatusSchema = object({
|
|
|
17540
17548
|
countedAt: number().nullable()
|
|
17541
17549
|
});
|
|
17542
17550
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17551
|
+
/**
|
|
17552
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17553
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17554
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17555
|
+
*/
|
|
17556
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17557
|
+
/** Rows held per stored tier. */
|
|
17558
|
+
var TierRowsSchema = object({
|
|
17559
|
+
raw: number().int(),
|
|
17560
|
+
"5m": number().int(),
|
|
17561
|
+
"1h": number().int(),
|
|
17562
|
+
"1d": number().int()
|
|
17563
|
+
});
|
|
17564
|
+
var OrphanSeriesSchema = object({
|
|
17565
|
+
seriesId: number().int(),
|
|
17566
|
+
deviceId: number().int(),
|
|
17567
|
+
key: string(),
|
|
17568
|
+
scope: string(),
|
|
17569
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17570
|
+
displayName: string().nullable(),
|
|
17571
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17572
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17573
|
+
missingSince: number().nullable(),
|
|
17574
|
+
firstTs: number(),
|
|
17575
|
+
lastTs: number(),
|
|
17576
|
+
rows: TierRowsSchema
|
|
17577
|
+
});
|
|
17578
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17579
|
+
"not-found",
|
|
17580
|
+
"not-orphan",
|
|
17581
|
+
"failed"
|
|
17582
|
+
]);
|
|
17583
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17584
|
+
seriesId: number().int(),
|
|
17585
|
+
ok: literal(true),
|
|
17586
|
+
deleted: TierRowsSchema
|
|
17587
|
+
}), object({
|
|
17588
|
+
seriesId: number().int(),
|
|
17589
|
+
ok: literal(false),
|
|
17590
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
17591
|
+
})]);
|
|
17592
|
+
var OrphanListSchema = object({
|
|
17593
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
17594
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
17595
|
+
truncated: boolean()
|
|
17596
|
+
});
|
|
17543
17597
|
var DeviceHistoryStatusSchema = object({
|
|
17544
17598
|
startedAt: number(),
|
|
17545
17599
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -17637,7 +17691,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
17637
17691
|
}), object({ enabled: boolean() }), {
|
|
17638
17692
|
kind: "mutation",
|
|
17639
17693
|
auth: "admin"
|
|
17640
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
17694
|
+
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" }), method(object({}), OrphanListSchema, { auth: "admin" }), method(object({ seriesIds: array(number().int()).min(1).max(50) }), object({ results: array(OrphanDeleteEntrySchema).readonly() }), {
|
|
17695
|
+
kind: "mutation",
|
|
17696
|
+
auth: "admin"
|
|
17697
|
+
});
|
|
17641
17698
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
17642
17699
|
object({ state: literal("absent") }),
|
|
17643
17700
|
object({
|
|
@@ -54669,17 +54726,69 @@ object({
|
|
|
54669
54726
|
});
|
|
54670
54727
|
DeviceType.Sensor;
|
|
54671
54728
|
/**
|
|
54672
|
-
* Generic device-consumables capability —
|
|
54673
|
-
*
|
|
54674
|
-
* descaling cycles,
|
|
54675
|
-
*
|
|
54676
|
-
*
|
|
54677
|
-
*
|
|
54729
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
54730
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
54731
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
54732
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
54733
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
54734
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
54735
|
+
* its device tracks consumables registers it; the provider names each item
|
|
54736
|
+
* verbatim and says which `kind` it is.
|
|
54737
|
+
*
|
|
54738
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
54739
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
54740
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
54678
54741
|
*
|
|
54679
54742
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
54680
54743
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
54681
54744
|
* "No consumables reported" placeholder when `items` is empty.
|
|
54682
54745
|
*/
|
|
54746
|
+
/**
|
|
54747
|
+
* What an item IS, which decides which direction is bad:
|
|
54748
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
54749
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
54750
|
+
* salt, rinse aid); low or empty is bad.
|
|
54751
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
54752
|
+
* bad.
|
|
54753
|
+
* Absent = `wear`.
|
|
54754
|
+
*/
|
|
54755
|
+
var ConsumableKindSchema = _enum([
|
|
54756
|
+
"wear",
|
|
54757
|
+
"supply",
|
|
54758
|
+
"waste"
|
|
54759
|
+
]);
|
|
54760
|
+
/**
|
|
54761
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
54762
|
+
* of `kind`, which decides which direction is bad:
|
|
54763
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
54764
|
+
* remaining time and a reset.
|
|
54765
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
54766
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
54767
|
+
* a stepped level and "refill".
|
|
54768
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
54769
|
+
* that warns when full.
|
|
54770
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
54771
|
+
*/
|
|
54772
|
+
var ConsumableFormSchema = _enum([
|
|
54773
|
+
"part",
|
|
54774
|
+
"tank",
|
|
54775
|
+
"product",
|
|
54776
|
+
"bin"
|
|
54777
|
+
]);
|
|
54778
|
+
/** The provider's own discrete verdict on an item. */
|
|
54779
|
+
var ConsumableStatusSchema = _enum([
|
|
54780
|
+
"ok",
|
|
54781
|
+
"low",
|
|
54782
|
+
"empty",
|
|
54783
|
+
"full",
|
|
54784
|
+
"replace"
|
|
54785
|
+
]);
|
|
54786
|
+
_enum([
|
|
54787
|
+
"ok",
|
|
54788
|
+
"low",
|
|
54789
|
+
"empty",
|
|
54790
|
+
"full"
|
|
54791
|
+
]);
|
|
54683
54792
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
54684
54793
|
* each. */
|
|
54685
54794
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -54699,10 +54808,14 @@ var ConsumablesStatusSchema = object({
|
|
|
54699
54808
|
key: string().min(1),
|
|
54700
54809
|
/** Display name. */
|
|
54701
54810
|
label: string().min(1),
|
|
54702
|
-
/** Remaining life % when known (0..100). */
|
|
54811
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
54703
54812
|
level: number().min(0).max(100).nullable(),
|
|
54704
|
-
/**
|
|
54705
|
-
status:
|
|
54813
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
54814
|
+
status: ConsumableStatusSchema.nullable(),
|
|
54815
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
54816
|
+
kind: ConsumableKindSchema.optional(),
|
|
54817
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
54818
|
+
form: ConsumableFormSchema.optional(),
|
|
54706
54819
|
/** Ms epoch of the last replace, when known. */
|
|
54707
54820
|
lastResetAt: number().nullable(),
|
|
54708
54821
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -54937,8 +55050,9 @@ object({
|
|
|
54937
55050
|
status: DeviceStatusSchema
|
|
54938
55051
|
});
|
|
54939
55052
|
/**
|
|
54940
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
54941
|
-
*
|
|
55053
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
55054
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
55055
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
54942
55056
|
*
|
|
54943
55057
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
54944
55058
|
* by any integration that exposes the same program / option surface.
|
|
@@ -54986,11 +55100,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
54986
55100
|
"offline",
|
|
54987
55101
|
"description-missing"
|
|
54988
55102
|
]);
|
|
54989
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
54990
|
-
"ok",
|
|
54991
|
-
"low",
|
|
54992
|
-
"empty"
|
|
54993
|
-
]);
|
|
54994
55103
|
object({
|
|
54995
55104
|
availability: DishwasherAvailabilitySchema,
|
|
54996
55105
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -55023,8 +55132,6 @@ object({
|
|
|
55023
55132
|
powerOn: boolean().nullable(),
|
|
55024
55133
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
55025
55134
|
powerState: string().nullable(),
|
|
55026
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55027
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55028
55135
|
/**
|
|
55029
55136
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
55030
55137
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -61807,60 +61914,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
61807
61914
|
auth: "admin",
|
|
61808
61915
|
access: "delete"
|
|
61809
61916
|
});
|
|
61810
|
-
/**
|
|
61811
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
61812
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
61813
|
-
* optional fan-speed selector.
|
|
61814
|
-
*
|
|
61815
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
61816
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
61817
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
61818
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
61819
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
61820
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
61821
|
-
*
|
|
61822
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
61823
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
61824
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
61825
|
-
*
|
|
61826
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
61827
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
61828
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
61829
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
61830
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
61831
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
61832
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
61833
|
-
* so the HA provider leaves all four `null`.
|
|
61834
|
-
*/
|
|
61835
|
-
var VacuumStateSchema = _enum([
|
|
61836
|
-
"idle",
|
|
61837
|
-
"cleaning",
|
|
61838
|
-
"paused",
|
|
61839
|
-
"returning",
|
|
61840
|
-
"docked",
|
|
61841
|
-
"drying",
|
|
61842
|
-
"error"
|
|
61843
|
-
]);
|
|
61844
|
-
/**
|
|
61845
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
61846
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
61847
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
61848
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
61849
|
-
* hardware has no such tank at all.
|
|
61850
|
-
*/
|
|
61851
|
-
var TankStatusSchema = object({
|
|
61852
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
61853
|
-
level: number().min(0).max(100).nullable(),
|
|
61854
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
61855
|
-
status: _enum([
|
|
61856
|
-
"ok",
|
|
61857
|
-
"low",
|
|
61858
|
-
"full"
|
|
61859
|
-
]).nullable()
|
|
61860
|
-
});
|
|
61861
61917
|
object({
|
|
61862
61918
|
/** Lifecycle state of the vacuum. */
|
|
61863
|
-
state:
|
|
61919
|
+
state: _enum([
|
|
61920
|
+
"idle",
|
|
61921
|
+
"cleaning",
|
|
61922
|
+
"paused",
|
|
61923
|
+
"returning",
|
|
61924
|
+
"docked",
|
|
61925
|
+
"drying",
|
|
61926
|
+
"error"
|
|
61927
|
+
]),
|
|
61864
61928
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
61865
61929
|
* reading. */
|
|
61866
61930
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -61869,14 +61933,6 @@ object({
|
|
|
61869
61933
|
fanSpeed: string().nullable(),
|
|
61870
61934
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
61871
61935
|
availableFanSpeeds: array(string()),
|
|
61872
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
61873
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
61874
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
61875
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
61876
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
61877
|
-
detergent: TankStatusSchema.nullable(),
|
|
61878
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
61879
|
-
dustBin: TankStatusSchema.nullable(),
|
|
61880
61936
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
61881
61937
|
progressPercent: number().min(0).max(100).nullable(),
|
|
61882
61938
|
/** Current error code (0 / null = no error). */
|
|
@@ -64417,6 +64473,12 @@ Object.freeze({
|
|
|
64417
64473
|
addonId: null,
|
|
64418
64474
|
access: "create"
|
|
64419
64475
|
},
|
|
64476
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
64477
|
+
capName: "device-history",
|
|
64478
|
+
capScope: "system",
|
|
64479
|
+
addonId: null,
|
|
64480
|
+
access: "delete"
|
|
64481
|
+
},
|
|
64420
64482
|
"deviceHistory.getDeviceEnabled": {
|
|
64421
64483
|
capName: "device-history",
|
|
64422
64484
|
capScope: "system",
|
|
@@ -64435,6 +64497,12 @@ Object.freeze({
|
|
|
64435
64497
|
addonId: null,
|
|
64436
64498
|
access: "view"
|
|
64437
64499
|
},
|
|
64500
|
+
"deviceHistory.listOrphanSeries": {
|
|
64501
|
+
capName: "device-history",
|
|
64502
|
+
capScope: "system",
|
|
64503
|
+
addonId: null,
|
|
64504
|
+
access: "view"
|
|
64505
|
+
},
|
|
64438
64506
|
"deviceHistory.listSeries": {
|
|
64439
64507
|
capName: "device-history",
|
|
64440
64508
|
capScope: "system",
|
|
@@ -74440,7 +74508,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
74440
74508
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
74441
74509
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
74442
74510
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
74443
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
74511
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
74444
74512
|
([...RULE_TEXT], [...TANK]),
|
|
74445
74513
|
[...RULE_TEXT],
|
|
74446
74514
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
|
@@ -5564,7 +5564,7 @@ var ZodIssueCode = {
|
|
|
5564
5564
|
var ZodFirstPartyTypeKind;
|
|
5565
5565
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5566
5566
|
//#endregion
|
|
5567
|
-
//#region ../types/dist/sleep-
|
|
5567
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
5568
5568
|
/**
|
|
5569
5569
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5570
5570
|
* window to float samples (D455).
|
|
@@ -8644,7 +8644,11 @@ var ContributionSectionSchema = object({
|
|
|
8644
8644
|
literal(4)
|
|
8645
8645
|
]).optional(),
|
|
8646
8646
|
tab: string().optional(),
|
|
8647
|
-
location: _enum([
|
|
8647
|
+
location: _enum([
|
|
8648
|
+
"settings",
|
|
8649
|
+
"top-tab",
|
|
8650
|
+
"hero"
|
|
8651
|
+
]).optional(),
|
|
8648
8652
|
order: number().optional(),
|
|
8649
8653
|
fields: array(any())
|
|
8650
8654
|
});
|
|
@@ -13713,7 +13717,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
13713
13717
|
literal(4)
|
|
13714
13718
|
]).optional(),
|
|
13715
13719
|
tab: string().optional(),
|
|
13716
|
-
location: _enum([
|
|
13720
|
+
location: _enum([
|
|
13721
|
+
"settings",
|
|
13722
|
+
"top-tab",
|
|
13723
|
+
"hero"
|
|
13724
|
+
]).optional(),
|
|
13717
13725
|
order: number().optional(),
|
|
13718
13726
|
fields: array(any())
|
|
13719
13727
|
});
|
|
@@ -17536,6 +17544,52 @@ var TierStatusSchema = object({
|
|
|
17536
17544
|
countedAt: number().nullable()
|
|
17537
17545
|
});
|
|
17538
17546
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17547
|
+
/**
|
|
17548
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17549
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17550
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17551
|
+
*/
|
|
17552
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17553
|
+
/** Rows held per stored tier. */
|
|
17554
|
+
var TierRowsSchema = object({
|
|
17555
|
+
raw: number().int(),
|
|
17556
|
+
"5m": number().int(),
|
|
17557
|
+
"1h": number().int(),
|
|
17558
|
+
"1d": number().int()
|
|
17559
|
+
});
|
|
17560
|
+
var OrphanSeriesSchema = object({
|
|
17561
|
+
seriesId: number().int(),
|
|
17562
|
+
deviceId: number().int(),
|
|
17563
|
+
key: string(),
|
|
17564
|
+
scope: string(),
|
|
17565
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17566
|
+
displayName: string().nullable(),
|
|
17567
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17568
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17569
|
+
missingSince: number().nullable(),
|
|
17570
|
+
firstTs: number(),
|
|
17571
|
+
lastTs: number(),
|
|
17572
|
+
rows: TierRowsSchema
|
|
17573
|
+
});
|
|
17574
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17575
|
+
"not-found",
|
|
17576
|
+
"not-orphan",
|
|
17577
|
+
"failed"
|
|
17578
|
+
]);
|
|
17579
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17580
|
+
seriesId: number().int(),
|
|
17581
|
+
ok: literal(true),
|
|
17582
|
+
deleted: TierRowsSchema
|
|
17583
|
+
}), object({
|
|
17584
|
+
seriesId: number().int(),
|
|
17585
|
+
ok: literal(false),
|
|
17586
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
17587
|
+
})]);
|
|
17588
|
+
var OrphanListSchema = object({
|
|
17589
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
17590
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
17591
|
+
truncated: boolean()
|
|
17592
|
+
});
|
|
17539
17593
|
var DeviceHistoryStatusSchema = object({
|
|
17540
17594
|
startedAt: number(),
|
|
17541
17595
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -17633,7 +17687,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
17633
17687
|
}), object({ enabled: boolean() }), {
|
|
17634
17688
|
kind: "mutation",
|
|
17635
17689
|
auth: "admin"
|
|
17636
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
17690
|
+
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" }), method(object({}), OrphanListSchema, { auth: "admin" }), method(object({ seriesIds: array(number().int()).min(1).max(50) }), object({ results: array(OrphanDeleteEntrySchema).readonly() }), {
|
|
17691
|
+
kind: "mutation",
|
|
17692
|
+
auth: "admin"
|
|
17693
|
+
});
|
|
17637
17694
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
17638
17695
|
object({ state: literal("absent") }),
|
|
17639
17696
|
object({
|
|
@@ -54665,17 +54722,69 @@ object({
|
|
|
54665
54722
|
});
|
|
54666
54723
|
DeviceType.Sensor;
|
|
54667
54724
|
/**
|
|
54668
|
-
* Generic device-consumables capability —
|
|
54669
|
-
*
|
|
54670
|
-
* descaling cycles,
|
|
54671
|
-
*
|
|
54672
|
-
*
|
|
54673
|
-
*
|
|
54725
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
54726
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
54727
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
54728
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
54729
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
54730
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
54731
|
+
* its device tracks consumables registers it; the provider names each item
|
|
54732
|
+
* verbatim and says which `kind` it is.
|
|
54733
|
+
*
|
|
54734
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
54735
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
54736
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
54674
54737
|
*
|
|
54675
54738
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
54676
54739
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
54677
54740
|
* "No consumables reported" placeholder when `items` is empty.
|
|
54678
54741
|
*/
|
|
54742
|
+
/**
|
|
54743
|
+
* What an item IS, which decides which direction is bad:
|
|
54744
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
54745
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
54746
|
+
* salt, rinse aid); low or empty is bad.
|
|
54747
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
54748
|
+
* bad.
|
|
54749
|
+
* Absent = `wear`.
|
|
54750
|
+
*/
|
|
54751
|
+
var ConsumableKindSchema = _enum([
|
|
54752
|
+
"wear",
|
|
54753
|
+
"supply",
|
|
54754
|
+
"waste"
|
|
54755
|
+
]);
|
|
54756
|
+
/**
|
|
54757
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
54758
|
+
* of `kind`, which decides which direction is bad:
|
|
54759
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
54760
|
+
* remaining time and a reset.
|
|
54761
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
54762
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
54763
|
+
* a stepped level and "refill".
|
|
54764
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
54765
|
+
* that warns when full.
|
|
54766
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
54767
|
+
*/
|
|
54768
|
+
var ConsumableFormSchema = _enum([
|
|
54769
|
+
"part",
|
|
54770
|
+
"tank",
|
|
54771
|
+
"product",
|
|
54772
|
+
"bin"
|
|
54773
|
+
]);
|
|
54774
|
+
/** The provider's own discrete verdict on an item. */
|
|
54775
|
+
var ConsumableStatusSchema = _enum([
|
|
54776
|
+
"ok",
|
|
54777
|
+
"low",
|
|
54778
|
+
"empty",
|
|
54779
|
+
"full",
|
|
54780
|
+
"replace"
|
|
54781
|
+
]);
|
|
54782
|
+
_enum([
|
|
54783
|
+
"ok",
|
|
54784
|
+
"low",
|
|
54785
|
+
"empty",
|
|
54786
|
+
"full"
|
|
54787
|
+
]);
|
|
54679
54788
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
54680
54789
|
* each. */
|
|
54681
54790
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -54695,10 +54804,14 @@ var ConsumablesStatusSchema = object({
|
|
|
54695
54804
|
key: string().min(1),
|
|
54696
54805
|
/** Display name. */
|
|
54697
54806
|
label: string().min(1),
|
|
54698
|
-
/** Remaining life % when known (0..100). */
|
|
54807
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
54699
54808
|
level: number().min(0).max(100).nullable(),
|
|
54700
|
-
/**
|
|
54701
|
-
status:
|
|
54809
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
54810
|
+
status: ConsumableStatusSchema.nullable(),
|
|
54811
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
54812
|
+
kind: ConsumableKindSchema.optional(),
|
|
54813
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
54814
|
+
form: ConsumableFormSchema.optional(),
|
|
54702
54815
|
/** Ms epoch of the last replace, when known. */
|
|
54703
54816
|
lastResetAt: number().nullable(),
|
|
54704
54817
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -54933,8 +55046,9 @@ object({
|
|
|
54933
55046
|
status: DeviceStatusSchema
|
|
54934
55047
|
});
|
|
54935
55048
|
/**
|
|
54936
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
54937
|
-
*
|
|
55049
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
55050
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
55051
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
54938
55052
|
*
|
|
54939
55053
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
54940
55054
|
* by any integration that exposes the same program / option surface.
|
|
@@ -54982,11 +55096,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
54982
55096
|
"offline",
|
|
54983
55097
|
"description-missing"
|
|
54984
55098
|
]);
|
|
54985
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
54986
|
-
"ok",
|
|
54987
|
-
"low",
|
|
54988
|
-
"empty"
|
|
54989
|
-
]);
|
|
54990
55099
|
object({
|
|
54991
55100
|
availability: DishwasherAvailabilitySchema,
|
|
54992
55101
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -55019,8 +55128,6 @@ object({
|
|
|
55019
55128
|
powerOn: boolean().nullable(),
|
|
55020
55129
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
55021
55130
|
powerState: string().nullable(),
|
|
55022
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55023
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55024
55131
|
/**
|
|
55025
55132
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
55026
55133
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -61803,60 +61910,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
61803
61910
|
auth: "admin",
|
|
61804
61911
|
access: "delete"
|
|
61805
61912
|
});
|
|
61806
|
-
/**
|
|
61807
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
61808
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
61809
|
-
* optional fan-speed selector.
|
|
61810
|
-
*
|
|
61811
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
61812
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
61813
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
61814
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
61815
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
61816
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
61817
|
-
*
|
|
61818
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
61819
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
61820
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
61821
|
-
*
|
|
61822
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
61823
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
61824
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
61825
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
61826
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
61827
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
61828
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
61829
|
-
* so the HA provider leaves all four `null`.
|
|
61830
|
-
*/
|
|
61831
|
-
var VacuumStateSchema = _enum([
|
|
61832
|
-
"idle",
|
|
61833
|
-
"cleaning",
|
|
61834
|
-
"paused",
|
|
61835
|
-
"returning",
|
|
61836
|
-
"docked",
|
|
61837
|
-
"drying",
|
|
61838
|
-
"error"
|
|
61839
|
-
]);
|
|
61840
|
-
/**
|
|
61841
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
61842
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
61843
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
61844
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
61845
|
-
* hardware has no such tank at all.
|
|
61846
|
-
*/
|
|
61847
|
-
var TankStatusSchema = object({
|
|
61848
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
61849
|
-
level: number().min(0).max(100).nullable(),
|
|
61850
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
61851
|
-
status: _enum([
|
|
61852
|
-
"ok",
|
|
61853
|
-
"low",
|
|
61854
|
-
"full"
|
|
61855
|
-
]).nullable()
|
|
61856
|
-
});
|
|
61857
61913
|
object({
|
|
61858
61914
|
/** Lifecycle state of the vacuum. */
|
|
61859
|
-
state:
|
|
61915
|
+
state: _enum([
|
|
61916
|
+
"idle",
|
|
61917
|
+
"cleaning",
|
|
61918
|
+
"paused",
|
|
61919
|
+
"returning",
|
|
61920
|
+
"docked",
|
|
61921
|
+
"drying",
|
|
61922
|
+
"error"
|
|
61923
|
+
]),
|
|
61860
61924
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
61861
61925
|
* reading. */
|
|
61862
61926
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -61865,14 +61929,6 @@ object({
|
|
|
61865
61929
|
fanSpeed: string().nullable(),
|
|
61866
61930
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
61867
61931
|
availableFanSpeeds: array(string()),
|
|
61868
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
61869
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
61870
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
61871
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
61872
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
61873
|
-
detergent: TankStatusSchema.nullable(),
|
|
61874
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
61875
|
-
dustBin: TankStatusSchema.nullable(),
|
|
61876
61932
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
61877
61933
|
progressPercent: number().min(0).max(100).nullable(),
|
|
61878
61934
|
/** Current error code (0 / null = no error). */
|
|
@@ -64413,6 +64469,12 @@ Object.freeze({
|
|
|
64413
64469
|
addonId: null,
|
|
64414
64470
|
access: "create"
|
|
64415
64471
|
},
|
|
64472
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
64473
|
+
capName: "device-history",
|
|
64474
|
+
capScope: "system",
|
|
64475
|
+
addonId: null,
|
|
64476
|
+
access: "delete"
|
|
64477
|
+
},
|
|
64416
64478
|
"deviceHistory.getDeviceEnabled": {
|
|
64417
64479
|
capName: "device-history",
|
|
64418
64480
|
capScope: "system",
|
|
@@ -64431,6 +64493,12 @@ Object.freeze({
|
|
|
64431
64493
|
addonId: null,
|
|
64432
64494
|
access: "view"
|
|
64433
64495
|
},
|
|
64496
|
+
"deviceHistory.listOrphanSeries": {
|
|
64497
|
+
capName: "device-history",
|
|
64498
|
+
capScope: "system",
|
|
64499
|
+
addonId: null,
|
|
64500
|
+
access: "view"
|
|
64501
|
+
},
|
|
64434
64502
|
"deviceHistory.listSeries": {
|
|
64435
64503
|
capName: "device-history",
|
|
64436
64504
|
capScope: "system",
|
|
@@ -74436,7 +74504,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
74436
74504
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
74437
74505
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
74438
74506
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
74439
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
74507
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
74440
74508
|
([...RULE_TEXT], [...TANK]),
|
|
74441
74509
|
[...RULE_TEXT],
|
|
74442
74510
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/package.json
CHANGED