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