@coffeerunhobby/mcp-ha-connect 2.1.1 → 2.2.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 (106) hide show
  1. package/README.md +23 -5
  2. package/dist/config.d.ts +4 -0
  3. package/dist/config.js +6 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/haClient/automations.d.ts +18 -2
  6. package/dist/haClient/automations.js +25 -7
  7. package/dist/haClient/automations.js.map +1 -1
  8. package/dist/haClient/events.d.ts +60 -7
  9. package/dist/haClient/events.js +252 -47
  10. package/dist/haClient/events.js.map +1 -1
  11. package/dist/haClient/index.d.ts +2 -1
  12. package/dist/haClient/index.js +4 -3
  13. package/dist/haClient/index.js.map +1 -1
  14. package/dist/haClient/wsCommand.d.ts +16 -0
  15. package/dist/haClient/wsCommand.js +36 -0
  16. package/dist/haClient/wsCommand.js.map +1 -0
  17. package/dist/omadaClient/client.d.ts +33 -1
  18. package/dist/omadaClient/client.js +61 -2
  19. package/dist/omadaClient/client.js.map +1 -1
  20. package/dist/omadaClient/index.d.ts +7 -0
  21. package/dist/omadaClient/index.js +6 -0
  22. package/dist/omadaClient/index.js.map +1 -1
  23. package/dist/omadaClient/request.d.ts +5 -0
  24. package/dist/omadaClient/request.js +11 -2
  25. package/dist/omadaClient/request.js.map +1 -1
  26. package/dist/ownerQuestions/service.d.ts +167 -0
  27. package/dist/ownerQuestions/service.js +439 -0
  28. package/dist/ownerQuestions/service.js.map +1 -0
  29. package/dist/server/common.d.ts +3 -0
  30. package/dist/server/common.js +2 -1
  31. package/dist/server/common.js.map +1 -1
  32. package/dist/server/http.js +30 -6
  33. package/dist/server/http.js.map +1 -1
  34. package/dist/server/stream.d.ts +2 -0
  35. package/dist/server/stream.js +2 -1
  36. package/dist/server/stream.js.map +1 -1
  37. package/dist/tools/common.d.ts +1 -1
  38. package/dist/tools/common.js +9 -2
  39. package/dist/tools/common.js.map +1 -1
  40. package/dist/tools/homeassistant/askOwner.d.ts +29 -0
  41. package/dist/tools/homeassistant/askOwner.js +85 -0
  42. package/dist/tools/homeassistant/askOwner.js.map +1 -0
  43. package/dist/tools/homeassistant/getAutomationTrace.d.ts +5 -0
  44. package/dist/tools/homeassistant/getAutomationTrace.js +10 -5
  45. package/dist/tools/homeassistant/getAutomationTrace.js.map +1 -1
  46. package/dist/tools/index.d.ts +3 -0
  47. package/dist/tools/index.js +5 -1
  48. package/dist/tools/index.js.map +1 -1
  49. package/dist/tools/omada/blockClient.js +3 -1
  50. package/dist/tools/omada/blockClient.js.map +1 -1
  51. package/dist/tools/omada/deleteClient.d.ts +3 -0
  52. package/dist/tools/omada/deleteClient.js +15 -0
  53. package/dist/tools/omada/deleteClient.js.map +1 -0
  54. package/dist/tools/omada/index.js +7 -2
  55. package/dist/tools/omada/index.js.map +1 -1
  56. package/dist/tools/omada/listBlockedClients.d.ts +3 -0
  57. package/dist/tools/omada/listBlockedClients.js +9 -0
  58. package/dist/tools/omada/listBlockedClients.js.map +1 -0
  59. package/dist/tools/omada/namespace.js +17 -0
  60. package/dist/tools/omada/namespace.js.map +1 -1
  61. package/dist/utils/plainText.d.ts +22 -0
  62. package/dist/utils/plainText.js +39 -0
  63. package/dist/utils/plainText.js.map +1 -0
  64. package/dist/utils/redact.d.ts +21 -0
  65. package/dist/utils/redact.js +53 -0
  66. package/dist/utils/redact.js.map +1 -0
  67. package/dist/version.d.ts +1 -1
  68. package/dist/version.js +1 -1
  69. package/docs/CHANGELOG.md +24 -0
  70. package/openapi.json +1 -1
  71. package/package.json +1 -1
  72. package/src/config.ts +10 -0
  73. package/src/haClient/automations.ts +39 -7
  74. package/src/haClient/events.ts +289 -56
  75. package/src/haClient/index.ts +10 -4
  76. package/src/haClient/wsCommand.ts +44 -0
  77. package/src/omadaClient/client.ts +82 -4
  78. package/src/omadaClient/index.ts +9 -1
  79. package/src/omadaClient/request.ts +13 -2
  80. package/src/ownerQuestions/service.ts +536 -0
  81. package/src/server/common.ts +5 -1
  82. package/src/server/http.ts +30 -6
  83. package/src/server/stream.ts +4 -1
  84. package/src/tools/common.ts +9 -2
  85. package/src/tools/homeassistant/askOwner.ts +133 -0
  86. package/src/tools/homeassistant/getAutomationTrace.ts +13 -7
  87. package/src/tools/index.ts +8 -1
  88. package/src/tools/omada/blockClient.ts +3 -1
  89. package/src/tools/omada/deleteClient.ts +27 -0
  90. package/src/tools/omada/index.ts +7 -2
  91. package/src/tools/omada/listBlockedClients.ts +17 -0
  92. package/src/tools/omada/namespace.ts +19 -0
  93. package/src/utils/plainText.ts +48 -0
  94. package/src/utils/redact.ts +59 -0
  95. package/src/version.ts +1 -1
  96. package/tests/config.test.ts +12 -0
  97. package/tests/haClient/automationTrace.test.ts +59 -0
  98. package/tests/haClient/automations.test.ts +16 -0
  99. package/tests/haClient/events.test.ts +455 -0
  100. package/tests/haClient/eventsTls.test.ts +52 -0
  101. package/tests/omadaClient/clientBlocks.test.ts +170 -0
  102. package/tests/ownerQuestions/service.test.ts +499 -0
  103. package/tests/ownerQuestions/tools.test.ts +186 -0
  104. package/tests/tools/homeassistant/handlers.test.ts +10 -1
  105. package/tests/tools/omada/graph.test.ts +13 -2
  106. package/tests/utils/redact.test.ts +105 -0
@@ -5,6 +5,17 @@
5
5
  import { EventEmitter } from 'events';
6
6
  import WebSocket from 'ws';
7
7
  import { logger } from '../utils/logger.js';
8
+ /** Home Assistant answered a command with `success: false` (a refusal, not a connection problem). */
9
+ export class HaCommandError extends Error {
10
+ commandType;
11
+ code;
12
+ constructor(commandType, code) {
13
+ super(`Home Assistant rejected '${commandType}' (${code})`);
14
+ this.commandType = commandType;
15
+ this.code = code;
16
+ this.name = 'HaCommandError';
17
+ }
18
+ }
8
19
  /**
9
20
  * Home Assistant Event Subscriber
10
21
  * Subscribes to real-time events via WebSocket
@@ -14,19 +25,28 @@ export class EventSubscriber extends EventEmitter {
14
25
  messageId = 1;
15
26
  authenticated = false;
16
27
  subscriptions = new Map();
17
- pendingSubscriptions = [];
28
+ /** Commands awaiting their `result`, keyed by message id (HA answers by id). */
29
+ pendingCommands = new Map();
18
30
  reconnectAttempts = 0;
19
31
  reconnectTimer = null;
32
+ /** Deadline of the connect attempt in progress (cleared on auth_ok or close). */
33
+ connectTimer = null;
34
+ /** Pending retry of subscriptions that failed for a transient reason. */
35
+ resubscribeTimer = null;
20
36
  isConnecting = false;
21
37
  shouldReconnect = true;
22
38
  config;
23
39
  reconnectInterval;
24
40
  maxReconnectAttempts;
41
+ maxReconnectDelay;
25
42
  constructor(config) {
26
43
  super();
27
44
  this.config = config;
28
45
  this.reconnectInterval = config.reconnectInterval ?? 5000;
29
- this.maxReconnectAttempts = config.maxReconnectAttempts ?? 10;
46
+ // Keep retrying by default: a long Home Assistant outage must not leave the
47
+ // server permanently deaf to events (the delay is capped, see handleDisconnect).
48
+ this.maxReconnectAttempts = config.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;
49
+ this.maxReconnectDelay = config.maxReconnectDelay ?? 60000;
30
50
  }
31
51
  /**
32
52
  * Connect to Home Assistant WebSocket API
@@ -49,7 +69,20 @@ export class EventSubscriber extends EventEmitter {
49
69
  .replace(/^http/, 'ws')
50
70
  .replace(/\/$/, '') + '/api/websocket';
51
71
  logger.info('Connecting to Home Assistant WebSocket', { url: wsUrl });
52
- this.ws = new WebSocket(wsUrl);
72
+ // Same TLS policy as the REST client: only HA_STRICT_SSL=false skips verification.
73
+ this.ws = new WebSocket(wsUrl, { rejectUnauthorized: this.config.strictSsl !== false });
74
+ const ws = this.ws;
75
+ // A connection that never authenticates must not hang its caller.
76
+ this.clearConnectTimer();
77
+ if (this.resubscribeTimer) {
78
+ clearTimeout(this.resubscribeTimer);
79
+ this.resubscribeTimer = null;
80
+ }
81
+ this.connectTimer = setTimeout(() => {
82
+ this.connectTimer = null;
83
+ reject(new Error('Timed out connecting to the Home Assistant WebSocket'));
84
+ ws.terminate();
85
+ }, this.config.connectTimeout ?? 30000);
53
86
  this.ws.on('open', () => {
54
87
  logger.info('WebSocket connection established');
55
88
  this.reconnectAttempts = 0;
@@ -65,14 +98,19 @@ export class EventSubscriber extends EventEmitter {
65
98
  });
66
99
  this.ws.on('close', (code, reason) => {
67
100
  logger.info('WebSocket connection closed', { code, reason: reason.toString() });
101
+ this.clearConnectTimer();
68
102
  this.authenticated = false;
69
103
  this.isConnecting = false;
104
+ this.rejectPendingCommands(new Error('WebSocket connection closed'));
105
+ // Closed before authenticating: fail the connect attempt (no-op once resolved).
106
+ reject(new Error('Home Assistant closed the WebSocket before authentication'));
70
107
  this.handleDisconnect();
71
108
  });
72
109
  this.ws.on('error', (error) => {
110
+ // The detail (often the internal address) stays in the server log.
73
111
  logger.error('WebSocket error', { error: error.message });
74
112
  this.isConnecting = false;
75
- reject(error);
113
+ reject(new Error('Could not connect to the Home Assistant WebSocket'));
76
114
  });
77
115
  }
78
116
  catch (error) {
@@ -94,13 +132,18 @@ export class EventSubscriber extends EventEmitter {
94
132
  access_token: this.config.token,
95
133
  });
96
134
  break;
97
- case 'auth_ok':
135
+ case 'auth_ok': {
98
136
  logger.info('WebSocket authentication successful');
137
+ this.clearConnectTimer();
99
138
  this.authenticated = true;
100
139
  this.isConnecting = false;
101
140
  this.emit('connected');
102
141
  resolveConnect();
142
+ // HA forgets subscriptions with the connection: (re)send every registered
143
+ // one, including those queued while Home Assistant was unreachable.
144
+ void this.resubscribeAll();
103
145
  break;
146
+ }
104
147
  case 'auth_invalid':
105
148
  logger.error('WebSocket authentication failed', { message: message.message });
106
149
  this.isConnecting = false;
@@ -121,18 +164,146 @@ export class EventSubscriber extends EventEmitter {
121
164
  */
122
165
  handleResult(message) {
123
166
  const id = message.id;
124
- const success = message.success;
125
- if (this.pendingSubscriptions.length > 0) {
126
- const pending = this.pendingSubscriptions.shift();
127
- if (success) {
128
- pending.resolve(id);
167
+ const pending = this.pendingCommands.get(id);
168
+ if (!pending) {
169
+ return;
170
+ }
171
+ this.pendingCommands.delete(id);
172
+ if (message.success) {
173
+ pending.resolve(message.result);
174
+ }
175
+ else {
176
+ // Callers and logs get only HA's error code (a fixed vocabulary such as
177
+ // "unauthorized" or "not_found"); HA's free-text message can carry URLs or
178
+ // other detail and is never passed on or logged.
179
+ const error = message.error;
180
+ const code = typeof error?.code === 'string' && /^[a-z_]{1,40}$/.test(error.code) ? error.code : 'unknown_error';
181
+ logger.warn('Home Assistant command failed', { type: pending.type, code });
182
+ pending.reject(new HaCommandError(pending.type, code));
183
+ }
184
+ }
185
+ clearConnectTimer() {
186
+ if (this.connectTimer) {
187
+ clearTimeout(this.connectTimer);
188
+ this.connectTimer = null;
189
+ }
190
+ }
191
+ rejectPendingCommands(error) {
192
+ for (const pending of this.pendingCommands.values()) {
193
+ pending.reject(error);
194
+ }
195
+ this.pendingCommands.clear();
196
+ }
197
+ /**
198
+ * Send a WebSocket command and resolve with its `result` (rejects on
199
+ * `success: false`, on disconnect, or after `timeoutMs`).
200
+ */
201
+ async sendCommand(command, timeoutMs = this.config.commandTimeout ?? 30000) {
202
+ return (await this.dispatchCommand(command, timeoutMs)).result;
203
+ }
204
+ /** Like sendCommand, but also reports the message id the command was sent with. */
205
+ async dispatchCommand(command, timeoutMs = this.config.commandTimeout ?? 30000) {
206
+ if (!this.authenticated) {
207
+ await this.connect();
208
+ }
209
+ const { id, result } = this.beginCommand(command, timeoutMs);
210
+ return { id, result: await result };
211
+ }
212
+ /**
213
+ * Send a command now and return its message id synchronously, with a promise
214
+ * for its result. Callers that must act on the id before the result arrives
215
+ * (subscriptions) use this directly.
216
+ */
217
+ beginCommand(command, timeoutMs = this.config.commandTimeout ?? 30000) {
218
+ const id = this.messageId++;
219
+ const result = new Promise((resolve, reject) => {
220
+ const timer = setTimeout(() => {
221
+ this.pendingCommands.delete(id);
222
+ reject(new Error(`Home Assistant command '${command.type}' timed out`));
223
+ }, timeoutMs);
224
+ this.pendingCommands.set(id, {
225
+ type: command.type,
226
+ resolve: (value) => {
227
+ clearTimeout(timer);
228
+ resolve(value);
229
+ },
230
+ reject: (error) => {
231
+ clearTimeout(timer);
232
+ reject(error);
233
+ },
234
+ });
235
+ try {
236
+ this.sendMessage({ ...command, id });
237
+ }
238
+ catch (error) {
239
+ clearTimeout(timer);
240
+ this.pendingCommands.delete(id);
241
+ reject(error instanceof Error ? error : new Error(String(error)));
242
+ }
243
+ });
244
+ return { id, result };
245
+ }
246
+ /** Send subscribe_events for every registered subscription on a new connection. */
247
+ async resubscribeAll() {
248
+ for (const sub of this.subscriptions.values()) {
249
+ if (sub.connection === this.ws) {
250
+ continue; // already subscribed (or in flight) on this connection
129
251
  }
130
- else {
131
- const error = message.error;
132
- pending.reject(new Error(error?.message ?? 'Subscription failed'));
252
+ const connection = this.ws;
253
+ sub.connection = connection;
254
+ // HA identifies the subscription by this message's id and may send events
255
+ // right after its confirmation (even in the same read): accept them from
256
+ // the moment the command is sent, not when the confirmation is processed.
257
+ const { id, result } = this.beginCommand(sub.eventType ? { type: 'subscribe_events', event_type: sub.eventType } : { type: 'subscribe_events' });
258
+ sub.subscriptionId = id;
259
+ sub.sending = result.then(() => id);
260
+ try {
261
+ await sub.sending;
262
+ logger.info('Event subscription active on new connection', { id: sub.id, eventType: sub.eventType });
263
+ }
264
+ catch (error) {
265
+ if (this.subscriptions.get(sub.id) !== sub) {
266
+ continue; // unsubscribed meanwhile; unsubscribe() already cancelled it on HA's side
267
+ }
268
+ sub.subscriptionId = -1;
269
+ sub.connection = null;
270
+ if (error instanceof HaCommandError) {
271
+ // A refusal (e.g. a non-admin token for a non-allowlisted event) is
272
+ // permanent: drop it and tell the owner of the subscription.
273
+ this.subscriptions.delete(sub.id);
274
+ logger.error('Home Assistant refused an event subscription', { id: sub.id, eventType: sub.eventType, code: error.code });
275
+ sub.onRejected?.(error);
276
+ }
277
+ else {
278
+ // Unconfirmed (e.g. timed out): HA may still have registered it. HA
279
+ // handles a connection's messages in order, so cancelling now is safe
280
+ // either way and keeps a retry from adding a duplicate.
281
+ if (this.authenticated && this.ws === connection) {
282
+ this.sendUnsubscribe(id);
283
+ }
284
+ logger.warn('Event subscription not confirmed; will retry', {
285
+ id: sub.id,
286
+ eventType: sub.eventType,
287
+ error: error instanceof Error ? error.message : String(error),
288
+ });
289
+ this.scheduleResubscribe();
290
+ }
133
291
  }
134
292
  }
135
293
  }
294
+ /** Retry failed subscriptions later on the same connection (a reconnect also retries them). */
295
+ scheduleResubscribe() {
296
+ if (this.resubscribeTimer) {
297
+ return;
298
+ }
299
+ this.resubscribeTimer = setTimeout(() => {
300
+ this.resubscribeTimer = null;
301
+ if (this.authenticated) {
302
+ void this.resubscribeAll();
303
+ }
304
+ }, this.config.resubscribeRetryDelay ?? 30000);
305
+ this.resubscribeTimer.unref?.();
306
+ }
136
307
  /**
137
308
  * Handle event messages
138
309
  */
@@ -140,9 +311,12 @@ export class EventSubscriber extends EventEmitter {
140
311
  const event = message.event;
141
312
  if (!event)
142
313
  return;
143
- // Emit to all matching subscriptions
314
+ // HA sends one copy of the event per subscription, tagged with that
315
+ // subscription's id: deliver each copy only to its own subscription, or two
316
+ // subscriptions to the same event type would each get every event twice.
317
+ const subscriptionId = message.id;
144
318
  for (const sub of this.subscriptions.values()) {
145
- if (this.eventMatchesSubscription(event, sub)) {
319
+ if (sub.subscriptionId === subscriptionId && this.eventMatchesSubscription(event, sub)) {
146
320
  try {
147
321
  sub.callback(event);
148
322
  }
@@ -195,13 +369,14 @@ export class EventSubscriber extends EventEmitter {
195
369
  return;
196
370
  }
197
371
  this.reconnectAttempts++;
198
- const delay = this.reconnectInterval * Math.pow(2, this.reconnectAttempts - 1);
372
+ const delay = Math.min(this.reconnectInterval * Math.pow(2, this.reconnectAttempts - 1), this.maxReconnectDelay);
199
373
  logger.info('Scheduling reconnect', {
200
374
  attempt: this.reconnectAttempts,
201
375
  maxAttempts: this.maxReconnectAttempts,
202
376
  delayMs: delay,
203
377
  });
204
378
  this.reconnectTimer = setTimeout(() => {
379
+ this.reconnectTimer = null;
205
380
  this.connect().catch((error) => {
206
381
  logger.error('Reconnect failed', { error: error.message });
207
382
  });
@@ -218,10 +393,11 @@ export class EventSubscriber extends EventEmitter {
218
393
  /**
219
394
  * Subscribe to specific event type
220
395
  */
221
- async subscribeEventType(eventType, callback) {
396
+ async subscribeEventType(eventType, callback, onRejected) {
222
397
  return this.subscribe({
223
398
  eventType,
224
399
  callback,
400
+ onRejected,
225
401
  });
226
402
  }
227
403
  /**
@@ -245,45 +421,64 @@ export class EventSubscriber extends EventEmitter {
245
421
  });
246
422
  }
247
423
  /**
248
- * Internal subscribe method
424
+ * Internal subscribe method.
425
+ *
426
+ * The subscription is registered first and then sent on every authenticated
427
+ * connection: right away when connected, otherwise as soon as Home Assistant
428
+ * is reachable, and again after any reconnect (HA forgets subscriptions with
429
+ * the connection). It never fails because Home Assistant is down.
249
430
  */
250
431
  async subscribe(options) {
251
- if (!this.authenticated) {
252
- await this.connect();
253
- }
254
- const subscriptionId = await this.sendSubscribeEvents(options.eventType);
255
432
  const id = `sub_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
256
- this.subscriptions.set(id, {
433
+ const entry = {
257
434
  id,
258
- subscriptionId,
435
+ subscriptionId: -1,
436
+ connection: null,
259
437
  eventType: options.eventType,
260
438
  domain: options.domain,
261
439
  entityId: options.entityId,
262
440
  callback: options.callback,
263
- });
441
+ // Refusals that arrive later (after HA becomes reachable, or after a
442
+ // reconnect) are reported here.
443
+ onRejected: options.onRejected,
444
+ };
445
+ this.subscriptions.set(id, entry);
264
446
  logger.info('Created event subscription', {
265
447
  id,
266
448
  eventType: options.eventType,
267
449
  domain: options.domain,
268
450
  entityId: options.entityId,
269
451
  });
270
- return id;
271
- }
272
- /**
273
- * Send subscribe_events command
274
- */
275
- sendSubscribeEvents(eventType) {
276
- return new Promise((resolve, reject) => {
277
- this.pendingSubscriptions.push({ resolve, reject });
278
- const message = {
279
- id: this.messageId++,
280
- type: 'subscribe_events',
281
- };
282
- if (eventType) {
283
- message.event_type = eventType;
452
+ if (!this.authenticated && !this.reconnectTimer) {
453
+ try {
454
+ await this.connect();
284
455
  }
285
- this.sendMessage(message);
286
- });
456
+ catch (error) {
457
+ logger.warn('Home Assistant WebSocket not reachable; the subscription will be sent once it is', {
458
+ error: error instanceof Error ? error.message : String(error),
459
+ });
460
+ return id;
461
+ }
462
+ }
463
+ if (this.authenticated) {
464
+ // Return once Home Assistant has confirmed it. A refusal now is thrown to
465
+ // the caller (and the subscription dropped) rather than reported to
466
+ // onRejected; a transient failure leaves it queued.
467
+ entry.onRejected = undefined;
468
+ try {
469
+ await this.resubscribeAll();
470
+ await entry.sending;
471
+ }
472
+ catch (error) {
473
+ if (error instanceof HaCommandError) {
474
+ throw error;
475
+ }
476
+ }
477
+ finally {
478
+ entry.onRejected = options.onRejected;
479
+ }
480
+ }
481
+ return id;
287
482
  }
288
483
  /**
289
484
  * Unsubscribe from events
@@ -293,14 +488,23 @@ export class EventSubscriber extends EventEmitter {
293
488
  if (!sub) {
294
489
  return;
295
490
  }
296
- // Send unsubscribe command
297
- this.sendMessage({
298
- id: this.messageId++,
299
- type: 'unsubscribe_events',
300
- subscription: sub.subscriptionId,
301
- });
491
+ // Forget it locally first, whatever the connection state, so it is never
492
+ // restored on a later reconnect.
302
493
  this.subscriptions.delete(subscriptionId);
303
494
  logger.info('Removed event subscription', { id: subscriptionId });
495
+ // Tell HA if it was sent on the current connection, confirmed or not: HA
496
+ // handles a connection's messages in order, so the cancel follows the subscribe.
497
+ if (this.authenticated && sub.connection === this.ws && sub.subscriptionId >= 0) {
498
+ this.sendUnsubscribe(sub.subscriptionId);
499
+ }
500
+ }
501
+ sendUnsubscribe(haSubscriptionId) {
502
+ try {
503
+ this.sendMessage({ id: this.messageId++, type: 'unsubscribe_events', subscription: haSubscriptionId });
504
+ }
505
+ catch (error) {
506
+ logger.debug('Could not send unsubscribe_events', { error: error instanceof Error ? error.message : String(error) });
507
+ }
304
508
  }
305
509
  /**
306
510
  * Send a message over WebSocket
@@ -320,6 +524,7 @@ export class EventSubscriber extends EventEmitter {
320
524
  clearTimeout(this.reconnectTimer);
321
525
  this.reconnectTimer = null;
322
526
  }
527
+ this.clearConnectTimer();
323
528
  if (this.ws) {
324
529
  this.ws.close();
325
530
  this.ws = null;
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/haClient/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/haClient/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAkC5C,qGAAqG;AACrG,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE5B;IACA;IAFX,YACW,WAAmB,EACnB,IAAY;QAErB,KAAK,CAAC,4BAA4B,WAAW,MAAM,IAAI,GAAG,CAAC,CAAC;QAHnD,gBAAW,GAAX,WAAW,CAAQ;QACnB,SAAI,GAAJ,IAAI,CAAQ;QAGrB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAkCD;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IACvC,EAAE,GAAqB,IAAI,CAAC;IAC5B,SAAS,GAAG,CAAC,CAAC;IACd,aAAa,GAAG,KAAK,CAAC;IACtB,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC7D,gFAAgF;IACxE,eAAe,GAAG,IAAI,GAAG,EAG9B,CAAC;IACI,iBAAiB,GAAG,CAAC,CAAC;IACtB,cAAc,GAAyC,IAAI,CAAC;IACpE,iFAAiF;IACzE,YAAY,GAAyC,IAAI,CAAC;IAClE,yEAAyE;IACjE,gBAAgB,GAAyC,IAAI,CAAC;IAC9D,YAAY,GAAG,KAAK,CAAC;IACrB,eAAe,GAAG,IAAI,CAAC;IAEd,MAAM,CAAwB;IAC9B,iBAAiB,CAAS;IAC1B,oBAAoB,CAAS;IAC7B,iBAAiB,CAAS;IAE3C,YAAY,MAA6B;QACvC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC1D,4EAA4E;QAC5E,iFAAiF;QACjF,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,iBAAiB,CAAC;QACpF,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,oCAAoC;gBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;qBAC9B,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;qBACtB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC;gBAEzC,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;gBAEtE,mFAAmF;gBACnF,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC,CAAC;gBACxF,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;gBACnB,kEAAkE;gBAClE,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC1B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC/B,CAAC;gBACG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;oBAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,MAAM,CAAC,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;oBAC1E,EAAE,CAAC,SAAS,EAAE,CAAC;gBACjB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC;gBAExC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;oBACtB,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;oBAChD,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAoB,EAAE,EAAE;oBAC7C,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC5C,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC/C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;oBACnC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAChF,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;oBAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;oBACrE,gFAAgF;oBAChF,MAAM,CAAC,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC,CAAC;oBAC/E,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC5B,mEAAmE;oBACnE,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC1D,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBACzE,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CACnB,OAAgC,EAChC,cAAqC,EACrC,aAAqC;QAErC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAc,CAAC;QAEpC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,eAAe;gBAClB,sBAAsB;gBACtB,IAAI,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,MAAM;oBACZ,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;iBAChC,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACnD,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvB,cAAc,EAAE,CAAC;gBACjB,0EAA0E;gBAC1E,oEAAoE;gBACpE,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YACR,CAAC;YAED,KAAK,cAAc;gBACjB,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,aAAa,CAAC,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACtE,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC3B,MAAM;YAER,KAAK,OAAO;gBACV,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC1B,MAAM;YAER;gBACE,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAAgC;QACnD,MAAM,EAAE,GAAG,OAAO,CAAC,EAAY,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,2EAA2E;YAC3E,iDAAiD;YACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAwD,CAAC;YAC/E,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;YACjH,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,OAAO,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,KAAY;QACxC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CACf,OAAiD,EACjD,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK;QAE/C,OAAO,CAAC,MAAM,IAAI,CAAC,eAAe,CAAI,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,eAAe,CAC3B,OAAiD,EACjD,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK;QAE/C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAI,OAAO,EAAE,SAAS,CAAC,CAAC;QAChE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACK,YAAY,CAClB,OAAiD,EACjD,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK;QAE/C,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;YAC1E,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;gBAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO,CAAC,KAAU,CAAC,CAAC;gBACtB,CAAC;gBACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;aACF,CAAC,CAAC;YACH,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IACxB,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,cAAc;QAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC/B,SAAS,CAAC,uDAAuD;YACnE,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;YAC5B,0EAA0E;YAC1E,yEAAyE;YACzE,0EAA0E;YAC1E,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CACtC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CACvG,CAAC;YACF,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,OAAO,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YACvG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC3C,SAAS,CAAC,0EAA0E;gBACtF,CAAC;gBACD,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBACxB,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;gBACtB,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;oBACpC,oEAAoE;oBACpE,6DAA6D;oBAC7D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAClC,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACzH,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,oEAAoE;oBACpE,sEAAsE;oBACtE,wDAAwD;oBACxD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;wBACjD,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;oBAC3B,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;wBAC1D,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAC9D,CAAC,CAAC;oBACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,+FAA+F;IACvF,mBAAmB;QACzB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAgC;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAgB,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,oEAAoE;QACpE,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,cAAc,GAAG,OAAO,CAAC,EAAY,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,cAAc,KAAK,cAAc,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;gBACvF,IAAI,CAAC;oBACH,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QAE9C,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,KAAc,EAAE,GAAsB;QACrE,0BAA0B;QAC1B,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC,SAAS,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iDAAiD;QACjD,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,eAAe,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,YAAY,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEjH,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAClC,OAAO,EAAE,IAAI,CAAC,iBAAiB;YAC/B,WAAW,EAAE,IAAI,CAAC,oBAAoB;YACtC,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7B,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,QAAkC;QACtD,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,SAAiB,EACjB,QAAkC,EAClC,UAA4C;QAE5C,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,SAAS;YACT,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAc,EAAE,QAAkC;QACtE,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,SAAS,EAAE,eAAe;YAC1B,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,QAAkC;QACxE,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,SAAS,EAAE,eAAe;YAC1B,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,SAAS,CAAC,OAMvB;QACC,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAsB;YAC/B,EAAE;YACF,cAAc,EAAE,CAAC,CAAC;YAClB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,qEAAqE;YACrE,gCAAgC;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACxC,EAAE;YACF,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,kFAAkF,EAAE;oBAC9F,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,0EAA0E;YAC1E,oEAAoE;YACpE,oDAAoD;YACpD,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,OAAO,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;oBACpC,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,cAAsB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QAED,yEAAyE;QACzE,iCAAiC;QACjC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QAElE,yEAAyE;QACzE,iFAAiF;QACjF,IAAI,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;YAChF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,gBAAwB;QAC9C,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAgC;QAClD,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAE7B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC,CAAC;CACF"}
@@ -3,6 +3,7 @@
3
3
  * Main client class that composes all operation modules
4
4
  */
5
5
  import type { Entity, ServiceCallData, ServiceCallResponse, Automation, AutomationConfig, DomainSummary, HaVersion, LogbookEntry, UpdateInfo, Calendar, CalendarEvent } from '../types/index.js';
6
+ import { type AutomationTraceSummary } from './automations.js';
6
7
  import { DeviceOperations } from './devices.js';
7
8
  export interface HaClientOptions {
8
9
  baseUrl: string;
@@ -112,7 +113,7 @@ export declare class HaClient {
112
113
  /**
113
114
  * Get automation execution trace
114
115
  */
115
- getAutomationTrace(entityId: string): Promise<unknown[]>;
116
+ getAutomationTrace(entityId: string, limit?: number): Promise<AutomationTraceSummary[]>;
116
117
  /**
117
118
  * Get historical data for an entity
118
119
  */
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { logger } from '../utils/logger.js';
6
6
  import { AutomationOperations } from './automations.js';
7
+ import { createHaWebSocketCommand } from './wsCommand.js';
7
8
  import { ConfigOperations } from './config.js';
8
9
  import { DeviceOperations } from './devices.js';
9
10
  import { EntityOperations } from './entities.js';
@@ -41,7 +42,7 @@ export class HaClient {
41
42
  this.stateOps = new StateOperations(this.request);
42
43
  this.serviceOps = new ServiceOperations(this.request);
43
44
  this.entityOps = new EntityOperations(this.stateOps);
44
- this.automationOps = new AutomationOperations(this.stateOps, this.serviceOps, this.request);
45
+ this.automationOps = new AutomationOperations(this.stateOps, this.serviceOps, this.request, createHaWebSocketCommand({ baseUrl: config.baseUrl, token: config.token, strictSsl: config.strictSsl }));
45
46
  this.historyOps = new HistoryOperations(this.request);
46
47
  this.updateOps = new UpdateOperations(this.entityOps);
47
48
  this.configOps = new ConfigOperations(this.request);
@@ -170,8 +171,8 @@ export class HaClient {
170
171
  /**
171
172
  * Get automation execution trace
172
173
  */
173
- async getAutomationTrace(entityId) {
174
- return this.automationOps.getAutomationTrace(entityId);
174
+ async getAutomationTrace(entityId, limit) {
175
+ return this.automationOps.getAutomationTrace(entityId, limit);
175
176
  }
176
177
  // ===== History Operations =====
177
178
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/haClient/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/haClient/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * One-shot Home Assistant WebSocket command: connect, authenticate, send one
3
+ * command, return its result, disconnect. For the few HA APIs that exist only
4
+ * over WebSocket (e.g. automation traces), usable in every transport mode.
5
+ */
6
+ export type HaWebSocketCommand = <T = unknown>(command: {
7
+ type: string;
8
+ [key: string]: unknown;
9
+ }) => Promise<T>;
10
+ export declare function createHaWebSocketCommand(config: {
11
+ baseUrl: string;
12
+ token: string;
13
+ strictSsl?: boolean;
14
+ /** One deadline for connecting, authenticating and the command (ms). Default 30 s. */
15
+ timeoutMs?: number;
16
+ }): HaWebSocketCommand;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * One-shot Home Assistant WebSocket command: connect, authenticate, send one
3
+ * command, return its result, disconnect. For the few HA APIs that exist only
4
+ * over WebSocket (e.g. automation traces), usable in every transport mode.
5
+ */
6
+ import { EventSubscriber } from './events.js';
7
+ export function createHaWebSocketCommand(config) {
8
+ const timeoutMs = config.timeoutMs ?? 30000;
9
+ return async (command) => {
10
+ const connection = new EventSubscriber({
11
+ baseUrl: config.baseUrl,
12
+ token: config.token,
13
+ strictSsl: config.strictSsl,
14
+ maxReconnectAttempts: 0,
15
+ connectTimeout: timeoutMs,
16
+ });
17
+ let timer;
18
+ const deadline = new Promise((_, reject) => {
19
+ timer = setTimeout(() => reject(new Error(`Home Assistant command '${command.type}' timed out`)), timeoutMs);
20
+ });
21
+ const work = (async () => {
22
+ await connection.connect();
23
+ return await connection.sendCommand(command, timeoutMs);
24
+ })();
25
+ // If the deadline wins, the abandoned attempt still settles later: observe it.
26
+ work.catch(() => undefined);
27
+ try {
28
+ return await Promise.race([work, deadline]);
29
+ }
30
+ finally {
31
+ clearTimeout(timer);
32
+ connection.disconnect();
33
+ }
34
+ };
35
+ }
36
+ //# sourceMappingURL=wsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsCommand.js","sourceRoot":"","sources":["../../src/haClient/wsCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,UAAU,wBAAwB,CAAC,MAMxC;IACG,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAC5C,OAAO,KAAK,EAAK,OAAiD,EAAc,EAAE;QAC9E,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC;YACnC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,oBAAoB,EAAE,CAAC;YACvB,cAAc,EAAE,SAAS;SAC5B,CAAC,CAAC;QACH,IAAI,KAAgD,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC9C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,MAAM,UAAU,CAAC,WAAW,CAAI,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC,EAAE,CAAC;QACL,+EAA+E;QAC/E,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,CAAC;YACD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,CAAC;gBAAS,CAAC;YACP,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,UAAU,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}