homebridge-tsvesync 1.5.0 → 1.5.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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.5.1 (2026-07-25)
4
+
5
+ ### Fixed
6
+ - **Expired Persisted Sessions No Longer Reused**: On startup the plugin now checks the persisted token's expiry (with a 60-second skew) and authenticates fresh when it has already passed, instead of hydrating a token VeSync can only reject. Reusing a dead token skipped the login path entirely and wasted a request to be told it had expired, delaying the first successful device refresh after Homebridge had been offline longer than the token's lifetime.
7
+ - **Stable Client Identity Across Re-Logins**: When discarding an expired session, the plugin keeps that session's terminal and app id and passes them to the library via `restoreClientIdentity()`. VeSync binds tokens to the terminal id, so regenerating it made every login look like a new device and triggered VeSync's "new login to your account" notifications.
8
+ - **Client Identity Persisted And Preserved**: The terminal and app id are now written into the stored session, and the session store keeps existing values when a newer write omits them — so an older library that does not report them cannot wipe the identity.
9
+
10
+ ### Dependencies
11
+ - **tsvesync**: Updated to 1.5.1 for the matching token-refresh retry fix, `restoreClientIdentity()`, and stable terminal identity support.
12
+
13
+ ### Tests
14
+ - **Session Hydration Coverage**: Adds `src/__tests__/session-hydration.test.ts` covering expired-token rejection, valid-token reuse, client-identity adoption and persistence, and store-level identity preservation.
15
+
3
16
  ## 1.5.0 (2026-07-18)
4
17
 
5
18
  ### Added
@@ -72,6 +72,13 @@ export declare class TSVESyncPlatform implements DynamicPlatformPlugin {
72
72
  * Handle token updates from the library
73
73
  */
74
74
  private onTokenChange;
75
+ /**
76
+ * Reuse the client identity from a persisted session whose credentials we are discarding.
77
+ *
78
+ * VeSync binds tokens to the terminal id, so keeping it stable stops every login looking like a new
79
+ * device to VeSync (which is what triggers its "new login to your account" notifications).
80
+ */
81
+ private adoptClientIdentity;
75
82
  /**
76
83
  * Backward-compatible session hydration when using older tsvesync versions
77
84
  */
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5G,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGhF;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aAuC1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,sBAAsB;aAC9B,GAAG,EAAE,GAAG;IAxC1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IAGpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAE3E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6C;IACjF;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAE7D,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IAGjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,gBAAgB,CAAqB;gBAG3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,GAAG;IAgH1B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrC;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,WAAW;IA4EzB;;OAEG;YACW,kBAAkB;IAwBhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAgFzC,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACG,eAAe;IA0LrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;IAsB3B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;CAgB5B"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5G,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGhF;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;aAuC1C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,sBAAsB;aAC9B,GAAG,EAAE,GAAG;IAxC1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IAGpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAE3E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6C;IACjF;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAE7D,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,sBAAsB,CAAc;IAC5C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IAGjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,gBAAgB,CAAqB;gBAG3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,GAAG;IA4H1B;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrC;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;YACW,WAAW;IA8EzB;;OAEG;YACW,kBAAkB;IAwBhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAgFzC,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACG,eAAe;IA0LrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;IAsB3B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;CAgB5B"}
package/dist/platform.js CHANGED
@@ -86,14 +86,25 @@ class TSVESyncPlatform {
86
86
  this.logger.info('Found persisted session for a different account; ignoring persisted session.');
87
87
  }
88
88
  else {
89
- this.hydrateSessionCompat(session);
90
89
  const ts = (0, session_store_1.decodeJwtTimestampsLocal)(session.token);
91
- // Use actual token issuance time if available to avoid overextending lifetime
92
- this.lastTokenRefresh = (ts === null || ts === void 0 ? void 0 : ts.iat) ? new Date(ts.iat * 1000) : new Date();
93
- const expStr = (ts === null || ts === void 0 ? void 0 : ts.exp) ? new Date(ts.exp * 1000).toISOString() : 'unknown';
94
- this.logger.info(`Reusing persisted VeSync session. Token exp: ${expStr}`);
95
- // Schedule a proactive refresh before expiry
96
- this.scheduleProactiveRefreshFromToken(session.token);
90
+ // A token whose exp has already passed can only be rejected by VeSync, so don't hand it to
91
+ // the client: doing so skips the login below and burns a request to be told it expired.
92
+ // Keep the client identity from that session so the fresh login presents the same terminal.
93
+ const expiredBySkewMs = 60 * 1000;
94
+ if ((ts === null || ts === void 0 ? void 0 : ts.exp) && ts.exp * 1000 <= Date.now() + expiredBySkewMs) {
95
+ this.logger.info(`Persisted VeSync session expired ${new Date(ts.exp * 1000).toISOString()}; authenticating again.`);
96
+ this.adoptClientIdentity(session);
97
+ await this.sessionStore.clear();
98
+ }
99
+ else {
100
+ this.hydrateSessionCompat(session);
101
+ // Use actual token issuance time if available to avoid overextending lifetime
102
+ this.lastTokenRefresh = (ts === null || ts === void 0 ? void 0 : ts.iat) ? new Date(ts.iat * 1000) : new Date();
103
+ const expStr = (ts === null || ts === void 0 ? void 0 : ts.exp) ? new Date(ts.exp * 1000).toISOString() : 'unknown';
104
+ this.logger.info(`Reusing persisted VeSync session. Token exp: ${expStr}`);
105
+ // Schedule a proactive refresh before expiry
106
+ this.scheduleProactiveRefreshFromToken(session.token);
107
+ }
97
108
  }
98
109
  }
99
110
  catch (e) {
@@ -228,7 +239,7 @@ class TSVESyncPlatform {
228
239
  * Ensure client is logged in, but avoid unnecessary logins
229
240
  */
230
241
  async ensureLogin(forceLogin = false) {
231
- var _a, _b, _c;
242
+ var _a, _b, _c, _d, _e;
232
243
  // Check if token needs refresh
233
244
  const timeSinceLastRefresh = Date.now() - this.lastTokenRefresh.getTime();
234
245
  if (!forceLogin && timeSinceLastRefresh < this.TOKEN_EXPIRY) {
@@ -269,21 +280,23 @@ class TSVESyncPlatform {
269
280
  accountId,
270
281
  region,
271
282
  apiBaseUrl,
272
- issuedAt: (_a = ts === null || ts === void 0 ? void 0 : ts.iat) !== null && _a !== void 0 ? _a : null,
273
- expiresAt: (_b = ts === null || ts === void 0 ? void 0 : ts.exp) !== null && _b !== void 0 ? _b : null,
283
+ terminalId: (_a = this.client.terminalId) !== null && _a !== void 0 ? _a : undefined,
284
+ appId: (_b = this.client.appId) !== null && _b !== void 0 ? _b : undefined,
285
+ issuedAt: (_c = ts === null || ts === void 0 ? void 0 : ts.iat) !== null && _c !== void 0 ? _c : null,
286
+ expiresAt: (_d = ts === null || ts === void 0 ? void 0 : ts.exp) !== null && _d !== void 0 ? _d : null,
274
287
  lastValidatedAt: Date.now(),
275
288
  username: this.config.username,
276
289
  });
277
290
  }
278
291
  }
279
- catch ( /* ignore */_d) { /* ignore */ }
292
+ catch ( /* ignore */_f) { /* ignore */ }
280
293
  isLoggedIn = true;
281
294
  return true;
282
295
  }
283
296
  catch (error) {
284
297
  // Handle specific errors
285
298
  const errorObj = error;
286
- const errorMsg = ((_c = errorObj === null || errorObj === void 0 ? void 0 : errorObj.error) === null || _c === void 0 ? void 0 : _c.msg) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.msg) || String(error);
299
+ const errorMsg = ((_e = errorObj === null || errorObj === void 0 ? void 0 : errorObj.error) === null || _e === void 0 ? void 0 : _e.msg) || (errorObj === null || errorObj === void 0 ? void 0 : errorObj.msg) || String(error);
287
300
  if (errorMsg.includes('Not logged in')) {
288
301
  this.logger.debug('Session expired, forcing new login');
289
302
  this.loginBackoffTime = Math.min(this.loginBackoffTime, 5000);
@@ -332,6 +345,20 @@ class TSVESyncPlatform {
332
345
  // We should NOT save again here as it creates a race condition and corrupts the file
333
346
  // The username field is added during initial login in onSuccessfulLogin()
334
347
  }
348
+ /**
349
+ * Reuse the client identity from a persisted session whose credentials we are discarding.
350
+ *
351
+ * VeSync binds tokens to the terminal id, so keeping it stable stops every login looking like a new
352
+ * device to VeSync (which is what triggers its "new login to your account" notifications).
353
+ */
354
+ adoptClientIdentity(session) {
355
+ if (!session.terminalId && !session.appId)
356
+ return;
357
+ const client = this.client;
358
+ if (typeof client.restoreClientIdentity === 'function') {
359
+ client.restoreClientIdentity({ terminalId: session.terminalId, appId: session.appId });
360
+ }
361
+ }
335
362
  /**
336
363
  * Backward-compatible session hydration when using older tsvesync versions
337
364
  */
@@ -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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"}
@@ -6,6 +6,8 @@ export interface PluginSession {
6
6
  region: string;
7
7
  apiBaseUrl: string;
8
8
  authFlowUsed?: 'legacy' | 'new';
9
+ terminalId?: string;
10
+ appId?: string;
9
11
  issuedAt?: number | null;
10
12
  expiresAt?: number | null;
11
13
  lastValidatedAt?: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAKG,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA8B;gBAExC,QAAQ,EAAE,MAAM,EAAmB,MAAM,EAAE,YAAY;IAK7D,IAAI,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAsBrC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAa7F"}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAGhC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAKG,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA8B;gBAExC,QAAQ,EAAE,MAAM,EAAmB,MAAM,EAAE,YAAY;IAK7D,IAAI,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAsBrC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAa7F"}
@@ -61,6 +61,9 @@ class FileSessionStore {
61
61
  ...session,
62
62
  // Preserve username from existing session if new session doesn't have it
63
63
  username: session.username || (existingSession === null || existingSession === void 0 ? void 0 : existingSession.username),
64
+ // Never lose the client identity: an older library that doesn't report these must not wipe them.
65
+ terminalId: session.terminalId || (existingSession === null || existingSession === void 0 ? void 0 : existingSession.terminalId),
66
+ appId: session.appId || (existingSession === null || existingSession === void 0 ? void 0 : existingSession.appId),
64
67
  };
65
68
  const tmp = this.file + '.tmp';
66
69
  await fs_1.default.promises.writeFile(tmp, JSON.stringify(mergedSession), { encoding: 'utf8', mode: 0o600 });
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-tsvesync",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Homebridge plugin for VeSync devices including Levoit air purifiers, humidifiers, and Etekcity smart outlets",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -98,7 +98,7 @@
98
98
  "axios": "^1.6.5",
99
99
  "dotenv": "^16.3.1",
100
100
  "js-yaml": "^4.1.0",
101
- "tsvesync": "1.5.0"
101
+ "tsvesync": "1.5.1"
102
102
  },
103
103
  "devDependencies": {
104
104
  "@types/jest": "^29.5.11",
@@ -0,0 +1,196 @@
1
+ jest.mock('../utils/device-factory');
2
+
3
+ import { API, Logger, Service as ServiceType, Characteristic as CharacteristicType } from 'homebridge';
4
+ import { TSVESyncPlatform } from '../platform';
5
+ import { PLATFORM_NAME } from '../settings';
6
+ import { DeviceFactory } from '../utils/device-factory';
7
+ import { PluginSession } from '../utils/session-store';
8
+ import { createMockLogger, createMockVeSync } from './utils/test-helpers';
9
+ import { VeSync } from 'tsvesync';
10
+
11
+ const mockDeviceFactory = jest.mocked(DeviceFactory);
12
+
13
+ const ACCOUNT_USERNAME = 'test@example.com';
14
+ const PERSISTED_TERMINAL_ID = '2aabbccddeeff00112233445566778899';
15
+
16
+ /** Build an unsigned JWT shaped like the ones VeSync issues. */
17
+ const makeToken = (expiresInSeconds: number): string => {
18
+ const b64 = (value: unknown) => Buffer.from(JSON.stringify(value)).toString('base64url');
19
+ const nowSeconds = Math.floor(Date.now() / 1000);
20
+ return [
21
+ b64({ alg: 'HS256', typ: 'JWT' }),
22
+ b64({ iat: nowSeconds - 60, exp: nowSeconds + expiresInSeconds, terminalId: PERSISTED_TERMINAL_ID }),
23
+ 'test-signature',
24
+ ].join('.');
25
+ };
26
+
27
+ const makeSession = (overrides: Partial<PluginSession> = {}): PluginSession => ({
28
+ token: makeToken(30 * 24 * 60 * 60),
29
+ accountId: 'acct-4242',
30
+ region: 'US',
31
+ apiBaseUrl: 'https://smartapi.vesync.com',
32
+ countryCode: 'US',
33
+ terminalId: PERSISTED_TERMINAL_ID,
34
+ appId: 'AppId1234',
35
+ username: ACCOUNT_USERNAME,
36
+ ...overrides,
37
+ });
38
+
39
+ describe('TSVESyncPlatform persisted session handling', () => {
40
+ let platform: TSVESyncPlatform;
41
+ let mockAPI: jest.Mocked<API>;
42
+ let mockLogger: jest.Mocked<Logger>;
43
+ let mockVeSync: jest.Mocked<VeSync>;
44
+ let store: { load: jest.Mock; save: jest.Mock; clear: jest.Mock };
45
+
46
+ /** Run the didFinishLaunching handler the platform registered in its constructor. */
47
+ const runStartup = async (): Promise<void> => {
48
+ const registration = (mockAPI.on.mock.calls as unknown as Array<[string, () => Promise<void>]>)
49
+ .find(([event]) => event === 'didFinishLaunching');
50
+ expect(registration).toBeDefined();
51
+ await (registration![1] as () => Promise<void>)();
52
+ };
53
+
54
+ beforeEach(() => {
55
+ jest.useFakeTimers({ advanceTimers: true });
56
+
57
+ mockLogger = createMockLogger();
58
+ mockVeSync = createMockVeSync();
59
+ // A fresh client has no credentials until it logs in or hydrates a session.
60
+ (mockVeSync as any).token = null;
61
+ (mockVeSync as any).accountId = null;
62
+ (mockVeSync as any).terminalId = PERSISTED_TERMINAL_ID;
63
+ (mockVeSync as any).appId = 'AppId1234';
64
+ (mockVeSync as any).region = 'US';
65
+ (mockVeSync as any).apiBaseUrl = 'https://smartapi.vesync.com';
66
+ (mockVeSync as any).hydrateSession = jest.fn().mockImplementation((session: PluginSession) => {
67
+ (mockVeSync as any).token = session.token;
68
+ (mockVeSync as any).accountId = session.accountId;
69
+ });
70
+ (mockVeSync as any).restoreClientIdentity = jest.fn();
71
+ (mockVeSync as any).login = jest.fn().mockImplementation(async () => {
72
+ (mockVeSync as any).token = makeToken(30 * 24 * 60 * 60);
73
+ (mockVeSync as any).accountId = 'acct-4242';
74
+ return true;
75
+ });
76
+
77
+ mockAPI = {
78
+ version: 2.0,
79
+ serverVersion: '1.0.0',
80
+ user: {
81
+ configPath: jest.fn(),
82
+ storagePath: jest.fn().mockReturnValue('/tmp'),
83
+ persistPath: jest.fn(),
84
+ },
85
+ hapLegacyTypes: {},
86
+ platformAccessory: jest.fn(),
87
+ versionGreaterOrEqual: jest.fn(),
88
+ registerAccessory: jest.fn(),
89
+ registerPlatform: jest.fn(),
90
+ publishCameraAccessories: jest.fn(),
91
+ registerPlatformAccessories: jest.fn(),
92
+ unregisterPlatformAccessories: jest.fn(),
93
+ publishExternalAccessories: jest.fn(),
94
+ updatePlatformAccessories: jest.fn(),
95
+ registerPlatformAccessory: jest.fn(),
96
+ on: jest.fn(),
97
+ emit: jest.fn(),
98
+ hap: {
99
+ Service: {} as unknown as typeof ServiceType,
100
+ Characteristic: {} as unknown as typeof CharacteristicType,
101
+ Categories: { SENSOR: 10 },
102
+ uuid: { generate: jest.fn().mockImplementation((id) => `test-uuid-${id}`) },
103
+ },
104
+ } as unknown as jest.Mocked<API>;
105
+
106
+ mockDeviceFactory.getAccessoryCategory.mockReturnValue(0 as any);
107
+ mockDeviceFactory.isAirPurifier.mockReturnValue(false);
108
+
109
+ platform = new TSVESyncPlatform(
110
+ mockLogger,
111
+ {
112
+ name: 'Test Platform',
113
+ username: ACCOUNT_USERNAME,
114
+ password: 'test-password',
115
+ platform: PLATFORM_NAME,
116
+ } as any,
117
+ mockAPI,
118
+ );
119
+
120
+ (platform as any).client = mockVeSync;
121
+
122
+ store = {
123
+ load: jest.fn().mockResolvedValue(null),
124
+ save: jest.fn().mockResolvedValue(undefined),
125
+ clear: jest.fn().mockResolvedValue(undefined),
126
+ };
127
+ (platform as any).sessionStore = store;
128
+ });
129
+
130
+ afterEach(() => {
131
+ // The startup path arms a device-poll interval and a token-refresh timer.
132
+ const pollInterval = (platform as any).deviceUpdateInterval;
133
+ if (pollInterval) clearInterval(pollInterval);
134
+ const refreshTimer = (platform as any).refreshTimer;
135
+ if (refreshTimer) clearTimeout(refreshTimer);
136
+ jest.clearAllTimers();
137
+ jest.useRealTimers();
138
+ });
139
+
140
+ it('reuses a persisted session that is still valid', async () => {
141
+ store.load.mockResolvedValue(makeSession());
142
+
143
+ await runStartup();
144
+
145
+ expect((mockVeSync as any).hydrateSession).toHaveBeenCalledTimes(1);
146
+ expect(store.clear).not.toHaveBeenCalled();
147
+ expect(mockVeSync.login).not.toHaveBeenCalled();
148
+ expect(mockLogger.info).toHaveBeenCalledWith(expect.stringContaining('Reusing persisted VeSync session'));
149
+ });
150
+
151
+ it('does not reuse a persisted session whose token has already expired', async () => {
152
+ const expired = makeSession({ token: makeToken(-3600) });
153
+ store.load.mockResolvedValue(expired);
154
+
155
+ await runStartup();
156
+
157
+ // Handing an expired token to the client would skip the login below and spend a request being told
158
+ // the token expired — which is what surfaced as "-11001022 the token has expired" on startup.
159
+ expect((mockVeSync as any).hydrateSession).not.toHaveBeenCalled();
160
+ expect(mockVeSync.login).toHaveBeenCalled();
161
+ expect(store.clear).toHaveBeenCalledTimes(1);
162
+ expect(mockLogger.info).toHaveBeenCalledWith(expect.stringContaining('expired'));
163
+ });
164
+
165
+ it('keeps the client identity from an expired session so the fresh login reuses it', async () => {
166
+ store.load.mockResolvedValue(makeSession({ token: makeToken(-3600) }));
167
+
168
+ await runStartup();
169
+
170
+ expect((mockVeSync as any).restoreClientIdentity).toHaveBeenCalledWith({
171
+ terminalId: PERSISTED_TERMINAL_ID,
172
+ appId: 'AppId1234',
173
+ });
174
+ });
175
+
176
+ it('persists the client identity alongside refreshed credentials', async () => {
177
+ store.load.mockResolvedValue(null);
178
+
179
+ await runStartup();
180
+
181
+ expect(mockVeSync.login).toHaveBeenCalled();
182
+ expect(store.save).toHaveBeenCalledWith(
183
+ expect.objectContaining({ terminalId: PERSISTED_TERMINAL_ID, appId: 'AppId1234' }),
184
+ );
185
+ });
186
+
187
+ it('ignores a persisted session belonging to a different account', async () => {
188
+ store.load.mockResolvedValue(makeSession({ username: 'somebody-else@example.com' }));
189
+
190
+ await runStartup();
191
+
192
+ expect((mockVeSync as any).hydrateSession).not.toHaveBeenCalled();
193
+ expect(mockVeSync.login).toHaveBeenCalled();
194
+ expect(mockLogger.info).toHaveBeenCalledWith(expect.stringContaining('different account'));
195
+ });
196
+ });
package/src/platform.ts CHANGED
@@ -6,7 +6,7 @@ import { BaseAccessory } from './accessories/base.accessory';
6
6
  import { PluginLogger } from './utils/logger';
7
7
  import { createRateLimitedVeSync } from './utils/api-proxy';
8
8
  import { PlatformConfig as TSVESyncPlatformConfig } from './types/device.types';
9
- import { FileSessionStore, decodeJwtTimestampsLocal } from './utils/session-store';
9
+ import { FileSessionStore, PluginSession, decodeJwtTimestampsLocal } from './utils/session-store';
10
10
 
11
11
  /**
12
12
  * HomebridgePlatform
@@ -119,14 +119,26 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
119
119
  if ((session as any).username && (session as any).username !== this.config.username) {
120
120
  this.logger.info('Found persisted session for a different account; ignoring persisted session.');
121
121
  } else {
122
- this.hydrateSessionCompat(session);
123
122
  const ts = decodeJwtTimestampsLocal(session.token);
124
- // Use actual token issuance time if available to avoid overextending lifetime
125
- this.lastTokenRefresh = ts?.iat ? new Date(ts.iat * 1000) : new Date();
126
- const expStr = ts?.exp ? new Date(ts.exp * 1000).toISOString() : 'unknown';
127
- this.logger.info(`Reusing persisted VeSync session. Token exp: ${expStr}`);
128
- // Schedule a proactive refresh before expiry
129
- this.scheduleProactiveRefreshFromToken(session.token);
123
+ // A token whose exp has already passed can only be rejected by VeSync, so don't hand it to
124
+ // the client: doing so skips the login below and burns a request to be told it expired.
125
+ // Keep the client identity from that session so the fresh login presents the same terminal.
126
+ const expiredBySkewMs = 60 * 1000;
127
+ if (ts?.exp && ts.exp * 1000 <= Date.now() + expiredBySkewMs) {
128
+ this.logger.info(
129
+ `Persisted VeSync session expired ${new Date(ts.exp * 1000).toISOString()}; authenticating again.`,
130
+ );
131
+ this.adoptClientIdentity(session);
132
+ await this.sessionStore.clear();
133
+ } else {
134
+ this.hydrateSessionCompat(session);
135
+ // Use actual token issuance time if available to avoid overextending lifetime
136
+ this.lastTokenRefresh = ts?.iat ? new Date(ts.iat * 1000) : new Date();
137
+ const expStr = ts?.exp ? new Date(ts.exp * 1000).toISOString() : 'unknown';
138
+ this.logger.info(`Reusing persisted VeSync session. Token exp: ${expStr}`);
139
+ // Schedule a proactive refresh before expiry
140
+ this.scheduleProactiveRefreshFromToken(session.token);
141
+ }
130
142
  }
131
143
  } catch (e: any) {
132
144
  this.logger.debug(`Failed to hydrate persisted session, will login fresh: ${e?.message || e}`);
@@ -315,6 +327,8 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
315
327
  accountId,
316
328
  region,
317
329
  apiBaseUrl,
330
+ terminalId: (this.client as any).terminalId ?? undefined,
331
+ appId: (this.client as any).appId ?? undefined,
318
332
  issuedAt: ts?.iat ?? null,
319
333
  expiresAt: ts?.exp ?? null,
320
334
  lastValidatedAt: Date.now(),
@@ -383,10 +397,24 @@ export class TSVESyncPlatform implements DynamicPlatformPlugin {
383
397
  // The username field is added during initial login in onSuccessfulLogin()
384
398
  }
385
399
 
400
+ /**
401
+ * Reuse the client identity from a persisted session whose credentials we are discarding.
402
+ *
403
+ * VeSync binds tokens to the terminal id, so keeping it stable stops every login looking like a new
404
+ * device to VeSync (which is what triggers its "new login to your account" notifications).
405
+ */
406
+ private adoptClientIdentity(session: PluginSession) {
407
+ if (!session.terminalId && !session.appId) return;
408
+ const client: any = this.client as any;
409
+ if (typeof client.restoreClientIdentity === 'function') {
410
+ client.restoreClientIdentity({ terminalId: session.terminalId, appId: session.appId });
411
+ }
412
+ }
413
+
386
414
  /**
387
415
  * Backward-compatible session hydration when using older tsvesync versions
388
416
  */
389
- private hydrateSessionCompat(session: { token: string; accountId: string; countryCode?: string | null; apiBaseUrl?: string; region?: string }) {
417
+ private hydrateSessionCompat(session: { token: string; accountId: string; countryCode?: string | null; apiBaseUrl?: string; region?: string; terminalId?: string; appId?: string }) {
390
418
  const client: any = this.client as any;
391
419
  if (typeof client.hydrateSession === 'function') {
392
420
  client.hydrateSession(session);
@@ -9,6 +9,10 @@ export interface PluginSession {
9
9
  region: string;
10
10
  apiBaseUrl: string;
11
11
  authFlowUsed?: 'legacy' | 'new';
12
+ // Stable client identity. VeSync binds issued tokens to the terminal id (it appears as a claim in the
13
+ // token JWT), so it is reused across logins and restarts rather than regenerated.
14
+ terminalId?: string;
15
+ appId?: string;
12
16
  issuedAt?: number | null;
13
17
  expiresAt?: number | null;
14
18
  lastValidatedAt?: number | null;
@@ -74,6 +78,9 @@ export class FileSessionStore {
74
78
  ...session,
75
79
  // Preserve username from existing session if new session doesn't have it
76
80
  username: session.username || existingSession?.username,
81
+ // Never lose the client identity: an older library that doesn't report these must not wipe them.
82
+ terminalId: session.terminalId || existingSession?.terminalId,
83
+ appId: session.appId || existingSession?.appId,
77
84
  };
78
85
 
79
86
  const tmp = this.file + '.tmp';