@camstack/addon-provider-homeassistant 1.2.637 → 1.2.639
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 +13 -0
- package/dist/addon.js +13 -4
- package/dist/addon.mjs +13 -4
- package/dist/{dist-DYCWN6ge.js → dist-C_XoeULr.js} +23 -0
- package/dist/{dist-Co6d8Y_P.mjs → dist-Cvz76AD1.mjs} +23 -0
- package/dist/ha-export/ha-export.addon.js +1 -1
- package/dist/ha-export/ha-export.addon.mjs +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.2.639] - 2026-10-29
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Home Assistant state changes reach CamStack once each, not once per listener.
|
|
15
|
+
|
|
16
|
+
## [1.2.638] - 2026-10-29
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Runs in the shared integrations runner with the other low-traffic integration addons
|
|
21
|
+
|
|
10
22
|
## [1.2.637] - 2026-10-29
|
|
11
23
|
|
|
12
24
|
### Added
|
|
@@ -17,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
17
29
|
|
|
18
30
|
- The pet fountain capability is listed as not exported to Home Assistant
|
|
19
31
|
- The exported node memory sensor stays unknown when the node's memory could not be read
|
|
32
|
+
- The Home Assistant export runs in the shared integrations runner with the other low-traffic integration addons, saving one process of memory
|
|
20
33
|
|
|
21
34
|
## [1.2.636] - 2026-10-29
|
|
22
35
|
|
package/dist/addon.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-C_XoeULr.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
|
|
@@ -5354,8 +5354,10 @@ function subscribeEntities(opts) {
|
|
|
5354
5354
|
* the same HA broker for overlapping entity sets. We keep ONE
|
|
5355
5355
|
* upstream `subscribe_entities` to HA with the UNION of every
|
|
5356
5356
|
* active subscription's entity ids, and fan inbound state changes
|
|
5357
|
-
* out via `EventCategory.BrokerMessage`
|
|
5358
|
-
* subscription
|
|
5357
|
+
* out via `EventCategory.BrokerMessage` ONCE per change when at
|
|
5358
|
+
* least one subscription matches (the bus is shared and consumers
|
|
5359
|
+
* filter by `key`). A new subscriber's cache replay is the one
|
|
5360
|
+
* targeted emission: it carries that subscription's id.
|
|
5359
5361
|
* - When the active union changes (subscribe / unsubscribe call),
|
|
5360
5362
|
* we re-issue the upstream subscribe with the new set. HA accepts
|
|
5361
5363
|
* this efficiently (server-side filter).
|
|
@@ -5367,6 +5369,10 @@ function subscribeEntities(opts) {
|
|
|
5367
5369
|
* subscribe's initial `a` (add) frames.
|
|
5368
5370
|
*/
|
|
5369
5371
|
var HA_KIND$1 = "home-assistant";
|
|
5372
|
+
/** `subscriptionId` of a `broker.message` that is not addressed to one
|
|
5373
|
+
* subscription (a live state change fanned out once). The payload type
|
|
5374
|
+
* requires the field; the empty string is the repo convention for "none". */
|
|
5375
|
+
var FANOUT_SUBSCRIPTION_ID = "";
|
|
5370
5376
|
/**
|
|
5371
5377
|
* Curated device-event allowlist for the per-broker bus-event aggregator
|
|
5372
5378
|
* (Case 2). Home Assistant fires arbitrary events on its bus; subscribing
|
|
@@ -5645,7 +5651,10 @@ var HaIntegrationManager = class HaIntegrationManager {
|
|
|
5645
5651
|
for (const entityId of changed) {
|
|
5646
5652
|
const state = next[entityId] ?? null;
|
|
5647
5653
|
if (state === null) continue;
|
|
5648
|
-
for (const sub of this.subscriptions.values()) if (this.subscriptionMatches(sub, entityId))
|
|
5654
|
+
for (const sub of this.subscriptions.values()) if (this.subscriptionMatches(sub, entityId)) {
|
|
5655
|
+
this.emitBrokerMessage(FANOUT_SUBSCRIPTION_ID, entityId, state);
|
|
5656
|
+
break;
|
|
5657
|
+
}
|
|
5649
5658
|
}
|
|
5650
5659
|
}
|
|
5651
5660
|
subscriptionMatches(sub, entityId) {
|
package/dist/addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as lawnMowerControlCapability, $t as object, A as buttonCapability, At as valveCapability, B as coverCapability, Bt as baseUnitOf, C as batteryCapability, Ct as switchCapability, D as brokerCapability, Dt as tryConvertUnit, E as brightnessCapability, Et as tryConvertDelta, F as connectivityCapability, Ft as DeviceRole, G as eventEmitterCapability, H as deviceAdoptionCapability, Ht as defineEntryKind, It as DeviceType, J as gasCapability, Jt as array, K as fanControlCapability, Lt as errMsg, M as carbonMonoxideCapability, Mt as waterHeaterCapability, N as climateControlCapability, Nt as weatherCapability, O as buildAddonRouteProvider, Ot as updateCapability, P as colorCapability, Pt as DeviceFeature, Q as ingestReading, Qt as number, R as contactCapability, S as automationControlCapability, St as smokeCapability, T as binaryCapability, Tt as temperatureSensorCapability, Ut as defineRecordKinds, V as deviceAdminLinkCapability, Vt as createEvent, W as enumSensorCapability, Wt as entryBody, X as humiditySensorCapability, Xt as discriminatedUnion, Y as humidifierCapability, Yt as boolean, Z as imageCapability, Zt as literal, _ as accessoriesCapability, _t as runningFromMediaPlayer, an as EventCategory, at as notifierCapability, b as alarmPanelCapability, bt as scriptRunnerCapability, ct as parseAdminBase, dt as presenceCapability, en as record, et as lockControlCapability, ft as pressureSensorCapability, g as TargetSchema, gt as runningFromLawnMower, h as RUNNING_STATE_COLD, in as url, it as notificationOutputCapability, j as calendarSourceCapability, jt as vibrationCapability, k as buildDeviceAdminUrl, kt as vacuumControlCapability, lt as powerMeterCapability, mt as quantityFromUnit, n as BaseDevice, nn as union, nt as motionCapability, ot as numericSensorCapability, q as floodCapability, qt as _enum, r as BaseDeviceProvider, rn as unknown, rt as normalizeUnit, tn as string, tt as mediaPlayerCapability, u as EnumSensorDateTimeFormatSchema, ut as prepareNotification, v as addonRoutesCapability, vt as runningFromVacuumState, w as bestLocationMatch, wt as tamperCapability, x as ambientLightSensorCapability, y as airQualitySensorCapability, yt as runningStateCapability, z as controlCapability, zt as RecordSecretUnavailableError } from "./dist-
|
|
1
|
+
import { $ as lawnMowerControlCapability, $t as object, A as buttonCapability, At as valveCapability, B as coverCapability, Bt as baseUnitOf, C as batteryCapability, Ct as switchCapability, D as brokerCapability, Dt as tryConvertUnit, E as brightnessCapability, Et as tryConvertDelta, F as connectivityCapability, Ft as DeviceRole, G as eventEmitterCapability, H as deviceAdoptionCapability, Ht as defineEntryKind, It as DeviceType, J as gasCapability, Jt as array, K as fanControlCapability, Lt as errMsg, M as carbonMonoxideCapability, Mt as waterHeaterCapability, N as climateControlCapability, Nt as weatherCapability, O as buildAddonRouteProvider, Ot as updateCapability, P as colorCapability, Pt as DeviceFeature, Q as ingestReading, Qt as number, R as contactCapability, S as automationControlCapability, St as smokeCapability, T as binaryCapability, Tt as temperatureSensorCapability, Ut as defineRecordKinds, V as deviceAdminLinkCapability, Vt as createEvent, W as enumSensorCapability, Wt as entryBody, X as humiditySensorCapability, Xt as discriminatedUnion, Y as humidifierCapability, Yt as boolean, Z as imageCapability, Zt as literal, _ as accessoriesCapability, _t as runningFromMediaPlayer, an as EventCategory, at as notifierCapability, b as alarmPanelCapability, bt as scriptRunnerCapability, ct as parseAdminBase, dt as presenceCapability, en as record, et as lockControlCapability, ft as pressureSensorCapability, g as TargetSchema, gt as runningFromLawnMower, h as RUNNING_STATE_COLD, in as url, it as notificationOutputCapability, j as calendarSourceCapability, jt as vibrationCapability, k as buildDeviceAdminUrl, kt as vacuumControlCapability, lt as powerMeterCapability, mt as quantityFromUnit, n as BaseDevice, nn as union, nt as motionCapability, ot as numericSensorCapability, q as floodCapability, qt as _enum, r as BaseDeviceProvider, rn as unknown, rt as normalizeUnit, tn as string, tt as mediaPlayerCapability, u as EnumSensorDateTimeFormatSchema, ut as prepareNotification, v as addonRoutesCapability, vt as runningFromVacuumState, w as bestLocationMatch, wt as tamperCapability, x as ambientLightSensorCapability, y as airQualitySensorCapability, yt as runningStateCapability, z as controlCapability, zt as RecordSecretUnavailableError } from "./dist-Cvz76AD1.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
|
|
@@ -5353,8 +5353,10 @@ function subscribeEntities(opts) {
|
|
|
5353
5353
|
* the same HA broker for overlapping entity sets. We keep ONE
|
|
5354
5354
|
* upstream `subscribe_entities` to HA with the UNION of every
|
|
5355
5355
|
* active subscription's entity ids, and fan inbound state changes
|
|
5356
|
-
* out via `EventCategory.BrokerMessage`
|
|
5357
|
-
* subscription
|
|
5356
|
+
* out via `EventCategory.BrokerMessage` ONCE per change when at
|
|
5357
|
+
* least one subscription matches (the bus is shared and consumers
|
|
5358
|
+
* filter by `key`). A new subscriber's cache replay is the one
|
|
5359
|
+
* targeted emission: it carries that subscription's id.
|
|
5358
5360
|
* - When the active union changes (subscribe / unsubscribe call),
|
|
5359
5361
|
* we re-issue the upstream subscribe with the new set. HA accepts
|
|
5360
5362
|
* this efficiently (server-side filter).
|
|
@@ -5366,6 +5368,10 @@ function subscribeEntities(opts) {
|
|
|
5366
5368
|
* subscribe's initial `a` (add) frames.
|
|
5367
5369
|
*/
|
|
5368
5370
|
var HA_KIND$1 = "home-assistant";
|
|
5371
|
+
/** `subscriptionId` of a `broker.message` that is not addressed to one
|
|
5372
|
+
* subscription (a live state change fanned out once). The payload type
|
|
5373
|
+
* requires the field; the empty string is the repo convention for "none". */
|
|
5374
|
+
var FANOUT_SUBSCRIPTION_ID = "";
|
|
5369
5375
|
/**
|
|
5370
5376
|
* Curated device-event allowlist for the per-broker bus-event aggregator
|
|
5371
5377
|
* (Case 2). Home Assistant fires arbitrary events on its bus; subscribing
|
|
@@ -5644,7 +5650,10 @@ var HaIntegrationManager = class HaIntegrationManager {
|
|
|
5644
5650
|
for (const entityId of changed) {
|
|
5645
5651
|
const state = next[entityId] ?? null;
|
|
5646
5652
|
if (state === null) continue;
|
|
5647
|
-
for (const sub of this.subscriptions.values()) if (this.subscriptionMatches(sub, entityId))
|
|
5653
|
+
for (const sub of this.subscriptions.values()) if (this.subscriptionMatches(sub, entityId)) {
|
|
5654
|
+
this.emitBrokerMessage(FANOUT_SUBSCRIPTION_ID, entityId, state);
|
|
5655
|
+
break;
|
|
5656
|
+
}
|
|
5648
5657
|
}
|
|
5649
5658
|
}
|
|
5650
5659
|
subscriptionMatches(sub, entityId) {
|
|
@@ -55875,6 +55875,12 @@ var ServerUpdateActionResultSchema = object({
|
|
|
55875
55875
|
*/
|
|
55876
55876
|
blockers: array(UpdateBlockerSchema).optional()
|
|
55877
55877
|
});
|
|
55878
|
+
var LaunchOverridesSchema = object({
|
|
55879
|
+
/** The persisted heap ceiling in MB, or `null` when none is set. */
|
|
55880
|
+
heapMb: number().int().nullable() });
|
|
55881
|
+
var SetLaunchOverridesResultSchema = LaunchOverridesSchema.extend({
|
|
55882
|
+
/** Always true: the override is read at launch, not by the running process. */
|
|
55883
|
+
restartRequired: boolean() });
|
|
55878
55884
|
method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
|
|
55879
55885
|
kind: "mutation",
|
|
55880
55886
|
auth: "admin"
|
|
@@ -55897,6 +55903,9 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
55897
55903
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
55898
55904
|
kind: "mutation",
|
|
55899
55905
|
auth: "admin"
|
|
55906
|
+
}), method(_void(), LaunchOverridesSchema, { auth: "admin" }), method(object({ heapMb: number().int().min(512).max(65536).nullable() }), SetLaunchOverridesResultSchema, {
|
|
55907
|
+
kind: "mutation",
|
|
55908
|
+
auth: "admin"
|
|
55900
55909
|
});
|
|
55901
55910
|
/**
|
|
55902
55911
|
* `smtp-provider` — pluggable email delivery surface.
|
|
@@ -82184,6 +82193,13 @@ Object.freeze({
|
|
|
82184
82193
|
access: "create",
|
|
82185
82194
|
role: "admin"
|
|
82186
82195
|
},
|
|
82196
|
+
"serverManagement.getLaunchOverrides": {
|
|
82197
|
+
capName: "server-management",
|
|
82198
|
+
capScope: "system",
|
|
82199
|
+
addonId: null,
|
|
82200
|
+
access: "view",
|
|
82201
|
+
role: "admin"
|
|
82202
|
+
},
|
|
82187
82203
|
"serverManagement.getServerPackageStatus": {
|
|
82188
82204
|
capName: "server-management",
|
|
82189
82205
|
capScope: "system",
|
|
@@ -82205,6 +82221,13 @@ Object.freeze({
|
|
|
82205
82221
|
access: "create",
|
|
82206
82222
|
role: "admin"
|
|
82207
82223
|
},
|
|
82224
|
+
"serverManagement.setLaunchOverrides": {
|
|
82225
|
+
capName: "server-management",
|
|
82226
|
+
capScope: "system",
|
|
82227
|
+
addonId: null,
|
|
82228
|
+
access: "create",
|
|
82229
|
+
role: "admin"
|
|
82230
|
+
},
|
|
82208
82231
|
"settingsStore.aggregate": {
|
|
82209
82232
|
capName: "settings-store",
|
|
82210
82233
|
capScope: "system",
|
|
@@ -55874,6 +55874,12 @@ var ServerUpdateActionResultSchema = object({
|
|
|
55874
55874
|
*/
|
|
55875
55875
|
blockers: array(UpdateBlockerSchema).optional()
|
|
55876
55876
|
});
|
|
55877
|
+
var LaunchOverridesSchema = object({
|
|
55878
|
+
/** The persisted heap ceiling in MB, or `null` when none is set. */
|
|
55879
|
+
heapMb: number().int().nullable() });
|
|
55880
|
+
var SetLaunchOverridesResultSchema = LaunchOverridesSchema.extend({
|
|
55881
|
+
/** Always true: the override is read at launch, not by the running process. */
|
|
55882
|
+
restartRequired: boolean() });
|
|
55877
55883
|
method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
|
|
55878
55884
|
kind: "mutation",
|
|
55879
55885
|
auth: "admin"
|
|
@@ -55896,6 +55902,9 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
|
|
|
55896
55902
|
}), method(_void(), ServerUpdateActionResultSchema, {
|
|
55897
55903
|
kind: "mutation",
|
|
55898
55904
|
auth: "admin"
|
|
55905
|
+
}), method(_void(), LaunchOverridesSchema, { auth: "admin" }), method(object({ heapMb: number().int().min(512).max(65536).nullable() }), SetLaunchOverridesResultSchema, {
|
|
55906
|
+
kind: "mutation",
|
|
55907
|
+
auth: "admin"
|
|
55899
55908
|
});
|
|
55900
55909
|
/**
|
|
55901
55910
|
* `smtp-provider` — pluggable email delivery surface.
|
|
@@ -82183,6 +82192,13 @@ Object.freeze({
|
|
|
82183
82192
|
access: "create",
|
|
82184
82193
|
role: "admin"
|
|
82185
82194
|
},
|
|
82195
|
+
"serverManagement.getLaunchOverrides": {
|
|
82196
|
+
capName: "server-management",
|
|
82197
|
+
capScope: "system",
|
|
82198
|
+
addonId: null,
|
|
82199
|
+
access: "view",
|
|
82200
|
+
role: "admin"
|
|
82201
|
+
},
|
|
82186
82202
|
"serverManagement.getServerPackageStatus": {
|
|
82187
82203
|
capName: "server-management",
|
|
82188
82204
|
capScope: "system",
|
|
@@ -82204,6 +82220,13 @@ Object.freeze({
|
|
|
82204
82220
|
access: "create",
|
|
82205
82221
|
role: "admin"
|
|
82206
82222
|
},
|
|
82223
|
+
"serverManagement.setLaunchOverrides": {
|
|
82224
|
+
capName: "server-management",
|
|
82225
|
+
capScope: "system",
|
|
82226
|
+
addonId: null,
|
|
82227
|
+
access: "create",
|
|
82228
|
+
role: "admin"
|
|
82229
|
+
},
|
|
82207
82230
|
"settingsStore.aggregate": {
|
|
82208
82231
|
capName: "settings-store",
|
|
82209
82232
|
capScope: "system",
|
|
@@ -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_dist = require("../dist-
|
|
27
|
+
const require_dist = require("../dist-C_XoeULr.js");
|
|
28
28
|
let node_crypto = require("node:crypto");
|
|
29
29
|
require("node:zlib");
|
|
30
30
|
let node_fs = require("node:fs");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $t as object, Bt as baseUnitOf, Gt as isReadingQuantity, I as consumableFormOf, Jt as array, Kt as nodePin, L as consumableKindOf, O as buildAddonRouteProvider, Rt as BaseAddon, U as deviceExportCapability, a as COCO_TO_MACRO, an as EventCategory, c as ConsumableItemSchema, d as FanDirectionSchema, f as HvacModeSchema, ht as runExportedAction, i as CAMERA_SWITCH_ORDER, l as ConsumableStatusSchema, m as PLUG_APPLIANCE_TYPES, o as CameraSwitchIdSchema, p as MediaPlayerRepeatSchema, pt as pruneDeletedEntities, rn as unknown, s as ConsumableFormSchema, st as oauthIntegrationCapability, t as AlarmArmModeSchema, tn as string, v as addonRoutesCapability, xt as sendToExportedTarget } from "../dist-
|
|
1
|
+
import { $t as object, Bt as baseUnitOf, Gt as isReadingQuantity, I as consumableFormOf, Jt as array, Kt as nodePin, L as consumableKindOf, O as buildAddonRouteProvider, Rt as BaseAddon, U as deviceExportCapability, a as COCO_TO_MACRO, an as EventCategory, c as ConsumableItemSchema, d as FanDirectionSchema, f as HvacModeSchema, ht as runExportedAction, i as CAMERA_SWITCH_ORDER, l as ConsumableStatusSchema, m as PLUG_APPLIANCE_TYPES, o as CameraSwitchIdSchema, p as MediaPlayerRepeatSchema, pt as pruneDeletedEntities, rn as unknown, s as ConsumableFormSchema, st as oauthIntegrationCapability, t as AlarmArmModeSchema, tn as string, v as addonRoutesCapability, xt as sendToExportedTarget } from "../dist-Cvz76AD1.mjs";
|
|
2
2
|
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
3
3
|
import "node:zlib";
|
|
4
4
|
import "node:fs";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-homeassistant",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.639",
|
|
4
4
|
"description": "Home Assistant device provider addon for CamStack",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|
|
@@ -106,7 +106,8 @@
|
|
|
106
106
|
"icon": "assets/icon.svg",
|
|
107
107
|
"color": "#41bdf5",
|
|
108
108
|
"execution": {
|
|
109
|
-
"placement": "hub-only"
|
|
109
|
+
"placement": "hub-only",
|
|
110
|
+
"group": "integrations"
|
|
110
111
|
},
|
|
111
112
|
"capabilities": [
|
|
112
113
|
{
|