@digital-alchemy/hass 24.10.1 → 24.10.2

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 +287 -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 +3 -5
  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 -26
  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 +314 -200
  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 +3 -4
  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,263 @@ 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: removeAllListeners
146
+ case "removeAllListeners": {
147
+ return function () {
148
+ // remove will delete from set
149
+ listeners.forEach(remove => remove());
150
+ };
151
+ }
152
+ // #MARK: history
153
+ case "history": {
154
+ return async function (from, to) {
155
+ return await hass.fetch.fetchEntityHistory(entity_id, from, to);
156
+ };
157
+ }
158
+ // #MARK: once
159
+ case "once": {
160
+ return (callback) => {
161
+ const remove = () => {
162
+ event.removeListener(entity_id, wrapped);
163
+ listeners.delete(remove);
164
+ logger.trace({ entity_id }, "remove [once] listener");
88
165
  };
89
- }
90
- // * removeAllListeners
91
- case "removeAllListeners": {
92
- return function () {
93
- event.removeAllListeners(entity_id);
166
+ const wrapped = async (a, b) => {
167
+ listeners.delete(remove);
168
+ callback(a, b);
94
169
  };
95
- }
96
- // * history
97
- case "history": {
98
- return async function (from, to) {
99
- return await hass.fetch.fetchEntityHistory(entity_id, from, to);
170
+ listeners.add(remove);
171
+ event.once(entity_id, wrapped);
172
+ return is.removeFn(remove);
173
+ };
174
+ }
175
+ // #MARK: entity_id
176
+ case "entity_id": {
177
+ return entity_id;
178
+ }
179
+ // #MARK: previous
180
+ case "previous": {
181
+ return hass.entity.previousState(entity_id);
182
+ }
183
+ // #MARK: nextState
184
+ case "nextState": {
185
+ return async (timeout) => await new Promise(async (done) => {
186
+ // - set up cleanup function
187
+ const remove = () => {
188
+ listeners.delete(remove);
189
+ event.removeListener(entity_id, complete);
190
+ done = undefined;
191
+ logger.trace({ entity_id }, "remove [nextState] listener");
192
+ if (wait) {
193
+ logger.trace({ entity_id }, "stopping [nextState] race timer");
194
+ wait.kill("stop");
195
+ }
100
196
  };
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
- }
197
+ listeners.add(remove);
198
+ // - add wrapper & make friendly with race
199
+ const complete = (entity) => {
200
+ if (done) {
201
+ done(entity);
202
+ done = undefined;
132
203
  }
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
- }
204
+ };
205
+ // - attach single run listener
206
+ event.once(entity_id, complete);
207
+ // - race!
208
+ let wait;
209
+ if (is.number(timeout) && timeout > NONE) {
210
+ // keep track of sleep so it can be cleaned up also
211
+ wait = sleep(timeout);
212
+ await wait;
213
+ wait = undefined;
214
+ if (done) {
215
+ logger.debug({ entity_id, name: "nextState", timeout }, "timed out");
216
+ done(undefined);
217
+ remove();
162
218
  }
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
- };
219
+ }
220
+ });
174
221
  }
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
- });
222
+ // #MARK: waitForState
223
+ case "waitForState": {
224
+ return async (state, timeout) => await new Promise(async (done) => {
225
+ const remove = () => {
226
+ done = undefined;
227
+ listeners.delete(remove);
228
+ done = undefined;
229
+ logger.trace({ entity_id }, "remove [waitForState] listener");
230
+ if (wait) {
231
+ logger.trace({ entity_id }, "stopping [waitForState] race timer");
232
+ wait.kill("stop");
233
+ }
234
+ event.removeListener(entity_id, complete);
235
+ };
236
+ listeners.add(remove);
237
+ const complete = (entity) => {
238
+ if (entity.state !== state) {
239
+ logger.trace({
240
+ expected: state,
241
+ incoming: entity.state,
242
+ name: "waitForState",
243
+ }, `state did not match`);
244
+ return;
245
+ }
246
+ if (done) {
247
+ done(entity);
248
+ remove();
249
+ }
250
+ };
251
+ event.on(entity_id, complete);
252
+ let wait;
253
+ if (is.number(timeout) && timeout > NONE) {
254
+ wait = sleep(timeout);
255
+ await wait;
256
+ wait = undefined;
257
+ if (done) {
258
+ logger.debug({ entity_id, name: "waitForState", timeout }, "timed out");
259
+ done(undefined);
260
+ remove();
261
+ }
262
+ }
193
263
  });
194
- return true;
195
264
  }
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
- });
265
+ }
266
+ // #MARK: service calls
267
+ if (hass.configure.isService(entity_domain, property)) {
268
+ return async function (data = {}) {
269
+ // @ts-expect-error it's fine
270
+ return await hass.call[entity_domain][property]({
271
+ entity_id,
272
+ ...data,
273
+ });
274
+ };
275
+ }
276
+ return proxyGetLogic(entity_id, property);
277
+ },
278
+ // #MARK: has
279
+ has(_, property) {
280
+ appendKeys();
281
+ return property in thing;
282
+ },
283
+ // #MARK: ownKeys
284
+ ownKeys() {
285
+ appendKeys();
286
+ return Object.keys(thing);
287
+ },
288
+ // #MARK: set
289
+ set(_, property, value) {
290
+ // * state
291
+ if (property === "state") {
292
+ setImmediate(async () => {
293
+ logger.debug({ entity_id, state: value }, `emitting set state via rest`);
294
+ await hass.fetch.updateEntity(entity_id, {
295
+ state: value,
207
296
  });
208
- return true;
297
+ });
298
+ return true;
299
+ }
300
+ // * attributes
301
+ if (property === "attributes") {
302
+ if (!is.object(value)) {
303
+ logger.error(`can only provide objects as attributes`);
304
+ return false;
209
305
  }
210
- logger.error({ entity_id, property }, `cannot set property on entity`);
211
- return false;
212
- },
213
- }));
214
- }
215
- return ENTITY_PROXIES.get(entity_id);
306
+ setImmediate(async () => {
307
+ logger.debug({ attributes: Object.keys(value), entity_id }, `updating attributes via rest`);
308
+ await hass.fetch.updateEntity(entity_id, {
309
+ attributes: value,
310
+ });
311
+ });
312
+ return true;
313
+ }
314
+ logger.error({ entity_id, property }, `cannot set property on entity`);
315
+ return false;
316
+ },
317
+ });
216
318
  }
319
+ // #MARK: <return>
217
320
  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)),
321
+ area: (area, ...domains) => hass.idBy.area(area, ...domains).map(id => hass.refBy.id(id)),
322
+ device: (device, ...domains) => hass.idBy.device(device, ...domains).map(id => hass.refBy.id(id)),
323
+ domain: (domain) => hass.idBy.domain(domain).map(id => hass.refBy.id(id)),
324
+ floor: (floor, ...domains) => hass.idBy.floor(floor, ...domains).map(id => hass.refBy.id(id)),
222
325
  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)),
326
+ label: (label, ...domains) => hass.idBy.label(label, ...domains).map(id => hass.refBy.id(id)),
327
+ platform: (platform, ...domains) => hass.idBy.platform(platform, ...domains).map(id => hass.refBy.id(id)),
225
328
  unique_id: (unique_id) => {
226
329
  const id = hass.idBy.unique_id(unique_id);
227
330
  if (!id) {
331
+ // mental note:
332
+ // this is technically fixable, but would require emitting internal events
333
+ // for both entity_id & unique_id
228
334
  return undefined;
229
335
  }
230
- return byId(id);
336
+ return hass.refBy.id(id);
231
337
  },
232
338
  };
233
339
  }
@@ -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 {