@camstack/addon-notifiers 1.2.616 → 1.2.618
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +151 -89
- package/dist/addon.mjs +151 -89
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -5594,7 +5594,7 @@ var ZodIssueCode = {
|
|
|
5594
5594
|
var ZodFirstPartyTypeKind;
|
|
5595
5595
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5596
5596
|
//#endregion
|
|
5597
|
-
//#region ../types/dist/sleep-
|
|
5597
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
5598
5598
|
/**
|
|
5599
5599
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5600
5600
|
* window to float samples (D455).
|
|
@@ -8632,7 +8632,11 @@ var ContributionSectionSchema = object({
|
|
|
8632
8632
|
literal(4)
|
|
8633
8633
|
]).optional(),
|
|
8634
8634
|
tab: string().optional(),
|
|
8635
|
-
location: _enum([
|
|
8635
|
+
location: _enum([
|
|
8636
|
+
"settings",
|
|
8637
|
+
"top-tab",
|
|
8638
|
+
"hero"
|
|
8639
|
+
]).optional(),
|
|
8636
8640
|
order: number().optional(),
|
|
8637
8641
|
fields: array(any())
|
|
8638
8642
|
});
|
|
@@ -13723,7 +13727,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
13723
13727
|
literal(4)
|
|
13724
13728
|
]).optional(),
|
|
13725
13729
|
tab: string().optional(),
|
|
13726
|
-
location: _enum([
|
|
13730
|
+
location: _enum([
|
|
13731
|
+
"settings",
|
|
13732
|
+
"top-tab",
|
|
13733
|
+
"hero"
|
|
13734
|
+
]).optional(),
|
|
13727
13735
|
order: number().optional(),
|
|
13728
13736
|
fields: array(any())
|
|
13729
13737
|
});
|
|
@@ -17497,6 +17505,52 @@ var TierStatusSchema = object({
|
|
|
17497
17505
|
countedAt: number().nullable()
|
|
17498
17506
|
});
|
|
17499
17507
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17508
|
+
/**
|
|
17509
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17510
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17511
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17512
|
+
*/
|
|
17513
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17514
|
+
/** Rows held per stored tier. */
|
|
17515
|
+
var TierRowsSchema = object({
|
|
17516
|
+
raw: number().int(),
|
|
17517
|
+
"5m": number().int(),
|
|
17518
|
+
"1h": number().int(),
|
|
17519
|
+
"1d": number().int()
|
|
17520
|
+
});
|
|
17521
|
+
var OrphanSeriesSchema = object({
|
|
17522
|
+
seriesId: number().int(),
|
|
17523
|
+
deviceId: number().int(),
|
|
17524
|
+
key: string(),
|
|
17525
|
+
scope: string(),
|
|
17526
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17527
|
+
displayName: string().nullable(),
|
|
17528
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17529
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17530
|
+
missingSince: number().nullable(),
|
|
17531
|
+
firstTs: number(),
|
|
17532
|
+
lastTs: number(),
|
|
17533
|
+
rows: TierRowsSchema
|
|
17534
|
+
});
|
|
17535
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17536
|
+
"not-found",
|
|
17537
|
+
"not-orphan",
|
|
17538
|
+
"failed"
|
|
17539
|
+
]);
|
|
17540
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17541
|
+
seriesId: number().int(),
|
|
17542
|
+
ok: literal(true),
|
|
17543
|
+
deleted: TierRowsSchema
|
|
17544
|
+
}), object({
|
|
17545
|
+
seriesId: number().int(),
|
|
17546
|
+
ok: literal(false),
|
|
17547
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
17548
|
+
})]);
|
|
17549
|
+
var OrphanListSchema = object({
|
|
17550
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
17551
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
17552
|
+
truncated: boolean()
|
|
17553
|
+
});
|
|
17500
17554
|
var DeviceHistoryStatusSchema = object({
|
|
17501
17555
|
startedAt: number(),
|
|
17502
17556
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -17594,7 +17648,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
17594
17648
|
}), object({ enabled: boolean() }), {
|
|
17595
17649
|
kind: "mutation",
|
|
17596
17650
|
auth: "admin"
|
|
17597
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
17651
|
+
}), 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() }), {
|
|
17652
|
+
kind: "mutation",
|
|
17653
|
+
auth: "admin"
|
|
17654
|
+
});
|
|
17598
17655
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
17599
17656
|
object({ state: literal("absent") }),
|
|
17600
17657
|
object({
|
|
@@ -48091,7 +48148,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
|
|
|
48091
48148
|
modelId: string()
|
|
48092
48149
|
}),
|
|
48093
48150
|
object({ kind: literal("cpu-device") }),
|
|
48094
|
-
object({ kind: literal("coral-untouched") }),
|
|
48095
48151
|
object({ kind: literal("device-disabled") }),
|
|
48096
48152
|
object({ kind: literal("device-unavailable") }),
|
|
48097
48153
|
object({ kind: literal("node-offline") }),
|
|
@@ -48189,11 +48245,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
|
|
|
48189
48245
|
kind: literal("detector-store-unreadable"),
|
|
48190
48246
|
error: string()
|
|
48191
48247
|
}),
|
|
48192
|
-
object({
|
|
48193
|
-
kind: literal("coral-enabled"),
|
|
48194
|
-
nodeId: string(),
|
|
48195
|
-
deviceKey: string()
|
|
48196
|
-
}),
|
|
48197
48248
|
object({
|
|
48198
48249
|
kind: literal("custom-pin-kept"),
|
|
48199
48250
|
nodeId: string(),
|
|
@@ -54631,17 +54682,69 @@ object({
|
|
|
54631
54682
|
});
|
|
54632
54683
|
DeviceType.Sensor;
|
|
54633
54684
|
/**
|
|
54634
|
-
* Generic device-consumables capability —
|
|
54635
|
-
*
|
|
54636
|
-
* descaling cycles,
|
|
54637
|
-
*
|
|
54638
|
-
*
|
|
54639
|
-
*
|
|
54685
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
54686
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
54687
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
54688
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
54689
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
54690
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
54691
|
+
* its device tracks consumables registers it; the provider names each item
|
|
54692
|
+
* verbatim and says which `kind` it is.
|
|
54693
|
+
*
|
|
54694
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
54695
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
54696
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
54640
54697
|
*
|
|
54641
54698
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
54642
54699
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
54643
54700
|
* "No consumables reported" placeholder when `items` is empty.
|
|
54644
54701
|
*/
|
|
54702
|
+
/**
|
|
54703
|
+
* What an item IS, which decides which direction is bad:
|
|
54704
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
54705
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
54706
|
+
* salt, rinse aid); low or empty is bad.
|
|
54707
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
54708
|
+
* bad.
|
|
54709
|
+
* Absent = `wear`.
|
|
54710
|
+
*/
|
|
54711
|
+
var ConsumableKindSchema = _enum([
|
|
54712
|
+
"wear",
|
|
54713
|
+
"supply",
|
|
54714
|
+
"waste"
|
|
54715
|
+
]);
|
|
54716
|
+
/**
|
|
54717
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
54718
|
+
* of `kind`, which decides which direction is bad:
|
|
54719
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
54720
|
+
* remaining time and a reset.
|
|
54721
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
54722
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
54723
|
+
* a stepped level and "refill".
|
|
54724
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
54725
|
+
* that warns when full.
|
|
54726
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
54727
|
+
*/
|
|
54728
|
+
var ConsumableFormSchema = _enum([
|
|
54729
|
+
"part",
|
|
54730
|
+
"tank",
|
|
54731
|
+
"product",
|
|
54732
|
+
"bin"
|
|
54733
|
+
]);
|
|
54734
|
+
/** The provider's own discrete verdict on an item. */
|
|
54735
|
+
var ConsumableStatusSchema = _enum([
|
|
54736
|
+
"ok",
|
|
54737
|
+
"low",
|
|
54738
|
+
"empty",
|
|
54739
|
+
"full",
|
|
54740
|
+
"replace"
|
|
54741
|
+
]);
|
|
54742
|
+
_enum([
|
|
54743
|
+
"ok",
|
|
54744
|
+
"low",
|
|
54745
|
+
"empty",
|
|
54746
|
+
"full"
|
|
54747
|
+
]);
|
|
54645
54748
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
54646
54749
|
* each. */
|
|
54647
54750
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -54661,10 +54764,14 @@ var ConsumablesStatusSchema = object({
|
|
|
54661
54764
|
key: string().min(1),
|
|
54662
54765
|
/** Display name. */
|
|
54663
54766
|
label: string().min(1),
|
|
54664
|
-
/** Remaining life % when known (0..100). */
|
|
54767
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
54665
54768
|
level: number().min(0).max(100).nullable(),
|
|
54666
|
-
/**
|
|
54667
|
-
status:
|
|
54769
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
54770
|
+
status: ConsumableStatusSchema.nullable(),
|
|
54771
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
54772
|
+
kind: ConsumableKindSchema.optional(),
|
|
54773
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
54774
|
+
form: ConsumableFormSchema.optional(),
|
|
54668
54775
|
/** Ms epoch of the last replace, when known. */
|
|
54669
54776
|
lastResetAt: number().nullable(),
|
|
54670
54777
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -54899,8 +55006,9 @@ object({
|
|
|
54899
55006
|
status: DeviceStatusSchema
|
|
54900
55007
|
});
|
|
54901
55008
|
/**
|
|
54902
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
54903
|
-
*
|
|
55009
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
55010
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
55011
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
54904
55012
|
*
|
|
54905
55013
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
54906
55014
|
* by any integration that exposes the same program / option surface.
|
|
@@ -54948,11 +55056,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
54948
55056
|
"offline",
|
|
54949
55057
|
"description-missing"
|
|
54950
55058
|
]);
|
|
54951
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
54952
|
-
"ok",
|
|
54953
|
-
"low",
|
|
54954
|
-
"empty"
|
|
54955
|
-
]);
|
|
54956
55059
|
object({
|
|
54957
55060
|
availability: DishwasherAvailabilitySchema,
|
|
54958
55061
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -54985,8 +55088,6 @@ object({
|
|
|
54985
55088
|
powerOn: boolean().nullable(),
|
|
54986
55089
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
54987
55090
|
powerState: string().nullable(),
|
|
54988
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
54989
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
54990
55091
|
/**
|
|
54991
55092
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
54992
55093
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -61769,60 +61870,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
61769
61870
|
auth: "admin",
|
|
61770
61871
|
access: "delete"
|
|
61771
61872
|
});
|
|
61772
|
-
/**
|
|
61773
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
61774
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
61775
|
-
* optional fan-speed selector.
|
|
61776
|
-
*
|
|
61777
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
61778
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
61779
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
61780
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
61781
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
61782
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
61783
|
-
*
|
|
61784
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
61785
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
61786
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
61787
|
-
*
|
|
61788
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
61789
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
61790
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
61791
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
61792
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
61793
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
61794
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
61795
|
-
* so the HA provider leaves all four `null`.
|
|
61796
|
-
*/
|
|
61797
|
-
var VacuumStateSchema = _enum([
|
|
61798
|
-
"idle",
|
|
61799
|
-
"cleaning",
|
|
61800
|
-
"paused",
|
|
61801
|
-
"returning",
|
|
61802
|
-
"docked",
|
|
61803
|
-
"drying",
|
|
61804
|
-
"error"
|
|
61805
|
-
]);
|
|
61806
|
-
/**
|
|
61807
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
61808
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
61809
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
61810
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
61811
|
-
* hardware has no such tank at all.
|
|
61812
|
-
*/
|
|
61813
|
-
var TankStatusSchema = object({
|
|
61814
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
61815
|
-
level: number().min(0).max(100).nullable(),
|
|
61816
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
61817
|
-
status: _enum([
|
|
61818
|
-
"ok",
|
|
61819
|
-
"low",
|
|
61820
|
-
"full"
|
|
61821
|
-
]).nullable()
|
|
61822
|
-
});
|
|
61823
61873
|
object({
|
|
61824
61874
|
/** Lifecycle state of the vacuum. */
|
|
61825
|
-
state:
|
|
61875
|
+
state: _enum([
|
|
61876
|
+
"idle",
|
|
61877
|
+
"cleaning",
|
|
61878
|
+
"paused",
|
|
61879
|
+
"returning",
|
|
61880
|
+
"docked",
|
|
61881
|
+
"drying",
|
|
61882
|
+
"error"
|
|
61883
|
+
]),
|
|
61826
61884
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
61827
61885
|
* reading. */
|
|
61828
61886
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -61831,14 +61889,6 @@ object({
|
|
|
61831
61889
|
fanSpeed: string().nullable(),
|
|
61832
61890
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
61833
61891
|
availableFanSpeeds: array(string()),
|
|
61834
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
61835
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
61836
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
61837
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
61838
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
61839
|
-
detergent: TankStatusSchema.nullable(),
|
|
61840
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
61841
|
-
dustBin: TankStatusSchema.nullable(),
|
|
61842
61892
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
61843
61893
|
progressPercent: number().min(0).max(100).nullable(),
|
|
61844
61894
|
/** Current error code (0 / null = no error). */
|
|
@@ -64379,6 +64429,12 @@ Object.freeze({
|
|
|
64379
64429
|
addonId: null,
|
|
64380
64430
|
access: "create"
|
|
64381
64431
|
},
|
|
64432
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
64433
|
+
capName: "device-history",
|
|
64434
|
+
capScope: "system",
|
|
64435
|
+
addonId: null,
|
|
64436
|
+
access: "delete"
|
|
64437
|
+
},
|
|
64382
64438
|
"deviceHistory.getDeviceEnabled": {
|
|
64383
64439
|
capName: "device-history",
|
|
64384
64440
|
capScope: "system",
|
|
@@ -64397,6 +64453,12 @@ Object.freeze({
|
|
|
64397
64453
|
addonId: null,
|
|
64398
64454
|
access: "view"
|
|
64399
64455
|
},
|
|
64456
|
+
"deviceHistory.listOrphanSeries": {
|
|
64457
|
+
capName: "device-history",
|
|
64458
|
+
capScope: "system",
|
|
64459
|
+
addonId: null,
|
|
64460
|
+
access: "view"
|
|
64461
|
+
},
|
|
64400
64462
|
"deviceHistory.listSeries": {
|
|
64401
64463
|
capName: "device-history",
|
|
64402
64464
|
capScope: "system",
|
|
@@ -74609,7 +74671,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
74609
74671
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
74610
74672
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
74611
74673
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
74612
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
74674
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
74613
74675
|
([...RULE_TEXT], [...TANK]),
|
|
74614
74676
|
[...RULE_TEXT],
|
|
74615
74677
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/dist/addon.mjs
CHANGED
|
@@ -5567,7 +5567,7 @@ var ZodIssueCode = {
|
|
|
5567
5567
|
var ZodFirstPartyTypeKind;
|
|
5568
5568
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5569
5569
|
//#endregion
|
|
5570
|
-
//#region ../types/dist/sleep-
|
|
5570
|
+
//#region ../types/dist/sleep-CUp20JkO.mjs
|
|
5571
5571
|
/**
|
|
5572
5572
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5573
5573
|
* window to float samples (D455).
|
|
@@ -8605,7 +8605,11 @@ var ContributionSectionSchema = object({
|
|
|
8605
8605
|
literal(4)
|
|
8606
8606
|
]).optional(),
|
|
8607
8607
|
tab: string().optional(),
|
|
8608
|
-
location: _enum([
|
|
8608
|
+
location: _enum([
|
|
8609
|
+
"settings",
|
|
8610
|
+
"top-tab",
|
|
8611
|
+
"hero"
|
|
8612
|
+
]).optional(),
|
|
8609
8613
|
order: number().optional(),
|
|
8610
8614
|
fields: array(any())
|
|
8611
8615
|
});
|
|
@@ -13696,7 +13700,11 @@ var ConfigSectionWithValuesSchema = object({
|
|
|
13696
13700
|
literal(4)
|
|
13697
13701
|
]).optional(),
|
|
13698
13702
|
tab: string().optional(),
|
|
13699
|
-
location: _enum([
|
|
13703
|
+
location: _enum([
|
|
13704
|
+
"settings",
|
|
13705
|
+
"top-tab",
|
|
13706
|
+
"hero"
|
|
13707
|
+
]).optional(),
|
|
13700
13708
|
order: number().optional(),
|
|
13701
13709
|
fields: array(any())
|
|
13702
13710
|
});
|
|
@@ -17470,6 +17478,52 @@ var TierStatusSchema = object({
|
|
|
17470
17478
|
countedAt: number().nullable()
|
|
17471
17479
|
});
|
|
17472
17480
|
/** Operator/diagnostic view: rows per tier, last runs, refusals and drops since boot. */
|
|
17481
|
+
/**
|
|
17482
|
+
* Why a series is orphan. `device-gone`: its device is absent from the
|
|
17483
|
+
* successful device listings (the departure clock). `undeclared`: its `cap:`
|
|
17484
|
+
* key is declared by no capability any more (a field a cap removed).
|
|
17485
|
+
*/
|
|
17486
|
+
var DeviceHistoryOrphanReasonSchema = _enum(["device-gone", "undeclared"]);
|
|
17487
|
+
/** Rows held per stored tier. */
|
|
17488
|
+
var TierRowsSchema = object({
|
|
17489
|
+
raw: number().int(),
|
|
17490
|
+
"5m": number().int(),
|
|
17491
|
+
"1h": number().int(),
|
|
17492
|
+
"1d": number().int()
|
|
17493
|
+
});
|
|
17494
|
+
var OrphanSeriesSchema = object({
|
|
17495
|
+
seriesId: number().int(),
|
|
17496
|
+
deviceId: number().int(),
|
|
17497
|
+
key: string(),
|
|
17498
|
+
scope: string(),
|
|
17499
|
+
/** The metric's display name; `null` when its metric row is gone too. */
|
|
17500
|
+
displayName: string().nullable(),
|
|
17501
|
+
reason: DeviceHistoryOrphanReasonSchema,
|
|
17502
|
+
/** `device-gone`: since when the device has been absent; `null` otherwise. */
|
|
17503
|
+
missingSince: number().nullable(),
|
|
17504
|
+
firstTs: number(),
|
|
17505
|
+
lastTs: number(),
|
|
17506
|
+
rows: TierRowsSchema
|
|
17507
|
+
});
|
|
17508
|
+
var DeviceHistoryOrphanDeleteRefusalSchema = _enum([
|
|
17509
|
+
"not-found",
|
|
17510
|
+
"not-orphan",
|
|
17511
|
+
"failed"
|
|
17512
|
+
]);
|
|
17513
|
+
var OrphanDeleteEntrySchema = discriminatedUnion("ok", [object({
|
|
17514
|
+
seriesId: number().int(),
|
|
17515
|
+
ok: literal(true),
|
|
17516
|
+
deleted: TierRowsSchema
|
|
17517
|
+
}), object({
|
|
17518
|
+
seriesId: number().int(),
|
|
17519
|
+
ok: literal(false),
|
|
17520
|
+
reason: DeviceHistoryOrphanDeleteRefusalSchema
|
|
17521
|
+
})]);
|
|
17522
|
+
var OrphanListSchema = object({
|
|
17523
|
+
series: array(OrphanSeriesSchema).readonly(),
|
|
17524
|
+
/** More orphans exist than {@link DEVICE_HISTORY_ORPHAN_LIST_MAX}. */
|
|
17525
|
+
truncated: boolean()
|
|
17526
|
+
});
|
|
17473
17527
|
var DeviceHistoryStatusSchema = object({
|
|
17474
17528
|
startedAt: number(),
|
|
17475
17529
|
/** The store is declared, series loaded and the first reconcile has answered. */
|
|
@@ -17567,7 +17621,10 @@ method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly())
|
|
|
17567
17621
|
}), object({ enabled: boolean() }), {
|
|
17568
17622
|
kind: "mutation",
|
|
17569
17623
|
auth: "admin"
|
|
17570
|
-
}), method(object({}), DeviceHistoryStatusSchema, { auth: "admin" })
|
|
17624
|
+
}), 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() }), {
|
|
17625
|
+
kind: "mutation",
|
|
17626
|
+
auth: "admin"
|
|
17627
|
+
});
|
|
17571
17628
|
var DeviceCaStatusSchema = discriminatedUnion("state", [
|
|
17572
17629
|
object({ state: literal("absent") }),
|
|
17573
17630
|
object({
|
|
@@ -48064,7 +48121,6 @@ var RecommendationReasonSchema = discriminatedUnion("kind", [
|
|
|
48064
48121
|
modelId: string()
|
|
48065
48122
|
}),
|
|
48066
48123
|
object({ kind: literal("cpu-device") }),
|
|
48067
|
-
object({ kind: literal("coral-untouched") }),
|
|
48068
48124
|
object({ kind: literal("device-disabled") }),
|
|
48069
48125
|
object({ kind: literal("device-unavailable") }),
|
|
48070
48126
|
object({ kind: literal("node-offline") }),
|
|
@@ -48162,11 +48218,6 @@ var AutoTuneWarningSchema = discriminatedUnion("kind", [
|
|
|
48162
48218
|
kind: literal("detector-store-unreadable"),
|
|
48163
48219
|
error: string()
|
|
48164
48220
|
}),
|
|
48165
|
-
object({
|
|
48166
|
-
kind: literal("coral-enabled"),
|
|
48167
|
-
nodeId: string(),
|
|
48168
|
-
deviceKey: string()
|
|
48169
|
-
}),
|
|
48170
48221
|
object({
|
|
48171
48222
|
kind: literal("custom-pin-kept"),
|
|
48172
48223
|
nodeId: string(),
|
|
@@ -54604,17 +54655,69 @@ object({
|
|
|
54604
54655
|
});
|
|
54605
54656
|
DeviceType.Sensor;
|
|
54606
54657
|
/**
|
|
54607
|
-
* Generic device-consumables capability —
|
|
54608
|
-
*
|
|
54609
|
-
* descaling cycles,
|
|
54610
|
-
*
|
|
54611
|
-
*
|
|
54612
|
-
*
|
|
54658
|
+
* Generic device-consumables capability — the ONE place a device reports what
|
|
54659
|
+
* it uses up or fills: wear parts (vacuum filters/brushes, cartridges,
|
|
54660
|
+
* descaling cycles), supplies it draws from (a vacuum's clean-water tank and
|
|
54661
|
+
* detergent, a dishwasher's salt and rinse aid) and waste it collects (a dirty
|
|
54662
|
+
* water tank, a dust bin). Each item carries its remaining life or fill and an
|
|
54663
|
+
* optional "Replaced" reset action. Device-agnostic: any provider that knows
|
|
54664
|
+
* its device tracks consumables registers it; the provider names each item
|
|
54665
|
+
* verbatim and says which `kind` it is.
|
|
54666
|
+
*
|
|
54667
|
+
* The admin UI renders it as ONE collapsible section directly under the
|
|
54668
|
+
* device page's hero card (`placement: 'hero'`), for every device bound to
|
|
54669
|
+
* this cap — never drawn by a device type's hero card itself (D915).
|
|
54613
54670
|
*
|
|
54614
54671
|
* Like `childLayout`, the cap is INERT until a provider sets items: no
|
|
54615
54672
|
* provider populates it by guessing (no HA inference). The UI renders a
|
|
54616
54673
|
* "No consumables reported" placeholder when `items` is empty.
|
|
54617
54674
|
*/
|
|
54675
|
+
/**
|
|
54676
|
+
* What an item IS, which decides which direction is bad:
|
|
54677
|
+
* - `wear` — a part that wears out (a brush, a filter); low life is bad.
|
|
54678
|
+
* - `supply` — something the device draws from (clean water, detergent,
|
|
54679
|
+
* salt, rinse aid); low or empty is bad.
|
|
54680
|
+
* - `waste` — something the device fills (dirty water, a dust bin); full is
|
|
54681
|
+
* bad.
|
|
54682
|
+
* Absent = `wear`.
|
|
54683
|
+
*/
|
|
54684
|
+
var ConsumableKindSchema = _enum([
|
|
54685
|
+
"wear",
|
|
54686
|
+
"supply",
|
|
54687
|
+
"waste"
|
|
54688
|
+
]);
|
|
54689
|
+
/**
|
|
54690
|
+
* What an item LOOKS like, which decides how a client draws it — independent
|
|
54691
|
+
* of `kind`, which decides which direction is bad:
|
|
54692
|
+
* - `part` — a part that wears (a brush, a filter, a mop pad): a wear bar,
|
|
54693
|
+
* remaining time and a reset.
|
|
54694
|
+
* - `tank` — a container of liquid (clean water, dirty water): a fill gauge.
|
|
54695
|
+
* - `product` — something bought and refilled (detergent, salt, rinse aid):
|
|
54696
|
+
* a stepped level and "refill".
|
|
54697
|
+
* - `bin` — a container that collects waste (a dust bin): a fill gauge
|
|
54698
|
+
* that warns when full.
|
|
54699
|
+
* Absent = derived from the kind ({@link consumableFormOf}).
|
|
54700
|
+
*/
|
|
54701
|
+
var ConsumableFormSchema = _enum([
|
|
54702
|
+
"part",
|
|
54703
|
+
"tank",
|
|
54704
|
+
"product",
|
|
54705
|
+
"bin"
|
|
54706
|
+
]);
|
|
54707
|
+
/** The provider's own discrete verdict on an item. */
|
|
54708
|
+
var ConsumableStatusSchema = _enum([
|
|
54709
|
+
"ok",
|
|
54710
|
+
"low",
|
|
54711
|
+
"empty",
|
|
54712
|
+
"full",
|
|
54713
|
+
"replace"
|
|
54714
|
+
]);
|
|
54715
|
+
_enum([
|
|
54716
|
+
"ok",
|
|
54717
|
+
"low",
|
|
54718
|
+
"empty",
|
|
54719
|
+
"full"
|
|
54720
|
+
]);
|
|
54618
54721
|
/** Units a remaining-life counter is reported in. Closed: the panel renders
|
|
54619
54722
|
* each. */
|
|
54620
54723
|
var ConsumableRemainingUnitSchema = _enum([
|
|
@@ -54634,10 +54737,14 @@ var ConsumablesStatusSchema = object({
|
|
|
54634
54737
|
key: string().min(1),
|
|
54635
54738
|
/** Display name. */
|
|
54636
54739
|
label: string().min(1),
|
|
54637
|
-
/** Remaining life % when known (0..100). */
|
|
54740
|
+
/** Remaining life % (`wear`) or fill % (`supply`, `waste`) when known (0..100). */
|
|
54638
54741
|
level: number().min(0).max(100).nullable(),
|
|
54639
|
-
/**
|
|
54640
|
-
status:
|
|
54742
|
+
/** The provider's discrete verdict when known (binary mode). */
|
|
54743
|
+
status: ConsumableStatusSchema.nullable(),
|
|
54744
|
+
/** What the item is — decides whether low or full is bad. Absent = `wear`. */
|
|
54745
|
+
kind: ConsumableKindSchema.optional(),
|
|
54746
|
+
/** How the item is drawn (part, tank, product, bin). Absent = derived from `kind`. */
|
|
54747
|
+
form: ConsumableFormSchema.optional(),
|
|
54641
54748
|
/** Ms epoch of the last replace, when known. */
|
|
54642
54749
|
lastResetAt: number().nullable(),
|
|
54643
54750
|
/** Whether `reset()` is meaningful for this item. */
|
|
@@ -54872,8 +54979,9 @@ object({
|
|
|
54872
54979
|
status: DeviceStatusSchema
|
|
54873
54980
|
});
|
|
54874
54981
|
/**
|
|
54875
|
-
* Smart-dishwasher cap — program lifecycle, door / remote-start gates
|
|
54876
|
-
*
|
|
54982
|
+
* Smart-dishwasher cap — program lifecycle, door / remote-start gates and
|
|
54983
|
+
* common program options. Salt and rinse aid are NOT here: they are items of
|
|
54984
|
+
* the device's `consumables` cap, like every other device's (D915).
|
|
54877
54985
|
*
|
|
54878
54986
|
* Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
|
|
54879
54987
|
* by any integration that exposes the same program / option surface.
|
|
@@ -54921,11 +55029,6 @@ var DishwasherAvailabilitySchema = _enum([
|
|
|
54921
55029
|
"offline",
|
|
54922
55030
|
"description-missing"
|
|
54923
55031
|
]);
|
|
54924
|
-
var DishwasherConsumableLevelSchema = _enum([
|
|
54925
|
-
"ok",
|
|
54926
|
-
"low",
|
|
54927
|
-
"empty"
|
|
54928
|
-
]);
|
|
54929
55032
|
object({
|
|
54930
55033
|
availability: DishwasherAvailabilitySchema,
|
|
54931
55034
|
/** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
|
|
@@ -54958,8 +55061,6 @@ object({
|
|
|
54958
55061
|
powerOn: boolean().nullable(),
|
|
54959
55062
|
/** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
|
|
54960
55063
|
powerState: string().nullable(),
|
|
54961
|
-
saltLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
54962
|
-
rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
|
|
54963
55064
|
/**
|
|
54964
55065
|
* True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
|
|
54965
55066
|
* combined care-and-filter reminder raised); false when every such reminder reads clear; null
|
|
@@ -61742,60 +61843,17 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
61742
61843
|
auth: "admin",
|
|
61743
61844
|
access: "delete"
|
|
61744
61845
|
});
|
|
61745
|
-
/**
|
|
61746
|
-
* Robot-vacuum cap. Models HA `vacuum.*` entities — anything with a
|
|
61747
|
-
* cleaning lifecycle plus a return-to-base / locate surface and an
|
|
61748
|
-
* optional fan-speed selector.
|
|
61749
|
-
*
|
|
61750
|
-
* State follows HA's canonical vacuum lifecycle: `idle` / `cleaning` /
|
|
61751
|
-
* `paused` / `returning` / `docked` / `error`. `batteryLevel`
|
|
61752
|
-
* (0..100) is nullable — some vacuums don't report a battery
|
|
61753
|
-
* percentage. `fanSpeed` is the current speed token (provider-verbatim,
|
|
61754
|
-
* e.g. `'standard'` / `'turbo'`) and `availableFanSpeeds` lists the
|
|
61755
|
-
* tokens the hardware accepts so the UI renders only supported choices.
|
|
61756
|
-
*
|
|
61757
|
-
* The `setFanSpeed` method takes the bare `speed` token — the provider
|
|
61758
|
-
* validates it against the vacuum's own list. `locate` triggers the
|
|
61759
|
-
* find-me chirp; `returnToBase` sends it home.
|
|
61760
|
-
*
|
|
61761
|
-
* Consumable / waste tanks: `cleanWater` / `dirtyWater` / `detergent` /
|
|
61762
|
-
* `dustBin` each carry a nullable `{ level (0..100 %), status ('ok' |
|
|
61763
|
-
* 'low' | 'full') }` reading. Native providers (e.g. Dreame, Roborock)
|
|
61764
|
-
* SHOULD populate whichever tanks the hardware has — leave a field `null`
|
|
61765
|
-
* only when the device has no such tank at all, and use a `TankStatus`
|
|
61766
|
-
* with both inner fields `null` when the tank exists but its level is
|
|
61767
|
-
* currently unknown. HA `vacuum.*` entities expose no per-tank telemetry,
|
|
61768
|
-
* so the HA provider leaves all four `null`.
|
|
61769
|
-
*/
|
|
61770
|
-
var VacuumStateSchema = _enum([
|
|
61771
|
-
"idle",
|
|
61772
|
-
"cleaning",
|
|
61773
|
-
"paused",
|
|
61774
|
-
"returning",
|
|
61775
|
-
"docked",
|
|
61776
|
-
"drying",
|
|
61777
|
-
"error"
|
|
61778
|
-
]);
|
|
61779
|
-
/**
|
|
61780
|
-
* One consumable / waste tank on a robot vacuum (clean-water, dirty-water,
|
|
61781
|
-
* detergent or dust-bin). A tank can report a numeric fill `level` (0..100),
|
|
61782
|
-
* a discrete `status` (binary-style hardware), or both. Both `null` means the
|
|
61783
|
-
* level is currently unknown; the OWNING field being `null` means the
|
|
61784
|
-
* hardware has no such tank at all.
|
|
61785
|
-
*/
|
|
61786
|
-
var TankStatusSchema = object({
|
|
61787
|
-
/** Numeric fill 0..100 when the hardware reports a percentage; null otherwise. */
|
|
61788
|
-
level: number().min(0).max(100).nullable(),
|
|
61789
|
-
/** Discrete state when the hardware is binary-mode; null otherwise. */
|
|
61790
|
-
status: _enum([
|
|
61791
|
-
"ok",
|
|
61792
|
-
"low",
|
|
61793
|
-
"full"
|
|
61794
|
-
]).nullable()
|
|
61795
|
-
});
|
|
61796
61846
|
object({
|
|
61797
61847
|
/** Lifecycle state of the vacuum. */
|
|
61798
|
-
state:
|
|
61848
|
+
state: _enum([
|
|
61849
|
+
"idle",
|
|
61850
|
+
"cleaning",
|
|
61851
|
+
"paused",
|
|
61852
|
+
"returning",
|
|
61853
|
+
"docked",
|
|
61854
|
+
"drying",
|
|
61855
|
+
"error"
|
|
61856
|
+
]),
|
|
61799
61857
|
/** 0..100 battery percentage. Null when the device has no battery
|
|
61800
61858
|
* reading. */
|
|
61801
61859
|
batteryLevel: number().min(0).max(100).nullable(),
|
|
@@ -61804,14 +61862,6 @@ object({
|
|
|
61804
61862
|
fanSpeed: string().nullable(),
|
|
61805
61863
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
61806
61864
|
availableFanSpeeds: array(string()),
|
|
61807
|
-
/** Clean-water (mop) tank. Null when the hardware has no clean-water tank. */
|
|
61808
|
-
cleanWater: TankStatusSchema.nullable(),
|
|
61809
|
-
/** Dirty-water (recovery) tank. Null when the hardware has no dirty-water tank. */
|
|
61810
|
-
dirtyWater: TankStatusSchema.nullable(),
|
|
61811
|
-
/** Detergent tank. Null when the hardware has no detergent tank. */
|
|
61812
|
-
detergent: TankStatusSchema.nullable(),
|
|
61813
|
-
/** Dust bin. Null when the hardware has no dust bin. */
|
|
61814
|
-
dustBin: TankStatusSchema.nullable(),
|
|
61815
61865
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
61816
61866
|
progressPercent: number().min(0).max(100).nullable(),
|
|
61817
61867
|
/** Current error code (0 / null = no error). */
|
|
@@ -64352,6 +64402,12 @@ Object.freeze({
|
|
|
64352
64402
|
addonId: null,
|
|
64353
64403
|
access: "create"
|
|
64354
64404
|
},
|
|
64405
|
+
"deviceHistory.deleteOrphanSeries": {
|
|
64406
|
+
capName: "device-history",
|
|
64407
|
+
capScope: "system",
|
|
64408
|
+
addonId: null,
|
|
64409
|
+
access: "delete"
|
|
64410
|
+
},
|
|
64355
64411
|
"deviceHistory.getDeviceEnabled": {
|
|
64356
64412
|
capName: "device-history",
|
|
64357
64413
|
capScope: "system",
|
|
@@ -64370,6 +64426,12 @@ Object.freeze({
|
|
|
64370
64426
|
addonId: null,
|
|
64371
64427
|
access: "view"
|
|
64372
64428
|
},
|
|
64429
|
+
"deviceHistory.listOrphanSeries": {
|
|
64430
|
+
capName: "device-history",
|
|
64431
|
+
capScope: "system",
|
|
64432
|
+
addonId: null,
|
|
64433
|
+
access: "view"
|
|
64434
|
+
},
|
|
64373
64435
|
"deviceHistory.listSeries": {
|
|
64374
64436
|
capName: "device-history",
|
|
64375
64437
|
capScope: "system",
|
|
@@ -74582,7 +74644,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
74582
74644
|
([...RULE_TEXT], [...COMBINED_ALARM]),
|
|
74583
74645
|
([...RULE_TEXT], [...DEVICE_EVENTS]),
|
|
74584
74646
|
([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
|
|
74585
|
-
([...RULE_TEXT], [...CONSUMABLE]),
|
|
74647
|
+
([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
|
|
74586
74648
|
([...RULE_TEXT], [...TANK]),
|
|
74587
74649
|
[...RULE_TEXT],
|
|
74588
74650
|
([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-notifiers",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.618",
|
|
4
4
|
"description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|