@camstack/addon-provider-reolink 1.2.187 → 1.2.189

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
@@ -5442,7 +5442,7 @@ var ZodIssueCode = {
5442
5442
  var ZodFirstPartyTypeKind;
5443
5443
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5444
5444
  //#endregion
5445
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5445
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5446
5446
  /**
5447
5447
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5448
5448
  * window to float samples (D455).
@@ -8537,7 +8537,7 @@ function sleep$2(ms) {
8537
8537
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
8538
8538
  }
8539
8539
  //#endregion
8540
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8540
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8541
8541
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8542
8542
  DeviceType["Camera"] = "camera";
8543
8543
  DeviceType["Hub"] = "hub";
@@ -8629,6 +8629,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8629
8629
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8630
8630
  * integrations sharing the same food/desiccant/hopper surface. */
8631
8631
  DeviceType["PetFeeder"] = "pet-feeder";
8632
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8633
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8634
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8635
+ DeviceType["Dishwasher"] = "dishwasher";
8632
8636
  return DeviceType;
8633
8637
  }({});
8634
8638
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8876,7 +8880,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8876
8880
  return DeviceRole;
8877
8881
  }({});
8878
8882
  //#endregion
8879
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8883
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8880
8884
  /**
8881
8885
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8882
8886
  *
@@ -13814,8 +13818,13 @@ var AlertSeveritySchema = _enum([
13814
13818
  "info",
13815
13819
  "success",
13816
13820
  "warning",
13817
- "error"
13821
+ "error",
13822
+ "critical"
13818
13823
  ]);
13824
+ var AlertActionSchema = object({
13825
+ label: string(),
13826
+ href: string().optional()
13827
+ });
13819
13828
  var AlertStatusSchema = _enum([
13820
13829
  "active",
13821
13830
  "in-progress",
@@ -13833,6 +13842,7 @@ var AlertSchema = object({
13833
13842
  severity: AlertSeveritySchema,
13834
13843
  title: string(),
13835
13844
  message: string(),
13845
+ action: AlertActionSchema.optional(),
13836
13846
  status: AlertStatusSchema,
13837
13847
  progress: number().optional(),
13838
13848
  read: boolean(),
@@ -18307,7 +18317,11 @@ var deviceDiscoveryCapability = {
18307
18317
  };
18308
18318
  /**
18309
18319
  * `device-adoption` — generic discovery + adoption surface,
18310
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
18320
+ * system-scoped collection (one provider per integration addon), routed
18321
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
18322
+ * pin model as `connection-test`. The admin UI keeps using
18323
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
18324
+ * successor to `ha-discovery`:
18311
18325
  * keyed by `integrationId` (the addon resolves integrationId → broker
18312
18326
  * internally) rather than a connection-specific `brokerId`, and it
18313
18327
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -55049,7 +55063,8 @@ var batteryCapability = {
55049
55063
  DeviceType.Button,
55050
55064
  DeviceType.Switch,
55051
55065
  DeviceType.PetFeeder,
55052
- DeviceType.Container
55066
+ DeviceType.Container,
55067
+ DeviceType.Thermostat
55053
55068
  ],
55054
55069
  methods: {
55055
55070
  /**
@@ -56522,6 +56537,161 @@ onStatusChanged: { data: object({
56522
56537
  * whether persisting is worth a SQLite commit. */
56523
56538
  volatileStateFields: ["lastChangedAt"]
56524
56539
  };
56540
+ /**
56541
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
56542
+ * consumable levels (salt, rinse aid) and common program options.
56543
+ *
56544
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
56545
+ * by any integration that exposes the same program / option surface.
56546
+ *
56547
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
56548
+ * provider refreshes the slice on an interval and eagerly after commands.
56549
+ */
56550
+ var DishwasherStateSchema = _enum([
56551
+ "idle",
56552
+ "running",
56553
+ "paused",
56554
+ "finished",
56555
+ "error",
56556
+ "unavailable"
56557
+ ]);
56558
+ var DishwasherConsumableLevelSchema = _enum([
56559
+ "ok",
56560
+ "low",
56561
+ "empty"
56562
+ ]);
56563
+ var DishwasherStatusSchema = object({
56564
+ state: DishwasherStateSchema,
56565
+ /** Active program id/name, or null when none selected / unknown. */
56566
+ program: string().nullable(),
56567
+ /** Program tokens the hardware accepts — drives the UI selector. */
56568
+ availablePrograms: array(string()),
56569
+ /** Minutes remaining on the active cycle, or null when not running. */
56570
+ remainingMinutes: number().int().nonnegative().nullable(),
56571
+ /** Cycle completion 0..100, or null when not applicable. */
56572
+ progressPercent: number().min(0).max(100).nullable(),
56573
+ /** True when the door is reported open. */
56574
+ doorOpen: boolean(),
56575
+ /** True when remote start is allowed (door closed, power on, etc.). */
56576
+ remoteStartAllowed: boolean(),
56577
+ /** Main power / switched-on state. */
56578
+ powerOn: boolean(),
56579
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
56580
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
56581
+ halfLoad: boolean(),
56582
+ hygienePlus: boolean(),
56583
+ /** Extra dry option when the appliance exposes it. */
56584
+ extraDry: boolean(),
56585
+ /** Intensive zone (lower basket) when the appliance exposes it. */
56586
+ intensiveZone: boolean(),
56587
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
56588
+ varioSpeedPlus: boolean(),
56589
+ /** Child lock (controls disabled on the appliance). */
56590
+ childLock: boolean(),
56591
+ errorCode: number().nullable(),
56592
+ errorLabel: string().nullable(),
56593
+ lastFetchedAt: number()
56594
+ });
56595
+ var dishwasherCapability = {
56596
+ name: "dishwasher",
56597
+ scope: "device",
56598
+ deviceNative: true,
56599
+ mode: "singleton",
56600
+ deviceTypes: [DeviceType.Dishwasher],
56601
+ methods: {
56602
+ start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56603
+ kind: "mutation",
56604
+ auth: "protected"
56605
+ }),
56606
+ pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56607
+ kind: "mutation",
56608
+ auth: "protected"
56609
+ }),
56610
+ stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56611
+ kind: "mutation",
56612
+ auth: "protected"
56613
+ }),
56614
+ setProgram: method(object({
56615
+ deviceId: number().int().nonnegative(),
56616
+ program: string().min(1)
56617
+ }), _void(), {
56618
+ kind: "mutation",
56619
+ auth: "protected"
56620
+ }),
56621
+ setPower: method(object({
56622
+ deviceId: number().int().nonnegative(),
56623
+ on: boolean()
56624
+ }), _void(), {
56625
+ kind: "mutation",
56626
+ auth: "protected"
56627
+ }),
56628
+ setHalfLoad: method(object({
56629
+ deviceId: number().int().nonnegative(),
56630
+ on: boolean()
56631
+ }), _void(), {
56632
+ kind: "mutation",
56633
+ auth: "protected"
56634
+ }),
56635
+ setHygienePlus: method(object({
56636
+ deviceId: number().int().nonnegative(),
56637
+ on: boolean()
56638
+ }), _void(), {
56639
+ kind: "mutation",
56640
+ auth: "protected"
56641
+ }),
56642
+ setExtraDry: method(object({
56643
+ deviceId: number().int().nonnegative(),
56644
+ on: boolean()
56645
+ }), _void(), {
56646
+ kind: "mutation",
56647
+ auth: "protected"
56648
+ }),
56649
+ setIntensiveZone: method(object({
56650
+ deviceId: number().int().nonnegative(),
56651
+ on: boolean()
56652
+ }), _void(), {
56653
+ kind: "mutation",
56654
+ auth: "protected"
56655
+ }),
56656
+ setVarioSpeedPlus: method(object({
56657
+ deviceId: number().int().nonnegative(),
56658
+ on: boolean()
56659
+ }), _void(), {
56660
+ kind: "mutation",
56661
+ auth: "protected"
56662
+ }),
56663
+ setChildLock: method(object({
56664
+ deviceId: number().int().nonnegative(),
56665
+ on: boolean()
56666
+ }), _void(), {
56667
+ kind: "mutation",
56668
+ auth: "protected"
56669
+ }),
56670
+ setOption: method(object({
56671
+ deviceId: number().int().nonnegative(),
56672
+ key: string().min(1),
56673
+ value: union([
56674
+ boolean(),
56675
+ string(),
56676
+ number()
56677
+ ])
56678
+ }), _void(), {
56679
+ kind: "mutation",
56680
+ auth: "protected"
56681
+ })
56682
+ },
56683
+ status: {
56684
+ schema: DishwasherStatusSchema,
56685
+ kind: "poll"
56686
+ },
56687
+ runtimeState: DishwasherStatusSchema,
56688
+ durability: "session",
56689
+ history: { fields: { progressPercent: {
56690
+ kind: "gauge",
56691
+ unit: "%",
56692
+ deadband: 2
56693
+ } } }
56694
+ };
56525
56695
  var DoorbellStatusSchema = object({
56526
56696
  /** Ms epoch of the last press. null = never observed since this provider started. */
56527
56697
  lastPressedAt: number().nullable(),
@@ -57324,6 +57494,32 @@ var gasCapability = {
57324
57494
  * whether persisting is worth a SQLite commit. */
57325
57495
  volatileStateFields: ["lastChangedAt"]
57326
57496
  };
57497
+ var HeatingValveStatusSchema = object({
57498
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
57499
+ position: number().min(0).max(100).nullable(),
57500
+ /** Ms epoch when the slice was last updated (push or poll). */
57501
+ lastFetchedAt: number()
57502
+ });
57503
+ var heatingValveCapability = {
57504
+ name: "heating-valve",
57505
+ scope: "device",
57506
+ deviceNative: true,
57507
+ mode: "singleton",
57508
+ deviceTypes: [DeviceType.Thermostat],
57509
+ methods: {},
57510
+ status: {
57511
+ schema: HeatingValveStatusSchema,
57512
+ kind: "push"
57513
+ },
57514
+ runtimeState: HeatingValveStatusSchema,
57515
+ durability: "session",
57516
+ history: { fields: { position: {
57517
+ kind: "gauge",
57518
+ unit: "%",
57519
+ deadband: 1
57520
+ } } },
57521
+ volatileStateFields: ["lastFetchedAt"]
57522
+ };
57327
57523
  /**
57328
57524
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
57329
57525
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -67329,6 +67525,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
67329
67525
  dayNight: dayNightCapability,
67330
67526
  deviceDiscovery: deviceDiscoveryCapability,
67331
67527
  deviceStatus: deviceStatusCapability,
67528
+ dishwasher: dishwasherCapability,
67332
67529
  doorbell: doorbellCapability,
67333
67530
  enumSensor: enumSensorCapability,
67334
67531
  eventEmitter: eventEmitterCapability,
@@ -67336,6 +67533,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
67336
67533
  featureProbe: featureProbeCapability,
67337
67534
  flood: floodCapability,
67338
67535
  gas: gasCapability,
67536
+ heatingValve: heatingValveCapability,
67339
67537
  humidifier: humidifierCapability,
67340
67538
  humiditySensor: humiditySensorCapability,
67341
67539
  image: imageCapability,
@@ -68061,6 +68259,12 @@ var BaseDeviceProvider = class extends BaseAddon {
68061
68259
  provider: this
68062
68260
  }];
68063
68261
  }
68262
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
68263
+ providerRegistrationsFromSuper(result) {
68264
+ if (Array.isArray(result)) return result;
68265
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
68266
+ return [];
68267
+ }
68064
68268
  async onShutdown() {
68065
68269
  this._restoreShuttingDown = true;
68066
68270
  this.cancelRestoreRetries();
@@ -68587,7 +68791,7 @@ var BaseDeviceProvider = class extends BaseAddon {
68587
68791
  return toDeviceSummary(device, this.addonId);
68588
68792
  }
68589
68793
  };
68590
- 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;
68794
+ 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;
68591
68795
  new Set(Object.values(DeviceType));
68592
68796
  Object.freeze({
68593
68797
  "accessories.getStatus": {
@@ -71008,6 +71212,84 @@ Object.freeze({
71008
71212
  addonId: null,
71009
71213
  access: "view"
71010
71214
  },
71215
+ "dishwasher.getStatus": {
71216
+ capName: "dishwasher",
71217
+ capScope: "device",
71218
+ addonId: null,
71219
+ access: "view"
71220
+ },
71221
+ "dishwasher.pause": {
71222
+ capName: "dishwasher",
71223
+ capScope: "device",
71224
+ addonId: null,
71225
+ access: "create"
71226
+ },
71227
+ "dishwasher.setChildLock": {
71228
+ capName: "dishwasher",
71229
+ capScope: "device",
71230
+ addonId: null,
71231
+ access: "create"
71232
+ },
71233
+ "dishwasher.setExtraDry": {
71234
+ capName: "dishwasher",
71235
+ capScope: "device",
71236
+ addonId: null,
71237
+ access: "create"
71238
+ },
71239
+ "dishwasher.setHalfLoad": {
71240
+ capName: "dishwasher",
71241
+ capScope: "device",
71242
+ addonId: null,
71243
+ access: "create"
71244
+ },
71245
+ "dishwasher.setHygienePlus": {
71246
+ capName: "dishwasher",
71247
+ capScope: "device",
71248
+ addonId: null,
71249
+ access: "create"
71250
+ },
71251
+ "dishwasher.setIntensiveZone": {
71252
+ capName: "dishwasher",
71253
+ capScope: "device",
71254
+ addonId: null,
71255
+ access: "create"
71256
+ },
71257
+ "dishwasher.setOption": {
71258
+ capName: "dishwasher",
71259
+ capScope: "device",
71260
+ addonId: null,
71261
+ access: "create"
71262
+ },
71263
+ "dishwasher.setPower": {
71264
+ capName: "dishwasher",
71265
+ capScope: "device",
71266
+ addonId: null,
71267
+ access: "create"
71268
+ },
71269
+ "dishwasher.setProgram": {
71270
+ capName: "dishwasher",
71271
+ capScope: "device",
71272
+ addonId: null,
71273
+ access: "create"
71274
+ },
71275
+ "dishwasher.setVarioSpeedPlus": {
71276
+ capName: "dishwasher",
71277
+ capScope: "device",
71278
+ addonId: null,
71279
+ access: "create"
71280
+ },
71281
+ "dishwasher.start": {
71282
+ capName: "dishwasher",
71283
+ capScope: "device",
71284
+ addonId: null,
71285
+ access: "create"
71286
+ },
71287
+ "dishwasher.stop": {
71288
+ capName: "dishwasher",
71289
+ capScope: "device",
71290
+ addonId: null,
71291
+ access: "create"
71292
+ },
71011
71293
  "doorbell.getStatus": {
71012
71294
  capName: "doorbell",
71013
71295
  capScope: "device",
@@ -71218,6 +71500,12 @@ Object.freeze({
71218
71500
  addonId: null,
71219
71501
  access: "view"
71220
71502
  },
71503
+ "heatingValve.getStatus": {
71504
+ capName: "heating-valve",
71505
+ capScope: "device",
71506
+ addonId: null,
71507
+ access: "view"
71508
+ },
71221
71509
  "humidifier.getStatus": {
71222
71510
  capName: "humidifier",
71223
71511
  capScope: "device",
@@ -76805,7 +77093,7 @@ Object.freeze({
76805
77093
  access: "create"
76806
77094
  }
76807
77095
  });
76808
- 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;
77096
+ 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;
76809
77097
  DeviceFeature.BatteryOperated;
76810
77098
  var LAST_FETCHED_FIELD = "lastFetchedAt";
76811
77099
  /**
@@ -77781,6 +78069,71 @@ Object.freeze({
77781
78069
  form: "single",
77782
78070
  optional: false
77783
78071
  }],
78072
+ "dishwasher.getStatus": [{
78073
+ name: "deviceId",
78074
+ form: "single",
78075
+ optional: false
78076
+ }],
78077
+ "dishwasher.pause": [{
78078
+ name: "deviceId",
78079
+ form: "single",
78080
+ optional: false
78081
+ }],
78082
+ "dishwasher.setChildLock": [{
78083
+ name: "deviceId",
78084
+ form: "single",
78085
+ optional: false
78086
+ }],
78087
+ "dishwasher.setExtraDry": [{
78088
+ name: "deviceId",
78089
+ form: "single",
78090
+ optional: false
78091
+ }],
78092
+ "dishwasher.setHalfLoad": [{
78093
+ name: "deviceId",
78094
+ form: "single",
78095
+ optional: false
78096
+ }],
78097
+ "dishwasher.setHygienePlus": [{
78098
+ name: "deviceId",
78099
+ form: "single",
78100
+ optional: false
78101
+ }],
78102
+ "dishwasher.setIntensiveZone": [{
78103
+ name: "deviceId",
78104
+ form: "single",
78105
+ optional: false
78106
+ }],
78107
+ "dishwasher.setOption": [{
78108
+ name: "deviceId",
78109
+ form: "single",
78110
+ optional: false
78111
+ }],
78112
+ "dishwasher.setPower": [{
78113
+ name: "deviceId",
78114
+ form: "single",
78115
+ optional: false
78116
+ }],
78117
+ "dishwasher.setProgram": [{
78118
+ name: "deviceId",
78119
+ form: "single",
78120
+ optional: false
78121
+ }],
78122
+ "dishwasher.setVarioSpeedPlus": [{
78123
+ name: "deviceId",
78124
+ form: "single",
78125
+ optional: false
78126
+ }],
78127
+ "dishwasher.start": [{
78128
+ name: "deviceId",
78129
+ form: "single",
78130
+ optional: false
78131
+ }],
78132
+ "dishwasher.stop": [{
78133
+ name: "deviceId",
78134
+ form: "single",
78135
+ optional: false
78136
+ }],
77784
78137
  "doorbell.getStatus": [{
77785
78138
  name: "deviceId",
77786
78139
  form: "single",
@@ -77850,6 +78203,11 @@ Object.freeze({
77850
78203
  form: "single",
77851
78204
  optional: false
77852
78205
  }],
78206
+ "heatingValve.getStatus": [{
78207
+ name: "deviceId",
78208
+ form: "single",
78209
+ optional: false
78210
+ }],
77853
78211
  "humidifier.getStatus": [{
77854
78212
  name: "deviceId",
77855
78213
  form: "single",
@@ -203170,7 +203528,7 @@ var ReolinkProviderAddon = class extends BaseDeviceProvider {
203170
203528
  return [...EMAIL_PUSH_SECTION_IDS, ...BAICHUAN_WEBHOOK_SECTION_IDS];
203171
203529
  }
203172
203530
  async onInitialize() {
203173
- const regs = await super.onInitialize();
203531
+ const regs = this.providerRegistrationsFromSuper(await super.onInitialize());
203174
203532
  this.logChannels = createLogChannelsProvider(this.ctx.logger.child("log-channels"));
203175
203533
  regs.push({
203176
203534
  capability: logChannelsCapability,
package/dist/addon.mjs CHANGED
@@ -5434,7 +5434,7 @@ var ZodIssueCode = {
5434
5434
  var ZodFirstPartyTypeKind;
5435
5435
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5436
5436
  //#endregion
5437
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5437
+ //#region ../types/dist/sleep-BegKjwUu.mjs
5438
5438
  /**
5439
5439
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5440
5440
  * window to float samples (D455).
@@ -8529,7 +8529,7 @@ function sleep$2(ms) {
8529
8529
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
8530
8530
  }
8531
8531
  //#endregion
8532
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8532
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8533
8533
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8534
8534
  DeviceType["Camera"] = "camera";
8535
8535
  DeviceType["Hub"] = "hub";
@@ -8621,6 +8621,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8621
8621
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8622
8622
  * integrations sharing the same food/desiccant/hopper surface. */
8623
8623
  DeviceType["PetFeeder"] = "pet-feeder";
8624
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8625
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8626
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8627
+ DeviceType["Dishwasher"] = "dishwasher";
8624
8628
  return DeviceType;
8625
8629
  }({});
8626
8630
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8868,7 +8872,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8868
8872
  return DeviceRole;
8869
8873
  }({});
8870
8874
  //#endregion
8871
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8875
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8872
8876
  /**
8873
8877
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8874
8878
  *
@@ -13806,8 +13810,13 @@ var AlertSeveritySchema = _enum([
13806
13810
  "info",
13807
13811
  "success",
13808
13812
  "warning",
13809
- "error"
13813
+ "error",
13814
+ "critical"
13810
13815
  ]);
13816
+ var AlertActionSchema = object({
13817
+ label: string(),
13818
+ href: string().optional()
13819
+ });
13811
13820
  var AlertStatusSchema = _enum([
13812
13821
  "active",
13813
13822
  "in-progress",
@@ -13825,6 +13834,7 @@ var AlertSchema = object({
13825
13834
  severity: AlertSeveritySchema,
13826
13835
  title: string(),
13827
13836
  message: string(),
13837
+ action: AlertActionSchema.optional(),
13828
13838
  status: AlertStatusSchema,
13829
13839
  progress: number().optional(),
13830
13840
  read: boolean(),
@@ -18299,7 +18309,11 @@ var deviceDiscoveryCapability = {
18299
18309
  };
18300
18310
  /**
18301
18311
  * `device-adoption` — generic discovery + adoption surface,
18302
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
18312
+ * system-scoped collection (one provider per integration addon), routed
18313
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
18314
+ * pin model as `connection-test`. The admin UI keeps using
18315
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
18316
+ * successor to `ha-discovery`:
18303
18317
  * keyed by `integrationId` (the addon resolves integrationId → broker
18304
18318
  * internally) rather than a connection-specific `brokerId`, and it
18305
18319
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -55041,7 +55055,8 @@ var batteryCapability = {
55041
55055
  DeviceType.Button,
55042
55056
  DeviceType.Switch,
55043
55057
  DeviceType.PetFeeder,
55044
- DeviceType.Container
55058
+ DeviceType.Container,
55059
+ DeviceType.Thermostat
55045
55060
  ],
55046
55061
  methods: {
55047
55062
  /**
@@ -56514,6 +56529,161 @@ onStatusChanged: { data: object({
56514
56529
  * whether persisting is worth a SQLite commit. */
56515
56530
  volatileStateFields: ["lastChangedAt"]
56516
56531
  };
56532
+ /**
56533
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
56534
+ * consumable levels (salt, rinse aid) and common program options.
56535
+ *
56536
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
56537
+ * by any integration that exposes the same program / option surface.
56538
+ *
56539
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
56540
+ * provider refreshes the slice on an interval and eagerly after commands.
56541
+ */
56542
+ var DishwasherStateSchema = _enum([
56543
+ "idle",
56544
+ "running",
56545
+ "paused",
56546
+ "finished",
56547
+ "error",
56548
+ "unavailable"
56549
+ ]);
56550
+ var DishwasherConsumableLevelSchema = _enum([
56551
+ "ok",
56552
+ "low",
56553
+ "empty"
56554
+ ]);
56555
+ var DishwasherStatusSchema = object({
56556
+ state: DishwasherStateSchema,
56557
+ /** Active program id/name, or null when none selected / unknown. */
56558
+ program: string().nullable(),
56559
+ /** Program tokens the hardware accepts — drives the UI selector. */
56560
+ availablePrograms: array(string()),
56561
+ /** Minutes remaining on the active cycle, or null when not running. */
56562
+ remainingMinutes: number().int().nonnegative().nullable(),
56563
+ /** Cycle completion 0..100, or null when not applicable. */
56564
+ progressPercent: number().min(0).max(100).nullable(),
56565
+ /** True when the door is reported open. */
56566
+ doorOpen: boolean(),
56567
+ /** True when remote start is allowed (door closed, power on, etc.). */
56568
+ remoteStartAllowed: boolean(),
56569
+ /** Main power / switched-on state. */
56570
+ powerOn: boolean(),
56571
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
56572
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
56573
+ halfLoad: boolean(),
56574
+ hygienePlus: boolean(),
56575
+ /** Extra dry option when the appliance exposes it. */
56576
+ extraDry: boolean(),
56577
+ /** Intensive zone (lower basket) when the appliance exposes it. */
56578
+ intensiveZone: boolean(),
56579
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
56580
+ varioSpeedPlus: boolean(),
56581
+ /** Child lock (controls disabled on the appliance). */
56582
+ childLock: boolean(),
56583
+ errorCode: number().nullable(),
56584
+ errorLabel: string().nullable(),
56585
+ lastFetchedAt: number()
56586
+ });
56587
+ var dishwasherCapability = {
56588
+ name: "dishwasher",
56589
+ scope: "device",
56590
+ deviceNative: true,
56591
+ mode: "singleton",
56592
+ deviceTypes: [DeviceType.Dishwasher],
56593
+ methods: {
56594
+ start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56595
+ kind: "mutation",
56596
+ auth: "protected"
56597
+ }),
56598
+ pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56599
+ kind: "mutation",
56600
+ auth: "protected"
56601
+ }),
56602
+ stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56603
+ kind: "mutation",
56604
+ auth: "protected"
56605
+ }),
56606
+ setProgram: method(object({
56607
+ deviceId: number().int().nonnegative(),
56608
+ program: string().min(1)
56609
+ }), _void(), {
56610
+ kind: "mutation",
56611
+ auth: "protected"
56612
+ }),
56613
+ setPower: method(object({
56614
+ deviceId: number().int().nonnegative(),
56615
+ on: boolean()
56616
+ }), _void(), {
56617
+ kind: "mutation",
56618
+ auth: "protected"
56619
+ }),
56620
+ setHalfLoad: method(object({
56621
+ deviceId: number().int().nonnegative(),
56622
+ on: boolean()
56623
+ }), _void(), {
56624
+ kind: "mutation",
56625
+ auth: "protected"
56626
+ }),
56627
+ setHygienePlus: method(object({
56628
+ deviceId: number().int().nonnegative(),
56629
+ on: boolean()
56630
+ }), _void(), {
56631
+ kind: "mutation",
56632
+ auth: "protected"
56633
+ }),
56634
+ setExtraDry: method(object({
56635
+ deviceId: number().int().nonnegative(),
56636
+ on: boolean()
56637
+ }), _void(), {
56638
+ kind: "mutation",
56639
+ auth: "protected"
56640
+ }),
56641
+ setIntensiveZone: method(object({
56642
+ deviceId: number().int().nonnegative(),
56643
+ on: boolean()
56644
+ }), _void(), {
56645
+ kind: "mutation",
56646
+ auth: "protected"
56647
+ }),
56648
+ setVarioSpeedPlus: method(object({
56649
+ deviceId: number().int().nonnegative(),
56650
+ on: boolean()
56651
+ }), _void(), {
56652
+ kind: "mutation",
56653
+ auth: "protected"
56654
+ }),
56655
+ setChildLock: method(object({
56656
+ deviceId: number().int().nonnegative(),
56657
+ on: boolean()
56658
+ }), _void(), {
56659
+ kind: "mutation",
56660
+ auth: "protected"
56661
+ }),
56662
+ setOption: method(object({
56663
+ deviceId: number().int().nonnegative(),
56664
+ key: string().min(1),
56665
+ value: union([
56666
+ boolean(),
56667
+ string(),
56668
+ number()
56669
+ ])
56670
+ }), _void(), {
56671
+ kind: "mutation",
56672
+ auth: "protected"
56673
+ })
56674
+ },
56675
+ status: {
56676
+ schema: DishwasherStatusSchema,
56677
+ kind: "poll"
56678
+ },
56679
+ runtimeState: DishwasherStatusSchema,
56680
+ durability: "session",
56681
+ history: { fields: { progressPercent: {
56682
+ kind: "gauge",
56683
+ unit: "%",
56684
+ deadband: 2
56685
+ } } }
56686
+ };
56517
56687
  var DoorbellStatusSchema = object({
56518
56688
  /** Ms epoch of the last press. null = never observed since this provider started. */
56519
56689
  lastPressedAt: number().nullable(),
@@ -57316,6 +57486,32 @@ var gasCapability = {
57316
57486
  * whether persisting is worth a SQLite commit. */
57317
57487
  volatileStateFields: ["lastChangedAt"]
57318
57488
  };
57489
+ var HeatingValveStatusSchema = object({
57490
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
57491
+ position: number().min(0).max(100).nullable(),
57492
+ /** Ms epoch when the slice was last updated (push or poll). */
57493
+ lastFetchedAt: number()
57494
+ });
57495
+ var heatingValveCapability = {
57496
+ name: "heating-valve",
57497
+ scope: "device",
57498
+ deviceNative: true,
57499
+ mode: "singleton",
57500
+ deviceTypes: [DeviceType.Thermostat],
57501
+ methods: {},
57502
+ status: {
57503
+ schema: HeatingValveStatusSchema,
57504
+ kind: "push"
57505
+ },
57506
+ runtimeState: HeatingValveStatusSchema,
57507
+ durability: "session",
57508
+ history: { fields: { position: {
57509
+ kind: "gauge",
57510
+ unit: "%",
57511
+ deadband: 1
57512
+ } } },
57513
+ volatileStateFields: ["lastFetchedAt"]
57514
+ };
57319
57515
  /**
57320
57516
  * Humidifier / dehumidifier cap. Models HA `humidifier.*` entities —
57321
57517
  * an on/off actuator with an optional target-humidity setpoint and an
@@ -67321,6 +67517,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
67321
67517
  dayNight: dayNightCapability,
67322
67518
  deviceDiscovery: deviceDiscoveryCapability,
67323
67519
  deviceStatus: deviceStatusCapability,
67520
+ dishwasher: dishwasherCapability,
67324
67521
  doorbell: doorbellCapability,
67325
67522
  enumSensor: enumSensorCapability,
67326
67523
  eventEmitter: eventEmitterCapability,
@@ -67328,6 +67525,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
67328
67525
  featureProbe: featureProbeCapability,
67329
67526
  flood: floodCapability,
67330
67527
  gas: gasCapability,
67528
+ heatingValve: heatingValveCapability,
67331
67529
  humidifier: humidifierCapability,
67332
67530
  humiditySensor: humiditySensorCapability,
67333
67531
  image: imageCapability,
@@ -68053,6 +68251,12 @@ var BaseDeviceProvider = class extends BaseAddon {
68053
68251
  provider: this
68054
68252
  }];
68055
68253
  }
68254
+ /** Flatten `super.onInitialize()` whether it returned an array or an envelope. */
68255
+ providerRegistrationsFromSuper(result) {
68256
+ if (Array.isArray(result)) return result;
68257
+ if (result !== void 0 && result.providers !== void 0) return [...result.providers];
68258
+ return [];
68259
+ }
68056
68260
  async onShutdown() {
68057
68261
  this._restoreShuttingDown = true;
68058
68262
  this.cancelRestoreRetries();
@@ -68579,7 +68783,7 @@ var BaseDeviceProvider = class extends BaseAddon {
68579
68783
  return toDeviceSummary(device, this.addonId);
68580
68784
  }
68581
68785
  };
68582
- 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;
68786
+ 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;
68583
68787
  new Set(Object.values(DeviceType));
68584
68788
  Object.freeze({
68585
68789
  "accessories.getStatus": {
@@ -71000,6 +71204,84 @@ Object.freeze({
71000
71204
  addonId: null,
71001
71205
  access: "view"
71002
71206
  },
71207
+ "dishwasher.getStatus": {
71208
+ capName: "dishwasher",
71209
+ capScope: "device",
71210
+ addonId: null,
71211
+ access: "view"
71212
+ },
71213
+ "dishwasher.pause": {
71214
+ capName: "dishwasher",
71215
+ capScope: "device",
71216
+ addonId: null,
71217
+ access: "create"
71218
+ },
71219
+ "dishwasher.setChildLock": {
71220
+ capName: "dishwasher",
71221
+ capScope: "device",
71222
+ addonId: null,
71223
+ access: "create"
71224
+ },
71225
+ "dishwasher.setExtraDry": {
71226
+ capName: "dishwasher",
71227
+ capScope: "device",
71228
+ addonId: null,
71229
+ access: "create"
71230
+ },
71231
+ "dishwasher.setHalfLoad": {
71232
+ capName: "dishwasher",
71233
+ capScope: "device",
71234
+ addonId: null,
71235
+ access: "create"
71236
+ },
71237
+ "dishwasher.setHygienePlus": {
71238
+ capName: "dishwasher",
71239
+ capScope: "device",
71240
+ addonId: null,
71241
+ access: "create"
71242
+ },
71243
+ "dishwasher.setIntensiveZone": {
71244
+ capName: "dishwasher",
71245
+ capScope: "device",
71246
+ addonId: null,
71247
+ access: "create"
71248
+ },
71249
+ "dishwasher.setOption": {
71250
+ capName: "dishwasher",
71251
+ capScope: "device",
71252
+ addonId: null,
71253
+ access: "create"
71254
+ },
71255
+ "dishwasher.setPower": {
71256
+ capName: "dishwasher",
71257
+ capScope: "device",
71258
+ addonId: null,
71259
+ access: "create"
71260
+ },
71261
+ "dishwasher.setProgram": {
71262
+ capName: "dishwasher",
71263
+ capScope: "device",
71264
+ addonId: null,
71265
+ access: "create"
71266
+ },
71267
+ "dishwasher.setVarioSpeedPlus": {
71268
+ capName: "dishwasher",
71269
+ capScope: "device",
71270
+ addonId: null,
71271
+ access: "create"
71272
+ },
71273
+ "dishwasher.start": {
71274
+ capName: "dishwasher",
71275
+ capScope: "device",
71276
+ addonId: null,
71277
+ access: "create"
71278
+ },
71279
+ "dishwasher.stop": {
71280
+ capName: "dishwasher",
71281
+ capScope: "device",
71282
+ addonId: null,
71283
+ access: "create"
71284
+ },
71003
71285
  "doorbell.getStatus": {
71004
71286
  capName: "doorbell",
71005
71287
  capScope: "device",
@@ -71210,6 +71492,12 @@ Object.freeze({
71210
71492
  addonId: null,
71211
71493
  access: "view"
71212
71494
  },
71495
+ "heatingValve.getStatus": {
71496
+ capName: "heating-valve",
71497
+ capScope: "device",
71498
+ addonId: null,
71499
+ access: "view"
71500
+ },
71213
71501
  "humidifier.getStatus": {
71214
71502
  capName: "humidifier",
71215
71503
  capScope: "device",
@@ -76797,7 +77085,7 @@ Object.freeze({
76797
77085
  access: "create"
76798
77086
  }
76799
77087
  });
76800
- 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;
77088
+ 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;
76801
77089
  DeviceFeature.BatteryOperated;
76802
77090
  var LAST_FETCHED_FIELD = "lastFetchedAt";
76803
77091
  /**
@@ -77773,6 +78061,71 @@ Object.freeze({
77773
78061
  form: "single",
77774
78062
  optional: false
77775
78063
  }],
78064
+ "dishwasher.getStatus": [{
78065
+ name: "deviceId",
78066
+ form: "single",
78067
+ optional: false
78068
+ }],
78069
+ "dishwasher.pause": [{
78070
+ name: "deviceId",
78071
+ form: "single",
78072
+ optional: false
78073
+ }],
78074
+ "dishwasher.setChildLock": [{
78075
+ name: "deviceId",
78076
+ form: "single",
78077
+ optional: false
78078
+ }],
78079
+ "dishwasher.setExtraDry": [{
78080
+ name: "deviceId",
78081
+ form: "single",
78082
+ optional: false
78083
+ }],
78084
+ "dishwasher.setHalfLoad": [{
78085
+ name: "deviceId",
78086
+ form: "single",
78087
+ optional: false
78088
+ }],
78089
+ "dishwasher.setHygienePlus": [{
78090
+ name: "deviceId",
78091
+ form: "single",
78092
+ optional: false
78093
+ }],
78094
+ "dishwasher.setIntensiveZone": [{
78095
+ name: "deviceId",
78096
+ form: "single",
78097
+ optional: false
78098
+ }],
78099
+ "dishwasher.setOption": [{
78100
+ name: "deviceId",
78101
+ form: "single",
78102
+ optional: false
78103
+ }],
78104
+ "dishwasher.setPower": [{
78105
+ name: "deviceId",
78106
+ form: "single",
78107
+ optional: false
78108
+ }],
78109
+ "dishwasher.setProgram": [{
78110
+ name: "deviceId",
78111
+ form: "single",
78112
+ optional: false
78113
+ }],
78114
+ "dishwasher.setVarioSpeedPlus": [{
78115
+ name: "deviceId",
78116
+ form: "single",
78117
+ optional: false
78118
+ }],
78119
+ "dishwasher.start": [{
78120
+ name: "deviceId",
78121
+ form: "single",
78122
+ optional: false
78123
+ }],
78124
+ "dishwasher.stop": [{
78125
+ name: "deviceId",
78126
+ form: "single",
78127
+ optional: false
78128
+ }],
77776
78129
  "doorbell.getStatus": [{
77777
78130
  name: "deviceId",
77778
78131
  form: "single",
@@ -77842,6 +78195,11 @@ Object.freeze({
77842
78195
  form: "single",
77843
78196
  optional: false
77844
78197
  }],
78198
+ "heatingValve.getStatus": [{
78199
+ name: "deviceId",
78200
+ form: "single",
78201
+ optional: false
78202
+ }],
77845
78203
  "humidifier.getStatus": [{
77846
78204
  name: "deviceId",
77847
78205
  form: "single",
@@ -203162,7 +203520,7 @@ var ReolinkProviderAddon = class extends BaseDeviceProvider {
203162
203520
  return [...EMAIL_PUSH_SECTION_IDS, ...BAICHUAN_WEBHOOK_SECTION_IDS];
203163
203521
  }
203164
203522
  async onInitialize() {
203165
- const regs = await super.onInitialize();
203523
+ const regs = this.providerRegistrationsFromSuper(await super.onInitialize());
203166
203524
  this.logChannels = createLogChannelsProvider(this.ctx.logger.child("log-channels"));
203167
203525
  regs.push({
203168
203526
  capability: logChannelsCapability,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-reolink",
3
- "version": "1.2.187",
3
+ "version": "1.2.189",
4
4
  "description": "Reolink camera device provider addon for CamStack — native Baichuan protocol",
5
5
  "keywords": [
6
6
  "camstack",