@camstack/addon-provider-onvif 1.2.129 → 1.2.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/addon.js CHANGED
@@ -5408,7 +5408,7 @@ var ZodIssueCode = {
5408
5408
  var ZodFirstPartyTypeKind;
5409
5409
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5410
5410
  //#endregion
5411
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5411
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5412
5412
  /**
5413
5413
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5414
5414
  * window to float samples (D455).
@@ -8356,7 +8356,7 @@ object({
8356
8356
  params: record(string(), union([string(), number()])).optional()
8357
8357
  });
8358
8358
  //#endregion
8359
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8359
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8360
8360
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8361
8361
  DeviceType["Camera"] = "camera";
8362
8362
  DeviceType["Hub"] = "hub";
@@ -8448,6 +8448,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8448
8448
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8449
8449
  * integrations sharing the same food/desiccant/hopper surface. */
8450
8450
  DeviceType["PetFeeder"] = "pet-feeder";
8451
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8452
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8453
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8454
+ DeviceType["Dishwasher"] = "dishwasher";
8451
8455
  return DeviceType;
8452
8456
  }({});
8453
8457
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8705,7 +8709,7 @@ function errMsg(err) {
8705
8709
  return String(err);
8706
8710
  }
8707
8711
  //#endregion
8708
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8712
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8709
8713
  /**
8710
8714
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8711
8715
  *
@@ -13091,8 +13095,13 @@ var AlertSeveritySchema = _enum([
13091
13095
  "info",
13092
13096
  "success",
13093
13097
  "warning",
13094
- "error"
13098
+ "error",
13099
+ "critical"
13095
13100
  ]);
13101
+ var AlertActionSchema = object({
13102
+ label: string(),
13103
+ href: string().optional()
13104
+ });
13096
13105
  var AlertStatusSchema = _enum([
13097
13106
  "active",
13098
13107
  "in-progress",
@@ -13110,6 +13119,7 @@ var AlertSchema = object({
13110
13119
  severity: AlertSeveritySchema,
13111
13120
  title: string(),
13112
13121
  message: string(),
13122
+ action: AlertActionSchema.optional(),
13113
13123
  status: AlertStatusSchema,
13114
13124
  progress: number().optional(),
13115
13125
  read: boolean(),
@@ -17367,7 +17377,11 @@ DeviceType.Hub, DeviceDiscoveryStatusSchema.extend({ lastFetchedAt: number().int
17367
17377
  });
17368
17378
  /**
17369
17379
  * `device-adoption` — generic discovery + adoption surface,
17370
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17380
+ * system-scoped collection (one provider per integration addon), routed
17381
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17382
+ * pin model as `connection-test`. The admin UI keeps using
17383
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17384
+ * successor to `ha-discovery`:
17371
17385
  * keyed by `integrationId` (the addon resolves integrationId → broker
17372
17386
  * internally) rather than a connection-specific `brokerId`, and it
17373
17387
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -53342,7 +53356,7 @@ var BatteryStatusSchema = object({
53342
53356
  */
53343
53357
  binary: boolean().optional()
53344
53358
  });
53345
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, method(object({
53359
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, method(object({
53346
53360
  deviceId: number(),
53347
53361
  /** Bound on the wait. Sensible range 3000–10000ms. */
53348
53362
  timeoutMs: number().int().min(500).max(3e4).default(8e3)
@@ -54218,6 +54232,130 @@ object({
54218
54232
  deviceId: number(),
54219
54233
  status: DeviceStatusSchema
54220
54234
  });
54235
+ /**
54236
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54237
+ * consumable levels (salt, rinse aid) and common program options.
54238
+ *
54239
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54240
+ * by any integration that exposes the same program / option surface.
54241
+ *
54242
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
54243
+ * provider refreshes the slice on an interval and eagerly after commands.
54244
+ */
54245
+ var DishwasherStateSchema = _enum([
54246
+ "idle",
54247
+ "running",
54248
+ "paused",
54249
+ "finished",
54250
+ "error",
54251
+ "unavailable"
54252
+ ]);
54253
+ var DishwasherConsumableLevelSchema = _enum([
54254
+ "ok",
54255
+ "low",
54256
+ "empty"
54257
+ ]);
54258
+ object({
54259
+ state: DishwasherStateSchema,
54260
+ /** Active program id/name, or null when none selected / unknown. */
54261
+ program: string().nullable(),
54262
+ /** Program tokens the hardware accepts — drives the UI selector. */
54263
+ availablePrograms: array(string()),
54264
+ /** Minutes remaining on the active cycle, or null when not running. */
54265
+ remainingMinutes: number().int().nonnegative().nullable(),
54266
+ /** Cycle completion 0..100, or null when not applicable. */
54267
+ progressPercent: number().min(0).max(100).nullable(),
54268
+ /** True when the door is reported open. */
54269
+ doorOpen: boolean(),
54270
+ /** True when remote start is allowed (door closed, power on, etc.). */
54271
+ remoteStartAllowed: boolean(),
54272
+ /** Main power / switched-on state. */
54273
+ powerOn: boolean(),
54274
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
54275
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54276
+ halfLoad: boolean(),
54277
+ hygienePlus: boolean(),
54278
+ /** Extra dry option when the appliance exposes it. */
54279
+ extraDry: boolean(),
54280
+ /** Intensive zone (lower basket) when the appliance exposes it. */
54281
+ intensiveZone: boolean(),
54282
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
54283
+ varioSpeedPlus: boolean(),
54284
+ /** Child lock (controls disabled on the appliance). */
54285
+ childLock: boolean(),
54286
+ errorCode: number().nullable(),
54287
+ errorLabel: string().nullable(),
54288
+ lastFetchedAt: number()
54289
+ });
54290
+ DeviceType.Dishwasher, method(object({ deviceId: number().int().nonnegative() }), _void(), {
54291
+ kind: "mutation",
54292
+ auth: "protected"
54293
+ }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
54294
+ kind: "mutation",
54295
+ auth: "protected"
54296
+ }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
54297
+ kind: "mutation",
54298
+ auth: "protected"
54299
+ }), method(object({
54300
+ deviceId: number().int().nonnegative(),
54301
+ program: string().min(1)
54302
+ }), _void(), {
54303
+ kind: "mutation",
54304
+ auth: "protected"
54305
+ }), method(object({
54306
+ deviceId: number().int().nonnegative(),
54307
+ on: boolean()
54308
+ }), _void(), {
54309
+ kind: "mutation",
54310
+ auth: "protected"
54311
+ }), method(object({
54312
+ deviceId: number().int().nonnegative(),
54313
+ on: boolean()
54314
+ }), _void(), {
54315
+ kind: "mutation",
54316
+ auth: "protected"
54317
+ }), method(object({
54318
+ deviceId: number().int().nonnegative(),
54319
+ on: boolean()
54320
+ }), _void(), {
54321
+ kind: "mutation",
54322
+ auth: "protected"
54323
+ }), method(object({
54324
+ deviceId: number().int().nonnegative(),
54325
+ on: boolean()
54326
+ }), _void(), {
54327
+ kind: "mutation",
54328
+ auth: "protected"
54329
+ }), method(object({
54330
+ deviceId: number().int().nonnegative(),
54331
+ on: boolean()
54332
+ }), _void(), {
54333
+ kind: "mutation",
54334
+ auth: "protected"
54335
+ }), method(object({
54336
+ deviceId: number().int().nonnegative(),
54337
+ on: boolean()
54338
+ }), _void(), {
54339
+ kind: "mutation",
54340
+ auth: "protected"
54341
+ }), method(object({
54342
+ deviceId: number().int().nonnegative(),
54343
+ on: boolean()
54344
+ }), _void(), {
54345
+ kind: "mutation",
54346
+ auth: "protected"
54347
+ }), method(object({
54348
+ deviceId: number().int().nonnegative(),
54349
+ key: string().min(1),
54350
+ value: union([
54351
+ boolean(),
54352
+ string(),
54353
+ number()
54354
+ ])
54355
+ }), _void(), {
54356
+ kind: "mutation",
54357
+ auth: "protected"
54358
+ });
54221
54359
  object({
54222
54360
  /** Ms epoch of the last press. null = never observed since this provider started. */
54223
54361
  lastPressedAt: number().nullable(),
@@ -54783,6 +54921,13 @@ object({
54783
54921
  lastChangedAt: number()
54784
54922
  });
54785
54923
  DeviceType.Sensor;
54924
+ object({
54925
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
54926
+ position: number().min(0).max(100).nullable(),
54927
+ /** Ms epoch when the slice was last updated (push or poll). */
54928
+ lastFetchedAt: number()
54929
+ });
54930
+ DeviceType.Thermostat;
54786
54931
  object({
54787
54932
  /** Whether the humidifier is currently on. */
54788
54933
  on: boolean(),
@@ -62234,6 +62379,12 @@ var BaseDeviceProvider = class extends BaseAddon {
62234
62379
  provider: this
62235
62380
  }];
62236
62381
  }
62382
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
62383
+ providerRegistrationsFromSuper(result) {
62384
+ if (Array.isArray(result)) return result;
62385
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
62386
+ return [];
62387
+ }
62237
62388
  async onShutdown() {
62238
62389
  this._restoreShuttingDown = true;
62239
62390
  this.cancelRestoreRetries();
@@ -62760,7 +62911,7 @@ var BaseDeviceProvider = class extends BaseAddon {
62760
62911
  return toDeviceSummary(device, this.addonId);
62761
62912
  }
62762
62913
  };
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;
62914
+ 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
62915
  new Set(Object.values(DeviceType));
62765
62916
  Object.freeze({
62766
62917
  "accessories.getStatus": {
@@ -65181,6 +65332,84 @@ Object.freeze({
65181
65332
  addonId: null,
65182
65333
  access: "view"
65183
65334
  },
65335
+ "dishwasher.getStatus": {
65336
+ capName: "dishwasher",
65337
+ capScope: "device",
65338
+ addonId: null,
65339
+ access: "view"
65340
+ },
65341
+ "dishwasher.pause": {
65342
+ capName: "dishwasher",
65343
+ capScope: "device",
65344
+ addonId: null,
65345
+ access: "create"
65346
+ },
65347
+ "dishwasher.setChildLock": {
65348
+ capName: "dishwasher",
65349
+ capScope: "device",
65350
+ addonId: null,
65351
+ access: "create"
65352
+ },
65353
+ "dishwasher.setExtraDry": {
65354
+ capName: "dishwasher",
65355
+ capScope: "device",
65356
+ addonId: null,
65357
+ access: "create"
65358
+ },
65359
+ "dishwasher.setHalfLoad": {
65360
+ capName: "dishwasher",
65361
+ capScope: "device",
65362
+ addonId: null,
65363
+ access: "create"
65364
+ },
65365
+ "dishwasher.setHygienePlus": {
65366
+ capName: "dishwasher",
65367
+ capScope: "device",
65368
+ addonId: null,
65369
+ access: "create"
65370
+ },
65371
+ "dishwasher.setIntensiveZone": {
65372
+ capName: "dishwasher",
65373
+ capScope: "device",
65374
+ addonId: null,
65375
+ access: "create"
65376
+ },
65377
+ "dishwasher.setOption": {
65378
+ capName: "dishwasher",
65379
+ capScope: "device",
65380
+ addonId: null,
65381
+ access: "create"
65382
+ },
65383
+ "dishwasher.setPower": {
65384
+ capName: "dishwasher",
65385
+ capScope: "device",
65386
+ addonId: null,
65387
+ access: "create"
65388
+ },
65389
+ "dishwasher.setProgram": {
65390
+ capName: "dishwasher",
65391
+ capScope: "device",
65392
+ addonId: null,
65393
+ access: "create"
65394
+ },
65395
+ "dishwasher.setVarioSpeedPlus": {
65396
+ capName: "dishwasher",
65397
+ capScope: "device",
65398
+ addonId: null,
65399
+ access: "create"
65400
+ },
65401
+ "dishwasher.start": {
65402
+ capName: "dishwasher",
65403
+ capScope: "device",
65404
+ addonId: null,
65405
+ access: "create"
65406
+ },
65407
+ "dishwasher.stop": {
65408
+ capName: "dishwasher",
65409
+ capScope: "device",
65410
+ addonId: null,
65411
+ access: "create"
65412
+ },
65184
65413
  "doorbell.getStatus": {
65185
65414
  capName: "doorbell",
65186
65415
  capScope: "device",
@@ -65391,6 +65620,12 @@ Object.freeze({
65391
65620
  addonId: null,
65392
65621
  access: "view"
65393
65622
  },
65623
+ "heatingValve.getStatus": {
65624
+ capName: "heating-valve",
65625
+ capScope: "device",
65626
+ addonId: null,
65627
+ access: "view"
65628
+ },
65394
65629
  "humidifier.getStatus": {
65395
65630
  capName: "humidifier",
65396
65631
  capScope: "device",
@@ -70978,7 +71213,7 @@ Object.freeze({
70978
71213
  access: "create"
70979
71214
  }
70980
71215
  });
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;
71216
+ 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
71217
  DeviceFeature.BatteryOperated;
70983
71218
  /** Reject after `ms`; always clears its own timer. */
70984
71219
  async function withTimeout$1(promise, ms, label) {
@@ -71868,6 +72103,71 @@ Object.freeze({
71868
72103
  form: "single",
71869
72104
  optional: false
71870
72105
  }],
72106
+ "dishwasher.getStatus": [{
72107
+ name: "deviceId",
72108
+ form: "single",
72109
+ optional: false
72110
+ }],
72111
+ "dishwasher.pause": [{
72112
+ name: "deviceId",
72113
+ form: "single",
72114
+ optional: false
72115
+ }],
72116
+ "dishwasher.setChildLock": [{
72117
+ name: "deviceId",
72118
+ form: "single",
72119
+ optional: false
72120
+ }],
72121
+ "dishwasher.setExtraDry": [{
72122
+ name: "deviceId",
72123
+ form: "single",
72124
+ optional: false
72125
+ }],
72126
+ "dishwasher.setHalfLoad": [{
72127
+ name: "deviceId",
72128
+ form: "single",
72129
+ optional: false
72130
+ }],
72131
+ "dishwasher.setHygienePlus": [{
72132
+ name: "deviceId",
72133
+ form: "single",
72134
+ optional: false
72135
+ }],
72136
+ "dishwasher.setIntensiveZone": [{
72137
+ name: "deviceId",
72138
+ form: "single",
72139
+ optional: false
72140
+ }],
72141
+ "dishwasher.setOption": [{
72142
+ name: "deviceId",
72143
+ form: "single",
72144
+ optional: false
72145
+ }],
72146
+ "dishwasher.setPower": [{
72147
+ name: "deviceId",
72148
+ form: "single",
72149
+ optional: false
72150
+ }],
72151
+ "dishwasher.setProgram": [{
72152
+ name: "deviceId",
72153
+ form: "single",
72154
+ optional: false
72155
+ }],
72156
+ "dishwasher.setVarioSpeedPlus": [{
72157
+ name: "deviceId",
72158
+ form: "single",
72159
+ optional: false
72160
+ }],
72161
+ "dishwasher.start": [{
72162
+ name: "deviceId",
72163
+ form: "single",
72164
+ optional: false
72165
+ }],
72166
+ "dishwasher.stop": [{
72167
+ name: "deviceId",
72168
+ form: "single",
72169
+ optional: false
72170
+ }],
71871
72171
  "doorbell.getStatus": [{
71872
72172
  name: "deviceId",
71873
72173
  form: "single",
@@ -71937,6 +72237,11 @@ Object.freeze({
71937
72237
  form: "single",
71938
72238
  optional: false
71939
72239
  }],
72240
+ "heatingValve.getStatus": [{
72241
+ name: "deviceId",
72242
+ form: "single",
72243
+ optional: false
72244
+ }],
71940
72245
  "humidifier.getStatus": [{
71941
72246
  name: "deviceId",
71942
72247
  form: "single",
package/dist/addon.mjs CHANGED
@@ -5409,7 +5409,7 @@ var ZodIssueCode = {
5409
5409
  var ZodFirstPartyTypeKind;
5410
5410
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5411
5411
  //#endregion
5412
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5412
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5413
5413
  /**
5414
5414
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5415
5415
  * window to float samples (D455).
@@ -8357,7 +8357,7 @@ object({
8357
8357
  params: record(string(), union([string(), number()])).optional()
8358
8358
  });
8359
8359
  //#endregion
8360
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8360
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8361
8361
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8362
8362
  DeviceType["Camera"] = "camera";
8363
8363
  DeviceType["Hub"] = "hub";
@@ -8449,6 +8449,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8449
8449
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8450
8450
  * integrations sharing the same food/desiccant/hopper surface. */
8451
8451
  DeviceType["PetFeeder"] = "pet-feeder";
8452
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8453
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8454
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8455
+ DeviceType["Dishwasher"] = "dishwasher";
8452
8456
  return DeviceType;
8453
8457
  }({});
8454
8458
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8706,7 +8710,7 @@ function errMsg(err) {
8706
8710
  return String(err);
8707
8711
  }
8708
8712
  //#endregion
8709
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8713
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8710
8714
  /**
8711
8715
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8712
8716
  *
@@ -13092,8 +13096,13 @@ var AlertSeveritySchema = _enum([
13092
13096
  "info",
13093
13097
  "success",
13094
13098
  "warning",
13095
- "error"
13099
+ "error",
13100
+ "critical"
13096
13101
  ]);
13102
+ var AlertActionSchema = object({
13103
+ label: string(),
13104
+ href: string().optional()
13105
+ });
13097
13106
  var AlertStatusSchema = _enum([
13098
13107
  "active",
13099
13108
  "in-progress",
@@ -13111,6 +13120,7 @@ var AlertSchema = object({
13111
13120
  severity: AlertSeveritySchema,
13112
13121
  title: string(),
13113
13122
  message: string(),
13123
+ action: AlertActionSchema.optional(),
13114
13124
  status: AlertStatusSchema,
13115
13125
  progress: number().optional(),
13116
13126
  read: boolean(),
@@ -17368,7 +17378,11 @@ DeviceType.Hub, DeviceDiscoveryStatusSchema.extend({ lastFetchedAt: number().int
17368
17378
  });
17369
17379
  /**
17370
17380
  * `device-adoption` — generic discovery + adoption surface,
17371
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17381
+ * system-scoped collection (one provider per integration addon), routed
17382
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17383
+ * pin model as `connection-test`. The admin UI keeps using
17384
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17385
+ * successor to `ha-discovery`:
17372
17386
  * keyed by `integrationId` (the addon resolves integrationId → broker
17373
17387
  * internally) rather than a connection-specific `brokerId`, and it
17374
17388
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -53343,7 +53357,7 @@ var BatteryStatusSchema = object({
53343
53357
  */
53344
53358
  binary: boolean().optional()
53345
53359
  });
53346
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, method(object({
53360
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, method(object({
53347
53361
  deviceId: number(),
53348
53362
  /** Bound on the wait. Sensible range 3000–10000ms. */
53349
53363
  timeoutMs: number().int().min(500).max(3e4).default(8e3)
@@ -54219,6 +54233,130 @@ object({
54219
54233
  deviceId: number(),
54220
54234
  status: DeviceStatusSchema
54221
54235
  });
54236
+ /**
54237
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54238
+ * consumable levels (salt, rinse aid) and common program options.
54239
+ *
54240
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54241
+ * by any integration that exposes the same program / option surface.
54242
+ *
54243
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
54244
+ * provider refreshes the slice on an interval and eagerly after commands.
54245
+ */
54246
+ var DishwasherStateSchema = _enum([
54247
+ "idle",
54248
+ "running",
54249
+ "paused",
54250
+ "finished",
54251
+ "error",
54252
+ "unavailable"
54253
+ ]);
54254
+ var DishwasherConsumableLevelSchema = _enum([
54255
+ "ok",
54256
+ "low",
54257
+ "empty"
54258
+ ]);
54259
+ object({
54260
+ state: DishwasherStateSchema,
54261
+ /** Active program id/name, or null when none selected / unknown. */
54262
+ program: string().nullable(),
54263
+ /** Program tokens the hardware accepts — drives the UI selector. */
54264
+ availablePrograms: array(string()),
54265
+ /** Minutes remaining on the active cycle, or null when not running. */
54266
+ remainingMinutes: number().int().nonnegative().nullable(),
54267
+ /** Cycle completion 0..100, or null when not applicable. */
54268
+ progressPercent: number().min(0).max(100).nullable(),
54269
+ /** True when the door is reported open. */
54270
+ doorOpen: boolean(),
54271
+ /** True when remote start is allowed (door closed, power on, etc.). */
54272
+ remoteStartAllowed: boolean(),
54273
+ /** Main power / switched-on state. */
54274
+ powerOn: boolean(),
54275
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
54276
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54277
+ halfLoad: boolean(),
54278
+ hygienePlus: boolean(),
54279
+ /** Extra dry option when the appliance exposes it. */
54280
+ extraDry: boolean(),
54281
+ /** Intensive zone (lower basket) when the appliance exposes it. */
54282
+ intensiveZone: boolean(),
54283
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
54284
+ varioSpeedPlus: boolean(),
54285
+ /** Child lock (controls disabled on the appliance). */
54286
+ childLock: boolean(),
54287
+ errorCode: number().nullable(),
54288
+ errorLabel: string().nullable(),
54289
+ lastFetchedAt: number()
54290
+ });
54291
+ DeviceType.Dishwasher, method(object({ deviceId: number().int().nonnegative() }), _void(), {
54292
+ kind: "mutation",
54293
+ auth: "protected"
54294
+ }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
54295
+ kind: "mutation",
54296
+ auth: "protected"
54297
+ }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
54298
+ kind: "mutation",
54299
+ auth: "protected"
54300
+ }), method(object({
54301
+ deviceId: number().int().nonnegative(),
54302
+ program: string().min(1)
54303
+ }), _void(), {
54304
+ kind: "mutation",
54305
+ auth: "protected"
54306
+ }), method(object({
54307
+ deviceId: number().int().nonnegative(),
54308
+ on: boolean()
54309
+ }), _void(), {
54310
+ kind: "mutation",
54311
+ auth: "protected"
54312
+ }), method(object({
54313
+ deviceId: number().int().nonnegative(),
54314
+ on: boolean()
54315
+ }), _void(), {
54316
+ kind: "mutation",
54317
+ auth: "protected"
54318
+ }), method(object({
54319
+ deviceId: number().int().nonnegative(),
54320
+ on: boolean()
54321
+ }), _void(), {
54322
+ kind: "mutation",
54323
+ auth: "protected"
54324
+ }), method(object({
54325
+ deviceId: number().int().nonnegative(),
54326
+ on: boolean()
54327
+ }), _void(), {
54328
+ kind: "mutation",
54329
+ auth: "protected"
54330
+ }), method(object({
54331
+ deviceId: number().int().nonnegative(),
54332
+ on: boolean()
54333
+ }), _void(), {
54334
+ kind: "mutation",
54335
+ auth: "protected"
54336
+ }), method(object({
54337
+ deviceId: number().int().nonnegative(),
54338
+ on: boolean()
54339
+ }), _void(), {
54340
+ kind: "mutation",
54341
+ auth: "protected"
54342
+ }), method(object({
54343
+ deviceId: number().int().nonnegative(),
54344
+ on: boolean()
54345
+ }), _void(), {
54346
+ kind: "mutation",
54347
+ auth: "protected"
54348
+ }), method(object({
54349
+ deviceId: number().int().nonnegative(),
54350
+ key: string().min(1),
54351
+ value: union([
54352
+ boolean(),
54353
+ string(),
54354
+ number()
54355
+ ])
54356
+ }), _void(), {
54357
+ kind: "mutation",
54358
+ auth: "protected"
54359
+ });
54222
54360
  object({
54223
54361
  /** Ms epoch of the last press. null = never observed since this provider started. */
54224
54362
  lastPressedAt: number().nullable(),
@@ -54784,6 +54922,13 @@ object({
54784
54922
  lastChangedAt: number()
54785
54923
  });
54786
54924
  DeviceType.Sensor;
54925
+ object({
54926
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
54927
+ position: number().min(0).max(100).nullable(),
54928
+ /** Ms epoch when the slice was last updated (push or poll). */
54929
+ lastFetchedAt: number()
54930
+ });
54931
+ DeviceType.Thermostat;
54787
54932
  object({
54788
54933
  /** Whether the humidifier is currently on. */
54789
54934
  on: boolean(),
@@ -62235,6 +62380,12 @@ var BaseDeviceProvider = class extends BaseAddon {
62235
62380
  provider: this
62236
62381
  }];
62237
62382
  }
62383
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
62384
+ providerRegistrationsFromSuper(result) {
62385
+ if (Array.isArray(result)) return result;
62386
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
62387
+ return [];
62388
+ }
62238
62389
  async onShutdown() {
62239
62390
  this._restoreShuttingDown = true;
62240
62391
  this.cancelRestoreRetries();
@@ -62761,7 +62912,7 @@ var BaseDeviceProvider = class extends BaseAddon {
62761
62912
  return toDeviceSummary(device, this.addonId);
62762
62913
  }
62763
62914
  };
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;
62915
+ 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
62916
  new Set(Object.values(DeviceType));
62766
62917
  Object.freeze({
62767
62918
  "accessories.getStatus": {
@@ -65182,6 +65333,84 @@ Object.freeze({
65182
65333
  addonId: null,
65183
65334
  access: "view"
65184
65335
  },
65336
+ "dishwasher.getStatus": {
65337
+ capName: "dishwasher",
65338
+ capScope: "device",
65339
+ addonId: null,
65340
+ access: "view"
65341
+ },
65342
+ "dishwasher.pause": {
65343
+ capName: "dishwasher",
65344
+ capScope: "device",
65345
+ addonId: null,
65346
+ access: "create"
65347
+ },
65348
+ "dishwasher.setChildLock": {
65349
+ capName: "dishwasher",
65350
+ capScope: "device",
65351
+ addonId: null,
65352
+ access: "create"
65353
+ },
65354
+ "dishwasher.setExtraDry": {
65355
+ capName: "dishwasher",
65356
+ capScope: "device",
65357
+ addonId: null,
65358
+ access: "create"
65359
+ },
65360
+ "dishwasher.setHalfLoad": {
65361
+ capName: "dishwasher",
65362
+ capScope: "device",
65363
+ addonId: null,
65364
+ access: "create"
65365
+ },
65366
+ "dishwasher.setHygienePlus": {
65367
+ capName: "dishwasher",
65368
+ capScope: "device",
65369
+ addonId: null,
65370
+ access: "create"
65371
+ },
65372
+ "dishwasher.setIntensiveZone": {
65373
+ capName: "dishwasher",
65374
+ capScope: "device",
65375
+ addonId: null,
65376
+ access: "create"
65377
+ },
65378
+ "dishwasher.setOption": {
65379
+ capName: "dishwasher",
65380
+ capScope: "device",
65381
+ addonId: null,
65382
+ access: "create"
65383
+ },
65384
+ "dishwasher.setPower": {
65385
+ capName: "dishwasher",
65386
+ capScope: "device",
65387
+ addonId: null,
65388
+ access: "create"
65389
+ },
65390
+ "dishwasher.setProgram": {
65391
+ capName: "dishwasher",
65392
+ capScope: "device",
65393
+ addonId: null,
65394
+ access: "create"
65395
+ },
65396
+ "dishwasher.setVarioSpeedPlus": {
65397
+ capName: "dishwasher",
65398
+ capScope: "device",
65399
+ addonId: null,
65400
+ access: "create"
65401
+ },
65402
+ "dishwasher.start": {
65403
+ capName: "dishwasher",
65404
+ capScope: "device",
65405
+ addonId: null,
65406
+ access: "create"
65407
+ },
65408
+ "dishwasher.stop": {
65409
+ capName: "dishwasher",
65410
+ capScope: "device",
65411
+ addonId: null,
65412
+ access: "create"
65413
+ },
65185
65414
  "doorbell.getStatus": {
65186
65415
  capName: "doorbell",
65187
65416
  capScope: "device",
@@ -65392,6 +65621,12 @@ Object.freeze({
65392
65621
  addonId: null,
65393
65622
  access: "view"
65394
65623
  },
65624
+ "heatingValve.getStatus": {
65625
+ capName: "heating-valve",
65626
+ capScope: "device",
65627
+ addonId: null,
65628
+ access: "view"
65629
+ },
65395
65630
  "humidifier.getStatus": {
65396
65631
  capName: "humidifier",
65397
65632
  capScope: "device",
@@ -70979,7 +71214,7 @@ Object.freeze({
70979
71214
  access: "create"
70980
71215
  }
70981
71216
  });
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;
71217
+ 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
71218
  DeviceFeature.BatteryOperated;
70984
71219
  /** Reject after `ms`; always clears its own timer. */
70985
71220
  async function withTimeout$1(promise, ms, label) {
@@ -71869,6 +72104,71 @@ Object.freeze({
71869
72104
  form: "single",
71870
72105
  optional: false
71871
72106
  }],
72107
+ "dishwasher.getStatus": [{
72108
+ name: "deviceId",
72109
+ form: "single",
72110
+ optional: false
72111
+ }],
72112
+ "dishwasher.pause": [{
72113
+ name: "deviceId",
72114
+ form: "single",
72115
+ optional: false
72116
+ }],
72117
+ "dishwasher.setChildLock": [{
72118
+ name: "deviceId",
72119
+ form: "single",
72120
+ optional: false
72121
+ }],
72122
+ "dishwasher.setExtraDry": [{
72123
+ name: "deviceId",
72124
+ form: "single",
72125
+ optional: false
72126
+ }],
72127
+ "dishwasher.setHalfLoad": [{
72128
+ name: "deviceId",
72129
+ form: "single",
72130
+ optional: false
72131
+ }],
72132
+ "dishwasher.setHygienePlus": [{
72133
+ name: "deviceId",
72134
+ form: "single",
72135
+ optional: false
72136
+ }],
72137
+ "dishwasher.setIntensiveZone": [{
72138
+ name: "deviceId",
72139
+ form: "single",
72140
+ optional: false
72141
+ }],
72142
+ "dishwasher.setOption": [{
72143
+ name: "deviceId",
72144
+ form: "single",
72145
+ optional: false
72146
+ }],
72147
+ "dishwasher.setPower": [{
72148
+ name: "deviceId",
72149
+ form: "single",
72150
+ optional: false
72151
+ }],
72152
+ "dishwasher.setProgram": [{
72153
+ name: "deviceId",
72154
+ form: "single",
72155
+ optional: false
72156
+ }],
72157
+ "dishwasher.setVarioSpeedPlus": [{
72158
+ name: "deviceId",
72159
+ form: "single",
72160
+ optional: false
72161
+ }],
72162
+ "dishwasher.start": [{
72163
+ name: "deviceId",
72164
+ form: "single",
72165
+ optional: false
72166
+ }],
72167
+ "dishwasher.stop": [{
72168
+ name: "deviceId",
72169
+ form: "single",
72170
+ optional: false
72171
+ }],
71872
72172
  "doorbell.getStatus": [{
71873
72173
  name: "deviceId",
71874
72174
  form: "single",
@@ -71938,6 +72238,11 @@ Object.freeze({
71938
72238
  form: "single",
71939
72239
  optional: false
71940
72240
  }],
72241
+ "heatingValve.getStatus": [{
72242
+ name: "deviceId",
72243
+ form: "single",
72244
+ optional: false
72245
+ }],
71941
72246
  "humidifier.getStatus": [{
71942
72247
  name: "deviceId",
71943
72248
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.2.129",
3
+ "version": "1.2.130",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",