homebridge-withings-environment-data 1.1.0 → 1.1.2

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
@@ -6,6 +6,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## [1.1.2] - 2026-07-28
10
+
11
+ ### Added
12
+ - A log entry after every successful full login stating whether a new
13
+ session token was cached, was unchanged, or wasn't issued at all
14
+
15
+ ### Fixed
16
+ - `login()`'s fallback full login now requires actually landing on
17
+ `/new_workflow/exit` to be considered successful (matching
18
+ `resumeSession()`'s existing check), instead of only checking for the
19
+ `confirm_totp` 2FA-trust failure case. Previously, any other silent
20
+ login failure (e.g. rate limiting) was treated as success, only
21
+ surfacing later as a confusing "Invalid Session" error from the
22
+ measure endpoint instead of a clear, correctly-classified
23
+ authentication failure
24
+
25
+ ## [1.1.1] - 2026-07-27
26
+
27
+ ### Fixed
28
+ - Fixed a crash on every poll ("Cannot read properties of undefined
29
+ (reading 'excellentMaxPpm')"): `applyReading()`'s AirQualitySensor
30
+ update was missed when the Air Quality thresholds became configurable
31
+ in v1.1.0 and still called `mapCo2ToAirQuality()` without them
32
+
9
33
  ## [1.1.0] - 2026-07-27
10
34
 
11
35
  ### Added
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Homebridge Withings Environment Data v1.1.0
1
+ # Homebridge Withings Environment Data v1.1.2
2
2
 
3
3
  **This Homebridge plugin has been 100% vibe coded with Claude.**
4
4
 
package/index.js CHANGED
@@ -144,10 +144,16 @@ class WithingsEnvironmentDataPlatform {
144
144
  this.config.trustCookieValue
145
145
  );
146
146
 
147
- if (result.sessionKey && result.sessionKey !== this.sessionKey) {
148
- this.sessionKey = result.sessionKey;
149
- this.saveSessionKey(result.sessionKey);
150
- this.log.info('Withings full login succeeded; cached the new session for future polls.');
147
+ if (result.sessionKey) {
148
+ if (result.sessionKey !== this.sessionKey) {
149
+ this.sessionKey = result.sessionKey;
150
+ this.saveSessionKey(result.sessionKey);
151
+ this.log.info('Withings full login succeeded; cached the new session for future polls.');
152
+ } else {
153
+ this.log.info('Withings full login succeeded; session token unchanged.');
154
+ }
155
+ } else {
156
+ this.log.warn('Withings full login succeeded but no new session token was issued; will retry full login next poll.');
151
157
  }
152
158
 
153
159
  return result;
@@ -351,7 +357,7 @@ class WithingsEnvironmentDataPlatform {
351
357
  );
352
358
  this.airQualityService.updateCharacteristic(
353
359
  this.Characteristic.AirQuality,
354
- mapCo2ToAirQuality(co2, this.Characteristic.AirQuality)
360
+ mapCo2ToAirQuality(co2, this.Characteristic.AirQuality, this.getAirQualityThresholds())
355
361
  );
356
362
  }
357
363
 
package/lib/login.js CHANGED
@@ -169,6 +169,13 @@ async function login(email, password, trustCookieName, trustCookieValue) {
169
169
  );
170
170
  }
171
171
 
172
+ if (!finalUrl.includes('/new_workflow/exit')) {
173
+ throw new Error(
174
+ `Withings login did not complete (landed on ${finalUrl} instead of /new_workflow/exit) — ` +
175
+ 'this can happen if Withings is rate-limiting login attempts, or if the login flow changed.'
176
+ );
177
+ }
178
+
172
179
  return buildResult(jar);
173
180
  }
174
181
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-withings-environment-data",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Homebridge plugin exposing ambient CO2/air-quality and room temperature readings from a Withings WS-50 scale as HomeKit sensors",
5
5
  "main": "index.js",
6
6
  "files": [