@digital-alchemy/hass 0.3.20 → 0.3.22
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 +3228 -198
- package/dist/dynamic.js +335 -85
- package/dist/dynamic.js.map +1 -1
- package/dist/e2e/app/entities.d.ts +5 -0
- package/dist/e2e/app/entities.js +21 -0
- package/dist/e2e/app/entities.js.map +1 -0
- package/dist/e2e/app/main.d.ts +10 -0
- package/dist/e2e/app/main.js +15 -0
- package/dist/e2e/app/main.js.map +1 -0
- package/dist/e2e/area.spec.d.ts +1 -0
- package/dist/e2e/area.spec.js +99 -0
- package/dist/e2e/area.spec.js.map +1 -0
- package/dist/e2e/call-proxy.spec.d.ts +1 -0
- package/dist/e2e/call-proxy.spec.js +57 -0
- package/dist/e2e/call-proxy.spec.js.map +1 -0
- package/dist/e2e/device.spec.d.ts +1 -0
- package/dist/e2e/device.spec.js +27 -0
- package/dist/e2e/device.spec.js.map +1 -0
- package/dist/e2e/entity.spec.d.ts +1 -0
- package/dist/e2e/entity.spec.js +328 -0
- package/dist/e2e/entity.spec.js.map +1 -0
- package/dist/e2e/fetch.spec.d.ts +1 -0
- package/dist/e2e/fetch.spec.js +79 -0
- package/dist/e2e/fetch.spec.js.map +1 -0
- package/dist/e2e/floor.spec.d.ts +1 -0
- package/dist/e2e/floor.spec.js +81 -0
- package/dist/e2e/floor.spec.js.map +1 -0
- package/dist/e2e/label.spec.d.ts +1 -0
- package/dist/e2e/label.spec.js +82 -0
- package/dist/e2e/label.spec.js.map +1 -0
- package/dist/e2e/utils.d.ts +2 -0
- package/dist/e2e/utils.js +6 -0
- package/dist/e2e/utils.js.map +1 -0
- package/dist/extensions/area.extension.d.ts +5 -5
- package/dist/extensions/area.extension.js +60 -51
- package/dist/extensions/area.extension.js.map +1 -1
- package/dist/extensions/call-proxy.extension.d.ts +1 -1
- package/dist/extensions/call-proxy.extension.js +13 -26
- package/dist/extensions/call-proxy.extension.js.map +1 -1
- package/dist/extensions/conversation.extension.js +1 -1
- package/dist/extensions/conversation.extension.js.map +1 -1
- package/dist/extensions/device.extension.d.ts +1 -1
- package/dist/extensions/device.extension.js +2 -1
- package/dist/extensions/device.extension.js.map +1 -1
- package/dist/extensions/entity.extension.d.ts +27 -14
- package/dist/extensions/entity.extension.js +64 -36
- package/dist/extensions/entity.extension.js.map +1 -1
- package/dist/extensions/fetch-api.extension.d.ts +5 -4
- package/dist/extensions/fetch-api.extension.js +41 -30
- package/dist/extensions/fetch-api.extension.js.map +1 -1
- package/dist/extensions/floor.extension.d.ts +0 -5
- package/dist/extensions/floor.extension.js +1 -2
- package/dist/extensions/floor.extension.js.map +1 -1
- package/dist/extensions/label.extension.d.ts +4 -9
- package/dist/extensions/label.extension.js +35 -33
- package/dist/extensions/label.extension.js.map +1 -1
- package/dist/extensions/websocket-api.extension.d.ts +21 -4
- package/dist/extensions/websocket-api.extension.js +94 -57
- package/dist/extensions/websocket-api.extension.js.map +1 -1
- package/dist/extensions/zone.extension.d.ts +0 -6
- package/dist/extensions/zone.extension.js +0 -2
- package/dist/extensions/zone.extension.js.map +1 -1
- package/dist/hass.module.d.ts +10 -0
- package/dist/hass.module.js +13 -0
- package/dist/hass.module.js.map +1 -1
- package/dist/helpers/constants.helper.d.ts +1 -40
- package/dist/helpers/constants.helper.js +2 -45
- package/dist/helpers/constants.helper.js.map +1 -1
- package/dist/helpers/fetch/calendar.d.ts +1 -1
- package/dist/helpers/fetch/configuration.d.ts +4 -4
- package/dist/helpers/fetch/service-list.d.ts +7 -4
- package/dist/helpers/metrics.helper.d.ts +4 -0
- package/dist/helpers/metrics.helper.js +15 -7
- package/dist/helpers/metrics.helper.js.map +1 -1
- package/dist/helpers/registry.d.ts +3 -3
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/utility.helper.d.ts +5 -3
- package/dist/helpers/utility.helper.js.map +1 -1
- package/dist/helpers/websocket.helper.d.ts +12 -12
- package/dist/mock_assistant/extensions/events.extension.d.ts +6 -0
- package/dist/mock_assistant/extensions/events.extension.js +28 -0
- package/dist/mock_assistant/extensions/events.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/fixtures.extension.d.ts +13 -0
- package/dist/mock_assistant/extensions/fixtures.extension.js +52 -0
- package/dist/mock_assistant/extensions/fixtures.extension.js.map +1 -0
- package/dist/mock_assistant/extensions/index.d.ts +2 -0
- package/dist/mock_assistant/extensions/index.js +6 -0
- package/dist/mock_assistant/extensions/index.js.map +1 -0
- package/dist/mock_assistant/helpers/fixtures.d.ts +10 -0
- package/dist/mock_assistant/helpers/fixtures.js +3 -0
- package/dist/mock_assistant/helpers/fixtures.js.map +1 -0
- package/dist/mock_assistant/helpers/index.d.ts +2 -0
- package/dist/mock_assistant/helpers/index.js +6 -0
- package/dist/mock_assistant/helpers/index.js.map +1 -0
- package/dist/mock_assistant/helpers/utils.d.ts +3 -0
- package/dist/mock_assistant/helpers/utils.js +31 -0
- package/dist/mock_assistant/helpers/utils.js.map +1 -0
- package/dist/mock_assistant/index.d.ts +3 -0
- package/dist/mock_assistant/index.js +7 -0
- package/dist/mock_assistant/index.js.map +1 -0
- package/dist/mock_assistant/main.d.ts +2 -0
- package/dist/mock_assistant/main.js +37 -0
- package/dist/mock_assistant/main.js.map +1 -0
- package/dist/mock_assistant/mock-assistant.module.d.ts +16 -0
- package/dist/mock_assistant/mock-assistant.module.js +22 -0
- package/dist/mock_assistant/mock-assistant.module.js.map +1 -0
- package/dist/testing/area.spec.d.ts +1 -0
- package/dist/testing/area.spec.js +224 -0
- package/dist/testing/area.spec.js.map +1 -0
- package/dist/testing/config.spec.d.ts +1 -0
- package/dist/testing/config.spec.js +232 -0
- package/dist/testing/config.spec.js.map +1 -0
- package/dist/testing/device.spec.d.ts +1 -0
- package/dist/testing/device.spec.js +81 -0
- package/dist/testing/device.spec.js.map +1 -0
- package/dist/testing/entity.spec.d.ts +1 -0
- package/dist/testing/entity.spec.js +29 -0
- package/dist/testing/entity.spec.js.map +1 -0
- package/dist/testing/fetch-api.spec.d.ts +1 -0
- package/dist/testing/fetch-api.spec.js +476 -0
- package/dist/testing/fetch-api.spec.js.map +1 -0
- package/dist/testing/floor.spec.d.ts +1 -0
- package/dist/testing/floor.spec.js +223 -0
- package/dist/testing/floor.spec.js.map +1 -0
- package/dist/testing/label.spec.d.ts +1 -0
- package/dist/testing/label.spec.js +223 -0
- package/dist/testing/label.spec.js.map +1 -0
- package/dist/testing/websocket.spec.d.ts +8 -0
- package/dist/testing/websocket.spec.js +71 -0
- package/dist/testing/websocket.spec.js.map +1 -0
- package/dist/testing/workflow.spec.d.ts +1 -0
- package/dist/testing/workflow.spec.js +164 -0
- package/dist/testing/workflow.spec.js.map +1 -0
- package/package.json +39 -12
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@digital-alchemy/core");
|
|
4
|
+
const helpers_1 = require("../helpers");
|
|
5
|
+
const mock_assistant_1 = require("../mock_assistant");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
describe("Label E2E", () => {
|
|
8
|
+
let application;
|
|
9
|
+
const testLabel = "test";
|
|
10
|
+
afterEach(async () => {
|
|
11
|
+
if (application) {
|
|
12
|
+
await application.teardown();
|
|
13
|
+
application = undefined;
|
|
14
|
+
}
|
|
15
|
+
jest.restoreAllMocks();
|
|
16
|
+
});
|
|
17
|
+
it("should fire events on registry updated", async () => {
|
|
18
|
+
expect.assertions(1);
|
|
19
|
+
application = (0, mock_assistant_1.CreateTestingApplication)({
|
|
20
|
+
Test({ lifecycle, hass, event }) {
|
|
21
|
+
lifecycle.onReady(async () => {
|
|
22
|
+
let hit = false;
|
|
23
|
+
event.on(helpers_1.LABEL_REGISTRY_UPDATED, () => (hit = true));
|
|
24
|
+
await hass.socket.fireEvent("label_registry_updated");
|
|
25
|
+
await (0, core_1.sleep)(50);
|
|
26
|
+
expect(hit).toBe(true);
|
|
27
|
+
await application.teardown();
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({ hass: { BASE_URL: utils_1.BASE_URL, TOKEN: utils_1.TOKEN } }));
|
|
32
|
+
});
|
|
33
|
+
it("should create a label", async () => {
|
|
34
|
+
expect.assertions(1);
|
|
35
|
+
application = (0, mock_assistant_1.CreateTestingApplication)({
|
|
36
|
+
Test({ lifecycle, hass }) {
|
|
37
|
+
lifecycle.onReady(async () => {
|
|
38
|
+
await hass.label.create({
|
|
39
|
+
color: "accent",
|
|
40
|
+
icon: "mdi:account",
|
|
41
|
+
name: testLabel,
|
|
42
|
+
});
|
|
43
|
+
expect(hass.label.current.some(i => i.label_id === testLabel)).toBe(true);
|
|
44
|
+
await application.teardown();
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({ hass: { BASE_URL: utils_1.BASE_URL, TOKEN: utils_1.TOKEN } }));
|
|
49
|
+
});
|
|
50
|
+
it("should update a label", async () => {
|
|
51
|
+
expect.assertions(1);
|
|
52
|
+
application = (0, mock_assistant_1.CreateTestingApplication)({
|
|
53
|
+
Test({ lifecycle, hass }) {
|
|
54
|
+
lifecycle.onReady(async () => {
|
|
55
|
+
const item = hass.label.current.find(i => i.label_id === testLabel);
|
|
56
|
+
await hass.label.update({
|
|
57
|
+
...item,
|
|
58
|
+
name: "extra test",
|
|
59
|
+
});
|
|
60
|
+
expect(hass.label.current.find(i => i.label_id === testLabel)?.name).toBe("extra test");
|
|
61
|
+
await application.teardown();
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({ hass: { BASE_URL: utils_1.BASE_URL, TOKEN: utils_1.TOKEN } }));
|
|
66
|
+
});
|
|
67
|
+
it("should delete a label", async () => {
|
|
68
|
+
expect.assertions(2);
|
|
69
|
+
application = (0, mock_assistant_1.CreateTestingApplication)({
|
|
70
|
+
Test({ lifecycle, hass }) {
|
|
71
|
+
lifecycle.onReady(async () => {
|
|
72
|
+
expect(hass.label.current.some(i => i.label_id === testLabel)).toBe(true);
|
|
73
|
+
await hass.label.delete(testLabel);
|
|
74
|
+
expect(hass.label.current.some(i => i.label_id === testLabel)).toBe(false);
|
|
75
|
+
await application.teardown();
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
await application.bootstrap((0, mock_assistant_1.SILENT_BOOT)({ hass: { BASE_URL: utils_1.BASE_URL, TOKEN: utils_1.TOKEN } }));
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=label.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.spec.js","sourceRoot":"","sources":["../../src/e2e/label.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOKEN = exports.BASE_URL = void 0;
|
|
4
|
+
exports.BASE_URL = "http://localhost:9123";
|
|
5
|
+
exports.TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhYTdjOGQ5MzBiMDM0MDM2OGVjZTdjOTRjMTcyOWQ0OSIsImlhdCI6MTcxNDYwMzkyMywiZXhwIjoyMDI5OTYzOTIzfQ.Tvoh25bukQh5T5WIuvvkL9jVBihcOGG6D5JYdqdwx1U";
|
|
6
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/e2e/utils.ts"],"names":[],"mappings":";;;AAAa,QAAA,QAAQ,GAAG,uBAAuB,CAAC;AACnC,QAAA,KAAK,GAChB,yLAAyL,CAAC"}
|
|
@@ -2,12 +2,12 @@ import { TServiceParams } from "@digital-alchemy/core";
|
|
|
2
2
|
import { TAreaId } from "../dynamic";
|
|
3
3
|
import { AreaCreate, AreaDetails, PICK_ENTITY } from "../helpers";
|
|
4
4
|
export declare function Area({ hass, context, config, logger, event, lifecycle, }: TServiceParams): {
|
|
5
|
-
apply(area: TAreaId, entities: PICK_ENTITY[])
|
|
5
|
+
apply: (area: TAreaId, entities: PICK_ENTITY[]) => Promise<{
|
|
6
6
|
updated: PICK_ENTITY[];
|
|
7
7
|
}>;
|
|
8
|
-
create(details: AreaCreate)
|
|
8
|
+
create: (details: AreaCreate) => Promise<void>;
|
|
9
9
|
current: AreaDetails[];
|
|
10
|
-
delete(area_id: TAreaId)
|
|
11
|
-
list()
|
|
12
|
-
update(details: AreaDetails)
|
|
10
|
+
delete: (area_id: TAreaId) => Promise<void>;
|
|
11
|
+
list: () => Promise<AreaDetails[]>;
|
|
12
|
+
update: (details: AreaDetails) => Promise<void>;
|
|
13
13
|
};
|
|
@@ -24,63 +24,72 @@ function Area({ hass, context, config, logger, event, lifecycle, }) {
|
|
|
24
24
|
},
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
await new Promise(async (done) => {
|
|
39
|
-
event.once(helpers_1.ENTITY_REGISTRY_UPDATED, done);
|
|
40
|
-
logger.trace({ area, entity }, `setting area`);
|
|
41
|
-
out.updated.push(entity);
|
|
42
|
-
await hass.socket.sendMessage({
|
|
43
|
-
area_id: area,
|
|
44
|
-
entity_id: entity,
|
|
45
|
-
type: "config/entity_registry/update",
|
|
46
|
-
});
|
|
47
|
-
});
|
|
27
|
+
async function list() {
|
|
28
|
+
return await hass.socket.sendMessage({
|
|
29
|
+
type: "config/area_registry/list",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async function deleteArea(area_id) {
|
|
33
|
+
return await new Promise(async (done) => {
|
|
34
|
+
event.once(helpers_1.AREA_REGISTRY_UPDATED, done);
|
|
35
|
+
await hass.socket.sendMessage({
|
|
36
|
+
area_id,
|
|
37
|
+
type: "config/area_registry/delete",
|
|
48
38
|
});
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async function create(details) {
|
|
42
|
+
return await new Promise(async (done) => {
|
|
43
|
+
event.once(helpers_1.AREA_REGISTRY_UPDATED, done);
|
|
44
|
+
await hass.socket.sendMessage({
|
|
45
|
+
floor_id: "",
|
|
46
|
+
icon: "",
|
|
47
|
+
labels: [],
|
|
48
|
+
picture: "",
|
|
49
|
+
type: "config/area_registry/create",
|
|
50
|
+
...details,
|
|
58
51
|
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async function apply(area, entities) {
|
|
55
|
+
const out = { updated: [] };
|
|
56
|
+
await (0, core_1.eachSeries)(entities, async (entity) => {
|
|
57
|
+
const details = hass.entity.registry.current.find(item => item.entity_id === entity);
|
|
58
|
+
if (!details) {
|
|
59
|
+
throw new core_1.InternalError(context, "UNKNOWN_ENTITY", `Cannot find ${entity} in entity registry`);
|
|
60
|
+
}
|
|
61
|
+
if (details.area_id === area) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
await new Promise(async (done) => {
|
|
65
|
+
event.once(helpers_1.ENTITY_REGISTRY_UPDATED, done);
|
|
66
|
+
logger.trace({ area, entity }, `setting area`);
|
|
67
|
+
out.updated.push(entity);
|
|
64
68
|
await hass.socket.sendMessage({
|
|
65
|
-
area_id,
|
|
66
|
-
|
|
69
|
+
area_id: area,
|
|
70
|
+
entity_id: entity,
|
|
71
|
+
type: "config/entity_registry/update",
|
|
67
72
|
});
|
|
68
73
|
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
await hass.socket.sendMessage({
|
|
79
|
-
type: "config/area_registry/update",
|
|
80
|
-
...details,
|
|
81
|
-
});
|
|
74
|
+
});
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
async function update(details) {
|
|
78
|
+
return await new Promise(async (done) => {
|
|
79
|
+
event.once(helpers_1.AREA_REGISTRY_UPDATED, done);
|
|
80
|
+
await hass.socket.sendMessage({
|
|
81
|
+
type: "config/area_registry/update",
|
|
82
|
+
...details,
|
|
82
83
|
});
|
|
83
|
-
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
apply,
|
|
88
|
+
create,
|
|
89
|
+
current: [],
|
|
90
|
+
delete: deleteArea,
|
|
91
|
+
list,
|
|
92
|
+
update,
|
|
84
93
|
};
|
|
85
94
|
}
|
|
86
95
|
exports.Area = Area;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area.extension.js","sourceRoot":"","sources":["../../src/extensions/area.extension.ts"],"names":[],"mappings":";;;AAAA,gDAI+B;AAG/B,wCAOoB;AAEpB,SAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,SAAS,GACM;IACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QACD,IAAI,OAAO,GAAG,IAAI,OAAO,CAAO,KAAK,EAAC,IAAI,EAAC,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,GAAG,SAAS,CAAC;YACpB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,wBAAc,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACpB,OAAO;YACP,UAAU,EAAE,uBAAuB;YACnC,KAAK,CAAC,IAAI;gBACR,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,+BAAqB,CAAC,CAAC;YACpC,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,
|
|
1
|
+
{"version":3,"file":"area.extension.js","sourceRoot":"","sources":["../../src/extensions/area.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
2
|
import { iCallService } from "..";
|
|
3
|
-
export declare function CallProxy({ logger, lifecycle,
|
|
3
|
+
export declare function CallProxy({ logger, lifecycle, hass, config }: TServiceParams): iCallService;
|
|
@@ -7,9 +7,7 @@ const __1 = require("..");
|
|
|
7
7
|
const FAILED_LOAD_DELAY = 5;
|
|
8
8
|
const MAX_ATTEMPTS = 50;
|
|
9
9
|
const FAILED = 1;
|
|
10
|
-
|
|
11
|
-
function CallProxy({ logger, lifecycle, context, hass, config, }) {
|
|
12
|
-
let domains;
|
|
10
|
+
function CallProxy({ logger, lifecycle, hass, config }) {
|
|
13
11
|
let services;
|
|
14
12
|
const rawProxy = {};
|
|
15
13
|
/**
|
|
@@ -25,24 +23,6 @@ function CallProxy({ logger, lifecycle, context, hass, config, }) {
|
|
|
25
23
|
logger.debug({ name: "onBootstrap" }, `runtime populate service interfaces`);
|
|
26
24
|
await loadServiceList();
|
|
27
25
|
});
|
|
28
|
-
function getDomain(domain) {
|
|
29
|
-
if (!domains || !domains?.includes(domain)) {
|
|
30
|
-
if (!NOT_A_DOMAIN.has(domain)) {
|
|
31
|
-
logger.error({ domain, name: getDomain }, `unknown domain`);
|
|
32
|
-
}
|
|
33
|
-
return undefined;
|
|
34
|
-
}
|
|
35
|
-
const domainItem = services.find(i => i.domain === domain);
|
|
36
|
-
if (!domainItem) {
|
|
37
|
-
throw new core_1.InternalError(context, "HALLUCINATED_DOMAIN", `Cannot access call_service#${domain}. Home Assistant doesn't list it as a real domain.`);
|
|
38
|
-
}
|
|
39
|
-
return Object.fromEntries(Object.entries(domainItem.services).map(([key]) => [
|
|
40
|
-
key,
|
|
41
|
-
async (parameters) => await sendMessage(`${domain}.${key}`, {
|
|
42
|
-
...parameters,
|
|
43
|
-
}),
|
|
44
|
-
]));
|
|
45
|
-
}
|
|
46
26
|
async function loadServiceList(recursion = core_1.START) {
|
|
47
27
|
logger.info({ name: loadServiceList }, `fetching service list`);
|
|
48
28
|
services = await hass.fetch.listServices();
|
|
@@ -56,10 +36,17 @@ function CallProxy({ logger, lifecycle, context, hass, config, }) {
|
|
|
56
36
|
await loadServiceList(recursion + core_1.INCREMENT);
|
|
57
37
|
return;
|
|
58
38
|
}
|
|
59
|
-
domains = services.map(i => i.domain);
|
|
60
39
|
services.forEach(value => {
|
|
61
40
|
const services = Object.keys(value.services);
|
|
62
|
-
rawProxy[value.domain] = Object.fromEntries(services.map(
|
|
41
|
+
rawProxy[value.domain] = Object.fromEntries(Object.entries(value.services).map(([key]) => [
|
|
42
|
+
key,
|
|
43
|
+
async (parameters) => {
|
|
44
|
+
const service = `${value.domain}.${key}`;
|
|
45
|
+
await sendMessage(service, {
|
|
46
|
+
...parameters,
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
]));
|
|
63
50
|
logger.trace({ name: loadServiceList, services }, `loaded domain [%s]`, value.domain);
|
|
64
51
|
});
|
|
65
52
|
}
|
|
@@ -78,13 +65,13 @@ function CallProxy({ logger, lifecycle, context, hass, config, }) {
|
|
|
78
65
|
return await hass.fetch.callService(serviceName, service_data);
|
|
79
66
|
}
|
|
80
67
|
const [domain, service] = serviceName.split(".");
|
|
81
|
-
|
|
68
|
+
__1.CALL_PROXY_SERVICE_CALL.labels({ domain, service }).inc();
|
|
82
69
|
// User can just not await this call if they don't care about the "waitForChange"
|
|
83
|
-
return await hass.socket.sendMessage({ domain, service, service_data, type }, true);
|
|
70
|
+
return await hass.socket.sendMessage({ domain, service, service_data, type: "call_service" }, true);
|
|
84
71
|
}
|
|
85
72
|
function buildCallProxy() {
|
|
86
73
|
return new Proxy(rawProxy, {
|
|
87
|
-
get: (_, domain) =>
|
|
74
|
+
get: (_, domain) => rawProxy[domain],
|
|
88
75
|
});
|
|
89
76
|
}
|
|
90
77
|
return buildCallProxy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-proxy.extension.js","sourceRoot":"","sources":["../../src/extensions/call-proxy.extension.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"call-proxy.extension.js","sourceRoot":"","sources":["../../src/extensions/call-proxy.extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.extension.js","sourceRoot":"","sources":["../../src/extensions/conversation.extension.ts"],"names":[],"mappings":";;;AAEA,wCAA6E;AAE7E,SAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAkB;IAC3D,KAAK,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAoB;QACzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5B,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"conversation.extension.js","sourceRoot":"","sources":["../../src/extensions/conversation.extension.ts"],"names":[],"mappings":";;;AAEA,wCAA6E;AAE7E,SAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAkB;IAC3D,KAAK,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAoB;QACzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5B,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,+BAA+B;SACtC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAoB;QAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAe,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,UAAU,iBAAiB,CAAC,EAC/B,UAAU,EACV,UAAU,EACV,aAAa,GACA;QACb,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5B,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;YAC/B,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;YAC/B,aAAa;YACb,IAAI,EAAE,yBAAe;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,QAAQ;QACR,WAAW;QACX,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAxCD,oCAwCC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TServiceParams } from "@digital-alchemy/core";
|
|
2
2
|
import { DeviceDetails } from "../helpers";
|
|
3
|
-
export declare function Device({ hass, config, context, logger, lifecycle, }: TServiceParams): {
|
|
3
|
+
export declare function Device({ hass, config, context, logger, lifecycle, event, }: TServiceParams): {
|
|
4
4
|
current: DeviceDetails[];
|
|
5
5
|
list: () => Promise<DeviceDetails[]>;
|
|
6
6
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Device = void 0;
|
|
4
4
|
const helpers_1 = require("../helpers");
|
|
5
|
-
function Device({ hass, config, context, logger, lifecycle, }) {
|
|
5
|
+
function Device({ hass, config, context, logger, lifecycle, event, }) {
|
|
6
6
|
hass.socket.onConnect(async () => {
|
|
7
7
|
if (!config.hass.AUTO_CONNECT_SOCKET || !config.hass.MANAGE_REGISTRY) {
|
|
8
8
|
return;
|
|
@@ -19,6 +19,7 @@ function Device({ hass, config, context, logger, lifecycle, }) {
|
|
|
19
19
|
async exec() {
|
|
20
20
|
hass.device.current = await hass.device.list();
|
|
21
21
|
logger.debug(`device registry updated`);
|
|
22
|
+
event.emit(helpers_1.DEVICE_REGISTRY_UPDATED);
|
|
22
23
|
},
|
|
23
24
|
});
|
|
24
25
|
await SubscribeUpdates();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.extension.js","sourceRoot":"","sources":["../../src/extensions/device.extension.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"device.extension.js","sourceRoot":"","sources":["../../src/extensions/device.extension.ts"],"names":[],"mappings":";;;AAEA,wCAIoB;AAEpB,SAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,GACU;IACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QACD,IAAI,OAAO,GAAG,IAAI,OAAO,CAAO,KAAK,EAAC,IAAI,EAAC,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,OAAO,GAAG,SAAS,CAAC;YACpB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,wBAAc,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACpB,OAAO;YACP,UAAU,EAAE,yBAAyB;YACrC,KAAK,CAAC,IAAI;gBACR,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/C,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,iCAAuB,CAAC,CAAC;YACtC,CAAC;SACF,CAAC,CAAC;QACH,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,gBAAgB;QAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5B,UAAU,EAAE,yBAAyB;YACrC,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,IAAI;QACjB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAkB;YACpD,IAAI,EAAE,6BAA6B;SACpC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,OAAO,EAAE,EAAqB;QAC9B,IAAI;KACL,CAAC;AACJ,CAAC;AA/CD,wBA+CC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TBlackHole, TServiceParams } from "@digital-alchemy/core";
|
|
2
|
-
import { EditLabelOptions, ENTITY_STATE, EntityHistoryDTO, EntityHistoryResult, EntityRegistryItem, PICK_ENTITY, PICK_FROM_AREA, PICK_FROM_DEVICE, PICK_FROM_FLOOR, PICK_FROM_LABEL, TAreaId, TDeviceId, TFloorId, TLabelId } from "..";
|
|
2
|
+
import { EditLabelOptions, ENTITY_STATE, EntityHistoryDTO, EntityHistoryResult, EntityRegistryItem, PICK_ENTITY, PICK_FROM_AREA, PICK_FROM_DEVICE, PICK_FROM_FLOOR, PICK_FROM_LABEL, TAreaId, TDeviceId, TFloorId, TLabelId, TPlatformId } from "..";
|
|
3
3
|
export declare const ENTITY_UPDATE_RECEIVER: unique symbol;
|
|
4
4
|
export type ByIdProxy<ENTITY_ID extends PICK_ENTITY> = ENTITY_STATE<ENTITY_ID> & {
|
|
5
5
|
entity_id: ENTITY_ID;
|
|
@@ -28,28 +28,42 @@ export type ByIdProxy<ENTITY_ID extends PICK_ENTITY> = ENTITY_STATE<ENTITY_ID> &
|
|
|
28
28
|
*/
|
|
29
29
|
removeAllListeners: () => void;
|
|
30
30
|
};
|
|
31
|
-
export declare function EntityManager({ logger, hass, config, lifecycle, event, context, internal, }: TServiceParams): {
|
|
31
|
+
export declare function EntityManager({ logger, hass, config, lifecycle, event, context, internal: { utils }, }: TServiceParams): {
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
33
|
+
* Retrieve a list of entities listed as being part of a certain area
|
|
34
|
+
* Tracks area updates at runtime
|
|
34
35
|
*/
|
|
35
|
-
[ENTITY_UPDATE_RECEIVER]: <ENTITY extends PICK_ENTITY = PICK_ENTITY>(entity_id: PICK_ENTITY, new_state: ENTITY_STATE<ENTITY>, old_state: ENTITY_STATE<ENTITY>) => void;
|
|
36
36
|
byArea: <AREA extends TAreaId, DOMAIN extends import("..").TRawDomains>(area: AREA, ...domains: DOMAIN[]) => PICK_FROM_AREA<AREA, DOMAIN>[];
|
|
37
|
+
/**
|
|
38
|
+
* Retrieve a list of entities associated with a particular device id
|
|
39
|
+
*/
|
|
37
40
|
byDevice: <DEVICE extends TDeviceId, DOMAIN_1 extends import("..").TRawDomains>(device: DEVICE, ...domains: DOMAIN_1[]) => PICK_FROM_DEVICE<DEVICE, DOMAIN_1>[];
|
|
41
|
+
/**
|
|
42
|
+
* Retrieve a list of entities that have areas associated with a certain floor
|
|
43
|
+
*/
|
|
38
44
|
byFloor: <FLOOR extends TFloorId, DOMAIN_2 extends import("..").TRawDomains>(floor: FLOOR, ...domains: DOMAIN_2[]) => PICK_FROM_FLOOR<FLOOR, DOMAIN_2>[];
|
|
39
45
|
/**
|
|
40
46
|
* Retrieves a proxy object for a specified entity. This proxy object
|
|
41
47
|
* provides current values and event hooks for the entity.
|
|
42
|
-
*/
|
|
48
|
+
*/
|
|
49
|
+
byId: <ENTITY_ID extends PICK_ENTITY>(entity_id: ENTITY_ID) => ByIdProxy<ENTITY_ID>;
|
|
50
|
+
/**
|
|
51
|
+
* Retrieve a list of entities that have a given label
|
|
52
|
+
*/
|
|
43
53
|
byLabel: <LABEL extends TLabelId, DOMAIN_3 extends import("..").TRawDomains>(label: LABEL, ...domains: DOMAIN_3[]) => PICK_FROM_LABEL<LABEL, DOMAIN_3>[];
|
|
44
54
|
/**
|
|
45
55
|
* search out ids by platform
|
|
46
56
|
*/
|
|
47
|
-
byPlatform: (platform:
|
|
57
|
+
byPlatform: <PLATFORM extends TPlatformId, DOMAIN_4 extends import("..").TRawDomains>(platform: PLATFORM, ...domains: DOMAIN_4[]) => PICK_ENTITY[];
|
|
58
|
+
/**
|
|
59
|
+
* Internal library use only
|
|
60
|
+
*/
|
|
61
|
+
entityUpdateReceiver: <ENTITY extends PICK_ENTITY = PICK_ENTITY>(entity_id: PICK_ENTITY, new_state: ENTITY_STATE<ENTITY>, old_state: ENTITY_STATE<ENTITY>) => void;
|
|
48
62
|
/**
|
|
49
63
|
* Lists all entities within a specified domain. This is useful for
|
|
50
64
|
* domain-specific operations or queries.
|
|
51
65
|
*/
|
|
52
|
-
findByDomain: <
|
|
66
|
+
findByDomain: <DOMAIN_5 extends import("..").TRawDomains>(domain: DOMAIN_5) => ByIdProxy<PICK_ENTITY>[];
|
|
53
67
|
/**
|
|
54
68
|
* Retrieves the current state of a given entity. This method returns
|
|
55
69
|
* raw data, offering a direct view of the entity's state at a given moment.
|
|
@@ -67,6 +81,10 @@ export declare function EntityManager({ logger, hass, config, lifecycle, event,
|
|
|
67
81
|
* and quick reference to all available entities.
|
|
68
82
|
*/
|
|
69
83
|
listEntities: () => PICK_ENTITY[];
|
|
84
|
+
/**
|
|
85
|
+
* Retrieve the raw entity data for this point in time
|
|
86
|
+
*/
|
|
87
|
+
raw: (id: PICK_ENTITY) => ENTITY_STATE<PICK_ENTITY>;
|
|
70
88
|
/**
|
|
71
89
|
* Initiates a refresh of the current entity states. Useful for ensuring
|
|
72
90
|
* synchronization with the latest state data from Home Assistant.
|
|
@@ -80,16 +98,11 @@ export declare function EntityManager({ logger, hass, config, lifecycle, event,
|
|
|
80
98
|
current: EntityRegistryItem<PICK_ENTITY>[];
|
|
81
99
|
get: <ENTITY_1 extends PICK_ENTITY>(entity_id: ENTITY_1) => Promise<EntityRegistryItem<ENTITY_1>>;
|
|
82
100
|
list: () => Promise<EntityRegistryItem<PICK_ENTITY>[]>;
|
|
83
|
-
registryList: () => Promise<
|
|
84
|
-
removeEntity: (entity_id: PICK_ENTITY) => Promise<void>;
|
|
101
|
+
registryList: () => Promise<EntityRegistryItem<PICK_ENTITY>[]>;
|
|
102
|
+
removeEntity: (entity_id: PICK_ENTITY | PICK_ENTITY[]) => Promise<void>;
|
|
85
103
|
removeLabel: ({ entity, label }: EditLabelOptions) => Promise<void>;
|
|
86
104
|
source: () => Promise<Record<PICK_ENTITY, {
|
|
87
105
|
domain: string;
|
|
88
106
|
}>>;
|
|
89
107
|
};
|
|
90
108
|
};
|
|
91
|
-
declare module "@digital-alchemy/core" {
|
|
92
|
-
interface IsIt {
|
|
93
|
-
entity(entity: string): entity is PICK_ENTITY;
|
|
94
|
-
}
|
|
95
|
-
}
|