@homebridge-eufy-security/eufy-security-client 3.7.2-dev.5 → 3.8.0-dev.7
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/README.md +27 -0
- package/build/eufysecurity.d.ts +2 -0
- package/build/eufysecurity.js +27 -0
- package/build/eufysecurity.js.map +1 -1
- package/build/http/api.d.ts +2 -0
- package/build/http/api.js +39 -6
- package/build/http/api.js.map +1 -1
- package/build/http/device.d.ts +5 -0
- package/build/http/device.js +35 -1
- package/build/http/device.js.map +1 -1
- package/build/http/interfaces.d.ts +1 -0
- package/build/http/station.d.ts +1 -0
- package/build/http/station.js +7 -3
- package/build/http/station.js.map +1 -1
- package/build/http/types.d.ts +4 -0
- package/build/http/types.js +217 -1
- package/build/http/types.js.map +1 -1
- package/build/p2p/interfaces.d.ts +1 -0
- package/build/p2p/session.js +20 -2
- package/build/p2p/session.js.map +1 -1
- package/build/p2p/types.d.ts +1 -0
- package/build/p2p/types.js +1 -0
- package/build/p2p/types.js.map +1 -1
- package/build/p2p/utils.js +1 -0
- package/build/p2p/utils.js.map +1 -1
- package/build/push/service.js +1 -1
- package/build/push/service.js.map +1 -1
- package/coverage/clover.xml +10075 -10031
- package/coverage/coverage-final.json +26 -26
- package/coverage/lcov-report/index.html +59 -59
- package/coverage/lcov.info +16860 -16762
- package/package.json +5 -1
- package/scripts/cut_release.sh +2 -0
- package/scripts/generate_changelog.sh +93 -0
package/README.md
CHANGED
|
@@ -23,6 +23,12 @@ The development of this shared library was inspired by the work of the following
|
|
|
23
23
|
|
|
24
24
|
Credits go to them as well.
|
|
25
25
|
|
|
26
|
+
## Unknown device?
|
|
27
|
+
|
|
28
|
+
If you see a `New unknown device detected` warning in your logs, your device is not yet supported. You can help us add support for it by [reporting it](https://github.com/bropat/eufy-security-client/issues/new?template=unknown_device.yml). See the [guide](docs/reporting_unknown_devices.md) for details on how to extract the log.
|
|
29
|
+
|
|
30
|
+
## Support
|
|
31
|
+
|
|
26
32
|
If you appreciate my work and progress and want to support me, you can do it here:
|
|
27
33
|
|
|
28
34
|
[](https://ko-fi.com/E1E332Q6Z)
|
|
@@ -105,6 +111,27 @@ Instructions aimed at maintainers for deploying a new version: [Deployment](docs
|
|
|
105
111
|
|
|
106
112
|
## Changelog
|
|
107
113
|
|
|
114
|
+
### 3.8.0 (2026-03-01)
|
|
115
|
+
|
|
116
|
+
* Feature: Add support for Smart Lock E20 (T85V0) by @worldjoe/@max246 in https://github.com/bropat/eufy-security-client/pull/803
|
|
117
|
+
* Feature: Add support for Smart Lock C33 (T85L0) by @max246 in https://github.com/bropat/eufy-security-client/pull/804
|
|
118
|
+
* Feature: Add support for locks C30 & E330 by @max246 in https://github.com/bropat/eufy-security-client/pull/806
|
|
119
|
+
* Feature: Add support for Camera S40 (T8172) by @lenoxys in https://github.com/bropat/eufy-security-client/pull/807
|
|
120
|
+
* Feature: Add support for Motion Sensor E20 (T90M0) and Sirene E20 (T90R0) by @max246 in https://github.com/bropat/eufy-security-client/pull/808
|
|
121
|
+
* Feature: Add support for SoloCam E42 (T8173) by @lenoxys in https://github.com/bropat/eufy-security-client/pull/809
|
|
122
|
+
* Feature: Add support for 4G LTE Cam S330 (T86P2) by @lenoxys in https://github.com/bropat/eufy-security-client/pull/821
|
|
123
|
+
* Feature: Add support for C220 V3 by @max246 in https://github.com/bropat/eufy-security-client/pull/823
|
|
124
|
+
* Feature: Add debug message for new device and reporting guide by @max246 in https://github.com/bropat/eufy-security-client/pull/825
|
|
125
|
+
* Fix: Fix T8214 and T8425 livestream by @lenoxys in https://github.com/bropat/eufy-security-client/pull/793
|
|
126
|
+
* Fix: C210 preset support by @tomc128 in https://github.com/bropat/eufy-security-client/pull/811
|
|
127
|
+
* Fix: Mock timezone in getTimezoneGMTString test by @nick-pape in https://github.com/bropat/eufy-security-client/pull/814
|
|
128
|
+
* Fix: Restore missing CAMERA_S4 (T8172) StationProperties and StationCommands entries by @lenoxys in https://github.com/bropat/eufy-security-client/pull/819
|
|
129
|
+
* Fix: Fix start date by @max246 in https://github.com/bropat/eufy-security-client/pull/816
|
|
130
|
+
* Chore: Upgrade qs from 6.14.2 to 6.15.0 by @max246 in https://github.com/bropat/eufy-security-client/pull/802
|
|
131
|
+
* Chore: Upgrade date-and-time from 4.2.0 to 4.3.0 by @max246 in https://github.com/bropat/eufy-security-client/pull/815
|
|
132
|
+
* Chore: Add dev publish and enforce target branch workflows by @lenoxys in https://github.com/bropat/eufy-security-client/pull/818
|
|
133
|
+
* Chore: Add more testing and format check task by @max246 in https://github.com/bropat/eufy-security-client/pull/822
|
|
134
|
+
|
|
108
135
|
### 3.7.2 (2026-02-16)
|
|
109
136
|
* Fix: Revert due to failure to communicate with HB3 https://github.com/bropat/eufy-security-client/pull/790
|
|
110
137
|
* Fix: 2FA login by @lenoxys in https://github.com/bropat/eufy-security-client/pull/789
|
package/build/eufysecurity.d.ts
CHANGED
|
@@ -61,6 +61,7 @@ export declare class EufySecurity extends TypedEmitter<EufySecurityEvents> {
|
|
|
61
61
|
private handleHubs;
|
|
62
62
|
private refreshP2PData;
|
|
63
63
|
private onStationConnect;
|
|
64
|
+
private onHubNotifyUpdate;
|
|
64
65
|
private onStationConnectionError;
|
|
65
66
|
private onStationClose;
|
|
66
67
|
private handleDevices;
|
|
@@ -86,6 +87,7 @@ export declare class EufySecurity extends TypedEmitter<EufySecurityEvents> {
|
|
|
86
87
|
isMQTTConnected(): boolean;
|
|
87
88
|
isConnected(): boolean;
|
|
88
89
|
private processInvitations;
|
|
90
|
+
sendHouseInvite(houseID: string, email: string): Promise<boolean>;
|
|
89
91
|
private onPushMessage;
|
|
90
92
|
startStationDownload(deviceSN: string, path: string, cipherID: number): Promise<void>;
|
|
91
93
|
cancelStationDownload(deviceSN: string): Promise<void>;
|
package/build/eufysecurity.js
CHANGED
|
@@ -40,6 +40,7 @@ exports.EufySecurity = void 0;
|
|
|
40
40
|
const tiny_typed_emitter_1 = require("tiny-typed-emitter");
|
|
41
41
|
const fs_1 = require("fs");
|
|
42
42
|
const path = __importStar(require("path"));
|
|
43
|
+
const util = __importStar(require("util"));
|
|
43
44
|
const events_1 = __importDefault(require("events"));
|
|
44
45
|
const api_1 = require("./http/api");
|
|
45
46
|
const station_1 = require("./http/station");
|
|
@@ -558,6 +559,7 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
558
559
|
station.on("sensor status", (station, channel, status) => this.onStationSensorStatus(station, channel, status));
|
|
559
560
|
station.on("garage door status", (station, channel, doorId, status) => this.onStationGarageDoorStatus(station, channel, doorId, status));
|
|
560
561
|
station.on("storage info hb3", (station, channel, storageInfo) => this.onStorageInfoHb3(station, channel, storageInfo));
|
|
562
|
+
station.on("hub notify update", (station) => this.onHubNotifyUpdate(station));
|
|
561
563
|
this.addStation(station);
|
|
562
564
|
station.initialize();
|
|
563
565
|
}
|
|
@@ -617,6 +619,12 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
617
619
|
this.refreshP2PData(station);
|
|
618
620
|
}, this.P2P_REFRESH_INTERVAL_MIN * 60 * 1000);
|
|
619
621
|
}
|
|
622
|
+
onHubNotifyUpdate(station) {
|
|
623
|
+
logging_1.rootMainLogger.info("Hub notify update received, refreshing cloud data", {
|
|
624
|
+
stationSN: station.getSerial(),
|
|
625
|
+
});
|
|
626
|
+
this.refreshCloudData();
|
|
627
|
+
}
|
|
620
628
|
onStationConnectionError(station, error) {
|
|
621
629
|
this.emit("station connection error", station, error);
|
|
622
630
|
}
|
|
@@ -638,6 +646,7 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
638
646
|
}
|
|
639
647
|
handleDevices(devices) {
|
|
640
648
|
logging_1.rootMainLogger.debug("Got devices", { devices: devices });
|
|
649
|
+
logging_1.rootMainLogger.debug("Got devices - extended logging", { devices: util.inspect(devices, { depth: null }) });
|
|
641
650
|
const deviceSNs = Object.keys(this.devices);
|
|
642
651
|
const newDeviceSNs = Object.keys(devices);
|
|
643
652
|
const promises = [];
|
|
@@ -702,6 +711,16 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
702
711
|
new_device = device_1.LockKeypad.getInstance(this.api, device, deviceConfig);
|
|
703
712
|
}
|
|
704
713
|
else {
|
|
714
|
+
logging_1.rootMainLogger.warn(`New unknown device detected`, {
|
|
715
|
+
device_type: device.device_type,
|
|
716
|
+
device_sn: device.device_sn,
|
|
717
|
+
device_name: device.device_name,
|
|
718
|
+
device_model: device.device_model,
|
|
719
|
+
station_sn: device.station_sn,
|
|
720
|
+
main_sw_version: device.main_sw_version,
|
|
721
|
+
main_hw_version: device.main_hw_version,
|
|
722
|
+
params: device.params,
|
|
723
|
+
});
|
|
705
724
|
new_device = device_1.UnknownDevice.getInstance(this.api, device, deviceConfig);
|
|
706
725
|
}
|
|
707
726
|
promises.push(new_device.then((device) => {
|
|
@@ -1071,6 +1090,14 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
1071
1090
|
if (refreshCloud)
|
|
1072
1091
|
this.refreshCloudData();
|
|
1073
1092
|
}
|
|
1093
|
+
async sendHouseInvite(houseID, email) {
|
|
1094
|
+
const result = await this.api.sendHouseInvite(houseID, email).catch((err) => {
|
|
1095
|
+
const error = (0, error_1.ensureError)(err);
|
|
1096
|
+
logging_1.rootMainLogger.error("Error sending house invite", { error: (0, utils_1.getError)(error), houseID, email });
|
|
1097
|
+
return false;
|
|
1098
|
+
});
|
|
1099
|
+
return result;
|
|
1100
|
+
}
|
|
1074
1101
|
onPushMessage(message) {
|
|
1075
1102
|
this.emit("push message", message);
|
|
1076
1103
|
try {
|