eufy-security-client 3.8.0 → 4.0.0-dev.30

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.
Files changed (44) hide show
  1. package/README.md +24 -0
  2. package/build/eufysecurity.d.ts +2 -0
  3. package/build/eufysecurity.js +17 -0
  4. package/build/eufysecurity.js.map +1 -1
  5. package/build/http/api.d.ts +2 -0
  6. package/build/http/api.js +39 -6
  7. package/build/http/api.js.map +1 -1
  8. package/build/http/device.d.ts +13 -1
  9. package/build/http/device.js +70 -15
  10. package/build/http/device.js.map +1 -1
  11. package/build/http/interfaces.d.ts +1 -0
  12. package/build/http/models.d.ts +1 -0
  13. package/build/http/station.d.ts +9 -1
  14. package/build/http/station.js +108 -31
  15. package/build/http/station.js.map +1 -1
  16. package/build/http/types.d.ts +4 -0
  17. package/build/http/types.js +218 -7
  18. package/build/http/types.js.map +1 -1
  19. package/build/p2p/adts.d.ts +12 -0
  20. package/build/p2p/adts.js +185 -0
  21. package/build/p2p/adts.js.map +1 -0
  22. package/build/p2p/interfaces.d.ts +10 -0
  23. package/build/p2p/session.d.ts +3 -1
  24. package/build/p2p/session.js +138 -30
  25. package/build/p2p/session.js.map +1 -1
  26. package/build/p2p/types.d.ts +1 -0
  27. package/build/p2p/types.js +1 -0
  28. package/build/p2p/types.js.map +1 -1
  29. package/build/p2p/utils.d.ts +11 -0
  30. package/build/p2p/utils.js +76 -4
  31. package/build/p2p/utils.js.map +1 -1
  32. package/coverage/clover.xml +8665 -8452
  33. package/coverage/coverage-final.json +32 -31
  34. package/coverage/lcov-report/index.html +41 -41
  35. package/coverage/lcov.info +17294 -15644
  36. package/package.json +7 -7
  37. package/.idea/eufy-security-client.iml +0 -12
  38. package/.idea/modules.xml +0 -8
  39. package/.idea/vcs.xml +0 -7
  40. package/bin/act +0 -0
  41. package/coverage/lcov-report/cache.ts.html +0 -184
  42. package/coverage/lcov-report/error.ts.html +0 -871
  43. package/coverage/lcov-report/logging.ts.html +0 -598
  44. package/dont-care.js +0 -101
package/README.md CHANGED
@@ -111,6 +111,30 @@ Instructions aimed at maintainers for deploying a new version: [Deployment](docs
111
111
 
112
112
  ## Changelog
113
113
 
114
+ ### 4.0.0 (2026-05-28)
115
+
116
+ * Fix: Add missing GenericTypeProperty labels for 5 device types by @lenoxys in https://github.com/bropat/eufy-security-client/pull/828
117
+ * Feature: make P2P stream timeouts configurable by @lenoxys in https://github.com/bropat/eufy-security-client/pull/831
118
+ * Fix: add missing rtspStreamUrl property to SoloCam E42 metadata by @lenoxys in https://github.com/bropat/eufy-security-client/pull/832
119
+ * Fix: skip CMD_DOORBELL_SET_PAYLOAD for E340 on MiniBase Chime by @lenoxys in https://github.com/bropat/eufy-security-client/pull/834
120
+ * Fix: E340 talkback @lenoxys in https://github.com/bropat/eufy-security-client/pull/837
121
+ * Feature: Add fully notify when HB notify by @max246 in https://github.com/bropat/eufy-security-client/pull/838
122
+ * Fix: auto-accept invitations by @lenoxys in https://github.com/bropat/eufy-security-client/pull/839
123
+ * Fix: use correct motion detection property for SOLO_CAMERA_E30 (T8171) by @lenoxys in https://github.com/bropat/eufy-security-client/pull/840
124
+ * Feature: add sendHouseInvite method by @mabahamo in https://github.com/bropat/eufy-security-client/pull/845
125
+ * Feature: Add E30 (T8417) P2P livestream support by @ovikiss in https://github.com/bropat/eufy-security-client/pull/847
126
+ * Feature: normalize multi-RDB ADTS frames in P2P audio stream by @lenoxys in https://github.com/bropat/eufy-security-client/pull/852
127
+ * Feature: add NVR S4 Max (T8N00, type 300) support by @lenoxys in https://github.com/bropat/eufy-security-client/pull/854
128
+ * Feature: add PoE Bullet-PTZ Cam S4 (T8E00, type 301) support by @lenoxys in https://github.com/bropat/eufy-security-client/pull/855
129
+ * Fix: register LOCK_85V0 (T85V0) in DeviceProperties and DeviceCommands maps by @lenoxys in https://github.com/bropat/eufy-security-client/pull/858
130
+ * Feature: basic E30 T8417 support by @max246 in https://github.com/bropat/eufy-security-client/pull/865
131
+ * Fix: outer enableDevice for outdoor PT cams through CMD_SET_PAYLOAD by @max246 in https://github.com/bropat/eufy-security-client/pull/873
132
+ * Fix: read enabled state for outdoor PT cams from the wrapped privacy-mode key by @max246 in https://github.com/bropat/eufy-security-client/pull/874
133
+ * Feature: add FamiLock E34 (T85P0, type 209) support by @max246 in https://github.com/bropat/eufy-security-client/pull/876
134
+ * Fix: Restore CMD_STORAGE_INFO_HB3 notify handler removed by #847 merge by @max246 in https://github.com/bropat/eufy-security-client/pull/878
135
+ * Feature: upgrade to node 24 by @max246 in https://github.com/bropat/eufy-security-client/pull/897
136
+
137
+
114
138
  ### 3.8.0 (2026-03-01)
115
139
 
116
140
  * Feature: Add support for Smart Lock E20 (T85V0) by @worldjoe/@max246 in https://github.com/bropat/eufy-security-client/pull/803
@@ -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>;
@@ -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 = [];
@@ -1081,6 +1090,14 @@ class EufySecurity extends tiny_typed_emitter_1.TypedEmitter {
1081
1090
  if (refreshCloud)
1082
1091
  this.refreshCloudData();
1083
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
+ }
1084
1101
  onPushMessage(message) {
1085
1102
  this.emit("push message", message);
1086
1103
  try {