@camstack/addon-matter-broker 0.2.129 → 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 +264 -44
  2. package/dist/addon.mjs +264 -44
  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-BegKjwUu.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",
@@ -42297,6 +42313,9 @@ var NcSystemEventKindSchema = _enum([
42297
42313
  "server-updated",
42298
42314
  "export-completed",
42299
42315
  "backup-completed",
42316
+ "alert-critical",
42317
+ "alert-error",
42318
+ "alert-critical-resolved",
42300
42319
  "camera-online",
42301
42320
  "camera-offline",
42302
42321
  "camera-disabled",
@@ -51373,7 +51392,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51373
51392
  }), method(object({ jobId: string$2().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string$2() }), object({ cancelled: boolean() }), {
51374
51393
  kind: "mutation",
51375
51394
  auth: "admin"
51376
- }), 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() }), {
51377
51399
  kind: "mutation",
51378
51400
  auth: "admin"
51379
51401
  }), method(StorageCleanupInputSchema, object({ jobId: string$2() }), {
@@ -55646,6 +55668,11 @@ onStatusChanged: { data: object({
55646
55668
  *
55647
55669
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55648
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.
55649
55676
  */
55650
55677
  var DishwasherStateSchema = _enum([
55651
55678
  "idle",
@@ -55655,43 +55682,155 @@ var DishwasherStateSchema = _enum([
55655
55682
  "error",
55656
55683
  "unavailable"
55657
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
+ ]);
55658
55712
  var DishwasherConsumableLevelSchema = _enum([
55659
55713
  "ok",
55660
55714
  "low",
55661
55715
  "empty"
55662
55716
  ]);
55663
55717
  var DishwasherStatusSchema = object({
55718
+ availability: DishwasherAvailabilitySchema,
55719
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55664
55720
  state: DishwasherStateSchema,
55665
- /** 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. */
55666
55724
  program: string$2().nullable(),
55667
- /** 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. */
55668
55728
  availablePrograms: array(string$2()),
55669
- /** Minutes remaining on the active cycle, or null when not running. */
55670
- 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(),
55671
55733
  /** Cycle completion 0..100, or null when not applicable. */
55672
55734
  progressPercent: number().min(0).max(100).nullable(),
55673
- /** True when the door is reported open. */
55674
- doorOpen: boolean(),
55675
- /** True when remote start is allowed (door closed, power on, etc.). */
55676
- remoteStartAllowed: boolean(),
55677
- /** Main power / switched-on state. */
55678
- 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(),
55679
55749
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55680
55750
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55681
- halfLoad: boolean(),
55682
- 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(),
55683
55754
  /** Extra dry option when the appliance exposes it. */
55684
- extraDry: boolean(),
55755
+ extraDry: boolean().nullable(),
55685
55756
  /** Intensive zone (lower basket) when the appliance exposes it. */
55686
- intensiveZone: boolean(),
55757
+ intensiveZone: boolean().nullable(),
55687
55758
  /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55688
- varioSpeedPlus: boolean(),
55689
- /** Child lock (controls disabled on the appliance). */
55690
- childLock: boolean(),
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. */
55691
55765
  errorCode: number().nullable(),
55766
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55692
55767
  errorLabel: string$2().nullable(),
55768
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55693
55769
  lastFetchedAt: number()
55694
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
+ });
55695
55834
  var dishwasherCapability = {
55696
55835
  name: "dishwasher",
55697
55836
  scope: "device",
@@ -55699,86 +55838,102 @@ var dishwasherCapability = {
55699
55838
  mode: "singleton",
55700
55839
  deviceTypes: [DeviceType.Dishwasher],
55701
55840
  methods: {
55702
- 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(), {
55703
55850
  kind: "mutation",
55704
55851
  auth: "protected"
55705
55852
  }),
55706
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55853
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55707
55854
  kind: "mutation",
55708
55855
  auth: "protected"
55709
55856
  }),
55710
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55857
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55858
+ kind: "mutation",
55859
+ auth: "protected"
55860
+ }),
55861
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55711
55862
  kind: "mutation",
55712
55863
  auth: "protected"
55713
55864
  }),
55865
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55714
55866
  setProgram: method(object({
55715
- deviceId: number().int().nonnegative(),
55867
+ deviceId: DeviceIdSchema,
55716
55868
  program: string$2().min(1)
55717
55869
  }), _void(), {
55718
55870
  kind: "mutation",
55719
55871
  auth: "protected"
55720
55872
  }),
55721
55873
  setPower: method(object({
55722
- deviceId: number().int().nonnegative(),
55874
+ deviceId: DeviceIdSchema,
55723
55875
  on: boolean()
55724
55876
  }), _void(), {
55725
55877
  kind: "mutation",
55726
55878
  auth: "protected"
55727
55879
  }),
55728
55880
  setHalfLoad: method(object({
55729
- deviceId: number().int().nonnegative(),
55881
+ deviceId: DeviceIdSchema,
55730
55882
  on: boolean()
55731
55883
  }), _void(), {
55732
55884
  kind: "mutation",
55733
55885
  auth: "protected"
55734
55886
  }),
55735
55887
  setHygienePlus: method(object({
55736
- deviceId: number().int().nonnegative(),
55888
+ deviceId: DeviceIdSchema,
55737
55889
  on: boolean()
55738
55890
  }), _void(), {
55739
55891
  kind: "mutation",
55740
55892
  auth: "protected"
55741
55893
  }),
55742
55894
  setExtraDry: method(object({
55743
- deviceId: number().int().nonnegative(),
55895
+ deviceId: DeviceIdSchema,
55744
55896
  on: boolean()
55745
55897
  }), _void(), {
55746
55898
  kind: "mutation",
55747
55899
  auth: "protected"
55748
55900
  }),
55749
55901
  setIntensiveZone: method(object({
55750
- deviceId: number().int().nonnegative(),
55902
+ deviceId: DeviceIdSchema,
55751
55903
  on: boolean()
55752
55904
  }), _void(), {
55753
55905
  kind: "mutation",
55754
55906
  auth: "protected"
55755
55907
  }),
55756
55908
  setVarioSpeedPlus: method(object({
55757
- deviceId: number().int().nonnegative(),
55909
+ deviceId: DeviceIdSchema,
55758
55910
  on: boolean()
55759
55911
  }), _void(), {
55760
55912
  kind: "mutation",
55761
55913
  auth: "protected"
55762
55914
  }),
55763
55915
  setChildLock: method(object({
55764
- deviceId: number().int().nonnegative(),
55916
+ deviceId: DeviceIdSchema,
55765
55917
  on: boolean()
55766
55918
  }), _void(), {
55767
55919
  kind: "mutation",
55768
55920
  auth: "protected"
55769
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
+ */
55770
55927
  setOption: method(object({
55771
- deviceId: number().int().nonnegative(),
55928
+ deviceId: DeviceIdSchema,
55772
55929
  key: string$2().min(1),
55773
- value: union([
55774
- boolean(),
55775
- string$2(),
55776
- number()
55777
- ])
55930
+ value: DishwasherValueSchema
55778
55931
  }), _void(), {
55779
55932
  kind: "mutation",
55780
55933
  auth: "protected"
55781
- })
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" })
55782
55937
  },
55783
55938
  status: {
55784
55939
  schema: DishwasherStatusSchema,
@@ -69727,6 +69882,12 @@ Object.freeze({
69727
69882
  addonId: null,
69728
69883
  access: "view"
69729
69884
  },
69885
+ "dishwasher.getOptions": {
69886
+ capName: "dishwasher",
69887
+ capScope: "device",
69888
+ addonId: null,
69889
+ access: "view"
69890
+ },
69730
69891
  "dishwasher.getStatus": {
69731
69892
  capName: "dishwasher",
69732
69893
  capScope: "device",
@@ -69739,6 +69900,12 @@ Object.freeze({
69739
69900
  addonId: null,
69740
69901
  access: "create"
69741
69902
  },
69903
+ "dishwasher.resume": {
69904
+ capName: "dishwasher",
69905
+ capScope: "device",
69906
+ addonId: null,
69907
+ access: "create"
69908
+ },
69742
69909
  "dishwasher.setChildLock": {
69743
69910
  capName: "dishwasher",
69744
69911
  capScope: "device",
@@ -74239,6 +74406,12 @@ Object.freeze({
74239
74406
  addonId: null,
74240
74407
  access: "view"
74241
74408
  },
74409
+ "storageMigration.moverClearance": {
74410
+ capName: "storage-migration",
74411
+ capScope: "system",
74412
+ addonId: null,
74413
+ access: "view"
74414
+ },
74242
74415
  "storageMigration.movers": {
74243
74416
  capName: "storage-migration",
74244
74417
  capScope: "system",
@@ -76432,6 +76605,11 @@ Object.freeze({
76432
76605
  form: "single",
76433
76606
  optional: false
76434
76607
  }],
76608
+ "dishwasher.getOptions": [{
76609
+ name: "deviceId",
76610
+ form: "single",
76611
+ optional: false
76612
+ }],
76435
76613
  "dishwasher.getStatus": [{
76436
76614
  name: "deviceId",
76437
76615
  form: "single",
@@ -76442,6 +76620,11 @@ Object.freeze({
76442
76620
  form: "single",
76443
76621
  optional: false
76444
76622
  }],
76623
+ "dishwasher.resume": [{
76624
+ name: "deviceId",
76625
+ form: "single",
76626
+ optional: false
76627
+ }],
76445
76628
  "dishwasher.setChildLock": [{
76446
76629
  name: "deviceId",
76447
76630
  form: "single",
@@ -78528,6 +78711,9 @@ new Map(Object.entries({
78528
78711
  "wrapper-update-available": "system",
78529
78712
  "backup-completed": "system",
78530
78713
  "export-completed": "system",
78714
+ "alert-critical": "system",
78715
+ "alert-error": "system",
78716
+ "alert-critical-resolved": "system",
78531
78717
  "storage-location-low": "system",
78532
78718
  "storage-location-critical": "system",
78533
78719
  "storage-location-ok": "system",
@@ -78652,6 +78838,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78652
78838
  "storage-location-ok"
78653
78839
  ]
78654
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
+ },
78655
78851
  {
78656
78852
  id: "alarm",
78657
78853
  family: "alarm",
@@ -78696,6 +78892,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78696
78892
  return [[descriptor.kind, field]];
78697
78893
  })));
78698
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
+ });
78699
78910
  var RULE_BODY_ONLY = ["body"];
78700
78911
  var RULE_TEXT = ["title", "body"];
78701
78912
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78705,6 +78916,11 @@ var TANK = [
78705
78916
  "device-tank-full",
78706
78917
  "device-tank-normal"
78707
78918
  ];
78919
+ var ALERT_EPISODE = [
78920
+ "alert-critical",
78921
+ "alert-error",
78922
+ "alert-critical-resolved"
78923
+ ];
78708
78924
  var UPDATES = [
78709
78925
  "addon-update-available",
78710
78926
  "server-update-available",
@@ -78897,14 +79113,14 @@ var STATE_SUMMARY_VARS = [
78897
79113
  ([...RULE_TEXT], [...CONSUMABLE]),
78898
79114
  ([...RULE_TEXT], [...TANK]),
78899
79115
  [...RULE_TEXT],
78900
- ([...RULE_TEXT], [...UPDATES]),
78901
- ([...RULE_TEXT], [...UPDATES]),
78902
- [...RULE_TEXT],
79116
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
79117
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78903
79118
  [...RULE_TEXT],
78904
79119
  [...RULE_TEXT],
78905
79120
  [...RULE_TEXT],
78906
79121
  [...RULE_TEXT],
78907
79122
  [...RULE_TEXT],
79123
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78908
79124
  [...RULE_TEXT],
78909
79125
  [...RULE_TEXT],
78910
79126
  [...RULE_TEXT],
@@ -78922,7 +79138,11 @@ var STATE_SUMMARY_VARS = [
78922
79138
  [...RULE_TEXT],
78923
79139
  [...RULE_TEXT],
78924
79140
  [...RULE_TEXT],
78925
- [...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]),
78926
79146
  [...RULE_TEXT],
78927
79147
  [...RULE_TEXT],
78928
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-BegKjwUu.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",
@@ -42295,6 +42311,9 @@ var NcSystemEventKindSchema = _enum([
42295
42311
  "server-updated",
42296
42312
  "export-completed",
42297
42313
  "backup-completed",
42314
+ "alert-critical",
42315
+ "alert-error",
42316
+ "alert-critical-resolved",
42298
42317
  "camera-online",
42299
42318
  "camera-offline",
42300
42319
  "camera-disabled",
@@ -51371,7 +51390,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51371
51390
  }), method(object({ jobId: string$2().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string$2() }), object({ cancelled: boolean() }), {
51372
51391
  kind: "mutation",
51373
51392
  auth: "admin"
51374
- }), 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() }), {
51375
51397
  kind: "mutation",
51376
51398
  auth: "admin"
51377
51399
  }), method(StorageCleanupInputSchema, object({ jobId: string$2() }), {
@@ -55644,6 +55666,11 @@ onStatusChanged: { data: object({
55644
55666
  *
55645
55667
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55646
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.
55647
55674
  */
55648
55675
  var DishwasherStateSchema = _enum([
55649
55676
  "idle",
@@ -55653,43 +55680,155 @@ var DishwasherStateSchema = _enum([
55653
55680
  "error",
55654
55681
  "unavailable"
55655
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
+ ]);
55656
55710
  var DishwasherConsumableLevelSchema = _enum([
55657
55711
  "ok",
55658
55712
  "low",
55659
55713
  "empty"
55660
55714
  ]);
55661
55715
  var DishwasherStatusSchema = object({
55716
+ availability: DishwasherAvailabilitySchema,
55717
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55662
55718
  state: DishwasherStateSchema,
55663
- /** 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. */
55664
55722
  program: string$2().nullable(),
55665
- /** 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. */
55666
55726
  availablePrograms: array(string$2()),
55667
- /** Minutes remaining on the active cycle, or null when not running. */
55668
- 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(),
55669
55731
  /** Cycle completion 0..100, or null when not applicable. */
55670
55732
  progressPercent: number().min(0).max(100).nullable(),
55671
- /** True when the door is reported open. */
55672
- doorOpen: boolean(),
55673
- /** True when remote start is allowed (door closed, power on, etc.). */
55674
- remoteStartAllowed: boolean(),
55675
- /** Main power / switched-on state. */
55676
- 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(),
55677
55747
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55678
55748
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55679
- halfLoad: boolean(),
55680
- 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(),
55681
55752
  /** Extra dry option when the appliance exposes it. */
55682
- extraDry: boolean(),
55753
+ extraDry: boolean().nullable(),
55683
55754
  /** Intensive zone (lower basket) when the appliance exposes it. */
55684
- intensiveZone: boolean(),
55755
+ intensiveZone: boolean().nullable(),
55685
55756
  /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55686
- varioSpeedPlus: boolean(),
55687
- /** Child lock (controls disabled on the appliance). */
55688
- childLock: boolean(),
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. */
55689
55763
  errorCode: number().nullable(),
55764
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55690
55765
  errorLabel: string$2().nullable(),
55766
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55691
55767
  lastFetchedAt: number()
55692
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
+ });
55693
55832
  var dishwasherCapability = {
55694
55833
  name: "dishwasher",
55695
55834
  scope: "device",
@@ -55697,86 +55836,102 @@ var dishwasherCapability = {
55697
55836
  mode: "singleton",
55698
55837
  deviceTypes: [DeviceType.Dishwasher],
55699
55838
  methods: {
55700
- 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(), {
55701
55848
  kind: "mutation",
55702
55849
  auth: "protected"
55703
55850
  }),
55704
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55851
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55705
55852
  kind: "mutation",
55706
55853
  auth: "protected"
55707
55854
  }),
55708
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55855
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55856
+ kind: "mutation",
55857
+ auth: "protected"
55858
+ }),
55859
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55709
55860
  kind: "mutation",
55710
55861
  auth: "protected"
55711
55862
  }),
55863
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55712
55864
  setProgram: method(object({
55713
- deviceId: number().int().nonnegative(),
55865
+ deviceId: DeviceIdSchema,
55714
55866
  program: string$2().min(1)
55715
55867
  }), _void(), {
55716
55868
  kind: "mutation",
55717
55869
  auth: "protected"
55718
55870
  }),
55719
55871
  setPower: method(object({
55720
- deviceId: number().int().nonnegative(),
55872
+ deviceId: DeviceIdSchema,
55721
55873
  on: boolean()
55722
55874
  }), _void(), {
55723
55875
  kind: "mutation",
55724
55876
  auth: "protected"
55725
55877
  }),
55726
55878
  setHalfLoad: method(object({
55727
- deviceId: number().int().nonnegative(),
55879
+ deviceId: DeviceIdSchema,
55728
55880
  on: boolean()
55729
55881
  }), _void(), {
55730
55882
  kind: "mutation",
55731
55883
  auth: "protected"
55732
55884
  }),
55733
55885
  setHygienePlus: method(object({
55734
- deviceId: number().int().nonnegative(),
55886
+ deviceId: DeviceIdSchema,
55735
55887
  on: boolean()
55736
55888
  }), _void(), {
55737
55889
  kind: "mutation",
55738
55890
  auth: "protected"
55739
55891
  }),
55740
55892
  setExtraDry: method(object({
55741
- deviceId: number().int().nonnegative(),
55893
+ deviceId: DeviceIdSchema,
55742
55894
  on: boolean()
55743
55895
  }), _void(), {
55744
55896
  kind: "mutation",
55745
55897
  auth: "protected"
55746
55898
  }),
55747
55899
  setIntensiveZone: method(object({
55748
- deviceId: number().int().nonnegative(),
55900
+ deviceId: DeviceIdSchema,
55749
55901
  on: boolean()
55750
55902
  }), _void(), {
55751
55903
  kind: "mutation",
55752
55904
  auth: "protected"
55753
55905
  }),
55754
55906
  setVarioSpeedPlus: method(object({
55755
- deviceId: number().int().nonnegative(),
55907
+ deviceId: DeviceIdSchema,
55756
55908
  on: boolean()
55757
55909
  }), _void(), {
55758
55910
  kind: "mutation",
55759
55911
  auth: "protected"
55760
55912
  }),
55761
55913
  setChildLock: method(object({
55762
- deviceId: number().int().nonnegative(),
55914
+ deviceId: DeviceIdSchema,
55763
55915
  on: boolean()
55764
55916
  }), _void(), {
55765
55917
  kind: "mutation",
55766
55918
  auth: "protected"
55767
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
+ */
55768
55925
  setOption: method(object({
55769
- deviceId: number().int().nonnegative(),
55926
+ deviceId: DeviceIdSchema,
55770
55927
  key: string$2().min(1),
55771
- value: union([
55772
- boolean(),
55773
- string$2(),
55774
- number()
55775
- ])
55928
+ value: DishwasherValueSchema
55776
55929
  }), _void(), {
55777
55930
  kind: "mutation",
55778
55931
  auth: "protected"
55779
- })
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" })
55780
55935
  },
55781
55936
  status: {
55782
55937
  schema: DishwasherStatusSchema,
@@ -69725,6 +69880,12 @@ Object.freeze({
69725
69880
  addonId: null,
69726
69881
  access: "view"
69727
69882
  },
69883
+ "dishwasher.getOptions": {
69884
+ capName: "dishwasher",
69885
+ capScope: "device",
69886
+ addonId: null,
69887
+ access: "view"
69888
+ },
69728
69889
  "dishwasher.getStatus": {
69729
69890
  capName: "dishwasher",
69730
69891
  capScope: "device",
@@ -69737,6 +69898,12 @@ Object.freeze({
69737
69898
  addonId: null,
69738
69899
  access: "create"
69739
69900
  },
69901
+ "dishwasher.resume": {
69902
+ capName: "dishwasher",
69903
+ capScope: "device",
69904
+ addonId: null,
69905
+ access: "create"
69906
+ },
69740
69907
  "dishwasher.setChildLock": {
69741
69908
  capName: "dishwasher",
69742
69909
  capScope: "device",
@@ -74237,6 +74404,12 @@ Object.freeze({
74237
74404
  addonId: null,
74238
74405
  access: "view"
74239
74406
  },
74407
+ "storageMigration.moverClearance": {
74408
+ capName: "storage-migration",
74409
+ capScope: "system",
74410
+ addonId: null,
74411
+ access: "view"
74412
+ },
74240
74413
  "storageMigration.movers": {
74241
74414
  capName: "storage-migration",
74242
74415
  capScope: "system",
@@ -76430,6 +76603,11 @@ Object.freeze({
76430
76603
  form: "single",
76431
76604
  optional: false
76432
76605
  }],
76606
+ "dishwasher.getOptions": [{
76607
+ name: "deviceId",
76608
+ form: "single",
76609
+ optional: false
76610
+ }],
76433
76611
  "dishwasher.getStatus": [{
76434
76612
  name: "deviceId",
76435
76613
  form: "single",
@@ -76440,6 +76618,11 @@ Object.freeze({
76440
76618
  form: "single",
76441
76619
  optional: false
76442
76620
  }],
76621
+ "dishwasher.resume": [{
76622
+ name: "deviceId",
76623
+ form: "single",
76624
+ optional: false
76625
+ }],
76443
76626
  "dishwasher.setChildLock": [{
76444
76627
  name: "deviceId",
76445
76628
  form: "single",
@@ -78526,6 +78709,9 @@ new Map(Object.entries({
78526
78709
  "wrapper-update-available": "system",
78527
78710
  "backup-completed": "system",
78528
78711
  "export-completed": "system",
78712
+ "alert-critical": "system",
78713
+ "alert-error": "system",
78714
+ "alert-critical-resolved": "system",
78529
78715
  "storage-location-low": "system",
78530
78716
  "storage-location-critical": "system",
78531
78717
  "storage-location-ok": "system",
@@ -78650,6 +78836,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78650
78836
  "storage-location-ok"
78651
78837
  ]
78652
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
+ },
78653
78849
  {
78654
78850
  id: "alarm",
78655
78851
  family: "alarm",
@@ -78694,6 +78890,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78694
78890
  return [[descriptor.kind, field]];
78695
78891
  })));
78696
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
+ });
78697
78908
  var RULE_BODY_ONLY = ["body"];
78698
78909
  var RULE_TEXT = ["title", "body"];
78699
78910
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78703,6 +78914,11 @@ var TANK = [
78703
78914
  "device-tank-full",
78704
78915
  "device-tank-normal"
78705
78916
  ];
78917
+ var ALERT_EPISODE = [
78918
+ "alert-critical",
78919
+ "alert-error",
78920
+ "alert-critical-resolved"
78921
+ ];
78706
78922
  var UPDATES = [
78707
78923
  "addon-update-available",
78708
78924
  "server-update-available",
@@ -78895,14 +79111,14 @@ var STATE_SUMMARY_VARS = [
78895
79111
  ([...RULE_TEXT], [...CONSUMABLE]),
78896
79112
  ([...RULE_TEXT], [...TANK]),
78897
79113
  [...RULE_TEXT],
78898
- ([...RULE_TEXT], [...UPDATES]),
78899
- ([...RULE_TEXT], [...UPDATES]),
78900
- [...RULE_TEXT],
79114
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
79115
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78901
79116
  [...RULE_TEXT],
78902
79117
  [...RULE_TEXT],
78903
79118
  [...RULE_TEXT],
78904
79119
  [...RULE_TEXT],
78905
79120
  [...RULE_TEXT],
79121
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78906
79122
  [...RULE_TEXT],
78907
79123
  [...RULE_TEXT],
78908
79124
  [...RULE_TEXT],
@@ -78920,7 +79136,11 @@ var STATE_SUMMARY_VARS = [
78920
79136
  [...RULE_TEXT],
78921
79137
  [...RULE_TEXT],
78922
79138
  [...RULE_TEXT],
78923
- [...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]),
78924
79144
  [...RULE_TEXT],
78925
79145
  [...RULE_TEXT],
78926
79146
  [...RULE_TEXT],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-matter-broker",
3
- "version": "0.2.129",
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",