homebridge-eufy-security 4.3.4 → 4.3.6

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 CHANGED
@@ -1,2 +1,2 @@
1
- export declare const LIB_VERSION = "4.3.4";
1
+ export declare const LIB_VERSION = "4.3.6";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LIB_VERSION = void 0;
4
- exports.LIB_VERSION = "4.3.4";
4
+ exports.LIB_VERSION = "4.3.6";
5
5
  //# sourceMappingURL=version.js.map
@@ -37,6 +37,7 @@ 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");
40
41
  const fs = __importStar(require("fs"));
41
42
  const tslog_1 = require("tslog");
42
43
  const rotating_file_stream_1 = require("rotating-file-stream");
@@ -44,421 +45,413 @@ const zip_lib_1 = require("zip-lib");
44
45
  const types_1 = require("./configui/app/util/types");
45
46
  const package_json_1 = require("../package.json");
46
47
  const path_1 = __importDefault(require("path"));
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'],
48
+ class UiServer extends plugin_ui_utils_1.HomebridgePluginUiServer {
49
+ stations = [];
50
+ eufyClient = null;
51
+ log;
52
+ tsLog;
53
+ storagePath = this.homebridgeStoragePath + '/eufysecurity';
54
+ storedAccessories_file = this.storagePath + '/accessories.json';
55
+ logZipFilePath = this.storagePath + '/logs.zip';
56
+ adminAccountUsed = false;
57
+ config = {
58
+ username: '',
59
+ password: '',
60
+ language: 'en',
61
+ country: 'US',
62
+ trustedDeviceName: 'My Phone',
63
+ persistentDir: this.storagePath,
64
+ p2pConnectionSetup: 0,
65
+ pollingIntervalMinutes: 99,
66
+ eventDurationSeconds: 10,
67
+ acceptInvitations: true,
68
+ };
69
+ constructor() {
70
+ super();
71
+ this.initLogger();
72
+ this.initTransportStreams();
73
+ this.initEventListeners();
74
+ this.ready();
75
+ }
76
+ initLogger() {
77
+ this.log = new tslog_1.Logger({
78
+ name: `[${package_json_1.version}]`,
79
+ prettyLogTemplate: '{{name}}\t{{logLevelName}}\t[{{fileNameWithLine}}]\t',
80
+ prettyErrorTemplate: '\n{{errorName}} {{errorMessage}}\nerror stack:\n{{errorStack}}',
81
+ prettyErrorStackTemplate: ' • {{fileName}}\t{{method}}\n\t{{fileNameWithLine}}',
82
+ prettyErrorParentNamesSeparator: ':',
83
+ prettyErrorLoggerNameDelimiter: '\t',
84
+ stylePrettyLogs: true,
85
+ minLevel: 2,
86
+ prettyLogTimeZone: 'local',
87
+ prettyLogStyles: {
88
+ logLevelName: {
89
+ '*': ['bold', 'black', 'bgWhiteBright', 'dim'],
90
+ SILLY: ['bold', 'white'],
91
+ TRACE: ['bold', 'whiteBright'],
92
+ DEBUG: ['bold', 'green'],
93
+ INFO: ['bold', 'blue'],
94
+ WARN: ['bold', 'yellow'],
95
+ ERROR: ['bold', 'red'],
96
+ FATAL: ['bold', 'redBright'],
108
97
  },
109
- });
110
- this.tsLog = new tslog_1.Logger({ type: 'hidden', minLevel: 2 });
98
+ dateIsoStr: 'gray',
99
+ filePathWithLine: 'white',
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);
111
112
  }
112
- initTransportStreams() {
113
- if (!fs.existsSync(this.storagePath)) {
114
- fs.mkdirSync(this.storagePath);
113
+ const pluginLogStream = (0, rotating_file_stream_1.createStream)('configui-server.log', { path: this.storagePath, interval: '1d', rotate: 3, maxSize: '200M' });
114
+ const pluginLogLibStream = (0, rotating_file_stream_1.createStream)('configui-lib.log', { path: this.storagePath, interval: '1d', rotate: 3, maxSize: '200M' });
115
+ this.log.attachTransport((logObj) => pluginLogStream.write(JSON.stringify(logObj) + '\n'));
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);
115
136
  }
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);
121
137
  }
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));
138
+ catch (error) {
139
+ return Promise.reject(error);
127
140
  }
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);
141
+ }
142
+ /**
143
+ * Resets the persistent data by removing the persistent.json file.
144
+ *
145
+ * @returns A Promise that resolves when the operation is complete, or rejects if an error occurs.
146
+ */
147
+ async resetPersistentData() {
148
+ return this.deleteFileIfExists(this.storagePath + '/persistent.json');
149
+ }
150
+ /**
151
+ * Resets the accessory data by removing the stored accessories file.
152
+ *
153
+ * @returns A Promise that resolves when the operation is complete, or rejects if an error occurs.
154
+ */
155
+ async resetAccessoryData() {
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
143
164
  }
144
165
  }
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');
166
+ catch (error) {
167
+ this.log.error('Could not delete persistent.json due to error: ' + error);
152
168
  }
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) {
169
+ if (!this.eufyClient && options && options.username && options.password && options.country) {
170
+ this.stations = [];
171
+ this.log.debug('init eufyClient');
172
+ this.config.username = options.username;
173
+ this.config.password = options.password;
174
+ this.config.country = options.country;
175
+ this.config.trustedDeviceName = options.deviceName;
162
176
  try {
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
- }
177
+ this.eufyClient = await eufy_security_client_1.EufySecurity.initialize(this.config, this.tsLog);
178
+ this.eufyClient?.on('station added', await this.addStation.bind(this));
179
+ this.eufyClient?.on('device added', await this.addDevice.bind(this));
180
+ // Close connection after 40 seconds enough time to get all devices
181
+ setTimeout(() => {
182
+ this.eufyClient?.removeAllListeners();
183
+ this.eufyClient?.close();
184
+ }, 40 * 1000);
168
185
  }
169
186
  catch (error) {
170
- this.log.error('Could not delete persistent.json due to error: ' + error);
187
+ this.log.error(error);
171
188
  }
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;
189
+ }
190
+ return new Promise((resolve, reject) => {
191
+ setTimeout(() => {
192
+ resolve({ success: false, failReason: types_1.LoginFailReason.TIMEOUT });
193
+ }, 25 * 1000);
194
+ if (options && options.username && options.password && options.country) {
195
+ this.log.debug('login with credentials');
179
196
  try {
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);
197
+ this.loginHandlers(resolve);
198
+ this.eufyClient?.connect()
199
+ .then(() => this.log.debug('connected?: ' + this.eufyClient?.isConnected()))
200
+ .catch((error) => this.log.error(error));
188
201
  }
189
202
  catch (error) {
190
203
  this.log.error(error);
204
+ resolve({ success: false, failReason: types_1.LoginFailReason.UNKNOWN, data: { error: error } });
191
205
  }
192
206
  }
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
- }
209
- }
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
- }
218
- }
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
- }
207
+ else if (options && options.verifyCode) {
208
+ try {
209
+ this.loginHandlers(resolve);
210
+ this.eufyClient?.connect({ verifyCode: options.verifyCode, force: false });
227
211
  }
228
- else {
229
- reject('unsupported login method');
212
+ catch (error) {
213
+ resolve({ success: false, failReason: types_1.LoginFailReason.UNKNOWN, data: { error: error } });
230
214
  }
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 [];
215
+ }
216
+ else if (options && options.captcha) {
217
+ try {
218
+ this.loginHandlers(resolve);
219
+ this.eufyClient?.connect({ captcha: { captchaCode: options.captcha.captchaCode, captchaId: options.captcha.captchaId }, force: false });
249
220
  }
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})`);
221
+ catch (error) {
222
+ resolve({ success: false, failReason: types_1.LoginFailReason.UNKNOWN, data: { error: error } });
259
223
  }
260
- // Return the parsed accessories
261
- return storedAccessories;
262
224
  }
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);
225
+ else {
226
+ reject('unsupported login method');
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.');
266
245
  return [];
267
246
  }
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;
268
259
  }
269
- async delay(ms) {
270
- return new Promise(resolve => setTimeout(resolve, ms));
260
+ catch (error) {
261
+ // If an error occurs during the process, log an error message and return an empty array
262
+ this.log.error('Could not get stored accessories. Most likely no stored accessories yet: ' + error);
263
+ return [];
271
264
  }
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;
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;
302
+ }
303
+ this.stations.push(s);
304
+ this.storeAccessories();
305
+ this.pushEvent('addAccessory', this.stations);
306
+ }
307
+ async addDevice(device) {
308
+ // Before doing anything check if creds are guest admin
309
+ if (this.adminAccountUsed) {
310
+ this.pushEvent('AdminAccountUsed', true);
311
+ return;
312
+ }
313
+ await this.delay(2000);
314
+ const d = {
315
+ uniqueId: device.getSerial(),
316
+ displayName: device.getName(),
317
+ type: device.getDeviceType(),
318
+ typename: eufy_security_client_1.DeviceType[device.getDeviceType()],
319
+ standalone: device.getSerial() === device.getStationSerial(),
320
+ hasBattery: device.hasBattery(),
321
+ isCamera: device.isCamera(),
322
+ isDoorbell: device.isDoorbell(),
323
+ isKeypad: device.isKeyPad(),
324
+ supportsRTSP: device.hasPropertyValue(eufy_security_client_1.PropertyName.DeviceRTSPStream),
325
+ supportsTalkback: device.hasCommand(eufy_security_client_1.CommandName.DeviceStartTalkback),
326
+ DeviceEnabled: device.hasProperty(eufy_security_client_1.PropertyName.DeviceEnabled),
327
+ DeviceMotionDetection: device.hasProperty(eufy_security_client_1.PropertyName.DeviceMotionDetection),
328
+ DeviceLight: device.hasProperty(eufy_security_client_1.PropertyName.DeviceLight),
329
+ DeviceChimeIndoor: device.hasProperty(eufy_security_client_1.PropertyName.DeviceChimeIndoor),
330
+ disabled: false,
331
+ properties: device.getProperties(),
332
+ };
333
+ if (device.hasProperty(eufy_security_client_1.PropertyName.DeviceChargingStatus)) {
334
+ d.chargingStatus = device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceChargingStatus);
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 = [];
305
348
  }
306
- this.stations.push(s);
349
+ this.stations[stationIndex].devices.push(d);
307
350
  this.storeAccessories();
308
351
  this.pushEvent('addAccessory', this.stations);
309
352
  }
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);
358
- }
353
+ else {
354
+ this.log.error('Station not found for device:', d.displayName);
359
355
  }
360
- storeAccessories() {
361
- const dataToStore = { version: package_json_1.version, stations: this.stations };
362
- fs.writeFileSync(this.storedAccessories_file, JSON.stringify(dataToStore));
356
+ }
357
+ storeAccessories() {
358
+ const dataToStore = { version: package_json_1.version, stations: this.stations };
359
+ fs.writeFileSync(this.storedAccessories_file, JSON.stringify(dataToStore));
360
+ }
361
+ async resetPlugin() {
362
+ try {
363
+ fs.rmSync(this.storagePath, { recursive: true });
364
+ return { result: 1 };
363
365
  }
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 };
366
+ catch (error) {
367
+ this.log.error('Could not reset plugin: ' + error);
368
+ return { result: 0 };
369
+ }
370
+ }
371
+ async getLogs() {
372
+ // Step 1: List Files in Directory
373
+ // Asynchronously list all files in the directory specified by this.storagePath.
374
+ const files = await fs.promises.readdir(this.storagePath);
375
+ // Step 2: Filter Log Files
376
+ // Filter the list of files to include only those with names ending in .log, .log.0.
377
+ const logFiles = files.filter(file => {
378
+ return file.endsWith('.log') || file.endsWith('.log.0');
379
+ });
380
+ // Step 3: Filter out Empty Log Files
381
+ const nonEmptyLogFiles = await Promise.all(logFiles.map(async (file) => {
382
+ const filePath = path_1.default.join(this.storagePath, file);
383
+ const stats = await fs.promises.stat(filePath);
384
+ if (stats.size > 0) {
385
+ return file;
372
386
  }
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');
373
414
  }
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);
415
+ try {
416
+ // Step 7: Archive Zip
417
+ // Archive the Zip instance to the specified log zip file.
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;
394
428
  }
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();
442
- }
429
+ catch (error) {
430
+ // Step 10: Error Handling
431
+ // Log an error if archiving the zip file fails and propagate the error.
432
+ this.log.error('Error while generating log files: ' + error);
433
+ throw error;
443
434
  }
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;
435
+ finally {
436
+ // Step 11: Cleanup
437
+ // Ensure to remove any compressed log files after the operation, regardless of success or failure.
438
+ this.removeCompressedLogs();
439
+ }
440
+ }
441
+ removeCompressedLogs() {
442
+ try {
443
+ if (fs.existsSync(this.logZipFilePath)) {
444
+ fs.unlinkSync(this.logZipFilePath);
453
445
  }
446
+ return true;
447
+ }
448
+ catch {
449
+ return false;
454
450
  }
455
451
  }
456
- // Start the instance of the server
457
- new UiServer();
458
452
  }
459
- // Initialize the server
460
- initServer().catch(err => {
461
- console.error('Failed to initialize the server:', err);
462
- process.exit(1);
463
- });
453
+ // Start the instance of the server
454
+ (() => {
455
+ return new UiServer();
456
+ })();
464
457
  //# 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAsJ;AACtJ,iEAAuE;AACvE,uCAAyB;AACzB,iCAAoD;AACpD,+DAAoD;AACpD,qCAA8B;AAC9B,qDAAyG;AACzG,kDAA0C;AAC1C,gDAAwB;AAExB,MAAM,QAAS,SAAQ,0CAAwB;IACtC,QAAQ,GAAgB,EAAE,CAAC;IAE1B,UAAU,GAAwB,IAAI,CAAC;IACvC,GAAG,CAAqB;IACxB,KAAK,CAAqB;IAC1B,WAAW,GAAW,IAAI,CAAC,qBAAqB,GAAG,eAAe,CAAC;IACnE,sBAAsB,GAAW,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC;IACxE,cAAc,GAAW,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAExD,gBAAgB,GAAY,KAAK,CAAC;IAEnC,MAAM,GAAuB;QAClC,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,UAAU;QAC7B,aAAa,EAAE,IAAI,CAAC,WAAW;QAC/B,kBAAkB,EAAE,CAAC;QACrB,sBAAsB,EAAE,EAAE;QAC1B,oBAAoB,EAAE,EAAE;QACxB,iBAAiB,EAAE,IAAI;KACF,CAAC;IAExB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,GAAG,GAAG,IAAI,cAAQ,CAAC;YACtB,IAAI,EAAE,IAAI,sBAAO,GAAG;YACpB,iBAAiB,EAAE,sDAAsD;YACzE,mBAAmB,EAAE,gEAAgE;YACrF,wBAAwB,EAAE,sDAAsD;YAChF,+BAA+B,EAAE,GAAG;YACpC,8BAA8B,EAAE,IAAI;YACpC,eAAe,EAAE,IAAI;YACrB,QAAQ,EAAE,CAAC;YACX,iBAAiB,EAAE,OAA4B;YAC/C,eAAe,EAAE;gBACf,YAAY,EAAE;oBACZ,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC;oBAC9C,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;oBACxB,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;oBAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;oBACxB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;oBACtB,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;oBACxB,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;oBACtB,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;iBAC7B;gBACD,UAAU,EAAE,MAAM;gBAClB,gBAAgB,EAAE,OAAO;gBACzB,IAAI,EAAE,OAAO;gBACb,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;gBAC1C,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;gBAC1C,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC;gBACjD,QAAQ,EAAE,CAAC,QAAQ,CAAC;aACrB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,cAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,eAAe,GAAG,IAAA,mCAAY,EAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACpI,MAAM,kBAAkB,GAAG,IAAA,mCAAY,EAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACpI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wDAAwD,GAAG,iCAAU,CAAC,CAAC;IACxF,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QAC/C,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAO;QACjB,IAAI,CAAC;YACH,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACpD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;gBAC3E,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,sCAAsC;YAC1E,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iDAAiD,GAAG,KAAK,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3F,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;YACnD,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,MAAM,mCAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrE,mEAAmE;gBACnE,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,UAAU,EAAE,kBAAkB,EAAE,CAAC;oBACtC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;gBAC3B,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;YAEd,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBACzC,IAAI,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC5B,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;yBACvB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;yBAC3E,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACtB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAe,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC5B,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC7E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAe,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC5B,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1I,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAe,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,eAAe;QAC3B,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAe,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACxK,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC;YACH,8CAA8C;YAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAChD,qEAAqE;gBACrE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC1D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,iEAAiE;YACjE,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAElG,6CAA6C;YAC7C,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAEvF,sDAAsD;YACtD,IAAI,aAAa,KAAK,sBAAO,EAAE,CAAC;gBAC9B,gEAAgE;gBAChE,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,cAAc,EAAE,sBAAO,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC9F,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,aAAa,qCAAqC,sBAAO,GAAG,CAAC,CAAC;YACjG,CAAC;YAED,gCAAgC;YAChC,OAAO,iBAAgC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wFAAwF;YACxF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2EAA2E,GAAG,KAAK,CAAC,CAAC;YACpG,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU;QACpB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAgB;QAC/B,uDAAuD;QACvD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,KAAK,+BAAQ,CAAC,KAAK,EAAE,CAAC;YACrD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;;;;;;;OAQd,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvB,MAAM,CAAC,GAAc;YACnB,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE;YAC7B,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE;YAC7B,QAAQ,EAAE,iCAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7C,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEvE,4DAA4D;QAC5D,IAAI,6BAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,6BAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,uDAAuD;QACvD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvB,MAAM,CAAC,GAAa;YAClB,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE;YAC5B,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE;YAC7B,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE;YAC5B,QAAQ,EAAE,iCAAU,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC5C,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,MAAM,CAAC,gBAAgB,EAAE;YAC5D,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;YAC3B,YAAY,EAAE,MAAM,CAAC,gBAAgB,CAAC,mCAAY,CAAC,gBAAgB,CAAC;YACpE,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,kCAAW,CAAC,mBAAmB,CAAC;YACpE,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,mCAAY,CAAC,aAAa,CAAC;YAC7D,qBAAqB,EAAE,MAAM,CAAC,WAAW,CAAC,mCAAY,CAAC,qBAAqB,CAAC;YAC7E,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,mCAAY,CAAC,WAAW,CAAC;YACzD,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,mCAAY,CAAC,iBAAiB,CAAC;YACrE,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE;SACnC,CAAC;QAEF,IAAI,MAAM,CAAC,WAAW,CAAC,mCAAY,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC1D,CAAC,CAAC,cAAc,GAAI,MAAM,CAAC,gBAAgB,CAAC,mCAAY,CAAC,oBAAoB,CAAY,CAAC;QAC5F,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEtE,MAAM,eAAe,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC;QAE9F,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,sBAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,GAAG,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,kCAAkC;QAClC,gFAAgF;QAChF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE1D,2BAA2B;QAC3B,oFAAoF;QACpF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;YACnE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,CAAC;QAEJ,+DAA+D;QAC/D,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAa,CAAC;IACpE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY;QAEhB,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC7F,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAE3C,+BAA+B;QAC/B,kEAAkE;QAClE,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACzF,MAAM,GAAG,GAAG,IAAI,aAAG,EAAE,CAAC;QACtB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtB,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,oCAAoC;QACpC,6DAA6D;QAC7D,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACvF,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC;YACH,sBAAsB;YACtB,0DAA0D;YAC1D,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,aAAa,QAAQ,EAAE,CAAC,CAAC;YACvG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAEvC,wBAAwB;YACxB,gEAAgE;YAChE,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAExD,wBAAwB;YACxB,yDAAyD;YACzD,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACvF,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0BAA0B;YAC1B,wEAAwE;YACxE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,GAAG,KAAK,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,mBAAmB;YACnB,mGAAmG;YACnG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED,mCAAmC;AACnC,CAAC,GAAG,EAAE;IACJ,OAAO,IAAI,QAAQ,EAAE,CAAC;AACxB,CAAC,CAAC,EAAE,CAAC"}
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",
4
+ "version": "4.3.6",
5
5
  "description": "Control Eufy Security from homebridge.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {