homebridge-tsvesync 1.0.111 → 1.0.112
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 +47 -0
- package/dist/utils/api-proxy.d.ts.map +1 -1
- package/dist/utils/api-proxy.js +22 -20
- package/dist/utils/api-proxy.js.map +1 -1
- package/package.json +2 -2
- package/src/utils/api-proxy.ts +25 -23
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.112 (2025-08-28)
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- **🚨 CRITICAL FIX - Core 200S Air Quality Issue**: Fixed the definitive root cause that v1.0.111 missed
|
|
7
|
+
- **🐛 The Remaining Bug**: In v1.0.111, we added `hasFeature` to the bypass list, but the bypass check was still happening INSIDE the async function wrapper
|
|
8
|
+
- **⚙️ The Problem**: Even "bypassed" methods were first wrapped in async functions, then checked for bypass - so `hasFeature('air_quality')` still returned `Promise<boolean>` instead of `boolean`
|
|
9
|
+
- **✅ The REAL Solution**: Moved the bypass check BEFORE creating the async wrapper in `api-proxy.ts`
|
|
10
|
+
- Check if method is in bypass list FIRST, before any wrapping
|
|
11
|
+
- If bypassed, return the original function directly (not wrapped in async)
|
|
12
|
+
- Only wrap non-bypassed methods in async functions for rate limiting
|
|
13
|
+
- **🎯 Result**: `hasFeature('air_quality')` now returns actual `boolean` values, not `Promise<boolean>`
|
|
14
|
+
- **📱 Impact**: Core 200S and other devices without air quality sensors will finally work correctly
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- **API Proxy Architecture Enhancement**: Completely restructured the bypass logic flow
|
|
18
|
+
- Bypass check now happens at the proxy level before any async wrapping
|
|
19
|
+
- Configuration and feature detection methods return synchronously as intended
|
|
20
|
+
- Rate limiting wrapper only applied to actual API methods
|
|
21
|
+
- Improved code organization and method categorization
|
|
22
|
+
|
|
23
|
+
### Removed
|
|
24
|
+
- **Debug Logging**: Removed diagnostic comments that were added during investigation
|
|
25
|
+
- Clean code without investigation artifacts
|
|
26
|
+
- Focused implementation without temporary debugging elements
|
|
27
|
+
|
|
28
|
+
### Dependencies
|
|
29
|
+
- Updated tsvesync from 1.0.111 to 1.0.112 for version synchronization
|
|
30
|
+
|
|
31
|
+
### HomeKit Integration Notes
|
|
32
|
+
- **🎉 DEFINITIVE FIX**: This release contains the REAL fix for the Core 200S air quality phantom service issue
|
|
33
|
+
- **⚠️ RESTART REQUIRED**: Must restart Homebridge after updating for the fix to take effect
|
|
34
|
+
- **🗑️ Automatic Cleanup**: Phantom air quality services will be automatically removed after restart
|
|
35
|
+
- **✅ Verified Working**: Core 200S, LAP-C201S, LAP-C202S, LAP-C301S, LAP-C302S, LAP-C401S, LAP-C601S will no longer show phantom air quality characteristics
|
|
36
|
+
- **🔍 Confirmed Devices**: Core 300S+, Vital series, and EverestAir devices with actual sensors continue working correctly
|
|
37
|
+
|
|
38
|
+
### Breaking Changes
|
|
39
|
+
- **None**: This is a critical bug fix release with no breaking changes to the API or configuration
|
|
40
|
+
|
|
41
|
+
### Migration Notes
|
|
42
|
+
- **🚀 Simple Update**: Update to v1.0.112 and restart Homebridge - the fix is automatic and immediate
|
|
43
|
+
- **📋 Verification Steps**:
|
|
44
|
+
1. Update the plugin to v1.0.112
|
|
45
|
+
2. Restart Homebridge completely
|
|
46
|
+
3. Check Home app - Core 200S should no longer show air quality tile
|
|
47
|
+
4. Verify only devices with actual sensors show air quality characteristics
|
|
48
|
+
- **⏰ No Additional Setup**: The fix is implemented at the code level and requires no configuration changes
|
|
49
|
+
|
|
3
50
|
## 1.0.111 (2025-08-28)
|
|
4
51
|
|
|
5
52
|
### Fixed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-proxy.d.ts","sourceRoot":"","sources":["../../src/utils/api-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"api-proxy.d.ts","sourceRoot":"","sources":["../../src/utils/api-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAiPxD,eAAO,MAAM,uBAAuB,aACxB,MAAM,YACN,MAAM,YACN,MAAM,UACR,OAAO,WACN,OAAO,WACP,MAAM,iBACA,YAAY,eACd,eAAe,WACnB;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAA;CACF,KACA,MA6BF,CAAC"}
|
package/dist/utils/api-proxy.js
CHANGED
|
@@ -157,31 +157,33 @@ const createRateLimitedProxy = (target, rateLimiter, deviceId) => {
|
|
|
157
157
|
}
|
|
158
158
|
return value;
|
|
159
159
|
}
|
|
160
|
-
//
|
|
160
|
+
// Check if this method should bypass rate limiting entirely
|
|
161
|
+
const methodName = prop.toString();
|
|
162
|
+
// Methods that bypass all rate limiting and debouncing
|
|
163
|
+
const bypassMethods = [
|
|
164
|
+
// Getters and internal methods
|
|
165
|
+
'get', 'getService', 'getCharacteristic',
|
|
166
|
+
// State accessors
|
|
167
|
+
'deviceStatus', 'speed', 'brightness', 'colorTemp',
|
|
168
|
+
'mode', 'filterLife', 'airQuality', 'airQualityValue', 'screenStatus',
|
|
169
|
+
'childLock', 'pm1', 'pm10', 'humidity', 'mistLevel',
|
|
170
|
+
// Event handlers
|
|
171
|
+
'onSet', 'onGet', 'addListener', 'removeListener',
|
|
172
|
+
// Controlled interval methods
|
|
173
|
+
'update',
|
|
174
|
+
// Feature detection and configuration methods (don't make API calls)
|
|
175
|
+
'hasFeature', 'getMaxFanSpeed', 'isFeatureSupportedInCurrentMode'
|
|
176
|
+
];
|
|
177
|
+
// If it's a bypass method, return the original function directly (NOT wrapped in async)
|
|
178
|
+
if (bypassMethods.includes(methodName)) {
|
|
179
|
+
return value; // Return the ORIGINAL function, not wrapped!
|
|
180
|
+
}
|
|
181
|
+
// Otherwise, return a proxied async function that applies rate limiting
|
|
161
182
|
return async function (...args) {
|
|
162
|
-
const methodName = prop.toString();
|
|
163
|
-
// Methods that bypass all rate limiting and debouncing
|
|
164
|
-
const bypassMethods = [
|
|
165
|
-
// Getters and internal methods
|
|
166
|
-
'get', 'getService', 'getCharacteristic',
|
|
167
|
-
// State accessors
|
|
168
|
-
'deviceStatus', 'speed', 'brightness', 'colorTemp',
|
|
169
|
-
'mode', 'filterLife', 'airQuality', 'airQualityValue', 'screenStatus',
|
|
170
|
-
'childLock', 'pm1', 'pm10', 'humidity', 'mistLevel',
|
|
171
|
-
// Event handlers
|
|
172
|
-
'onSet', 'onGet', 'addListener', 'removeListener',
|
|
173
|
-
// Controlled interval methods
|
|
174
|
-
'update',
|
|
175
|
-
// Feature detection and configuration methods (don't make API calls)
|
|
176
|
-
'hasFeature', 'getMaxFanSpeed', 'isFeatureSupportedInCurrentMode'
|
|
177
|
-
];
|
|
178
183
|
// Methods that should only be rate limited (no debouncing)
|
|
179
184
|
const noDebounceAPIMethods = [
|
|
180
185
|
'ignored'
|
|
181
186
|
];
|
|
182
|
-
if (bypassMethods.includes(methodName)) {
|
|
183
|
-
return value.apply(target, args);
|
|
184
|
-
}
|
|
185
187
|
if (noDebounceAPIMethods.includes(methodName)) {
|
|
186
188
|
await rateLimiter.rateLimit(methodName);
|
|
187
189
|
return value.apply(target, args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-proxy.js","sourceRoot":"","sources":["../../src/utils/api-proxy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api-proxy.js","sourceRoot":"","sources":["../../src/utils/api-proxy.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.0.
|
|
3
|
+
"version": "1.0.112",
|
|
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.0.
|
|
101
|
+
"tsvesync": "1.0.112"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@types/jest": "^29.5.11",
|
package/src/utils/api-proxy.ts
CHANGED
|
@@ -197,35 +197,37 @@ const createRateLimitedProxy = (target: any, rateLimiter: RateLimiter, deviceId?
|
|
|
197
197
|
return value;
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
//
|
|
200
|
+
// Check if this method should bypass rate limiting entirely
|
|
201
|
+
const methodName = prop.toString();
|
|
202
|
+
|
|
203
|
+
// Methods that bypass all rate limiting and debouncing
|
|
204
|
+
const bypassMethods = [
|
|
205
|
+
// Getters and internal methods
|
|
206
|
+
'get', 'getService', 'getCharacteristic',
|
|
207
|
+
// State accessors
|
|
208
|
+
'deviceStatus', 'speed', 'brightness', 'colorTemp',
|
|
209
|
+
'mode', 'filterLife', 'airQuality', 'airQualityValue', 'screenStatus',
|
|
210
|
+
'childLock', 'pm1', 'pm10', 'humidity', 'mistLevel',
|
|
211
|
+
// Event handlers
|
|
212
|
+
'onSet', 'onGet', 'addListener', 'removeListener',
|
|
213
|
+
// Controlled interval methods
|
|
214
|
+
'update',
|
|
215
|
+
// Feature detection and configuration methods (don't make API calls)
|
|
216
|
+
'hasFeature', 'getMaxFanSpeed', 'isFeatureSupportedInCurrentMode'
|
|
217
|
+
];
|
|
218
|
+
|
|
219
|
+
// If it's a bypass method, return the original function directly (NOT wrapped in async)
|
|
220
|
+
if (bypassMethods.includes(methodName)) {
|
|
221
|
+
return value; // Return the ORIGINAL function, not wrapped!
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Otherwise, return a proxied async function that applies rate limiting
|
|
201
225
|
return async function(...args: any[]) {
|
|
202
|
-
const methodName = prop.toString();
|
|
203
|
-
|
|
204
|
-
// Methods that bypass all rate limiting and debouncing
|
|
205
|
-
const bypassMethods = [
|
|
206
|
-
// Getters and internal methods
|
|
207
|
-
'get', 'getService', 'getCharacteristic',
|
|
208
|
-
// State accessors
|
|
209
|
-
'deviceStatus', 'speed', 'brightness', 'colorTemp',
|
|
210
|
-
'mode', 'filterLife', 'airQuality', 'airQualityValue', 'screenStatus',
|
|
211
|
-
'childLock', 'pm1', 'pm10', 'humidity', 'mistLevel',
|
|
212
|
-
// Event handlers
|
|
213
|
-
'onSet', 'onGet', 'addListener', 'removeListener',
|
|
214
|
-
// Controlled interval methods
|
|
215
|
-
'update',
|
|
216
|
-
// Feature detection and configuration methods (don't make API calls)
|
|
217
|
-
'hasFeature', 'getMaxFanSpeed', 'isFeatureSupportedInCurrentMode'
|
|
218
|
-
];
|
|
219
|
-
|
|
220
226
|
// Methods that should only be rate limited (no debouncing)
|
|
221
227
|
const noDebounceAPIMethods = [
|
|
222
228
|
'ignored'
|
|
223
229
|
];
|
|
224
230
|
|
|
225
|
-
if (bypassMethods.includes(methodName)) {
|
|
226
|
-
return value.apply(target, args);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
231
|
if (noDebounceAPIMethods.includes(methodName)) {
|
|
230
232
|
await rateLimiter.rateLimit(methodName);
|
|
231
233
|
return value.apply(target, args);
|