diff --git a/common/src/ffmpeg-helper.ts b/common/src/ffmpeg-helper.ts index 74bb71344..99704e5ed 100644 --- a/common/src/ffmpeg-helper.ts +++ b/common/src/ffmpeg-helper.ts @@ -1,22 +1 @@ -import { ChildProcess } from "child_process"; - -export function ffmpegLogInitialOutput(console: Console, cp: ChildProcess, forever?: boolean) { - function logger(log: (str: string) => void): (buffer: Buffer) => void { - const ret = (buffer: Buffer) => { - const str = buffer.toString(); - if (!forever && (str.indexOf('frame=') !== -1 || str.indexOf('size=') !== -1)) { - log(str); - log('video/audio detected, discarding further input'); - cp.stdout.removeListener('data', ret); - cp.stderr.removeListener('data', ret); - return; - } - - log(str); - } - - return ret; - }; - cp.stdout?.on('data', logger(console.log)); - cp.stderr?.on('data', logger(console.error)); -} \ No newline at end of file +export * from '../../server/src/ffmpeg-helper'; diff --git a/server/.vscode/launch.json b/server/.vscode/launch.json index 3b9c45114..896bc59f6 100644 --- a/server/.vscode/launch.json +++ b/server/.vscode/launch.json @@ -13,7 +13,7 @@ "/**" ], "preLaunchTask": "npm: build", - "program": "${workspaceFolder}/dist/server/src/scrypted-main.js", + "program": "${workspaceFolder}/dist/scrypted-main.js", "runtimeArgs": [ "--expose-gc", "--nolazy", diff --git a/server/package-lock.json b/server/package-lock.json index 8e89f8d36..733670d56 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@scrypted/common": "file:../common", "@scrypted/sdk": "file:../sdk", "@types/adm-zip": "^0.4.33", "@types/cookie-parser": "^1.4.2", @@ -36,8 +37,8 @@ "source-map-support": "^0.5.20", "tar": "^6.1.11", "tmp": "^0.2.1", - "ts-node": "^9.1.1", - "typescript": "^4.1.5", + "ts-node": "^10.2.1", + "typescript": "^4.4.3", "whatwg-mimetype": "^2.3.0", "wrtc": "^0.4.7", "zwave-js": "^8.1.1" @@ -55,6 +56,16 @@ "mdns": "^2.7.2" } }, + "../common": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "@scrypted/sdk": "file:../sdk" + }, + "devDependencies": { + "@types/node": "^16.9.0" + } + }, "../plugins/scrypted-sdk": { "name": "@scrypted/sdk", "version": "0.0.63", @@ -107,19 +118,23 @@ }, "../sdk": { "name": "@scrypted/sdk", - "version": "0.0.70", + "version": "0.0.72", "license": "ISC", "dependencies": { "@babel/core": "^7.2.2", "@babel/plugin-proposal-class-properties": "^7.4.4", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", "@babel/plugin-transform-modules-commonjs": "^7.2.0", "@babel/plugin-transform-typescript": "^7.15.0", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.2.3", "@babel/preset-typescript": "^7.15.0", + "@types/node": "^16.6.1", "adm-zip": "^0.4.13", "axios": "^0.21.1", "babel-loader": "^8.0.4", + "babel-plugin-const-enum": "^1.1.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.1", "babel-polyfill": "^6.26.0", "babel-template": "^6.26.0", "browserify-buffertools": "^1.0.2", @@ -148,12 +163,6 @@ "scrypted-package-json": "bin/scrypted-package-json.js", "scrypted-readme": "bin/scrypted-readme.js", "scrypted-webpack": "bin/scrypted-webpack.js" - }, - "devDependencies": { - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@types/node": "^16.6.1", - "babel-plugin-const-enum": "^1.1.0", - "babel-plugin-minify-dead-code-elimination": "^0.5.1" } }, "node_modules/@alcalzone/jsonl-db": { @@ -190,6 +199,25 @@ "fs-extra": "^9.1.0" } }, + "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==", + "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==", + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@dabh/diagnostics": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", @@ -200,6 +228,10 @@ "kuler": "^2.0.0" } }, + "node_modules/@scrypted/common": { + "resolved": "../common", + "link": true + }, "node_modules/@scrypted/sdk": { "resolved": "../sdk", "link": true @@ -448,6 +480,26 @@ "node": ">=10.0.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + }, + "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==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + }, + "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==" + }, "node_modules/@types/adm-zip": { "version": "0.4.33", "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.4.33.tgz", @@ -803,6 +855,25 @@ "node": ">= 0.6" } }, + "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==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.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==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/adm-zip": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.3.tgz", @@ -3133,25 +3204,46 @@ "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", + "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", "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.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": { "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" }, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" + }, + "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": { @@ -3183,9 +3275,9 @@ } }, "node_modules/typescript": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", - "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3504,6 +3596,19 @@ "fs-extra": "^9.1.0" } }, + "@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==" + }, + "@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==", + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@dabh/diagnostics": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", @@ -3514,6 +3619,13 @@ "kuler": "^2.0.0" } }, + "@scrypted/common": { + "version": "file:../common", + "requires": { + "@scrypted/sdk": "file:../sdk", + "@types/node": "^16.9.0" + } + }, "@scrypted/sdk": { "version": "file:../sdk", "requires": { @@ -3731,6 +3843,26 @@ "debug": "^4.3.1" } }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" + }, "@types/adm-zip": { "version": "0.4.33", "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.4.33.tgz", @@ -4044,6 +4176,16 @@ "negotiator": "0.6.2" } }, + "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==" + }, + "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==" + }, "adm-zip": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.3.tgz", @@ -5927,15 +6069,21 @@ "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", + "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", "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.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" } }, @@ -5962,9 +6110,9 @@ } }, "typescript": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", - "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==" + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==" }, "universalify": { "version": "2.0.0", diff --git a/server/package.json b/server/package.json index 57be3bd53..3c47baf5a 100644 --- a/server/package.json +++ b/server/package.json @@ -30,8 +30,8 @@ "source-map-support": "^0.5.20", "tar": "^6.1.11", "tmp": "^0.2.1", - "ts-node": "^9.1.1", - "typescript": "^4.1.5", + "ts-node": "^10.2.1", + "typescript": "^4.4.3", "whatwg-mimetype": "^2.3.0", "wrtc": "^0.4.7", "zwave-js": "^8.1.1" @@ -50,9 +50,10 @@ }, "scripts": { "preserve": "npm run build", - "serve": "node dist/server/src/scrypted-main.js", - "serve-no-build": "node dist/server/src/scrypted-main.js", + "serve": "node dist/scrypted-main.js", + "serve-no-build": "node dist/scrypted-main.js", "ts-serve": "ts-node src/scrypted-main.ts", + "prebuild": "tsc --build --clean", "build": "tsc --outDir dist" }, "author": "", diff --git a/server/src/ffmpeg-helper.ts b/server/src/ffmpeg-helper.ts new file mode 100644 index 000000000..ab3eb9c0c --- /dev/null +++ b/server/src/ffmpeg-helper.ts @@ -0,0 +1,22 @@ +import { ChildProcess } from "child_process"; + +export function ffmpegLogInitialOutput(console: Console, cp: ChildProcess, forever?: boolean) { + function logger(log: (str: string) => void): (buffer: Buffer) => void { + const ret = (buffer: Buffer) => { + const str = buffer.toString(); + if (!forever && (str.indexOf('frame=') !== -1 || str.indexOf('size=') !== -1)) { + log(str); + log('video/audio detected, discarding further input'); + cp.stdout.removeListener('data', ret); + cp.stderr.removeListener('data', ret); + return; + } + + log(str); + } + + return ret; + }; + cp.stdout?.on('data', logger(console.log)); + cp.stderr?.on('data', logger(console.error)); +} diff --git a/server/src/plugin/media.ts b/server/src/plugin/media.ts index cf44eaf90..2dc7f7d59 100644 --- a/server/src/plugin/media.ts +++ b/server/src/plugin/media.ts @@ -10,7 +10,7 @@ import net from 'net'; import os from 'os'; import { listenZeroCluster } from "./cluster-helper"; import pathToFfmpeg from 'ffmpeg-for-homebridge'; -import { ffmpegLogInitialOutput } from '../../../common/src/ffmpeg-helper'; +import { ffmpegLogInitialOutput } from "../ffmpeg-helper"; const wrtc = require('wrtc'); Object.assign(global, wrtc);