@camstack/addon-matter-broker 0.2.128 → 0.2.130

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.
Files changed (3) hide show
  1. package/dist/addon.js +341 -37
  2. package/dist/addon.mjs +341 -37
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -13,7 +13,7 @@ let node_stream_promises = require("node:stream/promises");
13
13
  let node_net = require("node:net");
14
14
  let node_dgram = require("node:dgram");
15
15
  node_dgram = require_esm.__toESM(node_dgram, 1);
16
- //#region ../types/dist/event-category-BvOFi6PY.mjs
16
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
17
17
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
18
18
  EventCategory["SystemBoot"] = "system.boot";
19
19
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -92,9 +92,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
92
92
  /**
93
93
  * The node's one-shot runner boot check (D877): planned runners against the
94
94
  * process service, `degraded` when any is failed, refused or missing. The
95
- * alert centre turns it into one alert and a direct critical push.
95
+ * alert centre turns it into one critical alert.
96
96
  */
97
97
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
98
+ /**
99
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
100
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
101
+ * centre sends no notification of its own: Notification Center turns this
102
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
103
+ * system-event kinds, and reconciles from the alerts store because a bus
104
+ * event may be dropped (D8, D11).
105
+ */
106
+ EventCategory["AlertEpisode"] = "alert.episode";
98
107
  EventCategory["AddonError"] = "addon.error";
99
108
  EventCategory["AddonPageReady"] = "addon.page-ready";
100
109
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5552,7 +5561,7 @@ var ZodIssueCode = {
5552
5561
  var ZodFirstPartyTypeKind;
5553
5562
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5554
5563
  //#endregion
5555
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5564
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5556
5565
  /**
5557
5566
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5558
5567
  * window to float samples (D455).
@@ -13515,7 +13524,14 @@ var AlertSeveritySchema = _enum([
13515
13524
  ]);
13516
13525
  var AlertActionSchema = object({
13517
13526
  label: string$2(),
13518
- href: string$2().optional()
13527
+ href: string$2().optional(),
13528
+ /**
13529
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13530
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13531
+ * start) — the browser must leave the SPA with a full navigation, because
13532
+ * the SPA has no such route and would bounce to the home page.
13533
+ */
13534
+ navigation: _enum(["app", "server"]).optional()
13519
13535
  });
13520
13536
  var AlertStatusSchema = _enum([
13521
13537
  "active",
@@ -17945,7 +17961,11 @@ var deviceDiscoveryCapability = {
17945
17961
  };
17946
17962
  /**
17947
17963
  * `device-adoption` — generic discovery + adoption surface,
17948
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17964
+ * system-scoped collection (one provider per integration addon), routed
17965
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17966
+ * pin model as `connection-test`. The admin UI keeps using
17967
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17968
+ * successor to `ha-discovery`:
17949
17969
  * keyed by `integrationId` (the addon resolves integrationId → broker
17950
17970
  * internally) rather than a connection-specific `brokerId`, and it
17951
17971
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -18110,7 +18130,7 @@ var ResyncResultSchema = object({
18110
18130
  var deviceAdoptionCapability = {
18111
18131
  name: "device-adoption",
18112
18132
  scope: "system",
18113
- mode: "singleton",
18133
+ mode: "collection",
18114
18134
  status: {
18115
18135
  schema: AdoptionStatusSchema,
18116
18136
  kind: "poll"
@@ -42293,6 +42313,9 @@ var NcSystemEventKindSchema = _enum([
42293
42313
  "server-updated",
42294
42314
  "export-completed",
42295
42315
  "backup-completed",
42316
+ "alert-critical",
42317
+ "alert-error",
42318
+ "alert-critical-resolved",
42296
42319
  "camera-online",
42297
42320
  "camera-offline",
42298
42321
  "camera-disabled",
@@ -51369,7 +51392,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51369
51392
  }), method(object({ jobId: string$2().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string$2() }), object({ cancelled: boolean() }), {
51370
51393
  kind: "mutation",
51371
51394
  auth: "admin"
51372
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string$2() }), {
51395
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string$2()).readonly() }), object({
51396
+ clear: boolean(),
51397
+ repointLocationId: string$2().optional()
51398
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string$2() }), {
51373
51399
  kind: "mutation",
51374
51400
  auth: "admin"
51375
51401
  }), method(StorageCleanupInputSchema, object({ jobId: string$2() }), {
@@ -55642,6 +55668,11 @@ onStatusChanged: { data: object({
55642
55668
  *
55643
55669
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55644
55670
  * provider refreshes the slice on an interval and eagerly after commands.
55671
+ *
55672
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55673
+ * nullable: `null` means "not known right now" (the appliance has not said,
55674
+ * the link is down, or the description does not carry it) and is never
55675
+ * rendered or exported as `false` / `0`. `availability` says why.
55645
55676
  */
55646
55677
  var DishwasherStateSchema = _enum([
55647
55678
  "idle",
@@ -55651,35 +55682,155 @@ var DishwasherStateSchema = _enum([
55651
55682
  "error",
55652
55683
  "unavailable"
55653
55684
  ]);
55685
+ /**
55686
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55687
+ * view for compact surfaces; this is what the appliance said.
55688
+ */
55689
+ var DishwasherOperationStateSchema = _enum([
55690
+ "Inactive",
55691
+ "Ready",
55692
+ "DelayedStart",
55693
+ "Run",
55694
+ "Pause",
55695
+ "ActionRequired",
55696
+ "Finished",
55697
+ "Error",
55698
+ "Aborting"
55699
+ ]);
55700
+ /**
55701
+ * Why fields may be `null`:
55702
+ * - `available` — the link is up and the description is loaded;
55703
+ * - `offline` — the local link is down (values are unknown, not last-known);
55704
+ * - `description-missing` — the link is up but the appliance's description could not
55705
+ * be loaded, so its values cannot be decoded.
55706
+ */
55707
+ var DishwasherAvailabilitySchema = _enum([
55708
+ "available",
55709
+ "offline",
55710
+ "description-missing"
55711
+ ]);
55654
55712
  var DishwasherConsumableLevelSchema = _enum([
55655
55713
  "ok",
55656
55714
  "low",
55657
55715
  "empty"
55658
55716
  ]);
55659
55717
  var DishwasherStatusSchema = object({
55718
+ availability: DishwasherAvailabilitySchema,
55719
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55660
55720
  state: DishwasherStateSchema,
55661
- /** Active program id/name, or null when none selected / unknown. */
55721
+ /** The appliance's operation state as reported; null when not known. */
55722
+ operationState: DishwasherOperationStateSchema.nullable(),
55723
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55662
55724
  program: string$2().nullable(),
55663
- /** Program tokens the hardware accepts — drives the UI selector. */
55725
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55726
+ selectedProgram: string$2().nullable(),
55727
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55664
55728
  availablePrograms: array(string$2()),
55665
- /** Minutes remaining on the active cycle, or null when not running. */
55666
- remainingMinutes: number().int().nonnegative().nullable(),
55729
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55730
+ remainingSeconds: number().int().nonnegative().nullable(),
55731
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55732
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55667
55733
  /** Cycle completion 0..100, or null when not applicable. */
55668
55734
  progressPercent: number().min(0).max(100).nullable(),
55669
- /** True when the door is reported open. */
55670
- doorOpen: boolean(),
55671
- /** True when remote start is allowed (door closed, power on, etc.). */
55672
- remoteStartAllowed: boolean(),
55673
- /** Main power / switched-on state. */
55674
- powerOn: boolean(),
55735
+ /** True when the door is reported open; null when the door state is not known. */
55736
+ doorOpen: boolean().nullable(),
55737
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55738
+ doorLocked: boolean().nullable(),
55739
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55740
+ remoteStartAllowed: boolean().nullable(),
55741
+ /** True when the appliance accepts remote control now; null when not known. */
55742
+ remoteControlActive: boolean().nullable(),
55743
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55744
+ localControlActive: boolean().nullable(),
55745
+ /** Main power / switched-on state; null when not known. */
55746
+ powerOn: boolean().nullable(),
55747
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55748
+ powerState: string$2().nullable(),
55675
55749
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55676
55750
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55677
- halfLoad: boolean(),
55678
- hygienePlus: boolean(),
55751
+ /** Option states: null when the appliance does not expose the option or has not said. */
55752
+ halfLoad: boolean().nullable(),
55753
+ hygienePlus: boolean().nullable(),
55754
+ /** Extra dry option when the appliance exposes it. */
55755
+ extraDry: boolean().nullable(),
55756
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55757
+ intensiveZone: boolean().nullable(),
55758
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55759
+ varioSpeedPlus: boolean().nullable(),
55760
+ /** Child lock (controls disabled on the appliance); null when not known. */
55761
+ childLock: boolean().nullable(),
55762
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55763
+ activeEvents: array(string$2()),
55764
+ /** Numeric error code when the appliance reports one; null otherwise. */
55679
55765
  errorCode: number().nullable(),
55766
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55680
55767
  errorLabel: string$2().nullable(),
55768
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55681
55769
  lastFetchedAt: number()
55682
55770
  });
55771
+ var DeviceIdSchema = number().int().nonnegative();
55772
+ /** A value a program option or setting can take. */
55773
+ var DishwasherValueSchema = union([
55774
+ boolean(),
55775
+ string$2(),
55776
+ number()
55777
+ ]);
55778
+ var DishwasherAccessSchema = _enum([
55779
+ "none",
55780
+ "read",
55781
+ "readWrite",
55782
+ "writeOnly",
55783
+ "readStatic"
55784
+ ]);
55785
+ /**
55786
+ * One option or setting the appliance declares, with the constraints its description
55787
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55788
+ */
55789
+ var DishwasherOptionDescriptorSchema = object({
55790
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55791
+ key: string$2(),
55792
+ /** Last segment of the key, for display. */
55793
+ name: string$2(),
55794
+ type: _enum([
55795
+ "boolean",
55796
+ "number",
55797
+ "enum",
55798
+ "string"
55799
+ ]),
55800
+ access: DishwasherAccessSchema,
55801
+ /** The appliance reports this entity as currently available. */
55802
+ available: boolean(),
55803
+ /** Unit the description declares for a number; null when it declares none. */
55804
+ unit: string$2().nullable(),
55805
+ min: number().nullable(),
55806
+ max: number().nullable(),
55807
+ step: number().nullable(),
55808
+ /** Allowed members of an enum; null for other types. */
55809
+ enumValues: array(string$2()).nullable(),
55810
+ defaultValue: DishwasherValueSchema.nullable()
55811
+ });
55812
+ var DishwasherProgramSchema = object({
55813
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55814
+ key: string$2(),
55815
+ name: string$2(),
55816
+ /** The appliance currently offers this program. */
55817
+ available: boolean(),
55818
+ /** The options this program lists, with the program-level access / availability / default. */
55819
+ options: array(DishwasherOptionDescriptorSchema)
55820
+ });
55821
+ var DishwasherOptionsSchema = object({
55822
+ availability: DishwasherAvailabilitySchema,
55823
+ /** What the appliance can be told to do, from the commands its description declares. */
55824
+ supportsStart: boolean(),
55825
+ supportsPause: boolean(),
55826
+ supportsResume: boolean(),
55827
+ supportsStop: boolean(),
55828
+ supportsPower: boolean(),
55829
+ /** Every program the description lists, with its options. */
55830
+ programs: array(DishwasherProgramSchema),
55831
+ /** Every option and setting entity the description lists (programs reference these by key). */
55832
+ options: array(DishwasherOptionDescriptorSchema)
55833
+ });
55683
55834
  var dishwasherCapability = {
55684
55835
  name: "dishwasher",
55685
55836
  scope: "device",
@@ -55687,58 +55838,102 @@ var dishwasherCapability = {
55687
55838
  mode: "singleton",
55688
55839
  deviceTypes: [DeviceType.Dishwasher],
55689
55840
  methods: {
55690
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55841
+ /**
55842
+ * Start a program. Without `program` the selected one starts. `options` are
55843
+ * option feature keys; each is checked against the program's constraints.
55844
+ */
55845
+ start: method(object({
55846
+ deviceId: DeviceIdSchema,
55847
+ program: string$2().min(1).optional(),
55848
+ options: record(string$2(), DishwasherValueSchema).optional()
55849
+ }), _void(), {
55691
55850
  kind: "mutation",
55692
55851
  auth: "protected"
55693
55852
  }),
55694
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55853
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55695
55854
  kind: "mutation",
55696
55855
  auth: "protected"
55697
55856
  }),
55698
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55857
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55699
55858
  kind: "mutation",
55700
55859
  auth: "protected"
55701
55860
  }),
55861
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55862
+ kind: "mutation",
55863
+ auth: "protected"
55864
+ }),
55865
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55702
55866
  setProgram: method(object({
55703
- deviceId: number().int().nonnegative(),
55867
+ deviceId: DeviceIdSchema,
55704
55868
  program: string$2().min(1)
55705
55869
  }), _void(), {
55706
55870
  kind: "mutation",
55707
55871
  auth: "protected"
55708
55872
  }),
55709
55873
  setPower: method(object({
55710
- deviceId: number().int().nonnegative(),
55874
+ deviceId: DeviceIdSchema,
55711
55875
  on: boolean()
55712
55876
  }), _void(), {
55713
55877
  kind: "mutation",
55714
55878
  auth: "protected"
55715
55879
  }),
55716
55880
  setHalfLoad: method(object({
55717
- deviceId: number().int().nonnegative(),
55881
+ deviceId: DeviceIdSchema,
55718
55882
  on: boolean()
55719
55883
  }), _void(), {
55720
55884
  kind: "mutation",
55721
55885
  auth: "protected"
55722
55886
  }),
55723
55887
  setHygienePlus: method(object({
55724
- deviceId: number().int().nonnegative(),
55888
+ deviceId: DeviceIdSchema,
55725
55889
  on: boolean()
55726
55890
  }), _void(), {
55727
55891
  kind: "mutation",
55728
55892
  auth: "protected"
55729
55893
  }),
55894
+ setExtraDry: method(object({
55895
+ deviceId: DeviceIdSchema,
55896
+ on: boolean()
55897
+ }), _void(), {
55898
+ kind: "mutation",
55899
+ auth: "protected"
55900
+ }),
55901
+ setIntensiveZone: method(object({
55902
+ deviceId: DeviceIdSchema,
55903
+ on: boolean()
55904
+ }), _void(), {
55905
+ kind: "mutation",
55906
+ auth: "protected"
55907
+ }),
55908
+ setVarioSpeedPlus: method(object({
55909
+ deviceId: DeviceIdSchema,
55910
+ on: boolean()
55911
+ }), _void(), {
55912
+ kind: "mutation",
55913
+ auth: "protected"
55914
+ }),
55915
+ setChildLock: method(object({
55916
+ deviceId: DeviceIdSchema,
55917
+ on: boolean()
55918
+ }), _void(), {
55919
+ kind: "mutation",
55920
+ auth: "protected"
55921
+ }),
55922
+ /**
55923
+ * Write any option or setting by feature key. Refused when the description does
55924
+ * not list it, it is not writable or not available now, or the value is outside
55925
+ * its declared range / members.
55926
+ */
55730
55927
  setOption: method(object({
55731
- deviceId: number().int().nonnegative(),
55928
+ deviceId: DeviceIdSchema,
55732
55929
  key: string$2().min(1),
55733
- value: union([
55734
- boolean(),
55735
- string$2(),
55736
- number()
55737
- ])
55930
+ value: DishwasherValueSchema
55738
55931
  }), _void(), {
55739
55932
  kind: "mutation",
55740
55933
  auth: "protected"
55741
- })
55934
+ }),
55935
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55936
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55742
55937
  },
55743
55938
  status: {
55744
55939
  schema: DishwasherStatusSchema,
@@ -69687,6 +69882,12 @@ Object.freeze({
69687
69882
  addonId: null,
69688
69883
  access: "view"
69689
69884
  },
69885
+ "dishwasher.getOptions": {
69886
+ capName: "dishwasher",
69887
+ capScope: "device",
69888
+ addonId: null,
69889
+ access: "view"
69890
+ },
69690
69891
  "dishwasher.getStatus": {
69691
69892
  capName: "dishwasher",
69692
69893
  capScope: "device",
@@ -69699,6 +69900,24 @@ Object.freeze({
69699
69900
  addonId: null,
69700
69901
  access: "create"
69701
69902
  },
69903
+ "dishwasher.resume": {
69904
+ capName: "dishwasher",
69905
+ capScope: "device",
69906
+ addonId: null,
69907
+ access: "create"
69908
+ },
69909
+ "dishwasher.setChildLock": {
69910
+ capName: "dishwasher",
69911
+ capScope: "device",
69912
+ addonId: null,
69913
+ access: "create"
69914
+ },
69915
+ "dishwasher.setExtraDry": {
69916
+ capName: "dishwasher",
69917
+ capScope: "device",
69918
+ addonId: null,
69919
+ access: "create"
69920
+ },
69702
69921
  "dishwasher.setHalfLoad": {
69703
69922
  capName: "dishwasher",
69704
69923
  capScope: "device",
@@ -69711,6 +69930,12 @@ Object.freeze({
69711
69930
  addonId: null,
69712
69931
  access: "create"
69713
69932
  },
69933
+ "dishwasher.setIntensiveZone": {
69934
+ capName: "dishwasher",
69935
+ capScope: "device",
69936
+ addonId: null,
69937
+ access: "create"
69938
+ },
69714
69939
  "dishwasher.setOption": {
69715
69940
  capName: "dishwasher",
69716
69941
  capScope: "device",
@@ -69729,6 +69954,12 @@ Object.freeze({
69729
69954
  addonId: null,
69730
69955
  access: "create"
69731
69956
  },
69957
+ "dishwasher.setVarioSpeedPlus": {
69958
+ capName: "dishwasher",
69959
+ capScope: "device",
69960
+ addonId: null,
69961
+ access: "create"
69962
+ },
69732
69963
  "dishwasher.start": {
69733
69964
  capName: "dishwasher",
69734
69965
  capScope: "device",
@@ -74175,6 +74406,12 @@ Object.freeze({
74175
74406
  addonId: null,
74176
74407
  access: "view"
74177
74408
  },
74409
+ "storageMigration.moverClearance": {
74410
+ capName: "storage-migration",
74411
+ capScope: "system",
74412
+ addonId: null,
74413
+ access: "view"
74414
+ },
74178
74415
  "storageMigration.movers": {
74179
74416
  capName: "storage-migration",
74180
74417
  capScope: "system",
@@ -76368,6 +76605,11 @@ Object.freeze({
76368
76605
  form: "single",
76369
76606
  optional: false
76370
76607
  }],
76608
+ "dishwasher.getOptions": [{
76609
+ name: "deviceId",
76610
+ form: "single",
76611
+ optional: false
76612
+ }],
76371
76613
  "dishwasher.getStatus": [{
76372
76614
  name: "deviceId",
76373
76615
  form: "single",
@@ -76378,6 +76620,21 @@ Object.freeze({
76378
76620
  form: "single",
76379
76621
  optional: false
76380
76622
  }],
76623
+ "dishwasher.resume": [{
76624
+ name: "deviceId",
76625
+ form: "single",
76626
+ optional: false
76627
+ }],
76628
+ "dishwasher.setChildLock": [{
76629
+ name: "deviceId",
76630
+ form: "single",
76631
+ optional: false
76632
+ }],
76633
+ "dishwasher.setExtraDry": [{
76634
+ name: "deviceId",
76635
+ form: "single",
76636
+ optional: false
76637
+ }],
76381
76638
  "dishwasher.setHalfLoad": [{
76382
76639
  name: "deviceId",
76383
76640
  form: "single",
@@ -76388,6 +76645,11 @@ Object.freeze({
76388
76645
  form: "single",
76389
76646
  optional: false
76390
76647
  }],
76648
+ "dishwasher.setIntensiveZone": [{
76649
+ name: "deviceId",
76650
+ form: "single",
76651
+ optional: false
76652
+ }],
76391
76653
  "dishwasher.setOption": [{
76392
76654
  name: "deviceId",
76393
76655
  form: "single",
@@ -76403,6 +76665,11 @@ Object.freeze({
76403
76665
  form: "single",
76404
76666
  optional: false
76405
76667
  }],
76668
+ "dishwasher.setVarioSpeedPlus": [{
76669
+ name: "deviceId",
76670
+ form: "single",
76671
+ optional: false
76672
+ }],
76406
76673
  "dishwasher.start": [{
76407
76674
  name: "deviceId",
76408
76675
  form: "single",
@@ -78444,6 +78711,9 @@ new Map(Object.entries({
78444
78711
  "wrapper-update-available": "system",
78445
78712
  "backup-completed": "system",
78446
78713
  "export-completed": "system",
78714
+ "alert-critical": "system",
78715
+ "alert-error": "system",
78716
+ "alert-critical-resolved": "system",
78447
78717
  "storage-location-low": "system",
78448
78718
  "storage-location-critical": "system",
78449
78719
  "storage-location-ok": "system",
@@ -78568,6 +78838,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78568
78838
  "storage-location-ok"
78569
78839
  ]
78570
78840
  },
78841
+ {
78842
+ id: "alerts",
78843
+ family: "system",
78844
+ label: "Alerts",
78845
+ kinds: [
78846
+ "alert-critical",
78847
+ "alert-error",
78848
+ "alert-critical-resolved"
78849
+ ]
78850
+ },
78571
78851
  {
78572
78852
  id: "alarm",
78573
78853
  family: "alarm",
@@ -78612,6 +78892,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78612
78892
  return [[descriptor.kind, field]];
78613
78893
  })));
78614
78894
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78895
+ object({
78896
+ phase: _enum(["raised", "resolved"]),
78897
+ episodeId: string$2().min(1),
78898
+ alertId: string$2().min(1),
78899
+ severity: AlertSeveritySchema,
78900
+ category: string$2(),
78901
+ title: string$2(),
78902
+ message: string$2(),
78903
+ sourceType: string$2().optional(),
78904
+ sourceId: string$2().optional(),
78905
+ nodeId: string$2().optional(),
78906
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78907
+ actionUrl: string$2().optional(),
78908
+ at: number()
78909
+ });
78615
78910
  var RULE_BODY_ONLY = ["body"];
78616
78911
  var RULE_TEXT = ["title", "body"];
78617
78912
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78621,6 +78916,11 @@ var TANK = [
78621
78916
  "device-tank-full",
78622
78917
  "device-tank-normal"
78623
78918
  ];
78919
+ var ALERT_EPISODE = [
78920
+ "alert-critical",
78921
+ "alert-error",
78922
+ "alert-critical-resolved"
78923
+ ];
78624
78924
  var UPDATES = [
78625
78925
  "addon-update-available",
78626
78926
  "server-update-available",
@@ -78813,14 +79113,14 @@ var STATE_SUMMARY_VARS = [
78813
79113
  ([...RULE_TEXT], [...CONSUMABLE]),
78814
79114
  ([...RULE_TEXT], [...TANK]),
78815
79115
  [...RULE_TEXT],
78816
- ([...RULE_TEXT], [...UPDATES]),
78817
- ([...RULE_TEXT], [...UPDATES]),
78818
- [...RULE_TEXT],
79116
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
79117
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78819
79118
  [...RULE_TEXT],
78820
79119
  [...RULE_TEXT],
78821
79120
  [...RULE_TEXT],
78822
79121
  [...RULE_TEXT],
78823
79122
  [...RULE_TEXT],
79123
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78824
79124
  [...RULE_TEXT],
78825
79125
  [...RULE_TEXT],
78826
79126
  [...RULE_TEXT],
@@ -78838,7 +79138,11 @@ var STATE_SUMMARY_VARS = [
78838
79138
  [...RULE_TEXT],
78839
79139
  [...RULE_TEXT],
78840
79140
  [...RULE_TEXT],
78841
- [...RULE_TEXT],
79141
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79142
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79143
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79144
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79145
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78842
79146
  [...RULE_TEXT],
78843
79147
  [...RULE_TEXT],
78844
79148
  [...RULE_TEXT],
package/dist/addon.mjs CHANGED
@@ -11,7 +11,7 @@ import { networkInterfaces, tmpdir, uptime } from "node:os";
11
11
  import { finished } from "node:stream/promises";
12
12
  import { createConnection, createServer as createServer$2 } from "node:net";
13
13
  import * as dgram from "node:dgram";
14
- //#region ../types/dist/event-category-BvOFi6PY.mjs
14
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
15
15
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
16
16
  EventCategory["SystemBoot"] = "system.boot";
17
17
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -90,9 +90,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
90
90
  /**
91
91
  * The node's one-shot runner boot check (D877): planned runners against the
92
92
  * process service, `degraded` when any is failed, refused or missing. The
93
- * alert centre turns it into one alert and a direct critical push.
93
+ * alert centre turns it into one critical alert.
94
94
  */
95
95
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
96
+ /**
97
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
98
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
99
+ * centre sends no notification of its own: Notification Center turns this
100
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
101
+ * system-event kinds, and reconciles from the alerts store because a bus
102
+ * event may be dropped (D8, D11).
103
+ */
104
+ EventCategory["AlertEpisode"] = "alert.episode";
96
105
  EventCategory["AddonError"] = "addon.error";
97
106
  EventCategory["AddonPageReady"] = "addon.page-ready";
98
107
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5550,7 +5559,7 @@ var ZodIssueCode = {
5550
5559
  var ZodFirstPartyTypeKind;
5551
5560
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5552
5561
  //#endregion
5553
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5562
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5554
5563
  /**
5555
5564
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5556
5565
  * window to float samples (D455).
@@ -13513,7 +13522,14 @@ var AlertSeveritySchema = _enum([
13513
13522
  ]);
13514
13523
  var AlertActionSchema = object({
13515
13524
  label: string$2(),
13516
- href: string$2().optional()
13525
+ href: string$2().optional(),
13526
+ /**
13527
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13528
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13529
+ * start) — the browser must leave the SPA with a full navigation, because
13530
+ * the SPA has no such route and would bounce to the home page.
13531
+ */
13532
+ navigation: _enum(["app", "server"]).optional()
13517
13533
  });
13518
13534
  var AlertStatusSchema = _enum([
13519
13535
  "active",
@@ -17943,7 +17959,11 @@ var deviceDiscoveryCapability = {
17943
17959
  };
17944
17960
  /**
17945
17961
  * `device-adoption` — generic discovery + adoption surface,
17946
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17962
+ * system-scoped collection (one provider per integration addon), routed
17963
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17964
+ * pin model as `connection-test`. The admin UI keeps using
17965
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17966
+ * successor to `ha-discovery`:
17947
17967
  * keyed by `integrationId` (the addon resolves integrationId → broker
17948
17968
  * internally) rather than a connection-specific `brokerId`, and it
17949
17969
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -18108,7 +18128,7 @@ var ResyncResultSchema = object({
18108
18128
  var deviceAdoptionCapability = {
18109
18129
  name: "device-adoption",
18110
18130
  scope: "system",
18111
- mode: "singleton",
18131
+ mode: "collection",
18112
18132
  status: {
18113
18133
  schema: AdoptionStatusSchema,
18114
18134
  kind: "poll"
@@ -42291,6 +42311,9 @@ var NcSystemEventKindSchema = _enum([
42291
42311
  "server-updated",
42292
42312
  "export-completed",
42293
42313
  "backup-completed",
42314
+ "alert-critical",
42315
+ "alert-error",
42316
+ "alert-critical-resolved",
42294
42317
  "camera-online",
42295
42318
  "camera-offline",
42296
42319
  "camera-disabled",
@@ -51367,7 +51390,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51367
51390
  }), method(object({ jobId: string$2().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string$2() }), object({ cancelled: boolean() }), {
51368
51391
  kind: "mutation",
51369
51392
  auth: "admin"
51370
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string$2() }), {
51393
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string$2()).readonly() }), object({
51394
+ clear: boolean(),
51395
+ repointLocationId: string$2().optional()
51396
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string$2() }), {
51371
51397
  kind: "mutation",
51372
51398
  auth: "admin"
51373
51399
  }), method(StorageCleanupInputSchema, object({ jobId: string$2() }), {
@@ -55640,6 +55666,11 @@ onStatusChanged: { data: object({
55640
55666
  *
55641
55667
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55642
55668
  * provider refreshes the slice on an interval and eagerly after commands.
55669
+ *
55670
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55671
+ * nullable: `null` means "not known right now" (the appliance has not said,
55672
+ * the link is down, or the description does not carry it) and is never
55673
+ * rendered or exported as `false` / `0`. `availability` says why.
55643
55674
  */
55644
55675
  var DishwasherStateSchema = _enum([
55645
55676
  "idle",
@@ -55649,35 +55680,155 @@ var DishwasherStateSchema = _enum([
55649
55680
  "error",
55650
55681
  "unavailable"
55651
55682
  ]);
55683
+ /**
55684
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55685
+ * view for compact surfaces; this is what the appliance said.
55686
+ */
55687
+ var DishwasherOperationStateSchema = _enum([
55688
+ "Inactive",
55689
+ "Ready",
55690
+ "DelayedStart",
55691
+ "Run",
55692
+ "Pause",
55693
+ "ActionRequired",
55694
+ "Finished",
55695
+ "Error",
55696
+ "Aborting"
55697
+ ]);
55698
+ /**
55699
+ * Why fields may be `null`:
55700
+ * - `available` — the link is up and the description is loaded;
55701
+ * - `offline` — the local link is down (values are unknown, not last-known);
55702
+ * - `description-missing` — the link is up but the appliance's description could not
55703
+ * be loaded, so its values cannot be decoded.
55704
+ */
55705
+ var DishwasherAvailabilitySchema = _enum([
55706
+ "available",
55707
+ "offline",
55708
+ "description-missing"
55709
+ ]);
55652
55710
  var DishwasherConsumableLevelSchema = _enum([
55653
55711
  "ok",
55654
55712
  "low",
55655
55713
  "empty"
55656
55714
  ]);
55657
55715
  var DishwasherStatusSchema = object({
55716
+ availability: DishwasherAvailabilitySchema,
55717
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55658
55718
  state: DishwasherStateSchema,
55659
- /** Active program id/name, or null when none selected / unknown. */
55719
+ /** The appliance's operation state as reported; null when not known. */
55720
+ operationState: DishwasherOperationStateSchema.nullable(),
55721
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55660
55722
  program: string$2().nullable(),
55661
- /** Program tokens the hardware accepts — drives the UI selector. */
55723
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55724
+ selectedProgram: string$2().nullable(),
55725
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55662
55726
  availablePrograms: array(string$2()),
55663
- /** Minutes remaining on the active cycle, or null when not running. */
55664
- remainingMinutes: number().int().nonnegative().nullable(),
55727
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55728
+ remainingSeconds: number().int().nonnegative().nullable(),
55729
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55730
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55665
55731
  /** Cycle completion 0..100, or null when not applicable. */
55666
55732
  progressPercent: number().min(0).max(100).nullable(),
55667
- /** True when the door is reported open. */
55668
- doorOpen: boolean(),
55669
- /** True when remote start is allowed (door closed, power on, etc.). */
55670
- remoteStartAllowed: boolean(),
55671
- /** Main power / switched-on state. */
55672
- powerOn: boolean(),
55733
+ /** True when the door is reported open; null when the door state is not known. */
55734
+ doorOpen: boolean().nullable(),
55735
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55736
+ doorLocked: boolean().nullable(),
55737
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55738
+ remoteStartAllowed: boolean().nullable(),
55739
+ /** True when the appliance accepts remote control now; null when not known. */
55740
+ remoteControlActive: boolean().nullable(),
55741
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55742
+ localControlActive: boolean().nullable(),
55743
+ /** Main power / switched-on state; null when not known. */
55744
+ powerOn: boolean().nullable(),
55745
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55746
+ powerState: string$2().nullable(),
55673
55747
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55674
55748
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55675
- halfLoad: boolean(),
55676
- hygienePlus: boolean(),
55749
+ /** Option states: null when the appliance does not expose the option or has not said. */
55750
+ halfLoad: boolean().nullable(),
55751
+ hygienePlus: boolean().nullable(),
55752
+ /** Extra dry option when the appliance exposes it. */
55753
+ extraDry: boolean().nullable(),
55754
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55755
+ intensiveZone: boolean().nullable(),
55756
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55757
+ varioSpeedPlus: boolean().nullable(),
55758
+ /** Child lock (controls disabled on the appliance); null when not known. */
55759
+ childLock: boolean().nullable(),
55760
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55761
+ activeEvents: array(string$2()),
55762
+ /** Numeric error code when the appliance reports one; null otherwise. */
55677
55763
  errorCode: number().nullable(),
55764
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55678
55765
  errorLabel: string$2().nullable(),
55766
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55679
55767
  lastFetchedAt: number()
55680
55768
  });
55769
+ var DeviceIdSchema = number().int().nonnegative();
55770
+ /** A value a program option or setting can take. */
55771
+ var DishwasherValueSchema = union([
55772
+ boolean(),
55773
+ string$2(),
55774
+ number()
55775
+ ]);
55776
+ var DishwasherAccessSchema = _enum([
55777
+ "none",
55778
+ "read",
55779
+ "readWrite",
55780
+ "writeOnly",
55781
+ "readStatic"
55782
+ ]);
55783
+ /**
55784
+ * One option or setting the appliance declares, with the constraints its description
55785
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55786
+ */
55787
+ var DishwasherOptionDescriptorSchema = object({
55788
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55789
+ key: string$2(),
55790
+ /** Last segment of the key, for display. */
55791
+ name: string$2(),
55792
+ type: _enum([
55793
+ "boolean",
55794
+ "number",
55795
+ "enum",
55796
+ "string"
55797
+ ]),
55798
+ access: DishwasherAccessSchema,
55799
+ /** The appliance reports this entity as currently available. */
55800
+ available: boolean(),
55801
+ /** Unit the description declares for a number; null when it declares none. */
55802
+ unit: string$2().nullable(),
55803
+ min: number().nullable(),
55804
+ max: number().nullable(),
55805
+ step: number().nullable(),
55806
+ /** Allowed members of an enum; null for other types. */
55807
+ enumValues: array(string$2()).nullable(),
55808
+ defaultValue: DishwasherValueSchema.nullable()
55809
+ });
55810
+ var DishwasherProgramSchema = object({
55811
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55812
+ key: string$2(),
55813
+ name: string$2(),
55814
+ /** The appliance currently offers this program. */
55815
+ available: boolean(),
55816
+ /** The options this program lists, with the program-level access / availability / default. */
55817
+ options: array(DishwasherOptionDescriptorSchema)
55818
+ });
55819
+ var DishwasherOptionsSchema = object({
55820
+ availability: DishwasherAvailabilitySchema,
55821
+ /** What the appliance can be told to do, from the commands its description declares. */
55822
+ supportsStart: boolean(),
55823
+ supportsPause: boolean(),
55824
+ supportsResume: boolean(),
55825
+ supportsStop: boolean(),
55826
+ supportsPower: boolean(),
55827
+ /** Every program the description lists, with its options. */
55828
+ programs: array(DishwasherProgramSchema),
55829
+ /** Every option and setting entity the description lists (programs reference these by key). */
55830
+ options: array(DishwasherOptionDescriptorSchema)
55831
+ });
55681
55832
  var dishwasherCapability = {
55682
55833
  name: "dishwasher",
55683
55834
  scope: "device",
@@ -55685,58 +55836,102 @@ var dishwasherCapability = {
55685
55836
  mode: "singleton",
55686
55837
  deviceTypes: [DeviceType.Dishwasher],
55687
55838
  methods: {
55688
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55839
+ /**
55840
+ * Start a program. Without `program` the selected one starts. `options` are
55841
+ * option feature keys; each is checked against the program's constraints.
55842
+ */
55843
+ start: method(object({
55844
+ deviceId: DeviceIdSchema,
55845
+ program: string$2().min(1).optional(),
55846
+ options: record(string$2(), DishwasherValueSchema).optional()
55847
+ }), _void(), {
55689
55848
  kind: "mutation",
55690
55849
  auth: "protected"
55691
55850
  }),
55692
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55851
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55693
55852
  kind: "mutation",
55694
55853
  auth: "protected"
55695
55854
  }),
55696
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55855
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55697
55856
  kind: "mutation",
55698
55857
  auth: "protected"
55699
55858
  }),
55859
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55860
+ kind: "mutation",
55861
+ auth: "protected"
55862
+ }),
55863
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55700
55864
  setProgram: method(object({
55701
- deviceId: number().int().nonnegative(),
55865
+ deviceId: DeviceIdSchema,
55702
55866
  program: string$2().min(1)
55703
55867
  }), _void(), {
55704
55868
  kind: "mutation",
55705
55869
  auth: "protected"
55706
55870
  }),
55707
55871
  setPower: method(object({
55708
- deviceId: number().int().nonnegative(),
55872
+ deviceId: DeviceIdSchema,
55709
55873
  on: boolean()
55710
55874
  }), _void(), {
55711
55875
  kind: "mutation",
55712
55876
  auth: "protected"
55713
55877
  }),
55714
55878
  setHalfLoad: method(object({
55715
- deviceId: number().int().nonnegative(),
55879
+ deviceId: DeviceIdSchema,
55716
55880
  on: boolean()
55717
55881
  }), _void(), {
55718
55882
  kind: "mutation",
55719
55883
  auth: "protected"
55720
55884
  }),
55721
55885
  setHygienePlus: method(object({
55722
- deviceId: number().int().nonnegative(),
55886
+ deviceId: DeviceIdSchema,
55723
55887
  on: boolean()
55724
55888
  }), _void(), {
55725
55889
  kind: "mutation",
55726
55890
  auth: "protected"
55727
55891
  }),
55892
+ setExtraDry: method(object({
55893
+ deviceId: DeviceIdSchema,
55894
+ on: boolean()
55895
+ }), _void(), {
55896
+ kind: "mutation",
55897
+ auth: "protected"
55898
+ }),
55899
+ setIntensiveZone: method(object({
55900
+ deviceId: DeviceIdSchema,
55901
+ on: boolean()
55902
+ }), _void(), {
55903
+ kind: "mutation",
55904
+ auth: "protected"
55905
+ }),
55906
+ setVarioSpeedPlus: method(object({
55907
+ deviceId: DeviceIdSchema,
55908
+ on: boolean()
55909
+ }), _void(), {
55910
+ kind: "mutation",
55911
+ auth: "protected"
55912
+ }),
55913
+ setChildLock: method(object({
55914
+ deviceId: DeviceIdSchema,
55915
+ on: boolean()
55916
+ }), _void(), {
55917
+ kind: "mutation",
55918
+ auth: "protected"
55919
+ }),
55920
+ /**
55921
+ * Write any option or setting by feature key. Refused when the description does
55922
+ * not list it, it is not writable or not available now, or the value is outside
55923
+ * its declared range / members.
55924
+ */
55728
55925
  setOption: method(object({
55729
- deviceId: number().int().nonnegative(),
55926
+ deviceId: DeviceIdSchema,
55730
55927
  key: string$2().min(1),
55731
- value: union([
55732
- boolean(),
55733
- string$2(),
55734
- number()
55735
- ])
55928
+ value: DishwasherValueSchema
55736
55929
  }), _void(), {
55737
55930
  kind: "mutation",
55738
55931
  auth: "protected"
55739
- })
55932
+ }),
55933
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55934
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55740
55935
  },
55741
55936
  status: {
55742
55937
  schema: DishwasherStatusSchema,
@@ -69685,6 +69880,12 @@ Object.freeze({
69685
69880
  addonId: null,
69686
69881
  access: "view"
69687
69882
  },
69883
+ "dishwasher.getOptions": {
69884
+ capName: "dishwasher",
69885
+ capScope: "device",
69886
+ addonId: null,
69887
+ access: "view"
69888
+ },
69688
69889
  "dishwasher.getStatus": {
69689
69890
  capName: "dishwasher",
69690
69891
  capScope: "device",
@@ -69697,6 +69898,24 @@ Object.freeze({
69697
69898
  addonId: null,
69698
69899
  access: "create"
69699
69900
  },
69901
+ "dishwasher.resume": {
69902
+ capName: "dishwasher",
69903
+ capScope: "device",
69904
+ addonId: null,
69905
+ access: "create"
69906
+ },
69907
+ "dishwasher.setChildLock": {
69908
+ capName: "dishwasher",
69909
+ capScope: "device",
69910
+ addonId: null,
69911
+ access: "create"
69912
+ },
69913
+ "dishwasher.setExtraDry": {
69914
+ capName: "dishwasher",
69915
+ capScope: "device",
69916
+ addonId: null,
69917
+ access: "create"
69918
+ },
69700
69919
  "dishwasher.setHalfLoad": {
69701
69920
  capName: "dishwasher",
69702
69921
  capScope: "device",
@@ -69709,6 +69928,12 @@ Object.freeze({
69709
69928
  addonId: null,
69710
69929
  access: "create"
69711
69930
  },
69931
+ "dishwasher.setIntensiveZone": {
69932
+ capName: "dishwasher",
69933
+ capScope: "device",
69934
+ addonId: null,
69935
+ access: "create"
69936
+ },
69712
69937
  "dishwasher.setOption": {
69713
69938
  capName: "dishwasher",
69714
69939
  capScope: "device",
@@ -69727,6 +69952,12 @@ Object.freeze({
69727
69952
  addonId: null,
69728
69953
  access: "create"
69729
69954
  },
69955
+ "dishwasher.setVarioSpeedPlus": {
69956
+ capName: "dishwasher",
69957
+ capScope: "device",
69958
+ addonId: null,
69959
+ access: "create"
69960
+ },
69730
69961
  "dishwasher.start": {
69731
69962
  capName: "dishwasher",
69732
69963
  capScope: "device",
@@ -74173,6 +74404,12 @@ Object.freeze({
74173
74404
  addonId: null,
74174
74405
  access: "view"
74175
74406
  },
74407
+ "storageMigration.moverClearance": {
74408
+ capName: "storage-migration",
74409
+ capScope: "system",
74410
+ addonId: null,
74411
+ access: "view"
74412
+ },
74176
74413
  "storageMigration.movers": {
74177
74414
  capName: "storage-migration",
74178
74415
  capScope: "system",
@@ -76366,6 +76603,11 @@ Object.freeze({
76366
76603
  form: "single",
76367
76604
  optional: false
76368
76605
  }],
76606
+ "dishwasher.getOptions": [{
76607
+ name: "deviceId",
76608
+ form: "single",
76609
+ optional: false
76610
+ }],
76369
76611
  "dishwasher.getStatus": [{
76370
76612
  name: "deviceId",
76371
76613
  form: "single",
@@ -76376,6 +76618,21 @@ Object.freeze({
76376
76618
  form: "single",
76377
76619
  optional: false
76378
76620
  }],
76621
+ "dishwasher.resume": [{
76622
+ name: "deviceId",
76623
+ form: "single",
76624
+ optional: false
76625
+ }],
76626
+ "dishwasher.setChildLock": [{
76627
+ name: "deviceId",
76628
+ form: "single",
76629
+ optional: false
76630
+ }],
76631
+ "dishwasher.setExtraDry": [{
76632
+ name: "deviceId",
76633
+ form: "single",
76634
+ optional: false
76635
+ }],
76379
76636
  "dishwasher.setHalfLoad": [{
76380
76637
  name: "deviceId",
76381
76638
  form: "single",
@@ -76386,6 +76643,11 @@ Object.freeze({
76386
76643
  form: "single",
76387
76644
  optional: false
76388
76645
  }],
76646
+ "dishwasher.setIntensiveZone": [{
76647
+ name: "deviceId",
76648
+ form: "single",
76649
+ optional: false
76650
+ }],
76389
76651
  "dishwasher.setOption": [{
76390
76652
  name: "deviceId",
76391
76653
  form: "single",
@@ -76401,6 +76663,11 @@ Object.freeze({
76401
76663
  form: "single",
76402
76664
  optional: false
76403
76665
  }],
76666
+ "dishwasher.setVarioSpeedPlus": [{
76667
+ name: "deviceId",
76668
+ form: "single",
76669
+ optional: false
76670
+ }],
76404
76671
  "dishwasher.start": [{
76405
76672
  name: "deviceId",
76406
76673
  form: "single",
@@ -78442,6 +78709,9 @@ new Map(Object.entries({
78442
78709
  "wrapper-update-available": "system",
78443
78710
  "backup-completed": "system",
78444
78711
  "export-completed": "system",
78712
+ "alert-critical": "system",
78713
+ "alert-error": "system",
78714
+ "alert-critical-resolved": "system",
78445
78715
  "storage-location-low": "system",
78446
78716
  "storage-location-critical": "system",
78447
78717
  "storage-location-ok": "system",
@@ -78566,6 +78836,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78566
78836
  "storage-location-ok"
78567
78837
  ]
78568
78838
  },
78839
+ {
78840
+ id: "alerts",
78841
+ family: "system",
78842
+ label: "Alerts",
78843
+ kinds: [
78844
+ "alert-critical",
78845
+ "alert-error",
78846
+ "alert-critical-resolved"
78847
+ ]
78848
+ },
78569
78849
  {
78570
78850
  id: "alarm",
78571
78851
  family: "alarm",
@@ -78610,6 +78890,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78610
78890
  return [[descriptor.kind, field]];
78611
78891
  })));
78612
78892
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78893
+ object({
78894
+ phase: _enum(["raised", "resolved"]),
78895
+ episodeId: string$2().min(1),
78896
+ alertId: string$2().min(1),
78897
+ severity: AlertSeveritySchema,
78898
+ category: string$2(),
78899
+ title: string$2(),
78900
+ message: string$2(),
78901
+ sourceType: string$2().optional(),
78902
+ sourceId: string$2().optional(),
78903
+ nodeId: string$2().optional(),
78904
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78905
+ actionUrl: string$2().optional(),
78906
+ at: number()
78907
+ });
78613
78908
  var RULE_BODY_ONLY = ["body"];
78614
78909
  var RULE_TEXT = ["title", "body"];
78615
78910
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78619,6 +78914,11 @@ var TANK = [
78619
78914
  "device-tank-full",
78620
78915
  "device-tank-normal"
78621
78916
  ];
78917
+ var ALERT_EPISODE = [
78918
+ "alert-critical",
78919
+ "alert-error",
78920
+ "alert-critical-resolved"
78921
+ ];
78622
78922
  var UPDATES = [
78623
78923
  "addon-update-available",
78624
78924
  "server-update-available",
@@ -78811,14 +79111,14 @@ var STATE_SUMMARY_VARS = [
78811
79111
  ([...RULE_TEXT], [...CONSUMABLE]),
78812
79112
  ([...RULE_TEXT], [...TANK]),
78813
79113
  [...RULE_TEXT],
78814
- ([...RULE_TEXT], [...UPDATES]),
78815
- ([...RULE_TEXT], [...UPDATES]),
78816
- [...RULE_TEXT],
79114
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
79115
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78817
79116
  [...RULE_TEXT],
78818
79117
  [...RULE_TEXT],
78819
79118
  [...RULE_TEXT],
78820
79119
  [...RULE_TEXT],
78821
79120
  [...RULE_TEXT],
79121
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78822
79122
  [...RULE_TEXT],
78823
79123
  [...RULE_TEXT],
78824
79124
  [...RULE_TEXT],
@@ -78836,7 +79136,11 @@ var STATE_SUMMARY_VARS = [
78836
79136
  [...RULE_TEXT],
78837
79137
  [...RULE_TEXT],
78838
79138
  [...RULE_TEXT],
78839
- [...RULE_TEXT],
79139
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79140
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79141
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79142
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
79143
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78840
79144
  [...RULE_TEXT],
78841
79145
  [...RULE_TEXT],
78842
79146
  [...RULE_TEXT],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-matter-broker",
3
- "version": "0.2.128",
3
+ "version": "0.2.130",
4
4
  "description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
5
5
  "keywords": [
6
6
  "camstack",