@digital-alchemy/hass 24.10.1 → 24.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/dynamic.d.ts +3 -1
  2. package/dist/extensions/events.extension.d.ts +1 -1
  3. package/dist/extensions/events.extension.js +26 -7
  4. package/dist/extensions/events.extension.js.map +1 -1
  5. package/dist/extensions/internal.extension.js +1 -1
  6. package/dist/extensions/internal.extension.js.map +1 -1
  7. package/dist/extensions/reference.extension.d.ts +51 -1
  8. package/dist/extensions/reference.extension.js +293 -181
  9. package/dist/extensions/reference.extension.js.map +1 -1
  10. package/dist/extensions/websocket-api.extension.js +4 -3
  11. package/dist/extensions/websocket-api.extension.js.map +1 -1
  12. package/dist/hass.module.d.ts +3 -3
  13. package/dist/hass.module.js +3 -3
  14. package/dist/hass.module.js.map +1 -1
  15. package/dist/helpers/entity-state.helper.d.ts +11 -7
  16. package/dist/helpers/interfaces.helper.d.ts +10 -10
  17. package/dist/helpers/interfaces.helper.js.map +1 -1
  18. package/dist/helpers/utility.helper.d.ts +5 -0
  19. package/dist/helpers/utility.helper.js +5 -0
  20. package/dist/helpers/utility.helper.js.map +1 -1
  21. package/dist/mock_assistant/mock-assistant.module.d.ts +4 -4
  22. package/dist/mock_assistant/mock-assistant.module.js +7 -0
  23. package/dist/mock_assistant/mock-assistant.module.js.map +1 -1
  24. package/dist/testing/fetch-api.spec.js +13 -13
  25. package/dist/testing/fetch-api.spec.js.map +1 -1
  26. package/package.json +27 -28
  27. package/scripts/test.sh +1 -1
  28. package/src/dynamic.ts +82 -77
  29. package/src/extensions/events.extension.ts +26 -10
  30. package/src/extensions/internal.extension.ts +1 -1
  31. package/src/extensions/reference.extension.ts +323 -201
  32. package/src/extensions/websocket-api.extension.ts +4 -3
  33. package/src/hass.module.ts +4 -4
  34. package/src/helpers/entity-state.helper.ts +11 -6
  35. package/src/helpers/interfaces.helper.ts +10 -9
  36. package/src/helpers/utility.helper.ts +8 -0
  37. package/src/mock_assistant/mock-assistant.module.ts +7 -0
  38. package/src/testing/fetch-api.spec.ts +13 -13
@@ -1,9 +1,58 @@
1
1
  import { DOWN, is, NONE, sleep, UP } from "@digital-alchemy/core";
2
2
  import dayjs from "dayjs";
3
- import { SERVICE_LIST_UPDATED } from "..";
3
+ import { SERVICE_LIST_UPDATED, SOCKET_CONNECTED } from "..";
4
4
  import { domain, } from "../helpers";
5
- export function ReferenceExtension({ hass, logger, internal, event, }) {
6
- const ENTITY_PROXIES = new Map();
5
+ /**
6
+ * ## Overview
7
+ *
8
+ * This service is intended for the creation of type safe entity references based on entity id.
9
+ *
10
+ * ```typescript
11
+ * const ref = hass.refBy.id("switch.example");
12
+ * ```
13
+ *
14
+ * These contain specialized type definitions that gets looked up by entity id, making typescript report info about the desired entity.
15
+ *
16
+ * ## Capabilities
17
+ *
18
+ * ### Event Listeners
19
+ *
20
+ * Run a callback in response to
21
+ * - `.onUpdate((new_state, old_state) => ...)`
22
+ * - `.once((new_state, old_state) => ...)`
23
+ *
24
+ * ### State lookups
25
+ *
26
+ * - `.nextState(timeout?)`
27
+ * - `.waitForState(state, timeout?)`
28
+ * - `.previous.state` | `.previous.attributes`
29
+ *
30
+ * ### Service Calling
31
+ *
32
+ * For services that appear on the same domain as the provided entity, the service call can be made directly from the reference.
33
+ *
34
+ * > Ex: `switch.example` calling `switch.turn_on`
35
+ *
36
+ * ```typescript
37
+ * ref.turn_on();
38
+ * ```
39
+ *
40
+ * The `entity_id` property that would normally be required is automatically provided by the proxy.
41
+ *
42
+ * ### Property Lookups
43
+ *
44
+ * - `.state`
45
+ * - `.entity_id`
46
+ * - `.attributes`
47
+ *
48
+ * ## Garbage Collection
49
+ *
50
+ * - `.removeAllListeners()`
51
+ *
52
+ * The reference may call the remove all active event listeners and timers at any time.
53
+ * It will interrupt any timers (nextState/waitForState), as well as detach any event listeners
54
+ */
55
+ export function ReferenceService({ hass, logger, internal, event, }) {
7
56
  // #MARK:proxyGetLogic
8
57
  function proxyGetLogic(entity, property) {
9
58
  const valid = ["state", "attributes", "last"].some(i => property.startsWith(i));
@@ -28,206 +77,269 @@ export function ReferenceExtension({ hass, logger, internal, event, }) {
28
77
  return (current.attributes || {});
29
78
  }
30
79
  // #MARK: byId
80
+ // ! Calls to this function MUST ALWAYS go through `hass.refBy.id`
81
+ // never call this function directly 💧
31
82
  function byId(entity_id) {
32
83
  const entity_domain = domain(entity_id);
33
- if (!ENTITY_PROXIES.has(entity_id)) {
34
- const { ...thing } = hass.entity.getCurrentState(entity_id);
35
- let loaded = false;
36
- function keys() {
37
- const entityDomain = domain(entity_id);
38
- return [
39
- "attributes",
40
- "entity_id",
41
- "history",
42
- "last",
43
- "nextState",
44
- "once",
45
- "onUpdate",
46
- "previous",
47
- "removeAllListeners",
48
- "state",
49
- "waitForState",
50
- ...hass.configure
51
- .getServices()
52
- .filter(({ domain }) => domain === entityDomain)
53
- .flatMap(i => Object.keys(i.services))
54
- .sort((a, b) => (a > b ? UP : DOWN)),
55
- ];
84
+ const { ...thing } = hass.entity.getCurrentState(entity_id);
85
+ let loaded = false;
86
+ function keys() {
87
+ const entityDomain = domain(entity_id);
88
+ return [
89
+ "attributes",
90
+ "entity_id",
91
+ "history",
92
+ "last",
93
+ "nextState",
94
+ "once",
95
+ "onUpdate",
96
+ "previous",
97
+ "removeAllListeners",
98
+ "state",
99
+ "waitForState",
100
+ ...hass.configure
101
+ .getServices()
102
+ .filter(({ domain }) => domain === entityDomain)
103
+ .flatMap(i => Object.keys(i.services))
104
+ .sort((a, b) => (a > b ? UP : DOWN)),
105
+ ];
106
+ }
107
+ function appendKeys(force = false) {
108
+ if (loaded && !force) {
109
+ return;
56
110
  }
57
- function appendKeys(force = false) {
58
- if (loaded && !force) {
59
- return;
60
- }
61
- // Not gonna build types for this, and ts-expect-error fails in jest
62
- // This is a weird hack for an obscure feature, so sue me
63
- //
64
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
65
- // @ts-ignore
66
- keys().forEach(i => (thing[i] ??= () => { }));
67
- if (!is.empty(hass.configure.getServices())) {
68
- loaded = true;
69
- }
111
+ // Not gonna build types for this, and ts-expect-error fails in jest
112
+ // This is a weird hack for an obscure feature, so sue me
113
+ //
114
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
115
+ // @ts-ignore
116
+ keys().forEach(i => (thing[i] ??= () => { }));
117
+ if (!is.empty(hass.configure.getServices())) {
118
+ loaded = true;
70
119
  }
71
- event.on(SERVICE_LIST_UPDATED, () => appendKeys(true));
72
- ENTITY_PROXIES.set(entity_id,
73
- // just because you can't do generics properly....
74
- new Proxy(thing, {
75
- // things that shouldn't be needed: this extract
76
- // eslint-disable-next-line sonarjs/function-return-type
77
- get: (_, property) => {
78
- switch (property) {
79
- // * onUpdate
80
- case "onUpdate": {
81
- return (callback) => {
82
- const removableCallback = async (a, b) => await internal.safeExec(async () => callback(a, b, remove));
83
- function remove() {
84
- event.removeListener(entity_id, removableCallback);
85
- }
86
- event.on(entity_id, removableCallback);
87
- return { remove };
120
+ }
121
+ event.on(SERVICE_LIST_UPDATED, () => appendKeys(true));
122
+ const listeners = new Set();
123
+ // just because you can't do generics properly....
124
+ return new Proxy(thing, {
125
+ // things that shouldn't be needed: this extract
126
+ // eslint-disable-next-line sonarjs/function-return-type
127
+ get: (_, property) => {
128
+ switch (property) {
129
+ // #MARK: onUpdate
130
+ case "onUpdate": {
131
+ return (callback) => {
132
+ const removableCallback = async (new_state, old_state) => await internal.safeExec(async () => callback(new_state, old_state, remove));
133
+ function remove() {
134
+ event.removeListener(entity_id, removableCallback);
135
+ event.removeListener(SOCKET_CONNECTED, removableCallback);
136
+ listeners.delete(remove);
137
+ logger.trace({ entity_id }, "remove [onUpdate] listener");
138
+ }
139
+ event.on(entity_id, removableCallback);
140
+ event.on(SOCKET_CONNECTED, removableCallback);
141
+ listeners.add(remove);
142
+ return is.removeFn(remove);
143
+ };
144
+ }
145
+ // #MARK: addListener
146
+ case "addListener": {
147
+ return function (remove) {
148
+ listeners.add(remove);
149
+ };
150
+ }
151
+ // #MARK: removeAllListeners
152
+ case "removeAllListeners": {
153
+ return function () {
154
+ // remove will delete from set
155
+ listeners.forEach(remove => remove());
156
+ };
157
+ }
158
+ // #MARK: history
159
+ case "history": {
160
+ return async function (from, to) {
161
+ return await hass.fetch.fetchEntityHistory(entity_id, from, to);
162
+ };
163
+ }
164
+ // #MARK: once
165
+ case "once": {
166
+ return (callback) => {
167
+ const remove = () => {
168
+ event.removeListener(entity_id, wrapped);
169
+ listeners.delete(remove);
170
+ logger.trace({ entity_id }, "remove [once] listener");
88
171
  };
89
- }
90
- // * removeAllListeners
91
- case "removeAllListeners": {
92
- return function () {
93
- event.removeAllListeners(entity_id);
172
+ const wrapped = async (a, b) => {
173
+ listeners.delete(remove);
174
+ callback(a, b);
94
175
  };
95
- }
96
- // * history
97
- case "history": {
98
- return async function (from, to) {
99
- return await hass.fetch.fetchEntityHistory(entity_id, from, to);
176
+ listeners.add(remove);
177
+ event.once(entity_id, wrapped);
178
+ return is.removeFn(remove);
179
+ };
180
+ }
181
+ // #MARK: entity_id
182
+ case "entity_id": {
183
+ return entity_id;
184
+ }
185
+ // #MARK: previous
186
+ case "previous": {
187
+ return hass.entity.previousState(entity_id);
188
+ }
189
+ // #MARK: nextState
190
+ case "nextState": {
191
+ return async (timeout) => await new Promise(async (done) => {
192
+ // - set up cleanup function
193
+ const remove = () => {
194
+ listeners.delete(remove);
195
+ event.removeListener(entity_id, complete);
196
+ done = undefined;
197
+ logger.trace({ entity_id }, "remove [nextState] listener");
198
+ if (wait) {
199
+ logger.trace({ entity_id }, "stopping [nextState] race timer");
200
+ wait.kill("stop");
201
+ }
100
202
  };
101
- }
102
- // * once
103
- case "once": {
104
- return (callback) => event.once(entity_id, async (a, b) => callback(a, b));
105
- }
106
- // * entity_id
107
- case "entity_id": {
108
- return entity_id;
109
- }
110
- // * previous
111
- case "previous": {
112
- return hass.entity.previousState(entity_id);
113
- }
114
- // * nextState
115
- case "nextState": {
116
- return async (timeout) => await new Promise(async (done) => {
117
- const complete = (entity) => {
118
- if (done) {
119
- done(entity);
120
- done = undefined;
121
- }
122
- };
123
- event.once(entity_id, complete);
124
- if (is.number(timeout) && timeout > NONE) {
125
- await sleep(timeout);
126
- if (done) {
127
- logger.debug({ entity_id, name: "nextState", timeout }, "timed out");
128
- done(undefined);
129
- done = undefined;
130
- event.removeListener(entity_id, complete);
131
- }
203
+ listeners.add(remove);
204
+ // - add wrapper & make friendly with race
205
+ const complete = (entity) => {
206
+ if (done) {
207
+ done(entity);
208
+ done = undefined;
132
209
  }
133
- });
134
- }
135
- // * waitForState
136
- case "waitForState": {
137
- return async (state, timeout) => await new Promise(async (done) => {
138
- const complete = (entity) => {
139
- if (entity.state !== state) {
140
- logger.trace({
141
- expected: state,
142
- incoming: entity.state,
143
- name: "waitForState",
144
- }, `state did not match`);
145
- return;
146
- }
147
- if (done) {
148
- done(entity);
149
- done = undefined;
150
- event.removeListener(entity_id, complete);
151
- }
152
- };
153
- event.on(entity_id, complete);
154
- if (is.number(timeout) && timeout > NONE) {
155
- await sleep(timeout);
156
- if (done) {
157
- logger.debug({ entity_id, name: "waitForState", timeout }, "timed out");
158
- done(undefined);
159
- done = undefined;
160
- event.removeListener(entity_id, complete);
161
- }
210
+ };
211
+ // - attach single run listener
212
+ event.once(entity_id, complete);
213
+ // - race!
214
+ let wait;
215
+ if (is.number(timeout) && timeout > NONE) {
216
+ // keep track of sleep so it can be cleaned up also
217
+ wait = sleep(timeout);
218
+ await wait;
219
+ wait = undefined;
220
+ if (done) {
221
+ logger.debug({ entity_id, name: "nextState", timeout }, "timed out");
222
+ done(undefined);
223
+ remove();
162
224
  }
163
- });
164
- }
165
- }
166
- if (hass.configure.isService(entity_domain, property)) {
167
- return async function (data = {}) {
168
- // @ts-expect-error it's fine
169
- return await hass.call[entity_domain][property]({
170
- entity_id,
171
- ...data,
172
- });
173
- };
225
+ }
226
+ });
174
227
  }
175
- return proxyGetLogic(entity_id, property);
176
- },
177
- has(_, property) {
178
- appendKeys();
179
- return property in thing;
180
- },
181
- ownKeys() {
182
- appendKeys();
183
- return Object.keys(thing);
184
- },
185
- set(_, property, value) {
186
- // * state
187
- if (property === "state") {
188
- setImmediate(async () => {
189
- logger.debug({ entity_id, state: value }, `emitting set state via rest`);
190
- await hass.fetch.updateEntity(entity_id, {
191
- state: value,
192
- });
228
+ // #MARK: waitForState
229
+ case "waitForState": {
230
+ return async (state, timeout) => await new Promise(async (done) => {
231
+ const remove = () => {
232
+ done = undefined;
233
+ listeners.delete(remove);
234
+ done = undefined;
235
+ logger.trace({ entity_id }, "remove [waitForState] listener");
236
+ if (wait) {
237
+ logger.trace({ entity_id }, "stopping [waitForState] race timer");
238
+ wait.kill("stop");
239
+ }
240
+ event.removeListener(entity_id, complete);
241
+ };
242
+ listeners.add(remove);
243
+ const complete = (entity) => {
244
+ if (entity.state !== state) {
245
+ logger.trace({
246
+ expected: state,
247
+ incoming: entity.state,
248
+ name: "waitForState",
249
+ }, `state did not match`);
250
+ return;
251
+ }
252
+ if (done) {
253
+ done(entity);
254
+ remove();
255
+ }
256
+ };
257
+ event.on(entity_id, complete);
258
+ let wait;
259
+ if (is.number(timeout) && timeout > NONE) {
260
+ wait = sleep(timeout);
261
+ await wait;
262
+ wait = undefined;
263
+ if (done) {
264
+ logger.debug({ entity_id, name: "waitForState", timeout }, "timed out");
265
+ done(undefined);
266
+ remove();
267
+ }
268
+ }
193
269
  });
194
- return true;
195
270
  }
196
- // * attributes
197
- if (property === "attributes") {
198
- if (!is.object(value)) {
199
- logger.error(`can only provide objects as attributes`);
200
- return false;
201
- }
202
- setImmediate(async () => {
203
- logger.debug({ attributes: Object.keys(value), entity_id }, `updating attributes via rest`);
204
- await hass.fetch.updateEntity(entity_id, {
205
- attributes: value,
206
- });
271
+ }
272
+ // #MARK: service calls
273
+ if (hass.configure.isService(entity_domain, property)) {
274
+ return async function (data = {}) {
275
+ // @ts-expect-error it's fine
276
+ return await hass.call[entity_domain][property]({
277
+ entity_id,
278
+ ...data,
279
+ });
280
+ };
281
+ }
282
+ return proxyGetLogic(entity_id, property);
283
+ },
284
+ // #MARK: has
285
+ has(_, property) {
286
+ appendKeys();
287
+ return property in thing;
288
+ },
289
+ // #MARK: ownKeys
290
+ ownKeys() {
291
+ appendKeys();
292
+ return Object.keys(thing);
293
+ },
294
+ // #MARK: set
295
+ set(_, property, value) {
296
+ // * state
297
+ if (property === "state") {
298
+ setImmediate(async () => {
299
+ logger.debug({ entity_id, state: value }, `emitting set state via rest`);
300
+ await hass.fetch.updateEntity(entity_id, {
301
+ state: value,
207
302
  });
208
- return true;
303
+ });
304
+ return true;
305
+ }
306
+ // * attributes
307
+ if (property === "attributes") {
308
+ if (!is.object(value)) {
309
+ logger.error(`can only provide objects as attributes`);
310
+ return false;
209
311
  }
210
- logger.error({ entity_id, property }, `cannot set property on entity`);
211
- return false;
212
- },
213
- }));
214
- }
215
- return ENTITY_PROXIES.get(entity_id);
312
+ setImmediate(async () => {
313
+ logger.debug({ attributes: Object.keys(value), entity_id }, `updating attributes via rest`);
314
+ await hass.fetch.updateEntity(entity_id, {
315
+ attributes: value,
316
+ });
317
+ });
318
+ return true;
319
+ }
320
+ logger.error({ entity_id, property }, `cannot set property on entity`);
321
+ return false;
322
+ },
323
+ });
216
324
  }
325
+ // #MARK: <return>
217
326
  return {
218
- area: (area, ...domains) => hass.idBy.area(area, ...domains).map(id => byId(id)),
219
- device: (device, ...domains) => hass.idBy.device(device, ...domains).map(id => byId(id)),
220
- domain: (domain) => hass.idBy.domain(domain).map(id => byId(id)),
221
- floor: (floor, ...domains) => hass.idBy.floor(floor, ...domains).map(id => byId(id)),
327
+ area: (area, ...domains) => hass.idBy.area(area, ...domains).map(id => hass.refBy.id(id)),
328
+ device: (device, ...domains) => hass.idBy.device(device, ...domains).map(id => hass.refBy.id(id)),
329
+ domain: (domain) => hass.idBy.domain(domain).map(id => hass.refBy.id(id)),
330
+ floor: (floor, ...domains) => hass.idBy.floor(floor, ...domains).map(id => hass.refBy.id(id)),
222
331
  id: byId,
223
- label: (label, ...domains) => hass.idBy.label(label, ...domains).map(id => byId(id)),
224
- platform: (platform, ...domains) => hass.idBy.platform(platform, ...domains).map(id => byId(id)),
332
+ label: (label, ...domains) => hass.idBy.label(label, ...domains).map(id => hass.refBy.id(id)),
333
+ platform: (platform, ...domains) => hass.idBy.platform(platform, ...domains).map(id => hass.refBy.id(id)),
225
334
  unique_id: (unique_id) => {
226
335
  const id = hass.idBy.unique_id(unique_id);
227
336
  if (!id) {
337
+ // mental note:
338
+ // this is technically fixable, but would require emitting internal events
339
+ // for both entity_id & unique_id
228
340
  return undefined;
229
341
  }
230
- return byId(id);
342
+ return hass.refBy.id(id);
231
343
  },
232
344
  };
233
345
  }
@@ -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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"}
@@ -383,15 +383,15 @@ export function WebsocketAPI({ context, event, hass, config, internal, lifecycle
383
383
  else {
384
384
  socketEvents.on(event, callback);
385
385
  }
386
- return () => {
386
+ return is.removeFn(() => {
387
387
  logger.trace({ context, event, name: onEvent }, `removing socket event listener`);
388
388
  socketEvents.removeListener(event, callback);
389
- };
389
+ });
390
390
  }
391
391
  // #MARK: subscribe
392
392
  async function subscribe({ event_type, context, exec, }) {
393
393
  await hass.socket.sendMessage({ event_type, type: "subscribe_events" });
394
- hass.socket.onEvent({
394
+ return hass.socket.onEvent({
395
395
  context,
396
396
  event: event_type,
397
397
  exec,
@@ -408,6 +408,7 @@ export function WebsocketAPI({ context, event, hass, config, internal, lifecycle
408
408
  // attach anyways, for restarts or whatever
409
409
  }
410
410
  event.on(SOCKET_CONNECTED, wrapped);
411
+ return is.removeFn(() => event.removeListener(SOCKET_CONNECTED, wrapped));
411
412
  }
412
413
  // #MARK: return object
413
414
  return {