@camstack/addon-provider-homeassistant 1.2.641 → 1.2.642

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/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.2.642] - 2026-10-31
11
+
12
+ ### Changed
13
+
14
+ - A lock reporting door-open is published to Home Assistant as open.
15
+
10
16
  ## [1.2.641] - 2026-10-31
11
17
 
12
18
  ### Changed
package/dist/addon.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_ha_broker_source = require("./ha-broker-source-D3_ZXq6l.js");
2
+ const require_ha_broker_source = require("./ha-broker-source-B6xSmZ6H.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let node_zlib = require("node:zlib");
5
5
  //#region src/ha-admin-link.ts
package/dist/addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as humiditySensorCapability, $t as array, A as brokerCapability, At as temperatureSensorCapability, Bt as DeviceRole, C as alarmPanelCapability, Ct as runningFromVacuumState, D as bestLocationMatch, Dt as smokeCapability, E as batteryCapability, F as carbonMonoxideCapability, Ft as valveCapability, G as deviceAdoptionCapability, Gt as baseUnitOf, H as controlCapability, Ht as errMsg, I as climateControlCapability, It as vibrationCapability, J as eventEmitterCapability, Jt as defineRecordKinds, Kt as createEvent, L as colorCapability, Lt as waterHeaterCapability, M as buildDeviceAdminUrl, Mt as tryConvertUnit, N as buttonCapability, Nt as updateCapability, O as binaryCapability, Ot as switchCapability, P as calendarSourceCapability, Pt as vacuumControlCapability, Q as humidifierCapability, Qt as _enum, R as connectivityCapability, Rt as weatherCapability, S as airQualitySensorCapability, St as runningFromMediaPlayer, T as automationControlCapability, Tt as scriptRunnerCapability, U as coverCapability, V as contactCapability, Vt as DeviceType, W as deviceAdminLinkCapability, Wt as RecordSecretUnavailableError, X as floodCapability, Y as fanControlCapability, Yt as entryBody, Z as gasCapability, _t as publicEndpointReaderFrom, a as BaseDevice, an as record, at as motionCapability, b as accessoriesCapability, cn as unknown, ct as notifierCapability, dt as parseAdminBase, en as boolean, et as imageCapability, ft as powerMeterCapability, ht as pressureSensorCapability, in as object, it as mediaPlayerCapability, j as buildAddonRouteProvider, jt as tryConvertDelta, k as brightnessCapability, kt as tamperCapability, ln as url, lt as numericSensorCapability, mt as presenceCapability, nn as literal, nt as lawnMowerControlCapability, o as BaseDeviceProvider, on as string, ot as normalizeUnit, p as EnumSensorDateTimeFormatSchema, pt as prepareNotification, q as enumSensorCapability, qt as defineEntryKind, rn as number, rt as lockControlCapability, sn as union, st as notificationOutputCapability, t as HA_BROKER_KIND, tn as discriminatedUnion, tt as ingestReading, un as EventCategory, v as RUNNING_STATE_COLD, vt as quantityFromUnit, w as ambientLightSensorCapability, wt as runningStateCapability, x as addonRoutesCapability, xt as runningFromLawnMower, y as TargetSchema, yt as resolveAttachmentUrls, zt as DeviceFeature } from "./ha-broker-source-vytM8SXk.mjs";
1
+ import { $ as humiditySensorCapability, $t as array, A as brokerCapability, At as temperatureSensorCapability, Bt as DeviceRole, C as alarmPanelCapability, Ct as runningFromVacuumState, D as bestLocationMatch, Dt as smokeCapability, E as batteryCapability, F as carbonMonoxideCapability, Ft as valveCapability, G as deviceAdoptionCapability, Gt as baseUnitOf, H as controlCapability, Ht as errMsg, I as climateControlCapability, It as vibrationCapability, J as eventEmitterCapability, Jt as defineRecordKinds, Kt as createEvent, L as colorCapability, Lt as waterHeaterCapability, M as buildDeviceAdminUrl, Mt as tryConvertUnit, N as buttonCapability, Nt as updateCapability, O as binaryCapability, Ot as switchCapability, P as calendarSourceCapability, Pt as vacuumControlCapability, Q as humidifierCapability, Qt as _enum, R as connectivityCapability, Rt as weatherCapability, S as airQualitySensorCapability, St as runningFromMediaPlayer, T as automationControlCapability, Tt as scriptRunnerCapability, U as coverCapability, V as contactCapability, Vt as DeviceType, W as deviceAdminLinkCapability, Wt as RecordSecretUnavailableError, X as floodCapability, Y as fanControlCapability, Yt as entryBody, Z as gasCapability, _t as publicEndpointReaderFrom, a as BaseDevice, an as record, at as motionCapability, b as accessoriesCapability, cn as unknown, ct as notifierCapability, dt as parseAdminBase, en as boolean, et as imageCapability, ft as powerMeterCapability, ht as pressureSensorCapability, in as object, it as mediaPlayerCapability, j as buildAddonRouteProvider, jt as tryConvertDelta, k as brightnessCapability, kt as tamperCapability, ln as url, lt as numericSensorCapability, mt as presenceCapability, nn as literal, nt as lawnMowerControlCapability, o as BaseDeviceProvider, on as string, ot as normalizeUnit, p as EnumSensorDateTimeFormatSchema, pt as prepareNotification, q as enumSensorCapability, qt as defineEntryKind, rn as number, rt as lockControlCapability, sn as union, st as notificationOutputCapability, t as HA_BROKER_KIND, tn as discriminatedUnion, tt as ingestReading, un as EventCategory, v as RUNNING_STATE_COLD, vt as quantityFromUnit, w as ambientLightSensorCapability, wt as runningStateCapability, x as addonRoutesCapability, xt as runningFromLawnMower, y as TargetSchema, yt as resolveAttachmentUrls, zt as DeviceFeature } from "./ha-broker-source-D9_yzN2c.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { brotliCompressSync, deflateSync, gzipSync } from "node:zlib";
4
4
  //#region src/ha-admin-link.ts
@@ -5588,7 +5588,7 @@ var ZodIssueCode = {
5588
5588
  var ZodFirstPartyTypeKind;
5589
5589
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5590
5590
  //#endregion
5591
- //#region ../types/dist/sleep-0RR2wzNB.mjs
5591
+ //#region ../types/dist/sleep-SX9bkW3_.mjs
5592
5592
  /**
5593
5593
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5594
5594
  * window to float samples (D455).
@@ -10227,7 +10227,8 @@ Object.freeze({
10227
10227
  "unlocked",
10228
10228
  "locking",
10229
10229
  "unlocking",
10230
- "jammed"
10230
+ "jammed",
10231
+ "door-open"
10231
10232
  ]
10232
10233
  }],
10233
10234
  "media-player": [
@@ -16798,6 +16799,11 @@ var ACTUATOR_CAP_VOCABULARY = {
16798
16799
  value: "jammed",
16799
16800
  label: t("Jammed", "Inceppata"),
16800
16801
  phrase: t("When {device} jams", "Quando {device} si inceppa")
16802
+ },
16803
+ {
16804
+ value: "door-open",
16805
+ label: t("Door open", "Porta aperta"),
16806
+ phrase: t("When the door of {device} opens", "Quando la porta di {device} si apre")
16801
16807
  }
16802
16808
  ],
16803
16809
  icon: "lock"
@@ -45822,6 +45828,7 @@ method(object({
45822
45828
  kind: "mutation",
45823
45829
  auth: "admin"
45824
45830
  }), method(object({ blockIds: array(string()) }), object({ states: array(CompositionBlockStateSchema) }), { auth: "admin" });
45831
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, 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.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Lock, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
45825
45832
  var NUMBER = {
45826
45833
  kind: "fixed",
45827
45834
  result: ["number"]
@@ -69241,6 +69248,8 @@ var IntegrationWithStateSchema = object({
69241
69248
  name: string(),
69242
69249
  enabled: boolean(),
69243
69250
  info: record(string(), unknown()).readonly(),
69251
+ /** The discovery candidate this integration was set up from (D984). */
69252
+ originStableId: string().optional(),
69244
69253
  createdAt: number(),
69245
69254
  updatedAt: number(),
69246
69255
  processState: string()
@@ -69251,6 +69260,8 @@ var IntegrationLiteSchema = object({
69251
69260
  name: string(),
69252
69261
  enabled: boolean(),
69253
69262
  info: record(string(), unknown()).readonly(),
69263
+ /** The discovery candidate this integration was set up from (D984). */
69264
+ originStableId: string().optional(),
69254
69265
  createdAt: number(),
69255
69266
  updatedAt: number()
69256
69267
  });
@@ -69348,6 +69359,8 @@ var CreateIntegrationInputSchema = object({
69348
69359
  name: string(),
69349
69360
  enabled: boolean().optional(),
69350
69361
  info: record(string(), unknown()).optional(),
69362
+ /** `stableId` of the discovery candidate the form was seeded from (D984). */
69363
+ originStableId: string().optional(),
69351
69364
  settings: record(string(), unknown()).optional(),
69352
69365
  /** Keys of `settings` the form's schema declares secret (by type) — kept in
69353
69366
  * the keychain, not the table (D787). */
@@ -70116,11 +70129,44 @@ var LockControlStatusSchema = object({
70116
70129
  "unlocked",
70117
70130
  "locking",
70118
70131
  "unlocking",
70119
- "jammed"
70132
+ "jammed",
70133
+ "door-open"
70120
70134
  ]),
70121
70135
  /** Ms epoch when the slice was last updated. */
70122
70136
  lastChangedAt: number()
70123
70137
  });
70138
+ /**
70139
+ * "Door contact" Customize extension (D984): the ONE extension that replaces a
70140
+ * native field. `state` is listed in `overridable` for this target, so the
70141
+ * validator and the guard accept it and nothing else.
70142
+ */
70143
+ var lockControlCustomize = {
70144
+ version: 1,
70145
+ overridable: [{
70146
+ path: "state",
70147
+ by: "door-contact"
70148
+ }],
70149
+ targets: [{
70150
+ id: "door-contact",
70151
+ cardinality: "scalar",
70152
+ vocabulary: {
70153
+ cap: "lock-control",
70154
+ stateField: "state"
70155
+ },
70156
+ deviceTypes: [DeviceType.Lock],
70157
+ apply: "replace",
70158
+ path: "state",
70159
+ override: {
70160
+ whenSourceTrue: "door-open",
70161
+ unlessNative: ["jammed"]
70162
+ },
70163
+ sources: [{
70164
+ kind: "binary",
70165
+ transforms: [{ kind: "identity" }]
70166
+ }],
70167
+ sourceReport: { status: "assignment-status" }
70168
+ }]
70169
+ };
70124
70170
  var lockControlCapability = {
70125
70171
  name: "lock-control",
70126
70172
  scope: "device",
@@ -70166,6 +70212,7 @@ var lockControlCapability = {
70166
70212
  * transitions.
70167
70213
  */
70168
70214
  runtimeState: LockControlStatusSchema,
70215
+ customize: lockControlCustomize,
70169
70216
  /**
70170
70217
  * Runtime-state durability: **restored** — a lock left locked must still read locked.
70171
70218
  *
@@ -78615,7 +78662,6 @@ function runningFromMediaPlayer(state, previous, fetchedAt, transitionAt) {
78615
78662
  }
78616
78663
  DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
78617
78664
  SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
78618
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, 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.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
78619
78665
  String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
78620
78666
  DeviceRole.BinarySensor, DeviceRole.MotionSensor;
78621
78667
  new Set(CAP_NAMES);
@@ -94446,6 +94492,7 @@ new Set([
94446
94492
  "locking",
94447
94493
  "unlocking",
94448
94494
  "jammed",
94495
+ "door-open",
94449
94496
  "on",
94450
94497
  "off",
94451
94498
  "home",
@@ -5587,7 +5587,7 @@ var ZodIssueCode = {
5587
5587
  var ZodFirstPartyTypeKind;
5588
5588
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5589
5589
  //#endregion
5590
- //#region ../types/dist/sleep-0RR2wzNB.mjs
5590
+ //#region ../types/dist/sleep-SX9bkW3_.mjs
5591
5591
  /**
5592
5592
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5593
5593
  * window to float samples (D455).
@@ -10226,7 +10226,8 @@ Object.freeze({
10226
10226
  "unlocked",
10227
10227
  "locking",
10228
10228
  "unlocking",
10229
- "jammed"
10229
+ "jammed",
10230
+ "door-open"
10230
10231
  ]
10231
10232
  }],
10232
10233
  "media-player": [
@@ -16797,6 +16798,11 @@ var ACTUATOR_CAP_VOCABULARY = {
16797
16798
  value: "jammed",
16798
16799
  label: t("Jammed", "Inceppata"),
16799
16800
  phrase: t("When {device} jams", "Quando {device} si inceppa")
16801
+ },
16802
+ {
16803
+ value: "door-open",
16804
+ label: t("Door open", "Porta aperta"),
16805
+ phrase: t("When the door of {device} opens", "Quando la porta di {device} si apre")
16800
16806
  }
16801
16807
  ],
16802
16808
  icon: "lock"
@@ -45821,6 +45827,7 @@ method(object({
45821
45827
  kind: "mutation",
45822
45828
  auth: "admin"
45823
45829
  }), method(object({ blockIds: array(string()) }), object({ states: array(CompositionBlockStateSchema) }), { auth: "admin" });
45830
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, 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.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Lock, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
45824
45831
  var NUMBER = {
45825
45832
  kind: "fixed",
45826
45833
  result: ["number"]
@@ -69240,6 +69247,8 @@ var IntegrationWithStateSchema = object({
69240
69247
  name: string(),
69241
69248
  enabled: boolean(),
69242
69249
  info: record(string(), unknown()).readonly(),
69250
+ /** The discovery candidate this integration was set up from (D984). */
69251
+ originStableId: string().optional(),
69243
69252
  createdAt: number(),
69244
69253
  updatedAt: number(),
69245
69254
  processState: string()
@@ -69250,6 +69259,8 @@ var IntegrationLiteSchema = object({
69250
69259
  name: string(),
69251
69260
  enabled: boolean(),
69252
69261
  info: record(string(), unknown()).readonly(),
69262
+ /** The discovery candidate this integration was set up from (D984). */
69263
+ originStableId: string().optional(),
69253
69264
  createdAt: number(),
69254
69265
  updatedAt: number()
69255
69266
  });
@@ -69347,6 +69358,8 @@ var CreateIntegrationInputSchema = object({
69347
69358
  name: string(),
69348
69359
  enabled: boolean().optional(),
69349
69360
  info: record(string(), unknown()).optional(),
69361
+ /** `stableId` of the discovery candidate the form was seeded from (D984). */
69362
+ originStableId: string().optional(),
69350
69363
  settings: record(string(), unknown()).optional(),
69351
69364
  /** Keys of `settings` the form's schema declares secret (by type) — kept in
69352
69365
  * the keychain, not the table (D787). */
@@ -70115,11 +70128,44 @@ var LockControlStatusSchema = object({
70115
70128
  "unlocked",
70116
70129
  "locking",
70117
70130
  "unlocking",
70118
- "jammed"
70131
+ "jammed",
70132
+ "door-open"
70119
70133
  ]),
70120
70134
  /** Ms epoch when the slice was last updated. */
70121
70135
  lastChangedAt: number()
70122
70136
  });
70137
+ /**
70138
+ * "Door contact" Customize extension (D984): the ONE extension that replaces a
70139
+ * native field. `state` is listed in `overridable` for this target, so the
70140
+ * validator and the guard accept it and nothing else.
70141
+ */
70142
+ var lockControlCustomize = {
70143
+ version: 1,
70144
+ overridable: [{
70145
+ path: "state",
70146
+ by: "door-contact"
70147
+ }],
70148
+ targets: [{
70149
+ id: "door-contact",
70150
+ cardinality: "scalar",
70151
+ vocabulary: {
70152
+ cap: "lock-control",
70153
+ stateField: "state"
70154
+ },
70155
+ deviceTypes: [DeviceType.Lock],
70156
+ apply: "replace",
70157
+ path: "state",
70158
+ override: {
70159
+ whenSourceTrue: "door-open",
70160
+ unlessNative: ["jammed"]
70161
+ },
70162
+ sources: [{
70163
+ kind: "binary",
70164
+ transforms: [{ kind: "identity" }]
70165
+ }],
70166
+ sourceReport: { status: "assignment-status" }
70167
+ }]
70168
+ };
70123
70169
  var lockControlCapability = {
70124
70170
  name: "lock-control",
70125
70171
  scope: "device",
@@ -70165,6 +70211,7 @@ var lockControlCapability = {
70165
70211
  * transitions.
70166
70212
  */
70167
70213
  runtimeState: LockControlStatusSchema,
70214
+ customize: lockControlCustomize,
70168
70215
  /**
70169
70216
  * Runtime-state durability: **restored** — a lock left locked must still read locked.
70170
70217
  *
@@ -78614,7 +78661,6 @@ function runningFromMediaPlayer(state, previous, fetchedAt, transitionAt) {
78614
78661
  }
78615
78662
  DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
78616
78663
  SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
78617
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, 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.PetFountain, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Gateway, DeviceType.Camera, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
78618
78664
  String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
78619
78665
  DeviceRole.BinarySensor, DeviceRole.MotionSensor;
78620
78666
  new Set(CAP_NAMES);
@@ -94445,6 +94491,7 @@ new Set([
94445
94491
  "locking",
94446
94492
  "unlocking",
94447
94493
  "jammed",
94494
+ "door-open",
94448
94495
  "on",
94449
94496
  "off",
94450
94497
  "home",
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  enumerable: true
25
25
  }) : target, mod));
26
26
  //#endregion
27
- const require_ha_broker_source = require("../ha-broker-source-D3_ZXq6l.js");
27
+ const require_ha_broker_source = require("../ha-broker-source-B6xSmZ6H.js");
28
28
  let node_crypto = require("node:crypto");
29
29
  require("node:zlib");
30
30
  let node_fs = require("node:fs");
@@ -1030,7 +1030,7 @@ var NATIVE_CAP_PLATFORMS = {
1030
1030
  },
1031
1031
  /**
1032
1032
  * The reason this platform exists. `LockStateSchema` is
1033
- * `locked | unlocked | locking | unlocking | jammed`, and every one of
1033
+ * `locked | unlocked | locking | unlocking | jammed | door-open`, and every one of
1034
1034
  * those is a state Home Assistant's `lock` has — including the one a
1035
1035
  * `switch` silently reports as "unlocked".
1036
1036
  *
@@ -1047,7 +1047,17 @@ var NATIVE_CAP_PLATFORMS = {
1047
1047
  controls: { open: {
1048
1048
  from: "open",
1049
1049
  commandOnly: true
1050
- } }
1050
+ } },
1051
+ /**
1052
+ * `door-open` (D984: the linked door contact reads open) is no state of
1053
+ * Home Assistant's lock, but `open` is — the platform's own word for a
1054
+ * door standing open. The enum is rewritten on the way in, so the enum
1055
+ * sensor beside it keeps the cap's own value.
1056
+ */
1057
+ constants: {
1058
+ state_open: "open",
1059
+ value_template: "{{ 'open' if value == 'door-open' else value }}"
1060
+ }
1051
1061
  },
1052
1062
  /**
1053
1063
  * `AlarmStateSchema` IS Home Assistant's alarm vocabulary, and
@@ -1,4 +1,4 @@
1
- import { $t as array, B as consumableKindOf, Et as sendToExportedTarget, Gt as baseUnitOf, K as deviceExportCapability, Ut as BaseAddon, Xt as isReadingQuantity, Zt as nodePin, _ as PLUG_APPLIANCE_TYPES, bt as runExportedAction, c as COCO_TO_MACRO, cn as unknown, d as ConsumableItemSchema, f as ConsumableStatusSchema, g as MediaPlayerRepeatSchema, gt as pruneDeletedEntities, h as HvacModeSchema, i as AlarmArmModeSchema, in as object, j as buildAddonRouteProvider, l as CameraSwitchIdSchema, m as FanDirectionSchema, on as string, r as listHomeAssistantBrokers, s as CAMERA_SWITCH_ORDER, u as ConsumableFormSchema, un as EventCategory, ut as oauthIntegrationCapability, x as addonRoutesCapability, z as consumableFormOf } from "../ha-broker-source-vytM8SXk.mjs";
1
+ import { $t as array, B as consumableKindOf, Et as sendToExportedTarget, Gt as baseUnitOf, K as deviceExportCapability, Ut as BaseAddon, Xt as isReadingQuantity, Zt as nodePin, _ as PLUG_APPLIANCE_TYPES, bt as runExportedAction, c as COCO_TO_MACRO, cn as unknown, d as ConsumableItemSchema, f as ConsumableStatusSchema, g as MediaPlayerRepeatSchema, gt as pruneDeletedEntities, h as HvacModeSchema, i as AlarmArmModeSchema, in as object, j as buildAddonRouteProvider, l as CameraSwitchIdSchema, m as FanDirectionSchema, on as string, r as listHomeAssistantBrokers, s as CAMERA_SWITCH_ORDER, u as ConsumableFormSchema, un as EventCategory, ut as oauthIntegrationCapability, x as addonRoutesCapability, z as consumableFormOf } from "../ha-broker-source-D9_yzN2c.mjs";
2
2
  import { createHmac, timingSafeEqual } from "node:crypto";
3
3
  import "node:zlib";
4
4
  import "node:fs";
@@ -995,7 +995,7 @@ var NATIVE_CAP_PLATFORMS = {
995
995
  },
996
996
  /**
997
997
  * The reason this platform exists. `LockStateSchema` is
998
- * `locked | unlocked | locking | unlocking | jammed`, and every one of
998
+ * `locked | unlocked | locking | unlocking | jammed | door-open`, and every one of
999
999
  * those is a state Home Assistant's `lock` has — including the one a
1000
1000
  * `switch` silently reports as "unlocked".
1001
1001
  *
@@ -1012,7 +1012,17 @@ var NATIVE_CAP_PLATFORMS = {
1012
1012
  controls: { open: {
1013
1013
  from: "open",
1014
1014
  commandOnly: true
1015
- } }
1015
+ } },
1016
+ /**
1017
+ * `door-open` (D984: the linked door contact reads open) is no state of
1018
+ * Home Assistant's lock, but `open` is — the platform's own word for a
1019
+ * door standing open. The enum is rewritten on the way in, so the enum
1020
+ * sensor beside it keeps the cap's own value.
1021
+ */
1022
+ constants: {
1023
+ state_open: "open",
1024
+ value_template: "{{ 'open' if value == 'door-open' else value }}"
1025
+ }
1016
1026
  },
1017
1027
  /**
1018
1028
  * `AlarmStateSchema` IS Home Assistant's alarm vocabulary, and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homeassistant",
3
- "version": "1.2.641",
3
+ "version": "1.2.642",
4
4
  "description": "Home Assistant device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",