@homebridge-plugins/homebridge-eufy-security 5.0.0-beta.34 → 5.0.0-beta.36

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 (86) hide show
  1. package/CONTRIBUTING.md +9 -17
  2. package/config.schema.json +6 -0
  3. package/dist/account/ownership.js +16 -16
  4. package/dist/account/ownership.js.map +1 -1
  5. package/dist/account/persistence.js +24 -74
  6. package/dist/account/persistence.js.map +1 -1
  7. package/dist/account/temporary-authentication.js +2 -2
  8. package/dist/account/temporary-authentication.js.map +1 -1
  9. package/dist/configuration.js +18 -25
  10. package/dist/configuration.js.map +1 -1
  11. package/dist/device/member-evidence.js +1 -1
  12. package/dist/device/member-evidence.js.map +1 -1
  13. package/dist/device/member-trust.js +14 -32
  14. package/dist/device/member-trust.js.map +1 -1
  15. package/dist/device/snapshot.js +5 -17
  16. package/dist/device/snapshot.js.map +1 -1
  17. package/dist/diagnostics.js +246 -300
  18. package/dist/diagnostics.js.map +1 -1
  19. package/dist/homekit/adapter.js +4 -1
  20. package/dist/homekit/adapter.js.map +1 -1
  21. package/dist/homekit/adapters/battery.js +3 -3
  22. package/dist/homekit/adapters/battery.js.map +1 -1
  23. package/dist/homekit/adapters/camera-controls.js +15 -37
  24. package/dist/homekit/adapters/camera-controls.js.map +1 -1
  25. package/dist/homekit/adapters/camera-streaming.js +9 -19
  26. package/dist/homekit/adapters/camera-streaming.js.map +1 -1
  27. package/dist/homekit/adapters/contact.js +5 -5
  28. package/dist/homekit/adapters/contact.js.map +1 -1
  29. package/dist/homekit/adapters/doorbell.js +3 -15
  30. package/dist/homekit/adapters/doorbell.js.map +1 -1
  31. package/dist/homekit/adapters/lock.js +15 -214
  32. package/dist/homekit/adapters/lock.js.map +1 -1
  33. package/dist/homekit/adapters/motion.js +2 -2
  34. package/dist/homekit/adapters/motion.js.map +1 -1
  35. package/dist/homekit/adapters/package-sensor.js +2 -2
  36. package/dist/homekit/adapters/package-sensor.js.map +1 -1
  37. package/dist/homekit/adapters/security-system.js +11 -211
  38. package/dist/homekit/adapters/security-system.js.map +1 -1
  39. package/dist/homekit/adapters/siren.js +5 -33
  40. package/dist/homekit/adapters/siren.js.map +1 -1
  41. package/dist/homekit/adapters/smart-light.js +19 -217
  42. package/dist/homekit/adapters/smart-light.js.map +1 -1
  43. package/dist/homekit/coverage-matrix.js +8 -65
  44. package/dist/homekit/coverage-matrix.js.map +1 -1
  45. package/dist/homekit/device-control.js +249 -13
  46. package/dist/homekit/device-control.js.map +1 -1
  47. package/dist/homekit/reconciler.js +5 -5
  48. package/dist/homekit/reconciler.js.map +1 -1
  49. package/dist/media/last-successful-image.js +3 -20
  50. package/dist/media/last-successful-image.js.map +1 -1
  51. package/dist/media/live-preview.js +163 -42
  52. package/dist/media/live-preview.js.map +1 -1
  53. package/dist/media/live-stream.js +108 -67
  54. package/dist/media/live-stream.js.map +1 -1
  55. package/dist/media/recording.js +37 -120
  56. package/dist/media/recording.js.map +1 -1
  57. package/dist/media/snapshot.js +1 -9
  58. package/dist/media/snapshot.js.map +1 -1
  59. package/dist/media/station-live-sessions.js +0 -15
  60. package/dist/media/station-live-sessions.js.map +1 -1
  61. package/dist/platform.js +10 -10
  62. package/dist/platform.js.map +1 -1
  63. package/dist/runtime/channel.js +91 -69
  64. package/dist/runtime/channel.js.map +1 -1
  65. package/dist/runtime/owner.js +6 -6
  66. package/dist/runtime/owner.js.map +1 -1
  67. package/dist/runtime/sdk-client.js +3 -14
  68. package/dist/runtime/sdk-client.js.map +1 -1
  69. package/dist/runtime/tracker.js +8 -38
  70. package/dist/runtime/tracker.js.map +1 -1
  71. package/dist/storage.js +1 -1
  72. package/dist/storage.js.map +1 -1
  73. package/dist/ui/runtime-channel-client.js +145 -282
  74. package/dist/ui/runtime-channel-client.js.map +1 -1
  75. package/dist/ui/server.js +39 -53
  76. package/dist/ui/server.js.map +1 -1
  77. package/homebridge-ui/public/app.css +150 -78
  78. package/homebridge-ui/public/i18n/en.json +14 -2
  79. package/homebridge-ui/public/i18n/fr.json +14 -2
  80. package/homebridge-ui/public/index.html +59 -10
  81. package/homebridge-ui/public/js/app.js +206 -42
  82. package/homebridge-ui/public/js/dashboard.js +4 -19
  83. package/package.json +3 -7
  84. package/homebridge-ui/public/js/legacy-settings.js +0 -37
  85. package/homebridge-ui/public/js/profile-wizard.js +0 -31
  86. package/homebridge-ui/public/js/setup-wizard.js +0 -52
@@ -1,5 +1,5 @@
1
1
  import { createConnection } from 'node:net';
2
- import { answeredDevice, answeredDeviceSetting, answeredStatus, areRuntimeChannelDevices, areRuntimeChannelDeviceSettings, FrameReader, isRuntimeChannelStatus, ownedSocket, RUNTIME_CHANNEL_CONNECT_TIMEOUT_MS, RUNTIME_CHANNEL_PROTOCOL, RUNTIME_CHANNEL_RESPONSE_TIMEOUT_MS, RUNTIME_CHANNEL_STAND_DOWN_TIMEOUT_MS, RUNTIME_CHANNEL_WRITE_TIMEOUT_MS, RUNTIME_DEVICE_LIVE_PATH, RUNTIME_DEVICE_SETTING_WRITE_PATH, RUNTIME_DEVICE_SETTINGS_PATH, RUNTIME_DEVICES_PATH, RUNTIME_DIAGNOSTICS_PATH, RUNTIME_RESTART_PATH, RUNTIME_STAND_DOWN_PATH, RUNTIME_STATUS_PATH, } from '../runtime/channel.js';
2
+ import { answeredDevice, answeredDeviceSetting, answeredStatus, areRuntimeChannelDevices, areRuntimeChannelDeviceSettings, FrameReader, isRuntimeChannelStatus, LIVE_UNPLAYABLE, ownedSocket, RUNTIME_CHANNEL_CONNECT_TIMEOUT_MS, RUNTIME_CHANNEL_PROTOCOL, RUNTIME_DEVICE_LIVE_ADAPT_PATH, RUNTIME_CHANNEL_RESPONSE_TIMEOUT_MS, RUNTIME_CHANNEL_STAND_DOWN_TIMEOUT_MS, RUNTIME_CHANNEL_WRITE_TIMEOUT_MS, RUNTIME_DEVICE_LIVE_PATH, RUNTIME_DEVICE_SETTING_WRITE_PATH, RUNTIME_DEVICE_SETTINGS_PATH, RUNTIME_DEVICES_PATH, RUNTIME_DIAGNOSTICS_PATH, RUNTIME_RESTART_PATH, RUNTIME_STAND_DOWN_PATH, RUNTIME_STATUS_PATH, } from '../runtime/channel.js';
3
3
  const STATUS_REQUEST = 1;
4
4
  const DEVICES_REQUEST = 2;
5
5
  const DIAGNOSTICS_REQUEST = 3;
@@ -30,20 +30,95 @@ export class RuntimeChannelClient {
30
30
  this.standDownTimeoutMs = options.standDownTimeoutMs ?? RUNTIME_CHANNEL_STAND_DOWN_TIMEOUT_MS;
31
31
  this.writeTimeoutMs = options.writeTimeoutMs ?? RUNTIME_CHANNEL_WRITE_TIMEOUT_MS;
32
32
  }
33
+ /** A device's eufy settings, or undefined where no runtime answers them. */
33
34
  async readDeviceSettings(serial) {
34
- return this.over(undefined, (connection) => this.requested(connection, RUNTIME_DEVICE_SETTINGS_PATH, { serial }, this.responseTimeoutMs, (response) => response.ok && areRuntimeChannelDeviceSettings(response.data)
35
- ? response.data.map(answeredDeviceSetting)
36
- : undefined));
35
+ return this.over(undefined, (connection) => this.converse(connection, () => frame(SETTINGS_REQUEST, RUNTIME_DEVICE_SETTINGS_PATH, { serial }), (response, conclude) => {
36
+ if (response?.id !== SETTINGS_REQUEST)
37
+ return;
38
+ conclude(response.ok && areRuntimeChannelDeviceSettings(response.data)
39
+ ? response.data.map(answeredDeviceSetting)
40
+ : undefined);
41
+ }, () => undefined, this.responseTimeoutMs));
37
42
  }
43
+ /**
44
+ * Writes one device setting, true where the runtime delivered it. Delivery is not the device changing: the next
45
+ * read is what states that. An absent runtime refuses every write.
46
+ */
38
47
  async writeDeviceSetting(write) {
39
- const accepted = await this.over(undefined, (connection) => this.requested(connection, RUNTIME_DEVICE_SETTING_WRITE_PATH, write, this.writeTimeoutMs, (response) => response.ok ? true : undefined));
40
- return accepted === true;
48
+ return this.over(false, (connection) => this.converse(connection, () => frame(SETTINGS_REQUEST, RUNTIME_DEVICE_SETTING_WRITE_PATH, write), answered, () => false, this.writeTimeoutMs));
49
+ }
50
+ /**
51
+ * Streams one camera's live preview as base64 JPEG pictures, each with its side and the live encoder and rate
52
+ * of the HomeKit side, until it ends, the runtime is gone, or `signal` aborts. Settles once it has stopped, true
53
+ * where the last HomeKit run yielded no picture; a runtime without the path, or with no preview to give, settles
54
+ * at once.
55
+ */
56
+ async liveDevice(query, onPicture, signal) {
57
+ return this.over(false, (connection) => {
58
+ if (signal.aborted)
59
+ connection.destroy();
60
+ else
61
+ signal.addEventListener('abort', () => connection.destroy(), { once: true });
62
+ return this.converse(connection, () => frame(SETTINGS_REQUEST, RUNTIME_DEVICE_LIVE_PATH, query), (response, conclude) => {
63
+ if (response?.id !== SETTINGS_REQUEST)
64
+ return;
65
+ if (!response.ok)
66
+ return conclude(response.data === LIVE_UNPLAYABLE);
67
+ const { side, encoder, kbps } = response.coding ?? {};
68
+ if (typeof response.data !== 'string' || typeof encoder !== 'string')
69
+ return conclude(false);
70
+ if (side !== 'raw' && side !== 'homekit')
71
+ return conclude(false);
72
+ onPicture(response.data, typeof kbps === 'number' ? { side, encoder, kbps } : { side, encoder });
73
+ }, () => false);
74
+ });
41
75
  }
42
- async liveDevice(serial, onPicture, signal) {
43
- await this.over(undefined, (connection) => this.streamed(connection, serial, onPicture, signal));
76
+ /** Restarts the HomeKit side of the camera's running preview with other settings; false where none runs. */
77
+ async adaptLive(query) {
78
+ return this.over(false, (connection) => this.converse(connection, () => frame(SETTINGS_REQUEST, RUNTIME_DEVICE_LIVE_ADAPT_PATH, query), answered, () => false, this.responseTimeoutMs));
44
79
  }
80
+ /**
81
+ * Reads the greeting, the status, and the observations.
82
+ *
83
+ * The status is one answer and the observations are another, so a runtime that answers the first and then says
84
+ * nothing, closes, or overruns the frame bound concludes with the status alone. Only a read with no status at
85
+ * all, an unreadable frame, or an answer this client cannot use is absence.
86
+ */
45
87
  async read() {
46
- return this.over(undefined, (connection) => this.exchange(connection));
88
+ let greeting;
89
+ let status;
90
+ let devices;
91
+ let devicesSettled = false;
92
+ const reading = () => status && {
93
+ ready: greeting.ready,
94
+ status,
95
+ ...(devices === undefined ? {} : { devices }),
96
+ ...(greeting.version === undefined ? {} : { version: greeting.version }),
97
+ ...(greeting.build === undefined ? {} : { build: greeting.build }),
98
+ ...(greeting.restartable === undefined ? {} : { restartable: greeting.restartable }),
99
+ };
100
+ return this.over(undefined, (connection) => this.converse(connection, (opened) => {
101
+ if (typeof opened.ready !== 'boolean')
102
+ return undefined;
103
+ greeting = opened;
104
+ return frame(STATUS_REQUEST, RUNTIME_STATUS_PATH) + frame(DEVICES_REQUEST, RUNTIME_DEVICES_PATH);
105
+ }, (response, conclude) => {
106
+ if (response?.id === STATUS_REQUEST) {
107
+ if (!response.ok || !isRuntimeChannelStatus(response.data))
108
+ return conclude(undefined);
109
+ status = answeredStatus(response.data);
110
+ }
111
+ else if (response?.id === DEVICES_REQUEST) {
112
+ devicesSettled = true;
113
+ if (response.ok) {
114
+ if (!areRuntimeChannelDevices(response.data))
115
+ return conclude(undefined);
116
+ devices = response.data.map(answeredDevice);
117
+ }
118
+ }
119
+ if (status && devicesSettled)
120
+ conclude(reading());
121
+ }, (ending) => (ending === 'fault' ? undefined : reading()), this.responseTimeoutMs));
47
122
  }
48
123
  /**
49
124
  * Tells the runtime which authorized evidence window was written, so it reads the file now.
@@ -52,7 +127,10 @@ export class RuntimeChannelClient {
52
127
  * way: the file the runtime reads is the authority, and it decided before this was sent.
53
128
  */
54
129
  async notifyAuthorization(supportCaseId) {
55
- return this.over(undefined, (connection) => this.notified(connection, supportCaseId));
130
+ return this.over(undefined, (connection) => this.converse(connection, () => frame(DIAGNOSTICS_REQUEST, RUNTIME_DIAGNOSTICS_PATH, { supportCaseId }), (response, conclude) => {
131
+ if (response?.id === DIAGNOSTICS_REQUEST)
132
+ conclude();
133
+ }, () => undefined, this.responseTimeoutMs));
56
134
  }
57
135
  /**
58
136
  * Asks the runtime to release the account session, reporting whether it stood down.
@@ -64,16 +142,30 @@ export class RuntimeChannelClient {
64
142
  * answer, which is that the session was not freed.
65
143
  */
66
144
  async requestStandDown() {
67
- return this.over(false, (connection) => this.accepted(connection, RUNTIME_STAND_DOWN_PATH));
145
+ return this.over(false, (connection) => this.departed(connection, RUNTIME_STAND_DOWN_PATH));
68
146
  }
69
147
  /**
70
148
  * Asks the runtime to end itself so Homebridge brings up the installed build, reporting whether it accepted.
71
149
  *
72
150
  * A runtime that does not serve the path, or refuses because ending it would not replace it, is a false rather
73
- * than a failure, so a caller never has to tell an old runtime apart from an unwilling one.
151
+ * than a failure, so a caller never has to tell an old runtime apart from an unwilling one. Whether the
152
+ * replacement came up is read from the next greeting.
74
153
  */
75
154
  async requestRestart() {
76
- return this.over(false, (connection) => this.accepted(connection, RUNTIME_RESTART_PATH));
155
+ return this.over(false, (connection) => this.departed(connection, RUNTIME_RESTART_PATH));
156
+ }
157
+ /**
158
+ * Sends one departure request and reports whether the endpoint then closed without refusing it.
159
+ *
160
+ * A runtime that releases its session or ends for replacement closes its endpoint at the end of its own bounded
161
+ * shutdown, so the closing is the completion this waits for and an explicit refusal is the one answer that ends
162
+ * it early. Acceptance is not waited for, because a runtime that closes the connection may not have flushed it.
163
+ */
164
+ departed(connection, path) {
165
+ return this.converse(connection, () => frame(DEPARTURE_REQUEST, path), (response, conclude) => {
166
+ if (response?.id === DEPARTURE_REQUEST && !response.ok)
167
+ conclude(false);
168
+ }, (ending) => ending === 'closed', this.standDownTimeoutMs);
77
169
  }
78
170
  /**
79
171
  * Runs one operation over its own connection, answering `absent` wherever the endpoint could not be used.
@@ -117,297 +209,68 @@ export class RuntimeChannelClient {
117
209
  });
118
210
  }
119
211
  /**
120
- * Sends one notification after the greeting and concludes when it is answered.
212
+ * Holds one conversation: writes what `request` makes of the greeting, then hands each response to `onResponse`
213
+ * until it concludes, and answers every other ending with `unanswered`.
121
214
  *
122
- * Concludes rather than fails on every other outcome. A protocol this client does not speak concludes without
123
- * sending, so a runtime running older code is never handed a frame it would read as something else.
215
+ * Everything before the request is written is a `fault`: a greeting naming another protocol or one `request`
216
+ * refuses is never sent the request, so a runtime running older code is never handed a frame it would read as
217
+ * something else. An unreadable frame is a `fault` too. After the request, the endpoint closing is `closed`, and
218
+ * `timeoutMs` passing or a frame beyond the frame bound is `lapsed`.
124
219
  */
125
- notified(connection, supportCaseId) {
220
+ converse(connection, request, onResponse, unanswered, timeoutMs) {
126
221
  return new Promise((resolve) => {
127
- const settle = setTimeout(resolve, this.responseTimeoutMs);
128
- settle.unref();
129
- const conclude = () => {
130
- clearTimeout(settle);
131
- resolve();
132
- };
133
- const reader = new FrameReader();
134
- let greeted = false;
135
- connection.once('error', conclude);
136
- connection.once('close', conclude);
137
- connection.on('data', (chunk) => {
138
- const frames = reader.accept(chunk);
139
- if (!frames) {
140
- conclude();
141
- return;
142
- }
143
- for (const frame of frames) {
144
- let parsed;
145
- try {
146
- parsed = JSON.parse(frame);
147
- }
148
- catch {
149
- conclude();
150
- return;
151
- }
152
- if (greeted) {
153
- if (parsed?.id === DIAGNOSTICS_REQUEST) {
154
- conclude();
155
- return;
156
- }
157
- continue;
158
- }
159
- if (parsed?.protocol !== RUNTIME_CHANNEL_PROTOCOL) {
160
- conclude();
161
- return;
162
- }
163
- greeted = true;
164
- connection.write(`${JSON.stringify({
165
- v: RUNTIME_CHANNEL_PROTOCOL,
166
- id: DIAGNOSTICS_REQUEST,
167
- path: RUNTIME_DIAGNOSTICS_PATH,
168
- body: { supportCaseId },
169
- })}\n`);
170
- }
171
- });
172
- });
173
- }
174
- /**
175
- * Sends one departure request after the greeting and reports what became of it.
176
- *
177
- * A runtime that releases its session or ends for replacement closes its endpoint at the end of its own bounded
178
- * shutdown, so the closing is the completion this waits for and an explicit refusal is the one answer that ends
179
- * it early. Acceptance is not waited for, because a runtime that closes the connection may not have flushed it.
180
- * A protocol this client does not speak is never sent the request, so a frame an older runtime reads as
181
- * something else cannot take a session down that nothing asked for.
182
- */
183
- accepted(connection, path) {
184
- return new Promise((resolve) => {
185
- const settle = setTimeout(() => resolve(false), this.standDownTimeoutMs);
186
- settle.unref();
187
- const conclude = (accepted) => {
188
- clearTimeout(settle);
189
- resolve(accepted);
190
- };
191
- const reader = new FrameReader();
192
222
  let requested = false;
193
- connection.once('error', () => conclude(requested));
194
- connection.once('close', () => conclude(requested));
195
- connection.on('data', (chunk) => {
196
- const frames = reader.accept(chunk);
197
- if (!frames) {
198
- conclude(false);
199
- return;
200
- }
201
- for (const frame of frames) {
202
- let parsed;
203
- try {
204
- parsed = JSON.parse(frame);
205
- }
206
- catch {
207
- conclude(false);
208
- return;
209
- }
210
- if (!requested) {
211
- if (parsed?.protocol !== RUNTIME_CHANNEL_PROTOCOL) {
212
- conclude(false);
213
- return;
214
- }
215
- requested = true;
216
- connection.write(`${JSON.stringify({ v: RUNTIME_CHANNEL_PROTOCOL, id: DEPARTURE_REQUEST, path })}\n`);
217
- continue;
218
- }
219
- const response = parsed;
220
- if (response?.id === DEPARTURE_REQUEST && !response.ok) {
221
- conclude(false);
222
- return;
223
- }
224
- }
225
- });
226
- });
227
- }
228
- /**
229
- * Sends one request after the greeting and answers what `accept` makes of its response.
230
- *
231
- * Undefined is every other outcome: a protocol this client does not speak, which is never sent the request, a
232
- * refusal, an answer `accept` does not take, and no answer within `timeoutMs`.
233
- */
234
- requested(connection, path, body, timeoutMs, accept) {
235
- return new Promise((resolve) => {
236
- const settle = setTimeout(() => resolve(undefined), timeoutMs);
237
- settle.unref();
223
+ let done = false;
238
224
  const conclude = (value) => {
225
+ done = true;
239
226
  clearTimeout(settle);
240
227
  resolve(value);
241
228
  };
229
+ const end = (ending) => {
230
+ if (!done)
231
+ conclude(unanswered(requested ? ending : 'fault'));
232
+ };
233
+ const settle = timeoutMs === undefined ? undefined : setTimeout(() => end('lapsed'), timeoutMs);
234
+ settle?.unref();
242
235
  const reader = new FrameReader();
243
- let requested = false;
244
- connection.once('error', () => conclude(undefined));
245
- connection.once('close', () => conclude(undefined));
246
- connection.on('data', (chunk) => {
247
- const frames = reader.accept(chunk);
248
- if (!frames) {
249
- conclude(undefined);
250
- return;
251
- }
252
- for (const frame of frames) {
253
- let parsed;
254
- try {
255
- parsed = JSON.parse(frame);
256
- }
257
- catch {
258
- conclude(undefined);
259
- return;
260
- }
261
- if (!requested) {
262
- if (parsed?.protocol !== RUNTIME_CHANNEL_PROTOCOL) {
263
- conclude(undefined);
264
- return;
265
- }
266
- requested = true;
267
- connection.write(`${JSON.stringify({ v: RUNTIME_CHANNEL_PROTOCOL, id: SETTINGS_REQUEST, path, body })}\n`);
268
- continue;
269
- }
270
- const response = parsed;
271
- if (response?.id === SETTINGS_REQUEST) {
272
- conclude(accept(response));
273
- return;
274
- }
275
- }
276
- });
277
- });
278
- }
279
- /** Sends one live request after the greeting and hands on each picture, settling once the stream ends. */
280
- streamed(connection, serial, onPicture, signal) {
281
- return new Promise((resolve) => {
282
- const conclude = () => resolve(undefined);
283
- if (signal.aborted)
284
- return conclude();
285
- signal.addEventListener('abort', conclude, { once: true });
286
- const reader = new FrameReader();
287
- let requested = false;
288
- connection.once('error', conclude);
289
- connection.once('close', conclude);
236
+ connection.once('error', () => end('closed'));
237
+ connection.once('close', () => end('closed'));
290
238
  connection.on('data', (chunk) => {
291
239
  const frames = reader.accept(chunk);
292
240
  if (!frames)
293
- return conclude();
294
- for (const frame of frames) {
295
- let parsed;
296
- try {
297
- parsed = JSON.parse(frame);
298
- }
299
- catch {
300
- return conclude();
301
- }
302
- if (!requested) {
303
- if (parsed?.protocol !== RUNTIME_CHANNEL_PROTOCOL)
304
- return conclude();
305
- requested = true;
306
- const request = { v: RUNTIME_CHANNEL_PROTOCOL, id: SETTINGS_REQUEST, path: RUNTIME_DEVICE_LIVE_PATH };
307
- connection.write(`${JSON.stringify({ ...request, body: { serial } })}\n`);
308
- continue;
309
- }
310
- const response = parsed;
311
- if (response?.id !== SETTINGS_REQUEST)
312
- continue;
313
- if (!response.ok || typeof response.data !== 'string')
314
- return conclude();
315
- onPicture(response.data);
316
- }
317
- });
318
- });
319
- }
320
- exchange(connection) {
321
- return new Promise((resolve, reject) => {
322
- const settle = setTimeout(() => concludeOrFail('runtime channel response timed out'), this.responseTimeoutMs);
323
- settle.unref();
324
- const reader = new FrameReader();
325
- let greeting;
326
- const fail = (message) => {
327
- clearTimeout(settle);
328
- reject(new Error(message));
329
- };
330
- /**
331
- * Concludes with the status alone where the observations never settled.
332
- *
333
- * The status is one answer and the observations are another, so a runtime that answers the first and
334
- * then says nothing must not cost both. Only a read with no status at all is a failure.
335
- */
336
- const concludeOrFail = (message) => {
337
- if (greeting && answeredStatusValue) {
338
- devicesSettled = true;
339
- settleIfComplete();
340
- return;
341
- }
342
- fail(message);
343
- };
344
- connection.once('error', () => concludeOrFail('runtime channel faulted'));
345
- connection.once('close', () => concludeOrFail('runtime channel closed before answering'));
346
- let answeredStatusValue;
347
- let answeredDevices;
348
- let devicesSettled = false;
349
- const settleIfComplete = () => {
350
- if (!greeting || !answeredStatusValue || !devicesSettled) {
351
- return;
352
- }
353
- clearTimeout(settle);
354
- resolve({
355
- ready: greeting.ready,
356
- status: answeredStatusValue,
357
- ...(answeredDevices === undefined ? {} : { devices: answeredDevices }),
358
- ...(greeting.version === undefined ? {} : { version: greeting.version }),
359
- ...(greeting.build === undefined ? {} : { build: greeting.build }),
360
- ...(greeting.restartable === undefined ? {} : { restartable: greeting.restartable }),
361
- });
362
- };
363
- connection.on('data', (chunk) => {
364
- const frames = reader.accept(chunk);
365
- if (!frames) {
366
- connection.destroy();
367
- return;
368
- }
369
- for (const frame of frames) {
241
+ return end('lapsed');
242
+ for (const text of frames) {
243
+ if (done)
244
+ return;
370
245
  let parsed;
371
246
  try {
372
- parsed = JSON.parse(frame);
247
+ parsed = JSON.parse(text);
373
248
  }
374
249
  catch {
375
- fail('runtime channel sent an unreadable frame');
376
- return;
250
+ return end('fault');
377
251
  }
378
- if (!greeting) {
379
- const opened = parsed;
380
- if (opened?.protocol !== RUNTIME_CHANNEL_PROTOCOL || typeof opened.ready !== 'boolean') {
381
- fail('runtime channel speaks another protocol');
382
- return;
383
- }
384
- greeting = opened;
385
- connection.write(`${JSON.stringify({ v: RUNTIME_CHANNEL_PROTOCOL, id: STATUS_REQUEST, path: RUNTIME_STATUS_PATH })}\n` +
386
- `${JSON.stringify({ v: RUNTIME_CHANNEL_PROTOCOL, id: DEVICES_REQUEST, path: RUNTIME_DEVICES_PATH })}\n`);
252
+ if (requested) {
253
+ onResponse(parsed, conclude);
387
254
  continue;
388
255
  }
389
- const response = parsed;
390
- if (response?.id === STATUS_REQUEST) {
391
- if (!response.ok || !isRuntimeChannelStatus(response.data)) {
392
- fail('runtime channel answered no status this client can use');
393
- return;
394
- }
395
- answeredStatusValue = answeredStatus(response.data);
396
- }
397
- else if (response?.id === DEVICES_REQUEST) {
398
- devicesSettled = true;
399
- if (response.ok) {
400
- if (!areRuntimeChannelDevices(response.data)) {
401
- fail('runtime channel answered no observations this client can use');
402
- return;
403
- }
404
- answeredDevices = response.data.map(answeredDevice);
405
- }
406
- }
407
- settleIfComplete();
256
+ const greeting = parsed;
257
+ const written = greeting?.protocol === RUNTIME_CHANNEL_PROTOCOL ? request(greeting) : undefined;
258
+ if (written === undefined)
259
+ return end('fault');
260
+ requested = true;
261
+ connection.write(written);
408
262
  }
409
263
  });
410
264
  });
411
265
  }
412
266
  }
267
+ /** One request frame of this protocol. */
268
+ function frame(id, path, body) {
269
+ return `${JSON.stringify({ v: RUNTIME_CHANNEL_PROTOCOL, id, path, ...(body === undefined ? {} : { body }) })}\n`;
270
+ }
271
+ /** Concludes on the settings request's answer: true where accepted, false where refused. */
272
+ function answered(response, conclude) {
273
+ if (response?.id === SETTINGS_REQUEST)
274
+ conclude(!!response.ok);
275
+ }
413
276
  //# sourceMappingURL=runtime-channel-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-channel-client.js","sourceRoot":"","sources":["../../src/ui/runtime-channel-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-channel-client.js","sourceRoot":"","sources":["../../src/ui/runtime-channel-client.ts"],"names":[],"mappings":"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"}