@camstack/addon-provider-homeassistant 1.2.120 → 1.2.122

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
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_dist = require("./dist-CojINel_.js");
2
+ const require_dist = require("./dist-Cna51hy3.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let node_zlib = require("node:zlib");
5
5
  //#region src/ha-device-source.ts
package/dist/addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as presenceCapability, A as controlCapability, At as EventCategory, B as humiditySensorCapability, C as buildAddonRouteProvider, Ct as number, D as colorCapability, Dt as union, E as climateControlCapability, Et as string, F as eventEmitterCapability, G as motionCapability, H as lawnMowerControlCapability, I as fanControlCapability, J as notifierCapability, K as normalizeUnit, L as floodCapability, M as deviceAdoptionCapability, O as connectivityCapability, Ot as unknown, P as enumSensorCapability, Q as prepareNotification, R as gasCapability, S as brokerCapability, St as literal, T as carbonMonoxideCapability, Tt as record, U as lockControlCapability, V as imageCapability, W as mediaPlayerCapability, Y as numericSensorCapability, Z as powerMeterCapability, _ as automationControlCapability, _t as createEvent, at as temperatureSensorCapability, b as binaryCapability, bt as array, ct as valveCapability, d as TargetSchema, dt as weatherCapability, et as pressureSensorCapability, f as accessoriesCapability, ft as errMsg, g as ambientLightSensorCapability, gt as DeviceType, h as alarmPanelCapability, ht as DeviceRole, it as tamperCapability, j as coverCapability, k as contactCapability, kt as url, lt as vibrationCapability, m as airQualitySensorCapability, mt as DeviceFeature, n as BaseDevice, nt as smokeCapability, ot as updateCapability, p as addonRoutesCapability, q as notificationOutputCapability, r as BaseDeviceProvider, rt as switchCapability, s as EnumSensorDateTimeFormatSchema, st as vacuumControlCapability, tt as scriptRunnerCapability, ut as waterHeaterCapability, v as batteryCapability, w as buttonCapability, wt as object, x as brightnessCapability, xt as discriminatedUnion, y as bestLocationMatch, yt as _enum, z as humidifierCapability } from "./dist-9vbU-7ZX.mjs";
1
+ import { $ as presenceCapability, A as controlCapability, At as EventCategory, B as humiditySensorCapability, C as buildAddonRouteProvider, Ct as number, D as colorCapability, Dt as union, E as climateControlCapability, Et as string, F as eventEmitterCapability, G as motionCapability, H as lawnMowerControlCapability, I as fanControlCapability, J as notifierCapability, K as normalizeUnit, L as floodCapability, M as deviceAdoptionCapability, O as connectivityCapability, Ot as unknown, P as enumSensorCapability, Q as prepareNotification, R as gasCapability, S as brokerCapability, St as literal, T as carbonMonoxideCapability, Tt as record, U as lockControlCapability, V as imageCapability, W as mediaPlayerCapability, Y as numericSensorCapability, Z as powerMeterCapability, _ as automationControlCapability, _t as createEvent, at as temperatureSensorCapability, b as binaryCapability, bt as array, ct as valveCapability, d as TargetSchema, dt as weatherCapability, et as pressureSensorCapability, f as accessoriesCapability, ft as errMsg, g as ambientLightSensorCapability, gt as DeviceType, h as alarmPanelCapability, ht as DeviceRole, it as tamperCapability, j as coverCapability, k as contactCapability, kt as url, lt as vibrationCapability, m as airQualitySensorCapability, mt as DeviceFeature, n as BaseDevice, nt as smokeCapability, ot as updateCapability, p as addonRoutesCapability, q as notificationOutputCapability, r as BaseDeviceProvider, rt as switchCapability, s as EnumSensorDateTimeFormatSchema, st as vacuumControlCapability, tt as scriptRunnerCapability, ut as waterHeaterCapability, v as batteryCapability, w as buttonCapability, wt as object, x as brightnessCapability, xt as discriminatedUnion, y as bestLocationMatch, yt as _enum, z as humidifierCapability } from "./dist-BGU-lGVF.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { brotliCompressSync, deflateSync, gzipSync } from "node:zlib";
4
4
  //#region src/ha-device-source.ts
@@ -5359,7 +5359,7 @@ var ZodIssueCode = {
5359
5359
  var ZodFirstPartyTypeKind;
5360
5360
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5361
5361
  //#endregion
5362
- //#region ../types/dist/sleep-DEuj7E3j.mjs
5362
+ //#region ../types/dist/sleep-BEyvfshj.mjs
5363
5363
  /**
5364
5364
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5365
5365
  * window to float samples (D455).
@@ -21820,6 +21820,14 @@ var MotionSourceEnum = _enum([
21820
21820
  */
21821
21821
  var MotionSourcesSchema = array(MotionSourceEnum);
21822
21822
  /**
21823
+ * Which root detectors a camera runs. Deliberately the SAME vocabulary
21824
+ * post-analysis already tags every detection with (`DetectionSource`) rather
21825
+ * than a second spelling of the same two ideas — the value an operator picks
21826
+ * here is the value that comes back on the track, the overlay and the debug
21827
+ * row.
21828
+ */
21829
+ var DetectionSourcesSchema = array(DetectionSourceSchema);
21830
+ /**
21823
21831
  * Input shape for `pipeline-runner.reportMotion` cap method. Exported
21824
21832
  * so cap-side consumers (the orchestrator forward, the runner addon's
21825
21833
  * cap implementation, tests) can reuse the type instead of redeclaring
@@ -21970,6 +21978,35 @@ var RunnerCameraConfigSchema = object({
21970
21978
  * events; the orchestrator forwards to `reportMotion`.
21971
21979
  */
21972
21980
  motionSources: MotionSourcesSchema.default(["analyzer"]),
21981
+ /**
21982
+ * WHICH root detector runs for this camera. The detection counterpart of
21983
+ * {@link motionSources}, same shape and same discipline: a per-camera list
21984
+ * of sources the system understands, vendor-agnostic, owned here.
21985
+ *
21986
+ * - `pipeline` — this runner's own root step on decoded pixels (`steps`).
21987
+ * - `onboard` — the CAMERA's own detector, admitted only when it is named
21988
+ * here. Its boxes reach post-analysis on the same
21989
+ * `PipelineInferenceResult` payload as the pipeline's, so an onboard-born
21990
+ * track gets the same tracker, the same overlay and the same detail
21991
+ * subtree (face / plate / embedding).
21992
+ *
21993
+ * `['onboard']` alone is the REPLACEMENT: this runner's root step does not
21994
+ * run, and that is where a camera with a usable onboard detector buys back
21995
+ * its share of the accelerator. It saves the root inference, not the decode
21996
+ * — the detail subtree still needs pixels to cut crops from.
21997
+ *
21998
+ * A camera whose onboard detections carry no geometry cannot serve as a root
21999
+ * step at all (there is nothing to track), and the cap that knows this says
22000
+ * so on `native-object-detection.getOptions().geometry`. On Reolink that is
22001
+ * every battery camera: the boxes ride a sub-stream a battery camera never
22002
+ * attaches, so such a camera stays on `['pipeline']` and its onboard AI is
22003
+ * worth exactly what it already is — a wake signal with a class.
22004
+ *
22005
+ * Defaults to `['pipeline']`, which is byte-for-byte today's behaviour: a
22006
+ * vendor never turns a detector on for the operator, and neither does a
22007
+ * default.
22008
+ */
22009
+ detectionSources: DetectionSourcesSchema.default(["pipeline"]),
21973
22010
  pipelineEnabled: boolean().default(true),
21974
22011
  /** Ordered tree of video steps. Absent → runner skips video detection. */
21975
22012
  steps: array(PipelineStepInputSchema).readonly().optional(),
@@ -29070,11 +29107,46 @@ var NativeObjectDetectionStatusSchema = object({
29070
29107
  supportedClasses: array(NativeObjectClassEnum).readonly(),
29071
29108
  /**
29072
29109
  * Whether forwarding of onboard AI detections is enabled for this device.
29073
- * Default FALSE (opt-in, cold-start) — onboard AI pushes are noisy/sparse and
29074
- * churn the tracker, so forwarding stays off until the operator enables it.
29110
+ *
29111
+ * Cold-start OFF on every camera. A vendor does not decide which detector a
29112
+ * camera runs — that is the operator's choice, and it is made where every
29113
+ * other detection choice is made. `geometry` on
29114
+ * {@link NativeObjectDetectionOptionsSchema} is how the form says what the
29115
+ * choice would buy this particular camera.
29075
29116
  */
29076
29117
  enabled: boolean()
29077
29118
  });
29119
+ /**
29120
+ * WHEN a camera's onboard detections carry geometry.
29121
+ *
29122
+ * - `boxed` — always. The provider holds a standing channel for the boxes, so
29123
+ * a detection is a trackable subject whenever the camera sees one.
29124
+ * - `while-streaming` — only while some stream of this camera is already open.
29125
+ * The boxes ride the video's own side-channel rather than a feed of their
29126
+ * own, so they cost nothing and they exist only when something is pulling.
29127
+ * On Reolink this is every BATTERY camera: a persistent second feed is real
29128
+ * radio drain, but a camera that is awake is awake precisely because
29129
+ * something is in front of it, and its stream is already being pulled.
29130
+ * - `flag-only` — never. The firmware ships the class and nothing else; the
29131
+ * pipeline needs geometry to make a subject, so such a push reaches the
29132
+ * tracker as motion and no further.
29133
+ *
29134
+ * Reported and not inferred, because the operator's question in front of the
29135
+ * picker is "what do I get", and these are three different answers (D14: the
29136
+ * derived form is only as honest as `getOptions`).
29137
+ */
29138
+ var NativeObjectGeometryEnum = _enum([
29139
+ "boxed",
29140
+ "while-streaming",
29141
+ "flag-only"
29142
+ ]);
29143
+ var NativeObjectDetectionOptionsSchema = object({
29144
+ /** Classes this firmware can detect — the same list the status reports. */
29145
+ supportedClasses: array(NativeObjectClassEnum).readonly(),
29146
+ /** What a detection from this camera carries. */
29147
+ geometry: NativeObjectGeometryEnum
29148
+ });
29149
+ var NativeObjectDetectionSettingsPatchSchema = object({ enabled: boolean().optional() });
29078
29150
  var NativeObjectDetectionRuntimeStateSchema = NativeObjectDetectionStatusSchema.extend({
29079
29151
  /** Required by createRuntimeStateBridge — epoch ms of last refresh. */
29080
29152
  lastFetchedAt: number() });
@@ -29084,13 +29156,23 @@ var nativeObjectDetectionCapability = {
29084
29156
  deviceNative: true,
29085
29157
  mode: "singleton",
29086
29158
  deviceTypes: [DeviceType.Camera],
29087
- methods: { setEnabled: method(object({
29088
- deviceId: number(),
29089
- enabled: boolean()
29090
- }), _void(), {
29091
- kind: "mutation",
29092
- auth: "admin"
29093
- }) },
29159
+ methods: {
29160
+ getOptions: method(object({ deviceId: number() }), NativeObjectDetectionOptionsSchema),
29161
+ setSettings: method(object({
29162
+ deviceId: number(),
29163
+ settings: NativeObjectDetectionSettingsPatchSchema
29164
+ }), _void(), {
29165
+ kind: "mutation",
29166
+ auth: "admin"
29167
+ }),
29168
+ setEnabled: method(object({
29169
+ deviceId: number(),
29170
+ enabled: boolean()
29171
+ }), _void(), {
29172
+ kind: "mutation",
29173
+ auth: "admin"
29174
+ })
29175
+ },
29094
29176
  events: { onDetected: { data: object({
29095
29177
  deviceId: number(),
29096
29178
  detection: NativeDetectionSchema
@@ -38460,12 +38542,24 @@ Object.freeze({
38460
38542
  addonId: null,
38461
38543
  access: "create"
38462
38544
  },
38545
+ "nativeObjectDetection.getOptions": {
38546
+ capName: "native-object-detection",
38547
+ capScope: "device",
38548
+ addonId: null,
38549
+ access: "view"
38550
+ },
38463
38551
  "nativeObjectDetection.setEnabled": {
38464
38552
  capName: "native-object-detection",
38465
38553
  capScope: "device",
38466
38554
  addonId: null,
38467
38555
  access: "create"
38468
38556
  },
38557
+ "nativeObjectDetection.setSettings": {
38558
+ capName: "native-object-detection",
38559
+ capScope: "device",
38560
+ addonId: null,
38561
+ access: "create"
38562
+ },
38469
38563
  "navigation.getFeatures": {
38470
38564
  capName: "navigation",
38471
38565
  capScope: "device",
@@ -42692,11 +42786,21 @@ Object.freeze({
42692
42786
  form: "single",
42693
42787
  optional: false
42694
42788
  }],
42789
+ "nativeObjectDetection.getOptions": [{
42790
+ name: "deviceId",
42791
+ form: "single",
42792
+ optional: false
42793
+ }],
42695
42794
  "nativeObjectDetection.setEnabled": [{
42696
42795
  name: "deviceId",
42697
42796
  form: "single",
42698
42797
  optional: false
42699
42798
  }],
42799
+ "nativeObjectDetection.setSettings": [{
42800
+ name: "deviceId",
42801
+ form: "single",
42802
+ optional: false
42803
+ }],
42700
42804
  "navigation.getFeatures": [{
42701
42805
  name: "deviceId",
42702
42806
  form: "single",
@@ -5359,7 +5359,7 @@ var ZodIssueCode = {
5359
5359
  var ZodFirstPartyTypeKind;
5360
5360
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5361
5361
  //#endregion
5362
- //#region ../types/dist/sleep-DEuj7E3j.mjs
5362
+ //#region ../types/dist/sleep-BEyvfshj.mjs
5363
5363
  /**
5364
5364
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5365
5365
  * window to float samples (D455).
@@ -21820,6 +21820,14 @@ var MotionSourceEnum = _enum([
21820
21820
  */
21821
21821
  var MotionSourcesSchema = array(MotionSourceEnum);
21822
21822
  /**
21823
+ * Which root detectors a camera runs. Deliberately the SAME vocabulary
21824
+ * post-analysis already tags every detection with (`DetectionSource`) rather
21825
+ * than a second spelling of the same two ideas — the value an operator picks
21826
+ * here is the value that comes back on the track, the overlay and the debug
21827
+ * row.
21828
+ */
21829
+ var DetectionSourcesSchema = array(DetectionSourceSchema);
21830
+ /**
21823
21831
  * Input shape for `pipeline-runner.reportMotion` cap method. Exported
21824
21832
  * so cap-side consumers (the orchestrator forward, the runner addon's
21825
21833
  * cap implementation, tests) can reuse the type instead of redeclaring
@@ -21970,6 +21978,35 @@ var RunnerCameraConfigSchema = object({
21970
21978
  * events; the orchestrator forwards to `reportMotion`.
21971
21979
  */
21972
21980
  motionSources: MotionSourcesSchema.default(["analyzer"]),
21981
+ /**
21982
+ * WHICH root detector runs for this camera. The detection counterpart of
21983
+ * {@link motionSources}, same shape and same discipline: a per-camera list
21984
+ * of sources the system understands, vendor-agnostic, owned here.
21985
+ *
21986
+ * - `pipeline` — this runner's own root step on decoded pixels (`steps`).
21987
+ * - `onboard` — the CAMERA's own detector, admitted only when it is named
21988
+ * here. Its boxes reach post-analysis on the same
21989
+ * `PipelineInferenceResult` payload as the pipeline's, so an onboard-born
21990
+ * track gets the same tracker, the same overlay and the same detail
21991
+ * subtree (face / plate / embedding).
21992
+ *
21993
+ * `['onboard']` alone is the REPLACEMENT: this runner's root step does not
21994
+ * run, and that is where a camera with a usable onboard detector buys back
21995
+ * its share of the accelerator. It saves the root inference, not the decode
21996
+ * — the detail subtree still needs pixels to cut crops from.
21997
+ *
21998
+ * A camera whose onboard detections carry no geometry cannot serve as a root
21999
+ * step at all (there is nothing to track), and the cap that knows this says
22000
+ * so on `native-object-detection.getOptions().geometry`. On Reolink that is
22001
+ * every battery camera: the boxes ride a sub-stream a battery camera never
22002
+ * attaches, so such a camera stays on `['pipeline']` and its onboard AI is
22003
+ * worth exactly what it already is — a wake signal with a class.
22004
+ *
22005
+ * Defaults to `['pipeline']`, which is byte-for-byte today's behaviour: a
22006
+ * vendor never turns a detector on for the operator, and neither does a
22007
+ * default.
22008
+ */
22009
+ detectionSources: DetectionSourcesSchema.default(["pipeline"]),
21973
22010
  pipelineEnabled: boolean().default(true),
21974
22011
  /** Ordered tree of video steps. Absent → runner skips video detection. */
21975
22012
  steps: array(PipelineStepInputSchema).readonly().optional(),
@@ -29070,11 +29107,46 @@ var NativeObjectDetectionStatusSchema = object({
29070
29107
  supportedClasses: array(NativeObjectClassEnum).readonly(),
29071
29108
  /**
29072
29109
  * Whether forwarding of onboard AI detections is enabled for this device.
29073
- * Default FALSE (opt-in, cold-start) — onboard AI pushes are noisy/sparse and
29074
- * churn the tracker, so forwarding stays off until the operator enables it.
29110
+ *
29111
+ * Cold-start OFF on every camera. A vendor does not decide which detector a
29112
+ * camera runs — that is the operator's choice, and it is made where every
29113
+ * other detection choice is made. `geometry` on
29114
+ * {@link NativeObjectDetectionOptionsSchema} is how the form says what the
29115
+ * choice would buy this particular camera.
29075
29116
  */
29076
29117
  enabled: boolean()
29077
29118
  });
29119
+ /**
29120
+ * WHEN a camera's onboard detections carry geometry.
29121
+ *
29122
+ * - `boxed` — always. The provider holds a standing channel for the boxes, so
29123
+ * a detection is a trackable subject whenever the camera sees one.
29124
+ * - `while-streaming` — only while some stream of this camera is already open.
29125
+ * The boxes ride the video's own side-channel rather than a feed of their
29126
+ * own, so they cost nothing and they exist only when something is pulling.
29127
+ * On Reolink this is every BATTERY camera: a persistent second feed is real
29128
+ * radio drain, but a camera that is awake is awake precisely because
29129
+ * something is in front of it, and its stream is already being pulled.
29130
+ * - `flag-only` — never. The firmware ships the class and nothing else; the
29131
+ * pipeline needs geometry to make a subject, so such a push reaches the
29132
+ * tracker as motion and no further.
29133
+ *
29134
+ * Reported and not inferred, because the operator's question in front of the
29135
+ * picker is "what do I get", and these are three different answers (D14: the
29136
+ * derived form is only as honest as `getOptions`).
29137
+ */
29138
+ var NativeObjectGeometryEnum = _enum([
29139
+ "boxed",
29140
+ "while-streaming",
29141
+ "flag-only"
29142
+ ]);
29143
+ var NativeObjectDetectionOptionsSchema = object({
29144
+ /** Classes this firmware can detect — the same list the status reports. */
29145
+ supportedClasses: array(NativeObjectClassEnum).readonly(),
29146
+ /** What a detection from this camera carries. */
29147
+ geometry: NativeObjectGeometryEnum
29148
+ });
29149
+ var NativeObjectDetectionSettingsPatchSchema = object({ enabled: boolean().optional() });
29078
29150
  var NativeObjectDetectionRuntimeStateSchema = NativeObjectDetectionStatusSchema.extend({
29079
29151
  /** Required by createRuntimeStateBridge — epoch ms of last refresh. */
29080
29152
  lastFetchedAt: number() });
@@ -29084,13 +29156,23 @@ var nativeObjectDetectionCapability = {
29084
29156
  deviceNative: true,
29085
29157
  mode: "singleton",
29086
29158
  deviceTypes: [DeviceType.Camera],
29087
- methods: { setEnabled: method(object({
29088
- deviceId: number(),
29089
- enabled: boolean()
29090
- }), _void(), {
29091
- kind: "mutation",
29092
- auth: "admin"
29093
- }) },
29159
+ methods: {
29160
+ getOptions: method(object({ deviceId: number() }), NativeObjectDetectionOptionsSchema),
29161
+ setSettings: method(object({
29162
+ deviceId: number(),
29163
+ settings: NativeObjectDetectionSettingsPatchSchema
29164
+ }), _void(), {
29165
+ kind: "mutation",
29166
+ auth: "admin"
29167
+ }),
29168
+ setEnabled: method(object({
29169
+ deviceId: number(),
29170
+ enabled: boolean()
29171
+ }), _void(), {
29172
+ kind: "mutation",
29173
+ auth: "admin"
29174
+ })
29175
+ },
29094
29176
  events: { onDetected: { data: object({
29095
29177
  deviceId: number(),
29096
29178
  detection: NativeDetectionSchema
@@ -38460,12 +38542,24 @@ Object.freeze({
38460
38542
  addonId: null,
38461
38543
  access: "create"
38462
38544
  },
38545
+ "nativeObjectDetection.getOptions": {
38546
+ capName: "native-object-detection",
38547
+ capScope: "device",
38548
+ addonId: null,
38549
+ access: "view"
38550
+ },
38463
38551
  "nativeObjectDetection.setEnabled": {
38464
38552
  capName: "native-object-detection",
38465
38553
  capScope: "device",
38466
38554
  addonId: null,
38467
38555
  access: "create"
38468
38556
  },
38557
+ "nativeObjectDetection.setSettings": {
38558
+ capName: "native-object-detection",
38559
+ capScope: "device",
38560
+ addonId: null,
38561
+ access: "create"
38562
+ },
38469
38563
  "navigation.getFeatures": {
38470
38564
  capName: "navigation",
38471
38565
  capScope: "device",
@@ -42692,11 +42786,21 @@ Object.freeze({
42692
42786
  form: "single",
42693
42787
  optional: false
42694
42788
  }],
42789
+ "nativeObjectDetection.getOptions": [{
42790
+ name: "deviceId",
42791
+ form: "single",
42792
+ optional: false
42793
+ }],
42695
42794
  "nativeObjectDetection.setEnabled": [{
42696
42795
  name: "deviceId",
42697
42796
  form: "single",
42698
42797
  optional: false
42699
42798
  }],
42799
+ "nativeObjectDetection.setSettings": [{
42800
+ name: "deviceId",
42801
+ form: "single",
42802
+ optional: false
42803
+ }],
42700
42804
  "navigation.getFeatures": [{
42701
42805
  name: "deviceId",
42702
42806
  form: "single",
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  //#endregion
6
- const require_dist = require("../dist-CojINel_.js");
6
+ const require_dist = require("../dist-Cna51hy3.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  //#region src/ha-export/topics.ts
9
9
  /**
@@ -1,4 +1,4 @@
1
- import { At as EventCategory, C as buildAddonRouteProvider, Et as string, N as deviceExportCapability, X as oauthIntegrationCapability, a as COCO_TO_MACRO, c as FanDirectionSchema, i as CAMERA_SWITCH_ORDER, l as HvacModeSchema, o as CameraSwitchIdSchema, p as addonRoutesCapability, pt as BaseAddon, t as AlarmArmModeSchema, u as MediaPlayerRepeatSchema, vt as nodePin } from "../dist-9vbU-7ZX.mjs";
1
+ import { At as EventCategory, C as buildAddonRouteProvider, Et as string, N as deviceExportCapability, X as oauthIntegrationCapability, a as COCO_TO_MACRO, c as FanDirectionSchema, i as CAMERA_SWITCH_ORDER, l as HvacModeSchema, o as CameraSwitchIdSchema, p as addonRoutesCapability, pt as BaseAddon, t as AlarmArmModeSchema, u as MediaPlayerRepeatSchema, vt as nodePin } from "../dist-BGU-lGVF.mjs";
2
2
  import { createHmac, timingSafeEqual } from "node:crypto";
3
3
  //#region src/ha-export/topics.ts
4
4
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homeassistant",
3
- "version": "1.2.120",
3
+ "version": "1.2.122",
4
4
  "description": "Home Assistant device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",