@digital-alchemy/hass 24.8.1 → 24.9.1
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/dynamic.d.ts +5 -4
- package/dist/extensions/area.extension.js +1 -1
- package/dist/extensions/call-proxy.extension.js +10 -0
- package/dist/extensions/call-proxy.extension.js.map +1 -1
- package/dist/extensions/config.extension.d.ts +2 -1
- package/dist/extensions/config.extension.js +7 -2
- package/dist/extensions/config.extension.js.map +1 -1
- package/dist/extensions/device.extension.js +1 -1
- package/dist/extensions/entity.extension.js +1 -1
- package/dist/extensions/floor.extension.js +1 -1
- package/dist/extensions/id-by.extension.js +14 -2
- package/dist/extensions/id-by.extension.js.map +1 -1
- package/dist/extensions/label.extension.js +1 -1
- package/dist/extensions/reference.extension.d.ts +1 -1
- package/dist/extensions/reference.extension.js +47 -1
- package/dist/extensions/reference.extension.js.map +1 -1
- package/dist/extensions/zone.extension.js +1 -1
- package/dist/hass.module.d.ts +1 -1
- package/dist/hass.module.js +2 -2
- package/dist/helpers/notify.helper.d.ts +76 -25
- package/dist/testing/area.spec.js +1 -1
- package/dist/testing/device.spec.js +1 -1
- package/dist/testing/entity.spec.js +2 -2
- package/dist/testing/floor.spec.js +1 -1
- package/dist/testing/id-by.spec.js +22 -3
- package/dist/testing/id-by.spec.js.map +1 -1
- package/dist/testing/label.spec.js +1 -1
- package/dist/testing/ref-by.spec.js +311 -226
- package/dist/testing/ref-by.spec.js.map +1 -1
- package/dist/testing/workflow.spec.js +63 -0
- package/dist/testing/workflow.spec.js.map +1 -1
- package/dist/testing/zone.spec.js +1 -1
- package/package.json +29 -5
package/dist/dynamic.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AndroidNotificationData, AppleNotificationData, NotificationData, PICK_ENTITY } from "./helpers";
|
|
2
2
|
type PICK_FROM_PLATFORM<ID extends TPlatformId, DOMAIN extends TRawDomains = TRawDomains> = Extract<REGISTRY_SETUP["platform"][`_${ID}`], PICK_ENTITY<DOMAIN>>;
|
|
3
3
|
export type ENTITY_SETUP = {
|
|
4
4
|
"button.example": {
|
|
@@ -2326,7 +2326,7 @@ export type iCallService = {
|
|
|
2326
2326
|
* > object: null
|
|
2327
2327
|
* > ```
|
|
2328
2328
|
*/
|
|
2329
|
-
data?:
|
|
2329
|
+
data?: NotificationData & (AndroidNotificationData | AppleNotificationData);
|
|
2330
2330
|
/**
|
|
2331
2331
|
* ## message
|
|
2332
2332
|
*
|
|
@@ -2395,7 +2395,7 @@ export type iCallService = {
|
|
|
2395
2395
|
* > object: null
|
|
2396
2396
|
* > ```
|
|
2397
2397
|
*/
|
|
2398
|
-
data?:
|
|
2398
|
+
data?: NotificationData & (AndroidNotificationData | AppleNotificationData);
|
|
2399
2399
|
/**
|
|
2400
2400
|
* ## Message
|
|
2401
2401
|
*
|
|
@@ -3700,6 +3700,7 @@ export type iCallService = {
|
|
|
3700
3700
|
};
|
|
3701
3701
|
export type REGISTRY_SETUP = {
|
|
3702
3702
|
area: {
|
|
3703
|
+
_test: "switch.living_room_mood_lights";
|
|
3703
3704
|
_living_room: "switch.living_room_mood_lights";
|
|
3704
3705
|
_kitchen: "switch.kitchen_cabinets";
|
|
3705
3706
|
_bedroom: "switch.bedroom_lamp" | "light.bedroom_ceiling_fan";
|
|
@@ -3725,7 +3726,7 @@ export type REGISTRY_SETUP = {
|
|
|
3725
3726
|
_e58841e47cf86097b310316e55d6bb12: "calendar.united_states_tx";
|
|
3726
3727
|
};
|
|
3727
3728
|
};
|
|
3728
|
-
export type TAreaId = "living_room" | "kitchen" | "bedroom";
|
|
3729
|
+
export type TAreaId = "living_room" | "kitchen" | "bedroom" | "test";
|
|
3729
3730
|
export type TDeviceId = "308e39cf50a9fc6c30b4110724ed1f2e" | "e58841e47cf86097b310316e55d6bb12";
|
|
3730
3731
|
export type TFloorId = "downstairs" | "upstairs";
|
|
3731
3732
|
export type TLabelId = "synapse" | "test";
|
|
@@ -19,7 +19,7 @@ function Area({ hass, context, config, logger, event, lifecycle, }) {
|
|
|
19
19
|
context,
|
|
20
20
|
event_type: "area_registry_updated",
|
|
21
21
|
async exec() {
|
|
22
|
-
await (0, core_1.
|
|
22
|
+
await (0, core_1.debounce)(helpers_1.AREA_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
23
23
|
hass.area.current = await hass.area.list();
|
|
24
24
|
logger.debug(`area registry updated`);
|
|
25
25
|
event.emit(helpers_1.AREA_REGISTRY_UPDATED);
|
|
@@ -78,6 +78,16 @@ function CallProxy({ logger, lifecycle, internal, hass, config, }) {
|
|
|
78
78
|
}
|
|
79
79
|
return rawProxy[domain];
|
|
80
80
|
},
|
|
81
|
+
has(_, property) {
|
|
82
|
+
return property in rawProxy;
|
|
83
|
+
},
|
|
84
|
+
ownKeys() {
|
|
85
|
+
return Object.keys(rawProxy);
|
|
86
|
+
},
|
|
87
|
+
set() {
|
|
88
|
+
// lol, no
|
|
89
|
+
return false;
|
|
90
|
+
},
|
|
81
91
|
});
|
|
82
92
|
}
|
|
83
93
|
return buildCallProxy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-proxy.extension.js","sourceRoot":"","sources":["../../src/extensions/call-proxy.extension.ts"],"names":[],"mappings":";;AAUA,
|
|
1
|
+
{"version":3,"file":"call-proxy.extension.js","sourceRoot":"","sources":["../../src/extensions/call-proxy.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
2
|
import { ALL_SERVICE_DOMAINS, HassServiceDTO, iCallService } from "..";
|
|
3
|
-
export declare
|
|
3
|
+
export declare const SERVICE_LIST_UPDATED = "SERVICE_LIST_UPDATED";
|
|
4
|
+
export declare function Configure({ logger, lifecycle, event, hass, config, internal, }: TServiceParams): {
|
|
4
5
|
getServices: () => HassServiceDTO[];
|
|
5
6
|
isService: <DOMAIN extends ALL_SERVICE_DOMAINS>(domain: DOMAIN, service: string) => service is Extract<keyof iCallService[DOMAIN], string>;
|
|
6
7
|
loadServiceList: (recursion?: number) => Promise<void>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SERVICE_LIST_UPDATED = void 0;
|
|
3
4
|
exports.Configure = Configure;
|
|
4
5
|
/* eslint-disable @typescript-eslint/no-magic-numbers */
|
|
5
6
|
const core_1 = require("@digital-alchemy/core");
|
|
@@ -7,7 +8,8 @@ const process_1 = require("process");
|
|
|
7
8
|
const __1 = require("..");
|
|
8
9
|
const MAX_ATTEMPTS = 50;
|
|
9
10
|
const FAILED = 1;
|
|
10
|
-
|
|
11
|
+
exports.SERVICE_LIST_UPDATED = "SERVICE_LIST_UPDATED";
|
|
12
|
+
function Configure({ logger, lifecycle, event, hass, config, internal, }) {
|
|
11
13
|
lifecycle.onPreInit(() => {
|
|
12
14
|
// HASSIO_TOKEN provided by home assistant to addons
|
|
13
15
|
// SUPERVISOR_TOKEN used as alias elsewhere
|
|
@@ -63,7 +65,10 @@ function Configure({ logger, lifecycle, hass, config, internal, }) {
|
|
|
63
65
|
await (0, core_1.sleep)(config.hass.RETRY_INTERVAL * core_1.SECOND);
|
|
64
66
|
await loadServiceList(recursion + core_1.INCREMENT);
|
|
65
67
|
}
|
|
66
|
-
|
|
68
|
+
else {
|
|
69
|
+
event.emit(exports.SERVICE_LIST_UPDATED, services);
|
|
70
|
+
checkedServices = new Map();
|
|
71
|
+
}
|
|
67
72
|
}
|
|
68
73
|
let checkedServices = new Map();
|
|
69
74
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.extension.js","sourceRoot":"","sources":["../../src/extensions/config.extension.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.extension.js","sourceRoot":"","sources":["../../src/extensions/config.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ function Device({ hass, config, context, logger, lifecycle, event, }) {
|
|
|
20
20
|
context,
|
|
21
21
|
event_type: "device_registry_updated",
|
|
22
22
|
async exec() {
|
|
23
|
-
await (0, core_1.
|
|
23
|
+
await (0, core_1.debounce)(helpers_1.DEVICE_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
24
24
|
hass.device.current = await hass.device.list();
|
|
25
25
|
logger.debug(`device registry updated`);
|
|
26
26
|
event.emit(helpers_1.DEVICE_REGISTRY_UPDATED);
|
|
@@ -200,7 +200,7 @@ function EntityManager({ logger, hass, config, lifecycle, event, context, intern
|
|
|
200
200
|
context,
|
|
201
201
|
event_type: "entity_registry_updated",
|
|
202
202
|
async exec() {
|
|
203
|
-
await (0, core_1.
|
|
203
|
+
await (0, core_1.debounce)(__1.ENTITY_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
204
204
|
logger.debug("entity registry updated");
|
|
205
205
|
hass.entity.registry.current = await hass.entity.registry.list();
|
|
206
206
|
event.emit(__1.ENTITY_REGISTRY_UPDATED);
|
|
@@ -19,7 +19,7 @@ function Floor({ hass, config, context, event, logger, lifecycle, }) {
|
|
|
19
19
|
context,
|
|
20
20
|
event_type: "floor_registry_updated",
|
|
21
21
|
async exec() {
|
|
22
|
-
await (0, core_1.
|
|
22
|
+
await (0, core_1.debounce)(helpers_1.FLOOR_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
23
23
|
hass.floor.current = await hass.floor.list();
|
|
24
24
|
logger.debug(`floor registry updated`);
|
|
25
25
|
event.emit(helpers_1.FLOOR_REGISTRY_UPDATED);
|
|
@@ -34,9 +34,21 @@ function IDByExtension({ hass, logger }) {
|
|
|
34
34
|
// * area
|
|
35
35
|
function area(area, ...domains) {
|
|
36
36
|
hass.entity.warnEarly("area");
|
|
37
|
-
|
|
37
|
+
// find entities are associated with the area directly
|
|
38
|
+
const fromEntity = hass.entity.registry.current
|
|
38
39
|
.filter(i => i.area_id === area)
|
|
39
|
-
.map(i => i.entity_id)
|
|
40
|
+
.map(i => i.entity_id);
|
|
41
|
+
// identify devices
|
|
42
|
+
const devices = new Set(hass.device.current
|
|
43
|
+
.filter(device => device.area_id === area)
|
|
44
|
+
.map(i => i.id));
|
|
45
|
+
// extract entities associated with device, that have not been assigned to a room
|
|
46
|
+
const fromDevice = hass.entity.registry.current
|
|
47
|
+
.filter(entity => devices.has(entity.device_id) && core_1.is.empty(entity.area_id))
|
|
48
|
+
.map(i => i.entity_id);
|
|
49
|
+
return process(
|
|
50
|
+
// merge lists
|
|
51
|
+
core_1.is.unique([...fromEntity, ...fromDevice]), domains);
|
|
40
52
|
}
|
|
41
53
|
// * device
|
|
42
54
|
function device(device, ...domains) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id-by.extension.js","sourceRoot":"","sources":["../../src/extensions/id-by.extension.ts"],"names":[],"mappings":";;AAkCA,
|
|
1
|
+
{"version":3,"file":"id-by.extension.js","sourceRoot":"","sources":["../../src/extensions/id-by.extension.ts"],"names":[],"mappings":";;AAkCA,sCAiIC;AAnKD,gDAA2D;AAwB3D,MAAM,OAAO,GAAG,CACd,GAAU,EACV,OAAsB,EACtB,EAAE;IACF,IAAI,CAAC,SAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAE,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,SAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAkB;IAC5D,UAAU;IACV,SAAS,QAAQ,CAA6B,MAAc;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAChD,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,EAAE,EAAyB,CAC/C,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,SAAS,SAAS,CAMhB,SAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CACE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACzE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,EAAE,SAAS,CAAC;IAC3B,CAAC;IAED,UAAU;IACV,SAAS,KAAK,CACZ,KAAY,EACZ,GAAG,OAAiB;QAEpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,OAAO,CACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAA2C,CAAC,EAC1D,OAAO,CACR,CAAC;IACJ,CAAC;IAED,SAAS;IACT,SAAS,IAAI,CACX,IAAU,EACV,GAAG,OAAiB;QAEpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE9B,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;aAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEzB,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,IAAI,CAAC,MAAM,CAAC,OAAO;aAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClB,CAAC;QAEF,iFAAiF;QACjF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;aAC5C,MAAM,CACL,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,SAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CACpE;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEzB,OAAO,OAAO;QACZ,cAAc;QACd,SAAE,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,UAAU,CAAC,CAAC,EACzC,OAAO,CAC0B,CAAC;IACtC,CAAC;IAED,WAAW;IACX,SAAS,MAAM,CACb,MAAc,EACd,GAAG,OAAiB;QAEpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,OAAO,CACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAA6C,CAAC,EAC5D,OAAO,CACR,CAAC;IACJ,CAAC;IAED,UAAU;IACV,SAAS,KAAK,CACZ,KAAY,EACZ,GAAG,OAAiB;QAEpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACxE,CAAC;QACF,OAAO,OAAO,CACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAA2C,CAAC,EAC1D,OAAO,CACR,CAAC;IACJ,CAAC;IAED,aAAa;IACb,SAAS,QAAQ,CACf,QAAkB,EAClB,GAAG,OAAiB;QAEpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,OAAO,CACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAiD,CAAC,EAChE,OAAO,CACR,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,QAAQ;QAChB,KAAK;QACL,KAAK;QACL,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -19,7 +19,7 @@ function Label({ hass, config, logger, lifecycle, event, context, }) {
|
|
|
19
19
|
context,
|
|
20
20
|
event_type: "label_registry_updated",
|
|
21
21
|
async exec() {
|
|
22
|
-
await (0, core_1.
|
|
22
|
+
await (0, core_1.debounce)(helpers_1.LABEL_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
23
23
|
hass.label.current = await hass.label.list();
|
|
24
24
|
logger.debug(`label registry updated`);
|
|
25
25
|
event.emit(helpers_1.LABEL_REGISTRY_UPDATED);
|
|
@@ -9,5 +9,5 @@ export declare function ReferenceExtension({ hass, logger, internal, event, }: T
|
|
|
9
9
|
id: <ENTITY_ID extends ANY_ENTITY>(entity_id: ENTITY_ID) => ByIdProxy<ENTITY_ID>;
|
|
10
10
|
label: <LABEL extends TLabelId, DOMAINS extends TRawDomains = TRawDomains>(label: LABEL, ...domains: DOMAINS[]) => ByIdProxy<PICK_FROM_LABEL<LABEL, DOMAINS>>[];
|
|
11
11
|
platform: <PLATFORM extends TPlatformId, DOMAINS extends TRawDomains = TRawDomains>(platform: PLATFORM, ...domains: DOMAINS[]) => ByIdProxy<PICK_FROM_PLATFORM<PLATFORM, DOMAINS>>[];
|
|
12
|
-
unique_id: <UNIQUE_ID extends TUniqueId, ENTITY_ID extends Extract<TUniqueIDMapping[UNIQUE_ID], ANY_ENTITY> = Extract<TUniqueIDMapping[UNIQUE_ID], import("
|
|
12
|
+
unique_id: <UNIQUE_ID extends TUniqueId, ENTITY_ID extends Extract<TUniqueIDMapping[UNIQUE_ID], ANY_ENTITY> = Extract<TUniqueIDMapping[UNIQUE_ID], import("..").TRawEntityIds>>(unique_id: UNIQUE_ID) => ByIdProxy<ENTITY_ID>;
|
|
13
13
|
};
|
|
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const core_1 = require("@digital-alchemy/core");
|
|
6
6
|
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
7
7
|
const validator_1 = require("validator");
|
|
8
|
+
const __1 = require("..");
|
|
8
9
|
const helpers_1 = require("../helpers");
|
|
9
10
|
function ReferenceExtension({ hass, logger, internal, event, }) {
|
|
10
11
|
const ENTITY_PROXIES = new Map();
|
|
@@ -35,7 +36,44 @@ function ReferenceExtension({ hass, logger, internal, event, }) {
|
|
|
35
36
|
function byId(entity_id) {
|
|
36
37
|
const entity_domain = (0, helpers_1.domain)(entity_id);
|
|
37
38
|
if (!ENTITY_PROXIES.has(entity_id)) {
|
|
38
|
-
const thing = hass.entity.getCurrentState(entity_id);
|
|
39
|
+
const { ...thing } = hass.entity.getCurrentState(entity_id);
|
|
40
|
+
let loaded = false;
|
|
41
|
+
function keys() {
|
|
42
|
+
const entityDomain = (0, helpers_1.domain)(entity_id);
|
|
43
|
+
return [
|
|
44
|
+
"attributes",
|
|
45
|
+
"entity_id",
|
|
46
|
+
"history",
|
|
47
|
+
"last",
|
|
48
|
+
"nextState",
|
|
49
|
+
"once",
|
|
50
|
+
"onUpdate",
|
|
51
|
+
"previous",
|
|
52
|
+
"removeAllListeners",
|
|
53
|
+
"state",
|
|
54
|
+
"waitForState",
|
|
55
|
+
...hass.configure
|
|
56
|
+
.getServices()
|
|
57
|
+
.filter(({ domain }) => domain === entityDomain)
|
|
58
|
+
.flatMap(i => Object.keys(i.services))
|
|
59
|
+
.sort((a, b) => (a > b ? core_1.UP : core_1.DOWN)),
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
function appendKeys(force = false) {
|
|
63
|
+
if (loaded && !force) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Not gonna build types for this, and ts-expect-error fails in jest
|
|
67
|
+
// This is a weird hack for an obscure feature, so sue me
|
|
68
|
+
//
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
keys().forEach(i => (thing[i] ??= () => { }));
|
|
72
|
+
if (!core_1.is.empty(hass.configure.getServices())) {
|
|
73
|
+
loaded = true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
event.on(__1.SERVICE_LIST_UPDATED, () => appendKeys(true));
|
|
39
77
|
ENTITY_PROXIES.set(entity_id,
|
|
40
78
|
// just because you can't do generics properly....
|
|
41
79
|
new Proxy(thing, {
|
|
@@ -140,6 +178,14 @@ function ReferenceExtension({ hass, logger, internal, event, }) {
|
|
|
140
178
|
}
|
|
141
179
|
return proxyGetLogic(entity_id, property);
|
|
142
180
|
},
|
|
181
|
+
has(_, property) {
|
|
182
|
+
appendKeys();
|
|
183
|
+
return property in thing;
|
|
184
|
+
},
|
|
185
|
+
ownKeys() {
|
|
186
|
+
appendKeys();
|
|
187
|
+
return Object.keys(thing);
|
|
188
|
+
},
|
|
143
189
|
set(_, property, value) {
|
|
144
190
|
// * state
|
|
145
191
|
if (property === "state") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.extension.js","sourceRoot":"","sources":["../../src/extensions/reference.extension.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"reference.extension.js","sourceRoot":"","sources":["../../src/extensions/reference.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ function Zone({ config, hass, event, logger, context, lifecycle, }) {
|
|
|
19
19
|
context,
|
|
20
20
|
event_type: "zone_registry_updated",
|
|
21
21
|
async exec() {
|
|
22
|
-
await (0, core_1.
|
|
22
|
+
await (0, core_1.debounce)(helpers_1.ZONE_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
23
23
|
hass.zone.current = await hass.zone.list();
|
|
24
24
|
logger.debug(`zone registry updated`);
|
|
25
25
|
event.emit(helpers_1.ZONE_REGISTRY_UPDATED);
|
package/dist/hass.module.d.ts
CHANGED
|
@@ -81,7 +81,7 @@ export declare const LIB_HASS: import("@digital-alchemy/core").LibraryDefinition
|
|
|
81
81
|
type: "string";
|
|
82
82
|
};
|
|
83
83
|
CALL_PROXY_ALLOW_REST: StringConfig<AllowRestOptions>;
|
|
84
|
-
|
|
84
|
+
EVENT_DEBOUNCE_MS: {
|
|
85
85
|
default: number;
|
|
86
86
|
description: string;
|
|
87
87
|
type: "number";
|
package/dist/hass.module.js
CHANGED
|
@@ -31,9 +31,9 @@ exports.LIB_HASS = (0, core_1.CreateLibrary)({
|
|
|
31
31
|
enum: ["prefer", "forbid", "allow"],
|
|
32
32
|
type: "string",
|
|
33
33
|
},
|
|
34
|
-
|
|
34
|
+
EVENT_DEBOUNCE_MS: {
|
|
35
35
|
default: 50,
|
|
36
|
-
description: "
|
|
36
|
+
description: "Debounce reactions to registry changes",
|
|
37
37
|
type: "number",
|
|
38
38
|
},
|
|
39
39
|
EXPECT_RESPONSE_AFTER: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type AppleNotificationPush = {
|
|
2
2
|
/**
|
|
3
3
|
* **iOS | MacOS**
|
|
4
4
|
*
|
|
@@ -28,7 +28,70 @@ export type AppleActionableNotificationPush = {
|
|
|
28
28
|
*/
|
|
29
29
|
presentation_options?: ["alert" | "badge" | "sound"];
|
|
30
30
|
};
|
|
31
|
-
export type
|
|
31
|
+
export type NotificationAction = {
|
|
32
|
+
/**
|
|
33
|
+
* Key passed back in events.
|
|
34
|
+
* When set to `REPLY`, you will be prompted for text to send with the event.
|
|
35
|
+
*/
|
|
36
|
+
action: "REPLY" | "URI" | string;
|
|
37
|
+
/**
|
|
38
|
+
* Shown on the action button to the user.
|
|
39
|
+
*/
|
|
40
|
+
title: string;
|
|
41
|
+
/**
|
|
42
|
+
* The URI to open when selected.
|
|
43
|
+
* Android requires setting the action string to `URI` to use this key. [More Info](https://companion.home-assistant.io/docs/notifications/actionable-notifications/#uri-values).
|
|
44
|
+
*/
|
|
45
|
+
uri?: string;
|
|
46
|
+
};
|
|
47
|
+
export type AndroidNotificationActionOptions = {};
|
|
48
|
+
export type AppleNotificationActionOptions = {
|
|
49
|
+
/**
|
|
50
|
+
* **iOS | MacOS**
|
|
51
|
+
*
|
|
52
|
+
* Set to `foreground` to launch the app when tapped. Defaults to background which just fires the event.
|
|
53
|
+
* This is automatically set to foreground when providing a uri.
|
|
54
|
+
*/
|
|
55
|
+
activationMode?: "foreground" | "background";
|
|
56
|
+
/**
|
|
57
|
+
* **iOS | MacOS**
|
|
58
|
+
*
|
|
59
|
+
* Set to `true` to require a password to fire the event.
|
|
60
|
+
*/
|
|
61
|
+
authenticationRequired?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* **iOS | MacOS**
|
|
64
|
+
*
|
|
65
|
+
* Set to `true` to color the actions title red.
|
|
66
|
+
*/
|
|
67
|
+
destructive?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* **iOS | MacOS**
|
|
70
|
+
*
|
|
71
|
+
* Set to `textInput` to prompt for text to return with the event. This also occurs when setting the action to `REPLY`.
|
|
72
|
+
*/
|
|
73
|
+
behavior?: "textInput";
|
|
74
|
+
/**
|
|
75
|
+
* **iOS | MacOS**
|
|
76
|
+
*
|
|
77
|
+
* Title to use for text input for actions that prompt.
|
|
78
|
+
*/
|
|
79
|
+
textInputButtonTitle?: string;
|
|
80
|
+
/**
|
|
81
|
+
* **iOS | MacOS**
|
|
82
|
+
*
|
|
83
|
+
* Placeholder to use for text input for actions that prompt.
|
|
84
|
+
*/
|
|
85
|
+
textInputPlaceholder?: string;
|
|
86
|
+
/**
|
|
87
|
+
* **iOS | MacOS**
|
|
88
|
+
*
|
|
89
|
+
* The icon to use for the notification.
|
|
90
|
+
* * [More info](https://companion.home-assistant.io/docs/notifications/actionable-notifications#icon-values)
|
|
91
|
+
*/
|
|
92
|
+
icon?: string;
|
|
93
|
+
};
|
|
94
|
+
export type AppleNotificationData = {
|
|
32
95
|
/**
|
|
33
96
|
* **iOS | MacOS**
|
|
34
97
|
*
|
|
@@ -43,9 +106,13 @@ export type AppleActionableNotification = {
|
|
|
43
106
|
* [More info](https://companion.home-assistant.io/docs/notifications/notifications-basic#subtitle--subject)
|
|
44
107
|
*/
|
|
45
108
|
subtitle?: string;
|
|
46
|
-
push?:
|
|
109
|
+
push?: AppleNotificationPush;
|
|
110
|
+
/**
|
|
111
|
+
* iOS Supports ~10 actions.
|
|
112
|
+
*/
|
|
113
|
+
actions: Array<NotificationAction & AppleNotificationActionOptions>;
|
|
47
114
|
};
|
|
48
|
-
export type
|
|
115
|
+
export type AndroidNotificationData = {
|
|
49
116
|
/**
|
|
50
117
|
* **Android**
|
|
51
118
|
*
|
|
@@ -179,28 +246,12 @@ export type AndroidActionableNotification = {
|
|
|
179
246
|
* [More info](https://companion.home-assistant.io/docs/notifications/notifications-basic#android-auto-visibility)
|
|
180
247
|
*/
|
|
181
248
|
car_ui?: boolean;
|
|
249
|
+
/**
|
|
250
|
+
* Android Supports 3 actions.
|
|
251
|
+
*/
|
|
252
|
+
actions: Array<NotificationAction & AndroidNotificationActionOptions>;
|
|
182
253
|
};
|
|
183
|
-
export type
|
|
184
|
-
/**
|
|
185
|
-
* Android allows 3 actions.
|
|
186
|
-
* iOS allows around 10 actions.
|
|
187
|
-
*/
|
|
188
|
-
actions?: {
|
|
189
|
-
/**
|
|
190
|
-
* Key passed back in events.
|
|
191
|
-
* When set to `REPLY`, you will be prompted for text to send with the event.
|
|
192
|
-
*/
|
|
193
|
-
action: "REPLY" | "URI" | string;
|
|
194
|
-
/**
|
|
195
|
-
* Shown on the action button to the user.
|
|
196
|
-
*/
|
|
197
|
-
title: string;
|
|
198
|
-
/**
|
|
199
|
-
* The URI to open when selected.
|
|
200
|
-
* Android requires setting the action string to `URI` to use this key. [More Info](https://companion.home-assistant.io/docs/notifications/actionable-notifications/#uri-values).
|
|
201
|
-
*/
|
|
202
|
-
uri?: string;
|
|
203
|
-
}[];
|
|
254
|
+
export type NotificationData = {
|
|
204
255
|
/**
|
|
205
256
|
* The group to which the notification belongs.
|
|
206
257
|
* [More info](https://companion.home-assistant.io/docs/notifications/notifications-basic#grouping)
|
|
@@ -88,7 +88,7 @@ describe("Area", () => {
|
|
|
88
88
|
},
|
|
89
89
|
}));
|
|
90
90
|
});
|
|
91
|
-
it("should
|
|
91
|
+
it("should debounce updates properly", async () => {
|
|
92
92
|
expect.assertions(1);
|
|
93
93
|
application = (0, mock_assistant_1.CreateTestingApplication)({
|
|
94
94
|
Test({ lifecycle, hass }) {
|
|
@@ -52,7 +52,7 @@ describe("Device", () => {
|
|
|
52
52
|
}));
|
|
53
53
|
});
|
|
54
54
|
});
|
|
55
|
-
it("should
|
|
55
|
+
it("should debounce updates properly", async () => {
|
|
56
56
|
expect.assertions(1);
|
|
57
57
|
application = (0, utils_1.CreateTestingApplication)({
|
|
58
58
|
Test({ lifecycle, hass }) {
|
|
@@ -13,7 +13,7 @@ describe("Entity", () => {
|
|
|
13
13
|
});
|
|
14
14
|
describe("API", () => {
|
|
15
15
|
describe("Updates", () => {
|
|
16
|
-
it("should
|
|
16
|
+
it("should debounce updates properly", async () => {
|
|
17
17
|
expect.assertions(1);
|
|
18
18
|
application = (0, mock_assistant_1.CreateTestingApplication)({
|
|
19
19
|
Test({ lifecycle, hass }) {
|
|
@@ -41,7 +41,7 @@ describe("Entity", () => {
|
|
|
41
41
|
hass: {
|
|
42
42
|
AUTO_CONNECT_SOCKET: false,
|
|
43
43
|
AUTO_SCAN_CALL_PROXY: false,
|
|
44
|
-
|
|
44
|
+
EVENT_DEBOUNCE_MS: 10,
|
|
45
45
|
},
|
|
46
46
|
}));
|
|
47
47
|
});
|
|
@@ -164,7 +164,7 @@ describe("Floor", () => {
|
|
|
164
164
|
},
|
|
165
165
|
}));
|
|
166
166
|
});
|
|
167
|
-
it("should
|
|
167
|
+
it("should debounce updates properly", async () => {
|
|
168
168
|
expect.assertions(1);
|
|
169
169
|
application = (0, utils_1.CreateTestingApplication)({
|
|
170
170
|
Test({ lifecycle, hass }) {
|
|
@@ -18,13 +18,32 @@ describe("ID By", () => {
|
|
|
18
18
|
lifecycle.onReady(() => {
|
|
19
19
|
const bedroom = hass.idBy.area("bedroom");
|
|
20
20
|
const kitchen = hass.idBy.area("kitchen");
|
|
21
|
-
expect(bedroom.length).toBe(
|
|
21
|
+
expect(bedroom.length).toBe(2);
|
|
22
22
|
expect(kitchen.length).toBe(1);
|
|
23
23
|
});
|
|
24
24
|
},
|
|
25
25
|
});
|
|
26
26
|
await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({ hass: { MOCK_SOCKET: true } }, true));
|
|
27
27
|
});
|
|
28
|
+
it("finds entities only related by device", async () => {
|
|
29
|
+
expect.assertions(1);
|
|
30
|
+
application = (0, mock_assistant_1.CreateTestingApplication)({
|
|
31
|
+
Test({ lifecycle, hass }) {
|
|
32
|
+
lifecycle.onReady(() => {
|
|
33
|
+
// merges 1 from direct area, 2 via device
|
|
34
|
+
// ignores 2 from the device assigned to another area
|
|
35
|
+
const list = hass.idBy.area("test");
|
|
36
|
+
const expected = [
|
|
37
|
+
"sensor.sun_next_dusk",
|
|
38
|
+
"climate.hallway_thermostat",
|
|
39
|
+
"binary_sensor.garage_door",
|
|
40
|
+
];
|
|
41
|
+
expect(expected.every(expected => list.includes(expected))).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({ hass: { MOCK_SOCKET: true } }, true));
|
|
46
|
+
});
|
|
28
47
|
it("find entities by area limiting by domain", async () => {
|
|
29
48
|
expect.assertions(2);
|
|
30
49
|
application = (0, mock_assistant_1.CreateTestingApplication)({
|
|
@@ -32,7 +51,7 @@ describe("ID By", () => {
|
|
|
32
51
|
lifecycle.onReady(() => {
|
|
33
52
|
const bedroom = hass.idBy.area("bedroom", "light");
|
|
34
53
|
const kitchen = hass.idBy.area("kitchen", "light");
|
|
35
|
-
expect(bedroom.length).toBe(
|
|
54
|
+
expect(bedroom.length).toBe(1);
|
|
36
55
|
expect(kitchen.length).toBe(0);
|
|
37
56
|
});
|
|
38
57
|
},
|
|
@@ -125,7 +144,7 @@ describe("ID By", () => {
|
|
|
125
144
|
Test({ lifecycle, hass }) {
|
|
126
145
|
lifecycle.onReady(() => {
|
|
127
146
|
const synapse = hass.idBy.floor("downstairs");
|
|
128
|
-
expect(synapse.length).toBe(
|
|
147
|
+
expect(synapse.length).toBe(3);
|
|
129
148
|
});
|
|
130
149
|
},
|
|
131
150
|
});
|