mirror of
https://github.com/koush/scrypted.git
synced 2026-02-09 00:39:56 +00:00
cloud: new server and new protocol that doesnt use webrtc
This commit is contained in:
51
plugins/cloud/package-lock.json
generated
51
plugins/cloud/package-lock.json
generated
@@ -1,15 +1,16 @@
|
||||
{
|
||||
"name": "@scrypted/cloud",
|
||||
"version": "0.0.22",
|
||||
"version": "0.0.23",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@scrypted/cloud",
|
||||
"version": "0.0.22",
|
||||
"version": "0.0.23",
|
||||
"dependencies": {
|
||||
"@koush/wrtc": "^0.5.2",
|
||||
"axios": "^0.21.1",
|
||||
"bpmux": "^8.1.3",
|
||||
"debug": "^4.3.1",
|
||||
"http-proxy": "^1.18.1",
|
||||
"push-receiver": "^2.1.1",
|
||||
@@ -23,7 +24,7 @@
|
||||
},
|
||||
"../../sdk": {
|
||||
"name": "@scrypted/sdk",
|
||||
"version": "0.0.134",
|
||||
"version": "0.0.139",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@@ -498,6 +499,17 @@
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
||||
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
|
||||
},
|
||||
"node_modules/bpmux": {
|
||||
"version": "8.1.3",
|
||||
"resolved": "https://registry.npmjs.org/bpmux/-/bpmux-8.1.3.tgz",
|
||||
"integrity": "sha512-GPcaXF/V5vQk6GjpYLAuaMZtm+sHN6RGq04dBzzZIMlfWwgI8e2iyjfZAoGHBEKpSywR/rStniaITLwkrC9FdQ==",
|
||||
"dependencies": {
|
||||
"frame-stream": "^2.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12"
|
||||
}
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
@@ -737,9 +749,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.14.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz",
|
||||
"integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==",
|
||||
"version": "1.14.7",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz",
|
||||
"integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
@@ -776,6 +788,14 @@
|
||||
"node": ">= 0.12"
|
||||
}
|
||||
},
|
||||
"node_modules/frame-stream": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/frame-stream/-/frame-stream-2.1.0.tgz",
|
||||
"integrity": "sha512-EFeq3xo+oXi2zmpwzK3cN84iIPp7gR8dZS8VZXd4kcBtjct1Br8VDsfib235pWo4VrBO/LxT5lGHbxvX+XgSUQ==",
|
||||
"engines": {
|
||||
"node": ">=5"
|
||||
}
|
||||
},
|
||||
"node_modules/fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
@@ -2277,6 +2297,14 @@
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
||||
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
|
||||
},
|
||||
"bpmux": {
|
||||
"version": "8.1.3",
|
||||
"resolved": "https://registry.npmjs.org/bpmux/-/bpmux-8.1.3.tgz",
|
||||
"integrity": "sha512-GPcaXF/V5vQk6GjpYLAuaMZtm+sHN6RGq04dBzzZIMlfWwgI8e2iyjfZAoGHBEKpSywR/rStniaITLwkrC9FdQ==",
|
||||
"requires": {
|
||||
"frame-stream": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
@@ -2468,9 +2496,9 @@
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.14.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz",
|
||||
"integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A=="
|
||||
"version": "1.14.7",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz",
|
||||
"integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ=="
|
||||
},
|
||||
"forever-agent": {
|
||||
"version": "0.6.1",
|
||||
@@ -2487,6 +2515,11 @@
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"frame-stream": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/frame-stream/-/frame-stream-2.1.0.tgz",
|
||||
"integrity": "sha512-EFeq3xo+oXi2zmpwzK3cN84iIPp7gR8dZS8VZXd4kcBtjct1Br8VDsfib235pWo4VrBO/LxT5lGHbxvX+XgSUQ=="
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
"dependencies": {
|
||||
"@koush/wrtc": "^0.5.2",
|
||||
"axios": "^0.21.1",
|
||||
"bpmux": "^8.1.3",
|
||||
"debug": "^4.3.1",
|
||||
"http-proxy": "^1.18.1",
|
||||
"push-receiver": "^2.1.1",
|
||||
@@ -44,5 +45,5 @@
|
||||
"@types/debug": "^4.1.5",
|
||||
"@types/http-proxy": "^1.17.5"
|
||||
},
|
||||
"version": "0.0.22"
|
||||
"version": "0.0.23"
|
||||
}
|
||||
|
||||
@@ -469,11 +469,8 @@ export class GcmRtcManager extends EventEmitter {
|
||||
conn.manager.incoming(senderId, src, srcPort, dst, dstPort, message);
|
||||
return;
|
||||
}
|
||||
else if (GcmRtcManager.onUnknownMessage) {
|
||||
GcmRtcManager.onUnknownMessage(data);
|
||||
}
|
||||
else {
|
||||
debug('unknown message ' + type);
|
||||
throw new Error("unhandled message");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -881,10 +878,6 @@ export class GcmRtcManager extends EventEmitter {
|
||||
}
|
||||
return sdp;
|
||||
};
|
||||
|
||||
static onUnknownMessage(data: any) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,10 +11,12 @@ import Url from 'url';
|
||||
import sdk from "@scrypted/sdk";
|
||||
import { once } from 'events';
|
||||
import path from 'path';
|
||||
import bpmux from 'bpmux';
|
||||
|
||||
const { deviceManager, endpointManager } = sdk;
|
||||
|
||||
export const DEFAULT_SENDER_ID = '827888101440';
|
||||
const SCRYPTED_SERVER = 'home.scrypted.app';
|
||||
|
||||
export async function createDefaultRtcManager(): Promise<GcmRtcManager> {
|
||||
const manager = await GcmRtcManager.start({
|
||||
@@ -23,11 +25,6 @@ export async function createDefaultRtcManager(): Promise<GcmRtcManager> {
|
||||
},
|
||||
{
|
||||
iceServers: [
|
||||
{
|
||||
urls: ["turn:turn0.clockworkmod.com", "turn:n0.clockworkmod.com", "turn:n1.clockworkmod.com"],
|
||||
username: "foo",
|
||||
credential: "bar",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -132,7 +129,7 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings,
|
||||
}
|
||||
|
||||
getHostname() {
|
||||
const hostname = this.storage.getItem('hostname') || 'home.scrypted.app';
|
||||
const hostname = this.storage.getItem('hostname') || SCRYPTED_SERVER;
|
||||
return hostname;
|
||||
}
|
||||
|
||||
@@ -178,7 +175,7 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings,
|
||||
registration_id: this.manager.registrationId,
|
||||
sender_id: DEFAULT_SENDER_ID,
|
||||
})
|
||||
return `https://home.scrypted.app/_punch/login?${args}`;
|
||||
return `https://home.koushikdutta.com/_punch/login?${args}`;
|
||||
// this is disabled because we can't assume that custom domains will implement this oauth endpoint.
|
||||
// return `https://${this.getHostname()}/_punch/login?${args}`
|
||||
}
|
||||
@@ -244,20 +241,39 @@ class ScryptedCloud extends ScryptedDeviceBase implements OauthClient, Settings,
|
||||
|
||||
this.manager = await createDefaultRtcManager();
|
||||
this.manager.on('unhandled', message => {
|
||||
if (message.type !== 'cloudmessage')
|
||||
return;
|
||||
try {
|
||||
const payload = JSON.parse(message.request) as HttpRequest;
|
||||
if (!payload.rootPath?.startsWith('/push/'))
|
||||
return;
|
||||
const endpoint = payload.rootPath.replace('/push/', '');
|
||||
payload.rootPath = '/';
|
||||
endpointManager.deliverPush(endpoint, payload)
|
||||
if (message.type === 'cloudmessage') {
|
||||
try {
|
||||
const payload = JSON.parse(message.request) as HttpRequest;
|
||||
if (!payload.rootPath?.startsWith('/push/'))
|
||||
return;
|
||||
const endpoint = payload.rootPath.replace('/push/', '');
|
||||
payload.rootPath = '/';
|
||||
endpointManager.deliverPush(endpoint, payload)
|
||||
}
|
||||
catch (e) {
|
||||
this.console.error('cloudmessage error', e);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
this.console.error('cloudmessage error', e);
|
||||
else if (message.type === 'callback') {
|
||||
const client = net.connect(4000, 'home.scrypted.app');
|
||||
client.write(this.manager.registrationId + '\n');
|
||||
const mux: any = new bpmux.BPMux(client as any);
|
||||
mux.on('handshake', async (socket: Duplex) => {
|
||||
let local: any;
|
||||
|
||||
await new Promise(resolve => process.nextTick(resolve));
|
||||
|
||||
local = net.connect({
|
||||
port,
|
||||
host: '127.0.0.1',
|
||||
});
|
||||
await new Promise(resolve => process.nextTick(resolve));
|
||||
|
||||
socket.pipe(local).pipe(socket);
|
||||
})
|
||||
}
|
||||
});
|
||||
// legacy
|
||||
this.manager.listen("http://localhost", (conn: GcmRtcConnection) => {
|
||||
conn.on('socket', async (command: string, socket: Duplex) => {
|
||||
let local: any;
|
||||
|
||||
Reference in New Issue
Block a user