@digital-alchemy/hass 25.10.27-beta.1 → 25.11.16
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/dev/mappings.d.mts +26 -0
- package/dist/dev/services.mjs +0 -1
- package/dist/dev/services.mjs.map +1 -1
- package/dist/hass.module.d.mts +8 -1
- package/dist/hass.module.mjs +5 -1
- package/dist/hass.module.mjs.map +1 -1
- package/dist/helpers/fetch/configuration.d.mts +5 -5
- package/dist/helpers/fetch/configuration.mjs.map +1 -1
- package/dist/helpers/interfaces.d.mts +11 -0
- package/dist/helpers/interfaces.mjs.map +1 -1
- package/dist/mock_assistant/mock-assistant.module.d.mts +2 -0
- package/dist/services/area.service.mjs +12 -12
- package/dist/services/area.service.mjs.map +1 -1
- package/dist/services/config.service.d.mts +2 -1
- package/dist/services/config.service.mjs +35 -5
- package/dist/services/config.service.mjs.map +1 -1
- package/dist/services/conversation.service.d.mts +1 -1
- package/dist/services/conversation.service.mjs +9 -1
- package/dist/services/conversation.service.mjs.map +1 -1
- package/dist/services/device.service.mjs +12 -19
- package/dist/services/device.service.mjs.map +1 -1
- package/dist/services/entity.service.mjs +12 -12
- package/dist/services/entity.service.mjs.map +1 -1
- package/dist/services/floor.service.mjs +12 -12
- package/dist/services/floor.service.mjs.map +1 -1
- package/dist/services/index.d.mts +1 -0
- package/dist/services/index.mjs +1 -0
- package/dist/services/index.mjs.map +1 -1
- package/dist/services/label.service.mjs +12 -12
- package/dist/services/label.service.mjs.map +1 -1
- package/dist/services/registry.service.mjs +4 -3
- package/dist/services/registry.service.mjs.map +1 -1
- package/dist/services/websocket-api.service.d.mts +1 -1
- package/dist/services/websocket-api.service.mjs +70 -6
- package/dist/services/websocket-api.service.mjs.map +1 -1
- package/dist/services/zone.service.mjs +12 -12
- package/dist/services/zone.service.mjs.map +1 -1
- package/dist/testing/config.spec.mjs +367 -0
- package/dist/testing/config.spec.mjs.map +1 -1
- package/dist/testing/conversation.spec.d.mts +1 -0
- package/dist/testing/conversation.spec.mjs +42 -0
- package/dist/testing/conversation.spec.mjs.map +1 -0
- package/dist/testing/fetch-api.spec.mjs +2 -5
- package/dist/testing/fetch-api.spec.mjs.map +1 -1
- package/dist/testing/websocket.spec.mjs +177 -0
- package/dist/testing/websocket.spec.mjs.map +1 -1
- package/dist/user.d.mts +7 -0
- package/package.json +1 -1
- package/src/dev/mappings.mts +15 -0
- package/src/dev/registry.mts +0 -1
- package/src/dev/services.mts +0 -1
- package/src/hass.module.mts +10 -0
- package/src/helpers/fetch/configuration.mts +11 -5
- package/src/helpers/interfaces.mts +14 -0
- package/src/services/area.service.mts +13 -13
- package/src/services/config.service.mts +53 -6
- package/src/services/conversation.service.mts +16 -2
- package/src/services/device.service.mts +13 -21
- package/src/services/entity.service.mts +13 -12
- package/src/services/floor.service.mts +13 -13
- package/src/services/index.mts +1 -0
- package/src/services/label.service.mts +13 -13
- package/src/services/registry.service.mts +5 -4
- package/src/services/websocket-api.service.mts +86 -5
- package/src/services/zone.service.mts +13 -13
- package/src/testing/config.spec.mts +410 -0
- package/src/testing/conversation.spec.mts +48 -0
- package/src/testing/fetch-api.spec.mts +2 -5
- package/src/testing/websocket.spec.mts +225 -0
- package/src/user.mts +14 -0
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { sleep } from "@digital-alchemy/core";
|
|
1
2
|
import { hassTestRunner } from "../mock_assistant/index.mjs";
|
|
2
3
|
describe("Websocket", () => {
|
|
3
4
|
afterEach(async () => {
|
|
4
5
|
await hassTestRunner.teardown();
|
|
5
6
|
vi.restoreAllMocks();
|
|
6
7
|
});
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
hassTestRunner.emitLogs("silent");
|
|
10
|
+
});
|
|
7
11
|
describe("API Interactions", () => {
|
|
8
12
|
it("should emit events onConnect", async () => {
|
|
9
13
|
expect.assertions(1);
|
|
@@ -173,5 +177,178 @@ describe("Websocket", () => {
|
|
|
173
177
|
});
|
|
174
178
|
});
|
|
175
179
|
});
|
|
180
|
+
describe("Memory Leak Detection", () => {
|
|
181
|
+
it("should NOT warn when subscribe is called outside onConnect", async () => {
|
|
182
|
+
expect.assertions(1);
|
|
183
|
+
await hassTestRunner.run(({ lifecycle, hass, logger, context }) => {
|
|
184
|
+
const warnSpy = vi.spyOn(logger, "warn").mockImplementation(() => { });
|
|
185
|
+
lifecycle.onReady(async () => {
|
|
186
|
+
await hass.socket.subscribe({
|
|
187
|
+
context,
|
|
188
|
+
event_type: "test_event",
|
|
189
|
+
exec: () => { },
|
|
190
|
+
});
|
|
191
|
+
// Should not have been called with memory leak warning
|
|
192
|
+
const memoryLeakWarnings = warnSpy.mock.calls.filter(call => call[1]?.toString().includes("MEMORY LEAK DETECTED"));
|
|
193
|
+
expect(memoryLeakWarnings.length).toBe(0);
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
it("should warn when subscribe is called inside onConnect callback", async () => {
|
|
198
|
+
expect.assertions(2);
|
|
199
|
+
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
|
|
200
|
+
await hassTestRunner.emitLogs("warn").run(({ lifecycle, hass, internal, context, event }) => {
|
|
201
|
+
internal.boilerplate.configuration.set("boilerplate", "LOG_LEVEL", "warn");
|
|
202
|
+
lifecycle.onReady(async () => {
|
|
203
|
+
// Wait for initial connection to complete
|
|
204
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
205
|
+
// Ensure socket is connected
|
|
206
|
+
expect(hass.socket.connectionState).toBe("connected");
|
|
207
|
+
// Register onConnect callback that subscribes (this should trigger warning)
|
|
208
|
+
hass.socket.onConnect(async () => {
|
|
209
|
+
await hass.socket.subscribe({
|
|
210
|
+
context,
|
|
211
|
+
event_type: "test_event_warn",
|
|
212
|
+
exec: () => { },
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
// Trigger onConnect by emitting SOCKET_CONNECTED event again
|
|
216
|
+
event.emit("SOCKET_CONNECTED");
|
|
217
|
+
await sleep(0);
|
|
218
|
+
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("MEMORY LEAK DETECTED"));
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
describe("Subscription Registry", () => {
|
|
224
|
+
it("should prevent duplicate subscriptions", async () => {
|
|
225
|
+
expect.assertions(1);
|
|
226
|
+
await hassTestRunner.run(({ lifecycle, hass, context }) => {
|
|
227
|
+
const sendMessageSpy = vi
|
|
228
|
+
.spyOn(hass.socket, "sendMessage")
|
|
229
|
+
.mockImplementation(async () => undefined);
|
|
230
|
+
lifecycle.onReady(async () => {
|
|
231
|
+
// Clear spy after initial bootstrap subscriptions
|
|
232
|
+
sendMessageSpy.mockClear();
|
|
233
|
+
// Subscribe to the same event twice (even with same context)
|
|
234
|
+
// Since registry tracks by event_type only, second subscription won't send message
|
|
235
|
+
await hass.socket.subscribe({
|
|
236
|
+
context,
|
|
237
|
+
event_type: "duplicate_test",
|
|
238
|
+
exec: () => { },
|
|
239
|
+
});
|
|
240
|
+
await hass.socket.subscribe({
|
|
241
|
+
context,
|
|
242
|
+
event_type: "duplicate_test",
|
|
243
|
+
exec: () => { },
|
|
244
|
+
});
|
|
245
|
+
// Should only send subscribe message once (duplicate event_type is prevented)
|
|
246
|
+
const subscribeCalls = sendMessageSpy.mock.calls.filter(call => call[0]?.type === "subscribe_events" && call[0]?.event_type === "duplicate_test");
|
|
247
|
+
expect(subscribeCalls.length).toBe(1);
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
it("should allow different event types with same context", async () => {
|
|
252
|
+
expect.assertions(1);
|
|
253
|
+
await hassTestRunner.run(({ lifecycle, hass, context }) => {
|
|
254
|
+
const sendMessageSpy = vi
|
|
255
|
+
.spyOn(hass.socket, "sendMessage")
|
|
256
|
+
.mockImplementation(async () => undefined);
|
|
257
|
+
lifecycle.onReady(async () => {
|
|
258
|
+
await hass.socket.subscribe({
|
|
259
|
+
context,
|
|
260
|
+
event_type: "event_type_1",
|
|
261
|
+
exec: () => { },
|
|
262
|
+
});
|
|
263
|
+
await hass.socket.subscribe({
|
|
264
|
+
context,
|
|
265
|
+
event_type: "event_type_2",
|
|
266
|
+
exec: () => { },
|
|
267
|
+
});
|
|
268
|
+
// Should send subscribe message for both
|
|
269
|
+
const subscribeCalls = sendMessageSpy.mock.calls.filter(call => call[0]?.type === "subscribe_events");
|
|
270
|
+
expect(subscribeCalls.length).toBeGreaterThanOrEqual(2);
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
it("should re-establish subscriptions on reconnect", async () => {
|
|
275
|
+
expect.assertions(2);
|
|
276
|
+
await hassTestRunner.run(({ lifecycle, hass, context, event }) => {
|
|
277
|
+
const sendMessageSpy = vi
|
|
278
|
+
.spyOn(hass.socket, "sendMessage")
|
|
279
|
+
.mockImplementation(async () => undefined);
|
|
280
|
+
lifecycle.onReady(async () => {
|
|
281
|
+
// Register a subscription
|
|
282
|
+
await hass.socket.subscribe({
|
|
283
|
+
context,
|
|
284
|
+
event_type: "reconnect_test",
|
|
285
|
+
exec: () => { },
|
|
286
|
+
});
|
|
287
|
+
// Clear the spy to only track re-establishment calls
|
|
288
|
+
sendMessageSpy.mockClear();
|
|
289
|
+
// Register an onConnect callback that will trigger re-establishment
|
|
290
|
+
hass.socket.onConnect(async () => {
|
|
291
|
+
// This callback will trigger re-establishment
|
|
292
|
+
});
|
|
293
|
+
// Trigger reconnect by emitting SOCKET_CONNECTED event
|
|
294
|
+
event.emit("SOCKET_CONNECTED");
|
|
295
|
+
// Wait for async operations
|
|
296
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
297
|
+
// Should have re-established the subscription
|
|
298
|
+
const reestablishCalls = sendMessageSpy.mock.calls.filter(call => call[0]?.type === "subscribe_events" && call[0]?.event_type === "reconnect_test");
|
|
299
|
+
expect(reestablishCalls.length).toBeGreaterThan(0);
|
|
300
|
+
expect(sendMessageSpy).toHaveBeenCalled();
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
it("should re-establish multiple subscriptions on reconnect", async () => {
|
|
305
|
+
expect.assertions(4);
|
|
306
|
+
await hassTestRunner.run(({ lifecycle, hass, context, event }) => {
|
|
307
|
+
const sendMessageSpy = vi
|
|
308
|
+
.spyOn(hass.socket, "sendMessage")
|
|
309
|
+
.mockImplementation(async () => undefined);
|
|
310
|
+
lifecycle.onReady(async () => {
|
|
311
|
+
// Wait for initial connection to complete
|
|
312
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
313
|
+
// Register multiple subscriptions
|
|
314
|
+
await hass.socket.subscribe({
|
|
315
|
+
context,
|
|
316
|
+
event_type: "multi_test_1",
|
|
317
|
+
exec: () => { },
|
|
318
|
+
});
|
|
319
|
+
await hass.socket.subscribe({
|
|
320
|
+
context,
|
|
321
|
+
event_type: "multi_test_2",
|
|
322
|
+
exec: () => { },
|
|
323
|
+
});
|
|
324
|
+
await hass.socket.subscribe({
|
|
325
|
+
context,
|
|
326
|
+
event_type: "multi_test_3",
|
|
327
|
+
exec: () => { },
|
|
328
|
+
});
|
|
329
|
+
// Clear the spy to only track re-establishment calls
|
|
330
|
+
sendMessageSpy.mockClear();
|
|
331
|
+
// Register an onConnect callback that will trigger re-establishment
|
|
332
|
+
hass.socket.onConnect(async () => {
|
|
333
|
+
// This callback will trigger re-establishment
|
|
334
|
+
});
|
|
335
|
+
// Trigger reconnect by emitting SOCKET_CONNECTED event
|
|
336
|
+
event.emit("SOCKET_CONNECTED");
|
|
337
|
+
// Wait for async operations
|
|
338
|
+
await new Promise(resolve => setTimeout(resolve, 150));
|
|
339
|
+
// Should have re-established our specific subscriptions (along with others)
|
|
340
|
+
const reestablishCalls = sendMessageSpy.mock.calls.filter(call => call[0]?.type === "subscribe_events" &&
|
|
341
|
+
(call[0]?.event_type === "multi_test_1" ||
|
|
342
|
+
call[0]?.event_type === "multi_test_2" ||
|
|
343
|
+
call[0]?.event_type === "multi_test_3"));
|
|
344
|
+
// Verify each specific subscription was re-established
|
|
345
|
+
expect(reestablishCalls.length).toBe(3);
|
|
346
|
+
expect(reestablishCalls.some(call => call[0]?.event_type === "multi_test_1")).toBe(true);
|
|
347
|
+
expect(reestablishCalls.some(call => call[0]?.event_type === "multi_test_2")).toBe(true);
|
|
348
|
+
expect(reestablishCalls.some(call => call[0]?.event_type === "multi_test_3")).toBe(true);
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
});
|
|
176
353
|
});
|
|
177
354
|
//# sourceMappingURL=websocket.spec.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.spec.mjs","sourceRoot":"","sources":["../../src/testing/websocket.spec.mts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"websocket.spec.mjs","sourceRoot":"","sources":["../../src/testing/websocket.spec.mts"],"names":[],"mappings":"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"}
|
package/dist/user.d.mts
CHANGED
|
@@ -21,11 +21,18 @@ export interface HassZoneMapping {
|
|
|
21
21
|
}
|
|
22
22
|
export interface HassThemeMapping {
|
|
23
23
|
}
|
|
24
|
+
export interface HassConfigEntryMapping {
|
|
25
|
+
}
|
|
26
|
+
export type FindEntryIdByTitle<TITLE extends HassConfigEntryMapping[keyof HassConfigEntryMapping]["title"]> = {
|
|
27
|
+
[K in keyof HassConfigEntryMapping]: HassConfigEntryMapping[K]["title"] extends TITLE ? K : never;
|
|
28
|
+
}[keyof HassConfigEntryMapping];
|
|
29
|
+
export type TConfigEntryTitle = HassConfigEntryMapping[keyof HassConfigEntryMapping]["title"];
|
|
24
30
|
export type TAreaId = UnPrefix<keyof HassAreaMapping>;
|
|
25
31
|
export type TDeviceId = UnPrefix<keyof HassDeviceMapping>;
|
|
26
32
|
export type TFloorId = UnPrefix<keyof HassFloorMapping>;
|
|
27
33
|
export type TLabelId = UnPrefix<keyof HassLabelMapping>;
|
|
28
34
|
export type TPlatformId = UnPrefix<keyof HassPlatformMapping>;
|
|
35
|
+
export type TConfigEntryId = keyof HassConfigEntryMapping;
|
|
29
36
|
export type TRawDomains = keyof HassDomainMapping;
|
|
30
37
|
export type TZoneId = keyof HassZoneMapping;
|
|
31
38
|
export type ALL_DOMAINS = keyof HassDomainMapping;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "@digital-alchemy/hass",
|
|
4
4
|
"repository": "https://github.com/Digital-Alchemy-TS/hass",
|
|
5
5
|
"homepage": "https://docs.digital-alchemy.app",
|
|
6
|
-
"version": "25.
|
|
6
|
+
"version": "25.11.16",
|
|
7
7
|
"description": "Typescript APIs for Home Assistant. Includes rest & websocket bindings",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "rm -rf dist/; tsc",
|
package/src/dev/mappings.mts
CHANGED
|
@@ -192,4 +192,19 @@ declare module "../user.mts" {
|
|
|
192
192
|
"LCARS Breen": true;
|
|
193
193
|
"Minimal Ninja": "light" | "dark";
|
|
194
194
|
}
|
|
195
|
+
|
|
196
|
+
export interface HassConfigEntryMapping {
|
|
197
|
+
"01JJJ3NAS9JAW1SESXZRHG7YH7": { title: "Sun"; domain: "sun" };
|
|
198
|
+
"01JJJ3NAVSK3WCDRZQADJVMDRH": { title: "Supervisor"; domain: "hassio" };
|
|
199
|
+
"01JJJ3NAVSPAHW2THWYBHM1X8F": {
|
|
200
|
+
title: "Intel Corporate 0a2b (7C:2A:31:0C:B1:9B)";
|
|
201
|
+
domain: "bluetooth";
|
|
202
|
+
};
|
|
203
|
+
"01JJJ4TT048V3TMDZHN29D3X5D": { title: "Shopping list"; domain: "shopping_list" };
|
|
204
|
+
"01JJJ4TT0BD1GFQQSGN295AH7G": {
|
|
205
|
+
title: "Google Translate text-to-speech";
|
|
206
|
+
domain: "google_translate";
|
|
207
|
+
};
|
|
208
|
+
"01JJJ4TT1VM15JJQ1YXC6MJKRF": { title: "Radio Browser"; domain: "radio_browser" };
|
|
209
|
+
}
|
|
195
210
|
}
|
package/src/dev/registry.mts
CHANGED
package/src/dev/services.mts
CHANGED
package/src/hass.module.mts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
Backup,
|
|
7
7
|
CallProxy,
|
|
8
8
|
Configure,
|
|
9
|
+
ConversationService,
|
|
9
10
|
Device,
|
|
10
11
|
EntityManager,
|
|
11
12
|
EventsService,
|
|
@@ -174,6 +175,11 @@ export const LIB_HASS = CreateLibrary({
|
|
|
174
175
|
*/
|
|
175
176
|
configure: Configure,
|
|
176
177
|
|
|
178
|
+
/**
|
|
179
|
+
* conversation agent interactions
|
|
180
|
+
*/
|
|
181
|
+
conversation: ConversationService,
|
|
182
|
+
|
|
177
183
|
/**
|
|
178
184
|
* device interactions
|
|
179
185
|
*/
|
|
@@ -252,6 +258,10 @@ export const LIB_HASS = CreateLibrary({
|
|
|
252
258
|
});
|
|
253
259
|
|
|
254
260
|
declare module "@digital-alchemy/core" {
|
|
261
|
+
export interface AsyncLogData {
|
|
262
|
+
hassOnConnect?: boolean;
|
|
263
|
+
}
|
|
264
|
+
|
|
255
265
|
export interface LoadedModules {
|
|
256
266
|
/**
|
|
257
267
|
* tools for interacting with home assistant
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
HassConfigEntryMapping,
|
|
3
|
+
TAreaId,
|
|
4
|
+
TConfigEntryId,
|
|
5
|
+
TFloorId,
|
|
6
|
+
TLabelId,
|
|
7
|
+
} from "../../user.mts";
|
|
2
8
|
|
|
3
9
|
export interface HassUnitSystem {
|
|
4
10
|
length: "mi";
|
|
@@ -52,10 +58,10 @@ export type AreaCreate = {
|
|
|
52
58
|
picture?: string;
|
|
53
59
|
};
|
|
54
60
|
|
|
55
|
-
export interface ConfigEntry {
|
|
56
|
-
entry_id:
|
|
57
|
-
domain:
|
|
58
|
-
title:
|
|
61
|
+
export interface ConfigEntry<ENTRY_ID extends TConfigEntryId = TConfigEntryId> {
|
|
62
|
+
entry_id: ENTRY_ID;
|
|
63
|
+
domain: HassConfigEntryMapping[ENTRY_ID]["domain"];
|
|
64
|
+
title: HassConfigEntryMapping[ENTRY_ID]["title"];
|
|
59
65
|
source: string;
|
|
60
66
|
state: State;
|
|
61
67
|
supports_options: boolean;
|
|
@@ -25,10 +25,12 @@ import type {
|
|
|
25
25
|
TRawEntityIds,
|
|
26
26
|
TUniqueId,
|
|
27
27
|
} from "../user.mts";
|
|
28
|
+
import type { FindEntryIdByTitle, TConfigEntryId, TConfigEntryTitle } from "../user.mts";
|
|
28
29
|
import type { BackupResponse, HomeAssistantBackup } from "./backup.mts";
|
|
29
30
|
import type { DeviceDetails } from "./device.mts";
|
|
30
31
|
import type { ByIdProxy } from "./entity-state.mts";
|
|
31
32
|
import type { AreaCreate, AreaDetails, ConfigEntry, HassConfig, HassServiceDTO } from "./index.mts";
|
|
33
|
+
import type { SupportedLanguages } from "./languages.mts";
|
|
32
34
|
import type {
|
|
33
35
|
EditAliasOptions,
|
|
34
36
|
EditLabelOptions,
|
|
@@ -96,6 +98,11 @@ export type HassBackupService = {
|
|
|
96
98
|
};
|
|
97
99
|
|
|
98
100
|
export type HassConfigService = {
|
|
101
|
+
current: () => ConfigEntry<TConfigEntryId>[];
|
|
102
|
+
get: () => Promise<ConfigEntry<TConfigEntryId>[]>;
|
|
103
|
+
byTitle: <TITLE extends TConfigEntryTitle>(
|
|
104
|
+
title: TITLE,
|
|
105
|
+
) => ConfigEntry<FindEntryIdByTitle<TITLE>> | undefined;
|
|
99
106
|
getServices: () => HassServiceDTO[];
|
|
100
107
|
isService: <DOMAIN extends ALL_SERVICE_DOMAINS>(
|
|
101
108
|
domain: DOMAIN,
|
|
@@ -215,8 +222,15 @@ export enum WebsocketConnectionState {
|
|
|
215
222
|
|
|
216
223
|
export type ConnectionState = `${keyof typeof WebsocketConnectionState}`;
|
|
217
224
|
|
|
225
|
+
export type ConversationAgent = {
|
|
226
|
+
id: string;
|
|
227
|
+
name: string;
|
|
228
|
+
supported_languages: SupportedLanguages[];
|
|
229
|
+
};
|
|
230
|
+
|
|
218
231
|
export type HassConversationService = {
|
|
219
232
|
addAlias: (options: EditAliasOptions) => Promise<void>;
|
|
233
|
+
listAgents: () => Promise<ConversationAgent[]>;
|
|
220
234
|
removeAlias: (options: EditAliasOptions) => Promise<void>;
|
|
221
235
|
setConversational: (options: ToggleExpose) => Promise<void>;
|
|
222
236
|
};
|
|
@@ -13,6 +13,19 @@ export function Area({
|
|
|
13
13
|
event,
|
|
14
14
|
lifecycle,
|
|
15
15
|
}: TServiceParams): HassAreaService {
|
|
16
|
+
void hass.socket.subscribe({
|
|
17
|
+
context,
|
|
18
|
+
event_type: "area_registry_updated",
|
|
19
|
+
async exec() {
|
|
20
|
+
const ms = perf();
|
|
21
|
+
await debounce(AREA_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
22
|
+
hass.area.current = await hass.area.list();
|
|
23
|
+
logger.debug(`area registry updated`);
|
|
24
|
+
event.emit(AREA_REGISTRY_UPDATED);
|
|
25
|
+
hass.diagnostics.area?.registry_update.publish({ ms: ms() });
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
|
|
16
29
|
hass.socket.onConnect(async () => {
|
|
17
30
|
let loading = new Promise<void>(async done => {
|
|
18
31
|
hass.area.current = await hass.area.list();
|
|
@@ -20,19 +33,6 @@ export function Area({
|
|
|
20
33
|
done();
|
|
21
34
|
});
|
|
22
35
|
lifecycle.onReady(async () => loading && (await loading), EARLY_ON_READY);
|
|
23
|
-
|
|
24
|
-
hass.socket.subscribe({
|
|
25
|
-
context,
|
|
26
|
-
event_type: "area_registry_updated",
|
|
27
|
-
async exec() {
|
|
28
|
-
const ms = perf();
|
|
29
|
-
await debounce(AREA_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
30
|
-
hass.area.current = await hass.area.list();
|
|
31
|
-
logger.debug(`area registry updated`);
|
|
32
|
-
event.emit(AREA_REGISTRY_UPDATED);
|
|
33
|
-
hass.diagnostics.area?.registry_update.publish({ ms: ms() });
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
async function list() {
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-magic-numbers */
|
|
2
2
|
import type { TServiceParams } from "@digital-alchemy/core";
|
|
3
|
-
import { asyncNoop, INCREMENT, SECOND, sleep, START } from "@digital-alchemy/core";
|
|
3
|
+
import { asyncNoop, debounce, INCREMENT, SECOND, sleep, START } from "@digital-alchemy/core";
|
|
4
4
|
import { env } from "process";
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type {
|
|
7
|
+
ALL_SERVICE_DOMAINS,
|
|
8
|
+
ConfigEntry,
|
|
9
|
+
HassConfigService,
|
|
10
|
+
HassServiceDTO,
|
|
11
|
+
} from "../helpers/index.mts";
|
|
7
12
|
import { PostConfigPriorities } from "../helpers/index.mts";
|
|
8
|
-
import type {
|
|
13
|
+
import type {
|
|
14
|
+
FindEntryIdByTitle,
|
|
15
|
+
iCallService,
|
|
16
|
+
TConfigEntryId,
|
|
17
|
+
TConfigEntryTitle,
|
|
18
|
+
} from "../user.mts";
|
|
9
19
|
|
|
10
20
|
const MAX_ATTEMPTS = 50;
|
|
11
21
|
const FAILED = 1;
|
|
12
22
|
|
|
13
23
|
export const SERVICE_LIST_UPDATED = "SERVICE_LIST_UPDATED";
|
|
24
|
+
export const CONFIG_ENTRIES_UPDATED = "CONFIG_ENTRIES_UPDATED";
|
|
14
25
|
|
|
15
26
|
export function Configure({
|
|
16
27
|
logger,
|
|
@@ -19,10 +30,12 @@ export function Configure({
|
|
|
19
30
|
hass,
|
|
20
31
|
config,
|
|
21
32
|
internal,
|
|
33
|
+
context,
|
|
22
34
|
}: TServiceParams): HassConfigService {
|
|
23
35
|
const { is } = internal.utils;
|
|
24
36
|
let checkedServices = new Map<string, boolean>();
|
|
25
37
|
let services: HassServiceDTO[];
|
|
38
|
+
let configEntries: ConfigEntry<TConfigEntryId>[] = [];
|
|
26
39
|
|
|
27
40
|
lifecycle.onPreInit(() => {
|
|
28
41
|
// HASSIO_TOKEN provided by home assistant to addons
|
|
@@ -77,6 +90,7 @@ export function Configure({
|
|
|
77
90
|
if (recursion > MAX_ATTEMPTS) {
|
|
78
91
|
logger.fatal({ name: loadServiceList }, `failed to load service list from Home Assistant`);
|
|
79
92
|
process.exit(FAILED);
|
|
93
|
+
return;
|
|
80
94
|
}
|
|
81
95
|
logger.warn(
|
|
82
96
|
{ name: loadServiceList },
|
|
@@ -98,15 +112,48 @@ export function Configure({
|
|
|
98
112
|
domain: DOMAIN,
|
|
99
113
|
service: string,
|
|
100
114
|
): service is Extract<keyof iCallService[DOMAIN], string> {
|
|
101
|
-
|
|
102
|
-
|
|
115
|
+
const key = [domain, service].join(".");
|
|
116
|
+
if (checkedServices.has(key)) {
|
|
117
|
+
return checkedServices.get(key);
|
|
103
118
|
}
|
|
104
119
|
const exists = services.some(i => i.domain === domain && !is.undefined(i.services[service]));
|
|
105
|
-
checkedServices.set(
|
|
120
|
+
checkedServices.set(key, exists);
|
|
106
121
|
return exists;
|
|
107
122
|
}
|
|
108
123
|
|
|
124
|
+
function byTitle<TITLE extends TConfigEntryTitle>(
|
|
125
|
+
title: TITLE,
|
|
126
|
+
): ConfigEntry<FindEntryIdByTitle<TITLE>> {
|
|
127
|
+
logger.trace({ name: byTitle, title }, `looking up config entry by title`);
|
|
128
|
+
const entry = configEntries.find(e => e.title === title);
|
|
129
|
+
return entry as ConfigEntry<FindEntryIdByTitle<TITLE>>;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async function get(): Promise<ConfigEntry<TConfigEntryId>[]> {
|
|
133
|
+
logger.trace({ name: get }, `fetching config entries`);
|
|
134
|
+
const entries = await hass.socket.sendMessage<ConfigEntry<TConfigEntryId>[]>({
|
|
135
|
+
type: "config_entries/get",
|
|
136
|
+
});
|
|
137
|
+
configEntries = entries;
|
|
138
|
+
event.emit(CONFIG_ENTRIES_UPDATED, entries);
|
|
139
|
+
return entries;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
void hass.socket.subscribe({
|
|
143
|
+
context,
|
|
144
|
+
event_type: "config_entry_updated",
|
|
145
|
+
async exec() {
|
|
146
|
+
await debounce(CONFIG_ENTRIES_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
147
|
+
await get();
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
hass.socket.onConnect(async () => await get());
|
|
152
|
+
|
|
109
153
|
return {
|
|
154
|
+
byTitle,
|
|
155
|
+
current: () => configEntries,
|
|
156
|
+
get,
|
|
110
157
|
getServices: () => services,
|
|
111
158
|
isService,
|
|
112
159
|
loadServiceList,
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { TServiceParams } from "@digital-alchemy/core";
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
ConversationAgent,
|
|
5
|
+
EditAliasOptions,
|
|
6
|
+
HassConversationService,
|
|
7
|
+
ToggleExpose,
|
|
8
|
+
} from "../helpers/index.mts";
|
|
4
9
|
import { UPDATE_REGISTRY } from "../helpers/index.mts";
|
|
5
10
|
|
|
6
|
-
export function
|
|
11
|
+
export function ConversationService({ hass, logger }: TServiceParams): HassConversationService {
|
|
7
12
|
async function addAlias({ entity, alias }: EditAliasOptions) {
|
|
8
13
|
const current = await hass.entity.registry.get(entity);
|
|
9
14
|
if (current?.aliases?.includes(alias)) {
|
|
@@ -25,6 +30,14 @@ export function Conversation({ hass, logger }: TServiceParams): HassConversation
|
|
|
25
30
|
await hass.socket.sendMessage({ entity_id: entity, type: UPDATE_REGISTRY });
|
|
26
31
|
}
|
|
27
32
|
|
|
33
|
+
async function listAgents() {
|
|
34
|
+
logger.trace({ name: "listAgents" }, "fetching conversation agents");
|
|
35
|
+
const result = await hass.socket.sendMessage<{ agents: ConversationAgent[] }>({
|
|
36
|
+
type: "conversation/agent/list",
|
|
37
|
+
});
|
|
38
|
+
return result.agents;
|
|
39
|
+
}
|
|
40
|
+
|
|
28
41
|
async function setConversational({ entity_ids, assistants, should_expose }: ToggleExpose) {
|
|
29
42
|
await hass.socket.sendMessage({
|
|
30
43
|
assistants: [assistants].flat(),
|
|
@@ -36,6 +49,7 @@ export function Conversation({ hass, logger }: TServiceParams): HassConversation
|
|
|
36
49
|
|
|
37
50
|
return {
|
|
38
51
|
addAlias,
|
|
52
|
+
listAgents,
|
|
39
53
|
removeAlias,
|
|
40
54
|
setConversational,
|
|
41
55
|
};
|
|
@@ -12,6 +12,19 @@ export function Device({
|
|
|
12
12
|
lifecycle,
|
|
13
13
|
event,
|
|
14
14
|
}: TServiceParams): HassDeviceService {
|
|
15
|
+
void hass.socket.subscribe({
|
|
16
|
+
context,
|
|
17
|
+
event_type: "device_registry_updated",
|
|
18
|
+
async exec() {
|
|
19
|
+
const ms = perf();
|
|
20
|
+
await debounce(DEVICE_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
21
|
+
hass.device.current = await hass.device.list();
|
|
22
|
+
logger.debug(`device registry updated`);
|
|
23
|
+
event.emit(DEVICE_REGISTRY_UPDATED);
|
|
24
|
+
hass.diagnostics.device?.registry_update.publish({ ms: ms() });
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
15
28
|
hass.socket.onConnect(async () => {
|
|
16
29
|
let loading = new Promise<void>(async done => {
|
|
17
30
|
hass.device.current = await hass.device.list();
|
|
@@ -19,29 +32,8 @@ export function Device({
|
|
|
19
32
|
done();
|
|
20
33
|
});
|
|
21
34
|
lifecycle.onReady(async () => loading && (await loading), EARLY_ON_READY);
|
|
22
|
-
await subscribeUpdates();
|
|
23
|
-
|
|
24
|
-
hass.socket.subscribe({
|
|
25
|
-
context,
|
|
26
|
-
event_type: "device_registry_updated",
|
|
27
|
-
async exec() {
|
|
28
|
-
const ms = perf();
|
|
29
|
-
await debounce(DEVICE_REGISTRY_UPDATED, config.hass.EVENT_DEBOUNCE_MS);
|
|
30
|
-
hass.device.current = await hass.device.list();
|
|
31
|
-
logger.debug(`device registry updated`);
|
|
32
|
-
event.emit(DEVICE_REGISTRY_UPDATED);
|
|
33
|
-
hass.diagnostics.device?.registry_update.publish({ ms: ms() });
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
35
|
});
|
|
37
36
|
|
|
38
|
-
async function subscribeUpdates() {
|
|
39
|
-
await hass.socket.sendMessage({
|
|
40
|
-
event_type: "device_registry_updated",
|
|
41
|
-
type: "subscribe_events",
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
|
|
45
37
|
async function list() {
|
|
46
38
|
return await hass.socket.sendMessage<DeviceDetails[]>({
|
|
47
39
|
type: "config/device_registry/list",
|