@camstack/addon-google-services 0.2.25 → 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 -89
- package/dist/google-services.addon.mjs +151 -89
- 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({
|
|
@@ -48112,7 +48169,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
|
|
|
48112
48169
|
modelId: string()
|
|
48113
48170
|
}),
|
|
48114
48171
|
object({ kind: literal("cpu-device") }),
|
|
48115
|
-
object({ kind: literal("coral-untouched") }),
|
|
48116
48172
|
object({ kind: literal("device-disabled") }),
|
|
48117
48173
|
object({ kind: literal("device-unavailable") }),
|
|
48118
48174
|
object({ kind: literal("node-offline") }),
|
|
@@ -48210,11 +48266,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
|
|
|
48210
48266
|
kind: literal("detector-store-unreadable"),
|
|
48211
48267
|
error: string()
|
|
48212
48268
|
}),
|
|
48213
|
-
object({
|
|
48214
|
-
kind: literal("coral-enabled"),
|
|
48215
|
-
nodeId: string(),
|
|
48216
|
-
deviceKey: string()
|
|
48217
|
-
}),
|
|
48218
48269
|
object({
|
|
48219
48270
|
kind: literal("custom-pin-kept"),
|
|
48220
48271
|
nodeId: string(),
|
|
@@ -54675,17 +54726,69 @@ object({
|
|
|
54675
54726
|
});
|
|
54676
54727
|
DeviceType.Sensor;
|
|
54677
54728
|
/**
|
|
54678
|
-
* Generic device-consumables capability —
|
|
54679
|
-
*
|
|
54680
|
-
* descaling cycles,
|
|
54681
|
-
*
|
|
54682
|
-
*
|
|
54683
|
-
*
|
|
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).
|
|
54684
54741
|
*
|
|
54685
54742
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
54686
54743
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
54687
54744
|
* "No consumables reported" placeholder when `items` is empty.
|
|
54688
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
|
+
]);
|
|
54689
54792
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
54690
54793
|
* each. */
|
|
54691
54794
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -54705,10 +54808,14 @@ var ConsumablesStatusSchema = object({
|
|
|
54705
54808
|
key: string().min(1),
|
|
54706
54809
|
/** Display name. */
|
|
54707
54810
|
label: string().min(1),
|
|
54708
|
-
/** Remaining life % when known (0..100). */
|
|
54811
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
54709
54812
|
level: number().min(0).max(100).nullable(),
|
|
54710
|
-
/**
|
|
54711
|
-
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(),
|
|
54712
54819
|
/** Ms epoch of the last replace, when known. */
|
|
54713
54820
|
lastResetAt: number().nullable(),
|
|
54714
54821
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -54943,8 +55050,9 @@ object({
|
|
|
54943
55050
|
status: DeviceStatusSchema
|
|
54944
55051
|
});
|
|
54945
55052
|
/**
|
|
54946
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
54947
|
-
*
|
|
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).
|
|
54948
55056
|
*
|
|
54949
55057
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
54950
55058
|
* by any integration that exposes the same program / option surface.
|
|
@@ -54992,11 +55100,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
54992
55100
|
"offline",
|
|
54993
55101
|
"description-missing"
|
|
54994
55102
|
]);
|
|
54995
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
54996
|
-
"ok",
|
|
54997
|
-
"low",
|
|
54998
|
-
"empty"
|
|
54999
|
-
]);
|
|
55000
55103
|
object({
|
|
55001
55104
|
availability: DishwasherAvailabilitySchema,
|
|
55002
55105
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -55029,8 +55132,6 @@ object({
|
|
|
55029
55132
|
powerOn: boolean().nullable(),
|
|
55030
55133
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
55031
55134
|
powerState: string().nullable(),
|
|
55032
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55033
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55034
55135
|
/**
|
|
55035
55136
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
55036
55137
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -61813,60 +61914,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
61813
61914
|
auth: "admin",
|
|
61814
61915
|
access: "delete"
|
|
61815
61916
|
});
|
|
61816
|
-
/**
|
|
61817
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
61818
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
61819
|
-
* optional fan-speed selector.
|
|
61820
|
-
*
|
|
61821
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
61822
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
61823
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
61824
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
61825
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
61826
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
61827
|
-
*
|
|
61828
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
61829
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
61830
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
61831
|
-
*
|
|
61832
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
61833
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
61834
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
61835
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
61836
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
61837
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
61838
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
61839
|
-
* so the HA provider leaves all four `null`.
|
|
61840
|
-
*/
|
|
61841
|
-
var VacuumStateSchema = _enum([
|
|
61842
|
-
"idle",
|
|
61843
|
-
"cleaning",
|
|
61844
|
-
"paused",
|
|
61845
|
-
"returning",
|
|
61846
|
-
"docked",
|
|
61847
|
-
"drying",
|
|
61848
|
-
"error"
|
|
61849
|
-
]);
|
|
61850
|
-
/**
|
|
61851
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
61852
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
61853
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
61854
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
61855
|
-
* hardware has no such tank at all.
|
|
61856
|
-
*/
|
|
61857
|
-
var TankStatusSchema = object({
|
|
61858
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
61859
|
-
level: number().min(0).max(100).nullable(),
|
|
61860
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
61861
|
-
status: _enum([
|
|
61862
|
-
"ok",
|
|
61863
|
-
"low",
|
|
61864
|
-
"full"
|
|
61865
|
-
]).nullable()
|
|
61866
|
-
});
|
|
61867
61917
|
object({
|
|
61868
61918
|
/** Lifecycle state of the vacuum. */
|
|
61869
|
-
state:
|
|
61919
|
+
state: _enum([
|
|
61920
|
+
"idle",
|
|
61921
|
+
"cleaning",
|
|
61922
|
+
"paused",
|
|
61923
|
+
"returning",
|
|
61924
|
+
"docked",
|
|
61925
|
+
"drying",
|
|
61926
|
+
"error"
|
|
61927
|
+
]),
|
|
61870
61928
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
61871
61929
|
* reading. */
|
|
61872
61930
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -61875,14 +61933,6 @@ object({
|
|
|
61875
61933
|
fanSpeed: string().nullable(),
|
|
61876
61934
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
61877
61935
|
availableFanSpeeds: array(string()),
|
|
61878
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
61879
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
61880
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
61881
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
61882
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
61883
|
-
detergent: TankStatusSchema.nullable(),
|
|
61884
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
61885
|
-
dustBin: TankStatusSchema.nullable(),
|
|
61886
61936
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
61887
61937
|
progressPercent: number().min(0).max(100).nullable(),
|
|
61888
61938
|
/** Current error code (0 / null = no error). */
|
|
@@ -64423,6 +64473,12 @@ Object.freeze({
|
|
|
64423
64473
|
addonId: null,
|
|
64424
64474
|
access: "create"
|
|
64425
64475
|
},
|
|
64476
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
64477
|
+
capName: "device-history",
|
|
64478
|
+
capScope: "system",
|
|
64479
|
+
addonId: null,
|
|
64480
|
+
access: "delete"
|
|
64481
|
+
},
|
|
64426
64482
|
"deviceHistory.getDeviceEnabled": {
|
|
64427
64483
|
capName: "device-history",
|
|
64428
64484
|
capScope: "system",
|
|
@@ -64441,6 +64497,12 @@ Object.freeze({
|
|
|
64441
64497
|
addonId: null,
|
|
64442
64498
|
access: "view"
|
|
64443
64499
|
},
|
|
64500
|
+
"deviceHistory.listOrphanSeries": {
|
|
64501
|
+
capName: "device-history",
|
|
64502
|
+
capScope: "system",
|
|
64503
|
+
addonId: null,
|
|
64504
|
+
access: "view"
|
|
64505
|
+
},
|
|
64444
64506
|
"deviceHistory.listSeries": {
|
|
64445
64507
|
capName: "device-history",
|
|
64446
64508
|
capScope: "system",
|
|
@@ -74446,7 +74508,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
74446
74508
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
74447
74509
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
74448
74510
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
74449
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
74511
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
74450
74512
|
([...RULE_TEXT], [...TANK]),
|
|
74451
74513
|
[...RULE_TEXT],
|
|
74452
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({
|
|
@@ -48108,7 +48165,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
|
|
|
48108
48165
|
modelId: string()
|
|
48109
48166
|
}),
|
|
48110
48167
|
object({ kind: literal("cpu-device") }),
|
|
48111
|
-
object({ kind: literal("coral-untouched") }),
|
|
48112
48168
|
object({ kind: literal("device-disabled") }),
|
|
48113
48169
|
object({ kind: literal("device-unavailable") }),
|
|
48114
48170
|
object({ kind: literal("node-offline") }),
|
|
@@ -48206,11 +48262,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
|
|
|
48206
48262
|
kind: literal("detector-store-unreadable"),
|
|
48207
48263
|
error: string()
|
|
48208
48264
|
}),
|
|
48209
|
-
object({
|
|
48210
|
-
kind: literal("coral-enabled"),
|
|
48211
|
-
nodeId: string(),
|
|
48212
|
-
deviceKey: string()
|
|
48213
|
-
}),
|
|
48214
48265
|
object({
|
|
48215
48266
|
kind: literal("custom-pin-kept"),
|
|
48216
48267
|
nodeId: string(),
|
|
@@ -54671,17 +54722,69 @@ object({
|
|
|
54671
54722
|
});
|
|
54672
54723
|
DeviceType.Sensor;
|
|
54673
54724
|
/**
|
|
54674
|
-
* Generic device-consumables capability —
|
|
54675
|
-
*
|
|
54676
|
-
* descaling cycles,
|
|
54677
|
-
*
|
|
54678
|
-
*
|
|
54679
|
-
*
|
|
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).
|
|
54680
54737
|
*
|
|
54681
54738
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
54682
54739
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
54683
54740
|
* "No consumables reported" placeholder when `items` is empty.
|
|
54684
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
|
+
]);
|
|
54685
54788
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
54686
54789
|
* each. */
|
|
54687
54790
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -54701,10 +54804,14 @@ var ConsumablesStatusSchema = object({
|
|
|
54701
54804
|
key: string().min(1),
|
|
54702
54805
|
/** Display name. */
|
|
54703
54806
|
label: string().min(1),
|
|
54704
|
-
/** Remaining life % when known (0..100). */
|
|
54807
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
54705
54808
|
level: number().min(0).max(100).nullable(),
|
|
54706
|
-
/**
|
|
54707
|
-
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(),
|
|
54708
54815
|
/** Ms epoch of the last replace, when known. */
|
|
54709
54816
|
lastResetAt: number().nullable(),
|
|
54710
54817
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -54939,8 +55046,9 @@ object({
|
|
|
54939
55046
|
status: DeviceStatusSchema
|
|
54940
55047
|
});
|
|
54941
55048
|
/**
|
|
54942
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
54943
|
-
*
|
|
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).
|
|
54944
55052
|
*
|
|
54945
55053
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
54946
55054
|
* by any integration that exposes the same program / option surface.
|
|
@@ -54988,11 +55096,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
54988
55096
|
"offline",
|
|
54989
55097
|
"description-missing"
|
|
54990
55098
|
]);
|
|
54991
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
54992
|
-
"ok",
|
|
54993
|
-
"low",
|
|
54994
|
-
"empty"
|
|
54995
|
-
]);
|
|
54996
55099
|
object({
|
|
54997
55100
|
availability: DishwasherAvailabilitySchema,
|
|
54998
55101
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -55025,8 +55128,6 @@ object({
|
|
|
55025
55128
|
powerOn: boolean().nullable(),
|
|
55026
55129
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
55027
55130
|
powerState: string().nullable(),
|
|
55028
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55029
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
55030
55131
|
/**
|
|
55031
55132
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
55032
55133
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -61809,60 +61910,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
61809
61910
|
auth: "admin",
|
|
61810
61911
|
access: "delete"
|
|
61811
61912
|
});
|
|
61812
|
-
/**
|
|
61813
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
61814
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
61815
|
-
* optional fan-speed selector.
|
|
61816
|
-
*
|
|
61817
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
61818
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
61819
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
61820
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
61821
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
61822
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
61823
|
-
*
|
|
61824
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
61825
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
61826
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
61827
|
-
*
|
|
61828
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
61829
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
61830
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
61831
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
61832
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
61833
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
61834
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
61835
|
-
* so the HA provider leaves all four `null`.
|
|
61836
|
-
*/
|
|
61837
|
-
var VacuumStateSchema = _enum([
|
|
61838
|
-
"idle",
|
|
61839
|
-
"cleaning",
|
|
61840
|
-
"paused",
|
|
61841
|
-
"returning",
|
|
61842
|
-
"docked",
|
|
61843
|
-
"drying",
|
|
61844
|
-
"error"
|
|
61845
|
-
]);
|
|
61846
|
-
/**
|
|
61847
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
61848
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
61849
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
61850
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
61851
|
-
* hardware has no such tank at all.
|
|
61852
|
-
*/
|
|
61853
|
-
var TankStatusSchema = object({
|
|
61854
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
61855
|
-
level: number().min(0).max(100).nullable(),
|
|
61856
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
61857
|
-
status: _enum([
|
|
61858
|
-
"ok",
|
|
61859
|
-
"low",
|
|
61860
|
-
"full"
|
|
61861
|
-
]).nullable()
|
|
61862
|
-
});
|
|
61863
61913
|
object({
|
|
61864
61914
|
/** Lifecycle state of the vacuum. */
|
|
61865
|
-
state:
|
|
61915
|
+
state: _enum([
|
|
61916
|
+
"idle",
|
|
61917
|
+
"cleaning",
|
|
61918
|
+
"paused",
|
|
61919
|
+
"returning",
|
|
61920
|
+
"docked",
|
|
61921
|
+
"drying",
|
|
61922
|
+
"error"
|
|
61923
|
+
]),
|
|
61866
61924
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
61867
61925
|
* reading. */
|
|
61868
61926
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -61871,14 +61929,6 @@ object({
|
|
|
61871
61929
|
fanSpeed: string().nullable(),
|
|
61872
61930
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
61873
61931
|
availableFanSpeeds: array(string()),
|
|
61874
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
61875
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
61876
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
61877
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
61878
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
61879
|
-
detergent: TankStatusSchema.nullable(),
|
|
61880
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
61881
|
-
dustBin: TankStatusSchema.nullable(),
|
|
61882
61932
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
61883
61933
|
progressPercent: number().min(0).max(100).nullable(),
|
|
61884
61934
|
/** Current error code (0 / null = no error). */
|
|
@@ -64419,6 +64469,12 @@ Object.freeze({
|
|
|
64419
64469
|
addonId: null,
|
|
64420
64470
|
access: "create"
|
|
64421
64471
|
},
|
|
64472
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
64473
|
+
capName: "device-history",
|
|
64474
|
+
capScope: "system",
|
|
64475
|
+
addonId: null,
|
|
64476
|
+
access: "delete"
|
|
64477
|
+
},
|
|
64422
64478
|
"deviceHistory.getDeviceEnabled": {
|
|
64423
64479
|
capName: "device-history",
|
|
64424
64480
|
capScope: "system",
|
|
@@ -64437,6 +64493,12 @@ Object.freeze({
|
|
|
64437
64493
|
addonId: null,
|
|
64438
64494
|
access: "view"
|
|
64439
64495
|
},
|
|
64496
|
+
"deviceHistory.listOrphanSeries": {
|
|
64497
|
+
capName: "device-history",
|
|
64498
|
+
capScope: "system",
|
|
64499
|
+
addonId: null,
|
|
64500
|
+
access: "view"
|
|
64501
|
+
},
|
|
64440
64502
|
"deviceHistory.listSeries": {
|
|
64441
64503
|
capName: "device-history",
|
|
64442
64504
|
capScope: "system",
|
|
@@ -74442,7 +74504,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
74442
74504
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
74443
74505
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
74444
74506
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
74445
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
74507
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
74446
74508
|
([...RULE_TEXT], [...TANK]),
|
|
74447
74509
|
[...RULE_TEXT],
|
|
74448
74510
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/package.json
CHANGED