@digital-alchemy/hass 25.10.18 → 25.10.19-beta.0

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.
@@ -9,7 +9,7 @@ import type { ByIdProxy } from "./entity-state.mts";
9
9
  import type { AreaCreate, AreaDetails, ConfigEntry, HassConfig, HassServiceDTO } from "./index.mts";
10
10
  import type { EditAliasOptions, EditLabelOptions, EntityRegistryItem, FloorCreate, FloorDetails, LabelDefinition, LabelOptions, ManifestItem, ToggleExpose, UpdateCoreOptions, ZoneDetails, ZoneOptions } from "./registry.mts";
11
11
  import type { ALL_SERVICE_DOMAINS, ENTITY_STATE } from "./utility.mts";
12
- import type { EntityHistoryDTO, EntityHistoryResult, OnHassEventOptions, SocketMessageDTO, SocketSubscribeOptions } from "./websocket.mts";
12
+ import type { EntityHistoryDTO, EntityHistoryResult, OnHassEventOptions, SocketSubscribeOptions } from "./websocket.mts";
13
13
  export type HassAreaService = {
14
14
  apply: (area: TAreaId, entities: ANY_ENTITY[]) => Promise<{
15
15
  updated: ANY_ENTITY[];
@@ -83,7 +83,9 @@ export type HassWebsocketAPI = {
83
83
  *
84
84
  * for unit testing
85
85
  */
86
- onMessage: (message: SocketMessageDTO) => Promise<void>;
86
+ onMessage: <T extends {
87
+ type: string;
88
+ }>(message: T) => Promise<void>;
87
89
  /**
88
90
  * when true:
89
91
  * - outgoing socket messages are blocked
@@ -104,6 +106,12 @@ export type HassWebsocketAPI = {
104
106
  * internal
105
107
  */
106
108
  setConnectionState: (state: ConnectionState) => void;
109
+ /**
110
+ * Register a handler for incoming websocket messages by type
111
+ */
112
+ registerMessageHandler: <T extends {
113
+ type: string;
114
+ }>(type: string, callback: (message: T) => TBlackHole) => void;
107
115
  /**
108
116
  * internal
109
117
  */
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.mjs","sourceRoot":"","sources":["../../src/helpers/interfaces.mts"],"names":[],"mappings":"AA6LA,wDAAwD;AACxD,MAAM,CAAN,IAAY,wBAMX;AAND,WAAY,wBAAwB;IAClC,6EAAW,CAAA;IACX,mFAAc,CAAA;IACd,iFAAa,CAAA;IACb,6EAAW,CAAA;IACX,6EAAW,CAAA;AACb,CAAC,EANW,wBAAwB,KAAxB,wBAAwB,QAMnC"}
1
+ {"version":3,"file":"interfaces.mjs","sourceRoot":"","sources":["../../src/helpers/interfaces.mts"],"names":[],"mappings":"AAmMA,wDAAwD;AACxD,MAAM,CAAN,IAAY,wBAMX;AAND,WAAY,wBAAwB;IAClC,6EAAW,CAAA;IACX,mFAAc,CAAA;IACd,iFAAa,CAAA;IACb,6EAAW,CAAA;IACX,6EAAW,CAAA;AACb,CAAC,EANW,wBAAwB,KAAxB,wBAAwB,QAMnC"}
@@ -18,6 +18,7 @@ export function WebsocketAPI({ context, event, hass, config, internal, lifecycle
18
18
  let MESSAGE_TIMESTAMPS = [];
19
19
  let onSocketReady;
20
20
  const waitingCallback = new Map();
21
+ const messageHandlers = new Map();
21
22
  const isOld = (date) => is.undefined(date) || date.diff(dayjs(), "s") >= config.hass.RETRY_INTERVAL;
22
23
  // Start the socket
23
24
  lifecycle.onBootstrap(async () => {
@@ -220,6 +221,16 @@ export function WebsocketAPI({ context, event, hass, config, internal, lifecycle
220
221
  sentAt: internal.utils.relativeDate(sentAt),
221
222
  }, `sent message, did not receive reply`);
222
223
  }
224
+ // #MARK: registerMessageHandler
225
+ function registerMessageHandler(type, callback) {
226
+ const handlers = messageHandlers.get(type) ?? [];
227
+ logger.trace({ type }, "register socket message handler");
228
+ if (!messageHandlers.has(type)) {
229
+ messageHandlers.set(type, []);
230
+ }
231
+ handlers.push(callback);
232
+ messageHandlers.set(type, handlers);
233
+ }
223
234
  // #MARK: countMessage
224
235
  function countMessage() {
225
236
  messageCount++;
@@ -304,44 +315,15 @@ export function WebsocketAPI({ context, event, hass, config, internal, lifecycle
304
315
  * Response to an outgoing emit
305
316
  */
306
317
  async function onMessage(message) {
307
- const id = Number(message.id);
308
318
  setImmediate(() => hass.diagnostics.websocket?.message_received.publish({ message }));
309
- switch (message.type) {
310
- case "auth_required": {
311
- logger.trace({ name: onMessage }, `sending authentication`);
312
- void hass.socket.sendMessage({ access_token: config.hass.TOKEN, type: "auth" }, false);
313
- return;
314
- }
315
- case "auth_ok": {
316
- // * Flag as valid connection
317
- logger.trace({ name: onMessage }, `event subscriptions starting`);
318
- await hass.socket.sendMessage({ type: "subscribe_events" }, false);
319
- onSocketReady?.();
320
- event.emit(SOCKET_CONNECTED);
321
- return;
322
- }
323
- case "event": {
324
- return await onMessageEvent(id, message);
325
- }
326
- // 👾
327
- case "pong": {
328
- // nothing in particular needs to be done, just don't log an error (default)
329
- return;
330
- }
331
- case "result": {
332
- return await onMessageResult(id, message);
333
- }
334
- case "auth_invalid": {
335
- hass.socket.setConnectionState("invalid");
336
- logger.fatal({ message, name: onMessage }, "received auth invalid {connecting} => {invalid}");
337
- // ? If you have a use case for making this exit configurable, open a ticket
338
- process.exit();
339
- return;
340
- }
341
- default: {
342
- // Code error probably?
343
- logger.error({ name: onMessage }, `unknown websocket message type: ${message.type}`);
344
- }
319
+ const handlers = messageHandlers.get(message.type);
320
+ if (is.empty(handlers)) {
321
+ logger.error(`unknown websocket message type: ${message.type}`);
322
+ return;
323
+ }
324
+ // Execute all registered handlers for this message type
325
+ for (const handler of handlers) {
326
+ await handler(message);
345
327
  }
346
328
  }
347
329
  // #MARK: onMessageEvent
@@ -425,6 +407,37 @@ export function WebsocketAPI({ context, event, hass, config, internal, lifecycle
425
407
  event.on(SOCKET_CONNECTED, wrapped);
426
408
  return internal.removeFn(() => event.removeListener(SOCKET_CONNECTED, wrapped));
427
409
  }
410
+ lifecycle.onPreInit(() => {
411
+ // Register all current message handlers
412
+ hass.socket.registerMessageHandler("auth_required", async () => {
413
+ logger.trace({ name: onMessage }, `sending authentication`);
414
+ void hass.socket.sendMessage({ access_token: config.hass.TOKEN, type: "auth" }, false);
415
+ });
416
+ hass.socket.registerMessageHandler("auth_ok", async () => {
417
+ // * Flag as valid connection
418
+ logger.trace({ name: onMessage }, `event subscriptions starting`);
419
+ await hass.socket.sendMessage({ type: "subscribe_events" }, false);
420
+ onSocketReady?.();
421
+ event.emit(SOCKET_CONNECTED);
422
+ });
423
+ hass.socket.registerMessageHandler("event", async (message) => {
424
+ const id = Number(message.id);
425
+ return await onMessageEvent(id, message);
426
+ });
427
+ hass.socket.registerMessageHandler("pong", async () => {
428
+ // nothing in particular needs to be done, just don't log an error (default)
429
+ });
430
+ hass.socket.registerMessageHandler("result", async (message) => {
431
+ const id = Number(message.id);
432
+ return await onMessageResult(id, message);
433
+ });
434
+ hass.socket.registerMessageHandler("auth_invalid", async (message) => {
435
+ hass.socket.setConnectionState("invalid");
436
+ logger.fatal({ message, name: onMessage }, "received auth invalid {connecting} => {invalid}");
437
+ // ? If you have a use case for making this exit configurable, open a ticket
438
+ process.exit();
439
+ });
440
+ });
428
441
  // #MARK: return object
429
442
  return {
430
443
  attachScheduledFunctions,
@@ -437,6 +450,7 @@ export function WebsocketAPI({ context, event, hass, config, internal, lifecycle
437
450
  onEvent,
438
451
  onMessage,
439
452
  pauseMessages: false,
453
+ registerMessageHandler,
440
454
  sendMessage,
441
455
  setConnectionState,
442
456
  socketEvents,
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-api.service.mjs","sourceRoot":"","sources":["../../src/services/websocket-api.service.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket-api.service.mjs","sourceRoot":"","sources":["../../src/services/websocket-api.service.mts"],"names":[],"mappings":"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"}
@@ -48,5 +48,130 @@ describe("Websocket", () => {
48
48
  });
49
49
  });
50
50
  });
51
+ describe("Message Handler Registration", () => {
52
+ it("should register and execute message handlers", async () => {
53
+ expect.assertions(4);
54
+ await hassTestRunner.run(({ lifecycle, hass }) => {
55
+ let handler1Called = false;
56
+ let handler2Called = false;
57
+ hass.socket.registerMessageHandler("test_message", async (message) => {
58
+ handler1Called = true;
59
+ expect(message.type).toBe("test_message");
60
+ });
61
+ hass.socket.registerMessageHandler("test_message", async (message) => {
62
+ handler2Called = true;
63
+ expect(message.type).toBe("test_message");
64
+ });
65
+ lifecycle.onReady(async () => {
66
+ await hass.socket.onMessage({
67
+ data: { test: "data" },
68
+ id: 1,
69
+ type: "test_message",
70
+ });
71
+ expect(handler1Called).toBe(true);
72
+ expect(handler2Called).toBe(true);
73
+ });
74
+ });
75
+ });
76
+ it("should handle generic message types", async () => {
77
+ expect.assertions(2);
78
+ await hassTestRunner.run(({ lifecycle, hass }) => {
79
+ let handlerCalled = false;
80
+ hass.socket.registerMessageHandler("custom_type", async (message) => {
81
+ handlerCalled = true;
82
+ expect(message.customProperty).toBe("test_value");
83
+ });
84
+ lifecycle.onReady(async () => {
85
+ await hass.socket.onMessage({
86
+ customProperty: "test_value",
87
+ id: 1,
88
+ type: "custom_type",
89
+ });
90
+ expect(handlerCalled).toBe(true);
91
+ });
92
+ });
93
+ });
94
+ it("should handle unknown message types gracefully", async () => {
95
+ expect.assertions(1);
96
+ await hassTestRunner.run(({ lifecycle, hass }) => {
97
+ let errorOccurred = false;
98
+ lifecycle.onReady(async () => {
99
+ try {
100
+ // Use a message type that definitely won't have handlers and won't trigger auth flow
101
+ await hass.socket.onMessage({
102
+ id: 1,
103
+ type: "completely_unknown_type_12345",
104
+ });
105
+ }
106
+ catch {
107
+ errorOccurred = true;
108
+ }
109
+ // The function should complete without throwing an error
110
+ expect(errorOccurred).toBe(false);
111
+ });
112
+ });
113
+ });
114
+ it("should execute multiple handlers for the same message type", async () => {
115
+ expect.assertions(4);
116
+ await hassTestRunner.run(({ lifecycle, hass }) => {
117
+ const executionOrder = [];
118
+ hass.socket.registerMessageHandler("multi_handler", async (message) => {
119
+ executionOrder.push("first");
120
+ expect(message.type).toBe("multi_handler");
121
+ });
122
+ hass.socket.registerMessageHandler("multi_handler", async (message) => {
123
+ executionOrder.push("second");
124
+ expect(message.type).toBe("multi_handler");
125
+ });
126
+ hass.socket.registerMessageHandler("multi_handler", async (message) => {
127
+ executionOrder.push("third");
128
+ expect(message.type).toBe("multi_handler");
129
+ });
130
+ lifecycle.onReady(async () => {
131
+ await hass.socket.onMessage({
132
+ id: 1,
133
+ type: "multi_handler",
134
+ });
135
+ expect(executionOrder).toEqual(["first", "second", "third"]);
136
+ });
137
+ });
138
+ });
139
+ it("should handle async handlers correctly", async () => {
140
+ expect.assertions(2);
141
+ await hassTestRunner.run(({ lifecycle, hass }) => {
142
+ let asyncHandlerCompleted = false;
143
+ hass.socket.registerMessageHandler("async_test", async (message) => {
144
+ await new Promise(resolve => setTimeout(resolve, 10));
145
+ asyncHandlerCompleted = true;
146
+ expect(message.type).toBe("async_test");
147
+ });
148
+ lifecycle.onReady(async () => {
149
+ await hass.socket.onMessage({
150
+ id: 1,
151
+ type: "async_test",
152
+ });
153
+ expect(asyncHandlerCompleted).toBe(true);
154
+ });
155
+ });
156
+ });
157
+ it("should work with existing message types", async () => {
158
+ expect.assertions(2);
159
+ await hassTestRunner.run(({ lifecycle, hass }) => {
160
+ let customAuthHandlerCalled = false;
161
+ // Register an additional handler for auth_required
162
+ hass.socket.registerMessageHandler("auth_required", async (message) => {
163
+ customAuthHandlerCalled = true;
164
+ expect(message.type).toBe("auth_required");
165
+ });
166
+ lifecycle.onReady(async () => {
167
+ await hass.socket.onMessage({
168
+ id: 1,
169
+ type: "auth_required",
170
+ });
171
+ expect(customAuthHandlerCalled).toBe(true);
172
+ });
173
+ });
174
+ });
175
+ });
51
176
  });
52
177
  //# 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/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.10.18",
6
+ "version": "25.10.19-beta.0",
7
7
  "description": "Typescript APIs for Home Assistant. Includes rest & websocket bindings",
8
8
  "scripts": {
9
9
  "build": "rm -rf dist/; tsc",
@@ -46,7 +46,6 @@ import type {
46
46
  EntityHistoryDTO,
47
47
  EntityHistoryResult,
48
48
  OnHassEventOptions,
49
- SocketMessageDTO,
50
49
  SocketSubscribeOptions,
51
50
  } from "./websocket.mts";
52
51
 
@@ -139,7 +138,7 @@ export type HassWebsocketAPI = {
139
138
  *
140
139
  * for unit testing
141
140
  */
142
- onMessage: (message: SocketMessageDTO) => Promise<void>;
141
+ onMessage: <T extends { type: string }>(message: T) => Promise<void>;
143
142
  /**
144
143
  * when true:
145
144
  * - outgoing socket messages are blocked
@@ -164,6 +163,13 @@ export type HassWebsocketAPI = {
164
163
  * internal
165
164
  */
166
165
  setConnectionState: (state: ConnectionState) => void;
166
+ /**
167
+ * Register a handler for incoming websocket messages by type
168
+ */
169
+ registerMessageHandler: <T extends { type: string }>(
170
+ type: string,
171
+ callback: (message: T) => TBlackHole,
172
+ ) => void;
167
173
  /**
168
174
  * internal
169
175
  */
@@ -30,6 +30,8 @@ type WaitingMap = Map<
30
30
  }
31
31
  >;
32
32
 
33
+ type MessageHandlerMap = Map<string, Array<(message: { type: string }) => TBlackHole>>;
34
+
33
35
  export function WebsocketAPI({
34
36
  context,
35
37
  event,
@@ -51,6 +53,7 @@ export function WebsocketAPI({
51
53
  let MESSAGE_TIMESTAMPS: number[] = [];
52
54
  let onSocketReady: () => void;
53
55
  const waitingCallback: WaitingMap = new Map();
56
+ const messageHandlers: MessageHandlerMap = new Map();
54
57
  const isOld = (date: Dayjs) =>
55
58
  is.undefined(date) || date.diff(dayjs(), "s") >= config.hass.RETRY_INTERVAL;
56
59
 
@@ -289,6 +292,20 @@ export function WebsocketAPI({
289
292
  );
290
293
  }
291
294
 
295
+ // #MARK: registerMessageHandler
296
+ function registerMessageHandler<T extends { type: string }>(
297
+ type: string,
298
+ callback: (message: T) => TBlackHole,
299
+ ) {
300
+ const handlers = messageHandlers.get(type) ?? [];
301
+ logger.trace({ type }, "register socket message handler");
302
+ if (!messageHandlers.has(type)) {
303
+ messageHandlers.set(type, []);
304
+ }
305
+ handlers.push(callback as (message: { type: string }) => TBlackHole);
306
+ messageHandlers.set(type, handlers);
307
+ }
308
+
292
309
  // #MARK: countMessage
293
310
  function countMessage(): void | never {
294
311
  messageCount++;
@@ -399,54 +416,18 @@ export function WebsocketAPI({
399
416
  * ## result
400
417
  * Response to an outgoing emit
401
418
  */
402
- async function onMessage(message: SocketMessageDTO) {
403
- const id = Number(message.id);
419
+ async function onMessage<T extends { type: string }>(message: T) {
404
420
  setImmediate(() => hass.diagnostics.websocket?.message_received.publish({ message }));
405
- switch (message.type) {
406
- case "auth_required": {
407
- logger.trace({ name: onMessage }, `sending authentication`);
408
- void hass.socket.sendMessage({ access_token: config.hass.TOKEN, type: "auth" }, false);
409
- return;
410
- }
411
-
412
- case "auth_ok": {
413
- // * Flag as valid connection
414
- logger.trace({ name: onMessage }, `event subscriptions starting`);
415
- await hass.socket.sendMessage({ type: "subscribe_events" }, false);
416
- onSocketReady?.();
417
- event.emit(SOCKET_CONNECTED);
418
- return;
419
- }
420
421
 
421
- case "event": {
422
- return await onMessageEvent(id, message);
423
- }
424
-
425
- // 👾
426
- case "pong": {
427
- // nothing in particular needs to be done, just don't log an error (default)
428
- return;
429
- }
430
-
431
- case "result": {
432
- return await onMessageResult(id, message);
433
- }
434
-
435
- case "auth_invalid": {
436
- hass.socket.setConnectionState("invalid");
437
- logger.fatal(
438
- { message, name: onMessage },
439
- "received auth invalid {connecting} => {invalid}",
440
- );
441
- // ? If you have a use case for making this exit configurable, open a ticket
442
- process.exit();
443
- return;
444
- }
422
+ const handlers = messageHandlers.get(message.type);
423
+ if (is.empty(handlers)) {
424
+ logger.error(`unknown websocket message type: ${message.type}`);
425
+ return;
426
+ }
445
427
 
446
- default: {
447
- // Code error probably?
448
- logger.error({ name: onMessage }, `unknown websocket message type: ${message.type}`);
449
- }
428
+ // Execute all registered handlers for this message type
429
+ for (const handler of handlers) {
430
+ await handler(message as { type: string });
450
431
  }
451
432
  }
452
433
 
@@ -548,6 +529,43 @@ export function WebsocketAPI({
548
529
  return internal.removeFn(() => event.removeListener(SOCKET_CONNECTED, wrapped));
549
530
  }
550
531
 
532
+ lifecycle.onPreInit(() => {
533
+ // Register all current message handlers
534
+ hass.socket.registerMessageHandler("auth_required", async () => {
535
+ logger.trace({ name: onMessage }, `sending authentication`);
536
+ void hass.socket.sendMessage({ access_token: config.hass.TOKEN, type: "auth" }, false);
537
+ });
538
+
539
+ hass.socket.registerMessageHandler("auth_ok", async () => {
540
+ // * Flag as valid connection
541
+ logger.trace({ name: onMessage }, `event subscriptions starting`);
542
+ await hass.socket.sendMessage({ type: "subscribe_events" }, false);
543
+ onSocketReady?.();
544
+ event.emit(SOCKET_CONNECTED);
545
+ });
546
+
547
+ hass.socket.registerMessageHandler("event", async (message: SocketMessageDTO) => {
548
+ const id = Number(message.id);
549
+ return await onMessageEvent(id, message);
550
+ });
551
+
552
+ hass.socket.registerMessageHandler("pong", async () => {
553
+ // nothing in particular needs to be done, just don't log an error (default)
554
+ });
555
+
556
+ hass.socket.registerMessageHandler("result", async (message: SocketMessageDTO) => {
557
+ const id = Number(message.id);
558
+ return await onMessageResult(id, message);
559
+ });
560
+
561
+ hass.socket.registerMessageHandler("auth_invalid", async (message: SocketMessageDTO) => {
562
+ hass.socket.setConnectionState("invalid");
563
+ logger.fatal({ message, name: onMessage }, "received auth invalid {connecting} => {invalid}");
564
+ // ? If you have a use case for making this exit configurable, open a ticket
565
+ process.exit();
566
+ });
567
+ });
568
+
551
569
  // #MARK: return object
552
570
  return {
553
571
  attachScheduledFunctions,
@@ -560,6 +578,7 @@ export function WebsocketAPI({
560
578
  onEvent,
561
579
  onMessage,
562
580
  pauseMessages: false,
581
+ registerMessageHandler,
563
582
  sendMessage,
564
583
  setConnectionState,
565
584
  socketEvents,
@@ -56,4 +56,160 @@ describe("Websocket", () => {
56
56
  });
57
57
  });
58
58
  });
59
+
60
+ describe("Message Handler Registration", () => {
61
+ it("should register and execute message handlers", async () => {
62
+ expect.assertions(4);
63
+ await hassTestRunner.run(({ lifecycle, hass }) => {
64
+ let handler1Called = false;
65
+ let handler2Called = false;
66
+
67
+ hass.socket.registerMessageHandler("test_message", async message => {
68
+ handler1Called = true;
69
+ expect(message.type).toBe("test_message");
70
+ });
71
+
72
+ hass.socket.registerMessageHandler("test_message", async message => {
73
+ handler2Called = true;
74
+ expect(message.type).toBe("test_message");
75
+ });
76
+
77
+ lifecycle.onReady(async () => {
78
+ await hass.socket.onMessage({
79
+ data: { test: "data" },
80
+ id: 1,
81
+ type: "test_message",
82
+ });
83
+
84
+ expect(handler1Called).toBe(true);
85
+ expect(handler2Called).toBe(true);
86
+ });
87
+ });
88
+ });
89
+
90
+ it("should handle generic message types", async () => {
91
+ expect.assertions(2);
92
+ await hassTestRunner.run(({ lifecycle, hass }) => {
93
+ interface CustomMessage {
94
+ type: string;
95
+ customProperty: string;
96
+ id: number;
97
+ }
98
+
99
+ let handlerCalled = false;
100
+
101
+ hass.socket.registerMessageHandler<CustomMessage>("custom_type", async message => {
102
+ handlerCalled = true;
103
+ expect(message.customProperty).toBe("test_value");
104
+ });
105
+
106
+ lifecycle.onReady(async () => {
107
+ await hass.socket.onMessage({
108
+ customProperty: "test_value",
109
+ id: 1,
110
+ type: "custom_type",
111
+ });
112
+
113
+ expect(handlerCalled).toBe(true);
114
+ });
115
+ });
116
+ });
117
+
118
+ it("should handle unknown message types gracefully", async () => {
119
+ expect.assertions(1);
120
+ await hassTestRunner.run(({ lifecycle, hass }) => {
121
+ let errorOccurred = false;
122
+
123
+ lifecycle.onReady(async () => {
124
+ try {
125
+ // Use a message type that definitely won't have handlers and won't trigger auth flow
126
+ await hass.socket.onMessage({
127
+ id: 1,
128
+ type: "completely_unknown_type_12345",
129
+ });
130
+ } catch {
131
+ errorOccurred = true;
132
+ }
133
+
134
+ // The function should complete without throwing an error
135
+ expect(errorOccurred).toBe(false);
136
+ });
137
+ });
138
+ });
139
+
140
+ it("should execute multiple handlers for the same message type", async () => {
141
+ expect.assertions(4);
142
+ await hassTestRunner.run(({ lifecycle, hass }) => {
143
+ const executionOrder: string[] = [];
144
+
145
+ hass.socket.registerMessageHandler("multi_handler", async message => {
146
+ executionOrder.push("first");
147
+ expect(message.type).toBe("multi_handler");
148
+ });
149
+
150
+ hass.socket.registerMessageHandler("multi_handler", async message => {
151
+ executionOrder.push("second");
152
+ expect(message.type).toBe("multi_handler");
153
+ });
154
+
155
+ hass.socket.registerMessageHandler("multi_handler", async message => {
156
+ executionOrder.push("third");
157
+ expect(message.type).toBe("multi_handler");
158
+ });
159
+
160
+ lifecycle.onReady(async () => {
161
+ await hass.socket.onMessage({
162
+ id: 1,
163
+ type: "multi_handler",
164
+ });
165
+
166
+ expect(executionOrder).toEqual(["first", "second", "third"]);
167
+ });
168
+ });
169
+ });
170
+
171
+ it("should handle async handlers correctly", async () => {
172
+ expect.assertions(2);
173
+ await hassTestRunner.run(({ lifecycle, hass }) => {
174
+ let asyncHandlerCompleted = false;
175
+
176
+ hass.socket.registerMessageHandler("async_test", async message => {
177
+ await new Promise(resolve => setTimeout(resolve, 10));
178
+ asyncHandlerCompleted = true;
179
+ expect(message.type).toBe("async_test");
180
+ });
181
+
182
+ lifecycle.onReady(async () => {
183
+ await hass.socket.onMessage({
184
+ id: 1,
185
+ type: "async_test",
186
+ });
187
+
188
+ expect(asyncHandlerCompleted).toBe(true);
189
+ });
190
+ });
191
+ });
192
+
193
+ it("should work with existing message types", async () => {
194
+ expect.assertions(2);
195
+ await hassTestRunner.run(({ lifecycle, hass }) => {
196
+ let customAuthHandlerCalled = false;
197
+
198
+ // Register an additional handler for auth_required
199
+ hass.socket.registerMessageHandler("auth_required", async message => {
200
+ customAuthHandlerCalled = true;
201
+ expect(message.type).toBe("auth_required");
202
+ });
203
+
204
+ lifecycle.onReady(async () => {
205
+ await hass.socket.onMessage({
206
+ id: 1,
207
+ type: "auth_required",
208
+ });
209
+
210
+ expect(customAuthHandlerCalled).toBe(true);
211
+ });
212
+ });
213
+ });
214
+ });
59
215
  });