@digital-alchemy/hass 24.9.2 → 24.9.4

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.
Files changed (197) hide show
  1. package/README.md +4 -1
  2. package/dist/dynamic.d.ts +1 -1
  3. package/dist/dynamic.js +7 -2
  4. package/dist/dynamic.js.map +1 -1
  5. package/dist/extensions/area.extension.d.ts +2 -12
  6. package/dist/extensions/area.extension.js +20 -26
  7. package/dist/extensions/area.extension.js.map +1 -1
  8. package/dist/extensions/backup.extension.d.ts +2 -7
  9. package/dist/extensions/backup.extension.js +5 -8
  10. package/dist/extensions/backup.extension.js.map +1 -1
  11. package/dist/extensions/call-proxy.extension.d.ts +1 -1
  12. package/dist/extensions/call-proxy.extension.js +11 -29
  13. package/dist/extensions/call-proxy.extension.js.map +1 -1
  14. package/dist/extensions/config.extension.d.ts +2 -6
  15. package/dist/extensions/config.extension.js +21 -25
  16. package/dist/extensions/config.extension.js.map +1 -1
  17. package/dist/extensions/conversation.extension.d.ts +2 -6
  18. package/dist/extensions/conversation.extension.js +5 -8
  19. package/dist/extensions/conversation.extension.js.map +1 -1
  20. package/dist/extensions/device.extension.d.ts +2 -5
  21. package/dist/extensions/device.extension.js +16 -22
  22. package/dist/extensions/device.extension.js.map +1 -1
  23. package/dist/extensions/entity.extension.d.ts +2 -61
  24. package/dist/extensions/entity.extension.js +42 -83
  25. package/dist/extensions/entity.extension.js.map +1 -1
  26. package/dist/extensions/events.extension.d.ts +3 -11
  27. package/dist/extensions/events.extension.js +8 -11
  28. package/dist/extensions/events.extension.js.map +1 -1
  29. package/dist/extensions/fetch-api.extension.d.ts +12 -4
  30. package/dist/extensions/fetch-api.extension.js +23 -35
  31. package/dist/extensions/fetch-api.extension.js.map +1 -1
  32. package/dist/extensions/floor.extension.d.ts +2 -9
  33. package/dist/extensions/floor.extension.js +17 -23
  34. package/dist/extensions/floor.extension.js.map +1 -1
  35. package/dist/extensions/id-by.extension.js +15 -20
  36. package/dist/extensions/id-by.extension.js.map +1 -1
  37. package/dist/extensions/index.d.ts +1 -0
  38. package/dist/extensions/index.js +16 -18
  39. package/dist/extensions/index.js.map +1 -1
  40. package/dist/extensions/internal.extension.d.ts +18 -0
  41. package/dist/extensions/internal.extension.js +102 -0
  42. package/dist/extensions/internal.extension.js.map +1 -0
  43. package/dist/extensions/label.extension.d.ts +2 -9
  44. package/dist/extensions/label.extension.js +17 -23
  45. package/dist/extensions/label.extension.js.map +1 -1
  46. package/dist/extensions/reference.extension.d.ts +2 -12
  47. package/dist/extensions/reference.extension.js +19 -25
  48. package/dist/extensions/reference.extension.js.map +1 -1
  49. package/dist/extensions/registry.extension.d.ts +2 -7
  50. package/dist/extensions/registry.extension.js +1 -4
  51. package/dist/extensions/registry.extension.js.map +1 -1
  52. package/dist/extensions/websocket-api.extension.d.ts +3 -78
  53. package/dist/extensions/websocket-api.extension.js +82 -165
  54. package/dist/extensions/websocket-api.extension.js.map +1 -1
  55. package/dist/extensions/zone.extension.d.ts +2 -7
  56. package/dist/extensions/zone.extension.js +15 -21
  57. package/dist/extensions/zone.extension.js.map +1 -1
  58. package/dist/hass.module.d.ts +47 -36
  59. package/dist/hass.module.js +70 -70
  60. package/dist/hass.module.js.map +1 -1
  61. package/dist/helpers/backup.helper.js +1 -2
  62. package/dist/helpers/constants.helper.js +15 -18
  63. package/dist/helpers/constants.helper.js.map +1 -1
  64. package/dist/helpers/device.helper.js +2 -5
  65. package/dist/helpers/device.helper.js.map +1 -1
  66. package/dist/helpers/entity-state.helper.d.ts +3 -8
  67. package/dist/helpers/entity-state.helper.js +1 -8
  68. package/dist/helpers/entity-state.helper.js.map +1 -1
  69. package/dist/helpers/features.helper.js +79 -85
  70. package/dist/helpers/features.helper.js.map +1 -1
  71. package/dist/helpers/fetch/calendar.js +1 -2
  72. package/dist/helpers/fetch/configuration.js +2 -5
  73. package/dist/helpers/fetch/configuration.js.map +1 -1
  74. package/dist/helpers/fetch/index.js +5 -8
  75. package/dist/helpers/fetch/index.js.map +1 -1
  76. package/dist/helpers/fetch/server-log.js +1 -2
  77. package/dist/helpers/fetch/server-log.js.map +1 -1
  78. package/dist/helpers/fetch/service-list.js +1 -2
  79. package/dist/helpers/fetch/weather-forecasts.js +1 -2
  80. package/dist/helpers/fetch/weather-forecasts.js.map +1 -1
  81. package/dist/helpers/fetch.helper.d.ts +162 -0
  82. package/dist/helpers/fetch.helper.js +161 -0
  83. package/dist/helpers/fetch.helper.js.map +1 -0
  84. package/dist/helpers/id-by.helper.js +1 -2
  85. package/dist/helpers/index.d.ts +2 -1
  86. package/dist/helpers/index.js +13 -15
  87. package/dist/helpers/index.js.map +1 -1
  88. package/dist/helpers/interfaces.helper.d.ts +228 -0
  89. package/dist/helpers/interfaces.helper.js +10 -0
  90. package/dist/helpers/interfaces.helper.js.map +1 -0
  91. package/dist/helpers/manifest.helper.d.ts +0 -1
  92. package/dist/helpers/manifest.helper.js +0 -1
  93. package/dist/helpers/notify.helper.d.ts +11 -3
  94. package/dist/helpers/notify.helper.js +1 -2
  95. package/dist/helpers/registry.js +7 -10
  96. package/dist/helpers/registry.js.map +1 -1
  97. package/dist/helpers/utility.helper.d.ts +6 -1
  98. package/dist/helpers/utility.helper.js +9 -13
  99. package/dist/helpers/utility.helper.js.map +1 -1
  100. package/dist/helpers/websocket.helper.d.ts +1 -2
  101. package/dist/helpers/websocket.helper.js +1 -2
  102. package/dist/index.js +5 -8
  103. package/dist/index.js.map +1 -1
  104. package/dist/mock_assistant/extensions/area.extension.d.ts +8 -0
  105. package/dist/mock_assistant/extensions/area.extension.js +51 -0
  106. package/dist/mock_assistant/extensions/area.extension.js.map +1 -0
  107. package/dist/mock_assistant/extensions/config.extension.d.ts +14 -0
  108. package/dist/mock_assistant/extensions/config.extension.js +29 -0
  109. package/dist/mock_assistant/extensions/config.extension.js.map +1 -0
  110. package/dist/mock_assistant/extensions/device.extension.d.ts +8 -0
  111. package/dist/mock_assistant/extensions/device.extension.js +33 -0
  112. package/dist/mock_assistant/extensions/device.extension.js.map +1 -0
  113. package/dist/mock_assistant/extensions/entity-registry.extension.d.ts +13 -0
  114. package/dist/mock_assistant/extensions/entity-registry.extension.js +28 -0
  115. package/dist/mock_assistant/extensions/entity-registry.extension.js.map +1 -0
  116. package/dist/mock_assistant/extensions/entity.extension.d.ts +30 -0
  117. package/dist/mock_assistant/extensions/entity.extension.js +77 -0
  118. package/dist/mock_assistant/extensions/entity.extension.js.map +1 -0
  119. package/dist/mock_assistant/extensions/events.extension.d.ts +1 -1
  120. package/dist/mock_assistant/extensions/events.extension.js +3 -6
  121. package/dist/mock_assistant/extensions/events.extension.js.map +1 -1
  122. package/dist/mock_assistant/extensions/fetch.extension.d.ts +1 -0
  123. package/dist/mock_assistant/extensions/fetch.extension.js +4 -0
  124. package/dist/mock_assistant/extensions/fetch.extension.js.map +1 -0
  125. package/dist/mock_assistant/extensions/fixtures.extension.d.ts +1 -1
  126. package/dist/mock_assistant/extensions/fixtures.extension.js +29 -33
  127. package/dist/mock_assistant/extensions/fixtures.extension.js.map +1 -1
  128. package/dist/mock_assistant/extensions/floor.extension.d.ts +8 -0
  129. package/dist/mock_assistant/extensions/floor.extension.js +51 -0
  130. package/dist/mock_assistant/extensions/floor.extension.js.map +1 -0
  131. package/dist/mock_assistant/extensions/index.d.ts +10 -0
  132. package/dist/mock_assistant/extensions/index.js +12 -5
  133. package/dist/mock_assistant/extensions/index.js.map +1 -1
  134. package/dist/mock_assistant/extensions/label.extension.d.ts +8 -0
  135. package/dist/mock_assistant/extensions/label.extension.js +51 -0
  136. package/dist/mock_assistant/extensions/label.extension.js.map +1 -0
  137. package/dist/mock_assistant/extensions/services.extension.d.ts +12 -0
  138. package/dist/mock_assistant/extensions/services.extension.js +20 -0
  139. package/dist/mock_assistant/extensions/services.extension.js.map +1 -0
  140. package/dist/mock_assistant/extensions/websocket-api.extension.d.ts +15 -0
  141. package/dist/mock_assistant/extensions/websocket-api.extension.js +68 -0
  142. package/dist/mock_assistant/extensions/websocket-api.extension.js.map +1 -0
  143. package/dist/mock_assistant/extensions/zone.extension.d.ts +8 -0
  144. package/dist/mock_assistant/extensions/zone.extension.js +51 -0
  145. package/dist/mock_assistant/extensions/zone.extension.js.map +1 -0
  146. package/dist/mock_assistant/helpers/fixtures.js +1 -2
  147. package/dist/mock_assistant/helpers/index.d.ts +0 -1
  148. package/dist/mock_assistant/helpers/index.js +1 -5
  149. package/dist/mock_assistant/helpers/index.js.map +1 -1
  150. package/dist/mock_assistant/index.js +3 -6
  151. package/dist/mock_assistant/index.js.map +1 -1
  152. package/dist/mock_assistant/main.js +11 -15
  153. package/dist/mock_assistant/main.js.map +1 -1
  154. package/dist/mock_assistant/mock-assistant.module.d.ts +156 -3
  155. package/dist/mock_assistant/mock-assistant.module.js +56 -11
  156. package/dist/mock_assistant/mock-assistant.module.js.map +1 -1
  157. package/dist/quickboot.module.js +5 -8
  158. package/dist/quickboot.module.js.map +1 -1
  159. package/dist/testing/area.spec.js +106 -194
  160. package/dist/testing/area.spec.js.map +1 -1
  161. package/dist/testing/backup.spec.js +97 -139
  162. package/dist/testing/backup.spec.js.map +1 -1
  163. package/dist/testing/config.spec.js +79 -153
  164. package/dist/testing/config.spec.js.map +1 -1
  165. package/dist/testing/device.spec.js +35 -69
  166. package/dist/testing/device.spec.js.map +1 -1
  167. package/dist/testing/entity.spec.js +94 -149
  168. package/dist/testing/entity.spec.js.map +1 -1
  169. package/dist/testing/events.spec.js +33 -57
  170. package/dist/testing/events.spec.js.map +1 -1
  171. package/dist/testing/fetch-api.spec.js +242 -427
  172. package/dist/testing/fetch-api.spec.js.map +1 -1
  173. package/dist/testing/fixtures.spec.d.ts +1 -0
  174. package/dist/testing/fixtures.spec.js +150 -0
  175. package/dist/testing/fixtures.spec.js.map +1 -0
  176. package/dist/testing/floor.spec.js +106 -194
  177. package/dist/testing/floor.spec.js.map +1 -1
  178. package/dist/testing/id-by.spec.js +68 -107
  179. package/dist/testing/id-by.spec.js.map +1 -1
  180. package/dist/testing/label.spec.js +106 -194
  181. package/dist/testing/label.spec.js.map +1 -1
  182. package/dist/testing/ref-by.spec.js +155 -219
  183. package/dist/testing/ref-by.spec.js.map +1 -1
  184. package/dist/testing/websocket.spec.d.ts +1 -8
  185. package/dist/testing/websocket.spec.js +35 -50
  186. package/dist/testing/websocket.spec.js.map +1 -1
  187. package/dist/testing/workflow.spec.js +82 -81
  188. package/dist/testing/workflow.spec.js.map +1 -1
  189. package/dist/testing/zone.spec.js +61 -113
  190. package/dist/testing/zone.spec.js.map +1 -1
  191. package/package.json +57 -41
  192. package/dist/helpers/metrics.helper.d.ts +0 -29
  193. package/dist/helpers/metrics.helper.js +0 -62
  194. package/dist/helpers/metrics.helper.js.map +0 -1
  195. package/dist/mock_assistant/helpers/utils.d.ts +0 -4
  196. package/dist/mock_assistant/helpers/utils.js +0 -57
  197. package/dist/mock_assistant/helpers/utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"reference.extension.js","sourceRoot":"","sources":["../../src/extensions/reference.extension.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference.extension.js","sourceRoot":"","sources":["../../src/extensions/reference.extension.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,3 @@
1
1
  import { TServiceParams } from "@digital-alchemy/core";
2
- import { ConfigEntry, HassConfig, ManifestItem, UpdateCoreOptions } from "../helpers";
3
- export declare function Registry({ hass }: TServiceParams): {
4
- getConfig: () => Promise<HassConfig>;
5
- getConfigEntries: () => Promise<ConfigEntry[]>;
6
- manifestList: () => Promise<ManifestItem[]>;
7
- updateCore: (options: UpdateCoreOptions) => Promise<void>;
8
- };
2
+ import { HassRegistryService } from "../helpers";
3
+ export declare function Registry({ hass }: TServiceParams): HassRegistryService;
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Registry = Registry;
4
- function Registry({ hass }) {
1
+ export function Registry({ hass }) {
5
2
  async function ManifestList() {
6
3
  return await hass.socket.sendMessage({
7
4
  type: "manifest/list",
@@ -1 +1 @@
1
- {"version":3,"file":"registry.extension.js","sourceRoot":"","sources":["../../src/extensions/registry.extension.ts"],"names":[],"mappings":";;AAUA,4BAgCC;AAhCD,SAAgB,QAAQ,CAAC,EAAE,IAAI,EAAkB;IAC/C,KAAK,UAAU,YAAY;QACzB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAiB;YACnD,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,UAAU,CAAC,OAA0B;QAClD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAgB;YAC3C,GAAG,OAAO;YACV,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,SAAS;QACtB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAa;YAC/C,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAgB;YAClD,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,gBAAgB;QAClC,YAAY,EAAE,YAAY;QAC1B,UAAU,EAAE,UAAU;KACvB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"registry.extension.js","sourceRoot":"","sources":["../../src/extensions/registry.extension.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAkB;IAC/C,KAAK,UAAU,YAAY;QACzB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAiB;YACnD,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,UAAU,CAAC,OAA0B;QAClD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAgB;YAC3C,GAAG,OAAO;YACV,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,SAAS;QACtB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAa;YAC/C,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAgB;YAClD,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,SAAS,EAAE,SAAS;QACpB,gBAAgB,EAAE,gBAAgB;QAClC,YAAY,EAAE,YAAY;QAC1B,UAAU,EAAE,UAAU;KACvB,CAAC;AACJ,CAAC"}
@@ -1,79 +1,4 @@
1
- import { TBlackHole, TServiceParams } from "@digital-alchemy/core";
2
- import EventEmitter from "events";
3
- import { OnHassEventOptions, SocketMessageDTO, SocketSubscribeOptions } from "..";
1
+ import { TServiceParams } from "@digital-alchemy/core";
2
+ import { HassWebsocketAPI } from "..";
4
3
  export declare const SOCKET_CONNECTED = "SOCKET_CONNECTED";
5
- declare enum WebsocketConnectionState {
6
- offline = 1,
7
- connecting = 2,
8
- connected = 3,
9
- unknown = 4,
10
- invalid = 5
11
- }
12
- type ConnectionState = `${keyof typeof WebsocketConnectionState}`;
13
- export declare function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logger, scheduler, }: TServiceParams): {
14
- /**
15
- * the current state of the websocket
16
- */
17
- connectionState: ConnectionState;
18
- /**
19
- * Convenient wrapper for sendMessage
20
- */
21
- fireEvent: (event_type: string, event_data?: object) => Promise<unknown>;
22
- /**
23
- * Set up a new websocket connection to home assistant
24
- *f
25
- * This doesn't normally need to be called by applications, the extension self manages
26
- */
27
- init: () => Promise<void>;
28
- /**
29
- * run a callback when the socket finishes connecting
30
- */
31
- onConnect: (callback: () => TBlackHole) => void;
32
- /**
33
- * Attach to the incoming stream of socket events. Do your own filtering and processing from there
34
- *
35
- * Returns removal function
36
- */
37
- onEvent: <DATA extends object>({ context, label, event, once, exec, }: OnHassEventOptions<DATA>) => () => void;
38
- /**
39
- * for unit testing
40
- */
41
- onMessage: (message: SocketMessageDTO) => Promise<void>;
42
- /**
43
- * when true:
44
- * - outgoing socket messages are blocked
45
- * - entities don't emit updates
46
- */
47
- pauseMessages: boolean;
48
- /**
49
- * Send a message to home assistant via the socket connection
50
- *
51
- * Applications probably want a higher level function than this
52
- */
53
- sendMessage: <RESPONSE_VALUE extends unknown = unknown>(data: {
54
- type: string;
55
- id?: number;
56
- [key: string]: unknown;
57
- }, waitForResponse?: boolean, subscription?: () => void) => Promise<RESPONSE_VALUE>;
58
- /**
59
- * internal
60
- */
61
- setConnectionState: (state: ConnectionState) => void;
62
- /**
63
- * internal
64
- */
65
- socketEvents: EventEmitter<[never]>;
66
- /**
67
- * Subscribe to hass core registry updates.
68
- *
69
- * Not the same as `onEvent` (you probably want that)
70
- */
71
- subscribe: <EVENT extends string>({ event_type, context, exec, }: SocketSubscribeOptions<EVENT>) => Promise<void>;
72
- /**
73
- * remove the current socket connection to home assistant
74
- *
75
- * will need to call init() again to start up
76
- */
77
- teardown: () => Promise<void>;
78
- };
79
- export {};
4
+ export declare function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logger, scheduler, }: TServiceParams): HassWebsocketAPI;
@@ -1,47 +1,28 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SOCKET_CONNECTED = void 0;
4
- exports.WebsocketAPI = WebsocketAPI;
5
- const tslib_1 = require("tslib");
6
- const core_1 = require("@digital-alchemy/core");
7
- const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
8
- const events_1 = tslib_1.__importDefault(require("events"));
9
- const process_1 = require("process");
10
- const ws_1 = tslib_1.__importDefault(require("ws"));
11
- const __1 = require("..");
12
- let connection;
1
+ import { InternalError, is, SECOND, sleep, START, } from "@digital-alchemy/core";
2
+ import dayjs from "dayjs";
3
+ import EventEmitter from "events";
4
+ import WS from "ws";
13
5
  const CONNECTION_OPEN = 1;
14
6
  const CLEANUP_INTERVAL = 5;
15
7
  const UNLIMITED = 0;
16
8
  const CONNECTION_FAILED = 2;
17
- let messageCount = core_1.START;
18
- exports.SOCKET_CONNECTED = "SOCKET_CONNECTED";
19
- /* eslint-disable @typescript-eslint/no-magic-numbers */
20
- var WebsocketConnectionState;
21
- (function (WebsocketConnectionState) {
22
- WebsocketConnectionState[WebsocketConnectionState["offline"] = 1] = "offline";
23
- WebsocketConnectionState[WebsocketConnectionState["connecting"] = 2] = "connecting";
24
- WebsocketConnectionState[WebsocketConnectionState["connected"] = 3] = "connected";
25
- WebsocketConnectionState[WebsocketConnectionState["unknown"] = 4] = "unknown";
26
- WebsocketConnectionState[WebsocketConnectionState["invalid"] = 5] = "invalid";
27
- })(WebsocketConnectionState || (WebsocketConnectionState = {}));
28
- function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logger, scheduler, }) {
9
+ let messageCount = START;
10
+ export const SOCKET_CONNECTED = "SOCKET_CONNECTED";
11
+ export function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logger, scheduler, }) {
29
12
  /**
30
13
  * Local attachment points for socket events
31
14
  */
32
- const socketEvents = new events_1.default();
33
- event.setMaxListeners(UNLIMITED);
15
+ const socketEvents = new EventEmitter();
16
+ socketEvents.setMaxListeners(UNLIMITED);
34
17
  let MESSAGE_TIMESTAMPS = [];
35
18
  let onSocketReady;
36
19
  const waitingCallback = new Map();
37
- const isOld = (date) => core_1.is.undefined(date) || date.diff((0, dayjs_1.default)(), "s") >= config.hass.RETRY_INTERVAL;
20
+ const isOld = (date) => is.undefined(date) || date.diff(dayjs(), "s") >= config.hass.RETRY_INTERVAL;
38
21
  // Start the socket
39
22
  lifecycle.onBootstrap(async () => {
40
- if (config.hass.AUTO_CONNECT_SOCKET) {
41
- logger.debug({ name: "onBootstrap" }, `auto starting connection`);
42
- await ManageConnection();
43
- attachScheduledFunctions();
44
- }
23
+ logger.debug({ name: "onBootstrap" }, `auto starting connection`);
24
+ await manageConnection();
25
+ hass.socket.attachScheduledFunctions();
45
26
  });
46
27
  let lastReceivedMessage;
47
28
  let pingSleep;
@@ -50,11 +31,10 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
50
31
  // #MARK: setConnectionState
51
32
  function setConnectionState(state) {
52
33
  hass.socket.connectionState = state;
53
- __1.SOCKET_CONNECTION_STATE.labels({ state }).set(WebsocketConnectionState[state]);
54
34
  }
55
35
  // #MARK: handleUnknownConnectionState
56
36
  async function handleUnknownConnectionState() {
57
- const now = (0, dayjs_1.default)();
37
+ const now = dayjs();
58
38
  const name = handleUnknownConnectionState;
59
39
  const threshold = config.hass.RETRY_INTERVAL * CONNECTION_FAILED;
60
40
  if (!isOld(lastPingAttempt)) {
@@ -64,18 +44,12 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
64
44
  // send a ping message to force a pong
65
45
  logger.trace({ name }, `emitting ping`);
66
46
  lastPingAttempt = now;
67
- if (config.hass.MOCK_SOCKET) {
68
- // artificial ping
69
- lastReceivedMessage = now;
70
- }
71
- else {
72
- // emit a ping, do not wait for reply (inline)
73
- hass.socket.sendMessage({ type: "ping" }, false);
74
- // reply will be captured by this, waiting at most a second
75
- pingSleep = (0, core_1.sleep)(core_1.SECOND);
76
- await pingSleep;
77
- pingSleep = undefined;
78
- }
47
+ // emit a ping, do not wait for reply (inline)
48
+ hass.socket.sendMessage({ type: "ping" }, false);
49
+ // reply will be captured by this, waiting at most a second
50
+ pingSleep = sleep(SECOND);
51
+ await pingSleep;
52
+ pingSleep = undefined;
79
53
  if (!isOld(lastReceivedMessage)) {
80
54
  // received a least a pong
81
55
  hass.socket.setConnectionState("connected");
@@ -93,9 +67,9 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
93
67
  logger.warn({ name }, "hass stopped replying {unknown} => {offline}");
94
68
  }
95
69
  // #MARK: ManageConnection
96
- async function ManageConnection() {
97
- const now = (0, dayjs_1.default)();
98
- const name = ManageConnection;
70
+ async function manageConnection() {
71
+ const now = dayjs();
72
+ const name = manageConnection;
99
73
  switch (hass.socket.connectionState) {
100
74
  // * connected
101
75
  case "connected": {
@@ -126,14 +100,14 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
126
100
  // reset and try again
127
101
  await hass.socket.teardown();
128
102
  logger.warn({ name }, "connection failed {connecting} => {offline}");
129
- await ManageConnection();
103
+ await manageConnection();
130
104
  return;
131
105
  }
132
106
  // fall through
133
107
  case "offline": {
134
108
  // ### offline
135
109
  // * connection identifies as offline, let's attempt to fix that
136
- messageCount = core_1.START;
110
+ messageCount = START;
137
111
  lastConnectAttempt = now;
138
112
  hass.socket.setConnectionState("connecting");
139
113
  logger.debug({ name }, "initializing new socket {offline} => {connecting}");
@@ -159,31 +133,32 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
159
133
  function attachScheduledFunctions() {
160
134
  logger.trace({ name: attachScheduledFunctions }, `attaching interval schedules`);
161
135
  scheduler.interval({
162
- exec: async () => await ManageConnection(),
163
- interval: config.hass.RETRY_INTERVAL * core_1.SECOND,
136
+ exec: async () => await manageConnection(),
137
+ interval: config.hass.RETRY_INTERVAL * SECOND,
164
138
  });
165
139
  scheduler.interval({
166
140
  exec: () => {
167
- const now = Date.now();
168
- MESSAGE_TIMESTAMPS = MESSAGE_TIMESTAMPS.filter(time => time > now - core_1.SECOND * config.hass.SOCKET_AVG_DURATION);
141
+ const target = Date.now() - SECOND * config.hass.SOCKET_AVG_DURATION;
142
+ MESSAGE_TIMESTAMPS = MESSAGE_TIMESTAMPS.filter(time => time > target);
169
143
  },
170
- interval: CLEANUP_INTERVAL * core_1.SECOND,
144
+ interval: CLEANUP_INTERVAL * SECOND,
171
145
  });
172
146
  }
173
147
  lifecycle.onShutdownStart(async () => {
174
148
  logger.debug({ name: "onShutdownStart" }, `shutdown - tearing down connection`);
175
149
  await hass.socket.teardown();
150
+ socketEvents.removeAllListeners();
176
151
  });
177
152
  // #MARK: teardown
178
153
  async function teardown() {
179
- if (!connection) {
154
+ if (!hass.socket.connection) {
180
155
  return;
181
156
  }
182
- if (connection.readyState === CONNECTION_OPEN) {
157
+ if (hass.socket.connection.readyState === CONNECTION_OPEN) {
183
158
  logger.debug({ name: teardown }, `closing current connection`);
184
- connection.close();
159
+ hass.socket.connection.close();
185
160
  }
186
- connection = undefined;
161
+ hass.socket.connection = undefined;
187
162
  hass.socket.setConnectionState("offline");
188
163
  }
189
164
  // #MARK: fireEvent
@@ -203,7 +178,7 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
203
178
  if (hass.socket.pauseMessages && data.type !== "ping") {
204
179
  return undefined;
205
180
  }
206
- countMessage(data.type);
181
+ countMessage();
207
182
  const id = messageCount;
208
183
  if (data.type !== "auth") {
209
184
  data.id = id;
@@ -211,47 +186,44 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
211
186
  const json = JSON.stringify(data);
212
187
  const sentAt = new Date();
213
188
  // ? not defined for unit tests
214
- connection?.send(json);
189
+ hass.socket.connection?.send(json);
215
190
  if (subscription) {
216
191
  return data.id;
217
192
  }
218
193
  if (!waitForResponse) {
219
194
  return undefined;
220
195
  }
221
- return new Promise(async (done) => {
222
- if (config.hass.MOCK_SOCKET) {
223
- done(undefined); // do something else if you want a real value
224
- return;
225
- }
196
+ return await new Promise(async (done) => {
226
197
  waitingCallback.set(id, done);
227
- await (0, core_1.sleep)(config.hass.EXPECT_RESPONSE_AFTER * core_1.SECOND);
228
- if (!waitingCallback.has(id)) {
229
- return;
230
- }
231
- // this could happen around dropped connections, or a number of other reasons
232
- //
233
- // discard the promise so whatever flow is depending on this can get garbage collected
234
- waitingCallback.delete(id);
235
- logger.warn({
236
- message: data,
237
- name: sendMessage,
238
- sentAt: internal.utils.relativeDate(sentAt),
239
- }, `sent message, did not receive reply`);
198
+ await hass.socket.waitForReply(id, data, sentAt);
240
199
  });
241
200
  }
201
+ async function waitForReply(id, data, sentAt) {
202
+ await sleep(config.hass.EXPECT_RESPONSE_AFTER * SECOND);
203
+ if (!waitingCallback.has(id)) {
204
+ return;
205
+ }
206
+ // this could happen around dropped connections, or a number of other reasons
207
+ //
208
+ // discard the promise so whatever flow is depending on this can get garbage collected
209
+ waitingCallback.delete(id);
210
+ logger.warn({
211
+ message: data,
212
+ name: waitForReply,
213
+ sentAt: internal.utils.relativeDate(sentAt),
214
+ }, `sent message, did not receive reply`);
215
+ }
242
216
  // #MARK: countMessage
243
- function countMessage(type) {
217
+ function countMessage() {
244
218
  messageCount++;
245
219
  const now = Date.now();
246
220
  MESSAGE_TIMESTAMPS.push(now);
247
221
  const avgWindow = config.hass.SOCKET_AVG_DURATION;
248
- const perSecondAverage = Math.ceil(MESSAGE_TIMESTAMPS.filter(time => time > now - core_1.SECOND * avgWindow)
249
- .length / avgWindow);
250
- __1.SOCKET_SENT_MESSAGES.labels({ type }).inc();
251
- const { SOCKET_CRASH_REQUESTS_PER_SEC: crashCount, SOCKET_WARN_REQUESTS_PER_SEC: warnCount, } = config.hass;
222
+ const perSecondAverage = Math.ceil(MESSAGE_TIMESTAMPS.filter(time => time > now - SECOND * avgWindow).length / avgWindow);
223
+ const { SOCKET_CRASH_REQUESTS_PER_SEC: crashCount, SOCKET_WARN_REQUESTS_PER_SEC: warnCount } = config.hass;
252
224
  if (perSecondAverage > crashCount) {
253
225
  logger.fatal({ name: countMessage }, `exceeded {CRASH_REQUESTS_PER_MIN} ([%s]) threshold`, crashCount);
254
- (0, process_1.exit)();
226
+ process.exit();
255
227
  }
256
228
  if (perSecondAverage > warnCount) {
257
229
  logger.warn({ name: countMessage }, `message traffic [%s] > [%s] > [%s]`, crashCount, perSecondAverage, warnCount);
@@ -263,26 +235,20 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
263
235
  const protocol = url.protocol === `http:` ? `ws:` : `wss:`;
264
236
  const path = url.pathname === "/" ? "" : url.pathname;
265
237
  const port = url.port ? `:${url.port}` : "";
266
- return (config.hass.WEBSOCKET_URL ||
267
- `${protocol}//${url.hostname}${port}${path}/api/websocket`);
238
+ return `${protocol}//${url.hostname}${port}${path}/api/websocket`;
268
239
  }
269
240
  // #MARK: init
270
241
  async function init() {
271
- if (connection) {
272
- throw new core_1.InternalError(context, "ExistingConnection", `Destroy the current connection before creating a new one`);
273
- }
274
- messageCount = core_1.START;
275
- if (config.hass.MOCK_SOCKET) {
276
- hass.socket.setConnectionState("connected");
277
- setImmediate(() => event.emit(exports.SOCKET_CONNECTED));
278
- return;
242
+ if (hass.socket.connection) {
243
+ throw new InternalError(context, "ExistingConnection", `Destroy the current connection before creating a new one`);
279
244
  }
245
+ messageCount = START;
280
246
  const url = getUrl();
281
247
  try {
282
- connection = new ws_1.default(url);
283
- connection.on("message", async (message) => {
248
+ hass.socket.connection = hass.socket.createConnection(url);
249
+ hass.socket.connection.on("message", async (message) => {
284
250
  try {
285
- lastReceivedMessage = (0, dayjs_1.default)();
251
+ lastReceivedMessage = dayjs();
286
252
  const data = JSON.parse(message.toString());
287
253
  await onMessage(data);
288
254
  pingSleep?.kill("continue");
@@ -294,14 +260,16 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
294
260
  logger.error({ error, name: init }, `💣 error bubbled up from websocket message event handler`);
295
261
  }
296
262
  });
297
- connection.on("error", async (error) => {
263
+ hass.socket.connection.on("error", async (error) => {
298
264
  logger.error({ error: error, name: init }, "socket error");
299
265
  if (hass.socket.connectionState === "connected") {
300
266
  hass.socket.setConnectionState("unknown");
301
267
  }
302
268
  });
303
- connection.on("close", async (code, reason) => {
304
- logger.warn({ code, name: init, reason: reason.toString() }, "connection closed");
269
+ hass.socket.connection.on("close", async (code, reason) => {
270
+ if (!config.boilerplate.IS_TEST) {
271
+ logger.warn({ code, name: init, reason: reason.toString() }, "connection closed");
272
+ }
305
273
  await hass.socket.teardown();
306
274
  });
307
275
  await new Promise(done => (onSocketReady = done));
@@ -330,7 +298,6 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
330
298
  */
331
299
  async function onMessage(message) {
332
300
  const id = Number(message.id);
333
- __1.SOCKET_RECEIVED_MESSAGES.labels({ type: message.type }).inc();
334
301
  switch (message.type) {
335
302
  case "auth_required": {
336
303
  logger.trace({ name: onMessage }, `sending authentication`);
@@ -342,7 +309,7 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
342
309
  logger.trace({ name: onMessage }, `event subscriptions starting`);
343
310
  await hass.socket.sendMessage({ type: "subscribe_events" }, false);
344
311
  onSocketReady?.();
345
- event.emit(exports.SOCKET_CONNECTED);
312
+ event.emit(SOCKET_CONNECTED);
346
313
  return;
347
314
  }
348
315
  case "event": {
@@ -360,7 +327,7 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
360
327
  hass.socket.setConnectionState("invalid");
361
328
  logger.fatal({ message, name: onMessage }, "received auth invalid {connecting} => {invalid}");
362
329
  // ? If you have a use case for making this exit configurable, open a ticket
363
- (0, process_1.exit)();
330
+ process.exit();
364
331
  return;
365
332
  }
366
333
  default: {
@@ -374,8 +341,8 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
374
341
  if (message.event.event_type === "state_changed") {
375
342
  const { new_state, old_state } = message.event.data;
376
343
  const id = new_state?.entity_id || old_state.entity_id;
377
- if (core_1.is.empty(id)) {
378
- throw new core_1.InternalError(context, "NO_ID", "Received state change, but could not identify an entity_id");
344
+ if (is.empty(id)) {
345
+ throw new InternalError(context, "NO_ID", "Received state change, but could not identify an entity_id");
379
346
  }
380
347
  // ? null = deleted entity
381
348
  // TODO: handle renames properly
@@ -411,16 +378,10 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
411
378
  }
412
379
  }
413
380
  // #MARK: onEvent
414
- function onEvent({ context, label, event, once, exec, }) {
381
+ function onEvent({ context, event, once, exec }) {
415
382
  logger.trace({ context, event, name: onEvent }, `attaching socket event listener`);
416
383
  const callback = async (data) => {
417
- await internal.safeExec({
418
- duration: __1.SOCKET_EVENT_EXECUTION_TIME,
419
- errors: __1.SOCKET_EVENT_ERRORS,
420
- exec: async () => await exec(data),
421
- executions: __1.SOCKET_EVENT_EXECUTION_COUNT,
422
- labels: { context, event, label },
423
- });
384
+ await internal.safeExec(async () => await exec(data));
424
385
  };
425
386
  if (once) {
426
387
  socketEvents.once(event, callback);
@@ -448,74 +409,30 @@ function WebsocketAPI({ context, event, hass, config, internal, lifecycle, logge
448
409
  await internal.safeExec(async () => await callback());
449
410
  };
450
411
  if (hass.socket.connectionState === "connected") {
451
- logger.warn({ name: "onConnect" }, `added callback after socket was already connected, running immediately`);
412
+ logger.debug({ name: "onConnect" }, `added callback after socket was already connected, running immediately`);
452
413
  setImmediate(wrapped);
453
414
  // attach anyways, for restarts or whatever
454
415
  }
455
- event.on(exports.SOCKET_CONNECTED, wrapped);
416
+ event.on(SOCKET_CONNECTED, wrapped);
456
417
  }
457
418
  // #MARK: return object
458
419
  return {
459
- /**
460
- * the current state of the websocket
461
- */
420
+ attachScheduledFunctions,
421
+ connection: undefined,
462
422
  connectionState: "offline",
463
- /**
464
- * Convenient wrapper for sendMessage
465
- */
423
+ createConnection: (url) => new WS(url),
466
424
  fireEvent,
467
- /**
468
- * Set up a new websocket connection to home assistant
469
- *f
470
- * This doesn't normally need to be called by applications, the extension self manages
471
- */
472
425
  init,
473
- /**
474
- * run a callback when the socket finishes connecting
475
- */
476
426
  onConnect,
477
- /**
478
- * Attach to the incoming stream of socket events. Do your own filtering and processing from there
479
- *
480
- * Returns removal function
481
- */
482
427
  onEvent,
483
- /**
484
- * for unit testing
485
- */
486
428
  onMessage,
487
- /**
488
- * when true:
489
- * - outgoing socket messages are blocked
490
- * - entities don't emit updates
491
- */
492
429
  pauseMessages: false,
493
- /**
494
- * Send a message to home assistant via the socket connection
495
- *
496
- * Applications probably want a higher level function than this
497
- */
498
430
  sendMessage,
499
- /**
500
- * internal
501
- */
502
431
  setConnectionState,
503
- /**
504
- * internal
505
- */
506
432
  socketEvents,
507
- /**
508
- * Subscribe to hass core registry updates.
509
- *
510
- * Not the same as `onEvent` (you probably want that)
511
- */
512
433
  subscribe,
513
- /**
514
- * remove the current socket connection to home assistant
515
- *
516
- * will need to call init() again to start up
517
- */
518
434
  teardown,
435
+ waitForReply,
519
436
  };
520
437
  }
521
438
  //# sourceMappingURL=websocket-api.extension.js.map