diff --git a/Dockerfile b/Dockerfile index 2d38d9b72..9c7fc597c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,4 +6,5 @@ WORKDIR /server RUN apt-get -y update RUN apt-get -y install libavahi-compat-libdnssd-dev RUN npm install -CMD npm run serve +RUN npm run build +CMD npm run serve-no-build diff --git a/plugins/cloud/package-lock.json b/plugins/cloud/package-lock.json index 80d57c2f1..80d7b9e10 100644 --- a/plugins/cloud/package-lock.json +++ b/plugins/cloud/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/cloud", - "version": "0.0.13", + "version": "0.0.15", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/cloud", - "version": "0.0.13", + "version": "0.0.15", "dependencies": { "axios": "^0.21.1", "debug": "^4.3.1", diff --git a/plugins/cloud/package.json b/plugins/cloud/package.json index c547e2f05..0bb00329a 100644 --- a/plugins/cloud/package.json +++ b/plugins/cloud/package.json @@ -1,5 +1,6 @@ { "name": "@scrypted/cloud", + "description": "Scrypted Cloud plugin which makes your hub accessible at home.scrypted.app", "scripts": { "prepublishOnly": "NODE_ENV=production scrypted-webpack", "prescrypted-vscode-launch": "scrypted-webpack", @@ -11,6 +12,14 @@ "scrypted-package-json": "scrypted-package-json", "scrypted-webpack": "scrypted-webpack" }, + "keywords": [ + "scrypted", + "plugin", + "google", + "assistant", + "home", + "cloud" + ], "scrypted": { "name": "Scrypted Cloud", "type": "API", @@ -34,5 +43,5 @@ "@types/debug": "^4.1.5", "@types/http-proxy": "^1.17.5" }, - "version": "0.0.13" + "version": "0.0.15" } diff --git a/plugins/core/package-lock.json b/plugins/core/package-lock.json index be74a3854..973356c33 100644 --- a/plugins/core/package-lock.json +++ b/plugins/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/core", - "version": "0.0.79", + "version": "0.0.80", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/core", - "version": "0.0.79", + "version": "0.0.80", "license": "Apache-2.0", "dependencies": { "@scrypted/sdk": "file:../../sdk", diff --git a/plugins/core/package.json b/plugins/core/package.json index f1307c35b..7c070826f 100644 --- a/plugins/core/package.json +++ b/plugins/core/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/core", - "version": "0.0.79", + "version": "0.0.80", "description": "Scrypted Core plugin. Provides the UI, websocket, and engine.io APIs.", "author": "Scrypted", "license": "Apache-2.0", diff --git a/plugins/core/src/main.ts b/plugins/core/src/main.ts index 64ab7e76f..660af29b7 100644 --- a/plugins/core/src/main.ts +++ b/plugins/core/src/main.ts @@ -161,6 +161,7 @@ class ScryptedCore extends ScryptedDeviceBase implements HttpRequestHandler, Eng const { nativeId, pluginId } = await plugins.getDeviceInfo(deviceId); const port = await plugins.getRemoteServicePort(pluginId, name); const socket = net.connect(port); + socket.on('close', () => ws.close()); socket.on('data', data => ws.send(data)); socket.resume(); socket.write(nativeId?.toString() || 'undefined'); @@ -186,8 +187,6 @@ class ScryptedCore extends ScryptedDeviceBase implements HttpRequestHandler, Eng const userStorage = new UserStorage(request.username); peer.params.userStorage = userStorage; - - const listeners = new Set(); const api = new PluginAPIProxy(pluginHostAPI, mediaManager); const remote = await setupPluginRemote(peer, api, null); await remote.setSystemState(systemManager.getSystemState()); diff --git a/plugins/core/ui/src/common/camera.ts b/plugins/core/ui/src/common/camera.ts index 358a393e0..58011a83b 100644 --- a/plugins/core/ui/src/common/camera.ts +++ b/plugins/core/ui/src/common/camera.ts @@ -1,9 +1,5 @@ import {ScryptedDevice, Camera, ScryptedMimeTypes, RTCAVMessage, MediaManager, VideoCamera} from '@scrypted/sdk/types'; -async function sleep(ms) { - await new Promise((resolve) => setTimeout(resolve, ms)); - } - export async function streamCamera(mediaManager: MediaManager, device: ScryptedDevice & VideoCamera, getVideo: () => any, createPeerConnection: (configuration: any) => RTCPeerConnection) { const videoStream = await device.getVideoStream(); const offer = await mediaManager.convertMediaObjectToBuffer( diff --git a/plugins/core/ui/src/common/sleep.ts b/plugins/core/ui/src/common/sleep.ts new file mode 100644 index 000000000..ffd7420a0 --- /dev/null +++ b/plugins/core/ui/src/common/sleep.ts @@ -0,0 +1,3 @@ +export async function sleep(ms) { + await new Promise((resolve) => setTimeout(resolve, ms)); +} \ No newline at end of file diff --git a/plugins/core/ui/src/components/ConsoleCard.vue b/plugins/core/ui/src/components/ConsoleCard.vue index 73a6dde2c..07d91865e 100644 --- a/plugins/core/ui/src/components/ConsoleCard.vue +++ b/plugins/core/ui/src/components/ConsoleCard.vue @@ -6,12 +6,30 @@ \ No newline at end of file diff --git a/plugins/homekit/package-lock.json b/plugins/homekit/package-lock.json index 995223533..6abd40ce9 100644 --- a/plugins/homekit/package-lock.json +++ b/plugins/homekit/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/homekit", - "version": "0.0.45", + "version": "0.0.46", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/homekit", - "version": "0.0.45", + "version": "0.0.46", "dependencies": { "hap-nodejs": "file:../HAP-NodeJS", "lodash": "^4.17.21", diff --git a/plugins/homekit/package.json b/plugins/homekit/package.json index 88ff9e680..0084ab0cb 100644 --- a/plugins/homekit/package.json +++ b/plugins/homekit/package.json @@ -40,5 +40,5 @@ "@types/qrcode": "^1.4.1", "@types/url-parse": "^1.4.3" }, - "version": "0.0.45" + "version": "0.0.46" } diff --git a/plugins/homekit/src/main.ts b/plugins/homekit/src/main.ts index c236e8351..51b0b43c1 100644 --- a/plugins/homekit/src/main.ts +++ b/plugins/homekit/src/main.ts @@ -93,6 +93,12 @@ class HomeKit extends ScryptedDeviceBase implements MixinProvider, Settings { title: "Username Override", value: this.getUsername(), key: "mac", + }, + { + title: 'Bridge Address', + value: localStorage.getItem('addressOverride'), + key: 'addressOverride', + description: 'Override the default network address used by the Scrypted bridge. Set this to your wired IP if connected by both wired and wireless.' } ] } diff --git a/plugins/homekit/src/types/camera.ts b/plugins/homekit/src/types/camera.ts index b5f70965e..81b2e6a94 100644 --- a/plugins/homekit/src/types/camera.ts +++ b/plugins/homekit/src/types/camera.ts @@ -202,11 +202,7 @@ addSupportedType({ } sessions.set(request.sessionID, session); - // const addressOverride = (Object.entries(os.networkInterfaces()).filter(([iface, entry]) => iface.startsWith('en') || iface.startsWith('wlan')) as any) - // .flat().map(([iface, entry]) => entry).find(i => i.family == 'IPv4').address; - const response: PrepareStreamResponse = { - // addressOverride, video: { srtp_key: request.video.srtp_key, srtp_salt: request.video.srtp_salt, @@ -220,6 +216,14 @@ addSupportedType({ ssrc: audiossrc, } } + + // plugin scope or device scope? + const addressOverride = localStorage.getItem('addressOverride'); + if (addressOverride) { + console.log('using address override', addressOverride); + response.addressOverride = addressOverride; + } + callback(null, response); }, async handleStreamRequest(request: StreamingRequest, callback: StreamRequestCallback) { @@ -454,7 +458,7 @@ addSupportedType({ accessory.configureController(controller); if (controller.motionService) { - const motionDetected = needAudioMotionService ? + const motionDetected = needAudioMotionService ? () => device.audioDetected || device.motionDetected : () => !!device.motionDetected; @@ -464,21 +468,21 @@ addSupportedType({ callback(null, motionDetected()); }); + device.listen({ + event: ScryptedInterface.MotionSensor, + watch: false, + }, (eventSource, eventDetails, data) => { + service.updateCharacteristic(Characteristic.MotionDetected, motionDetected()); + }); + + if (needAudioMotionService) { device.listen({ - event: ScryptedInterface.MotionSensor, + event: ScryptedInterface.AudioSensor, watch: false, }, (eventSource, eventDetails, data) => { service.updateCharacteristic(Characteristic.MotionDetected, motionDetected()); }); - - if (needAudioMotionService) { - device.listen({ - event: ScryptedInterface.AudioSensor, - watch: false, - }, (eventSource, eventDetails, data) => { - service.updateCharacteristic(Characteristic.MotionDetected, motionDetected()); - }); - } + } } return accessory; diff --git a/server/package.json b/server/package.json index e0dd21381..4ea32073a 100644 --- a/server/package.json +++ b/server/package.json @@ -48,7 +48,8 @@ }, "scripts": { "preserve": "npm run build", - "serve": " node dist/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", "build": "tsc --outDir dist" },