@camstack/addon-provider-dreame 0.2.135 → 0.2.136

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
@@ -44,7 +44,7 @@ let net = require("net");
44
44
  net = __toESM(net, 1);
45
45
  let zlib = require("zlib");
46
46
  zlib = __toESM(zlib, 1);
47
- //#region ../types/dist/event-category-BvOFi6PY.mjs
47
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
48
48
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
49
49
  EventCategory["SystemBoot"] = "system.boot";
50
50
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -123,9 +123,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
123
123
  /**
124
124
  * The node's one-shot runner boot check (D877): planned runners against the
125
125
  * process service, `degraded` when any is failed, refused or missing. The
126
- * alert centre turns it into one alert and a direct critical push.
126
+ * alert centre turns it into one critical alert.
127
127
  */
128
128
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
129
+ /**
130
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
131
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
132
+ * centre sends no notification of its own: Notification Center turns this
133
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
134
+ * system-event kinds, and reconciles from the alerts store because a bus
135
+ * event may be dropped (D8, D11).
136
+ */
137
+ EventCategory["AlertEpisode"] = "alert.episode";
129
138
  EventCategory["AddonError"] = "addon.error";
130
139
  EventCategory["AddonPageReady"] = "addon.page-ready";
131
140
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5450,7 +5459,7 @@ var ZodIssueCode$1 = {
5450
5459
  var ZodFirstPartyTypeKind$1;
5451
5460
  ZodFirstPartyTypeKind$1 || (ZodFirstPartyTypeKind$1 = {});
5452
5461
  //#endregion
5453
- //#region ../types/dist/sleep-BegKjwUu.mjs
5462
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5454
5463
  /**
5455
5464
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5456
5465
  * window to float samples (D455).
@@ -13227,7 +13236,14 @@ var AlertSeveritySchema = _enum([
13227
13236
  ]);
13228
13237
  var AlertActionSchema = object({
13229
13238
  label: string(),
13230
- href: string().optional()
13239
+ href: string().optional(),
13240
+ /**
13241
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13242
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13243
+ * start) — the browser must leave the SPA with a full navigation, because
13244
+ * the SPA has no such route and would bounce to the home page.
13245
+ */
13246
+ navigation: _enum(["app", "server"]).optional()
13231
13247
  });
13232
13248
  var AlertStatusSchema = _enum([
13233
13249
  "active",
@@ -41972,6 +41988,9 @@ var NcSystemEventKindSchema = _enum([
41972
41988
  "server-updated",
41973
41989
  "export-completed",
41974
41990
  "backup-completed",
41991
+ "alert-critical",
41992
+ "alert-error",
41993
+ "alert-critical-resolved",
41975
41994
  "camera-online",
41976
41995
  "camera-offline",
41977
41996
  "camera-disabled",
@@ -51048,7 +51067,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51048
51067
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51049
51068
  kind: "mutation",
51050
51069
  auth: "admin"
51051
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51070
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51071
+ clear: boolean(),
51072
+ repointLocationId: string().optional()
51073
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51052
51074
  kind: "mutation",
51053
51075
  auth: "admin"
51054
51076
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -55329,6 +55351,11 @@ onStatusChanged: { data: object({
55329
55351
  *
55330
55352
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55331
55353
  * provider refreshes the slice on an interval and eagerly after commands.
55354
+ *
55355
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55356
+ * nullable: `null` means "not known right now" (the appliance has not said,
55357
+ * the link is down, or the description does not carry it) and is never
55358
+ * rendered or exported as `false` / `0`. `availability` says why.
55332
55359
  */
55333
55360
  var DishwasherStateSchema = _enum([
55334
55361
  "idle",
@@ -55338,43 +55365,155 @@ var DishwasherStateSchema = _enum([
55338
55365
  "error",
55339
55366
  "unavailable"
55340
55367
  ]);
55368
+ /**
55369
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55370
+ * view for compact surfaces; this is what the appliance said.
55371
+ */
55372
+ var DishwasherOperationStateSchema = _enum([
55373
+ "Inactive",
55374
+ "Ready",
55375
+ "DelayedStart",
55376
+ "Run",
55377
+ "Pause",
55378
+ "ActionRequired",
55379
+ "Finished",
55380
+ "Error",
55381
+ "Aborting"
55382
+ ]);
55383
+ /**
55384
+ * Why fields may be `null`:
55385
+ * - `available` — the link is up and the description is loaded;
55386
+ * - `offline` — the local link is down (values are unknown, not last-known);
55387
+ * - `description-missing` — the link is up but the appliance's description could not
55388
+ * be loaded, so its values cannot be decoded.
55389
+ */
55390
+ var DishwasherAvailabilitySchema = _enum([
55391
+ "available",
55392
+ "offline",
55393
+ "description-missing"
55394
+ ]);
55341
55395
  var DishwasherConsumableLevelSchema = _enum([
55342
55396
  "ok",
55343
55397
  "low",
55344
55398
  "empty"
55345
55399
  ]);
55346
55400
  var DishwasherStatusSchema = object({
55401
+ availability: DishwasherAvailabilitySchema,
55402
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55347
55403
  state: DishwasherStateSchema,
55348
- /** Active program id/name, or null when none selected / unknown. */
55404
+ /** The appliance's operation state as reported; null when not known. */
55405
+ operationState: DishwasherOperationStateSchema.nullable(),
55406
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55349
55407
  program: string().nullable(),
55350
- /** Program tokens the hardware accepts — drives the UI selector. */
55408
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55409
+ selectedProgram: string().nullable(),
55410
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55351
55411
  availablePrograms: array(string()),
55352
- /** Minutes remaining on the active cycle, or null when not running. */
55353
- remainingMinutes: number().int().nonnegative().nullable(),
55412
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55413
+ remainingSeconds: number().int().nonnegative().nullable(),
55414
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55415
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55354
55416
  /** Cycle completion 0..100, or null when not applicable. */
55355
55417
  progressPercent: number().min(0).max(100).nullable(),
55356
- /** True when the door is reported open. */
55357
- doorOpen: boolean(),
55358
- /** True when remote start is allowed (door closed, power on, etc.). */
55359
- remoteStartAllowed: boolean(),
55360
- /** Main power / switched-on state. */
55361
- powerOn: boolean(),
55418
+ /** True when the door is reported open; null when the door state is not known. */
55419
+ doorOpen: boolean().nullable(),
55420
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55421
+ doorLocked: boolean().nullable(),
55422
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55423
+ remoteStartAllowed: boolean().nullable(),
55424
+ /** True when the appliance accepts remote control now; null when not known. */
55425
+ remoteControlActive: boolean().nullable(),
55426
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55427
+ localControlActive: boolean().nullable(),
55428
+ /** Main power / switched-on state; null when not known. */
55429
+ powerOn: boolean().nullable(),
55430
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55431
+ powerState: string().nullable(),
55362
55432
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55363
55433
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55364
- halfLoad: boolean(),
55365
- hygienePlus: boolean(),
55434
+ /** Option states: null when the appliance does not expose the option or has not said. */
55435
+ halfLoad: boolean().nullable(),
55436
+ hygienePlus: boolean().nullable(),
55366
55437
  /** Extra dry option when the appliance exposes it. */
55367
- extraDry: boolean(),
55438
+ extraDry: boolean().nullable(),
55368
55439
  /** Intensive zone (lower basket) when the appliance exposes it. */
55369
- intensiveZone: boolean(),
55440
+ intensiveZone: boolean().nullable(),
55370
55441
  /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55371
- varioSpeedPlus: boolean(),
55372
- /** Child lock (controls disabled on the appliance). */
55373
- childLock: boolean(),
55442
+ varioSpeedPlus: boolean().nullable(),
55443
+ /** Child lock (controls disabled on the appliance); null when not known. */
55444
+ childLock: boolean().nullable(),
55445
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55446
+ activeEvents: array(string()),
55447
+ /** Numeric error code when the appliance reports one; null otherwise. */
55374
55448
  errorCode: number().nullable(),
55449
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55375
55450
  errorLabel: string().nullable(),
55451
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55376
55452
  lastFetchedAt: number()
55377
55453
  });
55454
+ var DeviceIdSchema = number().int().nonnegative();
55455
+ /** A value a program option or setting can take. */
55456
+ var DishwasherValueSchema = union([
55457
+ boolean(),
55458
+ string(),
55459
+ number()
55460
+ ]);
55461
+ var DishwasherAccessSchema = _enum([
55462
+ "none",
55463
+ "read",
55464
+ "readWrite",
55465
+ "writeOnly",
55466
+ "readStatic"
55467
+ ]);
55468
+ /**
55469
+ * One option or setting the appliance declares, with the constraints its description
55470
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55471
+ */
55472
+ var DishwasherOptionDescriptorSchema = object({
55473
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55474
+ key: string(),
55475
+ /** Last segment of the key, for display. */
55476
+ name: string(),
55477
+ type: _enum([
55478
+ "boolean",
55479
+ "number",
55480
+ "enum",
55481
+ "string"
55482
+ ]),
55483
+ access: DishwasherAccessSchema,
55484
+ /** The appliance reports this entity as currently available. */
55485
+ available: boolean(),
55486
+ /** Unit the description declares for a number; null when it declares none. */
55487
+ unit: string().nullable(),
55488
+ min: number().nullable(),
55489
+ max: number().nullable(),
55490
+ step: number().nullable(),
55491
+ /** Allowed members of an enum; null for other types. */
55492
+ enumValues: array(string()).nullable(),
55493
+ defaultValue: DishwasherValueSchema.nullable()
55494
+ });
55495
+ var DishwasherProgramSchema = object({
55496
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55497
+ key: string(),
55498
+ name: string(),
55499
+ /** The appliance currently offers this program. */
55500
+ available: boolean(),
55501
+ /** The options this program lists, with the program-level access / availability / default. */
55502
+ options: array(DishwasherOptionDescriptorSchema)
55503
+ });
55504
+ var DishwasherOptionsSchema = object({
55505
+ availability: DishwasherAvailabilitySchema,
55506
+ /** What the appliance can be told to do, from the commands its description declares. */
55507
+ supportsStart: boolean(),
55508
+ supportsPause: boolean(),
55509
+ supportsResume: boolean(),
55510
+ supportsStop: boolean(),
55511
+ supportsPower: boolean(),
55512
+ /** Every program the description lists, with its options. */
55513
+ programs: array(DishwasherProgramSchema),
55514
+ /** Every option and setting entity the description lists (programs reference these by key). */
55515
+ options: array(DishwasherOptionDescriptorSchema)
55516
+ });
55378
55517
  var dishwasherCapability = {
55379
55518
  name: "dishwasher",
55380
55519
  scope: "device",
@@ -55382,86 +55521,102 @@ var dishwasherCapability = {
55382
55521
  mode: "singleton",
55383
55522
  deviceTypes: [DeviceType.Dishwasher],
55384
55523
  methods: {
55385
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55524
+ /**
55525
+ * Start a program. Without `program` the selected one starts. `options` are
55526
+ * option feature keys; each is checked against the program's constraints.
55527
+ */
55528
+ start: method(object({
55529
+ deviceId: DeviceIdSchema,
55530
+ program: string().min(1).optional(),
55531
+ options: record(string(), DishwasherValueSchema).optional()
55532
+ }), _void(), {
55386
55533
  kind: "mutation",
55387
55534
  auth: "protected"
55388
55535
  }),
55389
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55536
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55390
55537
  kind: "mutation",
55391
55538
  auth: "protected"
55392
55539
  }),
55393
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55540
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55541
+ kind: "mutation",
55542
+ auth: "protected"
55543
+ }),
55544
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55394
55545
  kind: "mutation",
55395
55546
  auth: "protected"
55396
55547
  }),
55548
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55397
55549
  setProgram: method(object({
55398
- deviceId: number().int().nonnegative(),
55550
+ deviceId: DeviceIdSchema,
55399
55551
  program: string().min(1)
55400
55552
  }), _void(), {
55401
55553
  kind: "mutation",
55402
55554
  auth: "protected"
55403
55555
  }),
55404
55556
  setPower: method(object({
55405
- deviceId: number().int().nonnegative(),
55557
+ deviceId: DeviceIdSchema,
55406
55558
  on: boolean()
55407
55559
  }), _void(), {
55408
55560
  kind: "mutation",
55409
55561
  auth: "protected"
55410
55562
  }),
55411
55563
  setHalfLoad: method(object({
55412
- deviceId: number().int().nonnegative(),
55564
+ deviceId: DeviceIdSchema,
55413
55565
  on: boolean()
55414
55566
  }), _void(), {
55415
55567
  kind: "mutation",
55416
55568
  auth: "protected"
55417
55569
  }),
55418
55570
  setHygienePlus: method(object({
55419
- deviceId: number().int().nonnegative(),
55571
+ deviceId: DeviceIdSchema,
55420
55572
  on: boolean()
55421
55573
  }), _void(), {
55422
55574
  kind: "mutation",
55423
55575
  auth: "protected"
55424
55576
  }),
55425
55577
  setExtraDry: method(object({
55426
- deviceId: number().int().nonnegative(),
55578
+ deviceId: DeviceIdSchema,
55427
55579
  on: boolean()
55428
55580
  }), _void(), {
55429
55581
  kind: "mutation",
55430
55582
  auth: "protected"
55431
55583
  }),
55432
55584
  setIntensiveZone: method(object({
55433
- deviceId: number().int().nonnegative(),
55585
+ deviceId: DeviceIdSchema,
55434
55586
  on: boolean()
55435
55587
  }), _void(), {
55436
55588
  kind: "mutation",
55437
55589
  auth: "protected"
55438
55590
  }),
55439
55591
  setVarioSpeedPlus: method(object({
55440
- deviceId: number().int().nonnegative(),
55592
+ deviceId: DeviceIdSchema,
55441
55593
  on: boolean()
55442
55594
  }), _void(), {
55443
55595
  kind: "mutation",
55444
55596
  auth: "protected"
55445
55597
  }),
55446
55598
  setChildLock: method(object({
55447
- deviceId: number().int().nonnegative(),
55599
+ deviceId: DeviceIdSchema,
55448
55600
  on: boolean()
55449
55601
  }), _void(), {
55450
55602
  kind: "mutation",
55451
55603
  auth: "protected"
55452
55604
  }),
55605
+ /**
55606
+ * Write any option or setting by feature key. Refused when the description does
55607
+ * not list it, it is not writable or not available now, or the value is outside
55608
+ * its declared range / members.
55609
+ */
55453
55610
  setOption: method(object({
55454
- deviceId: number().int().nonnegative(),
55611
+ deviceId: DeviceIdSchema,
55455
55612
  key: string().min(1),
55456
- value: union([
55457
- boolean(),
55458
- string(),
55459
- number()
55460
- ])
55613
+ value: DishwasherValueSchema
55461
55614
  }), _void(), {
55462
55615
  kind: "mutation",
55463
55616
  auth: "protected"
55464
- })
55617
+ }),
55618
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55619
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55465
55620
  },
55466
55621
  status: {
55467
55622
  schema: DishwasherStatusSchema,
@@ -69558,6 +69713,12 @@ Object.freeze({
69558
69713
  addonId: null,
69559
69714
  access: "view"
69560
69715
  },
69716
+ "dishwasher.getOptions": {
69717
+ capName: "dishwasher",
69718
+ capScope: "device",
69719
+ addonId: null,
69720
+ access: "view"
69721
+ },
69561
69722
  "dishwasher.getStatus": {
69562
69723
  capName: "dishwasher",
69563
69724
  capScope: "device",
@@ -69570,6 +69731,12 @@ Object.freeze({
69570
69731
  addonId: null,
69571
69732
  access: "create"
69572
69733
  },
69734
+ "dishwasher.resume": {
69735
+ capName: "dishwasher",
69736
+ capScope: "device",
69737
+ addonId: null,
69738
+ access: "create"
69739
+ },
69573
69740
  "dishwasher.setChildLock": {
69574
69741
  capName: "dishwasher",
69575
69742
  capScope: "device",
@@ -74070,6 +74237,12 @@ Object.freeze({
74070
74237
  addonId: null,
74071
74238
  access: "view"
74072
74239
  },
74240
+ "storageMigration.moverClearance": {
74241
+ capName: "storage-migration",
74242
+ capScope: "system",
74243
+ addonId: null,
74244
+ access: "view"
74245
+ },
74073
74246
  "storageMigration.movers": {
74074
74247
  capName: "storage-migration",
74075
74248
  capScope: "system",
@@ -76263,6 +76436,11 @@ Object.freeze({
76263
76436
  form: "single",
76264
76437
  optional: false
76265
76438
  }],
76439
+ "dishwasher.getOptions": [{
76440
+ name: "deviceId",
76441
+ form: "single",
76442
+ optional: false
76443
+ }],
76266
76444
  "dishwasher.getStatus": [{
76267
76445
  name: "deviceId",
76268
76446
  form: "single",
@@ -76273,6 +76451,11 @@ Object.freeze({
76273
76451
  form: "single",
76274
76452
  optional: false
76275
76453
  }],
76454
+ "dishwasher.resume": [{
76455
+ name: "deviceId",
76456
+ form: "single",
76457
+ optional: false
76458
+ }],
76276
76459
  "dishwasher.setChildLock": [{
76277
76460
  name: "deviceId",
76278
76461
  form: "single",
@@ -78359,6 +78542,9 @@ new Map(Object.entries({
78359
78542
  "wrapper-update-available": "system",
78360
78543
  "backup-completed": "system",
78361
78544
  "export-completed": "system",
78545
+ "alert-critical": "system",
78546
+ "alert-error": "system",
78547
+ "alert-critical-resolved": "system",
78362
78548
  "storage-location-low": "system",
78363
78549
  "storage-location-critical": "system",
78364
78550
  "storage-location-ok": "system",
@@ -78483,6 +78669,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78483
78669
  "storage-location-ok"
78484
78670
  ]
78485
78671
  },
78672
+ {
78673
+ id: "alerts",
78674
+ family: "system",
78675
+ label: "Alerts",
78676
+ kinds: [
78677
+ "alert-critical",
78678
+ "alert-error",
78679
+ "alert-critical-resolved"
78680
+ ]
78681
+ },
78486
78682
  {
78487
78683
  id: "alarm",
78488
78684
  family: "alarm",
@@ -78527,6 +78723,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78527
78723
  return [[descriptor.kind, field]];
78528
78724
  })));
78529
78725
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78726
+ object({
78727
+ phase: _enum(["raised", "resolved"]),
78728
+ episodeId: string().min(1),
78729
+ alertId: string().min(1),
78730
+ severity: AlertSeveritySchema,
78731
+ category: string(),
78732
+ title: string(),
78733
+ message: string(),
78734
+ sourceType: string().optional(),
78735
+ sourceId: string().optional(),
78736
+ nodeId: string().optional(),
78737
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78738
+ actionUrl: string().optional(),
78739
+ at: number()
78740
+ });
78530
78741
  var RULE_BODY_ONLY = ["body"];
78531
78742
  var RULE_TEXT = ["title", "body"];
78532
78743
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78536,6 +78747,11 @@ var TANK = [
78536
78747
  "device-tank-full",
78537
78748
  "device-tank-normal"
78538
78749
  ];
78750
+ var ALERT_EPISODE = [
78751
+ "alert-critical",
78752
+ "alert-error",
78753
+ "alert-critical-resolved"
78754
+ ];
78539
78755
  var UPDATES = [
78540
78756
  "addon-update-available",
78541
78757
  "server-update-available",
@@ -78728,14 +78944,14 @@ var STATE_SUMMARY_VARS = [
78728
78944
  ([...RULE_TEXT], [...CONSUMABLE]),
78729
78945
  ([...RULE_TEXT], [...TANK]),
78730
78946
  [...RULE_TEXT],
78731
- ([...RULE_TEXT], [...UPDATES]),
78732
- ([...RULE_TEXT], [...UPDATES]),
78733
- [...RULE_TEXT],
78947
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78948
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78734
78949
  [...RULE_TEXT],
78735
78950
  [...RULE_TEXT],
78736
78951
  [...RULE_TEXT],
78737
78952
  [...RULE_TEXT],
78738
78953
  [...RULE_TEXT],
78954
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78739
78955
  [...RULE_TEXT],
78740
78956
  [...RULE_TEXT],
78741
78957
  [...RULE_TEXT],
@@ -78753,7 +78969,11 @@ var STATE_SUMMARY_VARS = [
78753
78969
  [...RULE_TEXT],
78754
78970
  [...RULE_TEXT],
78755
78971
  [...RULE_TEXT],
78756
- [...RULE_TEXT],
78972
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78973
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78974
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78975
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78976
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78757
78977
  [...RULE_TEXT],
78758
78978
  [...RULE_TEXT],
78759
78979
  [...RULE_TEXT],
package/dist/addon.mjs CHANGED
@@ -41,7 +41,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
41
41
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
42
42
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
43
43
  //#endregion
44
- //#region ../types/dist/event-category-BvOFi6PY.mjs
44
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
45
45
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
46
46
  EventCategory["SystemBoot"] = "system.boot";
47
47
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -120,9 +120,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
120
120
  /**
121
121
  * The node's one-shot runner boot check (D877): planned runners against the
122
122
  * process service, `degraded` when any is failed, refused or missing. The
123
- * alert centre turns it into one alert and a direct critical push.
123
+ * alert centre turns it into one critical alert.
124
124
  */
125
125
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
126
+ /**
127
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
128
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
129
+ * centre sends no notification of its own: Notification Center turns this
130
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
131
+ * system-event kinds, and reconciles from the alerts store because a bus
132
+ * event may be dropped (D8, D11).
133
+ */
134
+ EventCategory["AlertEpisode"] = "alert.episode";
126
135
  EventCategory["AddonError"] = "addon.error";
127
136
  EventCategory["AddonPageReady"] = "addon.page-ready";
128
137
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5447,7 +5456,7 @@ var ZodIssueCode$1 = {
5447
5456
  var ZodFirstPartyTypeKind$1;
5448
5457
  ZodFirstPartyTypeKind$1 || (ZodFirstPartyTypeKind$1 = {});
5449
5458
  //#endregion
5450
- //#region ../types/dist/sleep-BegKjwUu.mjs
5459
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5451
5460
  /**
5452
5461
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5453
5462
  * window to float samples (D455).
@@ -13224,7 +13233,14 @@ var AlertSeveritySchema = _enum([
13224
13233
  ]);
13225
13234
  var AlertActionSchema = object({
13226
13235
  label: string(),
13227
- href: string().optional()
13236
+ href: string().optional(),
13237
+ /**
13238
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13239
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13240
+ * start) — the browser must leave the SPA with a full navigation, because
13241
+ * the SPA has no such route and would bounce to the home page.
13242
+ */
13243
+ navigation: _enum(["app", "server"]).optional()
13228
13244
  });
13229
13245
  var AlertStatusSchema = _enum([
13230
13246
  "active",
@@ -41969,6 +41985,9 @@ var NcSystemEventKindSchema = _enum([
41969
41985
  "server-updated",
41970
41986
  "export-completed",
41971
41987
  "backup-completed",
41988
+ "alert-critical",
41989
+ "alert-error",
41990
+ "alert-critical-resolved",
41972
41991
  "camera-online",
41973
41992
  "camera-offline",
41974
41993
  "camera-disabled",
@@ -51045,7 +51064,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51045
51064
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51046
51065
  kind: "mutation",
51047
51066
  auth: "admin"
51048
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51067
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51068
+ clear: boolean(),
51069
+ repointLocationId: string().optional()
51070
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51049
51071
  kind: "mutation",
51050
51072
  auth: "admin"
51051
51073
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -55326,6 +55348,11 @@ onStatusChanged: { data: object({
55326
55348
  *
55327
55349
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55328
55350
  * provider refreshes the slice on an interval and eagerly after commands.
55351
+ *
55352
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55353
+ * nullable: `null` means "not known right now" (the appliance has not said,
55354
+ * the link is down, or the description does not carry it) and is never
55355
+ * rendered or exported as `false` / `0`. `availability` says why.
55329
55356
  */
55330
55357
  var DishwasherStateSchema = _enum([
55331
55358
  "idle",
@@ -55335,43 +55362,155 @@ var DishwasherStateSchema = _enum([
55335
55362
  "error",
55336
55363
  "unavailable"
55337
55364
  ]);
55365
+ /**
55366
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55367
+ * view for compact surfaces; this is what the appliance said.
55368
+ */
55369
+ var DishwasherOperationStateSchema = _enum([
55370
+ "Inactive",
55371
+ "Ready",
55372
+ "DelayedStart",
55373
+ "Run",
55374
+ "Pause",
55375
+ "ActionRequired",
55376
+ "Finished",
55377
+ "Error",
55378
+ "Aborting"
55379
+ ]);
55380
+ /**
55381
+ * Why fields may be `null`:
55382
+ * - `available` — the link is up and the description is loaded;
55383
+ * - `offline` — the local link is down (values are unknown, not last-known);
55384
+ * - `description-missing` — the link is up but the appliance's description could not
55385
+ * be loaded, so its values cannot be decoded.
55386
+ */
55387
+ var DishwasherAvailabilitySchema = _enum([
55388
+ "available",
55389
+ "offline",
55390
+ "description-missing"
55391
+ ]);
55338
55392
  var DishwasherConsumableLevelSchema = _enum([
55339
55393
  "ok",
55340
55394
  "low",
55341
55395
  "empty"
55342
55396
  ]);
55343
55397
  var DishwasherStatusSchema = object({
55398
+ availability: DishwasherAvailabilitySchema,
55399
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55344
55400
  state: DishwasherStateSchema,
55345
- /** Active program id/name, or null when none selected / unknown. */
55401
+ /** The appliance's operation state as reported; null when not known. */
55402
+ operationState: DishwasherOperationStateSchema.nullable(),
55403
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55346
55404
  program: string().nullable(),
55347
- /** Program tokens the hardware accepts — drives the UI selector. */
55405
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55406
+ selectedProgram: string().nullable(),
55407
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55348
55408
  availablePrograms: array(string()),
55349
- /** Minutes remaining on the active cycle, or null when not running. */
55350
- remainingMinutes: number().int().nonnegative().nullable(),
55409
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55410
+ remainingSeconds: number().int().nonnegative().nullable(),
55411
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55412
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55351
55413
  /** Cycle completion 0..100, or null when not applicable. */
55352
55414
  progressPercent: number().min(0).max(100).nullable(),
55353
- /** True when the door is reported open. */
55354
- doorOpen: boolean(),
55355
- /** True when remote start is allowed (door closed, power on, etc.). */
55356
- remoteStartAllowed: boolean(),
55357
- /** Main power / switched-on state. */
55358
- powerOn: boolean(),
55415
+ /** True when the door is reported open; null when the door state is not known. */
55416
+ doorOpen: boolean().nullable(),
55417
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55418
+ doorLocked: boolean().nullable(),
55419
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55420
+ remoteStartAllowed: boolean().nullable(),
55421
+ /** True when the appliance accepts remote control now; null when not known. */
55422
+ remoteControlActive: boolean().nullable(),
55423
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55424
+ localControlActive: boolean().nullable(),
55425
+ /** Main power / switched-on state; null when not known. */
55426
+ powerOn: boolean().nullable(),
55427
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55428
+ powerState: string().nullable(),
55359
55429
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55360
55430
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55361
- halfLoad: boolean(),
55362
- hygienePlus: boolean(),
55431
+ /** Option states: null when the appliance does not expose the option or has not said. */
55432
+ halfLoad: boolean().nullable(),
55433
+ hygienePlus: boolean().nullable(),
55363
55434
  /** Extra dry option when the appliance exposes it. */
55364
- extraDry: boolean(),
55435
+ extraDry: boolean().nullable(),
55365
55436
  /** Intensive zone (lower basket) when the appliance exposes it. */
55366
- intensiveZone: boolean(),
55437
+ intensiveZone: boolean().nullable(),
55367
55438
  /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55368
- varioSpeedPlus: boolean(),
55369
- /** Child lock (controls disabled on the appliance). */
55370
- childLock: boolean(),
55439
+ varioSpeedPlus: boolean().nullable(),
55440
+ /** Child lock (controls disabled on the appliance); null when not known. */
55441
+ childLock: boolean().nullable(),
55442
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55443
+ activeEvents: array(string()),
55444
+ /** Numeric error code when the appliance reports one; null otherwise. */
55371
55445
  errorCode: number().nullable(),
55446
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55372
55447
  errorLabel: string().nullable(),
55448
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55373
55449
  lastFetchedAt: number()
55374
55450
  });
55451
+ var DeviceIdSchema = number().int().nonnegative();
55452
+ /** A value a program option or setting can take. */
55453
+ var DishwasherValueSchema = union([
55454
+ boolean(),
55455
+ string(),
55456
+ number()
55457
+ ]);
55458
+ var DishwasherAccessSchema = _enum([
55459
+ "none",
55460
+ "read",
55461
+ "readWrite",
55462
+ "writeOnly",
55463
+ "readStatic"
55464
+ ]);
55465
+ /**
55466
+ * One option or setting the appliance declares, with the constraints its description
55467
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55468
+ */
55469
+ var DishwasherOptionDescriptorSchema = object({
55470
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55471
+ key: string(),
55472
+ /** Last segment of the key, for display. */
55473
+ name: string(),
55474
+ type: _enum([
55475
+ "boolean",
55476
+ "number",
55477
+ "enum",
55478
+ "string"
55479
+ ]),
55480
+ access: DishwasherAccessSchema,
55481
+ /** The appliance reports this entity as currently available. */
55482
+ available: boolean(),
55483
+ /** Unit the description declares for a number; null when it declares none. */
55484
+ unit: string().nullable(),
55485
+ min: number().nullable(),
55486
+ max: number().nullable(),
55487
+ step: number().nullable(),
55488
+ /** Allowed members of an enum; null for other types. */
55489
+ enumValues: array(string()).nullable(),
55490
+ defaultValue: DishwasherValueSchema.nullable()
55491
+ });
55492
+ var DishwasherProgramSchema = object({
55493
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55494
+ key: string(),
55495
+ name: string(),
55496
+ /** The appliance currently offers this program. */
55497
+ available: boolean(),
55498
+ /** The options this program lists, with the program-level access / availability / default. */
55499
+ options: array(DishwasherOptionDescriptorSchema)
55500
+ });
55501
+ var DishwasherOptionsSchema = object({
55502
+ availability: DishwasherAvailabilitySchema,
55503
+ /** What the appliance can be told to do, from the commands its description declares. */
55504
+ supportsStart: boolean(),
55505
+ supportsPause: boolean(),
55506
+ supportsResume: boolean(),
55507
+ supportsStop: boolean(),
55508
+ supportsPower: boolean(),
55509
+ /** Every program the description lists, with its options. */
55510
+ programs: array(DishwasherProgramSchema),
55511
+ /** Every option and setting entity the description lists (programs reference these by key). */
55512
+ options: array(DishwasherOptionDescriptorSchema)
55513
+ });
55375
55514
  var dishwasherCapability = {
55376
55515
  name: "dishwasher",
55377
55516
  scope: "device",
@@ -55379,86 +55518,102 @@ var dishwasherCapability = {
55379
55518
  mode: "singleton",
55380
55519
  deviceTypes: [DeviceType.Dishwasher],
55381
55520
  methods: {
55382
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55521
+ /**
55522
+ * Start a program. Without `program` the selected one starts. `options` are
55523
+ * option feature keys; each is checked against the program's constraints.
55524
+ */
55525
+ start: method(object({
55526
+ deviceId: DeviceIdSchema,
55527
+ program: string().min(1).optional(),
55528
+ options: record(string(), DishwasherValueSchema).optional()
55529
+ }), _void(), {
55383
55530
  kind: "mutation",
55384
55531
  auth: "protected"
55385
55532
  }),
55386
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55533
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55387
55534
  kind: "mutation",
55388
55535
  auth: "protected"
55389
55536
  }),
55390
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55537
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55538
+ kind: "mutation",
55539
+ auth: "protected"
55540
+ }),
55541
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55391
55542
  kind: "mutation",
55392
55543
  auth: "protected"
55393
55544
  }),
55545
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55394
55546
  setProgram: method(object({
55395
- deviceId: number().int().nonnegative(),
55547
+ deviceId: DeviceIdSchema,
55396
55548
  program: string().min(1)
55397
55549
  }), _void(), {
55398
55550
  kind: "mutation",
55399
55551
  auth: "protected"
55400
55552
  }),
55401
55553
  setPower: method(object({
55402
- deviceId: number().int().nonnegative(),
55554
+ deviceId: DeviceIdSchema,
55403
55555
  on: boolean()
55404
55556
  }), _void(), {
55405
55557
  kind: "mutation",
55406
55558
  auth: "protected"
55407
55559
  }),
55408
55560
  setHalfLoad: method(object({
55409
- deviceId: number().int().nonnegative(),
55561
+ deviceId: DeviceIdSchema,
55410
55562
  on: boolean()
55411
55563
  }), _void(), {
55412
55564
  kind: "mutation",
55413
55565
  auth: "protected"
55414
55566
  }),
55415
55567
  setHygienePlus: method(object({
55416
- deviceId: number().int().nonnegative(),
55568
+ deviceId: DeviceIdSchema,
55417
55569
  on: boolean()
55418
55570
  }), _void(), {
55419
55571
  kind: "mutation",
55420
55572
  auth: "protected"
55421
55573
  }),
55422
55574
  setExtraDry: method(object({
55423
- deviceId: number().int().nonnegative(),
55575
+ deviceId: DeviceIdSchema,
55424
55576
  on: boolean()
55425
55577
  }), _void(), {
55426
55578
  kind: "mutation",
55427
55579
  auth: "protected"
55428
55580
  }),
55429
55581
  setIntensiveZone: method(object({
55430
- deviceId: number().int().nonnegative(),
55582
+ deviceId: DeviceIdSchema,
55431
55583
  on: boolean()
55432
55584
  }), _void(), {
55433
55585
  kind: "mutation",
55434
55586
  auth: "protected"
55435
55587
  }),
55436
55588
  setVarioSpeedPlus: method(object({
55437
- deviceId: number().int().nonnegative(),
55589
+ deviceId: DeviceIdSchema,
55438
55590
  on: boolean()
55439
55591
  }), _void(), {
55440
55592
  kind: "mutation",
55441
55593
  auth: "protected"
55442
55594
  }),
55443
55595
  setChildLock: method(object({
55444
- deviceId: number().int().nonnegative(),
55596
+ deviceId: DeviceIdSchema,
55445
55597
  on: boolean()
55446
55598
  }), _void(), {
55447
55599
  kind: "mutation",
55448
55600
  auth: "protected"
55449
55601
  }),
55602
+ /**
55603
+ * Write any option or setting by feature key. Refused when the description does
55604
+ * not list it, it is not writable or not available now, or the value is outside
55605
+ * its declared range / members.
55606
+ */
55450
55607
  setOption: method(object({
55451
- deviceId: number().int().nonnegative(),
55608
+ deviceId: DeviceIdSchema,
55452
55609
  key: string().min(1),
55453
- value: union([
55454
- boolean(),
55455
- string(),
55456
- number()
55457
- ])
55610
+ value: DishwasherValueSchema
55458
55611
  }), _void(), {
55459
55612
  kind: "mutation",
55460
55613
  auth: "protected"
55461
- })
55614
+ }),
55615
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55616
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55462
55617
  },
55463
55618
  status: {
55464
55619
  schema: DishwasherStatusSchema,
@@ -69555,6 +69710,12 @@ Object.freeze({
69555
69710
  addonId: null,
69556
69711
  access: "view"
69557
69712
  },
69713
+ "dishwasher.getOptions": {
69714
+ capName: "dishwasher",
69715
+ capScope: "device",
69716
+ addonId: null,
69717
+ access: "view"
69718
+ },
69558
69719
  "dishwasher.getStatus": {
69559
69720
  capName: "dishwasher",
69560
69721
  capScope: "device",
@@ -69567,6 +69728,12 @@ Object.freeze({
69567
69728
  addonId: null,
69568
69729
  access: "create"
69569
69730
  },
69731
+ "dishwasher.resume": {
69732
+ capName: "dishwasher",
69733
+ capScope: "device",
69734
+ addonId: null,
69735
+ access: "create"
69736
+ },
69570
69737
  "dishwasher.setChildLock": {
69571
69738
  capName: "dishwasher",
69572
69739
  capScope: "device",
@@ -74067,6 +74234,12 @@ Object.freeze({
74067
74234
  addonId: null,
74068
74235
  access: "view"
74069
74236
  },
74237
+ "storageMigration.moverClearance": {
74238
+ capName: "storage-migration",
74239
+ capScope: "system",
74240
+ addonId: null,
74241
+ access: "view"
74242
+ },
74070
74243
  "storageMigration.movers": {
74071
74244
  capName: "storage-migration",
74072
74245
  capScope: "system",
@@ -76260,6 +76433,11 @@ Object.freeze({
76260
76433
  form: "single",
76261
76434
  optional: false
76262
76435
  }],
76436
+ "dishwasher.getOptions": [{
76437
+ name: "deviceId",
76438
+ form: "single",
76439
+ optional: false
76440
+ }],
76263
76441
  "dishwasher.getStatus": [{
76264
76442
  name: "deviceId",
76265
76443
  form: "single",
@@ -76270,6 +76448,11 @@ Object.freeze({
76270
76448
  form: "single",
76271
76449
  optional: false
76272
76450
  }],
76451
+ "dishwasher.resume": [{
76452
+ name: "deviceId",
76453
+ form: "single",
76454
+ optional: false
76455
+ }],
76273
76456
  "dishwasher.setChildLock": [{
76274
76457
  name: "deviceId",
76275
76458
  form: "single",
@@ -78356,6 +78539,9 @@ new Map(Object.entries({
78356
78539
  "wrapper-update-available": "system",
78357
78540
  "backup-completed": "system",
78358
78541
  "export-completed": "system",
78542
+ "alert-critical": "system",
78543
+ "alert-error": "system",
78544
+ "alert-critical-resolved": "system",
78359
78545
  "storage-location-low": "system",
78360
78546
  "storage-location-critical": "system",
78361
78547
  "storage-location-ok": "system",
@@ -78480,6 +78666,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78480
78666
  "storage-location-ok"
78481
78667
  ]
78482
78668
  },
78669
+ {
78670
+ id: "alerts",
78671
+ family: "system",
78672
+ label: "Alerts",
78673
+ kinds: [
78674
+ "alert-critical",
78675
+ "alert-error",
78676
+ "alert-critical-resolved"
78677
+ ]
78678
+ },
78483
78679
  {
78484
78680
  id: "alarm",
78485
78681
  family: "alarm",
@@ -78524,6 +78720,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78524
78720
  return [[descriptor.kind, field]];
78525
78721
  })));
78526
78722
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78723
+ object({
78724
+ phase: _enum(["raised", "resolved"]),
78725
+ episodeId: string().min(1),
78726
+ alertId: string().min(1),
78727
+ severity: AlertSeveritySchema,
78728
+ category: string(),
78729
+ title: string(),
78730
+ message: string(),
78731
+ sourceType: string().optional(),
78732
+ sourceId: string().optional(),
78733
+ nodeId: string().optional(),
78734
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78735
+ actionUrl: string().optional(),
78736
+ at: number()
78737
+ });
78527
78738
  var RULE_BODY_ONLY = ["body"];
78528
78739
  var RULE_TEXT = ["title", "body"];
78529
78740
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78533,6 +78744,11 @@ var TANK = [
78533
78744
  "device-tank-full",
78534
78745
  "device-tank-normal"
78535
78746
  ];
78747
+ var ALERT_EPISODE = [
78748
+ "alert-critical",
78749
+ "alert-error",
78750
+ "alert-critical-resolved"
78751
+ ];
78536
78752
  var UPDATES = [
78537
78753
  "addon-update-available",
78538
78754
  "server-update-available",
@@ -78725,14 +78941,14 @@ var STATE_SUMMARY_VARS = [
78725
78941
  ([...RULE_TEXT], [...CONSUMABLE]),
78726
78942
  ([...RULE_TEXT], [...TANK]),
78727
78943
  [...RULE_TEXT],
78728
- ([...RULE_TEXT], [...UPDATES]),
78729
- ([...RULE_TEXT], [...UPDATES]),
78730
- [...RULE_TEXT],
78944
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78945
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78731
78946
  [...RULE_TEXT],
78732
78947
  [...RULE_TEXT],
78733
78948
  [...RULE_TEXT],
78734
78949
  [...RULE_TEXT],
78735
78950
  [...RULE_TEXT],
78951
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78736
78952
  [...RULE_TEXT],
78737
78953
  [...RULE_TEXT],
78738
78954
  [...RULE_TEXT],
@@ -78750,7 +78966,11 @@ var STATE_SUMMARY_VARS = [
78750
78966
  [...RULE_TEXT],
78751
78967
  [...RULE_TEXT],
78752
78968
  [...RULE_TEXT],
78753
- [...RULE_TEXT],
78969
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78970
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78971
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78972
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78973
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78754
78974
  [...RULE_TEXT],
78755
78975
  [...RULE_TEXT],
78756
78976
  [...RULE_TEXT],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-dreame",
3
- "version": "0.2.135",
3
+ "version": "0.2.136",
4
4
  "description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
5
5
  "keywords": [
6
6
  "camstack",