homebridge-eufy-security 4.3.3 → 4.3.4
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/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/homebridge-ui/server.js +376 -367
- package/homebridge-ui/server.js.map +1 -1
- package/package.json +2 -2
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "4.3.
|
|
1
|
+
export declare const LIB_VERSION = "4.3.4";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/homebridge-ui/server.js
CHANGED
|
@@ -37,7 +37,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
const eufy_security_client_1 = require("eufy-security-client");
|
|
40
|
-
const plugin_ui_utils_1 = require("@homebridge/plugin-ui-utils");
|
|
41
40
|
const fs = __importStar(require("fs"));
|
|
42
41
|
const tslog_1 = require("tslog");
|
|
43
42
|
const rotating_file_stream_1 = require("rotating-file-stream");
|
|
@@ -45,411 +44,421 @@ const zip_lib_1 = require("zip-lib");
|
|
|
45
44
|
const types_1 = require("./configui/app/util/types");
|
|
46
45
|
const package_json_1 = require("../package.json");
|
|
47
46
|
const path_1 = __importDefault(require("path"));
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
47
|
+
// We'll create an async initialization function
|
|
48
|
+
async function initServer() {
|
|
49
|
+
// Dynamically import the ES module
|
|
50
|
+
const { HomebridgePluginUiServer } = await Promise.resolve().then(() => __importStar(require('@homebridge/plugin-ui-utils')));
|
|
51
|
+
class UiServer extends HomebridgePluginUiServer {
|
|
52
|
+
stations = [];
|
|
53
|
+
eufyClient = null;
|
|
54
|
+
log;
|
|
55
|
+
tsLog;
|
|
56
|
+
storagePath = this.homebridgeStoragePath + '/eufysecurity';
|
|
57
|
+
storedAccessories_file = this.storagePath + '/accessories.json';
|
|
58
|
+
logZipFilePath = this.storagePath + '/logs.zip';
|
|
59
|
+
adminAccountUsed = false;
|
|
60
|
+
config = {
|
|
61
|
+
username: '',
|
|
62
|
+
password: '',
|
|
63
|
+
language: 'en',
|
|
64
|
+
country: 'US',
|
|
65
|
+
trustedDeviceName: 'My Phone',
|
|
66
|
+
persistentDir: this.storagePath,
|
|
67
|
+
p2pConnectionSetup: 0,
|
|
68
|
+
pollingIntervalMinutes: 99,
|
|
69
|
+
eventDurationSeconds: 10,
|
|
70
|
+
acceptInvitations: true,
|
|
71
|
+
};
|
|
72
|
+
constructor() {
|
|
73
|
+
super();
|
|
74
|
+
this.initLogger();
|
|
75
|
+
this.initTransportStreams();
|
|
76
|
+
this.initEventListeners();
|
|
77
|
+
this.ready();
|
|
78
|
+
}
|
|
79
|
+
initLogger() {
|
|
80
|
+
this.log = new tslog_1.Logger({
|
|
81
|
+
name: `[${package_json_1.version}]`,
|
|
82
|
+
prettyLogTemplate: '{{name}}\t{{logLevelName}}\t[{{fileNameWithLine}}]\t',
|
|
83
|
+
prettyErrorTemplate: '\n{{errorName}} {{errorMessage}}\nerror stack:\n{{errorStack}}',
|
|
84
|
+
prettyErrorStackTemplate: ' • {{fileName}}\t{{method}}\n\t{{fileNameWithLine}}',
|
|
85
|
+
prettyErrorParentNamesSeparator: ':',
|
|
86
|
+
prettyErrorLoggerNameDelimiter: '\t',
|
|
87
|
+
stylePrettyLogs: true,
|
|
88
|
+
minLevel: 2,
|
|
89
|
+
prettyLogTimeZone: 'local',
|
|
90
|
+
prettyLogStyles: {
|
|
91
|
+
logLevelName: {
|
|
92
|
+
'*': ['bold', 'black', 'bgWhiteBright', 'dim'],
|
|
93
|
+
SILLY: ['bold', 'white'],
|
|
94
|
+
TRACE: ['bold', 'whiteBright'],
|
|
95
|
+
DEBUG: ['bold', 'green'],
|
|
96
|
+
INFO: ['bold', 'blue'],
|
|
97
|
+
WARN: ['bold', 'yellow'],
|
|
98
|
+
ERROR: ['bold', 'red'],
|
|
99
|
+
FATAL: ['bold', 'redBright'],
|
|
100
|
+
},
|
|
101
|
+
dateIsoStr: 'gray',
|
|
102
|
+
filePathWithLine: 'white',
|
|
103
|
+
name: 'green',
|
|
104
|
+
nameWithDelimiterPrefix: ['white', 'bold'],
|
|
105
|
+
nameWithDelimiterSuffix: ['white', 'bold'],
|
|
106
|
+
errorName: ['bold', 'bgRedBright', 'whiteBright'],
|
|
107
|
+
fileName: ['yellow'],
|
|
97
108
|
},
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
name: 'green',
|
|
101
|
-
nameWithDelimiterPrefix: ['white', 'bold'],
|
|
102
|
-
nameWithDelimiterSuffix: ['white', 'bold'],
|
|
103
|
-
errorName: ['bold', 'bgRedBright', 'whiteBright'],
|
|
104
|
-
fileName: ['yellow'],
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
this.tsLog = new tslog_1.Logger({ type: 'hidden', minLevel: 2 });
|
|
108
|
-
}
|
|
109
|
-
initTransportStreams() {
|
|
110
|
-
if (!fs.existsSync(this.storagePath)) {
|
|
111
|
-
fs.mkdirSync(this.storagePath);
|
|
109
|
+
});
|
|
110
|
+
this.tsLog = new tslog_1.Logger({ type: 'hidden', minLevel: 2 });
|
|
112
111
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
this.tsLog.attachTransport((logObj) => pluginLogLibStream.write(JSON.stringify(logObj) + '\n'));
|
|
117
|
-
this.log.debug('Using bropats eufy-security-client library in version ' + eufy_security_client_1.libVersion);
|
|
118
|
-
}
|
|
119
|
-
initEventListeners() {
|
|
120
|
-
this.onRequest('/login', this.login.bind(this));
|
|
121
|
-
this.onRequest('/storedAccessories', this.loadStoredAccessories.bind(this));
|
|
122
|
-
this.onRequest('/reset', this.resetPlugin.bind(this));
|
|
123
|
-
this.onRequest('/downloadLogs', this.downloadLogs.bind(this));
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Deletes a file if it exists.
|
|
127
|
-
*
|
|
128
|
-
* @param filePath The path to the file to be deleted.
|
|
129
|
-
* @returns A Promise that resolves when the operation is complete, or rejects if an error occurs.
|
|
130
|
-
* @throws Will reject the Promise with the error if file deletion fails.
|
|
131
|
-
*/
|
|
132
|
-
async deleteFileIfExists(filePath) {
|
|
133
|
-
try {
|
|
134
|
-
if (fs.existsSync(filePath)) {
|
|
135
|
-
fs.unlinkSync(filePath);
|
|
112
|
+
initTransportStreams() {
|
|
113
|
+
if (!fs.existsSync(this.storagePath)) {
|
|
114
|
+
fs.mkdirSync(this.storagePath);
|
|
136
115
|
}
|
|
116
|
+
const pluginLogStream = (0, rotating_file_stream_1.createStream)('configui-server.log', { path: this.storagePath, interval: '1d', rotate: 3, maxSize: '200M' });
|
|
117
|
+
const pluginLogLibStream = (0, rotating_file_stream_1.createStream)('configui-lib.log', { path: this.storagePath, interval: '1d', rotate: 3, maxSize: '200M' });
|
|
118
|
+
this.log.attachTransport((logObj) => pluginLogStream.write(JSON.stringify(logObj) + '\n'));
|
|
119
|
+
this.tsLog.attachTransport((logObj) => pluginLogLibStream.write(JSON.stringify(logObj) + '\n'));
|
|
120
|
+
this.log.debug('Using bropats eufy-security-client library in version ' + eufy_security_client_1.libVersion);
|
|
137
121
|
}
|
|
138
|
-
|
|
139
|
-
|
|
122
|
+
initEventListeners() {
|
|
123
|
+
this.onRequest('/login', this.login.bind(this));
|
|
124
|
+
this.onRequest('/storedAccessories', this.loadStoredAccessories.bind(this));
|
|
125
|
+
this.onRequest('/reset', this.resetPlugin.bind(this));
|
|
126
|
+
this.onRequest('/downloadLogs', this.downloadLogs.bind(this));
|
|
140
127
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
return this.deleteFileIfExists(this.storedAccessories_file);
|
|
157
|
-
}
|
|
158
|
-
async login(options) {
|
|
159
|
-
try {
|
|
160
|
-
if (options && options.username && options.password) {
|
|
161
|
-
this.log.info('deleting persistent.json and accessories due to new login');
|
|
162
|
-
this.resetAccessoryData();
|
|
163
|
-
await this.resetPersistentData(); // To be commented for testing purpose
|
|
128
|
+
/**
|
|
129
|
+
* Deletes a file if it exists.
|
|
130
|
+
*
|
|
131
|
+
* @param filePath The path to the file to be deleted.
|
|
132
|
+
* @returns A Promise that resolves when the operation is complete, or rejects if an error occurs.
|
|
133
|
+
* @throws Will reject the Promise with the error if file deletion fails.
|
|
134
|
+
*/
|
|
135
|
+
async deleteFileIfExists(filePath) {
|
|
136
|
+
try {
|
|
137
|
+
if (fs.existsSync(filePath)) {
|
|
138
|
+
fs.unlinkSync(filePath);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return Promise.reject(error);
|
|
164
143
|
}
|
|
165
144
|
}
|
|
166
|
-
|
|
167
|
-
|
|
145
|
+
/**
|
|
146
|
+
* Resets the persistent data by removing the persistent.json file.
|
|
147
|
+
*
|
|
148
|
+
* @returns A Promise that resolves when the operation is complete, or rejects if an error occurs.
|
|
149
|
+
*/
|
|
150
|
+
async resetPersistentData() {
|
|
151
|
+
return this.deleteFileIfExists(this.storagePath + '/persistent.json');
|
|
168
152
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
this.
|
|
153
|
+
/**
|
|
154
|
+
* Resets the accessory data by removing the stored accessories file.
|
|
155
|
+
*
|
|
156
|
+
* @returns A Promise that resolves when the operation is complete, or rejects if an error occurs.
|
|
157
|
+
*/
|
|
158
|
+
async resetAccessoryData() {
|
|
159
|
+
return this.deleteFileIfExists(this.storedAccessories_file);
|
|
160
|
+
}
|
|
161
|
+
async login(options) {
|
|
176
162
|
try {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
this.eufyClient?.removeAllListeners();
|
|
183
|
-
this.eufyClient?.close();
|
|
184
|
-
}, 40 * 1000);
|
|
163
|
+
if (options && options.username && options.password) {
|
|
164
|
+
this.log.info('deleting persistent.json and accessories due to new login');
|
|
165
|
+
this.resetAccessoryData();
|
|
166
|
+
await this.resetPersistentData(); // To be commented for testing purpose
|
|
167
|
+
}
|
|
185
168
|
}
|
|
186
169
|
catch (error) {
|
|
187
|
-
this.log.error(error);
|
|
170
|
+
this.log.error('Could not delete persistent.json due to error: ' + error);
|
|
188
171
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
this.
|
|
172
|
+
if (!this.eufyClient && options && options.username && options.password && options.country) {
|
|
173
|
+
this.stations = [];
|
|
174
|
+
this.log.debug('init eufyClient');
|
|
175
|
+
this.config.username = options.username;
|
|
176
|
+
this.config.password = options.password;
|
|
177
|
+
this.config.country = options.country;
|
|
178
|
+
this.config.trustedDeviceName = options.deviceName;
|
|
196
179
|
try {
|
|
197
|
-
this.
|
|
198
|
-
this.eufyClient?.
|
|
199
|
-
|
|
200
|
-
|
|
180
|
+
this.eufyClient = await eufy_security_client_1.EufySecurity.initialize(this.config, this.tsLog);
|
|
181
|
+
this.eufyClient?.on('station added', await this.addStation.bind(this));
|
|
182
|
+
this.eufyClient?.on('device added', await this.addDevice.bind(this));
|
|
183
|
+
// Close connection after 40 seconds enough time to get all devices
|
|
184
|
+
setTimeout(() => {
|
|
185
|
+
this.eufyClient?.removeAllListeners();
|
|
186
|
+
this.eufyClient?.close();
|
|
187
|
+
}, 40 * 1000);
|
|
201
188
|
}
|
|
202
189
|
catch (error) {
|
|
203
190
|
this.log.error(error);
|
|
204
|
-
resolve({ success: false, failReason: types_1.LoginFailReason.UNKNOWN, data: { error: error } });
|
|
205
191
|
}
|
|
206
192
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
193
|
+
return new Promise((resolve, reject) => {
|
|
194
|
+
setTimeout(() => {
|
|
195
|
+
resolve({ success: false, failReason: types_1.LoginFailReason.TIMEOUT });
|
|
196
|
+
}, 25 * 1000);
|
|
197
|
+
if (options && options.username && options.password && options.country) {
|
|
198
|
+
this.log.debug('login with credentials');
|
|
199
|
+
try {
|
|
200
|
+
this.loginHandlers(resolve);
|
|
201
|
+
this.eufyClient?.connect()
|
|
202
|
+
.then(() => this.log.debug('connected?: ' + this.eufyClient?.isConnected()))
|
|
203
|
+
.catch((error) => this.log.error(error));
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
this.log.error(error);
|
|
207
|
+
resolve({ success: false, failReason: types_1.LoginFailReason.UNKNOWN, data: { error: error } });
|
|
208
|
+
}
|
|
211
209
|
}
|
|
212
|
-
|
|
213
|
-
|
|
210
|
+
else if (options && options.verifyCode) {
|
|
211
|
+
try {
|
|
212
|
+
this.loginHandlers(resolve);
|
|
213
|
+
this.eufyClient?.connect({ verifyCode: options.verifyCode, force: false });
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
resolve({ success: false, failReason: types_1.LoginFailReason.UNKNOWN, data: { error: error } });
|
|
217
|
+
}
|
|
214
218
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
219
|
+
else if (options && options.captcha) {
|
|
220
|
+
try {
|
|
221
|
+
this.loginHandlers(resolve);
|
|
222
|
+
this.eufyClient?.connect({ captcha: { captchaCode: options.captcha.captchaCode, captchaId: options.captcha.captchaId }, force: false });
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
resolve({ success: false, failReason: types_1.LoginFailReason.UNKNOWN, data: { error: error } });
|
|
226
|
+
}
|
|
220
227
|
}
|
|
221
|
-
|
|
222
|
-
|
|
228
|
+
else {
|
|
229
|
+
reject('unsupported login method');
|
|
223
230
|
}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
loginHandlers(resolveCallback) {
|
|
234
|
+
this.eufyClient?.once('tfa request', () => resolveCallback({ success: false, failReason: types_1.LoginFailReason.TFA }));
|
|
235
|
+
this.eufyClient?.once('captcha request', (id, captcha) => resolveCallback({ success: false, failReason: types_1.LoginFailReason.CAPTCHA, data: { id: id, captcha: captcha } }));
|
|
236
|
+
this.eufyClient?.once('connect', () => resolveCallback({ success: true }));
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Asynchronously loads stored accessories from a file.
|
|
240
|
+
* @returns A promise resolving to an array of accessories.
|
|
241
|
+
*/
|
|
242
|
+
async loadStoredAccessories() {
|
|
243
|
+
try {
|
|
244
|
+
// Check if the stored accessories file exists
|
|
245
|
+
if (!fs.existsSync(this.storedAccessories_file)) {
|
|
246
|
+
// If the file doesn't exist, log a warning and return an empty array
|
|
247
|
+
this.log.debug('Stored accessories file does not exist.');
|
|
248
|
+
return [];
|
|
249
|
+
}
|
|
250
|
+
// Read the content of the stored accessories file asynchronously
|
|
251
|
+
const storedData = await fs.promises.readFile(this.storedAccessories_file, { encoding: 'utf-8' });
|
|
252
|
+
// Parse the JSON data obtained from the file
|
|
253
|
+
const { version: storedVersion, stations: storedAccessories } = JSON.parse(storedData);
|
|
254
|
+
// Compare the stored version with the current version
|
|
255
|
+
if (storedVersion !== package_json_1.version) {
|
|
256
|
+
// If the versions do not match, log a warning and push an event
|
|
257
|
+
this.pushEvent('versionUnmatched', { currentVersion: package_json_1.version, storedVersion: storedVersion });
|
|
258
|
+
this.log.warn(`Stored version (${storedVersion}) does not match current version (${package_json_1.version})`);
|
|
259
|
+
}
|
|
260
|
+
// Return the parsed accessories
|
|
261
|
+
return storedAccessories;
|
|
224
262
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
loginHandlers(resolveCallback) {
|
|
231
|
-
this.eufyClient?.once('tfa request', () => resolveCallback({ success: false, failReason: types_1.LoginFailReason.TFA }));
|
|
232
|
-
this.eufyClient?.once('captcha request', (id, captcha) => resolveCallback({ success: false, failReason: types_1.LoginFailReason.CAPTCHA, data: { id: id, captcha: captcha } }));
|
|
233
|
-
this.eufyClient?.once('connect', () => resolveCallback({ success: true }));
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Asynchronously loads stored accessories from a file.
|
|
237
|
-
* @returns A promise resolving to an array of accessories.
|
|
238
|
-
*/
|
|
239
|
-
async loadStoredAccessories() {
|
|
240
|
-
try {
|
|
241
|
-
// Check if the stored accessories file exists
|
|
242
|
-
if (!fs.existsSync(this.storedAccessories_file)) {
|
|
243
|
-
// If the file doesn't exist, log a warning and return an empty array
|
|
244
|
-
this.log.debug('Stored accessories file does not exist.');
|
|
263
|
+
catch (error) {
|
|
264
|
+
// If an error occurs during the process, log an error message and return an empty array
|
|
265
|
+
this.log.error('Could not get stored accessories. Most likely no stored accessories yet: ' + error);
|
|
245
266
|
return [];
|
|
246
267
|
}
|
|
247
|
-
// Read the content of the stored accessories file asynchronously
|
|
248
|
-
const storedData = await fs.promises.readFile(this.storedAccessories_file, { encoding: 'utf-8' });
|
|
249
|
-
// Parse the JSON data obtained from the file
|
|
250
|
-
const { version: storedVersion, stations: storedAccessories } = JSON.parse(storedData);
|
|
251
|
-
// Compare the stored version with the current version
|
|
252
|
-
if (storedVersion !== package_json_1.version) {
|
|
253
|
-
// If the versions do not match, log a warning and push an event
|
|
254
|
-
this.pushEvent('versionUnmatched', { currentVersion: package_json_1.version, storedVersion: storedVersion });
|
|
255
|
-
this.log.warn(`Stored version (${storedVersion}) does not match current version (${package_json_1.version})`);
|
|
256
|
-
}
|
|
257
|
-
// Return the parsed accessories
|
|
258
|
-
return storedAccessories;
|
|
259
268
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
this.log.error('Could not get stored accessories. Most likely no stored accessories yet: ' + error);
|
|
263
|
-
return [];
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
async delay(ms) {
|
|
267
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
268
|
-
}
|
|
269
|
-
async addStation(station) {
|
|
270
|
-
// Before doing anything check if creds are guest admin
|
|
271
|
-
const rawStation = station.getRawStation();
|
|
272
|
-
if (rawStation.member.member_type !== eufy_security_client_1.UserType.ADMIN) {
|
|
273
|
-
this.adminAccountUsed = true;
|
|
274
|
-
this.eufyClient?.close();
|
|
275
|
-
this.pushEvent('AdminAccountUsed', true);
|
|
276
|
-
this.resetPlugin();
|
|
277
|
-
this.log.error(`
|
|
278
|
-
#########################
|
|
279
|
-
######### ERROR #########
|
|
280
|
-
#########################
|
|
281
|
-
You're not using a guest admin account with this plugin! You must use a guest admin account!
|
|
282
|
-
Please look here for more details:
|
|
283
|
-
https://github.com/homebridge-eufy-security/plugin/wiki/Create-a-dedicated-admin-account-for-Homebridge-Eufy-Security-Plugin
|
|
284
|
-
#########################
|
|
285
|
-
`);
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
await this.delay(1000);
|
|
289
|
-
const s = {
|
|
290
|
-
uniqueId: station.getSerial(),
|
|
291
|
-
displayName: station.getName(),
|
|
292
|
-
type: station.getDeviceType(),
|
|
293
|
-
typename: eufy_security_client_1.DeviceType[station.getDeviceType()],
|
|
294
|
-
disabled: false,
|
|
295
|
-
devices: [],
|
|
296
|
-
};
|
|
297
|
-
s.ignored = (this.config['ignoreStations'] ?? []).includes(s.uniqueId);
|
|
298
|
-
// Standalone Lock or Doorbell doesn't have Security Control
|
|
299
|
-
if (eufy_security_client_1.Device.isLock(s.type) || eufy_security_client_1.Device.isDoorbell(s.type)) {
|
|
300
|
-
s.disabled = true;
|
|
301
|
-
s.ignored = true;
|
|
269
|
+
async delay(ms) {
|
|
270
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
302
271
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
try {
|
|
337
|
-
delete d.properties.picture;
|
|
338
|
-
}
|
|
339
|
-
catch (error) {
|
|
340
|
-
this.log.error(error);
|
|
341
|
-
}
|
|
342
|
-
d.ignored = (this.config['ignoreDevices'] ?? []).includes(d.uniqueId);
|
|
343
|
-
const stationUniqueId = device.getStationSerial();
|
|
344
|
-
const stationIndex = this.stations.findIndex(station => station.uniqueId === stationUniqueId);
|
|
345
|
-
if (stationIndex !== -1) {
|
|
346
|
-
if (!this.stations[stationIndex].devices) {
|
|
347
|
-
this.stations[stationIndex].devices = [];
|
|
272
|
+
async addStation(station) {
|
|
273
|
+
// Before doing anything check if creds are guest admin
|
|
274
|
+
const rawStation = station.getRawStation();
|
|
275
|
+
if (rawStation.member.member_type !== eufy_security_client_1.UserType.ADMIN) {
|
|
276
|
+
this.adminAccountUsed = true;
|
|
277
|
+
this.eufyClient?.close();
|
|
278
|
+
this.pushEvent('AdminAccountUsed', true);
|
|
279
|
+
this.resetPlugin();
|
|
280
|
+
this.log.error(`
|
|
281
|
+
#########################
|
|
282
|
+
######### ERROR #########
|
|
283
|
+
#########################
|
|
284
|
+
You're not using a guest admin account with this plugin! You must use a guest admin account!
|
|
285
|
+
Please look here for more details:
|
|
286
|
+
https://github.com/homebridge-eufy-security/plugin/wiki/Create-a-dedicated-admin-account-for-Homebridge-Eufy-Security-Plugin
|
|
287
|
+
#########################
|
|
288
|
+
`);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
await this.delay(1000);
|
|
292
|
+
const s = {
|
|
293
|
+
uniqueId: station.getSerial(),
|
|
294
|
+
displayName: station.getName(),
|
|
295
|
+
type: station.getDeviceType(),
|
|
296
|
+
typename: eufy_security_client_1.DeviceType[station.getDeviceType()],
|
|
297
|
+
disabled: false,
|
|
298
|
+
devices: [],
|
|
299
|
+
};
|
|
300
|
+
s.ignored = (this.config['ignoreStations'] ?? []).includes(s.uniqueId);
|
|
301
|
+
// Standalone Lock or Doorbell doesn't have Security Control
|
|
302
|
+
if (eufy_security_client_1.Device.isLock(s.type) || eufy_security_client_1.Device.isDoorbell(s.type)) {
|
|
303
|
+
s.disabled = true;
|
|
304
|
+
s.ignored = true;
|
|
348
305
|
}
|
|
349
|
-
this.stations
|
|
306
|
+
this.stations.push(s);
|
|
350
307
|
this.storeAccessories();
|
|
351
308
|
this.pushEvent('addAccessory', this.stations);
|
|
352
309
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
310
|
+
async addDevice(device) {
|
|
311
|
+
// Before doing anything check if creds are guest admin
|
|
312
|
+
if (this.adminAccountUsed) {
|
|
313
|
+
this.pushEvent('AdminAccountUsed', true);
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
await this.delay(2000);
|
|
317
|
+
const d = {
|
|
318
|
+
uniqueId: device.getSerial(),
|
|
319
|
+
displayName: device.getName(),
|
|
320
|
+
type: device.getDeviceType(),
|
|
321
|
+
typename: eufy_security_client_1.DeviceType[device.getDeviceType()],
|
|
322
|
+
standalone: device.getSerial() === device.getStationSerial(),
|
|
323
|
+
hasBattery: device.hasBattery(),
|
|
324
|
+
isCamera: device.isCamera(),
|
|
325
|
+
isDoorbell: device.isDoorbell(),
|
|
326
|
+
isKeypad: device.isKeyPad(),
|
|
327
|
+
supportsRTSP: device.hasPropertyValue(eufy_security_client_1.PropertyName.DeviceRTSPStream),
|
|
328
|
+
supportsTalkback: device.hasCommand(eufy_security_client_1.CommandName.DeviceStartTalkback),
|
|
329
|
+
DeviceEnabled: device.hasProperty(eufy_security_client_1.PropertyName.DeviceEnabled),
|
|
330
|
+
DeviceMotionDetection: device.hasProperty(eufy_security_client_1.PropertyName.DeviceMotionDetection),
|
|
331
|
+
DeviceLight: device.hasProperty(eufy_security_client_1.PropertyName.DeviceLight),
|
|
332
|
+
DeviceChimeIndoor: device.hasProperty(eufy_security_client_1.PropertyName.DeviceChimeIndoor),
|
|
333
|
+
disabled: false,
|
|
334
|
+
properties: device.getProperties(),
|
|
335
|
+
};
|
|
336
|
+
if (device.hasProperty(eufy_security_client_1.PropertyName.DeviceChargingStatus)) {
|
|
337
|
+
d.chargingStatus = device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceChargingStatus);
|
|
338
|
+
}
|
|
339
|
+
try {
|
|
340
|
+
delete d.properties.picture;
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
this.log.error(error);
|
|
344
|
+
}
|
|
345
|
+
d.ignored = (this.config['ignoreDevices'] ?? []).includes(d.uniqueId);
|
|
346
|
+
const stationUniqueId = device.getStationSerial();
|
|
347
|
+
const stationIndex = this.stations.findIndex(station => station.uniqueId === stationUniqueId);
|
|
348
|
+
if (stationIndex !== -1) {
|
|
349
|
+
if (!this.stations[stationIndex].devices) {
|
|
350
|
+
this.stations[stationIndex].devices = [];
|
|
351
|
+
}
|
|
352
|
+
this.stations[stationIndex].devices.push(d);
|
|
353
|
+
this.storeAccessories();
|
|
354
|
+
this.pushEvent('addAccessory', this.stations);
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
this.log.error('Station not found for device:', d.displayName);
|
|
386
358
|
}
|
|
387
|
-
return null;
|
|
388
|
-
}));
|
|
389
|
-
// Step 4: Remove null entries (empty log files) from the array
|
|
390
|
-
return nonEmptyLogFiles.filter(file => file !== null);
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Asynchronously compresses log files from a directory and returns a Promise that resolves to a Buffer.
|
|
394
|
-
* @returns {Promise<Buffer>} A Promise resolving to a Buffer containing compressed log files.
|
|
395
|
-
*/
|
|
396
|
-
async downloadLogs() {
|
|
397
|
-
this.pushEvent('downloadLogsProgress', { progress: 10, status: 'Gets non-empty log files' });
|
|
398
|
-
const finalLogFiles = await this.getLogs();
|
|
399
|
-
// Step 5: Add Log Files to Zip
|
|
400
|
-
// Initialize a Zip instance and add each log file to the archive.
|
|
401
|
-
this.pushEvent('downloadLogsProgress', { progress: 30, status: 'Add Log Files to Zip' });
|
|
402
|
-
const zip = new zip_lib_1.Zip();
|
|
403
|
-
let numberOfFiles = 0;
|
|
404
|
-
finalLogFiles.forEach(logFile => {
|
|
405
|
-
const filePath = path_1.default.join(this.storagePath, logFile);
|
|
406
|
-
zip.addFile(filePath);
|
|
407
|
-
numberOfFiles++;
|
|
408
|
-
});
|
|
409
|
-
// Step 6: Handle No Log Files Found
|
|
410
|
-
// If no log files are found after filtering, throw an error.
|
|
411
|
-
this.pushEvent('downloadLogsProgress', { progress: 40, status: 'No Log Files Found' });
|
|
412
|
-
if (numberOfFiles === 0) {
|
|
413
|
-
throw new Error('No log files were found');
|
|
414
359
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
this.pushEvent('downloadLogsProgress', { progress: 45, status: `Compressing ${numberOfFiles} files` });
|
|
419
|
-
await zip.archive(this.logZipFilePath);
|
|
420
|
-
// Step 8: Read Zip File
|
|
421
|
-
// Read the content of the generated log zip file into a Buffer.
|
|
422
|
-
this.pushEvent('downloadLogsProgress', { progress: 80, status: 'Reading content' });
|
|
423
|
-
const fileBuffer = fs.readFileSync(this.logZipFilePath);
|
|
424
|
-
// Step 9: Return Buffer
|
|
425
|
-
// Return the Buffer containing the compressed log files.
|
|
426
|
-
this.pushEvent('downloadLogsProgress', { progress: 90, status: 'Returning zip file' });
|
|
427
|
-
return fileBuffer;
|
|
360
|
+
storeAccessories() {
|
|
361
|
+
const dataToStore = { version: package_json_1.version, stations: this.stations };
|
|
362
|
+
fs.writeFileSync(this.storedAccessories_file, JSON.stringify(dataToStore));
|
|
428
363
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
364
|
+
async resetPlugin() {
|
|
365
|
+
try {
|
|
366
|
+
fs.rmSync(this.storagePath, { recursive: true });
|
|
367
|
+
return { result: 1 };
|
|
368
|
+
}
|
|
369
|
+
catch (error) {
|
|
370
|
+
this.log.error('Could not reset plugin: ' + error);
|
|
371
|
+
return { result: 0 };
|
|
372
|
+
}
|
|
434
373
|
}
|
|
435
|
-
|
|
436
|
-
// Step
|
|
437
|
-
//
|
|
438
|
-
this.
|
|
374
|
+
async getLogs() {
|
|
375
|
+
// Step 1: List Files in Directory
|
|
376
|
+
// Asynchronously list all files in the directory specified by this.storagePath.
|
|
377
|
+
const files = await fs.promises.readdir(this.storagePath);
|
|
378
|
+
// Step 2: Filter Log Files
|
|
379
|
+
// Filter the list of files to include only those with names ending in .log, .log.0.
|
|
380
|
+
const logFiles = files.filter(file => {
|
|
381
|
+
return file.endsWith('.log') || file.endsWith('.log.0');
|
|
382
|
+
});
|
|
383
|
+
// Step 3: Filter out Empty Log Files
|
|
384
|
+
const nonEmptyLogFiles = await Promise.all(logFiles.map(async (file) => {
|
|
385
|
+
const filePath = path_1.default.join(this.storagePath, file);
|
|
386
|
+
const stats = await fs.promises.stat(filePath);
|
|
387
|
+
if (stats.size > 0) {
|
|
388
|
+
return file;
|
|
389
|
+
}
|
|
390
|
+
return null;
|
|
391
|
+
}));
|
|
392
|
+
// Step 4: Remove null entries (empty log files) from the array
|
|
393
|
+
return nonEmptyLogFiles.filter(file => file !== null);
|
|
439
394
|
}
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
395
|
+
/**
|
|
396
|
+
* Asynchronously compresses log files from a directory and returns a Promise that resolves to a Buffer.
|
|
397
|
+
* @returns {Promise<Buffer>} A Promise resolving to a Buffer containing compressed log files.
|
|
398
|
+
*/
|
|
399
|
+
async downloadLogs() {
|
|
400
|
+
this.pushEvent('downloadLogsProgress', { progress: 10, status: 'Gets non-empty log files' });
|
|
401
|
+
const finalLogFiles = await this.getLogs();
|
|
402
|
+
// Step 5: Add Log Files to Zip
|
|
403
|
+
// Initialize a Zip instance and add each log file to the archive.
|
|
404
|
+
this.pushEvent('downloadLogsProgress', { progress: 30, status: 'Add Log Files to Zip' });
|
|
405
|
+
const zip = new zip_lib_1.Zip();
|
|
406
|
+
let numberOfFiles = 0;
|
|
407
|
+
finalLogFiles.forEach(logFile => {
|
|
408
|
+
const filePath = path_1.default.join(this.storagePath, logFile);
|
|
409
|
+
zip.addFile(filePath);
|
|
410
|
+
numberOfFiles++;
|
|
411
|
+
});
|
|
412
|
+
// Step 6: Handle No Log Files Found
|
|
413
|
+
// If no log files are found after filtering, throw an error.
|
|
414
|
+
this.pushEvent('downloadLogsProgress', { progress: 40, status: 'No Log Files Found' });
|
|
415
|
+
if (numberOfFiles === 0) {
|
|
416
|
+
throw new Error('No log files were found');
|
|
417
|
+
}
|
|
418
|
+
try {
|
|
419
|
+
// Step 7: Archive Zip
|
|
420
|
+
// Archive the Zip instance to the specified log zip file.
|
|
421
|
+
this.pushEvent('downloadLogsProgress', { progress: 45, status: `Compressing ${numberOfFiles} files` });
|
|
422
|
+
await zip.archive(this.logZipFilePath);
|
|
423
|
+
// Step 8: Read Zip File
|
|
424
|
+
// Read the content of the generated log zip file into a Buffer.
|
|
425
|
+
this.pushEvent('downloadLogsProgress', { progress: 80, status: 'Reading content' });
|
|
426
|
+
const fileBuffer = fs.readFileSync(this.logZipFilePath);
|
|
427
|
+
// Step 9: Return Buffer
|
|
428
|
+
// Return the Buffer containing the compressed log files.
|
|
429
|
+
this.pushEvent('downloadLogsProgress', { progress: 90, status: 'Returning zip file' });
|
|
430
|
+
return fileBuffer;
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
// Step 10: Error Handling
|
|
434
|
+
// Log an error if archiving the zip file fails and propagate the error.
|
|
435
|
+
this.log.error('Error while generating log files: ' + error);
|
|
436
|
+
throw error;
|
|
437
|
+
}
|
|
438
|
+
finally {
|
|
439
|
+
// Step 11: Cleanup
|
|
440
|
+
// Ensure to remove any compressed log files after the operation, regardless of success or failure.
|
|
441
|
+
this.removeCompressedLogs();
|
|
445
442
|
}
|
|
446
|
-
return true;
|
|
447
443
|
}
|
|
448
|
-
|
|
449
|
-
|
|
444
|
+
removeCompressedLogs() {
|
|
445
|
+
try {
|
|
446
|
+
if (fs.existsSync(this.logZipFilePath)) {
|
|
447
|
+
fs.unlinkSync(this.logZipFilePath);
|
|
448
|
+
}
|
|
449
|
+
return true;
|
|
450
|
+
}
|
|
451
|
+
catch {
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
450
454
|
}
|
|
451
455
|
}
|
|
456
|
+
// Start the instance of the server
|
|
457
|
+
new UiServer();
|
|
452
458
|
}
|
|
453
|
-
//
|
|
454
|
-
|
|
459
|
+
// Initialize the server
|
|
460
|
+
initServer().catch(err => {
|
|
461
|
+
console.error('Failed to initialize the server:', err);
|
|
462
|
+
process.exit(1);
|
|
463
|
+
});
|
|
455
464
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "Homebridge Eufy Security",
|
|
3
3
|
"name": "homebridge-eufy-security",
|
|
4
|
-
"version": "4.3.
|
|
4
|
+
"version": "4.3.4",
|
|
5
5
|
"description": "Control Eufy Security from homebridge.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"url": "https://github.com/homebridge-eufy-security/plugin/issues"
|
|
19
19
|
},
|
|
20
20
|
"engines": {
|
|
21
|
-
"node": "
|
|
21
|
+
"node": "20.11.0 || ^22",
|
|
22
22
|
"homebridge": "^1.8.0 || ^2.0.0-beta.0"
|
|
23
23
|
},
|
|
24
24
|
"main": "dist/index.js",
|