@camstack/addon-provider-onvif 1.2.129 → 1.2.131

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 +527 -15
  2. package/dist/addon.mjs +527 -15
  3. package/package.json +1 -1
package/dist/addon.mjs CHANGED
@@ -3,7 +3,7 @@ import { createRequire } from "node:module";
3
3
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
4
4
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
5
5
  //#endregion
6
- //#region ../types/dist/event-category-BvOFi6PY.mjs
6
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
7
7
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
8
8
  EventCategory["SystemBoot"] = "system.boot";
9
9
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -82,9 +82,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
82
82
  /**
83
83
  * The node's one-shot runner boot check (D877): planned runners against the
84
84
  * process service, `degraded` when any is failed, refused or missing. The
85
- * alert centre turns it into one alert and a direct critical push.
85
+ * alert centre turns it into one critical alert.
86
86
  */
87
87
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
88
+ /**
89
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
90
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
91
+ * centre sends no notification of its own: Notification Center turns this
92
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
93
+ * system-event kinds, and reconciles from the alerts store because a bus
94
+ * event may be dropped (D8, D11).
95
+ */
96
+ EventCategory["AlertEpisode"] = "alert.episode";
88
97
  EventCategory["AddonError"] = "addon.error";
89
98
  EventCategory["AddonPageReady"] = "addon.page-ready";
90
99
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5409,7 +5418,7 @@ var ZodIssueCode = {
5409
5418
  var ZodFirstPartyTypeKind;
5410
5419
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5411
5420
  //#endregion
5412
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5421
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5413
5422
  /**
5414
5423
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5415
5424
  * window to float samples (D455).
@@ -8357,7 +8366,7 @@ object({
8357
8366
  params: record(string(), union([string(), number()])).optional()
8358
8367
  });
8359
8368
  //#endregion
8360
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8369
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8361
8370
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8362
8371
  DeviceType["Camera"] = "camera";
8363
8372
  DeviceType["Hub"] = "hub";
@@ -8449,6 +8458,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8449
8458
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8450
8459
  * integrations sharing the same food/desiccant/hopper surface. */
8451
8460
  DeviceType["PetFeeder"] = "pet-feeder";
8461
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8462
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8463
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8464
+ DeviceType["Dishwasher"] = "dishwasher";
8452
8465
  return DeviceType;
8453
8466
  }({});
8454
8467
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8706,7 +8719,7 @@ function errMsg(err) {
8706
8719
  return String(err);
8707
8720
  }
8708
8721
  //#endregion
8709
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8722
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8710
8723
  /**
8711
8724
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8712
8725
  *
@@ -13092,8 +13105,20 @@ var AlertSeveritySchema = _enum([
13092
13105
  "info",
13093
13106
  "success",
13094
13107
  "warning",
13095
- "error"
13108
+ "error",
13109
+ "critical"
13096
13110
  ]);
13111
+ var AlertActionSchema = object({
13112
+ label: string(),
13113
+ href: string().optional(),
13114
+ /**
13115
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13116
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13117
+ * start) — the browser must leave the SPA with a full navigation, because
13118
+ * the SPA has no such route and would bounce to the home page.
13119
+ */
13120
+ navigation: _enum(["app", "server"]).optional()
13121
+ });
13097
13122
  var AlertStatusSchema = _enum([
13098
13123
  "active",
13099
13124
  "in-progress",
@@ -13111,6 +13136,7 @@ var AlertSchema = object({
13111
13136
  severity: AlertSeveritySchema,
13112
13137
  title: string(),
13113
13138
  message: string(),
13139
+ action: AlertActionSchema.optional(),
13114
13140
  status: AlertStatusSchema,
13115
13141
  progress: number().optional(),
13116
13142
  read: boolean(),
@@ -17368,7 +17394,11 @@ DeviceType.Hub, DeviceDiscoveryStatusSchema.extend({ lastFetchedAt: number().int
17368
17394
  });
17369
17395
  /**
17370
17396
  * `device-adoption` — generic discovery + adoption surface,
17371
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17397
+ * system-scoped collection (one provider per integration addon), routed
17398
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17399
+ * pin model as `connection-test`. The admin UI keeps using
17400
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17401
+ * successor to `ha-discovery`:
17372
17402
  * keyed by `integrationId` (the addon resolves integrationId → broker
17373
17403
  * internally) rather than a connection-specific `brokerId`, and it
17374
17404
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -41657,6 +41687,9 @@ var NcSystemEventKindSchema = _enum([
41657
41687
  "server-updated",
41658
41688
  "export-completed",
41659
41689
  "backup-completed",
41690
+ "alert-critical",
41691
+ "alert-error",
41692
+ "alert-critical-resolved",
41660
41693
  "camera-online",
41661
41694
  "camera-offline",
41662
41695
  "camera-disabled",
@@ -50793,7 +50826,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
50793
50826
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
50794
50827
  kind: "mutation",
50795
50828
  auth: "admin"
50796
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
50829
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
50830
+ clear: boolean(),
50831
+ repointLocationId: string().optional()
50832
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
50797
50833
  kind: "mutation",
50798
50834
  auth: "admin"
50799
50835
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -53343,7 +53379,7 @@ var BatteryStatusSchema = object({
53343
53379
  */
53344
53380
  binary: boolean().optional()
53345
53381
  });
53346
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, method(object({
53382
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, method(object({
53347
53383
  deviceId: number(),
53348
53384
  /** Bound on the wait. Sensible range 3000–10000ms. */
53349
53385
  timeoutMs: number().int().min(500).max(3e4).default(8e3)
@@ -54219,6 +54255,250 @@ object({
54219
54255
  deviceId: number(),
54220
54256
  status: DeviceStatusSchema
54221
54257
  });
54258
+ /**
54259
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54260
+ * consumable levels (salt, rinse aid) and common program options.
54261
+ *
54262
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54263
+ * by any integration that exposes the same program / option surface.
54264
+ *
54265
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
54266
+ * provider refreshes the slice on an interval and eagerly after commands.
54267
+ *
54268
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
54269
+ * nullable: `null` means "not known right now" (the appliance has not said,
54270
+ * the link is down, or the description does not carry it) and is never
54271
+ * rendered or exported as `false` / `0`. `availability` says why.
54272
+ */
54273
+ var DishwasherStateSchema = _enum([
54274
+ "idle",
54275
+ "running",
54276
+ "paused",
54277
+ "finished",
54278
+ "error",
54279
+ "unavailable"
54280
+ ]);
54281
+ /**
54282
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
54283
+ * view for compact surfaces; this is what the appliance said.
54284
+ */
54285
+ var DishwasherOperationStateSchema = _enum([
54286
+ "Inactive",
54287
+ "Ready",
54288
+ "DelayedStart",
54289
+ "Run",
54290
+ "Pause",
54291
+ "ActionRequired",
54292
+ "Finished",
54293
+ "Error",
54294
+ "Aborting"
54295
+ ]);
54296
+ /**
54297
+ * Why fields may be `null`:
54298
+ * - `available` — the link is up and the description is loaded;
54299
+ * - `offline` — the local link is down (values are unknown, not last-known);
54300
+ * - `description-missing` — the link is up but the appliance's description could not
54301
+ * be loaded, so its values cannot be decoded.
54302
+ */
54303
+ var DishwasherAvailabilitySchema = _enum([
54304
+ "available",
54305
+ "offline",
54306
+ "description-missing"
54307
+ ]);
54308
+ var DishwasherConsumableLevelSchema = _enum([
54309
+ "ok",
54310
+ "low",
54311
+ "empty"
54312
+ ]);
54313
+ object({
54314
+ availability: DishwasherAvailabilitySchema,
54315
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
54316
+ state: DishwasherStateSchema,
54317
+ /** The appliance's operation state as reported; null when not known. */
54318
+ operationState: DishwasherOperationStateSchema.nullable(),
54319
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
54320
+ program: string().nullable(),
54321
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
54322
+ selectedProgram: string().nullable(),
54323
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
54324
+ availablePrograms: array(string()),
54325
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
54326
+ remainingSeconds: number().int().nonnegative().nullable(),
54327
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
54328
+ delayedStartSeconds: number().int().nonnegative().nullable(),
54329
+ /** Cycle completion 0..100, or null when not applicable. */
54330
+ progressPercent: number().min(0).max(100).nullable(),
54331
+ /** True when the door is reported open; null when the door state is not known. */
54332
+ doorOpen: boolean().nullable(),
54333
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
54334
+ doorLocked: boolean().nullable(),
54335
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
54336
+ remoteStartAllowed: boolean().nullable(),
54337
+ /** True when the appliance accepts remote control now; null when not known. */
54338
+ remoteControlActive: boolean().nullable(),
54339
+ /** True while somebody operates the appliance at its panel; null when not reported. */
54340
+ localControlActive: boolean().nullable(),
54341
+ /** Main power / switched-on state; null when not known. */
54342
+ powerOn: boolean().nullable(),
54343
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
54344
+ powerState: string().nullable(),
54345
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
54346
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54347
+ /** Option states: null when the appliance does not expose the option or has not said. */
54348
+ halfLoad: boolean().nullable(),
54349
+ hygienePlus: boolean().nullable(),
54350
+ /** Extra dry option when the appliance exposes it. */
54351
+ extraDry: boolean().nullable(),
54352
+ /** Intensive zone (lower basket) when the appliance exposes it. */
54353
+ intensiveZone: boolean().nullable(),
54354
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
54355
+ varioSpeedPlus: boolean().nullable(),
54356
+ /** Child lock (controls disabled on the appliance); null when not known. */
54357
+ childLock: boolean().nullable(),
54358
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
54359
+ activeEvents: array(string()),
54360
+ /** Numeric error code when the appliance reports one; null otherwise. */
54361
+ errorCode: number().nullable(),
54362
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
54363
+ errorLabel: string().nullable(),
54364
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
54365
+ lastFetchedAt: number()
54366
+ });
54367
+ var DeviceIdSchema = number().int().nonnegative();
54368
+ /** A value a program option or setting can take. */
54369
+ var DishwasherValueSchema = union([
54370
+ boolean(),
54371
+ string(),
54372
+ number()
54373
+ ]);
54374
+ var DishwasherAccessSchema = _enum([
54375
+ "none",
54376
+ "read",
54377
+ "readWrite",
54378
+ "writeOnly",
54379
+ "readStatic"
54380
+ ]);
54381
+ /**
54382
+ * One option or setting the appliance declares, with the constraints its description
54383
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
54384
+ */
54385
+ var DishwasherOptionDescriptorSchema = object({
54386
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
54387
+ key: string(),
54388
+ /** Last segment of the key, for display. */
54389
+ name: string(),
54390
+ type: _enum([
54391
+ "boolean",
54392
+ "number",
54393
+ "enum",
54394
+ "string"
54395
+ ]),
54396
+ access: DishwasherAccessSchema,
54397
+ /** The appliance reports this entity as currently available. */
54398
+ available: boolean(),
54399
+ /** Unit the description declares for a number; null when it declares none. */
54400
+ unit: string().nullable(),
54401
+ min: number().nullable(),
54402
+ max: number().nullable(),
54403
+ step: number().nullable(),
54404
+ /** Allowed members of an enum; null for other types. */
54405
+ enumValues: array(string()).nullable(),
54406
+ defaultValue: DishwasherValueSchema.nullable()
54407
+ });
54408
+ var DishwasherProgramSchema = object({
54409
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
54410
+ key: string(),
54411
+ name: string(),
54412
+ /** The appliance currently offers this program. */
54413
+ available: boolean(),
54414
+ /** The options this program lists, with the program-level access / availability / default. */
54415
+ options: array(DishwasherOptionDescriptorSchema)
54416
+ });
54417
+ var DishwasherOptionsSchema = object({
54418
+ availability: DishwasherAvailabilitySchema,
54419
+ /** What the appliance can be told to do, from the commands its description declares. */
54420
+ supportsStart: boolean(),
54421
+ supportsPause: boolean(),
54422
+ supportsResume: boolean(),
54423
+ supportsStop: boolean(),
54424
+ supportsPower: boolean(),
54425
+ /** Every program the description lists, with its options. */
54426
+ programs: array(DishwasherProgramSchema),
54427
+ /** Every option and setting entity the description lists (programs reference these by key). */
54428
+ options: array(DishwasherOptionDescriptorSchema)
54429
+ });
54430
+ DeviceType.Dishwasher, method(object({
54431
+ deviceId: DeviceIdSchema,
54432
+ program: string().min(1).optional(),
54433
+ options: record(string(), DishwasherValueSchema).optional()
54434
+ }), _void(), {
54435
+ kind: "mutation",
54436
+ auth: "protected"
54437
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54438
+ kind: "mutation",
54439
+ auth: "protected"
54440
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54441
+ kind: "mutation",
54442
+ auth: "protected"
54443
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54444
+ kind: "mutation",
54445
+ auth: "protected"
54446
+ }), method(object({
54447
+ deviceId: DeviceIdSchema,
54448
+ program: string().min(1)
54449
+ }), _void(), {
54450
+ kind: "mutation",
54451
+ auth: "protected"
54452
+ }), method(object({
54453
+ deviceId: DeviceIdSchema,
54454
+ on: boolean()
54455
+ }), _void(), {
54456
+ kind: "mutation",
54457
+ auth: "protected"
54458
+ }), method(object({
54459
+ deviceId: DeviceIdSchema,
54460
+ on: boolean()
54461
+ }), _void(), {
54462
+ kind: "mutation",
54463
+ auth: "protected"
54464
+ }), method(object({
54465
+ deviceId: DeviceIdSchema,
54466
+ on: boolean()
54467
+ }), _void(), {
54468
+ kind: "mutation",
54469
+ auth: "protected"
54470
+ }), method(object({
54471
+ deviceId: DeviceIdSchema,
54472
+ on: boolean()
54473
+ }), _void(), {
54474
+ kind: "mutation",
54475
+ auth: "protected"
54476
+ }), method(object({
54477
+ deviceId: DeviceIdSchema,
54478
+ on: boolean()
54479
+ }), _void(), {
54480
+ kind: "mutation",
54481
+ auth: "protected"
54482
+ }), method(object({
54483
+ deviceId: DeviceIdSchema,
54484
+ on: boolean()
54485
+ }), _void(), {
54486
+ kind: "mutation",
54487
+ auth: "protected"
54488
+ }), method(object({
54489
+ deviceId: DeviceIdSchema,
54490
+ on: boolean()
54491
+ }), _void(), {
54492
+ kind: "mutation",
54493
+ auth: "protected"
54494
+ }), method(object({
54495
+ deviceId: DeviceIdSchema,
54496
+ key: string().min(1),
54497
+ value: DishwasherValueSchema
54498
+ }), _void(), {
54499
+ kind: "mutation",
54500
+ auth: "protected"
54501
+ }), method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" });
54222
54502
  object({
54223
54503
  /** Ms epoch of the last press. null = never observed since this provider started. */
54224
54504
  lastPressedAt: number().nullable(),
@@ -54784,6 +55064,13 @@ object({
54784
55064
  lastChangedAt: number()
54785
55065
  });
54786
55066
  DeviceType.Sensor;
55067
+ object({
55068
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
55069
+ position: number().min(0).max(100).nullable(),
55070
+ /** Ms epoch when the slice was last updated (push or poll). */
55071
+ lastFetchedAt: number()
55072
+ });
55073
+ DeviceType.Thermostat;
54787
55074
  object({
54788
55075
  /** Whether the humidifier is currently on. */
54789
55076
  on: boolean(),
@@ -62235,6 +62522,12 @@ var BaseDeviceProvider = class extends BaseAddon {
62235
62522
  provider: this
62236
62523
  }];
62237
62524
  }
62525
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
62526
+ providerRegistrationsFromSuper(result) {
62527
+ if (Array.isArray(result)) return result;
62528
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
62529
+ return [];
62530
+ }
62238
62531
  async onShutdown() {
62239
62532
  this._restoreShuttingDown = true;
62240
62533
  this.cancelRestoreRetries();
@@ -62761,7 +63054,7 @@ var BaseDeviceProvider = class extends BaseAddon {
62761
63054
  return toDeviceSummary(device, this.addonId);
62762
63055
  }
62763
63056
  };
62764
- DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
63057
+ DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
62765
63058
  new Set(Object.values(DeviceType));
62766
63059
  Object.freeze({
62767
63060
  "accessories.getStatus": {
@@ -65182,6 +65475,96 @@ Object.freeze({
65182
65475
  addonId: null,
65183
65476
  access: "view"
65184
65477
  },
65478
+ "dishwasher.getOptions": {
65479
+ capName: "dishwasher",
65480
+ capScope: "device",
65481
+ addonId: null,
65482
+ access: "view"
65483
+ },
65484
+ "dishwasher.getStatus": {
65485
+ capName: "dishwasher",
65486
+ capScope: "device",
65487
+ addonId: null,
65488
+ access: "view"
65489
+ },
65490
+ "dishwasher.pause": {
65491
+ capName: "dishwasher",
65492
+ capScope: "device",
65493
+ addonId: null,
65494
+ access: "create"
65495
+ },
65496
+ "dishwasher.resume": {
65497
+ capName: "dishwasher",
65498
+ capScope: "device",
65499
+ addonId: null,
65500
+ access: "create"
65501
+ },
65502
+ "dishwasher.setChildLock": {
65503
+ capName: "dishwasher",
65504
+ capScope: "device",
65505
+ addonId: null,
65506
+ access: "create"
65507
+ },
65508
+ "dishwasher.setExtraDry": {
65509
+ capName: "dishwasher",
65510
+ capScope: "device",
65511
+ addonId: null,
65512
+ access: "create"
65513
+ },
65514
+ "dishwasher.setHalfLoad": {
65515
+ capName: "dishwasher",
65516
+ capScope: "device",
65517
+ addonId: null,
65518
+ access: "create"
65519
+ },
65520
+ "dishwasher.setHygienePlus": {
65521
+ capName: "dishwasher",
65522
+ capScope: "device",
65523
+ addonId: null,
65524
+ access: "create"
65525
+ },
65526
+ "dishwasher.setIntensiveZone": {
65527
+ capName: "dishwasher",
65528
+ capScope: "device",
65529
+ addonId: null,
65530
+ access: "create"
65531
+ },
65532
+ "dishwasher.setOption": {
65533
+ capName: "dishwasher",
65534
+ capScope: "device",
65535
+ addonId: null,
65536
+ access: "create"
65537
+ },
65538
+ "dishwasher.setPower": {
65539
+ capName: "dishwasher",
65540
+ capScope: "device",
65541
+ addonId: null,
65542
+ access: "create"
65543
+ },
65544
+ "dishwasher.setProgram": {
65545
+ capName: "dishwasher",
65546
+ capScope: "device",
65547
+ addonId: null,
65548
+ access: "create"
65549
+ },
65550
+ "dishwasher.setVarioSpeedPlus": {
65551
+ capName: "dishwasher",
65552
+ capScope: "device",
65553
+ addonId: null,
65554
+ access: "create"
65555
+ },
65556
+ "dishwasher.start": {
65557
+ capName: "dishwasher",
65558
+ capScope: "device",
65559
+ addonId: null,
65560
+ access: "create"
65561
+ },
65562
+ "dishwasher.stop": {
65563
+ capName: "dishwasher",
65564
+ capScope: "device",
65565
+ addonId: null,
65566
+ access: "create"
65567
+ },
65185
65568
  "doorbell.getStatus": {
65186
65569
  capName: "doorbell",
65187
65570
  capScope: "device",
@@ -65392,6 +65775,12 @@ Object.freeze({
65392
65775
  addonId: null,
65393
65776
  access: "view"
65394
65777
  },
65778
+ "heatingValve.getStatus": {
65779
+ capName: "heating-valve",
65780
+ capScope: "device",
65781
+ addonId: null,
65782
+ access: "view"
65783
+ },
65395
65784
  "humidifier.getStatus": {
65396
65785
  capName: "humidifier",
65397
65786
  capScope: "device",
@@ -69610,6 +69999,12 @@ Object.freeze({
69610
69999
  addonId: null,
69611
70000
  access: "view"
69612
70001
  },
70002
+ "storageMigration.moverClearance": {
70003
+ capName: "storage-migration",
70004
+ capScope: "system",
70005
+ addonId: null,
70006
+ access: "view"
70007
+ },
69613
70008
  "storageMigration.movers": {
69614
70009
  capName: "storage-migration",
69615
70010
  capScope: "system",
@@ -70979,7 +71374,7 @@ Object.freeze({
70979
71374
  access: "create"
70980
71375
  }
70981
71376
  });
70982
- DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
71377
+ DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
70983
71378
  DeviceFeature.BatteryOperated;
70984
71379
  /** Reject after `ms`; always clears its own timer. */
70985
71380
  async function withTimeout$1(promise, ms, label) {
@@ -71869,6 +72264,81 @@ Object.freeze({
71869
72264
  form: "single",
71870
72265
  optional: false
71871
72266
  }],
72267
+ "dishwasher.getOptions": [{
72268
+ name: "deviceId",
72269
+ form: "single",
72270
+ optional: false
72271
+ }],
72272
+ "dishwasher.getStatus": [{
72273
+ name: "deviceId",
72274
+ form: "single",
72275
+ optional: false
72276
+ }],
72277
+ "dishwasher.pause": [{
72278
+ name: "deviceId",
72279
+ form: "single",
72280
+ optional: false
72281
+ }],
72282
+ "dishwasher.resume": [{
72283
+ name: "deviceId",
72284
+ form: "single",
72285
+ optional: false
72286
+ }],
72287
+ "dishwasher.setChildLock": [{
72288
+ name: "deviceId",
72289
+ form: "single",
72290
+ optional: false
72291
+ }],
72292
+ "dishwasher.setExtraDry": [{
72293
+ name: "deviceId",
72294
+ form: "single",
72295
+ optional: false
72296
+ }],
72297
+ "dishwasher.setHalfLoad": [{
72298
+ name: "deviceId",
72299
+ form: "single",
72300
+ optional: false
72301
+ }],
72302
+ "dishwasher.setHygienePlus": [{
72303
+ name: "deviceId",
72304
+ form: "single",
72305
+ optional: false
72306
+ }],
72307
+ "dishwasher.setIntensiveZone": [{
72308
+ name: "deviceId",
72309
+ form: "single",
72310
+ optional: false
72311
+ }],
72312
+ "dishwasher.setOption": [{
72313
+ name: "deviceId",
72314
+ form: "single",
72315
+ optional: false
72316
+ }],
72317
+ "dishwasher.setPower": [{
72318
+ name: "deviceId",
72319
+ form: "single",
72320
+ optional: false
72321
+ }],
72322
+ "dishwasher.setProgram": [{
72323
+ name: "deviceId",
72324
+ form: "single",
72325
+ optional: false
72326
+ }],
72327
+ "dishwasher.setVarioSpeedPlus": [{
72328
+ name: "deviceId",
72329
+ form: "single",
72330
+ optional: false
72331
+ }],
72332
+ "dishwasher.start": [{
72333
+ name: "deviceId",
72334
+ form: "single",
72335
+ optional: false
72336
+ }],
72337
+ "dishwasher.stop": [{
72338
+ name: "deviceId",
72339
+ form: "single",
72340
+ optional: false
72341
+ }],
71872
72342
  "doorbell.getStatus": [{
71873
72343
  name: "deviceId",
71874
72344
  form: "single",
@@ -71938,6 +72408,11 @@ Object.freeze({
71938
72408
  form: "single",
71939
72409
  optional: false
71940
72410
  }],
72411
+ "heatingValve.getStatus": [{
72412
+ name: "deviceId",
72413
+ form: "single",
72414
+ optional: false
72415
+ }],
71941
72416
  "humidifier.getStatus": [{
71942
72417
  name: "deviceId",
71943
72418
  form: "single",
@@ -73895,6 +74370,9 @@ new Map(Object.entries({
73895
74370
  "wrapper-update-available": "system",
73896
74371
  "backup-completed": "system",
73897
74372
  "export-completed": "system",
74373
+ "alert-critical": "system",
74374
+ "alert-error": "system",
74375
+ "alert-critical-resolved": "system",
73898
74376
  "storage-location-low": "system",
73899
74377
  "storage-location-critical": "system",
73900
74378
  "storage-location-ok": "system",
@@ -74019,6 +74497,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
74019
74497
  "storage-location-ok"
74020
74498
  ]
74021
74499
  },
74500
+ {
74501
+ id: "alerts",
74502
+ family: "system",
74503
+ label: "Alerts",
74504
+ kinds: [
74505
+ "alert-critical",
74506
+ "alert-error",
74507
+ "alert-critical-resolved"
74508
+ ]
74509
+ },
74022
74510
  {
74023
74511
  id: "alarm",
74024
74512
  family: "alarm",
@@ -74063,6 +74551,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
74063
74551
  return [[descriptor.kind, field]];
74064
74552
  })));
74065
74553
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
74554
+ object({
74555
+ phase: _enum(["raised", "resolved"]),
74556
+ episodeId: string().min(1),
74557
+ alertId: string().min(1),
74558
+ severity: AlertSeveritySchema,
74559
+ category: string(),
74560
+ title: string(),
74561
+ message: string(),
74562
+ sourceType: string().optional(),
74563
+ sourceId: string().optional(),
74564
+ nodeId: string().optional(),
74565
+ /** The alert's own action link (where the operator acts on it), when it has one. */
74566
+ actionUrl: string().optional(),
74567
+ at: number()
74568
+ });
74066
74569
  var RULE_BODY_ONLY = ["body"];
74067
74570
  var RULE_TEXT = ["title", "body"];
74068
74571
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -74072,6 +74575,11 @@ var TANK = [
74072
74575
  "device-tank-full",
74073
74576
  "device-tank-normal"
74074
74577
  ];
74578
+ var ALERT_EPISODE = [
74579
+ "alert-critical",
74580
+ "alert-error",
74581
+ "alert-critical-resolved"
74582
+ ];
74075
74583
  var UPDATES = [
74076
74584
  "addon-update-available",
74077
74585
  "server-update-available",
@@ -74264,14 +74772,14 @@ var STATE_SUMMARY_VARS = [
74264
74772
  ([...RULE_TEXT], [...CONSUMABLE]),
74265
74773
  ([...RULE_TEXT], [...TANK]),
74266
74774
  [...RULE_TEXT],
74267
- ([...RULE_TEXT], [...UPDATES]),
74268
- ([...RULE_TEXT], [...UPDATES]),
74269
- [...RULE_TEXT],
74775
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
74776
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
74270
74777
  [...RULE_TEXT],
74271
74778
  [...RULE_TEXT],
74272
74779
  [...RULE_TEXT],
74273
74780
  [...RULE_TEXT],
74274
74781
  [...RULE_TEXT],
74782
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74275
74783
  [...RULE_TEXT],
74276
74784
  [...RULE_TEXT],
74277
74785
  [...RULE_TEXT],
@@ -74289,7 +74797,11 @@ var STATE_SUMMARY_VARS = [
74289
74797
  [...RULE_TEXT],
74290
74798
  [...RULE_TEXT],
74291
74799
  [...RULE_TEXT],
74292
- [...RULE_TEXT],
74800
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74801
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74802
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74803
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74804
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
74293
74805
  [...RULE_TEXT],
74294
74806
  [...RULE_TEXT],
74295
74807
  [...RULE_TEXT],