@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.
- package/README.md +23 -5
- package/dist/config.d.ts +4 -0
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/haClient/automations.d.ts +18 -2
- package/dist/haClient/automations.js +25 -7
- package/dist/haClient/automations.js.map +1 -1
- package/dist/haClient/events.d.ts +60 -7
- package/dist/haClient/events.js +252 -47
- package/dist/haClient/events.js.map +1 -1
- package/dist/haClient/index.d.ts +2 -1
- package/dist/haClient/index.js +4 -3
- package/dist/haClient/index.js.map +1 -1
- package/dist/haClient/wsCommand.d.ts +16 -0
- package/dist/haClient/wsCommand.js +36 -0
- package/dist/haClient/wsCommand.js.map +1 -0
- package/dist/omadaClient/client.d.ts +33 -1
- package/dist/omadaClient/client.js +61 -2
- package/dist/omadaClient/client.js.map +1 -1
- package/dist/omadaClient/index.d.ts +7 -0
- package/dist/omadaClient/index.js +6 -0
- package/dist/omadaClient/index.js.map +1 -1
- package/dist/omadaClient/request.d.ts +5 -0
- package/dist/omadaClient/request.js +11 -2
- package/dist/omadaClient/request.js.map +1 -1
- package/dist/ownerQuestions/service.d.ts +167 -0
- package/dist/ownerQuestions/service.js +439 -0
- package/dist/ownerQuestions/service.js.map +1 -0
- package/dist/server/common.d.ts +3 -0
- package/dist/server/common.js +2 -1
- package/dist/server/common.js.map +1 -1
- package/dist/server/http.js +30 -6
- package/dist/server/http.js.map +1 -1
- package/dist/server/stream.d.ts +2 -0
- package/dist/server/stream.js +2 -1
- package/dist/server/stream.js.map +1 -1
- package/dist/tools/common.d.ts +1 -1
- package/dist/tools/common.js +9 -2
- package/dist/tools/common.js.map +1 -1
- package/dist/tools/homeassistant/askOwner.d.ts +29 -0
- package/dist/tools/homeassistant/askOwner.js +85 -0
- package/dist/tools/homeassistant/askOwner.js.map +1 -0
- package/dist/tools/homeassistant/getAutomationTrace.d.ts +5 -0
- package/dist/tools/homeassistant/getAutomationTrace.js +10 -5
- package/dist/tools/homeassistant/getAutomationTrace.js.map +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +5 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/omada/blockClient.js +3 -1
- package/dist/tools/omada/blockClient.js.map +1 -1
- package/dist/tools/omada/deleteClient.d.ts +3 -0
- package/dist/tools/omada/deleteClient.js +15 -0
- package/dist/tools/omada/deleteClient.js.map +1 -0
- package/dist/tools/omada/index.js +7 -2
- package/dist/tools/omada/index.js.map +1 -1
- package/dist/tools/omada/listBlockedClients.d.ts +3 -0
- package/dist/tools/omada/listBlockedClients.js +9 -0
- package/dist/tools/omada/listBlockedClients.js.map +1 -0
- package/dist/tools/omada/namespace.js +17 -0
- package/dist/tools/omada/namespace.js.map +1 -1
- package/dist/utils/plainText.d.ts +22 -0
- package/dist/utils/plainText.js +39 -0
- package/dist/utils/plainText.js.map +1 -0
- package/dist/utils/redact.d.ts +21 -0
- package/dist/utils/redact.js +53 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/CHANGELOG.md +24 -0
- package/openapi.json +1 -1
- package/package.json +1 -1
- package/src/config.ts +10 -0
- package/src/haClient/automations.ts +39 -7
- package/src/haClient/events.ts +289 -56
- package/src/haClient/index.ts +10 -4
- package/src/haClient/wsCommand.ts +44 -0
- package/src/omadaClient/client.ts +82 -4
- package/src/omadaClient/index.ts +9 -1
- package/src/omadaClient/request.ts +13 -2
- package/src/ownerQuestions/service.ts +536 -0
- package/src/server/common.ts +5 -1
- package/src/server/http.ts +30 -6
- package/src/server/stream.ts +4 -1
- package/src/tools/common.ts +9 -2
- package/src/tools/homeassistant/askOwner.ts +133 -0
- package/src/tools/homeassistant/getAutomationTrace.ts +13 -7
- package/src/tools/index.ts +8 -1
- package/src/tools/omada/blockClient.ts +3 -1
- package/src/tools/omada/deleteClient.ts +27 -0
- package/src/tools/omada/index.ts +7 -2
- package/src/tools/omada/listBlockedClients.ts +17 -0
- package/src/tools/omada/namespace.ts +19 -0
- package/src/utils/plainText.ts +48 -0
- package/src/utils/redact.ts +59 -0
- package/src/version.ts +1 -1
- package/tests/config.test.ts +12 -0
- package/tests/haClient/automationTrace.test.ts +59 -0
- package/tests/haClient/automations.test.ts +16 -0
- package/tests/haClient/events.test.ts +455 -0
- package/tests/haClient/eventsTls.test.ts +52 -0
- package/tests/omadaClient/clientBlocks.test.ts +170 -0
- package/tests/ownerQuestions/service.test.ts +499 -0
- package/tests/ownerQuestions/tools.test.ts +186 -0
- package/tests/tools/homeassistant/handlers.test.ts +10 -1
- package/tests/tools/omada/graph.test.ts +13 -2
- package/tests/utils/redact.test.ts +105 -0
package/dist/haClient/events.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
125
|
-
if (
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
297
|
-
|
|
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":"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"}
|
package/dist/haClient/index.d.ts
CHANGED
|
@@ -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<
|
|
116
|
+
getAutomationTrace(entityId: string, limit?: number): Promise<AutomationTraceSummary[]>;
|
|
116
117
|
/**
|
|
117
118
|
* Get historical data for an entity
|
|
118
119
|
*/
|
package/dist/haClient/index.js
CHANGED
|
@@ -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":"AAAA;;;GAGG;AAeH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,oBAAoB,
|
|
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"}
|