diff --git a/API_SCHEMA.md b/API_SCHEMA.md index c95689c..ce4eaf5 100755 --- a/API_SCHEMA.md +++ b/API_SCHEMA.md @@ -31,3 +31,8 @@ Base schema. * Added new properties `chargingStatus`, `wifiSignalLevel`, `rtspStreamUrl`, `chirpVolume`, `chirpTone`, `videoHdr`, `videoDistortionCorrection` and `videoRingRecord` to Device * Renamed properties from `motionDetectionSensivity`, `soundDetectionSensivity` and `ledStatus` to `motionDetectionSensitivity`, `soundDetectionSensitivity` and `statusLed` for Device + +## Schema 5 + +* Added new properties `nightvision` and `batteryIsCharging` to Device +* Added new properties `switchModeWithAccessCode`, `autoEndAlarm` and `turnOffAlarmWithButton` to Station \ No newline at end of file diff --git a/README.md b/README.md index 454da26..ccf4cbf 100755 --- a/README.md +++ b/README.md @@ -1056,6 +1056,9 @@ interface { notificationSwitchModeApp: boolean; // [added with schema version: 3+] notificationSwitchModeKeypad: boolean; // [added with schema version: 3+] notificationStartAlarmDelay: boolean; // [added with schema version: 3+] + switchModeWithAccessCode: boolean; // [added with schema version: 5+] + autoEndAlarm: boolean; // [added with schema version: 5+] + turnOffAlarmWithButton: boolean; // [added with schema version: 5+] } } } @@ -1094,6 +1097,9 @@ interface { notificationSwitchModeApp: boolean; // [added with schema version: 3+] notificationSwitchModeKeypad: boolean; // [added with schema version: 3+] notificationStartAlarmDelay: boolean; // [added with schema version: 3+] + switchModeWithAccessCode: boolean; // [added with schema version: 5+] + autoEndAlarm: boolean; // [added with schema version: 5+] + turnOffAlarmWithButton: boolean; // [added with schema version: 5+] } } } @@ -1333,6 +1339,8 @@ interface { chargingStatus: number; // [added with schema version: 4+] rtspStreamUrl: string; // [added with schema version: 4+] wifiSignalLevel: number; // [added with schema version: 4+] + nightvision: number; // [added with schema version: 5+] + batteryIsCharging: boolean; // [added with schema version: 5+] } } } @@ -1441,6 +1449,8 @@ interface { chargingStatus: number; // [added with schema version: 4+] rtspStreamUrl: string; // [added with schema version: 4+] wifiSignalLevel: number; // [added with schema version: 4+] + nightvision: number; // [added with schema version: 5+] + batteryIsCharging: boolean; // [added with schema version: 5+] } } } diff --git a/package-lock.json b/package-lock.json index 5184167..bdd7e60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,20 @@ { "name": "eufy-security-ws", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", "commander": "^8.1.0", - "eufy-security-client": "^1.0.0", + "eufy-security-client": "^1.1.1", "fs-extra": "^10.0.0", "promptly": "^3.2.0", "tslog": "^3.2.0", - "ws": "^8.0.0" + "ws": "^8.1.0" }, "bin": { "eufy-security-client": "dist/bin/client.js", @@ -22,16 +22,16 @@ }, "devDependencies": { "@types/ansi-colors": "3.2.2", - "@types/node": "^16.4.13", + "@types/node": "^16.4.14", "@types/node-rsa": "^1.1.1", "@types/promptly": "^3.0.2", "@types/ws": "^7.4.7", - "@typescript-eslint/eslint-plugin": "^4.29.0", - "@typescript-eslint/parser": "^4.29.0", + "@typescript-eslint/eslint-plugin": "^4.29.1", + "@typescript-eslint/parser": "^4.29.1", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "prettier": "^2.3.2", - "ts-node": "^10.1.0", + "ts-node": "^10.2.0", "typescript": "^4.3.5" }, "engines": { @@ -101,6 +101,27 @@ "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.6.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", + "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -258,9 +279,9 @@ "dev": true }, "node_modules/@tsconfig/node16": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", - "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", + "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/ansi-colors": { @@ -285,9 +306,9 @@ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "node_modules/@types/node": { - "version": "16.4.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.13.tgz", - "integrity": "sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz", + "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==", "dev": true }, "node_modules/@types/node-rsa": { @@ -318,13 +339,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz", - "integrity": "sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz", + "integrity": "sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "4.29.0", - "@typescript-eslint/scope-manager": "4.29.0", + "@typescript-eslint/experimental-utils": "4.29.1", + "@typescript-eslint/scope-manager": "4.29.1", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.1.0", @@ -349,15 +370,15 @@ } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.0.tgz", - "integrity": "sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz", + "integrity": "sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.0", - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/typescript-estree": "4.29.0", + "@typescript-eslint/scope-manager": "4.29.1", + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/typescript-estree": "4.29.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -373,14 +394,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.0.tgz", - "integrity": "sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.1.tgz", + "integrity": "sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "4.29.0", - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/typescript-estree": "4.29.0", + "@typescript-eslint/scope-manager": "4.29.1", + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/typescript-estree": "4.29.1", "debug": "^4.3.1" }, "engines": { @@ -400,13 +421,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz", - "integrity": "sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz", + "integrity": "sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/visitor-keys": "4.29.0" + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1" }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" @@ -417,9 +438,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.0.tgz", - "integrity": "sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.1.tgz", + "integrity": "sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==", "dev": true, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" @@ -430,13 +451,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz", - "integrity": "sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz", + "integrity": "sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/visitor-keys": "4.29.0", + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -457,12 +478,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz", - "integrity": "sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz", + "integrity": "sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.29.0", + "@typescript-eslint/types": "4.29.1", "eslint-visitor-keys": "^2.0.0" }, "engines": { @@ -494,6 +515,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", + "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", @@ -1096,9 +1126,9 @@ } }, "node_modules/eufy-security-client": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eufy-security-client/-/eufy-security-client-1.0.0.tgz", - "integrity": "sha512-sDoSYHl6t8PPgIVSg184pavHzWAf4F+Af6byWrInM5wlXcXztTlwZcEtDuDVt4ErW6llUB/1TVlJ6t3E3lBq4A==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eufy-security-client/-/eufy-security-client-1.1.1.tgz", + "integrity": "sha512-sn91x01BKIAAWo9QPncS1+m/q88Ews8PW9FnEp+C6GVnrtWQiVsB2cjaN4QaNaYG56oB0W3DtybH3TRupqlhIg==", "dependencies": { "@cospired/i18n-iso-languages": "^3.0.0", "axios": "^0.21.1", @@ -2172,20 +2202,22 @@ "integrity": "sha512-XvB+OdKSJ708Dmf9ore4Uf/q62AYDTzFcAdxc8KNML1mmAWywRFVt/dn1KYJH8Agt5UJNujfM3znU5PxgAzA2w==" }, "node_modules/ts-node": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.1.0.tgz", - "integrity": "sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.0.tgz", + "integrity": "sha512-FstYHtQz6isj8rBtYMN4bZdnXN1vq4HCbqn9vdNQcInRqtB86PePJQIxE6es0PhxKWhj2PHuwbG40H+bxkZPmg==", "dev": true, "dependencies": { + "@cspotcode/source-map-support": "0.6.1", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.1", + "@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", - "source-map-support": "^0.5.17", "yn": "3.1.1" }, "bin": { @@ -2213,6 +2245,18 @@ } } }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -2336,9 +2380,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.0.0.tgz", - "integrity": "sha512-6AcSIXpBlS0QvCVKk+3cWnWElLsA6SzC0lkQ43ciEglgXJXiCWK3/CGFEJ+Ybgp006CMibamAsqOlxE9s4AvYA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.1.0.tgz", + "integrity": "sha512-0UWlCD2s3RSclw8FN+D0zDTUyMO+1kHwJQQJzkgUh16S8d3NYON0AKCEQPffE0ez4JyRFu76QDA9KR5bOG/7jw==", "engines": { "node": ">=10.0.0" }, @@ -2422,6 +2466,21 @@ "resolved": "https://registry.npmjs.org/@cospired/i18n-iso-languages/-/i18n-iso-languages-3.0.0.tgz", "integrity": "sha512-lWFeUgijCtMyhY+UtGs1ajmfR3EnAHTVbEeuI8ZG5MXz79j9dZmohf6DPB6C3C18MBvaFDzNIXiXezmzCe4tYg==" }, + "@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.6.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", + "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -2563,9 +2622,9 @@ "dev": true }, "@tsconfig/node16": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", - "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", + "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/ansi-colors": { @@ -2589,9 +2648,9 @@ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "@types/node": { - "version": "16.4.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.13.tgz", - "integrity": "sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz", + "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==", "dev": true }, "@types/node-rsa": { @@ -2622,13 +2681,13 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz", - "integrity": "sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz", + "integrity": "sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.29.0", - "@typescript-eslint/scope-manager": "4.29.0", + "@typescript-eslint/experimental-utils": "4.29.1", + "@typescript-eslint/scope-manager": "4.29.1", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.1.0", @@ -2637,55 +2696,55 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.0.tgz", - "integrity": "sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz", + "integrity": "sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.0", - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/typescript-estree": "4.29.0", + "@typescript-eslint/scope-manager": "4.29.1", + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/typescript-estree": "4.29.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.0.tgz", - "integrity": "sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.1.tgz", + "integrity": "sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.29.0", - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/typescript-estree": "4.29.0", + "@typescript-eslint/scope-manager": "4.29.1", + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/typescript-estree": "4.29.1", "debug": "^4.3.1" } }, "@typescript-eslint/scope-manager": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz", - "integrity": "sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz", + "integrity": "sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/visitor-keys": "4.29.0" + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1" } }, "@typescript-eslint/types": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.0.tgz", - "integrity": "sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.1.tgz", + "integrity": "sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz", - "integrity": "sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz", + "integrity": "sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.0", - "@typescript-eslint/visitor-keys": "4.29.0", + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -2694,12 +2753,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz", - "integrity": "sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz", + "integrity": "sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.0", + "@typescript-eslint/types": "4.29.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -2716,6 +2775,12 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", + "dev": true + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3177,9 +3242,9 @@ "dev": true }, "eufy-security-client": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eufy-security-client/-/eufy-security-client-1.0.0.tgz", - "integrity": "sha512-sDoSYHl6t8PPgIVSg184pavHzWAf4F+Af6byWrInM5wlXcXztTlwZcEtDuDVt4ErW6llUB/1TVlJ6t3E3lBq4A==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eufy-security-client/-/eufy-security-client-1.1.1.tgz", + "integrity": "sha512-sn91x01BKIAAWo9QPncS1+m/q88Ews8PW9FnEp+C6GVnrtWQiVsB2cjaN4QaNaYG56oB0W3DtybH3TRupqlhIg==", "requires": { "@cospired/i18n-iso-languages": "^3.0.0", "axios": "^0.21.1", @@ -3980,21 +4045,31 @@ "integrity": "sha512-XvB+OdKSJ708Dmf9ore4Uf/q62AYDTzFcAdxc8KNML1mmAWywRFVt/dn1KYJH8Agt5UJNujfM3znU5PxgAzA2w==" }, "ts-node": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.1.0.tgz", - "integrity": "sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.0.tgz", + "integrity": "sha512-FstYHtQz6isj8rBtYMN4bZdnXN1vq4HCbqn9vdNQcInRqtB86PePJQIxE6es0PhxKWhj2PHuwbG40H+bxkZPmg==", "dev": true, "requires": { + "@cspotcode/source-map-support": "0.6.1", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.1", + "@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", - "source-map-support": "^0.5.17", "yn": "3.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "dev": true + } } }, "tslib": { @@ -4083,9 +4158,9 @@ "dev": true }, "ws": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.0.0.tgz", - "integrity": "sha512-6AcSIXpBlS0QvCVKk+3cWnWElLsA6SzC0lkQ43ciEglgXJXiCWK3/CGFEJ+Ybgp006CMibamAsqOlxE9s4AvYA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.1.0.tgz", + "integrity": "sha512-0UWlCD2s3RSclw8FN+D0zDTUyMO+1kHwJQQJzkgUh16S8d3NYON0AKCEQPffE0ez4JyRFu76QDA9KR5bOG/7jw==", "requires": {} }, "yallist": { diff --git a/package.json b/package.json index 1d939db..360cd53 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eufy-security-ws", - "version": "0.4.0", + "version": "0.4.1", "description": "Node WebSocket server implementation to integrate Eufy Security devices", "main": "dist/lib/index.js", "bin": { @@ -44,24 +44,24 @@ "dependencies": { "ansi-colors": "^4.1.1", "commander": "^8.1.0", - "eufy-security-client": "^1.0.0", + "eufy-security-client": "^1.1.1", "fs-extra": "^10.0.0", "promptly": "^3.2.0", "tslog": "^3.2.0", - "ws": "^8.0.0" + "ws": "^8.1.0" }, "devDependencies": { "@types/ansi-colors": "3.2.2", - "@types/node": "^16.4.13", + "@types/node": "^16.4.14", "@types/node-rsa": "^1.1.1", "@types/promptly": "^3.0.2", "@types/ws": "^7.4.7", - "@typescript-eslint/eslint-plugin": "^4.29.0", - "@typescript-eslint/parser": "^4.29.0", + "@typescript-eslint/eslint-plugin": "^4.29.1", + "@typescript-eslint/parser": "^4.29.1", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "prettier": "^2.3.2", - "ts-node": "^10.1.0", + "ts-node": "^10.2.0", "typescript": "^4.3.5" } } diff --git a/src/lib/const.ts b/src/lib/const.ts index 6beeb8a..f58e60e 100755 --- a/src/lib/const.ts +++ b/src/lib/const.ts @@ -5,4 +5,4 @@ export const version = require("../../package.json").version; export const minSchemaVersion = 0; // maximal/current schema version the server supports -export const maxSchemaVersion = 4; +export const maxSchemaVersion = 5; diff --git a/src/lib/device/state.ts b/src/lib/device/state.ts index 8848040..b7f043c 100644 --- a/src/lib/device/state.ts +++ b/src/lib/device/state.ts @@ -111,12 +111,20 @@ DeviceStateSchema3, "motionDetectionSensivity" | "soundDetectionSensivity" | "ledStatus" >; +type DeviceStateSchema5 = Modify< +DeviceStateSchema4, +{ + batteryIsCharging?: boolean; + nightvision?: number; +}>; + export type DeviceState = | DeviceStateSchema0 | DeviceStateSchema1 | DeviceStateSchema3 - | DeviceStateSchema4; + | DeviceStateSchema4 + | DeviceStateSchema5; // eslint-disable-next-line @typescript-eslint/no-unused-vars export const dumpDevice = (device: Device, schemaVersion: number): DeviceState => { @@ -216,7 +224,6 @@ export const dumpDevice = (device: Device, schemaVersion: number): DeviceState = return device3; } - // All schemas >= 4 const device4 = device3 as DeviceStateSchema4; device4.chirpVolume = device.getPropertyValue(PropertyName.DeviceChirpVolume)?.value as number; device4.chirpTone = device.getPropertyValue(PropertyName.DeviceChirpTone)?.value as number; @@ -229,7 +236,15 @@ export const dumpDevice = (device: Device, schemaVersion: number): DeviceState = device4.rtspStreamUrl = device.getPropertyValue(PropertyName.DeviceRTSPStreamUrl)?.value as string; device4.chargingStatus = device.getPropertyValue(PropertyName.DeviceChargingStatus)?.value as number; device4.wifiSignalLevel = device.getPropertyValue(PropertyName.DeviceWifiSignalLevel)?.value as number; + if (schemaVersion <= 4) { + return device4; + } + + // All schemas >= 5 + const device5 = device4 as DeviceStateSchema5; + device5.nightvision = device.getPropertyValue(PropertyName.DeviceNightvision)?.value as number; + device5.batteryIsCharging = device.getPropertyValue(PropertyName.DeviceBatteryIsCharging)?.value as boolean; - return device4; + return device5; }; \ No newline at end of file diff --git a/src/lib/forward.ts b/src/lib/forward.ts index e379470..411434f 100755 --- a/src/lib/forward.ts +++ b/src/lib/forward.ts @@ -11,6 +11,7 @@ import { Client, ClientsController } from "./server"; import { StationCommand } from "./station/command"; import { DeviceCommand } from "./device/command"; import { maxSchemaVersion as internalSchemaVersion } from "./const"; +import { DeviceMessageHandler } from "./device/message_handler"; export class EventForwarder { @@ -172,6 +173,7 @@ export class EventForwarder { }); } client.receiveLivestream[serialNumber] = false; + DeviceMessageHandler.removeStreamingDevice(station.getSerial(), client); }); }); @@ -188,7 +190,7 @@ export class EventForwarder { } }); videostream.on("data", (chunk: Buffer) => { - this.clients.clients.filter((cl) => cl.receiveLivestream[serialNumber] === true && cl.isConnected) + this.clients.clients.filter((cl) => cl.isConnected) .forEach((client) => { if (client.schemaVersion >= 3) { client.sendEvent({ @@ -226,7 +228,7 @@ export class EventForwarder { this.clients.driver.on("station download finish", (station: Station, device: Device) => { const serialNumber = device.getSerial(); - this.clients.clients.filter((cl) => cl.receiveLivestream[serialNumber] === true && cl.isConnected) + this.clients.clients.filter((cl) => cl.isConnected) .forEach((client) => { if (client.schemaVersion >= 3) { client.sendEvent({ @@ -235,7 +237,6 @@ export class EventForwarder { serialNumber: serialNumber, }); } - client.receiveLivestream[serialNumber] = false; }); }); diff --git a/src/lib/station/state.ts b/src/lib/station/state.ts index 4cfa2d2..2a68e06 100644 --- a/src/lib/station/state.ts +++ b/src/lib/station/state.ts @@ -16,8 +16,9 @@ export interface StationStateSchema0 { type StationStateSchema1 = Modify< StationStateSchema0, -{ type: DeviceType } ->; +{ + type: DeviceType +}>; type StationStateSchema3 = Modify< StationStateSchema1, @@ -33,10 +34,19 @@ StationStateSchema1, notificationStartAlarmDelay?: boolean; }>; +type StationStateSchema5 = Modify< +StationStateSchema3, +{ + switchModeWithAccessCode?: boolean; + autoEndAlarm?: boolean; + turnOffAlarmWithButton?: boolean; +}>; + export type StationState = | StationStateSchema0 | StationStateSchema1 - | StationStateSchema3; + | StationStateSchema3 + | StationStateSchema5; // eslint-disable-next-line @typescript-eslint/no-unused-vars export const dumpStation = (station: Station, schemaVersion: number): StationState => { @@ -63,7 +73,6 @@ export const dumpStation = (station: Station, schemaVersion: number): StationSta return station1; } - // All schemas >= 3 const station3 = station1 as StationStateSchema3; station3.timeFormat = station.getPropertyValue(PropertyName.StationTimeFormat)?.value as number; station3.alarmVolume = station.getPropertyValue(PropertyName.StationAlarmVolume)?.value as number; @@ -74,6 +83,15 @@ export const dumpStation = (station: Station, schemaVersion: number): StationSta station3.notificationSwitchModeApp = station.getPropertyValue(PropertyName.StationNotificationSwitchModeApp)?.value as boolean; station3.notificationSwitchModeKeypad = station.getPropertyValue(PropertyName.StationNotificationSwitchModeKeypad)?.value as boolean; station3.notificationStartAlarmDelay = station.getPropertyValue(PropertyName.StationNotificationStartAlarmDelay)?.value as boolean; + if (schemaVersion <= 4) { + return station3; + } + + // All schemas >= 5 + const station5 = station3 as StationStateSchema5; + station5.switchModeWithAccessCode = station.getPropertyValue(PropertyName.StationSwitchModeWithAccessCode)?.value as boolean; + station5.autoEndAlarm = station.getPropertyValue(PropertyName.StationAutoEndAlarm)?.value as boolean; + station5.turnOffAlarmWithButton = station.getPropertyValue(PropertyName.StationTurnOffAlarmWithButton)?.value as boolean; - return station3; + return station5; }; \ No newline at end of file