@viguza/homebridge-ezviz 2.0.2 → 2.0.3

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.
@@ -1,6 +1,5 @@
1
1
  import axios from 'axios';
2
- import querystring from 'querystring';
3
- import { EZVIZ_CLIENT_TYPE, EZVIZ_USER_AGENT, API_ENDPOINT_REFRESH, EZVIZ_REQUEST_TIMEOUT_MS } from './ezviz-constants.js';
2
+ import { EZVIZ_CLIENT_TYPE, EZVIZ_USER_AGENT, EZVIZ_REQUEST_TIMEOUT_MS } from './ezviz-constants.js';
4
3
  /**
5
4
  * True for errors worth retrying: no response was received (timeout, DNS, connection
6
5
  * reset, etc.) or the server reported a transient 5xx. A response with a 4xx status is
@@ -46,9 +45,11 @@ export async function withNetworkRetry(fn, retries) {
46
45
  * networkRetries (default 0) retries transient network
47
46
  * errors with backoff before giving up. Leave both unset
48
47
  * for requests on a HomeKit-blocking read path.
48
+ * onUnauthorized is called on a 401 to rotate the session
49
+ * (resolving false if it couldn't) before retrying.
49
50
  */
50
51
  export async function sendRequest(config, hostname, endpoint, method, data, retries = 3, options = {}) {
51
- const { timeoutMs = EZVIZ_REQUEST_TIMEOUT_MS, networkRetries = 0 } = options;
52
+ const { timeoutMs = EZVIZ_REQUEST_TIMEOUT_MS, networkRetries = 0, onUnauthorized } = options;
52
53
  const credentials = config.credentials;
53
54
  const headers = {
54
55
  'User-Agent': EZVIZ_USER_AGENT,
@@ -71,25 +72,10 @@ export async function sendRequest(config, hostname, endpoint, method, data, retr
71
72
  }
72
73
  catch (error) {
73
74
  const axiosError = error;
74
- if (retries > 0 && axiosError.response?.status === 401) {
75
- const query = querystring.stringify({
76
- cuName: credentials.cuName,
77
- featureCode: credentials.featureCode,
78
- refreshSessionId: credentials.rfSessionId,
79
- });
80
- const refreshSession = (await sendRequest(config, config.domain, API_ENDPOINT_REFRESH, 'PUT', query));
81
- const creds = {
82
- sessionId: refreshSession.sessionInfo.sessionId,
83
- rfSessionId: refreshSession.sessionInfo.refreshSessionId,
84
- featureCode: credentials.featureCode,
85
- cuName: credentials.cuName,
86
- };
87
- config.credentials = creds;
88
- return await sendRequest(config, hostname, endpoint, method, data, retries - 1, options);
89
- }
90
- else {
91
- throw error;
75
+ if (retries > 0 && onUnauthorized && axiosError.response?.status === 401 && await onUnauthorized()) {
76
+ return sendRequest(config, hostname, endpoint, method, data, retries - 1, options);
92
77
  }
78
+ throw error;
93
79
  }
94
80
  }
95
81
  //# sourceMappingURL=ezviz-requests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ezviz-requests.js","sourceRoot":"","sources":["../../src/api/ezviz-requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ezviz-requests.js","sourceRoot":"","sources":["../../src/api/ezviz-requests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAGtE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErG;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,UAAU,GAAG,KAAmB,CAAC;IACvC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;IAC3C,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAI,EAAoB,EAAE,OAAe;IAC7E,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,SAAS,CAAC;QACR,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;YACzD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAmB,EACnB,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,IAAa,EACb,OAAO,GAAG,CAAC,EACX,UAAoG,EAAE;IAEtG,MAAM,EAAE,SAAS,GAAG,wBAAwB,EAAE,cAAc,GAAG,CAAC,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC7F,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAEvC,MAAM,OAAO,GAAmB;QAC9B,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,iBAAiB;QAC/B,cAAc,EAAE,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,SAAS;QACvG,WAAW,EAAE,WAAW,CAAC,SAAS;KACnC,CAAC;IAEF,MAAM,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChC,MAAM,GAAG,GAAuB;QAC9B,MAAM;QACN,GAAG;QACH,IAAI;QACJ,OAAO;QACP,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,SAAS;KACnB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,KAAmB,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC,IAAI,cAAc,IAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,MAAM,cAAc,EAAE,EAAE,CAAC;YACnG,OAAO,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -18,6 +18,7 @@ export declare class EZVIZPlatform implements DynamicPlatformPlugin {
18
18
  readonly discoveredCacheUUIDs: string[];
19
19
  private readonly motionSensors;
20
20
  private mqttClient;
21
+ private mqttLifecycle;
21
22
  private ezvizAPI;
22
23
  private readonly alarmSnapshots;
23
24
  constructor(log: Logging, config: EZVIZConfig, api: API);
package/dist/platform.js CHANGED
@@ -21,6 +21,7 @@ export class EZVIZPlatform {
21
21
  discoveredCacheUUIDs = [];
22
22
  motionSensors = new Map();
23
23
  mqttClient = null;
24
+ mqttLifecycle = Promise.resolve();
24
25
  ezvizAPI = null;
25
26
  // Latest alarm snapshot URL per device serial, used as a fast path for HomeKit
26
27
  // snapshot requests shortly after a motion event instead of a live RTSP grab.
@@ -44,22 +45,24 @@ export class EZVIZPlatform {
44
45
  this.ezvizAPI = ezvizAPI;
45
46
  const credentials = await this.authenticateWithRetry(ezvizAPI);
46
47
  if (credentials) {
47
- // Refresh session every 12 hours (uses refresh token, falls back to full re-auth).
48
48
  // The MQTT push subscription is registered against the current sessionId, so it
49
- // must be re-established with the new one or it silently stops receiving pushes
50
- // while the socket itself stays connected.
49
+ // must be re-established after every rotation — the 12h refresh below or a 401
50
+ // mid-request — or it silently stops receiving pushes while the socket stays up.
51
+ ezvizAPI.onSessionRefreshed = () => {
52
+ void this.restartMqtt(ezvizAPI);
53
+ };
54
+ // Refresh session every 12 hours (uses refresh token, falls back to full re-auth).
51
55
  setInterval(async () => {
52
56
  this.log.debug('Refreshing EZVIZ session');
53
57
  try {
54
58
  await ezvizAPI.refreshSession();
55
- await this.restartMqtt(ezvizAPI);
56
59
  }
57
60
  catch (error) {
58
61
  this.log.error('Session refresh failed:', error);
59
62
  }
60
63
  }, 3600000 * 12);
61
64
  await this.discoverDevices(ezvizAPI);
62
- await this.startMqtt(ezvizAPI);
65
+ await this.restartMqtt(ezvizAPI);
63
66
  }
64
67
  else {
65
68
  this.log.error('Could not authenticate with EZVIZ API. Please check your credentials.');
@@ -293,12 +296,16 @@ export class EZVIZPlatform {
293
296
  * since the push subscription is registered against the sessionId active at connect
294
297
  * time — see startMqtt.
295
298
  */
296
- async restartMqtt(ezvizAPI) {
297
- if (this.mqttClient) {
298
- this.mqttClient.stop();
299
- this.mqttClient = null;
300
- }
301
- await this.startMqtt(ezvizAPI);
299
+ restartMqtt(ezvizAPI) {
300
+ // Serialized so overlapping restarts can't each create a client and leak one.
301
+ this.mqttLifecycle = this.mqttLifecycle.then(async () => {
302
+ if (this.mqttClient) {
303
+ this.mqttClient.stop();
304
+ this.mqttClient = null;
305
+ }
306
+ await this.startMqtt(ezvizAPI);
307
+ });
308
+ return this.mqttLifecycle;
302
309
  }
303
310
  async startMqtt(ezvizAPI) {
304
311
  if (this.motionSensors.size === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,10 @@ export interface DeviceData {
9
9
  Serial: string;
10
10
  Name: string;
11
11
  Type: string;
12
- Connection: ConnectionInfo;
12
+ Connection?: ConnectionInfo;
13
13
  Wifi?: WifiInfo;
14
14
  Status: DeviceStatus;
15
- Switches: SwitchItem[];
15
+ Switches?: SwitchItem[];
16
16
  P2P: P2PItem[];
17
17
  ResourceInfo: ResourceInfo;
18
18
  DeviceInfo: DeviceInfo;
@@ -1,9 +1,7 @@
1
1
  import { Logging, StreamRequestCallback } from 'homebridge';
2
2
  import { StreamingDelegate } from './streaming-delegate.js';
3
3
  import { Readable, Writable } from 'stream';
4
- export declare function doesFfmpegSupportCodec(codec: string, ffmpegPath: string): Promise<boolean>;
5
4
  export declare function getCodecsOutput(ffmpegPath: string): Promise<string>;
6
- export declare function getDefaultEncoder(ffmpegPath: string): Promise<string>;
7
5
  export declare function isFfmpegInstalled(ffmpegPath: string): Promise<boolean>;
8
6
  export declare function getSnapshot(url: string, customFfmpeg?: string): Promise<Buffer>;
9
7
  export declare class FfmpegProcess {
@@ -1,29 +1,10 @@
1
1
  import execa from 'execa';
2
2
  import pathToFfmpeg from 'ffmpeg-for-homebridge';
3
- export async function doesFfmpegSupportCodec(codec, ffmpegPath) {
4
- if (!codec) {
5
- return false;
6
- }
7
- if (codec === 'copy') {
8
- return true;
9
- }
10
- const output = await execa(ffmpegPath, ['-codecs']);
11
- return output.stdout.includes(codec);
12
- }
3
+ import { redactCredentials } from './sanitize.js';
13
4
  export async function getCodecsOutput(ffmpegPath) {
14
5
  const output = await execa(ffmpegPath, ['-codecs']);
15
6
  return output.stdout;
16
7
  }
17
- export async function getDefaultEncoder(ffmpegPath) {
18
- const output = await execa(ffmpegPath, ['-codecs']);
19
- const validEncoders = ['h264_omx', 'h264_videotoolbox'];
20
- validEncoders.forEach((encoder) => {
21
- if (output.stdout.includes(encoder)) {
22
- return encoder;
23
- }
24
- });
25
- return 'libx264';
26
- }
27
8
  export async function isFfmpegInstalled(ffmpegPath) {
28
9
  try {
29
10
  await execa(ffmpegPath, ['-codecs']);
@@ -62,7 +43,7 @@ export class FfmpegProcess {
62
43
  let started = false;
63
44
  let startedCallback = false;
64
45
  const controller = delegate.controller;
65
- const cmdOutput = `${title} command: ffmpeg ${command.join(' ')}`;
46
+ const cmdOutput = `${title} command: ffmpeg ${redactCredentials(command.join(' '))}`;
66
47
  if (ffmpegDebugOutput) {
67
48
  log.info(cmdOutput);
68
49
  }
@@ -82,7 +63,10 @@ export class FfmpegProcess {
82
63
  }
83
64
  }, 3000);
84
65
  this.ff.stderr?.on('data', (data) => {
85
- const output = String(data);
66
+ // ffmpeg echoes its input URL (e.g. "Input #0, rtsp, from 'rtsp://user:pass@...'"
67
+ // and in connection errors), and this text feeds both the logs and the error
68
+ // passed to HomeKit's callback.
69
+ const output = redactCredentials(String(data));
86
70
  lastOutput = `${title}: ${output}`;
87
71
  if (ffmpegDebugOutput) {
88
72
  log.info(lastOutput);
@@ -1 +1 @@
1
- {"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAa,EAAE,UAAkB;IAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB;IACtD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACxD,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAChC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,oFAAoF;AACpF,uFAAuF;AACvF,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,YAAqB;IAClE,MAAM,OAAO,GAAG;QACd,8EAA8E;QAC9E,mFAAmF;QACnF,kFAAkF;QAClF,kFAAkF;QAClF,iBAAiB,EAAE,KAAK;QACxB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,GAAG;QACT,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,OAAO;QACb,GAAG;KACJ,CAAC;IACF,MAAM,cAAc,GAAG,YAAY,IAAI,YAAiC,IAAI,QAAQ,CAAC;IACrF,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACpH,OAAO,EAAE,CAAC,MAAM,CAAC;AACnB,CAAC;AAED,MAAM,OAAO,aAAa;IAChB,EAAE,CAA8C;IAChD,WAAW,CAAkB;IAC7B,YAAY,CAAkB;IAEtC,YACE,KAAa,EACb,OAAsB,EACtB,GAAY,EACZ,QAA2C,EAC3C,QAA2B,EAC3B,SAAiB,EACjB,iBAA0B,EAC1B,YAAqB;QAErB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,MAAM,SAAS,GAAG,GAAG,KAAK,oBAAoB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,IAAI,iBAAiB,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,cAAc,GAAG,YAAY,IAAI,YAAiC,IAAI,QAAQ,CAAC;QACrF,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAE/D,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAClC,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC7C,OAAO,GAAG,IAAI,CAAC;oBACf,eAAe,GAAG,IAAI,CAAC;oBACvB,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,kDAAkD,CAAC,CAAC;oBACtE,QAAQ,EAAE,CAAC;gBACb,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,UAAU,GAAG,GAAG,KAAK,KAAK,MAAM,EAAE,CAAC;gBACnC,IAAI,iBAAiB,EAAE,CAAC;oBACtB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACxB,CAAC;gBAED,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBACnG,OAAO,GAAG,IAAI,CAAC;oBACf,IAAI,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;wBACjC,eAAe,GAAG,IAAI,CAAC;wBACvB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;4BACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;4BAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;wBAChC,CAAC;wBACD,QAAQ,EAAE,CAAC;oBACb,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClC,IAAI,iBAAiB,EAAE,CAAC;oBACtB,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBAClC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;gBAC/B,CAAC;gBACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;gBAChC,CAAC;gBAED,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACrB,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;4BACxE,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,uBAAuB,MAAM,EAAE,CAAC,CAAC;wBACrD,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC7C,eAAe,GAAG,IAAI,CAAC;wBACvB,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,gCAAgC,CAAC,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;gBAED,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC/B,UAAU,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtD,IAAI,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;oBACjC,eAAe,GAAG,IAAI,CAAC;oBACvB,QAAQ,CAAC,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAChE,CAAC;gBACD,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC/B,UAAU,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,4BAA4B,GAAG,KAAK,CAAC,CAAC;YACzD,IAAI,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;gBACjC,eAAe,GAAG,IAAI,CAAC;gBACvB,QAAQ,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBACvD,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAExB,sEAAsE;YACtE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kDAAkD;QACpD,CAAC;IACH,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;IACxB,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Logging } from 'homebridge';
2
+ export declare const HKSV_PREBUFFER_LENGTH_MS = 4000;
2
3
  /**
3
4
  * Maintains a rolling few seconds of fragmented-mp4 video remuxed (not re-encoded —
4
5
  * cheap) from the camera's RTSP stream, so an HKSV recording can include the moments
@@ -21,9 +22,12 @@ export declare class HksvPrebuffer {
21
22
  private process;
22
23
  private server;
23
24
  private starting;
25
+ private wanted;
26
+ private restartTimer;
24
27
  constructor(rtspUrl: string, cameraName: string, log: Logging);
25
28
  start(): Promise<void>;
26
29
  stop(): void;
30
+ private resetStream;
27
31
  /**
28
32
  * Returns ffmpeg input args (`-f mp4 -i tcp://...`) yielding the prebuffer's
29
33
  * content followed by a live continuation, for use as the *input* to a
@@ -3,15 +3,25 @@ import { EventEmitter } from 'events';
3
3
  import { createServer } from 'net';
4
4
  import pathToFfmpeg from 'ffmpeg-for-homebridge';
5
5
  import { parseMp4Boxes } from './mp4-parser.js';
6
- const PREBUFFER_DURATION_MS = 4000;
6
+ import { redactCredentials } from './sanitize.js';
7
+ // How much pre-roll HomeKit is told we keep, and how much we actually buffer.
8
+ export const HKSV_PREBUFFER_LENGTH_MS = 4000;
7
9
  // A splice server that nobody ever connects to (e.g. HomeKit gave up before the
8
10
  // recording ffmpeg process reached it) would otherwise listen forever.
9
11
  const SPLICE_SERVER_TIMEOUT_MS = 60_000;
10
- function listenOnEphemeralPort(server) {
12
+ // Long enough not to hammer a camera that's offline, short enough to have pre-roll
13
+ // again well before the next motion event is likely.
14
+ const PREBUFFER_RESTART_DELAY_MS = 10_000;
15
+ /**
16
+ * `onError` stays attached for the server's lifetime: a net.Server 'error' with no
17
+ * listener (e.g. accept() failing with EMFILE) is thrown and would crash Homebridge.
18
+ */
19
+ function listenOnEphemeralPort(server, onError) {
11
20
  return new Promise((resolve, reject) => {
12
21
  server.once('error', reject);
13
22
  server.listen(0, '127.0.0.1', () => {
14
23
  server.removeListener('error', reject);
24
+ server.on('error', onError);
15
25
  const address = server.address();
16
26
  if (address && typeof address === 'object') {
17
27
  resolve(address.port);
@@ -44,12 +54,15 @@ export class HksvPrebuffer {
44
54
  process = null;
45
55
  server = null;
46
56
  starting = null;
57
+ wanted = false;
58
+ restartTimer = null;
47
59
  constructor(rtspUrl, cameraName, log) {
48
60
  this.rtspUrl = rtspUrl;
49
61
  this.cameraName = cameraName;
50
62
  this.log = log;
51
63
  }
52
64
  async start() {
65
+ this.wanted = true;
53
66
  if (this.process) {
54
67
  return;
55
68
  }
@@ -61,8 +74,16 @@ export class HksvPrebuffer {
61
74
  return this.starting;
62
75
  }
63
76
  stop() {
77
+ this.wanted = false;
78
+ if (this.restartTimer) {
79
+ clearTimeout(this.restartTimer);
80
+ this.restartTimer = null;
81
+ }
64
82
  this.process?.kill('SIGKILL');
65
83
  this.process = null;
84
+ this.resetStream();
85
+ }
86
+ resetStream() {
66
87
  this.server?.close();
67
88
  this.server = null;
68
89
  this.boxes = [];
@@ -108,7 +129,9 @@ export class HksvPrebuffer {
108
129
  socket.once('close', cleanup);
109
130
  socket.once('error', cleanup);
110
131
  });
111
- const port = await listenOnEphemeralPort(server);
132
+ const port = await listenOnEphemeralPort(server, (error) => {
133
+ this.log.debug(`HKSV splice server for ${this.cameraName} error: ${error.message}`);
134
+ });
112
135
  setTimeout(() => server.close(), SPLICE_SERVER_TIMEOUT_MS);
113
136
  return ['-f', 'mp4', '-i', `tcp://127.0.0.1:${port}`];
114
137
  }
@@ -119,7 +142,9 @@ export class HksvPrebuffer {
119
142
  this.log.debug(`HKSV prebuffer for ${this.cameraName} ended: ${error.message}`);
120
143
  });
121
144
  });
122
- const port = await listenOnEphemeralPort(server);
145
+ const port = await listenOnEphemeralPort(server, (error) => {
146
+ this.log.debug(`HKSV prebuffer server for ${this.cameraName} error: ${error.message}`);
147
+ });
123
148
  this.server = server;
124
149
  const videoProcessor = pathToFfmpeg || 'ffmpeg';
125
150
  const args = [
@@ -138,12 +163,27 @@ export class HksvPrebuffer {
138
163
  cp.stderr?.resume();
139
164
  cp.on('exit', (code, signal) => {
140
165
  this.log.debug(`HKSV prebuffer ffmpeg for ${this.cameraName} exited (code=${code}, signal=${signal})`);
141
- if (this.process === cp) {
142
- this.process = null;
166
+ if (this.process !== cp) {
167
+ return;
168
+ }
169
+ // Died on its own (RTSP drop, camera reboot) rather than via stop(): drop this
170
+ // instance's init segment so a restarted process's ftyp/moov aren't mistaken for
171
+ // media boxes, and bring it back so later recordings still get pre-roll.
172
+ this.process = null;
173
+ this.resetStream();
174
+ if (this.wanted && !this.restartTimer) {
175
+ this.restartTimer = setTimeout(() => {
176
+ this.restartTimer = null;
177
+ if (this.wanted) {
178
+ this.start().catch((error) => {
179
+ this.log.debug(`HKSV prebuffer restart for ${this.cameraName} failed: ${error.message}`);
180
+ });
181
+ }
182
+ }, PREBUFFER_RESTART_DELAY_MS);
143
183
  }
144
184
  });
145
185
  cp.on('error', (error) => {
146
- this.log.error(`HKSV prebuffer ffmpeg for ${this.cameraName} failed to start:`, error);
186
+ this.log.error(`HKSV prebuffer ffmpeg for ${this.cameraName} failed to start: ${redactCredentials(error.message)}`);
147
187
  });
148
188
  }
149
189
  async consume(socket) {
@@ -157,7 +197,7 @@ export class HksvPrebuffer {
157
197
  }
158
198
  else {
159
199
  this.boxes.push({ box, time: now });
160
- while (this.boxes.length && this.boxes[0].time < now - PREBUFFER_DURATION_MS) {
200
+ while (this.boxes.length && this.boxes[0].time < now - HKSV_PREBUFFER_LENGTH_MS) {
161
201
  this.boxes.shift();
162
202
  }
163
203
  this.events.emit('box', box);
@@ -1 +1 @@
1
- {"version":3,"file":"hksv-prebuffer.js","sourceRoot":"","sources":["../../src/utils/hksv-prebuffer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hksv-prebuffer.js","sourceRoot":"","sources":["../../src/utils/hksv-prebuffer.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ export declare class HksvRecordingDelegate implements CameraRecordingDelegate {
12
12
  private configuration?;
13
13
  private active;
14
14
  private readonly prebuffer;
15
- private process;
15
+ private readonly processes;
16
16
  constructor(rtspUrl: string, cameraName: string, log: Logging, getRecordingAudioActive: () => boolean);
17
17
  updateRecordingActive(active: boolean): void;
18
18
  updateRecordingConfiguration(configuration: CameraRecordingConfiguration | undefined): void;
@@ -1,8 +1,8 @@
1
1
  import { spawn } from 'child_process';
2
2
  import pathToFfmpeg from 'ffmpeg-for-homebridge';
3
3
  import { parseMp4Boxes } from './mp4-parser.js';
4
- import { HksvPrebuffer } from './hksv-prebuffer.js';
5
- const DEFAULT_PREBUFFER_LENGTH_MS = 4000;
4
+ import { HKSV_PREBUFFER_LENGTH_MS, HksvPrebuffer } from './hksv-prebuffer.js';
5
+ import { redactCredentials } from './sanitize.js';
6
6
  function sampleRateHz(rate) {
7
7
  switch (rate) {
8
8
  case 0 /* AudioRecordingSamplerate.KHZ_8 */: return 8000;
@@ -71,7 +71,11 @@ export class HksvRecordingDelegate {
71
71
  configuration;
72
72
  active = false;
73
73
  prebuffer;
74
- process = null;
74
+ // Keyed by streamId: HomeKit can request a new recording stream before the previous
75
+ // one's generator has finished draining, so a single shared field would get
76
+ // overwritten and closeRecordingStream() would end up killing the wrong process,
77
+ // orphaning the old one against the camera's RTSP connection indefinitely.
78
+ processes = new Map();
75
79
  constructor(rtspUrl, cameraName, log, getRecordingAudioActive) {
76
80
  this.rtspUrl = rtspUrl;
77
81
  this.cameraName = cameraName;
@@ -102,16 +106,16 @@ export class HksvRecordingDelegate {
102
106
  }
103
107
  const includeAudio = this.getRecordingAudioActive();
104
108
  const input = this.active
105
- ? await this.prebuffer.getRecordingInput(configuration.prebufferLength ?? DEFAULT_PREBUFFER_LENGTH_MS)
109
+ ? await this.prebuffer.getRecordingInput(configuration.prebufferLength ?? HKSV_PREBUFFER_LENGTH_MS)
106
110
  : ['-rtsp_transport', 'tcp', '-i', this.rtspUrl];
107
111
  const videoProcessor = pathToFfmpeg || 'ffmpeg';
108
112
  const args = buildRecordingArgs(input, configuration, includeAudio);
109
113
  this.log.debug(`HKSV recording stream ${streamId} for ${this.cameraName} starting`);
110
114
  const cp = spawn(videoProcessor, args, { env: process.env });
111
- this.process = cp;
115
+ this.processes.set(streamId, cp);
112
116
  cp.stderr?.resume();
113
117
  cp.on('error', (error) => {
114
- this.log.error(`HKSV recording ffmpeg for ${this.cameraName} failed to start:`, error);
118
+ this.log.error(`HKSV recording ffmpeg for ${this.cameraName} failed to start: ${redactCredentials(error.message)}`);
115
119
  });
116
120
  let pendingInit = [];
117
121
  let sawMoov = false;
@@ -143,6 +147,7 @@ export class HksvRecordingDelegate {
143
147
  this.log.debug(`HKSV recording stream ${streamId} for ${this.cameraName} ended: ${error.message}`);
144
148
  }
145
149
  finally {
150
+ this.processes.delete(streamId);
146
151
  this.stopFfmpeg(cp);
147
152
  }
148
153
  }
@@ -151,21 +156,26 @@ export class HksvRecordingDelegate {
151
156
  }
152
157
  closeRecordingStream(streamId, reason) {
153
158
  this.log.debug(`HKSV recording stream ${streamId} for ${this.cameraName} closed (reason=${reason ?? 'connection closed'})`);
154
- if (this.process) {
155
- this.stopFfmpeg(this.process);
156
- this.process = null;
159
+ const cp = this.processes.get(streamId);
160
+ if (cp) {
161
+ this.processes.delete(streamId);
162
+ this.stopFfmpeg(cp);
157
163
  }
158
164
  }
159
165
  stopFfmpeg(cp) {
160
- if (cp.killed) {
166
+ if (cp.exitCode !== null || cp.signalCode !== null) {
161
167
  return;
162
168
  }
163
169
  cp.kill('SIGTERM');
164
- setTimeout(() => {
165
- if (!cp.killed) {
170
+ // cp.killed only reflects that kill() was called, not that the process actually
171
+ // exited, so it can't be used to decide whether to escalate — track real exit
172
+ // instead, otherwise a process that ignores SIGTERM never gets force-killed.
173
+ const forceKill = setTimeout(() => {
174
+ if (cp.exitCode === null && cp.signalCode === null) {
166
175
  cp.kill('SIGKILL');
167
176
  }
168
177
  }, 2000);
178
+ cp.once('exit', () => clearTimeout(forceKill));
169
179
  }
170
180
  }
171
181
  //# sourceMappingURL=hksv-recording-delegate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hksv-recording-delegate.js","sourceRoot":"","sources":["../../src/utils/hksv-recording-delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hksv-recording-delegate.js","sourceRoot":"","sources":["../../src/utils/hksv-recording-delegate.ts"],"names":[],"mappings":"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"}
@@ -59,8 +59,15 @@ function readExact(readable, length) {
59
59
  export async function* parseMp4Boxes(readable) {
60
60
  while (true) {
61
61
  const header = await readExact(readable, 8);
62
- const length = header.readUInt32BE(0) - 8;
62
+ const size = header.readUInt32BE(0);
63
63
  const type = header.subarray(4).toString('latin1');
64
+ // size 0 ("to end of stream") and 1 (64-bit extended size) aren't supported; any
65
+ // size < 8 would give a negative length, which read() can never satisfy, stalling
66
+ // the parser forever instead of failing.
67
+ if (size < 8) {
68
+ throw new Error(`unsupported MP4 box size ${size} for '${type}'`);
69
+ }
70
+ const length = size - 8;
64
71
  const data = await readExact(readable, length);
65
72
  yield { header, length, type, data };
66
73
  }