From 9493517e63bed3faf674ba564f3d5fa26583148c Mon Sep 17 00:00:00 2001 From: adelamarre Date: Mon, 6 Jun 2022 20:30:51 +0200 Subject: [PATCH] Cleaning --- .eslintrc | 38 - .gitignore | 126 - .gitmodules | 0 .npmignore | 135 - CHANGELOG.md | 126 - LICENSE | 176 - config.schema.json | 374 - homebridge-ui/public/css/style.css | 70 - .../images/homebridge-eufy-security.png | Bin 98498 -> 0 bytes homebridge-ui/public/index.html | 189 - homebridge-ui/public/js/main.js | 318 - homebridge-ui/server.js | 138 - media/Snapshot-Unavailable.png | Bin 56886 -> 0 bytes media/Snapshot-Unavailable.xcf | Bin 433406 -> 0 bytes nodemon.json | 12 - package-lock.json | 7486 ----------------- package.json | 60 - src/accessories/CameraAccessory.ts | 264 - src/accessories/Device.ts | 142 - src/accessories/DoorbellCameraAccessory.ts | 63 - src/accessories/EntrySensorAccessory.ts | 83 - src/accessories/KeypadAccessory.ts | 86 - src/accessories/MotionSensorAccessory.ts | 83 - src/accessories/SmartLockAccessory.ts | 121 - src/accessories/StationAccessory.ts | 240 - src/accessories/configTypes.ts | 35 - src/accessories/ffmpeg.ts | 141 - src/accessories/logger.ts | 40 - src/accessories/streamingDelegate.ts | 540 -- src/config.ts | 20 - src/index.ts | 11 - src/interfaces.ts | 13 - src/platform.ts | 435 - src/settings.ts | 9 - tsconfig.json | 26 - 35 files changed, 11600 deletions(-) delete mode 100644 .eslintrc delete mode 100644 .gitignore delete mode 100644 .gitmodules delete mode 100644 .npmignore delete mode 100644 CHANGELOG.md delete mode 100644 LICENSE delete mode 100644 config.schema.json delete mode 100644 homebridge-ui/public/css/style.css delete mode 100644 homebridge-ui/public/images/homebridge-eufy-security.png delete mode 100644 homebridge-ui/public/index.html delete mode 100644 homebridge-ui/public/js/main.js delete mode 100644 homebridge-ui/server.js delete mode 100644 media/Snapshot-Unavailable.png delete mode 100644 media/Snapshot-Unavailable.xcf delete mode 100644 nodemon.json delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 src/accessories/CameraAccessory.ts delete mode 100644 src/accessories/Device.ts delete mode 100644 src/accessories/DoorbellCameraAccessory.ts delete mode 100644 src/accessories/EntrySensorAccessory.ts delete mode 100644 src/accessories/KeypadAccessory.ts delete mode 100644 src/accessories/MotionSensorAccessory.ts delete mode 100644 src/accessories/SmartLockAccessory.ts delete mode 100644 src/accessories/StationAccessory.ts delete mode 100644 src/accessories/configTypes.ts delete mode 100644 src/accessories/ffmpeg.ts delete mode 100644 src/accessories/logger.ts delete mode 100644 src/accessories/streamingDelegate.ts delete mode 100644 src/config.ts delete mode 100644 src/index.ts delete mode 100644 src/interfaces.ts delete mode 100644 src/platform.ts delete mode 100644 src/settings.ts delete mode 100644 tsconfig.json diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 8656dbb9..00000000 --- a/.eslintrc +++ /dev/null @@ -1,38 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended" // uses the recommended rules from the @typescript-eslint/eslint-plugin - ], - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module" - }, - "ignorePatterns": [ - "dist" - ], - "rules": { - "quotes": ["warn", "single"], - "indent": ["warn", 2, { "SwitchCase": 1 }], - "semi": ["off"], - "comma-dangle": ["warn", "always-multiline"], - "dot-notation": "off", - "eqeqeq": "warn", - "curly": ["warn", "all"], - "brace-style": ["warn"], - "prefer-arrow-callback": ["warn"], - "max-len": ["warn", 140], - "no-console": ["warn"], // use the provided Homebridge log method instead - "no-non-null-assertion": ["off"], - "comma-spacing": ["error"], - "no-multi-spaces": ["warn", { "ignoreEOLComments": true }], - "lines-between-class-members": ["warn", "always", {"exceptAfterSingleLine": true}], - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/semi": ["warn"], - "@typescript-eslint/member-delimiter-style": ["warn"], - "@typescript-eslint/no-unused-vars": "off" - } -} diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ac2383ef..00000000 --- a/.gitignore +++ /dev/null @@ -1,126 +0,0 @@ -# Ignore compiled code -dist - -# ------------- Defaults ------------- # - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test -.vscode - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.pnp.* - -.npmrc -.history - -.github/workflows/ diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e69de29b..00000000 diff --git a/.npmignore b/.npmignore deleted file mode 100644 index b97a6c11..00000000 --- a/.npmignore +++ /dev/null @@ -1,135 +0,0 @@ -# Ignore source code -src - -# ------------- Defaults ------------- # - -# gitHub actions -.github - -# eslint -.eslintrc - -# typescript -tsconfig.json - -# vscode -.vscode - -# nodemon -nodemon.json - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.pnp.* \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 6c81249a..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,126 +0,0 @@ -# Change Log - -## 1.0.4 (27/10/2021) - -### Changed -- Upgrade to the latest lib and fix the minor version for the critical one - -## 1.0.3 (26/10/2021) - -### Changed -- Upgrade to the latest bropat/eufy-security-client lib (1.2.1) - -## 1.0.2 (18/10/2021) - -### Fixed -- [Bug]: can’t login after plug-in remove #254 - -## 1.0.0 (09/02/2021) - -### Added -- Increase compatibility with new Eufy Camera devices -- New Config UI with onboarding -- OTP attached to an Eufy Account is supported -- Adding SmartLock (getting the status lock/unlock only) -- Hability to use Camera as a motion sensor or as a camera streaming device -- Audio support on LiveStream - -### Changed -- Upgrade to the latest bropat/eufy-security-client lib (1.1.2) -- Improving debug collection -- Code optimisation - -### Removed -- IP LAN address is no more required as config settings - -### Fixed -- Cloud Livestream on doorbell can stuck -- Handle duplicate when using Guest Eufy Account -- Updating some dep for security reason -- Multiple typo fix -- Sometimes battery status is not updated -- Fix push notification issue on new indoor outdoor camera device #184 -- Fixing issue #190 -- As @bropat notice, we need to clean function reference which will be deprecated soon (bropat/eufy-security-client#40) - -## 0.2.13 (07-26-2021) - -### Changes - -- Motion Sensor Fix, trigger when motion is detected - -## 0.2.12 (07-25-2021) - -### Changes - -- Improvements to the motion sensor trigger - -## 0.2.11 (07-19-2021) - -### Changes - -- Improvements to handing alarm events -- Many other improvements that were in the dev npm version - -## 0.2.5 (06-26-2021) - -### Changes - -- Improvements to handing alarm events -- Other small bug fixes - -## 0.2.4 (06-21-2021) - -### Changes - -- Improvements to the doorbell motion sensor feature -- Other small bug fixes - - -### Changes - -- Fixed doorbell ringing notification -- Added switch to enable/disable motion detection for Cameras (not doorbell) -- Better logging for debugging the doorbell - -## 0.2.3 (06-20-2021) - -### Changes - -- Fixed doorbell ringing notification -- Added switch to enable/disable motion detection for Cameras (not doorbell) -- Better logging for debugging the doorbell - -## 0.2.2 (06-14-2021) - -### Changes - -- Added switch to turn cameras on/off using a switch. -- Added logging for the doorbell to help solve issues. - -## 0.2.0 (06-12-2021) - -### Changes - -- Doorbell now can stream video! More testing might be needed since there are a few differnt models supported. - -## 0.1.3 (06-11-2021) - -### Changes - -- Improvements to the doorbell functionality. - -## 0.1.2 (06-11-2021) - -### Changes - -- Fixed push notifications for security system -- Added logging for hubs. - -## 0.1.1 (06-10-2021) - -### Changes - -- Added support for doorbell (ring notificaitons only) -- Added support for security keypad (only battery notifications at this time) -- Other small bug fixes diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 2bb9ad24..00000000 --- a/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/config.schema.json b/config.schema.json deleted file mode 100644 index 8d5e2b1a..00000000 --- a/config.schema.json +++ /dev/null @@ -1,374 +0,0 @@ -{ - "pluginAlias": "EufySecurity", - "pluginType": "platform", - "singular": true, - "customUi": true, - "schema": { - "type": "object", - "properties": { - "username": { - "title": "Eufy username", - "type": "string", - "required": true, - "discription": "Eufy username/email" - }, - "password": { - "title": "Eufy Password", - "type": "string", - "required": true, - "discription": "Eufy password" - }, - "enableDetailedLogging": { - "title": "Enable Detailed Logging?", - "type": "number", - "default": 0, - "oneOf": [ - { - "title": "Normal", - "enum": [ - 0 - ] - }, - { - "title": "Debug", - "enum": [ - 1 - ] - }, - { - "title": "Insane", - "enum": [ - 2 - ] - } - ], - "description": "Becarefull Debug and Insane may contain credential and personnal information which could be use to login into your Eufy Account", - "required": true - }, - "enableCamera": { - "title": "Camera device seen as Camera", - "description": "Camera seen as Motion Sensor by default, enable this setting to transform as Camera", - "type": "boolean", - "required": false - }, - "pollingIntervalMinutes": { - "title": "Polling Interval (in minutes) ", - "type": "number", - "required": false - }, - "ignoreStations": { - "title": "Ignoring stations", - "type": "array", - "required": false, - "items": { - "type": "string" - } - }, - "ignoreDevices": { - "title": "Ignoring devices", - "type": "array", - "required": false, - "items": { - "type": "string" - } - }, - "hkHome": { - "title": "HomeKit Home", - "type": "number", - "default": 1, - "oneOf": [ - { - "title": "Home", - "enum": [ - 1 - ] - }, - { - "title": "Away", - "enum": [ - 0 - ] - }, - { - "title": "Schedule", - "enum": [ - 2 - ] - }, - { - "title": "Custom 1", - "enum": [ - 3 - ] - }, - { - "title": "Custom 2", - "enum": [ - 4 - ] - }, - { - "title": "Custom 3", - "enum": [ - 5 - ] - }, - { - "title": "Geofencing", - "enum": [ - 47 - ] - }, - { - "title": "Disarmed", - "enum": [ - 63 - ] - } - ], - "required": false - }, - "hkAway": { - "title": "HomeKit Away", - "type": "number", - "default": 0, - "oneOf": [ - { - "title": "Home", - "enum": [ - 1 - ] - }, - { - "title": "Away", - "enum": [ - 0 - ] - }, - { - "title": "Schedule", - "enum": [ - 2 - ] - }, - { - "title": "Custom 1", - "enum": [ - 3 - ] - }, - { - "title": "Custom 2", - "enum": [ - 4 - ] - }, - { - "title": "Custom 3", - "enum": [ - 5 - ] - }, - { - "title": "Geofencing", - "enum": [ - 47 - ] - }, - { - "title": "Disarmed", - "enum": [ - 63 - ] - } - ], - "required": false - }, - "hkNight": { - "title": "HomeKit Night", - "type": "number", - "default": 3, - "oneOf": [ - { - "title": "Home", - "enum": [ - 1 - ] - }, - { - "title": "Away", - "enum": [ - 0 - ] - }, - { - "title": "Schedule", - "enum": [ - 2 - ] - }, - { - "title": "Custom 1", - "enum": [ - 3 - ] - }, - { - "title": "Custom 2", - "enum": [ - 4 - ] - }, - { - "title": "Custom 3", - "enum": [ - 5 - ] - }, - { - "title": "Geofencing", - "enum": [ - 47 - ] - }, - { - "title": "Disarmed", - "enum": [ - 63 - ] - } - ], - "required": false - }, - "hkOff": { - "title": "HomeKit Off", - "type": "number", - "default": 63, - "oneOf": [ - { - "title": "Home", - "enum": [ - 1 - ] - }, - { - "title": "Away", - "enum": [ - 0 - ] - }, - { - "title": "Schedule", - "enum": [ - 2 - ] - }, - { - "title": "Custom 1", - "enum": [ - 3 - ] - }, - { - "title": "Custom 2", - "enum": [ - 4 - ] - }, - { - "title": "Custom 3", - "enum": [ - 5 - ] - }, - { - "title": "Geofencing", - "enum": [ - 47 - ] - }, - { - "title": "Disarmed", - "enum": [ - 63 - ] - } - ], - "required": false - } - } - }, - "layout": [ - { - "type": "flex", - "flex-flow": "row wrap", - "items": [ - "username", - { - "key": "password", - "type": "password" - } - ] - }, - { - "type": "fieldset", - "title": "HomeKit Security Mode Settings", - "description": "Change how each mode in the HomeKit security system is mapped to the modes in the Eufy App", - "expandable": true, - "expanded": false, - "items": [ - "hkHome", - "hkAway", - "hkNight", - "hkOff" - ] - }, - { - "type": "fieldset", - "title": "Optional Settings", - "expandable": true, - "expanded": false, - "items": [ - "enableDetailedLogging", - "enableCamera", - "pollingIntervalMinutes", - { - "key": "ignoreStations", - "add": "Add Another Device ID", - "type": "array", - "items": [ - { - "type": "div", - "displayFlex": true, - "flex-direction": "row", - "items": [ - { - "key": "ignoreStations[]", - "placeholder": "Device ID" - } - ] - } - ] - }, - { - "key": "ignoreDevices", - "add": "Add Another Device ID", - "type": "array", - "items": [ - { - "type": "div", - "displayFlex": true, - "flex-direction": "row", - "items": [ - { - "key": "ignoreDevices[]", - "placeholder": "Device ID" - } - ] - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/homebridge-ui/public/css/style.css b/homebridge-ui/public/css/style.css deleted file mode 100644 index 9df7274e..00000000 --- a/homebridge-ui/public/css/style.css +++ /dev/null @@ -1,70 +0,0 @@ -.hidden { - display: none; -} - -.divTable { - display: table; - width: 100%; -} - -.divTableRow { - display: table-row; -} - -.checked { - color: #888; - text-decoration: line-through; - font-style: italic; -} - -div.logo { - text-align: center; - margin: 0 0 5px 0; -} - -image.logo { - width: 40%; - text-align: center; - margin: 0 auto; -} - -.text-center{ - text-align: center !important; -} - -/* - .checked div.divTableRow input[type="checkbox"] { - display: none; - } - - .checked div.divTableRow:first-child input[type="checkbox"] { - display: block; - } */ - -.divTableHeading { - background-color: #0b6288; - display: table-header-group; -} - -.divTableCell, .divTableHead { - border: 1px solid #eee; - display: table-cell; - padding: 3px 10px; -} - -.divTableHeading { - background-color: #0b6288; - display: table-header-group; - color: #fff; - font-weight: bold; -} - -.divTableFoot { - background-color: #EEE; - display: table-footer-group; - font-weight: bold; -} - -.divTableBody { - display: table-row-group; -} \ No newline at end of file diff --git a/homebridge-ui/public/images/homebridge-eufy-security.png b/homebridge-ui/public/images/homebridge-eufy-security.png deleted file mode 100644 index 1cb75a190a540577e30f9293158f0f53e91e09d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98498 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­?)O_fk}lX+ZHPEUHVxm{nQ<~^HJmEq$uxf0~b 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
P>XGCi+)tlB;(iVssft@15sXZpow@Z?Qs7DJNl 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 - -
- - -

- -

- Welcome to
- Eufy Security Plugin -

-
Homebridge plugin for Eufy Security Devices
-
- - - - - - - -
- - \ No newline at end of file diff --git a/homebridge-ui/public/js/main.js b/homebridge-ui/public/js/main.js deleted file mode 100644 index 4811c506..00000000 --- a/homebridge-ui/public/js/main.js +++ /dev/null @@ -1,318 +0,0 @@ - -var pluginConfig = { - platform: 'EufySecurity', -}; - -function updateFormFromConfig() { - // populate the form - - document.getElementById('usernameInput').value = pluginConfig.username || ''; - document.getElementById('passwordInput').value = pluginConfig.password || ''; - document.getElementById('usernameInput1').value = pluginConfig.username || ''; - document.getElementById('passwordInput1').value = pluginConfig.password || ''; - document.getElementById('enableCamera').checked = pluginConfig.enableCamera || ''; - document.getElementById('pollingIntervalMinutes').value = !pluginConfig.pollingIntervalMinutes && pluginConfig.pollingIntervalMinutes !== 0 ? 30 : pluginConfig.pollingIntervalMinutes; - document.getElementById('hkHome').value = pluginConfig.hkHome || "1"; - document.getElementById('hkAway').value = pluginConfig.hkAway || "0"; - document.getElementById('hkNight').value = pluginConfig.hkNight || "3"; - document.getElementById('hkOff').value = pluginConfig.hkOff || "63"; - document.getElementById('enableDetailedLogging').checked = pluginConfig.enableDetailedLogging || ''; - document.getElementById('ignoreStations').value = pluginConfig.ignoreStations || []; - document.getElementById('ignoreDevices').value = pluginConfig.ignoreDevices || []; - homebridge.fixScrollHeight(); -} - -function updateConfigFromForm() { - pluginConfig.username = document.getElementById('usernameInput').value; - pluginConfig.password = document.getElementById('passwordInput').value; - pluginConfig.enableCamera = document.getElementById('enableCamera').checked; - pluginConfig.pollingIntervalMinutes = parseInt(document.getElementById('pollingIntervalMinutes').value); - pluginConfig.hkHome = parseInt(document.getElementById('hkHome').value); - pluginConfig.hkAway = parseInt(document.getElementById('hkAway').value); - pluginConfig.hkNight = parseInt(document.getElementById('hkNight').value); - pluginConfig.hkOff = parseInt(document.getElementById('hkOff').value); - pluginConfig.enableDetailedLogging = parseInt(document.getElementById('enableDetailedLogging').checked * 1); - pluginConfig.ignoreStations = document.getElementById('ignoreStations').value.split(","); - pluginConfig.ignoreDevices = document.getElementById('ignoreDevices').value.split(","); -} - -function adjustPollingValue() { - const pollingValue = document.getElementById('pollingIntervalMinutes').value; - document.getElementById('pollingValue').innerHTML = pollingValue + ' minutes'; -} - -async function AddOrRemoveStationsIgnoreList(item) { - pluginConfig.ignoreStations.indexOf(item) === -1 ? pluginConfig.ignoreStations.push(item) : pluginConfig.ignoreStations.splice(pluginConfig.ignoreStations.indexOf(item), 1); - document.getElementById('ignoreStations').value = pluginConfig.ignoreStations.toString(); - await homebridge.updatePluginConfig([pluginConfig]); - await homebridge.savePluginConfig(); -} - -async function AddOrRemoveDevicesIgnoreList(item) { - pluginConfig.ignoreDevices.indexOf(item) === -1 ? pluginConfig.ignoreDevices.push(item) : pluginConfig.ignoreDevices.splice(pluginConfig.ignoreDevices.indexOf(item), 1); - document.getElementById('ignoreDevices').value = pluginConfig.ignoreDevices.toString(); - await homebridge.updatePluginConfig([pluginConfig]); - await homebridge.savePluginConfig(); -} - -function isStationsIgnored(uniqueId) { - const r = pluginConfig.ignoreStations.find((o, i, a) => { - return (uniqueId === o) ? true : false; - }); - return (r) ? true : false; -} - -function isDevicesIgnored(uniqueId) { - const r = pluginConfig.ignoreDevices.find((o, i, a) => { - return (uniqueId === o) ? true : false; - }); - return (r) ? true : false; -} - -async function list_stations_devices(stations) { - - const s_div = document.getElementById('stations'); - - if (!stations) { - s_div.innerHTML = '

Error: Nothing to retreive!

'; - return; - } - - pluginConfig.username = document.getElementById('usernameInput1').value; - pluginConfig.password = document.getElementById('passwordInput1').value; - document.getElementById('usernameInput').value = document.getElementById('usernameInput1').value; - document.getElementById('passwordInput').value = document.getElementById('passwordInput1').value; - - pluginConfig.ignoreStations = (typeof pluginConfig.ignoreStations === 'object') ? pluginConfig.ignoreStations : []; - pluginConfig.ignoreDevices = (typeof pluginConfig.ignoreDevices === 'object') ? pluginConfig.ignoreDevices : []; - - await homebridge.updatePluginConfig([pluginConfig]); - await homebridge.savePluginConfig(); - - const t1 = document.createElement("div"); - t1.setAttribute('class', 'divTable'); - - const h1 = document.createElement("div"); - h1.setAttribute('class', 'divTableHeading'); - - var r1 = document.createElement("div"); - r1.setAttribute('class', 'divTableRow'); - r1.innerHTML = ` -
Name
-
Serial Number
-
Type
-
Ignore?
- `; - h1.appendChild(r1); - t1.appendChild(h1); - - stations.forEach(function (item) { - - const checked = (isStationsIgnored(item.uniqueId)) ? ' checked' : ''; - - const b1 = document.createElement("div"); - b1.setAttribute('class', 'divTableBody' + checked); - b1.setAttribute('id', `s_${item.uniqueId}`); - - var r1 = document.createElement("div"); - - r1.setAttribute('class', 'divTableRow'); - - r1.innerHTML = ` -
${item.displayName}
-
${item.uniqueId}
-
${item.type}
-
- `; - b1.appendChild(r1); - - item.devices.forEach(function (item) { - - if (item.ignore) { - AddOrRemoveDevicesIgnoreList(item.uniqueId); - } - var r2 = document.createElement("div"); - const checked = (isDevicesIgnored(item.uniqueId)) ? ' checked' : ''; - r2.setAttribute('class', 'divTableRow' + checked); - r2.setAttribute('id', `d_${item.uniqueId}`); - r2.innerHTML = ` -
|-- ${item.displayName}
-
${item.uniqueId}
-
${item.type}
-
- `; - b1.appendChild(r2); - }); - - t1.appendChild(b1); - }); - - s_div.appendChild(t1); - - stations.forEach(function (item) { - - document.getElementById(`st_${item.uniqueId}`).addEventListener('change', async e => { - if (e.target.checked) { - document.getElementById(`s_${item.uniqueId}`).setAttribute('class', 'divTableBody checked'); - } else { - document.getElementById(`s_${item.uniqueId}`).setAttribute('class', 'divTableBody'); - } - await AddOrRemoveStationsIgnoreList(item.uniqueId); - }); - - item.devices.forEach(function (item) { - - document.getElementById(`dev_${item.uniqueId}`).addEventListener('change', async e => { - if (e.target.checked) { - document.getElementById(`d_${item.uniqueId}`).setAttribute('class', 'divTableRow checked'); - - } else { - document.getElementById(`d_${item.uniqueId}`).setAttribute('class', 'divTableRow'); - } - await AddOrRemoveDevicesIgnoreList(item.uniqueId); - }); - }); - - }); -} - -(async () => { - // get the plugin config blocks (this returns an array) - const pluginConfigBlocks = await homebridge.getPluginConfig(); - - if (!pluginConfigBlocks.length || !pluginConfigBlocks[0].username || !pluginConfigBlocks[0].password) { - document.getElementById('setupRequired').style.display = 'block'; - if (pluginConfigBlocks[0]) - pluginConfig = pluginConfigBlocks[0]; - updateFormFromConfig(); - } else { - pluginConfig = pluginConfigBlocks[0]; - updateFormFromConfig(); - document.getElementById('setupComplete').style.display = 'block'; - } - - adjustPollingValue() -})(); - -// watch for changes to the config form -document.getElementById('configForm').addEventListener('change', async () => { - // extract the values from the form - stored in var pluginConfig. - updateConfigFromForm(); - adjustPollingValue() - - // send the current value to the UI. - await homebridge.updatePluginConfig([pluginConfig]); - await homebridge.savePluginConfig(); -}); - - -document.getElementById('pollingIntervalMinutes').addEventListener('input', adjustPollingValue); - - -// step 1 submit handler -document.getElementById('advanced').addEventListener('click', async (e) => { - const expandable = document.getElementById('expandable'); - - if (expandable.classList.contains('hidden')) { - expandable.classList.remove('hidden') - e.target.getElementsByTagName('i')[0].classList.remove('fa-chevron-right') - e.target.getElementsByTagName('i')[0].classList.add('fa-chevron-down') - } else { - expandable.classList.add('hidden') - e.target.getElementsByTagName('i')[0].classList.add('fa-chevron-right') - e.target.getElementsByTagName('i')[0].classList.remove('fa-chevron-down') - } -}); - - -// skip -document.getElementById('skip').addEventListener('click', async () => { - document.getElementById('step2').style.display = 'none'; - document.getElementById('setupRequired').style.display = 'none'; - document.getElementById('setupComplete').style.display = 'block'; -}); - - -// skip2 -document.getElementById('skip2').addEventListener('click', async () => { - document.getElementById('step2').style.display = 'none'; - document.getElementById('setupRequired').style.display = 'none'; - document.getElementById('setupComplete').style.display = 'block'; -}); - - -// startOver -document.getElementById('startOver').addEventListener('click', async () => { - document.getElementById('setupRequired').style.display = 'block'; - document.getElementById('step2').style.display = 'none'; - document.getElementById('setupComplete').style.display = 'none'; -}); - -// step 1 submit handler -document.getElementById('step1Submit').addEventListener('click', async () => { - const usernameValue = document.getElementById('usernameInput1').value; - const passwordValue = document.getElementById('passwordInput1').value; - - if (!usernameValue || !passwordValue) { - homebridge.toast.error('Please enter your username and password.', 'Error'); - return; - } - - document.getElementById('step1Submit').setAttribute('disabled', 'disabled'); - - try { - homebridge.showSpinner() - const response = await homebridge.request('/request-otp', { username: usernameValue, password: passwordValue }); - homebridge.hideSpinner() - if (response.result == 0) { - homebridge.toast.error("Wrong username or password"); - return; - } - document.getElementById('step1').style.display = 'none'; - if (response.result == 1) - document.getElementById('step2').style.display = 'block'; - if (response.result == 2) { - document.getElementById('step3').style.display = 'block'; - await list_stations_devices(response.stations); - } - } catch (e) { - homebridge.hideSpinner() - homebridge.toast.error(e.message, 'Error'); - } - - document.getElementById('step1Submit').removeAttribute('disabled'); -}); - -// step 2 submit handler -document.getElementById('step2Submit').addEventListener('click', async () => { - const otpValue = document.getElementById('otpInput').value; - - if (!otpValue) { - homebridge.toast.error('Please enter a valid OTP code.', 'Error'); - return; - } - - document.getElementById('step2Submit').setAttribute('disabled', 'disabled'); - - try { - homebridge.showSpinner() - const response = await homebridge.request('/check-otp', { code: otpValue }); - document.getElementById('step2').style.display = 'none'; - - homebridge.hideSpinner() - if (response.result == 0) { - homebridge.toast.error("Wrong OTP"); - document.getElementById('step1').style.display = 'block'; - } - if (response.result == 2) { - document.getElementById('step3').style.display = 'block'; - await list_stations_devices(response.stations); - } - - } catch (e) { - homebridge.hideSpinner() - homebridge.toast.error(e.error || e.message, 'Error'); - } - - document.getElementById('step2Submit').removeAttribute('disabled'); -}); diff --git a/homebridge-ui/server.js b/homebridge-ui/server.js deleted file mode 100644 index 3cc0e336..00000000 --- a/homebridge-ui/server.js +++ /dev/null @@ -1,138 +0,0 @@ -const { EufySecurity, DeviceType } = require('eufy-security-client'); -const { HomebridgePluginUiServer, RequestError } = require('@homebridge/plugin-ui-utils'); - -const bunyan = require('bunyan'); -const bunyanDebugStream = require('bunyan-debug-stream'); -const plugin = require('../package.json'); - - -class UiServer extends HomebridgePluginUiServer { - constructor() { - super(); - - this.driver; - - const storagePath = this.homebridgeStoragePath; - this.log = bunyan.createLogger({ - name: '[' + plugin.version + ']', - hostname: '', - streams: [{ - level: 'debug', - type: 'raw', - stream: bunyanDebugStream({ - forceColor: true, - showProcess: false, - showPid: false, - showDate: false, - }), - }], - serializers: bunyanDebugStream.serializers, - }); - - this.config = { - country: 'US', - language: 'en', - persistentDir: storagePath, - p2pConnectionSetup: 0, - pollingIntervalMinutes: 10, - eventDurationSeconds: 10, - }; - - // create request handlers - this.onRequest('/request-otp', this.requestOtp.bind(this)); - this.onRequest('/check-otp', this.checkOtp.bind(this)); - - // must be called when the script is ready to accept connections - this.ready(); - } - - - /** - * Handle requests sent to /request-otp - */ - async requestOtp(body) { - - this.config['username'] = body.username; - this.config['password'] = body.password; - - this.driver = new EufySecurity(this.config, this.log); - - await this.driver.connect(); - - if (this.driver.api.token && this.driver.connected == true) { - await this.driver.refreshCloudData(); - const stations = await this.getStations(); - return { result: 2, stations: stations }; // Connected - } - - if (this.driver.api.token && this.driver.connected == false) { - return { result: 1 }; // OTP needed - } - - if (!this.driver.api.token && this.driver.connected == false) { - return { result: 0 }; // Wrong username and/or password - } - - } - - async getStations() { - - const Eufy_stations = await this.driver.getStations(); - const Eufy_devices = await this.driver.getDevices(); - - const stations = []; - - for (const station of Eufy_stations) { - - const object = { - uniqueId: station.getSerial(), - displayName: station.getName(), - type: DeviceType[station.getDeviceType()], - devices: [], - } - - stations.push(object); - } - - for (const device of Eufy_devices) { - - const object = { - uniqueId: device.getSerial(), - displayName: device.getName(), - type: DeviceType[device.getDeviceType()], - station: device.getStationSerial(), - } - - stations.find((o, i, a) => { - if (o.uniqueId === object.station) - a[i].devices.push(object); - }); - } - - return stations; - } - - /** - * Handle requests sent to /check-otp - */ - async checkOtp(body) { - - await this.driver.connect(body.code); - - if (this.driver.api.token && this.driver.connected == true) { - await this.driver.refreshData(); - const stations = await this.getStations(); - return { result: 2, stations: stations }; // Connected - } - - if (!this.driver.api.token && this.driver.connected == false) { - return { result: 0 }; // Wrong OTP - } - - } -} - -// start the instance of the class -(() => { - return new UiServer; -})(); diff --git a/media/Snapshot-Unavailable.png b/media/Snapshot-Unavailable.png deleted file mode 100644 index fb5425935311ad5db257c264d6f55fe0309f81d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56886 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 UwLz=0#kyWFcgdVnvs{D!1e&Le4*&oF diff --git a/media/Snapshot-Unavailable.xcf b/media/Snapshot-Unavailable.xcf deleted file mode 100644 index a8af9e39938e882abe1b09cd2c8ebea29a60b96d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 433406 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 MC)ZW}{*kW#31-;?;s5{u diff --git a/nodemon.json b/nodemon.json deleted file mode 100644 index 6dd7df6c..00000000 --- a/nodemon.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "watch": [ - "src" - ], - "ext": "ts", - "ignore": [], - "exec": "tsc && homebridge -I -D", - "signal": "SIGTERM", - "env": { - "NODE_OPTIONS": "--trace-warnings" - } -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 88a1f465..00000000 --- a/package-lock.json +++ /dev/null @@ -1,7486 +0,0 @@ -{ - "name": "homebridge-eufy-security", - "version": "1.0.8", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "homebridge-eufy-security", - "version": "1.0.8", - "license": "Apache-2.0", - "dependencies": { - "@homebridge/plugin-ui-utils": "0.0.19", - "bunyan": "^1.8.15", - "bunyan-debug-stream": "^2.0.0", - "eufy-security-client": "~1.5.0", - "ffmpeg-for-homebridge": "0.0.9", - "pick-port": "^1.0.0" - }, - "devDependencies": { - "@types/bunyan": "^1.8.7", - "@types/node": "^16.11.6", - "@typescript-eslint/eslint-plugin": "^5.2.0", - "@typescript-eslint/parser": "^5.2.0", - "eslint": "^8.1.0", - "homebridge": "^1.3.5", - "nodemon": "^2.0.14", - "rimraf": "^3.0.2", - "ts-node": "^10.4.0", - "typescript": "^4.4.4" - }, - "engines": { - "homebridge": ">=1.3.0", - "node": ">=12.0.0" - } - }, - "node_modules/@cospired/i18n-iso-languages": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@cospired/i18n-iso-languages/-/i18n-iso-languages-3.1.1.tgz", - "integrity": "sha512-8X3tP5oWBJjRo5nuaeqA5tXIDUvfBTO81coPLVPlyXAn1oe9fjDsvlCenblbD2WKIfVlk+RmU5+6yl5oVB1TKQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@homebridge/ciao": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@homebridge/ciao/-/ciao-1.1.3.tgz", - "integrity": "sha512-p9WgcSYUj3rtC1g3ywJpKxvIZXPkkv88JxbuW6idMHrUOqDMJlWIsWF0yXynQf8Z28gA0j6AJN9EnAr+hg5gNA==", - "dev": true, - "dependencies": { - "debug": "^4.3.2", - "fast-deep-equal": "^3.1.3", - "source-map-support": "^0.5.20", - "tslib": "^2.3.1" - }, - "bin": { - "ciao-bcs": "lib/bonjour-conformance-testing.js" - } - }, - "node_modules/@homebridge/plugin-ui-utils": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@homebridge/plugin-ui-utils/-/plugin-ui-utils-0.0.19.tgz", - "integrity": "sha512-axFX7lN2Yd7bz/6SlD7dzq5sY/N9+XYuLHPukuiyHQRDtNMRL1uDqJhOx6RVaN2tYDHB75h7YxRQWP7U44Mgzg==" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", - "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "node_modules/@types/bunyan": { - "version": "1.8.7", - "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.7.tgz", - "integrity": "sha512-jaNt6xX5poSmXuDAkQrSqx2zkR66OrdRDuVnU8ldvn3k/Ci/7Sf5nooKspQWimDnw337Bzt/yirqSThTjvrHkg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "node_modules/@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz", - "integrity": "sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "5.2.0", - "@typescript-eslint/scope-manager": "5.2.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz", - "integrity": "sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.2.0", - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/typescript-estree": "5.2.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.2.0.tgz", - "integrity": "sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.2.0", - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/typescript-estree": "5.2.0", - "debug": "^4.3.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz", - "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/visitor-keys": "5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz", - "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz", - "integrity": "sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/visitor-keys": "5.2.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz", - "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.2.0", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bonjour-hap": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/bonjour-hap/-/bonjour-hap-3.6.3.tgz", - "integrity": "sha512-qyLU96ICCYbpOFiMCjA3aNYH5Jc83XH1YX6+EXWukyyiNXzXH2LZv8AVmGW33FceF3gfUM4jYoKX2xChtNDUnA==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "deep-equal": "^2.0.5", - "ip": "^1.1.5", - "multicast-dns": "^7.2.3", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/bunyan-debug-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bunyan-debug-stream/-/bunyan-debug-stream-2.0.0.tgz", - "integrity": "sha512-Ovl43CJ7nUwalLzdXc6E1nGIy6ift9Z/QpYXUtsjpDAg35ZFKXifKNZyfpMGuN3N7ijLLqbnxPsMMHsXDdXa9A==", - "dependencies": { - "colors": "^1.0.3", - "exception-formatter": "^1.0.4" - }, - "engines": { - "node": ">=0.10.1" - }, - "peerDependencies": { - "bunyan": "*" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "devOptional": true - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", - "isarray": "^2.0.5", - "object-is": "^1.1.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/diacritics": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz", - "integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E=" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-packet": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.0.tgz", - "integrity": "sha512-Nce7YLu6YCgWRvOmDBsJMo9M5/jV3lEZ5vUWnWXYmwURvPylHvq7nkDWhNmk1ZQoZZOP7oQh/S0lSxbisKOfHg==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", - "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", - "dev": true, - "dependencies": { - "acorn": "^8.5.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eufy-security-client": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/eufy-security-client/-/eufy-security-client-1.5.0.tgz", - "integrity": "sha512-1Dqkc50+an3L0BeTX7UmXzVtz/L5Q1Eexcj5dI33MF92IuX1W2NUQyAlf5ivu0cuc2EchSyeUJTDXPAgXhe6Xg==", - "dependencies": { - "@cospired/i18n-iso-languages": "^3.1.1", - "crypto-js": "^4.1.1", - "fs-extra": "^10.0.0", - "got": "^11.8.3", - "i18n-iso-countries": "^7.2.0", - "node-rsa": "^1.1.1", - "protobuf-typescript": "^6.8.8", - "qs": "^6.10.2", - "sweet-collections": "^1.1.0", - "tiny-typed-emitter": "^2.1.0", - "ts-log": "^2.2.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/eufy-security-client/node_modules/@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/eufy-security-client/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eufy-security-client/node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eufy-security-client/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eufy-security-client/node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/eufy-security-client/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eufy-security-client/node_modules/got": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", - "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/eufy-security-client/node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/eufy-security-client/node_modules/keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/eufy-security-client/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eufy-security-client/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eufy-security-client/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eufy-security-client/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eufy-security-client/node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/exception-formatter": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exception-formatter/-/exception-formatter-1.0.7.tgz", - "integrity": "sha512-zV45vEsjytJrwfGq6X9qd1Ll56cW4NC2mhCO6lqwMk4ZpA1fZ6C3UiaQM/X7if+7wZFmCgss3ahp9B/uVFuLRw==", - "dependencies": { - "colors": "^1.0.3" - }, - "engines": { - "node": ">=0.10.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-srp-hap": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fast-srp-hap/-/fast-srp-hap-2.0.4.tgz", - "integrity": "sha512-lHRYYaaIbMrhZtsdGTwPN82UbqD9Bv8QfOlKs+Dz6YRnByZifOh93EYmf2iEWFtkOEIqR2IK8cFD0UN5wLIWBQ==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/ffmpeg-for-homebridge": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ffmpeg-for-homebridge/-/ffmpeg-for-homebridge-0.0.9.tgz", - "integrity": "sha512-HmUatYfEf0dI7kbSh2vGLkJCuY7YLJODPn64Ng/Fj8YjpPbrLFGQBzvdQFBUC6RgGpvqEdlgZNQR8N9wEZuziQ==", - "hasInstallScript": true, - "dependencies": { - "detect-libc": "^1.0.3", - "dotenv": "^8.2.0", - "mkdirp": "^1.0.3", - "simple-get": "^3.1.0", - "tar": "^6.0.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/futoin-hkdf": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", - "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/got/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "node_modules/hap-nodejs": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/hap-nodejs/-/hap-nodejs-0.9.6.tgz", - "integrity": "sha512-5I7bXDa2eizDpPSybJB5W+py7O1NxIDVZEKukX97gDhkc8d9TkVWJw+kgC4qr8qeLjQxqG/ZTr8BLsrtYmJaKw==", - "dev": true, - "dependencies": { - "@homebridge/ciao": "~1.1.2", - "bonjour-hap": "~3.6.3", - "debug": "^4.3.2", - "fast-srp-hap": "2.0.4", - "futoin-hkdf": "~1.4.2", - "ip": "^1.1.5", - "node-persist": "^0.0.11", - "source-map-support": "^0.5.20", - "tslib": "^2.3.1", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/homebridge": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/homebridge/-/homebridge-1.3.5.tgz", - "integrity": "sha512-NINAVtHu/Lq08mfbMszcZzgLvCIp5CMcAX7OVRAOHCMd0vXfx4N44+gNLnE9Jzg06NtMPpbh5/rl69cEVPa36A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "commander": "5.1.0", - "fs-extra": "^10.0.0", - "hap-nodejs": "0.9.6", - "qrcode-terminal": "^0.12.0", - "semver": "^7.3.5", - "source-map-support": "^0.5.20" - }, - "bin": { - "homebridge": "bin/homebridge" - }, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/i18n-iso-countries": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/i18n-iso-countries/-/i18n-iso-countries-7.2.0.tgz", - "integrity": "sha512-Gv77ztnU3l5zeJvd0JLbsFsmHOj/rjuTbSJtdUZShedrh3uepWDbbvg49vzvQOdD1HcyzhUT6fhczVx6Lsj7aw==", - "dependencies": { - "diacritics": "1.3.0" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "devOptional": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "devOptional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "devOptional": true - }, - "node_modules/minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", - "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "optional": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/node-persist": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-0.0.11.tgz", - "integrity": "sha1-1m66Pr72IPB5Uw+nsTB2qQZmWHQ=", - "dev": true, - "dependencies": { - "mkdirp": "~0.5.1", - "q": "~1.1.1" - } - }, - "node_modules/node-persist/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/node-rsa": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz", - "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==", - "dependencies": { - "asn1": "^0.2.4" - } - }, - "node_modules/nodemon": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.14.tgz", - "integrity": "sha512-frcpDx+PviKEQRSYzwhckuO2zoHcBYLHI754RE9z5h1RGtrngerc04mLpQQCPWBkH/2ObrX7We9YiwVSYZpFJQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^5.1.0" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pick-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pick-port/-/pick-port-1.0.0.tgz", - "integrity": "sha512-8h9ShAAM5z691zpibEAIyQWiGjjxh5AsP62qI9ptceTDxsSy6bJEXxNpHmdFSwIVNtI2+k3DEhDX+1fYxFHHEA==", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/protobuf-typescript": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobuf-typescript/-/protobuf-typescript-6.8.8.tgz", - "integrity": "sha512-5i3vXZSEB5uksn6E3PMCcO2WRyY4TrETyXfP1INrk3Sl43vjVmT1uCCI/gEHS8LVHtD6foAb3YyO6vqRlpYMHw==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^12.12.14", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/protobuf-typescript/node_modules/@types/node": { - "version": "12.20.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz", - "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/q": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz", - "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qrcode-terminal": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", - "dev": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/qs": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", - "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sweet-collections": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/sweet-collections/-/sweet-collections-1.1.0.tgz", - "integrity": "sha512-jPj3TFoX3pXj/jUG3HuudGrVlQkwRzZpN3NK58j8QubJmQHb6+6lgFD8pR2vwDPC2nb4Oa80RR220QSOTbKyDQ==" - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tiny-typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", - "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/ts-log": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.4.tgz", - "integrity": "sha512-DEQrfv6l7IvN2jlzc/VTdZJYsWUnQNCsueYjMkC/iXoEoi5fNan6MjeDqkvhfzbmHgdz9UxDUluX3V5HdjTydQ==" - }, - "node_modules/ts-node": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@cospired/i18n-iso-languages": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@cospired/i18n-iso-languages/-/i18n-iso-languages-3.1.1.tgz", - "integrity": "sha512-8X3tP5oWBJjRo5nuaeqA5tXIDUvfBTO81coPLVPlyXAn1oe9fjDsvlCenblbD2WKIfVlk+RmU5+6yl5oVB1TKQ==" - }, - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "requires": { - "@cspotcode/source-map-consumer": "0.8.0" - } - }, - "@eslint/eslintrc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", - "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@homebridge/ciao": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@homebridge/ciao/-/ciao-1.1.3.tgz", - "integrity": "sha512-p9WgcSYUj3rtC1g3ywJpKxvIZXPkkv88JxbuW6idMHrUOqDMJlWIsWF0yXynQf8Z28gA0j6AJN9EnAr+hg5gNA==", - "dev": true, - "requires": { - "debug": "^4.3.2", - "fast-deep-equal": "^3.1.3", - "source-map-support": "^0.5.20", - "tslib": "^2.3.1" - } - }, - "@homebridge/plugin-ui-utils": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@homebridge/plugin-ui-utils/-/plugin-ui-utils-0.0.19.tgz", - "integrity": "sha512-axFX7lN2Yd7bz/6SlD7dzq5sY/N9+XYuLHPukuiyHQRDtNMRL1uDqJhOx6RVaN2tYDHB75h7YxRQWP7U44Mgzg==" - }, - "@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", - "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "@types/bunyan": { - "version": "1.8.7", - "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.7.tgz", - "integrity": "sha512-jaNt6xX5poSmXuDAkQrSqx2zkR66OrdRDuVnU8ldvn3k/Ci/7Sf5nooKspQWimDnw337Bzt/yirqSThTjvrHkg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "requires": { - "@types/node": "*" - } - }, - "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz", - "integrity": "sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.2.0", - "@typescript-eslint/scope-manager": "5.2.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz", - "integrity": "sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.2.0", - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/typescript-estree": "5.2.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.2.0.tgz", - "integrity": "sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.2.0", - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/typescript-estree": "5.2.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz", - "integrity": "sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/visitor-keys": "5.2.0" - } - }, - "@typescript-eslint/types": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.2.0.tgz", - "integrity": "sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz", - "integrity": "sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.2.0", - "@typescript-eslint/visitor-keys": "5.2.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz", - "integrity": "sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.2.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "devOptional": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bonjour-hap": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/bonjour-hap/-/bonjour-hap-3.6.3.tgz", - "integrity": "sha512-qyLU96ICCYbpOFiMCjA3aNYH5Jc83XH1YX6+EXWukyyiNXzXH2LZv8AVmGW33FceF3gfUM4jYoKX2xChtNDUnA==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "deep-equal": "^2.0.5", - "ip": "^1.1.5", - "multicast-dns": "^7.2.3", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "bunyan-debug-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bunyan-debug-stream/-/bunyan-debug-stream-2.0.0.tgz", - "integrity": "sha512-Ovl43CJ7nUwalLzdXc6E1nGIy6ift9Z/QpYXUtsjpDAg35ZFKXifKNZyfpMGuN3N7ijLLqbnxPsMMHsXDdXa9A==", - "requires": { - "colors": "^1.0.3", - "exception-formatter": "^1.0.4" - } - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "devOptional": true - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", - "isarray": "^2.0.5", - "object-is": "^1.1.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "diacritics": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/diacritics/-/diacritics-1.3.0.tgz", - "integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E=" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-packet": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.0.tgz", - "integrity": "sha512-Nce7YLu6YCgWRvOmDBsJMo9M5/jV3lEZ5vUWnWXYmwURvPylHvq7nkDWhNmk1ZQoZZOP7oQh/S0lSxbisKOfHg==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "optional": true, - "requires": { - "nan": "^2.14.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", - "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.3", - "@humanwhocodes/config-array": "^0.6.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^6.0.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-scope": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", - "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", - "dev": true - }, - "espree": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", - "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", - "dev": true, - "requires": { - "acorn": "^8.5.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eufy-security-client": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/eufy-security-client/-/eufy-security-client-1.5.0.tgz", - "integrity": "sha512-1Dqkc50+an3L0BeTX7UmXzVtz/L5Q1Eexcj5dI33MF92IuX1W2NUQyAlf5ivu0cuc2EchSyeUJTDXPAgXhe6Xg==", - "requires": { - "@cospired/i18n-iso-languages": "^3.1.1", - "crypto-js": "^4.1.1", - "fs-extra": "^10.0.0", - "got": "^11.8.3", - "i18n-iso-countries": "^7.2.0", - "node-rsa": "^1.1.1", - "protobuf-typescript": "^6.8.8", - "qs": "^6.10.2", - "sweet-collections": "^1.1.0", - "tiny-typed-emitter": "^2.1.0", - "ts-log": "^2.2.4" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - } - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "got": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", - "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "requires": { - "lowercase-keys": "^2.0.0" - } - } - } - }, - "exception-formatter": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exception-formatter/-/exception-formatter-1.0.7.tgz", - "integrity": "sha512-zV45vEsjytJrwfGq6X9qd1Ll56cW4NC2mhCO6lqwMk4ZpA1fZ6C3UiaQM/X7if+7wZFmCgss3ahp9B/uVFuLRw==", - "requires": { - "colors": "^1.0.3" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fast-srp-hap": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fast-srp-hap/-/fast-srp-hap-2.0.4.tgz", - "integrity": "sha512-lHRYYaaIbMrhZtsdGTwPN82UbqD9Bv8QfOlKs+Dz6YRnByZifOh93EYmf2iEWFtkOEIqR2IK8cFD0UN5wLIWBQ==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "ffmpeg-for-homebridge": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ffmpeg-for-homebridge/-/ffmpeg-for-homebridge-0.0.9.tgz", - "integrity": "sha512-HmUatYfEf0dI7kbSh2vGLkJCuY7YLJODPn64Ng/Fj8YjpPbrLFGQBzvdQFBUC6RgGpvqEdlgZNQR8N9wEZuziQ==", - "requires": { - "detect-libc": "^1.0.3", - "dotenv": "^8.2.0", - "mkdirp": "^1.0.3", - "simple-get": "^3.1.0", - "tar": "^6.0.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "futoin-hkdf": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.4.2.tgz", - "integrity": "sha512-2BggwLEJOTfXzKq4Tl2bIT37p0IqqKkblH4e0cMp2sXTdmwg/ADBKMxvxaEytYYcgdxgng8+acsi3WgMVUl6CQ==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "hap-nodejs": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/hap-nodejs/-/hap-nodejs-0.9.6.tgz", - "integrity": "sha512-5I7bXDa2eizDpPSybJB5W+py7O1NxIDVZEKukX97gDhkc8d9TkVWJw+kgC4qr8qeLjQxqG/ZTr8BLsrtYmJaKw==", - "dev": true, - "requires": { - "@homebridge/ciao": "~1.1.2", - "bonjour-hap": "~3.6.3", - "debug": "^4.3.2", - "fast-srp-hap": "2.0.4", - "futoin-hkdf": "~1.4.2", - "ip": "^1.1.5", - "node-persist": "^0.0.11", - "source-map-support": "^0.5.20", - "tslib": "^2.3.1", - "tweetnacl": "^1.0.3" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "homebridge": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/homebridge/-/homebridge-1.3.5.tgz", - "integrity": "sha512-NINAVtHu/Lq08mfbMszcZzgLvCIp5CMcAX7OVRAOHCMd0vXfx4N44+gNLnE9Jzg06NtMPpbh5/rl69cEVPa36A==", - "dev": true, - "requires": { - "chalk": "^4.1.2", - "commander": "5.1.0", - "fs-extra": "^10.0.0", - "hap-nodejs": "0.9.6", - "qrcode-terminal": "^0.12.0", - "semver": "^7.3.5", - "source-map-support": "^0.5.20" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "i18n-iso-countries": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/i18n-iso-countries/-/i18n-iso-countries-7.2.0.tgz", - "integrity": "sha512-Gv77ztnU3l5zeJvd0JLbsFsmHOj/rjuTbSJtdUZShedrh3uepWDbbvg49vzvQOdD1HcyzhUT6fhczVx6Lsj7aw==", - "requires": { - "diacritics": "1.3.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "devOptional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", - "dev": true - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "devOptional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "devOptional": true - }, - "minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "optional": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", - "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "optional": true - }, - "node-persist": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-0.0.11.tgz", - "integrity": "sha1-1m66Pr72IPB5Uw+nsTB2qQZmWHQ=", - "dev": true, - "requires": { - "mkdirp": "~0.5.1", - "q": "~1.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "node-rsa": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz", - "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==", - "requires": { - "asn1": "^0.2.4" - } - }, - "nodemon": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.14.tgz", - "integrity": "sha512-frcpDx+PviKEQRSYzwhckuO2zoHcBYLHI754RE9z5h1RGtrngerc04mLpQQCPWBkH/2ObrX7We9YiwVSYZpFJQ==", - "dev": true, - "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^5.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "devOptional": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pick-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pick-port/-/pick-port-1.0.0.tgz", - "integrity": "sha512-8h9ShAAM5z691zpibEAIyQWiGjjxh5AsP62qI9ptceTDxsSy6bJEXxNpHmdFSwIVNtI2+k3DEhDX+1fYxFHHEA==", - "requires": { - "debug": "^4.1.1" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "protobuf-typescript": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobuf-typescript/-/protobuf-typescript-6.8.8.tgz", - "integrity": "sha512-5i3vXZSEB5uksn6E3PMCcO2WRyY4TrETyXfP1INrk3Sl43vjVmT1uCCI/gEHS8LVHtD6foAb3YyO6vqRlpYMHw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^12.12.14", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "12.20.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz", - "integrity": "sha512-+5haRZ9uzI7rYqzDznXgkuacqb6LJhAti8mzZKWxIXn/WEtvB+GHVJ7AuMwcN1HMvXOSJcrvA6PPoYHYOYYebA==" - } - } - }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "q": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz", - "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=", - "dev": true - }, - "qrcode-terminal": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", - "dev": true - }, - "qs": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", - "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "sweet-collections": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/sweet-collections/-/sweet-collections-1.1.0.tgz", - "integrity": "sha512-jPj3TFoX3pXj/jUG3HuudGrVlQkwRzZpN3NK58j8QubJmQHb6+6lgFD8pR2vwDPC2nb4Oa80RR220QSOTbKyDQ==" - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "tiny-typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", - "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "ts-log": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.4.tgz", - "integrity": "sha512-DEQrfv6l7IvN2jlzc/VTdZJYsWUnQNCsueYjMkC/iXoEoi5fNan6MjeDqkvhfzbmHgdz9UxDUluX3V5HdjTydQ==" - }, - "ts-node": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index da81ac1f..00000000 --- a/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "displayName": "Homebridge Eufy Security", - "name": "homebridge-eufy-security", - "version": "1.0.8", - "description": "Control Eufy Security from homebridge.", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "git://github.com/samemory/homebridge-eufy-security.git" - }, - "bugs": { - "url": "https://github.com/samemory/homebridge-eufy-security/issues" - }, - "engines": { - "node": ">=12.0.0", - "homebridge": ">=1.3.0" - }, - "main": "dist/index.js", - "scripts": { - "lint": "eslint src/**.ts --max-warnings=0", - "watch": "npm run build && npm link && nodemon", - "build": "rimraf ./dist && tsc", - "prepublishOnly": "npm run lint && npm run build" - }, - "keywords": [ - "homebridge-plugin", - "Eufy", - "Eufy Security", - "doorbell", - "eufy doorbell", - "security-system" - ], - "dependencies": { - "@homebridge/plugin-ui-utils": "0.0.19", - "bunyan": "^1.8.15", - "bunyan-debug-stream": "^2.0.0", - "eufy-security-client": "~1.5.0", - "ffmpeg-for-homebridge": "0.0.9", - "pick-port": "^1.0.0" - }, - "devDependencies": { - "@types/bunyan": "^1.8.7", - "@types/node": "^16.11.6", - "@typescript-eslint/eslint-plugin": "^5.2.0", - "@typescript-eslint/parser": "^5.2.0", - "eslint": "^8.1.0", - "homebridge": "^1.3.5", - "nodemon": "^2.0.14", - "rimraf": "^3.0.2", - "ts-node": "^10.4.0", - "typescript": "^4.4.4" - }, - "eslintConfig": { - "rules": { - "ban-ts-comment": 0 - } - }, - "homepage": "https://github.com/samemory/homebridge-eufy-security/wiki", - "author": "Sam Emory" -} diff --git a/src/accessories/CameraAccessory.ts b/src/accessories/CameraAccessory.ts deleted file mode 100644 index 6a96c301..00000000 --- a/src/accessories/CameraAccessory.ts +++ /dev/null @@ -1,264 +0,0 @@ -import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; - -import { EufySecurityPlatform } from '../platform'; -import { DeviceAccessory } from './Device'; - -// import { HttpService, LocalLookupService, DeviceClientService, CommandType } from 'eufy-node-client'; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { Camera, Device, PropertyName } from 'eufy-security-client'; -import { StreamingDelegate } from './streamingDelegate'; - -import { CameraConfig, VideoConfig } from './configTypes'; - -/** - * Platform Accessory - * An instance of this class is created for each accessory your platform registers - * Each accessory may expose multiple services of different service types. - */ -export class CameraAccessory extends DeviceAccessory { - - protected service: Service; - protected Camera: Camera; - protected CameraService: Service; - - protected readonly cameraConfig: CameraConfig; - - constructor( - platform: EufySecurityPlatform, - accessory: PlatformAccessory, - eufyDevice: Camera, - ) { - super(platform, accessory, eufyDevice); - this.Camera = eufyDevice; - - this.service = {} as Service; - this.CameraService = {} as Service; - this.cameraConfig = {} as CameraConfig; - - this.platform.log.debug(this.accessory.displayName, 'Constructed Camera'); - - if (this.platform.config.enableCamera || (typeof this.Camera.isDoorbell === 'function' && this.Camera.isDoorbell())) { - this.platform.log.debug(this.accessory.displayName, 'has a camera'); - try { - this.CameraService = this.cameraFunction(accessory); - this.service = this.motionFunction(accessory); - - //video stream (work in progress) - this.cameraConfig = { - 'name': this.Camera.getName(), - 'videoConfig': { - 'stillImageSource': '', - 'audio': true, - 'debug': false, - } as VideoConfig, - }; - - const delegate = new StreamingDelegate(this.platform, this.Camera, this.cameraConfig, this.platform.api, this.platform.api.hap); - accessory.configureController(delegate.controller); - } catch (Error) { - this.platform.log.error(this.accessory.displayName, 'raise error to check and attach livestream function.', Error); - } - } else { - this.platform.log.debug(this.accessory.displayName, 'has a motion sensor.'); - try { - this.service = this.motionFunction(accessory); - } catch (Error) { - this.platform.log.error(this.accessory.displayName, 'raise error to check and attach motion function.', Error); - } - } - - try { - if (typeof this.Camera.isEnabled === 'function') { - this.platform.log.debug(this.accessory.displayName, 'has a isEnabled, so append switchEnabledService characteristic to him.'); - - const switchEnabledService = - this.accessory.getService('Enabled') || - this.accessory.addService(this.platform.Service.Switch, 'Enabled', 'enabled'); - - switchEnabledService.setCharacteristic( - this.platform.Characteristic.Name, - accessory.displayName + ' Enabled', - ); - - switchEnabledService.getCharacteristic(this.characteristic.On) - .onGet(this.handleEnableGet.bind(this)) - .onSet(this.handleEnableSet.bind(this)); - - } else { - this.platform.log.warn(this.accessory.displayName, 'Looks like not compatible with isEnabled'); - } - } catch (Error) { - this.platform.log.error(this.accessory.displayName, 'raise error to check and attach switchEnabledService.', Error); - } - - try { - if (typeof this.Camera.isMotionDetectionEnabled === 'function') { - this.platform.log.debug(this.accessory.displayName, 'has a isMotionDetectionEnabled, so append switchMotionService characteristic to him.'); - - const switchMotionService = - this.accessory.getService('Motion') || - this.accessory.addService(this.platform.Service.Switch, 'Motion', 'motion'); - - switchMotionService.setCharacteristic( - this.platform.Characteristic.Name, - accessory.displayName + ' Motion', - ); - - switchMotionService.getCharacteristic(this.characteristic.On) - .onGet(this.handleMotionOnGet.bind(this)) - .onSet(this.handleMotionOnSet.bind(this)); - - } else { - this.platform.log.debug(this.accessory.displayName, 'Looks like not compatible with isMotionDetectionEnabled'); - } - } catch (Error) { - this.platform.log.error(this.accessory.displayName, 'raise error to check and attach switchMotionService.', Error); - } - } - - handleEventSnapshotsActiveGet(): Promise { - const currentValue = this.characteristic.EventSnapshotsActive.DISABLE; - this.platform.log.debug(this.accessory.displayName, 'Triggered GET EventSnapshotsActive:', currentValue); - return currentValue; - } - - /** - * Handle requests to set the "Event Snapshots Active" characteristic - */ - handleEventSnapshotsActiveSet(value) { - this.platform.log.debug(this.accessory.displayName, 'Triggered SET EventSnapshotsActive:', value); - } - - /** - * Handle requests to get the current value of the "HomeKit Camera Active" characteristic - */ - handleHomeKitCameraActiveGet(): Promise { - const currentValue = this.characteristic.HomeKitCameraActive.OFF; - this.platform.log.debug(this.accessory.displayName, 'Triggered GET HomeKitCameraActive:', currentValue); - return currentValue; - } - - /** - * Handle requests to set the "HomeKit Camera Active" characteristic - */ - handleHomeKitCameraActiveSet(value) { - this.platform.log.debug(this.accessory.displayName, 'Triggered SET HomeKitCameraActive:', value); - } - - private cameraFunction( - accessory: PlatformAccessory, - ): Service { - const service = - this.accessory.getService(this.platform.Service.CameraOperatingMode) || - this.accessory.addService(this.platform.Service.CameraOperatingMode); - - service.setCharacteristic( - this.characteristic.Name, - accessory.displayName, - ); - - service - .getCharacteristic(this.characteristic.EventSnapshotsActive) - .onGet(this.handleEventSnapshotsActiveGet.bind(this)); - service - .getCharacteristic(this.characteristic.EventSnapshotsActive) - .onSet(this.handleEventSnapshotsActiveSet.bind(this)); - - service - .getCharacteristic(this.characteristic.HomeKitCameraActive) - .onGet(this.handleHomeKitCameraActiveGet.bind(this)); - service - .getCharacteristic(this.characteristic.HomeKitCameraActive) - .onSet(this.handleHomeKitCameraActiveSet.bind(this)); - - return service as Service; - } - - private motionFunction( - accessory: PlatformAccessory, - ): Service { - const service = - this.accessory.getService(this.platform.Service.MotionSensor) || - this.accessory.addService(this.platform.Service.MotionSensor); - - service.setCharacteristic( - this.characteristic.Name, - accessory.displayName, - ); - - service - .getCharacteristic(this.characteristic.MotionDetected) - .onGet(this.handleMotionDetectedGet.bind(this)); - - this.Camera.on('motion detected', (device: Device, motion: boolean) => - this.onDeviceMotionDetectedPushNotification(device, motion), - ); - - this.Camera.on('person detected', (device: Device, motion: boolean) => - this.onDeviceMotionDetectedPushNotification(device, motion), - ); - - this.Camera.on('pet detected', (device: Device, motion: boolean) => - this.onDeviceMotionDetectedPushNotification(device, motion), - ); - - return service as Service; - } - - async handleMotionDetectedGet(): Promise { - try { - const currentValue = this.Camera.getPropertyValue(PropertyName.DeviceMotionDetected); - this.platform.log.debug(this.accessory.displayName, 'GET DeviceMotionDetected:', currentValue); - return currentValue.value as boolean; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleMotionDetectedGet', 'Wrong return value'); - return false; - } - } - - private onDeviceMotionDetectedPushNotification( - device: Device, - motion: boolean, - ): void { - this.platform.log.debug(this.accessory.displayName, 'ON DeviceMotionDetected:', motion); - this.service - .getCharacteristic(this.characteristic.MotionDetected) - .updateValue(motion); - } - - async handleEnableGet(): Promise { - try { - const currentValue = this.Camera.getPropertyValue(PropertyName.DeviceEnabled); - this.platform.log.debug(this.accessory.displayName, 'GET DeviceEnabled:', currentValue); - return currentValue.value as boolean; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleEnableGet', 'Wrong return value'); - return false; - } - } - - async handleEnableSet(value: CharacteristicValue) { - this.platform.log.debug(this.accessory.displayName, 'SET DeviceEnabled:', value); - const station = this.platform.getStationById(this.Camera.getStationSerial()); - station.enableDevice(this.Camera, value as boolean); - } - - async handleMotionOnGet(): Promise { - try { - const currentValue = await this.Camera.getPropertyValue(PropertyName.DeviceMotionDetection); - this.platform.log.debug(this.accessory.displayName, 'GET DeviceMotionDetection:', currentValue); - return currentValue.value as boolean; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleMotionOnGet', 'Wrong return value'); - return false; - } - } - - async handleMotionOnSet(value: CharacteristicValue) { - this.platform.log.debug(this.accessory.displayName, 'SET DeviceMotionDetection:', value); - const station = this.platform.getStationById(this.Camera.getStationSerial()); - station.setMotionDetection(this.Camera, value as boolean); - } -} diff --git a/src/accessories/Device.ts b/src/accessories/Device.ts deleted file mode 100644 index b74e7b43..00000000 --- a/src/accessories/Device.ts +++ /dev/null @@ -1,142 +0,0 @@ - -import { PlatformAccessory, CharacteristicValue } from 'homebridge'; - -import { EufySecurityPlatform } from '../platform'; -import { Device, DeviceType, PropertyName, PropertyValue } from 'eufy-security-client'; - -export abstract class DeviceAccessory { - - protected eufyDevice: Device; - protected platform: EufySecurityPlatform; - protected accessory: PlatformAccessory; - protected characteristic; - - constructor( - platform: EufySecurityPlatform, - accessory: PlatformAccessory, - eufyDevice: Device, - ) { - this.platform = platform; - this.accessory = accessory; - this.eufyDevice = eufyDevice; - - this.characteristic = this.platform.Characteristic; - - this.accessory - .getService(this.platform.Service.AccessoryInformation)! - .setCharacteristic(this.characteristic.Manufacturer, 'Eufy') - .setCharacteristic( - this.characteristic.Model, - DeviceType[this.eufyDevice.getDeviceType()], - ) - .setCharacteristic( - this.characteristic.SerialNumber, - this.eufyDevice.getSerial(), - ) - .setCharacteristic( - this.characteristic.FirmwareRevision, - this.eufyDevice.getSoftwareVersion(), - ) - .setCharacteristic( - this.characteristic.HardwareRevision, - this.eufyDevice.getHardwareVersion(), - ); - - try { - if (this.eufyDevice.hasProperty('battery') || this.eufyDevice.hasProperty('batteryLow')) { - - const batteryService = - this.accessory.getService(this.platform.Service.Battery) || - this.accessory.addService(this.platform.Service.Battery); - - batteryService.setCharacteristic( - this.characteristic.Name, - accessory.displayName, - ); - - // create handlers for required characteristics of Battery service - if (this.eufyDevice.hasProperty('battery')) { - this.platform.log.debug(this.accessory.displayName, 'has a battery, so append Battery characteristic to him.'); - batteryService - .getCharacteristic(this.characteristic.BatteryLevel) - .onGet(this.handleBatteryLevelGet.bind(this)); - } else { - this.platform.log.debug(this.accessory.displayName, 'has a batteryLow, so append StatusLowBattery characteristic to him.'); - batteryService - .getCharacteristic(this.characteristic.StatusLowBattery) - .onGet(this.handleStatusLowBatteryGet.bind(this)); - } - - } else { - this.platform.log.warn(this.accessory.displayName, 'has no battery'); - } - } catch (Error) { - this.platform.log.error(this.accessory.displayName, 'raise error to check and attach a battery.', Error); - } - - if (this.platform.config.enableDetailedLogging) { - this.eufyDevice.on('raw property changed', (device: Device, type: number, value: string, modified: number) => - this.handleRawPropertyChange(device, type, value, modified), - ); - this.eufyDevice.on('property changed', (device: Device, name: string, value: PropertyValue) => - this.handlePropertyChange(device, name, value), - ); - } - } - - private handleRawPropertyChange( - device: Device, - type: number, - value: string, - modified: number, - ): void { - this.platform.log.debug( - this.accessory.displayName, - 'Raw Property Changes:', - type, - value, - modified, - ); - } - - private handlePropertyChange( - device: Device, - name: string, - value: PropertyValue, - ): void { - this.platform.log.debug( - this.accessory.displayName, - 'Property Changes:', - name, - value, - ); - } - - /** - * Handle requests to get the current value of the "Status Low Battery" characteristic - */ - async handleStatusLowBatteryGet(): Promise { - try { - const currentValue = await this.eufyDevice.getPropertyValue(PropertyName.DeviceBatteryLow); - this.platform.log.debug(this.accessory.displayName, 'GET DeviceBatteryLow:', currentValue); - return currentValue.value as boolean; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleStatusLowBatteryGet', 'Wrong return value'); - return false; - } - } - - /** - * Handle requests to get the current value of the "Battery Level" characteristic - */ - async handleBatteryLevelGet(): Promise { - try { - const currentValue = this.eufyDevice.getPropertyValue(PropertyName.DeviceBattery); - this.platform.log.debug(this.accessory.displayName, 'GET DeviceBattery:', currentValue); - return currentValue.value as number; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleBatteryLevelGet', 'Wrong return value'); - return 0; - } - } -} \ No newline at end of file diff --git a/src/accessories/DoorbellCameraAccessory.ts b/src/accessories/DoorbellCameraAccessory.ts deleted file mode 100644 index 975750f5..00000000 --- a/src/accessories/DoorbellCameraAccessory.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Service, PlatformAccessory } from 'homebridge'; - -import { EufySecurityPlatform } from '../platform'; - -// import { HttpService, LocalLookupService, DeviceClientService, CommandType } from 'eufy-node-client'; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { DoorbellCamera, Device } from 'eufy-security-client'; -import { CameraAccessory } from './CameraAccessory'; - -/** - * Platform Accessory - * An instance of this class is created for each accessory your platform registers - * Each accessory may expose multiple services of different service types. - */ -export class DoorbellCameraAccessory extends CameraAccessory { - - protected DoorbellCamera: DoorbellCamera; - - private doorbellService: Service; - - constructor( - platform: EufySecurityPlatform, - accessory: PlatformAccessory, - eufyDevice: DoorbellCamera, - ) { - super(platform, accessory, eufyDevice); - this.DoorbellCamera = eufyDevice; - - this.platform.log.debug(this.accessory.displayName, 'Constructed Doorbell'); - - this.doorbellService = - this.accessory.getService(this.platform.Service.Doorbell) || - this.accessory.addService(this.platform.Service.Doorbell); - - // set the Battery service characteristics - this.doorbellService.setCharacteristic( - this.platform.Characteristic.Name, - accessory.displayName, - ); - - // create handlers for required characteristics of Battery service - this.doorbellService - .getCharacteristic(this.platform.Characteristic.ProgrammableSwitchEvent) - .onGet(() => null); - - this.DoorbellCamera.on('rings', (device: Device, state: boolean) => - this.onDeviceRingsPushNotification(), - ); - - this.doorbellService.setPrimaryService(true); - - } - - private onDeviceRingsPushNotification(): void { - this.platform.log.debug(this.accessory.displayName, 'DoorBell ringing'); - this.doorbellService - .getCharacteristic(this.platform.Characteristic.ProgrammableSwitchEvent) - .updateValue(this.platform.Characteristic.ProgrammableSwitchEvent.SINGLE_PRESS); - } - -} diff --git a/src/accessories/EntrySensorAccessory.ts b/src/accessories/EntrySensorAccessory.ts deleted file mode 100644 index 3f9e91d1..00000000 --- a/src/accessories/EntrySensorAccessory.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; - -import { EufySecurityPlatform } from '../platform'; -import { DeviceAccessory } from './Device'; - -// import { HttpService, LocalLookupService, DeviceClientService, CommandType } from 'eufy-node-client'; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { Device, EntrySensor, PropertyName } from 'eufy-security-client'; - -/** - * Platform Accessory - * An instance of this class is created for each accessory your platform registers - * Each accessory may expose multiple services of different service types. - */ -export class EntrySensorAccessory extends DeviceAccessory { - - protected service: Service; - protected EntrySensor: EntrySensor; - - constructor( - platform: EufySecurityPlatform, - accessory: PlatformAccessory, - eufyDevice: EntrySensor, - ) { - super(platform, accessory, eufyDevice); - - this.platform.log.debug(this.accessory.displayName, 'Constructed Entry Sensor'); - - this.EntrySensor = eufyDevice; - - this.service = - this.accessory.getService(this.platform.Service.ContactSensor) || - this.accessory.addService(this.platform.Service.ContactSensor); - - this.service.setCharacteristic( - this.platform.Characteristic.Name, - this.accessory.displayName, - ); - - try { - if (this.eufyDevice.hasProperty('sensorOpen')) { - this.platform.log.debug(this.accessory.displayName, 'has a sensorOpen, so append ContactSensorState characteristic to him.'); - - // create handlers for required characteristics - this.service - .getCharacteristic(this.platform.Characteristic.ContactSensorState) - .onGet(this.handleContactSensorStateGet.bind(this)); - - this.EntrySensor.on('open', (device: Device, open: boolean) => - this.onDeviceOpenPushNotification(device, open), - ); - - } else { - this.platform.log.warn(this.accessory.displayName, 'has no sensorOpen'); - } - } catch (Error) { - this.platform.log.error(this.accessory.displayName, 'raise error to check and attach a sensorOpen.', Error); - } - } - - async handleContactSensorStateGet(): Promise { - try { - const currentValue = this.EntrySensor.getPropertyValue(PropertyName.DeviceSensorOpen); - this.platform.log.debug(this.accessory.displayName, 'GET DeviceSensorOpen:', currentValue); - return currentValue.value as boolean; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleContactSensorStateGet', 'Wrong return value'); - return false; - } - } - - private onDeviceOpenPushNotification( - device: Device, - open: boolean, - ): void { - this.platform.log.debug(this.accessory.displayName, 'Handle Motion Sensor:', open); - this.service - .getCharacteristic(this.platform.Characteristic.ContactSensorState) - .updateValue(open); - } -} diff --git a/src/accessories/KeypadAccessory.ts b/src/accessories/KeypadAccessory.ts deleted file mode 100644 index 1e067202..00000000 --- a/src/accessories/KeypadAccessory.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; - -import { EufySecurityPlatform } from '../platform'; -import { DeviceAccessory } from './Device'; - -// import { HttpService, LocalLookupService, DeviceClientService, CommandType } from 'eufy-node-client'; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { Keypad, PropertyName } from 'eufy-security-client'; - -/** - * Platform Accessory - * An instance of this class is created for each accessory your platform registers - * Each accessory may expose multiple services of different service types. - */ -export class KeypadAccessory extends DeviceAccessory { - - protected service: Service; - protected Keypad: Keypad; - - constructor( - platform: EufySecurityPlatform, - accessory: PlatformAccessory, - eufyDevice: Keypad, - ) { - super(platform, accessory, eufyDevice); - this.Keypad = eufyDevice; - - this.platform.log.debug(this.accessory.displayName, 'Constructed Keypad'); - // set accessory information - - this.service = - this.accessory.getService(this.platform.Service.Switch) || - this.accessory.addService(this.platform.Service.Switch); - - this.service.setCharacteristic( - this.platform.Characteristic.Name, - accessory.displayName, - ); - - // create handlers for required characteristics - this.service - .getCharacteristic(this.platform.Characteristic.On) - .on('get', this.handleOnGet.bind(this)) - .on('set', this.handleOnSet.bind(this)); - - } - - async getCurrentDeviceState() { - const state = this.Keypad.getState(); - - return state.value as number; - } - - /** - * Handle requests to get the current value of the "Active" characteristic - */ - async handleOnGet(callback) { - this.platform.log.debug(this.accessory.displayName, 'Triggered GET Active'); - - const currentDeviceState = await this.getCurrentDeviceState(); - - // set this to a valid value for Active - const currentValue = currentDeviceState === 1 ? 1 : 0; - - callback(null, currentValue); - } - - /** - * Handle requests to set the "On" characteristic - */ - async handleOnSet(value, callback) { - const currentDeviceState = await this.getCurrentDeviceState(); - - // set this to a valid value for Active - const currentValue = currentDeviceState === 1 ? 1 : 0; - - this.service.updateCharacteristic( - this.platform.Characteristic.SecuritySystemCurrentState, - currentValue, - ); - - callback(null); - } -} diff --git a/src/accessories/MotionSensorAccessory.ts b/src/accessories/MotionSensorAccessory.ts deleted file mode 100644 index 051c7226..00000000 --- a/src/accessories/MotionSensorAccessory.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; - -import { EufySecurityPlatform } from '../platform'; -import { DeviceAccessory } from './Device'; - -// import { HttpService, LocalLookupService, DeviceClientService, CommandType } from 'eufy-node-client'; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { Device, MotionSensor, PropertyName } from 'eufy-security-client'; - -/** - * Platform Accessory - * An instance of this class is created for each accessory your platform registers - * Each accessory may expose multiple services of different service types. - */ -export class MotionSensorAccessory extends DeviceAccessory { - - protected service: Service; - protected MotionSensor: MotionSensor; - - constructor( - platform: EufySecurityPlatform, - accessory: PlatformAccessory, - eufyDevice: MotionSensor, - ) { - super(platform, accessory, eufyDevice); - - this.platform.log.debug(this.accessory.displayName, 'Constructed Motion Sensor'); - - this.MotionSensor = eufyDevice; - - this.service = - this.accessory.getService(this.platform.Service.MotionSensor) || - this.accessory.addService(this.platform.Service.MotionSensor); - - this.service.setCharacteristic( - this.platform.Characteristic.Name, - this.accessory.displayName, - ); - - try { - if (this.eufyDevice.hasProperty('motionDetected')) { - this.platform.log.debug(this.accessory.displayName, 'has a motionDetected, so append MotionDetected characteristic to him.'); - - // create handlers for required characteristics - this.service - .getCharacteristic(this.platform.Characteristic.MotionDetected) - .onGet(this.handleMotionDetectedGet.bind(this)); - - this.MotionSensor.on('motion detected', (device: Device, motion: boolean) => - this.onDeviceMotionDetectedPushNotification(device, motion), - ); - - } else { - this.platform.log.warn(this.accessory.displayName, 'has no motionDetected'); - } - } catch (Error) { - this.platform.log.error(this.accessory.displayName, 'raise error to check and attach a motionDetected.', Error); - } - } - - async handleMotionDetectedGet(): Promise { - try { - const currentValue = this.MotionSensor.getPropertyValue(PropertyName.DeviceMotionDetected); - this.platform.log.debug(this.accessory.displayName, 'GET DeviceMotionDetected:', currentValue); - return currentValue.value as boolean; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleMotionDetectedGet', 'Wrong return value'); - return false; - } - } - - private onDeviceMotionDetectedPushNotification( - device: Device, - motion: boolean, - ): void { - this.platform.log.debug(this.accessory.displayName, 'Handle Camera motion:', motion); - this.service - .getCharacteristic(this.characteristic.MotionDetected) - .updateValue(motion); - } -} diff --git a/src/accessories/SmartLockAccessory.ts b/src/accessories/SmartLockAccessory.ts deleted file mode 100644 index 94a214b5..00000000 --- a/src/accessories/SmartLockAccessory.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; - -import { EufySecurityPlatform } from '../platform'; -import { DeviceAccessory } from './Device'; - -// import { HttpService, LocalLookupService, DeviceClientService, CommandType } from 'eufy-node-client'; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { Device, Lock, PropertyName } from 'eufy-security-client'; - -/** - * Platform Accessory - * An instance of this class is created for each accessory your platform registers - * Each accessory may expose multiple services of different service types. - */ -export class SmartLockAccessory extends DeviceAccessory { - - protected service: Service; - protected SmartLock: Lock; - - constructor( - platform: EufySecurityPlatform, - accessory: PlatformAccessory, - eufyDevice: Lock, - ) { - super(platform, accessory, eufyDevice); - - this.platform.log.debug(this.accessory.displayName, 'Constructed SmartLock'); - - this.SmartLock = eufyDevice; - - this.service = - this.accessory.getService(this.platform.Service.LockMechanism) || - this.accessory.addService(this.platform.Service.LockMechanism); - - this.service.setCharacteristic( - this.platform.Characteristic.Name, - accessory.displayName, - ); - - // create handlers for required characteristics - this.service - .getCharacteristic(this.platform.Characteristic.LockCurrentState) - .onGet(this.handleLockCurrentStateGet.bind(this)); - - this.service - .getCharacteristic(this.platform.Characteristic.LockTargetState) - .onGet(this.handleLockTargetStateGet.bind(this)) - .onSet(this.handleLockTargetStateSet.bind(this)); - - this.SmartLock.on('locked', (device: Device, lock: boolean) => - this.onDeviceLockPushNotification(device, lock), - ); - - } - - /** - * Handle requests to get the current value of the 'Security System Current State' characteristic - */ - async handleLockCurrentStateGet(): Promise { - const lockStatus = this.getLockStatus(); - this.platform.log.debug(this.accessory.displayName, 'Triggered GET LockCurrentState', lockStatus); - return lockStatus as number; - } - - async handleLockTargetStateGet(): Promise { - const lockStatus = this.getLockStatus(false); - this.platform.log.debug(this.accessory.displayName, 'Triggered GET LockTargetState', lockStatus); - return lockStatus as number; - } - - async handleLockTargetStateSet() { - this.platform.log.warn(this.accessory.displayName, 'Open/Close trigger is not implemented'); - } - - getLockStatus(current = true) { - const lockStatus = this.SmartLock.isLocked(); - return this.convertlockStatusCode(lockStatus.value, current); - } - - convertlockStatusCode(lockStatus, current = true) { - // 1: "1", - // 2: "2", - // 3: "UNLOCKED", - // 4: "LOCKED", - // 5: "MECHANICAL_ANOMALY", - // 6: "6", - // 7: "7", - - this.platform.log.debug(this.accessory.displayName, 'LockStatus', lockStatus); - - const characteristic = (current) ? this.platform.Characteristic.LockCurrentState : this.platform.Characteristic.LockTargetState; - - switch (lockStatus) { - case true: - case 4: - return characteristic.SECURED; - case false: - case 3: - return characteristic.UNSECURED; - // case 3: - // return characteristic.JAMMED; - default: - this.platform.log.warn(this.accessory.displayName, 'Something wrong on the lockstatus feedback'); - return this.platform.Characteristic.LockCurrentState.UNKNOWN; - } - } - - private onDeviceLockPushNotification( - device: Device, - lockStatus: boolean, - ): void { - - this.platform.log.debug(this.accessory.displayName, 'Handle Lock Status: -- ', lockStatus); - - this.service - .getCharacteristic(this.platform.Characteristic.LockCurrentState) - .updateValue(this.convertlockStatusCode(lockStatus)); - } -} diff --git a/src/accessories/StationAccessory.ts b/src/accessories/StationAccessory.ts deleted file mode 100644 index edc8f890..00000000 --- a/src/accessories/StationAccessory.ts +++ /dev/null @@ -1,240 +0,0 @@ -import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; - -import { EufySecurityPlatform } from '../platform'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { Station, PropertyName, PropertyValue, AlarmEvent } from 'eufy-security-client'; - -/** - * Platform Accessory - * An instance of this class is created for each accessory your platform registers - * Each accessory may expose multiple services of different service types. - */ -export class StationAccessory { - private service: Service; - private alarm_triggered: boolean; - - protected characteristic; - - constructor( - private readonly platform: EufySecurityPlatform, - private readonly accessory: PlatformAccessory, - private eufyStation: Station, - ) { - this.platform.log.debug(this.accessory.displayName, 'Constructed Station'); - // set accessory information - - this.characteristic = this.platform.Characteristic; - - this.alarm_triggered = false; - - this.accessory - .getService(this.platform.Service.AccessoryInformation)! - .setCharacteristic(this.characteristic.Manufacturer, 'Eufy') - .setCharacteristic( - this.characteristic.Model, - eufyStation.getModel(), - ) - .setCharacteristic( - this.characteristic.SerialNumber, - eufyStation.getSerial(), - ) - .setCharacteristic( - this.characteristic.FirmwareRevision, - eufyStation.getSoftwareVersion(), - ); - - this.service = - this.accessory.getService(this.platform.Service.SecuritySystem) || - this.accessory.addService(this.platform.Service.SecuritySystem); - - this.service.setCharacteristic( - this.characteristic.Name, - accessory.displayName, - ); - - // create handlers for required characteristics - this.service - .getCharacteristic(this.characteristic.SecuritySystemCurrentState) - .onGet(this.handleSecuritySystemCurrentStateGet.bind(this)); - - this.service - .getCharacteristic(this.characteristic.SecuritySystemTargetState) - .onGet(this.handleSecuritySystemTargetStateGet.bind(this)) - .onSet(this.handleSecuritySystemTargetStateSet.bind(this)); - - this.eufyStation.on('guard mode', (station: Station, guardMode: number) => - this.onStationGuardModePushNotification(station, guardMode), - ); - - this.eufyStation.on('current mode', (station: Station, currentMode: number) => - this.onStationCurrentModePushNotification(station, currentMode), - ); - - this.eufyStation.on('alarm event', (station: Station, alarmEvent: AlarmEvent) => - this.onStationAlarmEventPushNotification(station, alarmEvent), - ); - - if (this.platform.config.enableDetailedLogging) { - this.eufyStation.on('raw property changed', (device: Station, type: number, value: string, modified: number) => - this.handleRawPropertyChange(device, type, value, modified), - ); - this.eufyStation.on('property changed', (device: Station, name: string, value: PropertyValue) => - this.handlePropertyChange(device, name, value), - ); - } - } - - private onStationGuardModePushNotification( - station: Station, - guardMode: number, - ): void { - this.platform.log.debug(this.accessory.displayName, 'ON SecurityGuardMode:', guardMode); - const homekitCurrentMode = this.convertEufytoHK(guardMode); - this.service - .getCharacteristic(this.characteristic.SecuritySystemTargetState) - .updateValue(homekitCurrentMode); - } - - private onStationCurrentModePushNotification( - station: Station, - currentMode: number, - ): void { - this.platform.log.debug(this.accessory.displayName, 'ON SecuritySystemCurrentState:', currentMode); - const homekitCurrentMode = this.convertEufytoHK(currentMode); - this.service - .getCharacteristic(this.characteristic.SecuritySystemCurrentState) - .updateValue(homekitCurrentMode); - } - - private onStationAlarmEventPushNotification( - station: Station, - alarmEvent: AlarmEvent, - ): void { - switch (alarmEvent) { - case 2: // Alarm triggered by GSENSOR - case 3: // Alarm triggered by PIR - case 6: // Alarm triggered by DOOR - case 7: // Alarm triggered by CAMERA_PIR - case 8: // Alarm triggered by MOTION_SENSOR - case 9: // Alarm triggered by CAMERA_GSENSOR - this.platform.log.warn('ON StationAlarmEvent - ALARM TRIGGERED - alarmEvent:', alarmEvent); - this.alarm_triggered = true; - this.service - .getCharacteristic(this.characteristic.SecuritySystemCurrentState) - .updateValue(this.characteristic.SecuritySystemCurrentState.ALARM_TRIGGERED); // Alarm !!! - break; - case 15: // Alarm off by Keypad - case 16: // Alarm off by Eufy App - case 17: // Alarm off by HomeBase button - this.platform.log.warn('ON StationAlarmEvent - ALARM OFF - alarmEvent:', alarmEvent); - this.alarm_triggered = false; - break; - default: - this.platform.log.warn('ON StationAlarmEvent - ALARM UNKNOWN - alarmEvent:', alarmEvent); - this.service - .getCharacteristic(this.characteristic.StatusFault) - .updateValue(this.characteristic.StatusFault.GENERAL_FAULT); - break; - } - } - - mappingHKEufy() { - const modes = [ - { hk: 0, eufy: this.platform.config.hkHome ?? 1 }, - { hk: 1, eufy: this.platform.config.hkAway ?? 0 }, - { hk: 2, eufy: this.platform.config.hkNight ?? 3 }, - { hk: 3, eufy: this.platform.config.hkOff ?? 63 }, - ]; - - modes.push({ hk: 3, eufy: 6 }); // If keypad attached to the station - - // modes.push({ hk: 3, eufy: ((modes.filter((m) => { return m.eufy === 6; })[0]) ? 63 : 6) }); - - return modes; - } - - convertHKtoEufy(hkMode) { - const modeObj = this.mappingHKEufy().filter((m) => { return m.hk === hkMode; }); - return modeObj[0] ? modeObj[0].eufy : hkMode; - } - - convertEufytoHK(eufyMode) { - const modeObj = this.mappingHKEufy().filter((m) => { return m.eufy === eufyMode; }); - return modeObj[0] ? modeObj[0].hk : eufyMode; - } - - /** - * Handle requests to get the current value of the 'Security System Current State' characteristic - */ - async handleSecuritySystemCurrentStateGet(): Promise { - if (this.alarm_triggered) { - return this.characteristic.SecuritySystemCurrentState.ALARM_TRIGGERED; - } - try { - const currentValue = this.eufyStation.getPropertyValue(PropertyName.StationCurrentMode); - this.platform.log.debug(this.accessory.displayName, 'GET StationCurrentMode:', currentValue); - return this.convertEufytoHK(currentValue.value) as number; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleSecuritySystemCurrentStateGet', 'Wrong return value'); - return false; - } - } - - /** - * Handle requests to get the current value of the 'Security System Target State' characteristic - */ - handleSecuritySystemTargetStateGet(): CharacteristicValue { - try { - const currentValue = this.eufyStation.getPropertyValue(PropertyName.StationGuardMode); - this.platform.log.debug(this.accessory.displayName, 'GET StationGuardMode:', currentValue); - return this.convertEufytoHK(currentValue.value) as number; - } catch { - this.platform.log.error(this.accessory.displayName, 'handleSecuritySystemTargetStateGet', 'Wrong return value'); - return false; - } - } - - private handleRawPropertyChange( - device: Station, - type: number, - value: string, - modified: number, - ): void { - // this.platform.log.debug(this.accessory.displayName, - // 'ON handleRawPropertyChange:', - // { - // type, - // value, - // modified, - // }, - // ); - } - - private handlePropertyChange( - device: Station, - name: string, - value: PropertyValue, - ): void { - // this.platform.log.debug(this.accessory.displayName, - // 'ON handlePropertyChange:', - // { - // name, - // value, - // }, - // ); - } - - /** - * Handle requests to set the 'Security System Target State' characteristic - */ - handleSecuritySystemTargetStateSet(value: CharacteristicValue) { - try { - const mode = this.convertHKtoEufy(value as number); - this.platform.log.debug(this.accessory.displayName, 'SET StationGuardMode:', mode); - this.eufyStation.setGuardMode(mode); - } catch (error) { - this.platform.log.error('Error Setting security mode!', error); - } - } -} diff --git a/src/accessories/configTypes.ts b/src/accessories/configTypes.ts deleted file mode 100644 index 89bb54d4..00000000 --- a/src/accessories/configTypes.ts +++ /dev/null @@ -1,35 +0,0 @@ -export type CameraConfig = { - name?: string; - manufacturer?: string; - model?: string; - serialNumber?: string; - firmwareRevision?: string; - motion?: boolean; - doorbell?: boolean; - switches?: boolean; - motionTimeout?: number; - motionDoorbell?: boolean; - unbridge?: boolean; - videoConfig?: VideoConfig; -}; - -export type VideoConfig = { - source?: string; - stillImageSource?: string; - returnAudioTarget?: string; - maxStreams?: number; - maxWidth?: number; - maxHeight?: number; - maxFPS?: number; - maxBitrate?: number; - forceMax?: boolean; - vcodec?: string; - packetSize?: number; - videoFilter?: string; - encoderOptions?: string; - mapvideo?: string; - mapaudio?: string; - audio?: boolean; - debug?: boolean; - debugReturn?: boolean; -}; \ No newline at end of file diff --git a/src/accessories/ffmpeg.ts b/src/accessories/ffmpeg.ts deleted file mode 100644 index 9c4592c9..00000000 --- a/src/accessories/ffmpeg.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { ChildProcessWithoutNullStreams, spawn } from 'child_process'; -import { StreamRequestCallback } from 'homebridge'; -import os from 'os'; -import readline from 'readline'; -import { Writable } from 'stream'; -import { Logger } from './logger'; -import { StreamingDelegate } from './streamingDelegate'; - -type FfmpegProgress = { - frame: number; - fps: number; - stream_q: number; - bitrate: number; - total_size: number; - out_time_us: number; - out_time: string; - dup_frames: number; - drop_frames: number; - speed: number; - progress: string; -}; - -export class FfmpegProcess { - private readonly process: ChildProcessWithoutNullStreams; - private killTimeout?: NodeJS.Timeout; - readonly stdin: Writable; - - constructor(cameraName: string, sessionId: string, videoProcessor: string, ffmpegArgs: string, log: Logger, - debug = false, delegate: StreamingDelegate, callback?: StreamRequestCallback) { - log.debug('Stream command: ' + videoProcessor + ' ' + ffmpegArgs, cameraName, debug); - - let started = false; - const startTime = Date.now(); - this.process = spawn(videoProcessor, ffmpegArgs.split(/\s+/), { env: process.env }); - this.stdin = this.process.stdin; - - this.process.stdout.on('data', (data) => { - const progress = this.parseProgress(data); - if (progress) { - if (!started && progress.frame > 0) { - started = true; - const runtime = (Date.now() - startTime) / 1000; - const message = 'Getting the first frames took ' + runtime + ' seconds.'; - if (runtime < 5) { - log.debug(message, cameraName, debug); - } else if (runtime < 22) { - log.warn(message, cameraName); - } else { - log.error(message, cameraName); - } - } - } - }); - const stderr = readline.createInterface({ - input: this.process.stderr, - terminal: false - }); - stderr.on('line', (line: string) => { - if (callback) { - callback(); - callback = undefined; - } - if (debug && line.match(/\[(panic|fatal|error)\]/)) { // For now only write anything out when debug is set - log.error(line, cameraName); - } else if (debug) { - log.debug(line, cameraName, true); - } - }); - this.process.on('error', (error: Error) => { - log.error('FFmpeg process creation failed: ' + error.message, cameraName); - if (callback) { - callback(new Error('FFmpeg process creation failed')); - } - delegate.stopStream(sessionId); - }); - this.process.on('exit', (code: number, signal: NodeJS.Signals) => { - if (this.killTimeout) { - clearTimeout(this.killTimeout); - } - - const message = 'FFmpeg exited with code: ' + code + ' and signal: ' + signal; - - if (this.killTimeout && code === 0) { - log.debug(message + ' (Expected)', cameraName, debug); - } else if (code == null || code === 255) { - if (this.process.killed) { - log.debug(message + ' (Forced)', cameraName, debug); - } else { - log.error(message + ' (Unexpected)', cameraName); - } - } else { - log.error(message + ' (Error)', cameraName); - delegate.stopStream(sessionId); - if (!started && callback) { - callback(new Error(message)); - } else { - delegate.controller.forceStopStreamingSession(sessionId); - } - } - }); - } - - parseProgress(data: Uint8Array): FfmpegProgress | undefined { - const input = data.toString(); - - if (input.indexOf('frame=') == 0) { - try { - const progress = new Map(); - input.split(/\r?\n/).forEach((line) => { - const split = line.split('=', 2); - progress.set(split[0], split[1]); - }); - - return { - frame: parseInt(progress.get('frame')!), - fps: parseFloat(progress.get('fps')!), - stream_q: parseFloat(progress.get('stream_0_0_q')!), - bitrate: parseFloat(progress.get('bitrate')!), - total_size: parseInt(progress.get('total_size')!), - out_time_us: parseInt(progress.get('out_time_us')!), - out_time: progress.get('out_time')!.trim(), - dup_frames: parseInt(progress.get('dup_frames')!), - drop_frames: parseInt(progress.get('drop_frames')!), - speed: parseFloat(progress.get('speed')!), - progress: progress.get('progress')!.trim() - }; - } catch { - return undefined; - } - } else { - return undefined; - } - } - - public stop(): void { - this.process.stdin.write('q' + os.EOL); - this.killTimeout = setTimeout(() => { - this.process.kill('SIGKILL'); - }, 2 * 1000); - } -} diff --git a/src/accessories/logger.ts b/src/accessories/logger.ts deleted file mode 100644 index c5b1c7df..00000000 --- a/src/accessories/logger.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Logging } from 'homebridge'; - -export class Logger { - private readonly log: Logging; - private readonly debugMode: boolean; - - constructor(log: Logging) { - this.log = log; - this.debugMode = process.argv.includes('-D') || process.argv.includes('--debug'); - } - - private formatMessage(message: string, device?: string): string { - let formatted = ''; - if (device) { - formatted += '[' + device + '] '; - } - formatted += message; - return formatted; - } - - public info(message: string, device?: string): void { - this.log.info(this.formatMessage(message, device)); - } - - public warn(message: string, device?: string): void { - this.log.warn(this.formatMessage(message, device)); - } - - public error(message: string, device?: string): void { - this.log.error(this.formatMessage(message, device)); - } - - public debug(message: string, device?: string, alwaysLog = false): void { - if (this.debugMode) { - this.log.debug(this.formatMessage(message, device)); - } else if (alwaysLog) { - this.info(message, device); - } - } -} \ No newline at end of file diff --git a/src/accessories/streamingDelegate.ts b/src/accessories/streamingDelegate.ts deleted file mode 100644 index 5d0087bf..00000000 --- a/src/accessories/streamingDelegate.ts +++ /dev/null @@ -1,540 +0,0 @@ -import { - API, - APIEvent, - AudioStreamingCodecType, - AudioStreamingSamplerate, - CameraController, - CameraControllerOptions, - CameraStreamingDelegate, - HAP, - PrepareStreamCallback, - PrepareStreamRequest, - PrepareStreamResponse, - SnapshotRequest, - SnapshotRequestCallback, - SRTPCryptoSuites, - StartStreamRequest, - StreamingRequest, - StreamRequestCallback, - StreamRequestTypes, - VideoInfo -} from 'homebridge'; -import { spawn } from 'child_process'; -import { createSocket, Socket } from 'dgram'; -import ffmpegPath from 'ffmpeg-for-homebridge'; -import pickPort, { pickPortOptions } from 'pick-port'; -import { CameraConfig, VideoConfig } from './configTypes'; -import { FfmpegProcess } from './ffmpeg'; -import { Logger } from './logger'; - -import { Camera, PropertyName } from 'eufy-security-client'; -import { EufySecurityPlatform } from '../platform'; - -import { readFile } from 'fs' -import { promisify } from 'util' -const readFileAsync = promisify(readFile), - SnapshotUnavailablePath = require.resolve('../../media/Snapshot-Unavailable.png'); - -type SessionInfo = { - address: string; // address of the HAP controller - ipv6: boolean; - - videoPort: number; - videoReturnPort: number; - videoCryptoSuite: SRTPCryptoSuites; // should be saved if multiple suites are supported - videoSRTP: Buffer; // key and salt concatenated - videoSSRC: number; // rtp synchronisation source - - audioPort: number; - audioReturnPort: number; - audioCryptoSuite: SRTPCryptoSuites; - audioSRTP: Buffer; - audioSSRC: number; -}; - -type ResolutionInfo = { - width: number; - height: number; - videoFilter?: string; - snapFilter?: string; - resizeFilter?: string; -}; - -type ActiveSession = { - mainProcess?: FfmpegProcess; - returnProcess?: FfmpegProcess; - timeout?: NodeJS.Timeout; - socket?: Socket; -}; - -export class StreamingDelegate implements CameraStreamingDelegate { - private readonly hap: HAP; - private readonly log: Logger; - private readonly cameraName: string; - private readonly unbridge: boolean; - private readonly videoConfig: VideoConfig; - private readonly videoProcessor: string; - readonly controller: CameraController; - private snapshotPromise?: Promise; - - private readonly device: Camera; - - // keep track of sessions - pendingSessions: Map = new Map(); - ongoingSessions: Map = new Map(); - timeouts: Map = new Map(); - - constructor(platform: EufySecurityPlatform, device: Camera, cameraConfig: CameraConfig, api: API, hap: HAP) { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types - this.log = platform.log; - this.hap = hap; - - this.device = device; - - this.cameraName = device.getName()!; - this.unbridge = false; - this.videoConfig = cameraConfig.videoConfig!; - this.videoProcessor = ffmpegPath || 'ffmpeg'; - - api.on(APIEvent.SHUTDOWN, () => { - for (const session in this.ongoingSessions) { - this.stopStream(session); - } - }); - - const options: CameraControllerOptions = { - cameraStreamCount: this.videoConfig.maxStreams || 2, // HomeKit requires at least 2 streams, but 1 is also just fine - delegate: this, - streamingOptions: { - supportedCryptoSuites: [hap.SRTPCryptoSuites.AES_CM_128_HMAC_SHA1_80], - video: { - resolutions: [ - [320, 180, 30], - [320, 240, 15], // Apple Watch requires this configuration - [320, 240, 30], - [480, 270, 30], - [480, 360, 30], - [640, 360, 30], - [640, 480, 30], - [1280, 720, 30], - [1280, 960, 30], - [1920, 1080, 30], - [1600, 1200, 30] - ], - codec: { - profiles: [hap.H264Profile.BASELINE, hap.H264Profile.MAIN, hap.H264Profile.HIGH], - levels: [hap.H264Level.LEVEL3_1, hap.H264Level.LEVEL3_2, hap.H264Level.LEVEL4_0] - } - }, - audio: { - twoWayAudio: !!this.videoConfig.returnAudioTarget, - codecs: [ - { - type: AudioStreamingCodecType.AAC_ELD, - samplerate: AudioStreamingSamplerate.KHZ_16 - /*type: AudioStreamingCodecType.OPUS, - samplerate: AudioStreamingSamplerate.KHZ_24*/ - } - ] - } - } - }; - - this.controller = new hap.CameraController(options); - } - - private determineResolution(request: SnapshotRequest | VideoInfo, isSnapshot: boolean): ResolutionInfo { - const resInfo: ResolutionInfo = { - width: request.width, - height: request.height - }; - if (!isSnapshot) { - if (this.videoConfig.maxWidth !== undefined && - (this.videoConfig.forceMax || request.width > this.videoConfig.maxWidth)) { - resInfo.width = this.videoConfig.maxWidth; - } - if (this.videoConfig.maxHeight !== undefined && - (this.videoConfig.forceMax || request.height > this.videoConfig.maxHeight)) { - resInfo.height = this.videoConfig.maxHeight; - } - } - - const filters: Array = this.videoConfig.videoFilter?.split(',') || []; - const noneFilter = filters.indexOf('none'); - if (noneFilter >= 0) { - filters.splice(noneFilter, 1); - } - resInfo.snapFilter = filters.join(','); - if ((noneFilter < 0) && (resInfo.width > 0 || resInfo.height > 0)) { - resInfo.resizeFilter = 'scale=' + (resInfo.width > 0 ? '\'min(' + resInfo.width + ',iw)\'' : 'iw') + ':' + - (resInfo.height > 0 ? '\'min(' + resInfo.height + ',ih)\'' : 'ih') + - ':force_original_aspect_ratio=decrease'; - filters.push(resInfo.resizeFilter); - filters.push('scale=trunc(iw/2)*2:trunc(ih/2)*2'); // Force to fit encoder restrictions - } - - if (filters.length > 0) { - resInfo.videoFilter = filters.join(','); - } - - return resInfo; - } - - fetchSnapshot(snapFilter?: string): Promise { - - this.snapshotPromise = new Promise(async (resolve, reject) => { - - try { - this.videoConfig.stillImageSource = '-i ' + this.device.getPropertyValue(PropertyName.DevicePictureUrl).value as string; - } catch { - this.log.warn(this.cameraName + ' fetchSnapshot: ' + 'No Snapshot found'); - resolve(await readFileAsync(SnapshotUnavailablePath)); - } - - const startTime = Date.now(); - const ffmpegArgs = (this.videoConfig.stillImageSource || this.videoConfig.source!) + // Still - ' -frames:v 1' + - (snapFilter ? ' -filter:v ' + snapFilter : '') + - ' -f image2 -' + - ' -hide_banner' + - ' -loglevel error'; - - this.log.debug('Snapshot command: ' + this.videoProcessor + ' ' + ffmpegArgs, this.cameraName, this.videoConfig.debug); - const ffmpeg = spawn(this.videoProcessor, ffmpegArgs.split(/\s+/), { env: process.env }); - - let snapshotBuffer = Buffer.alloc(0); - ffmpeg.stdout.on('data', (data) => { - snapshotBuffer = Buffer.concat([snapshotBuffer, data]); - }); - ffmpeg.on('error', (error: Error) => { - reject('FFmpeg process creation failed: ' + error.message); - }); - ffmpeg.stderr.on('data', (data) => { - data.toString().split('\n').forEach((line: string) => { - if (this.videoConfig.debug && line.length > 0) { // For now only write anything out when debug is set - this.log.error(line, this.cameraName + '] [Snapshot'); - } - }); - }); - ffmpeg.on('close', () => { - if (snapshotBuffer.length > 0) { - resolve(snapshotBuffer); - } else { - reject('Failed to fetch snapshot.'); - } - - setTimeout(() => { - this.snapshotPromise = undefined; - }, 3 * 1000); // Expire cached snapshot after 3 seconds - - const runtime = (Date.now() - startTime) / 1000; - let message = 'Fetching snapshot took ' + runtime + ' seconds.'; - if (runtime < 5) { - this.log.debug(message, this.cameraName, this.videoConfig.debug); - } else { - if (!this.unbridge) { - message += ' It is highly recommended you switch to unbridge mode.'; - } - if (runtime < 22) { - this.log.warn(message, this.cameraName); - } else { - message += ' The request has timed out and the snapshot has not been refreshed in HomeKit.'; - this.log.error(message, this.cameraName); - } - } - }); - }); - return this.snapshotPromise; - } - - resizeSnapshot(snapshot: Buffer, resizeFilter?: string): Promise { - return new Promise((resolve, reject) => { - const ffmpegArgs = '-i pipe:' + // Resize - ' -frames:v 1' + - (resizeFilter ? ' -filter:v ' + resizeFilter : '') + - ' -f image2 -'; - - this.log.debug('Resize command: ' + this.videoProcessor + ' ' + ffmpegArgs, this.cameraName, this.videoConfig.debug); - const ffmpeg = spawn(this.videoProcessor, ffmpegArgs.split(/\s+/), { env: process.env }); - - let resizeBuffer = Buffer.alloc(0); - ffmpeg.stdout.on('data', (data) => { - resizeBuffer = Buffer.concat([resizeBuffer, data]); - }); - ffmpeg.on('error', (error: Error) => { - reject('FFmpeg process creation failed: ' + error.message); - }); - ffmpeg.on('close', () => { - resolve(resizeBuffer); - }); - ffmpeg.stdin.end(snapshot); - }); - } - - async handleSnapshotRequest(request: SnapshotRequest, callback: SnapshotRequestCallback): Promise { - const resolution = this.determineResolution(request, true); - - try { - const cachedSnapshot = !!this.snapshotPromise; - - this.log.debug('Snapshot requested: ' + request.width + ' x ' + request.height, - this.cameraName, this.videoConfig.debug); - - const snapshot = await (this.snapshotPromise || this.fetchSnapshot(resolution.snapFilter)); - - this.log.debug('Sending snapshot: ' + (resolution.width > 0 ? resolution.width : 'native') + ' x ' + - (resolution.height > 0 ? resolution.height : 'native') + - (cachedSnapshot ? ' (cached)' : ''), this.cameraName, this.videoConfig.debug); - - const resized = await this.resizeSnapshot(snapshot, resolution.resizeFilter); - callback(undefined, resized); - } catch (Error) { - this.log.error(Error as string, this.cameraName); - callback(Error as Error); - } - } - - async prepareStream(request: PrepareStreamRequest, callback: PrepareStreamCallback): Promise { - const ipv6 = request.addressVersion === 'ipv6'; - - const options: pickPortOptions = { - type: 'udp', - ip: ipv6 ? '::' : '0.0.0.0', - reserveTimeout: 15 - }; - const videoReturnPort = await pickPort(options); - const videoSSRC = this.hap.CameraController.generateSynchronisationSource(); - const audioReturnPort = await pickPort(options); - const audioSSRC = this.hap.CameraController.generateSynchronisationSource(); - - const sessionInfo: SessionInfo = { - address: request.targetAddress, - ipv6: ipv6, - - videoPort: request.video.port, - videoReturnPort: videoReturnPort, - videoCryptoSuite: request.video.srtpCryptoSuite, - videoSRTP: Buffer.concat([request.video.srtp_key, request.video.srtp_salt]), - videoSSRC: videoSSRC, - - audioPort: request.audio.port, - audioReturnPort: audioReturnPort, - audioCryptoSuite: request.audio.srtpCryptoSuite, - audioSRTP: Buffer.concat([request.audio.srtp_key, request.audio.srtp_salt]), - audioSSRC: audioSSRC - }; - - const response: PrepareStreamResponse = { - video: { - port: videoReturnPort, - ssrc: videoSSRC, - - srtp_key: request.video.srtp_key, - srtp_salt: request.video.srtp_salt - }, - audio: { - port: audioReturnPort, - ssrc: audioSSRC, - - srtp_key: request.audio.srtp_key, - srtp_salt: request.audio.srtp_salt - } - }; - - this.pendingSessions.set(request.sessionID, sessionInfo); - callback(undefined, response); - } - - private async startStream(request: StartStreamRequest, callback: StreamRequestCallback): Promise { - - this.videoConfig.source = '-i ' + await this.device.startStream(); - - const sessionInfo = this.pendingSessions.get(request.sessionID); - if (sessionInfo) { - const vcodec = this.videoConfig.vcodec || 'libx264'; - const mtu = this.videoConfig.packetSize || 1316; // request.video.mtu is not used - let encoderOptions = this.videoConfig.encoderOptions; - if (!encoderOptions && vcodec === 'libx264') { - encoderOptions = '-preset ultrafast -tune zerolatency'; - } - - const resolution = this.determineResolution(request.video, false); - - let fps = (this.videoConfig.maxFPS !== undefined && - (this.videoConfig.forceMax || request.video.fps > this.videoConfig.maxFPS)) ? - this.videoConfig.maxFPS : request.video.fps; - let videoBitrate = (this.videoConfig.maxBitrate !== undefined && - (this.videoConfig.forceMax || request.video.max_bit_rate > this.videoConfig.maxBitrate)) ? - this.videoConfig.maxBitrate : request.video.max_bit_rate; - - if (vcodec === 'copy') { - resolution.width = 0; - resolution.height = 0; - resolution.videoFilter = undefined; - fps = 0; - videoBitrate = 0; - } - - this.log.debug('Video stream requested: ' + request.video.width + ' x ' + request.video.height + ', ' + - request.video.fps + ' fps, ' + request.video.max_bit_rate + ' kbps', this.cameraName, this.videoConfig.debug); - this.log.info('Starting video stream: ' + (resolution.width > 0 ? resolution.width : 'native') + ' x ' + - (resolution.height > 0 ? resolution.height : 'native') + ', ' + (fps > 0 ? fps : 'native') + - ' fps, ' + (videoBitrate > 0 ? videoBitrate : '???') + ' kbps' + - (this.videoConfig.audio ? (' (' + request.audio.codec + ')') : ''), this.cameraName); - - let ffmpegArgs = this.videoConfig.source!; - - ffmpegArgs += // Video - (this.videoConfig.mapvideo ? ' -map ' + this.videoConfig.mapvideo : ' -an -sn -dn') + - ' -codec:v ' + vcodec + - ' -pix_fmt yuv420p' + - ' -color_range mpeg' + - (fps > 0 ? ' -r ' + fps : '') + - ' -f rawvideo' + - (encoderOptions ? ' ' + encoderOptions : '') + - (resolution.videoFilter ? ' -filter:v ' + resolution.videoFilter : '') + - (videoBitrate > 0 ? ' -b:v ' + videoBitrate + 'k' : '') + - ' -payload_type ' + request.video.pt; - - ffmpegArgs += // Video Stream - ' -ssrc ' + sessionInfo.videoSSRC + - ' -f rtp' + - ' -srtp_out_suite AES_CM_128_HMAC_SHA1_80' + - ' -srtp_out_params ' + sessionInfo.videoSRTP.toString('base64') + - ' srtp://' + sessionInfo.address + ':' + sessionInfo.videoPort + - '?rtcpport=' + sessionInfo.videoPort + '&pkt_size=' + mtu; - - if (this.videoConfig.audio) { - if (request.audio.codec === AudioStreamingCodecType.OPUS || request.audio.codec === AudioStreamingCodecType.AAC_ELD) { - ffmpegArgs += // Audio - (this.videoConfig.mapaudio ? ' -map ' + this.videoConfig.mapaudio : ' -vn -sn -dn') + - (request.audio.codec === AudioStreamingCodecType.OPUS ? - ' -codec:a libopus' + - ' -application lowdelay' : - ' -codec:a aac' + - ' -profile:a aac_eld') + - ' -flags +global_header' + - ' -f null' + - ' -ar ' + request.audio.sample_rate + 'k' + - ' -b:a ' + request.audio.max_bit_rate + 'k' + - ' -ac ' + request.audio.channel + - ' -payload_type ' + request.audio.pt; - - ffmpegArgs += // Audio Stream - ' -ssrc ' + sessionInfo.audioSSRC + - ' -f rtp' + - ' -srtp_out_suite AES_CM_128_HMAC_SHA1_80' + - ' -srtp_out_params ' + sessionInfo.audioSRTP.toString('base64') + - ' srtp://' + sessionInfo.address + ':' + sessionInfo.audioPort + - '?rtcpport=' + sessionInfo.audioPort + '&pkt_size=188'; - } else { - this.log.error('Unsupported audio codec requested: ' + request.audio.codec, this.cameraName); - } - } - - ffmpegArgs += ' -loglevel level' + (this.videoConfig.debug ? '+verbose' : '') + - ' -progress pipe:1'; - - const activeSession: ActiveSession = {}; - - activeSession.socket = createSocket(sessionInfo.ipv6 ? 'udp6' : 'udp4'); - activeSession.socket.on('error', (err: Error) => { - this.log.error('Socket error: ' + err.message, this.cameraName); - this.stopStream(request.sessionID); - }); - activeSession.socket.on('message', () => { - if (activeSession.timeout) { - clearTimeout(activeSession.timeout); - } - activeSession.timeout = setTimeout(() => { - this.log.info('Device appears to be inactive. Stopping stream.', this.cameraName); - this.controller.forceStopStreamingSession(request.sessionID); - this.stopStream(request.sessionID); - }, request.video.rtcp_interval * 5 * 1000); - }); - activeSession.socket.bind(sessionInfo.videoReturnPort); - - activeSession.mainProcess = new FfmpegProcess(this.cameraName, request.sessionID, this.videoProcessor, - ffmpegArgs, this.log, this.videoConfig.debug, this, callback); - - if (this.videoConfig.returnAudioTarget) { - const ffmpegReturnArgs = - '-hide_banner' + - ' -protocol_whitelist pipe,udp,rtp,file,crypto' + - ' -f sdp' + - ' -c:a aac' + - ' -i pipe:' + - ' ' + this.videoConfig.returnAudioTarget + - ' -loglevel level' + (this.videoConfig.debugReturn ? '+verbose' : ''); - - const ipVer = sessionInfo.ipv6 ? 'IP6' : 'IP4'; - - const sdpReturnAudio = - 'v=0\r\n' + - 'o=- 0 0 IN ' + ipVer + ' ' + sessionInfo.address + '\r\n' + - 's=Talk\r\n' + - 'c=IN ' + ipVer + ' ' + sessionInfo.address + '\r\n' + - 't=0 0\r\n' + - 'm=audio ' + sessionInfo.audioReturnPort + ' RTP/AVP 110\r\n' + - 'b=AS:24\r\n' + - 'a=rtpmap:110 MPEG4-GENERIC/16000/1\r\n' + - 'a=rtcp-mux\r\n' + // FFmpeg ignores this, but might as well - 'a=fmtp:110 ' + - 'profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; ' + - 'config=F8F0212C00BC00\r\n' + - 'a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:' + sessionInfo.audioSRTP.toString('base64') + '\r\n'; - activeSession.returnProcess = new FfmpegProcess(this.cameraName + '] [Two-way', request.sessionID, - this.videoProcessor, ffmpegReturnArgs, this.log, this.videoConfig.debugReturn, this); - activeSession.returnProcess.stdin.end(sdpReturnAudio); - } - - this.ongoingSessions.set(request.sessionID, activeSession); - this.pendingSessions.delete(request.sessionID); - } else { - this.log.error('Error finding session information.', this.cameraName); - callback(new Error('Error finding session information')); - } - } - - handleStreamRequest(request: StreamingRequest, callback: StreamRequestCallback): void { - switch (request.type) { - case StreamRequestTypes.START: - this.startStream(request, callback); - break; - case StreamRequestTypes.RECONFIGURE: - this.log.debug('Received request to reconfigure: ' + request.video.width + ' x ' + request.video.height + ', ' + - request.video.fps + ' fps, ' + request.video.max_bit_rate + ' kbps (Ignored)', this.cameraName, this.videoConfig.debug); - callback(); - break; - case StreamRequestTypes.STOP: - this.stopStream(request.sessionID); - callback(); - break; - } - } - - public stopStream(sessionId: string): void { - const session = this.ongoingSessions.get(sessionId); - if (session) { - if (session.timeout) { - clearTimeout(session.timeout); - } - try { - session.socket?.close(); - } catch (err) { - this.log.error('Error occurred closing socket: ' + err, this.cameraName); - } - try { - session.mainProcess?.stop(); - } catch (err) { - this.log.error('Error occurred terminating main FFmpeg process: ' + err, this.cameraName); - } - try { - session.returnProcess?.stop(); - } catch (err) { - this.log.error('Error occurred terminating two-way FFmpeg process: ' + err, this.cameraName); - } - } - this.ongoingSessions.delete(sessionId); - this.log.info('Stopped video stream.', this.cameraName); - } -} diff --git a/src/config.ts b/src/config.ts deleted file mode 100644 index a48a59ec..00000000 --- a/src/config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { PlatformConfig } from 'homebridge'; - -/** - * HomebridgePlatform - * This class is the main constructor for your plugin, this is where you should - * parse the user config and discover/register accessories with Homebridge. - */ -export interface EufySecurityPlatformConfig extends PlatformConfig { - username: string; - password: string; - enableDetailedLogging: number; - enableCamera: boolean; - pollingIntervalMinutes: number; - hkHome: number; - hkAway: number; - hkNight: number; - hkOff: number; - ignoreStations: string[]; - ignoreDevices: string[]; -} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index ea335b94..00000000 --- a/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { API } from 'homebridge'; - -import { PLATFORM_NAME } from './settings'; -import { EufySecurityPlatform } from './platform'; - -/** - * This method registers the platform with Homebridge - */ -export = (api: API) => { - api.registerPlatform(PLATFORM_NAME, EufySecurityPlatform); -}; diff --git a/src/interfaces.ts b/src/interfaces.ts deleted file mode 100644 index 318f0aba..00000000 --- a/src/interfaces.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Station, Device } from 'eufy-security-client'; - -export interface DeviceIdentifier { - uniqueId: string; - displayName: string; - type: number; - station: boolean; -} - -export interface DeviceContainer { - deviceIdentifier: DeviceIdentifier; - eufyDevice: Device | Station; -} \ No newline at end of file diff --git a/src/platform.ts b/src/platform.ts deleted file mode 100644 index 4023cb27..00000000 --- a/src/platform.ts +++ /dev/null @@ -1,435 +0,0 @@ -/* eslint @typescript-eslint/no-var-requires: "off" */ -import { - API, - DynamicPlatformPlugin, - Logger, - PlatformAccessory, - PlatformConfig, - Service, - Characteristic, -} from 'homebridge'; - -import { PLATFORM_NAME, PLUGIN_NAME } from './settings'; - -import { EufySecurityPlatformConfig } from './config'; - -import { DeviceIdentifier, DeviceContainer } from './interfaces'; - -import { StationAccessory } from './accessories/StationAccessory'; -import { EntrySensorAccessory } from './accessories/EntrySensorAccessory'; -import { MotionSensorAccessory } from './accessories/MotionSensorAccessory'; -import { CameraAccessory } from './accessories/CameraAccessory'; -import { DoorbellCameraAccessory } from './accessories/DoorbellCameraAccessory'; -import { KeypadAccessory } from './accessories/KeypadAccessory'; -import { SmartLockAccessory } from './accessories/SmartLockAccessory'; - -import { - EufySecurity, - EufySecurityConfig, - DeviceType, - Station, - EntrySensor, - MotionSensor, - Camera, - DoorbellCamera, - Keypad, - Lock, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore -} from 'eufy-security-client'; - -import bunyan from 'bunyan'; -import bunyanDebugStream from 'bunyan-debug-stream'; - -export class EufySecurityPlatform implements DynamicPlatformPlugin { - public readonly Service: typeof Service = this.api.hap.Service; - public readonly Characteristic: typeof Characteristic = this.api.hap.Characteristic; - - public eufyClient: EufySecurity; - - // this is used to track restored cached accessories - public readonly accessories: PlatformAccessory[] = []; - public readonly config: EufySecurityPlatformConfig; - private eufyConfig: EufySecurityConfig; - - public log; - - constructor( - public readonly hblog: Logger, - config: PlatformConfig, - public readonly api: API, - ) { - this.config = config as EufySecurityPlatformConfig; - - this.eufyConfig = { - username: this.config.username, - password: this.config.password, - country: 'US', - language: 'en', - persistentDir: api.user.storagePath(), - p2pConnectionSetup: 0, - pollingIntervalMinutes: this.config.pollingIntervalMinutes ?? 10, - eventDurationSeconds: 10, - } as EufySecurityConfig; - - - this.config.ignoreStations = this.config.ignoreStations || []; - this.config.ignoreDevices = this.config.ignoreDevices || []; - - if (this.config.enableDetailedLogging >= 1) { - - const plugin = require('../package.json'); - - this.log = bunyan.createLogger({ - name: '[EufySecurity-' + plugin.version + ']', - hostname: '', - streams: [{ - level: (this.config.enableDetailedLogging === 2) ? 'trace' : 'debug', - type: 'raw', - stream: bunyanDebugStream({ - forceColor: true, - showProcess: false, - showPid: false, - showDate: (time) => { - return '[' + time.toLocaleString('en-US') + ']'; - }, - }), - }], - serializers: bunyanDebugStream.serializers, - }); - this.log.info('Eufy Security Plugin: enableDetailedLogging on'); - } else { - this.log = hblog; - } - - this.eufyClient = (this.config.enableDetailedLogging === 2) - ? new EufySecurity(this.eufyConfig, this.log) - : new EufySecurity(this.eufyConfig); - - // Removing the ability to set Off(6) waiting Bropat feedback bropat/eufy-security-client#27 - this.config.hkOff = (this.config.hkOff === 6) ? 63 : this.config.hkOff; - - // When this event is fired it means Homebridge has restored all cached accessories from disk. - // Dynamic Platform plugins should only register new accessories after this event was fired, - // in order to ensure they weren't added to homebridge already. This event can also be used - // to start discovery of new accessories. - this.api.on('didFinishLaunching', async () => { - // await this.createConnection(); - // run the method to discover / register your devices as accessories - await this.discoverDevices(); - }); - - this.log.info('Finished initializing Eufy Security Platform'); - } - - /** - * This function is invoked when homebridge restores cached accessories from disk at startup. - * It should be used to setup event handlers for characteristics and update respective values. - */ - configureAccessory(accessory: PlatformAccessory) { - this.log.debug('Loading accessory from cache:', accessory.displayName); - - // add the restored accessory to the accessories cache so we can track if it has already been registered - this.accessories.push(accessory); - } - - async discoverDevices() { - this.log.debug('discoveringDevices'); - - try { - await this.eufyClient.connect(); - this.log.debug('EufyClient connected ' + this.eufyClient.isConnected()); - } catch (e) { - this.log.error('Error authenticating Eufy : ', e); - } - - if (!this.eufyClient.isConnected()) { - this.log.error('Not connected can\'t continue!'); - return; - } - - await this.refreshData(this.eufyClient); - - this.eufyClient.on('push connect', () => { - this.log.debug('Push Connected!'); - }); - this.eufyClient.on('push close', () => { - this.log.warn('Push Closed!'); - }); - - const eufyStations = await this.eufyClient.getStations(); - this.log.debug('Found ' + eufyStations.length + ' stations.'); - - const devices: Array = []; - - for (const station of eufyStations) { - this.log.debug( - 'Found Station', - station.getSerial(), - station.getName(), - DeviceType[station.getDeviceType()], - station.getLANIPAddress(), - ); - - if (this.config.ignoreStations.indexOf(station.getSerial()) !== -1) { - this.log.debug('Device ignored'); - continue; - } - - const deviceContainer: DeviceContainer = { - deviceIdentifier: { - uniqueId: station.getSerial(), - displayName: station.getName(), - type: station.getDeviceType(), - station: true, - } as DeviceIdentifier, - eufyDevice: station, - }; - devices.push(deviceContainer); - } - - const eufyDevices = await this.eufyClient.getDevices(); - this.log.debug('Found ' + eufyDevices.length + ' devices.'); - - for (const device of eufyDevices) { - this.log.debug( - 'Found device', - device.getSerial(), - device.getName(), - DeviceType[device.getDeviceType()], - ); - - if (this.config.ignoreStations.indexOf(device.getStationSerial()) !== -1) { - this.log.debug('Device ignored because station is ignored'); - continue; - } - - if (this.config.ignoreDevices.indexOf(device.getSerial()) !== -1) { - this.log.debug('Device ignored'); - continue; - } - - const deviceContainer: DeviceContainer = { - deviceIdentifier: { - uniqueId: device.getSerial(), - displayName: device.getName(), - type: device.getDeviceType(), - station: false, - } as DeviceIdentifier, - eufyDevice: device, - }; - devices.push(deviceContainer); - } - - const activeAccessoryIds: string[] = []; - - // loop over the discovered devices and register each one if it has not already been registered - for (const device of devices) { - - // generate a unique id for the accessory this should be generated from - // something globally unique, but constant, for example, the device serial - // number or MAC address - let uuid = this.api.hap.uuid.generate(device.deviceIdentifier.uniqueId); - - // Checking Device Type if it's not a station, it will be the same serial number we will find - // in Device list and it will create the same UUID - if (device.deviceIdentifier.type !== DeviceType.STATION && device.deviceIdentifier.station) { - uuid = this.api.hap.uuid.generate('s_' + device.deviceIdentifier.uniqueId); - this.log.debug('This device is not a station. Generating a new UUID to avoid any duplicate issue'); - } - - activeAccessoryIds.push(uuid); - - // see if an accessory with the same uuid has already been registered and restored from - // the cached devices we stored in the `configureAccessory` method above - const existingAccessory = this.accessories.find( - (accessory) => accessory.UUID === uuid, - ); - - if (existingAccessory) { - // the accessory already exists - - if (this.register_accessory( - existingAccessory, - device.deviceIdentifier.type, - device.eufyDevice, - device.deviceIdentifier.station, - ) - ) { - this.log.info( - 'Restoring existing accessory from cache:', - existingAccessory.displayName, - ); - - // update accessory cache with any changes to the accessory details and information - this.api.updatePlatformAccessories([existingAccessory]); - } - - } else { - // the accessory does not yet exist, so we need to create it - - // create a new accessory - const accessory = new this.api.platformAccessory( - device.deviceIdentifier.displayName, - uuid, - ); - - // store a copy of the device object in the `accessory.context` - // the `context` property can be used to store any data about the accessory you may need - accessory.context.device = device.deviceIdentifier; - - // create the accessory handler for the newly create accessory - // this is imported from `platformAccessory.ts` - if ( - this.register_accessory( - accessory, - device.deviceIdentifier.type, - device.eufyDevice, - device.deviceIdentifier.station, - ) - ) { - this.log.info( - 'Adding new accessory:', - device.deviceIdentifier.displayName, - ); - - // link the accessory to your platform - this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [ - accessory, - ]); - } - } - } - - // Cleaning cached accessory which are no longer exist - - const staleAccessories = this.accessories.filter((item) => { - return activeAccessoryIds.indexOf(item.UUID) === -1; - }); - - staleAccessories.forEach((staleAccessory) => { - this.log.info(`Removing cached accessory ${staleAccessory.UUID} ${staleAccessory.displayName}`); - this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [staleAccessory]); - }); - - } - - private register_accessory( - accessory: PlatformAccessory, - type: number, - device, - station: boolean, - ) { - - this.log.debug(accessory.displayName, 'UUID:', accessory.UUID); - - /* Under development area - - This need to be rewrite - - */ - - if (station) { - if (type !== DeviceType.STATION) { - // Allowing camera but not the lock nor doorbell for now - if (!(type === DeviceType.LOCK_BASIC - || type === DeviceType.LOCK_ADVANCED - || type === DeviceType.LOCK_BASIC_NO_FINGER - || type === DeviceType.LOCK_ADVANCED_NO_FINGER - || type === DeviceType.DOORBELL - || type === DeviceType.BATTERY_DOORBELL - || type === DeviceType.BATTERY_DOORBELL_2)) { - this.log.warn(accessory.displayName, 'looks station but it\'s not could imply some errors', 'Type:', type); - new StationAccessory(this, accessory, device as Station); - return true; - } else { - return false; - } - } - } - - switch (type) { - case DeviceType.STATION: - new StationAccessory(this, accessory, device as Station); - break; - case DeviceType.MOTION_SENSOR: - new MotionSensorAccessory(this, accessory, device as MotionSensor); - break; - case DeviceType.CAMERA: - case DeviceType.CAMERA2: - case DeviceType.CAMERA_E: - case DeviceType.CAMERA2C: - case DeviceType.INDOOR_CAMERA: - case DeviceType.INDOOR_PT_CAMERA: - case DeviceType.FLOODLIGHT: - case DeviceType.CAMERA2C_PRO: - case DeviceType.CAMERA2_PRO: - case DeviceType.INDOOR_CAMERA_1080: - case DeviceType.INDOOR_PT_CAMERA_1080: - case DeviceType.SOLO_CAMERA: - case DeviceType.SOLO_CAMERA_PRO: - case DeviceType.SOLO_CAMERA_SPOTLIGHT_1080: - case DeviceType.SOLO_CAMERA_SPOTLIGHT_2K: - case DeviceType.SOLO_CAMERA_SPOTLIGHT_SOLAR: - case DeviceType.INDOOR_OUTDOOR_CAMERA_1080P: - case DeviceType.INDOOR_OUTDOOR_CAMERA_1080P_NO_LIGHT: - case DeviceType.INDOOR_OUTDOOR_CAMERA_2K: - case DeviceType.FLOODLIGHT_CAMERA_8422: - case DeviceType.FLOODLIGHT_CAMERA_8423: - case DeviceType.FLOODLIGHT_CAMERA_8424: - new CameraAccessory(this, accessory, device as Camera); - break; - case DeviceType.DOORBELL: - case DeviceType.BATTERY_DOORBELL: - case DeviceType.BATTERY_DOORBELL_2: - new DoorbellCameraAccessory(this, accessory, device as DoorbellCamera); - break; - case DeviceType.SENSOR: - new EntrySensorAccessory(this, accessory, device as EntrySensor); - break; - case DeviceType.KEYPAD: - new KeypadAccessory(this, accessory, device as Keypad); - break; - case DeviceType.LOCK_BASIC: - case DeviceType.LOCK_ADVANCED: - case DeviceType.LOCK_BASIC_NO_FINGER: - case DeviceType.LOCK_ADVANCED_NO_FINGER: - new SmartLockAccessory(this, accessory, device as Lock); - break; - default: - this.log.warn( - 'This accessory is not compatible with HomeBridge Eufy Security plugin:', - accessory.displayName, - 'Type:', - type, - ); - return false; - } - return true; - } - - public async refreshData(client: EufySecurity): Promise { - this.log.debug( - `PollingInterval: ${this.eufyConfig.pollingIntervalMinutes}`, - ); - if (client) { - this.log.debug('Refresh data from cloud and schedule next refresh.'); - try { - await client.refreshCloudData(); - } catch (error) { - this.log.error('Error refreshing data from Eufy: ', error); - } - setTimeout(() => { - try { - this.refreshData(client); - } catch (error) { - this.log.error('Error refreshing data from Eufy: ', error); - } - }, this.eufyConfig.pollingIntervalMinutes * 60 * 1000); - } - } - - public getStationById(id: string) { - return this.eufyClient.getStation(id); - } -} diff --git a/src/settings.ts b/src/settings.ts deleted file mode 100644 index f96e462a..00000000 --- a/src/settings.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * This is the name of the platform that users will use to register the plugin in the Homebridge config.json - */ -export const PLATFORM_NAME = 'EufySecurity'; - -/** - * This must match the name of your plugin as defined the package.json - */ -export const PLUGIN_NAME = 'homebridge-eufy-security'; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index bf070994..00000000 --- a/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2018", // ~node10 - "module": "commonjs", - "lib": [ - "es2015", - "es2016", - "es2017", - "es2018" - ], - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "outDir": "./dist", - "rootDir": "./src", - "strict": true, - "esModuleInterop": true, - "noImplicitAny": false - }, - "include": [ - "src/" - ], - "exclude": [ - "**/*.spec.ts" - ] -}