@scrypted/server 0.0.81 → 0.0.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @scrypted/server might be problematic. Click here for more details.
- package/dist/plugin/plugin-console.js +93 -0
- package/dist/plugin/plugin-console.js.map +1 -0
- package/dist/plugin/plugin-device.js +6 -1
- package/dist/plugin/plugin-device.js.map +1 -1
- package/dist/plugin/plugin-host-api.js +1 -1
- package/dist/plugin/plugin-host-api.js.map +1 -1
- package/dist/plugin/plugin-host.js +74 -174
- package/dist/plugin/plugin-host.js.map +1 -1
- package/dist/plugin/plugin-npm-dependencies.js +2 -2
- package/dist/plugin/plugin-npm-dependencies.js.map +1 -1
- package/dist/plugin/plugin-remote.js +7 -9
- package/dist/plugin/plugin-remote.js.map +1 -1
- package/dist/plugin/plugin-repl.js +69 -0
- package/dist/plugin/plugin-repl.js.map +1 -0
- package/dist/runtime.js +2 -21
- package/dist/runtime.js.map +1 -1
- package/dist/scrypted-main.js +33 -20
- package/dist/scrypted-main.js.map +1 -1
- package/dist/services/plugin.js +8 -0
- package/dist/services/plugin.js.map +1 -1
- package/package.json +2 -2
- package/python/plugin-remote.py +45 -20
- package/python/rpc.py +1 -1
- package/src/plugin/plugin-api.ts +2 -2
- package/src/plugin/plugin-console.ts +115 -0
- package/src/plugin/plugin-device.ts +7 -1
- package/src/plugin/plugin-host-api.ts +1 -1
- package/src/plugin/plugin-host.ts +72 -198
- package/src/plugin/plugin-npm-dependencies.ts +2 -3
- package/src/plugin/plugin-remote.ts +11 -10
- package/src/plugin/plugin-repl.ts +74 -0
- package/src/runtime.ts +2 -24
- package/src/scrypted-main.ts +36 -22
- package/src/services/plugin.ts +8 -0
- package/test/test-cert.json +4 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createConsoleServer = void 0;
|
|
4
|
+
const ws_1 = require("ws");
|
|
5
|
+
const listen_zero_1 = require("./listen-zero");
|
|
6
|
+
const net_1 = require("net");
|
|
7
|
+
const events_1 = require("events");
|
|
8
|
+
async function createConsoleServer(stdout, stderr) {
|
|
9
|
+
const outputs = new Map();
|
|
10
|
+
const appendOutput = (data, nativeId) => {
|
|
11
|
+
if (!nativeId)
|
|
12
|
+
nativeId = undefined;
|
|
13
|
+
let buffers = outputs.get(nativeId);
|
|
14
|
+
if (!buffers) {
|
|
15
|
+
buffers = [];
|
|
16
|
+
outputs.set(nativeId, buffers);
|
|
17
|
+
}
|
|
18
|
+
buffers.push(data);
|
|
19
|
+
// when we're over 4000 lines or whatever these buffer are,
|
|
20
|
+
// truncate down to 2000.
|
|
21
|
+
if (buffers.length > 4000)
|
|
22
|
+
outputs.set(nativeId, buffers.slice(buffers.length - 2000));
|
|
23
|
+
};
|
|
24
|
+
const sockets = new Set();
|
|
25
|
+
const events = new ws_1.EventEmitter();
|
|
26
|
+
events.on('stdout', appendOutput);
|
|
27
|
+
events.on('stderr', appendOutput);
|
|
28
|
+
stdout.on('data', data => events.emit('stdout', data));
|
|
29
|
+
stderr.on('data', data => events.emit('stderr', data));
|
|
30
|
+
const readServer = new net_1.Server(async (socket) => {
|
|
31
|
+
sockets.add(socket);
|
|
32
|
+
let [filter] = await (0, events_1.once)(socket, 'data');
|
|
33
|
+
filter = filter.toString().trim();
|
|
34
|
+
if (filter === 'undefined')
|
|
35
|
+
filter = undefined;
|
|
36
|
+
const buffers = outputs.get(filter);
|
|
37
|
+
if (buffers) {
|
|
38
|
+
const concat = Buffer.concat(buffers);
|
|
39
|
+
outputs.set(filter, [concat]);
|
|
40
|
+
socket.write(concat);
|
|
41
|
+
}
|
|
42
|
+
const cb = (data, nativeId) => {
|
|
43
|
+
if (nativeId !== filter)
|
|
44
|
+
return;
|
|
45
|
+
socket.write(data);
|
|
46
|
+
};
|
|
47
|
+
events.on('stdout', cb);
|
|
48
|
+
events.on('stderr', cb);
|
|
49
|
+
const cleanup = () => {
|
|
50
|
+
events.removeListener('stdout', cb);
|
|
51
|
+
events.removeListener('stderr', cb);
|
|
52
|
+
socket.destroy();
|
|
53
|
+
socket.removeAllListeners();
|
|
54
|
+
sockets.delete(socket);
|
|
55
|
+
};
|
|
56
|
+
socket.on('close', cleanup);
|
|
57
|
+
socket.on('error', cleanup);
|
|
58
|
+
socket.on('end', cleanup);
|
|
59
|
+
});
|
|
60
|
+
const writeServer = new net_1.Server(async (socket) => {
|
|
61
|
+
sockets.add(socket);
|
|
62
|
+
const [data] = await (0, events_1.once)(socket, 'data');
|
|
63
|
+
let filter = data.toString();
|
|
64
|
+
const newline = filter.indexOf('\n');
|
|
65
|
+
if (newline !== -1) {
|
|
66
|
+
socket.unshift(Buffer.from(filter.substring(newline + 1)));
|
|
67
|
+
}
|
|
68
|
+
filter = filter.substring(0, newline);
|
|
69
|
+
if (filter === 'undefined')
|
|
70
|
+
filter = undefined;
|
|
71
|
+
const cb = (data) => events.emit('stdout', data, filter);
|
|
72
|
+
socket.on('data', cb);
|
|
73
|
+
const cleanup = () => {
|
|
74
|
+
socket.destroy();
|
|
75
|
+
socket.removeAllListeners();
|
|
76
|
+
sockets.delete(socket);
|
|
77
|
+
};
|
|
78
|
+
socket.once('close', cleanup);
|
|
79
|
+
socket.once('error', cleanup);
|
|
80
|
+
socket.once('end', cleanup);
|
|
81
|
+
});
|
|
82
|
+
const readPort = await (0, listen_zero_1.listenZero)(readServer);
|
|
83
|
+
const writePort = await (0, listen_zero_1.listenZero)(writeServer);
|
|
84
|
+
return {
|
|
85
|
+
readPort,
|
|
86
|
+
writePort,
|
|
87
|
+
readServer,
|
|
88
|
+
writeServer,
|
|
89
|
+
sockets,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
exports.createConsoleServer = createConsoleServer;
|
|
93
|
+
//# sourceMappingURL=plugin-console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-console.js","sourceRoot":"","sources":["../../src/plugin/plugin-console.ts"],"names":[],"mappings":";;;AACA,2BAAkC;AAClC,+CAA2C;AAC3C,6BAA6B;AAC7B,mCAA8B;AAWvB,KAAK,UAAU,mBAAmB,CAAC,MAAgB,EAAE,MAAgB;IACxE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,QAA0B,EAAE,EAAE;QAC9D,IAAI,CAAC,QAAQ;YACT,QAAQ,GAAG,SAAS,CAAC;QACzB,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SAClC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,2DAA2D;QAC3D,yBAAyB;QACzB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;YACrB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;IACnE,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;IAEtC,MAAM,MAAM,GAAG,IAAI,iBAAY,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAElC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,IAAI,YAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,IAAA,aAAI,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,MAAM,KAAK,WAAW;YACtB,MAAM,GAAG,SAAS,CAAC;QAEvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,OAAO,EAAE;YACT,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACxB;QAED,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,QAA0B,EAAE,EAAE;YACpD,IAAI,QAAQ,KAAK,MAAM;gBACnB,OAAO;YACX,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QACvB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QAEvB,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,YAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,IAAA,aAAI,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,MAAM,GAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;YAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9D;QACD,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtC,IAAI,MAAM,KAAK,WAAW;YACtB,MAAM,GAAG,SAAS,CAAC;QAEvB,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEjE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEtB,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAU,EAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,IAAA,wBAAU,EAAC,WAAW,CAAC,CAAC;IAEhD,OAAO;QACH,QAAQ;QACR,SAAS;QACT,UAAU;QACV,WAAW;QACX,OAAO;KACV,CAAC;AACN,CAAC;AAnGD,kDAmGC"}
|
|
@@ -9,12 +9,12 @@ const descriptor_1 = require("./descriptor");
|
|
|
9
9
|
class PluginDeviceProxyHandler {
|
|
10
10
|
scrypted;
|
|
11
11
|
id;
|
|
12
|
-
// proxy: Promise<any>;
|
|
13
12
|
mixinTable;
|
|
14
13
|
constructor(scrypted, id) {
|
|
15
14
|
this.scrypted = scrypted;
|
|
16
15
|
this.id = id;
|
|
17
16
|
}
|
|
17
|
+
// should this be async?
|
|
18
18
|
invalidate() {
|
|
19
19
|
const mixinTable = this.mixinTable;
|
|
20
20
|
this.mixinTable = undefined;
|
|
@@ -168,6 +168,11 @@ class PluginDeviceProxyHandler {
|
|
|
168
168
|
const userInitiated = argArray[1];
|
|
169
169
|
return this.scrypted.stateManager.refresh(this.id, refreshInterface, userInitiated);
|
|
170
170
|
}
|
|
171
|
+
if (method === 'createDevice') {
|
|
172
|
+
const nativeId = await this.applyMixin(method, argArray);
|
|
173
|
+
const newDevice = this.scrypted.findPluginDevice(pluginDevice.pluginId, nativeId);
|
|
174
|
+
return newDevice._id;
|
|
175
|
+
}
|
|
171
176
|
return this.applyMixin(method, argArray);
|
|
172
177
|
}
|
|
173
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-device.js","sourceRoot":"","sources":["../../src/plugin/plugin-device.ts"],"names":[],"mappings":";;;AAAA,+CAAgO;AAIhO,gCAAmD;AACnD,oCAAoC;AACpC,sDAAmD;AACnD,6CAAgG;AAQhG,MAAa,wBAAwB;IACjC,QAAQ,CAAkB;IAC1B,EAAE,CAAS;IACX,
|
|
1
|
+
{"version":3,"file":"plugin-device.js","sourceRoot":"","sources":["../../src/plugin/plugin-device.ts"],"names":[],"mappings":"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"}
|
|
@@ -109,7 +109,7 @@ class PluginHostAPI extends plugin_api_1.PluginAPIManagedListeners {
|
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
async onDeviceDiscovered(device) {
|
|
112
|
-
|
|
112
|
+
return this.pluginHost.upsertDevice(device);
|
|
113
113
|
}
|
|
114
114
|
async onDeviceRemoved(nativeId) {
|
|
115
115
|
await this.scrypted.removeDevice(this.scrypted.findPluginDevice(this.pluginId, nativeId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-host-api.js","sourceRoot":"","sources":["../../src/plugin/plugin-host-api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plugin-host-api.js","sourceRoot":"","sources":["../../src/plugin/plugin-host-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.startPluginRemote = exports.PluginHost = void 0;
|
|
7
7
|
const rpc_1 = require("../rpc");
|
|
8
8
|
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
9
9
|
const types_1 = require("@scrypted/sdk/types");
|
|
@@ -11,22 +11,19 @@ const engine_io_1 = __importDefault(require("engine.io"));
|
|
|
11
11
|
const plugin_remote_1 = require("./plugin-remote");
|
|
12
12
|
const media_1 = require("./media");
|
|
13
13
|
const state_1 = require("../state");
|
|
14
|
-
const ws_1 = require("ws");
|
|
15
|
-
const listen_zero_1 = require("./listen-zero");
|
|
16
|
-
const net_1 = require("net");
|
|
17
|
-
const repl_1 = __importDefault(require("repl"));
|
|
18
|
-
const events_1 = require("events");
|
|
19
14
|
const stream_1 = require("stream");
|
|
20
15
|
const console_1 = require("console");
|
|
21
16
|
const sleep_1 = require("../sleep");
|
|
22
17
|
const plugin_host_api_1 = require("./plugin-host-api");
|
|
23
18
|
const path_1 = __importDefault(require("path"));
|
|
24
19
|
const source_map_support_1 = require("source-map-support");
|
|
25
|
-
const
|
|
20
|
+
const net_1 = __importDefault(require("net"));
|
|
26
21
|
const child_process_1 = __importDefault(require("child_process"));
|
|
27
22
|
const readline_1 = __importDefault(require("readline"));
|
|
28
23
|
const plugin_volume_1 = require("./plugin-volume");
|
|
29
24
|
const plugin_npm_dependencies_1 = require("./plugin-npm-dependencies");
|
|
25
|
+
const plugin_console_1 = require("./plugin-console");
|
|
26
|
+
const plugin_repl_1 = require("./plugin-repl");
|
|
30
27
|
class PluginHost {
|
|
31
28
|
pluginDebug;
|
|
32
29
|
worker;
|
|
@@ -46,6 +43,7 @@ class PluginHost {
|
|
|
46
43
|
listener;
|
|
47
44
|
stats;
|
|
48
45
|
killed = false;
|
|
46
|
+
consoleServer;
|
|
49
47
|
kill() {
|
|
50
48
|
this.killed = true;
|
|
51
49
|
this.listener.removeListener();
|
|
@@ -68,6 +66,13 @@ class PluginHost {
|
|
|
68
66
|
}
|
|
69
67
|
}
|
|
70
68
|
}
|
|
69
|
+
this.consoleServer?.then(server => {
|
|
70
|
+
server.readServer.close();
|
|
71
|
+
server.writeServer.close();
|
|
72
|
+
for (const s of server.sockets) {
|
|
73
|
+
s.destroy();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
71
76
|
setTimeout(() => this.peer.kill('plugin killed'), 500);
|
|
72
77
|
}
|
|
73
78
|
toString() {
|
|
@@ -76,6 +81,7 @@ class PluginHost {
|
|
|
76
81
|
async upsertDevice(upsert) {
|
|
77
82
|
const pi = await this.scrypted.upsertDevice(this.pluginId, upsert, true);
|
|
78
83
|
await this.remote.setNativeId(pi.nativeId, pi._id, pi.storage || {});
|
|
84
|
+
return pi._id;
|
|
79
85
|
}
|
|
80
86
|
constructor(scrypted, plugin, pluginDebug) {
|
|
81
87
|
this.pluginDebug = pluginDebug;
|
|
@@ -86,7 +92,7 @@ class PluginHost {
|
|
|
86
92
|
const logger = scrypted.getDeviceLogger(scrypted.findPluginDevice(plugin._id));
|
|
87
93
|
const volume = path_1.default.join(process.cwd(), 'volume');
|
|
88
94
|
const cwd = (0, plugin_volume_1.ensurePluginVolume)(this.pluginId);
|
|
89
|
-
this.
|
|
95
|
+
this.startPluginHost(logger, {
|
|
90
96
|
NODE_PATH: path_1.default.join(cwd, 'node_modules'),
|
|
91
97
|
SCRYPTED_PLUGIN_VOLUME: cwd,
|
|
92
98
|
}, plugin.packageJson.scrypted.runtime);
|
|
@@ -177,7 +183,7 @@ class PluginHost {
|
|
|
177
183
|
this.listener.removeListener();
|
|
178
184
|
});
|
|
179
185
|
}
|
|
180
|
-
|
|
186
|
+
startPluginHost(logger, env, runtime) {
|
|
181
187
|
let connected = true;
|
|
182
188
|
if (runtime === 'python') {
|
|
183
189
|
const args = [
|
|
@@ -187,9 +193,9 @@ class PluginHost {
|
|
|
187
193
|
args.push('-m', 'debugpy', '--listen', `0.0.0.0:${this.pluginDebug.inspectPort}`, '--wait-for-client');
|
|
188
194
|
}
|
|
189
195
|
args.push(path_1.default.join(__dirname, '../../python', 'plugin-remote.py'));
|
|
190
|
-
this.worker = child_process_1.default.spawn('
|
|
196
|
+
this.worker = child_process_1.default.spawn('python3', args, {
|
|
191
197
|
// stdin, stdout, stderr, peer in, peer out
|
|
192
|
-
stdio: ['pipe', '
|
|
198
|
+
stdio: ['pipe', 'pipe', 'pipe', 'pipe', 'pipe'],
|
|
193
199
|
env: Object.assign({}, process.env, env),
|
|
194
200
|
});
|
|
195
201
|
const peerin = this.worker.stdio[3];
|
|
@@ -218,7 +224,7 @@ class PluginHost {
|
|
|
218
224
|
execArgv.push(`--inspect=0.0.0.0:${this.pluginDebug.inspectPort}`);
|
|
219
225
|
}
|
|
220
226
|
this.worker = child_process_1.default.fork(require.main.filename, ['child'], {
|
|
221
|
-
stdio: ['pipe', '
|
|
227
|
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
222
228
|
env: Object.assign({}, process.env, env),
|
|
223
229
|
serialization: 'advanced',
|
|
224
230
|
execArgv,
|
|
@@ -237,8 +243,9 @@ class PluginHost {
|
|
|
237
243
|
this.peer.transportSafeArgumentTypes.add(Buffer.name);
|
|
238
244
|
this.worker.on('message', message => this.peer.handleMessage(message));
|
|
239
245
|
}
|
|
240
|
-
|
|
241
|
-
|
|
246
|
+
this.worker.stdout.on('data', data => console.log(data.toString()));
|
|
247
|
+
this.worker.stderr.on('data', data => console.error(data.toString()));
|
|
248
|
+
this.consoleServer = (0, plugin_console_1.createConsoleServer)(this.worker.stdout, this.worker.stderr);
|
|
242
249
|
this.worker.on('disconnect', () => {
|
|
243
250
|
connected = false;
|
|
244
251
|
logger.log('e', `${this.pluginName} disconnected`);
|
|
@@ -259,143 +266,19 @@ class PluginHost {
|
|
|
259
266
|
}
|
|
260
267
|
}
|
|
261
268
|
exports.PluginHost = PluginHost;
|
|
262
|
-
|
|
263
|
-
const outputs = new Map();
|
|
264
|
-
const appendOutput = (data, nativeId) => {
|
|
265
|
-
if (!nativeId)
|
|
266
|
-
nativeId = undefined;
|
|
267
|
-
let buffers = outputs.get(nativeId);
|
|
268
|
-
if (!buffers) {
|
|
269
|
-
buffers = [];
|
|
270
|
-
outputs.set(nativeId, buffers);
|
|
271
|
-
}
|
|
272
|
-
buffers.push(data);
|
|
273
|
-
// when we're over 4000 lines or whatever these buffer are,
|
|
274
|
-
// truncate down to 2000.
|
|
275
|
-
if (buffers.length > 4000)
|
|
276
|
-
outputs.set(nativeId, buffers.slice(buffers.length - 2000));
|
|
277
|
-
};
|
|
278
|
-
events.on('stdout', appendOutput);
|
|
279
|
-
events.on('stderr', appendOutput);
|
|
280
|
-
const server = new net_1.Server(async (socket) => {
|
|
281
|
-
let [filter] = await (0, events_1.once)(socket, 'data');
|
|
282
|
-
filter = filter.toString().trim();
|
|
283
|
-
if (filter === 'undefined')
|
|
284
|
-
filter = undefined;
|
|
285
|
-
const buffers = outputs.get(filter);
|
|
286
|
-
if (buffers) {
|
|
287
|
-
const concat = Buffer.concat(buffers);
|
|
288
|
-
outputs.set(filter, [concat]);
|
|
289
|
-
socket.write(concat);
|
|
290
|
-
}
|
|
291
|
-
const cb = (data, nativeId) => {
|
|
292
|
-
if (nativeId !== filter)
|
|
293
|
-
return;
|
|
294
|
-
socket.write(data);
|
|
295
|
-
};
|
|
296
|
-
events.on('stdout', cb);
|
|
297
|
-
events.on('stderr', cb);
|
|
298
|
-
const cleanup = () => {
|
|
299
|
-
events.removeListener('stdout', cb);
|
|
300
|
-
events.removeListener('stderr', cb);
|
|
301
|
-
};
|
|
302
|
-
socket.on('close', cleanup);
|
|
303
|
-
socket.on('error', cleanup);
|
|
304
|
-
socket.on('end', cleanup);
|
|
305
|
-
});
|
|
306
|
-
const writeServer = new net_1.Server(async (socket) => {
|
|
307
|
-
const [data] = await (0, events_1.once)(socket, 'data');
|
|
308
|
-
let filter = data.toString();
|
|
309
|
-
const newline = filter.indexOf('\n');
|
|
310
|
-
if (newline !== -1) {
|
|
311
|
-
socket.unshift(Buffer.from(filter.substring(newline + 1)));
|
|
312
|
-
}
|
|
313
|
-
filter = filter.substring(0, newline);
|
|
314
|
-
if (filter === 'undefined')
|
|
315
|
-
filter = undefined;
|
|
316
|
-
const cb = (data) => events.emit('stdout', data, filter);
|
|
317
|
-
socket.on('data', cb);
|
|
318
|
-
const cleanup = () => {
|
|
319
|
-
events.removeListener('data', cb);
|
|
320
|
-
};
|
|
321
|
-
socket.on('close', cleanup);
|
|
322
|
-
socket.on('error', cleanup);
|
|
323
|
-
socket.on('end', cleanup);
|
|
324
|
-
});
|
|
325
|
-
const consoleReader = await (0, listen_zero_1.listenZero)(server);
|
|
326
|
-
const consoleWriter = await (0, listen_zero_1.listenZero)(writeServer);
|
|
327
|
-
return [consoleReader, consoleWriter];
|
|
328
|
-
}
|
|
329
|
-
async function createREPLServer(events) {
|
|
330
|
-
const [[scrypted], [params], [plugin]] = await Promise.all([(0, events_1.once)(events, 'scrypted'), (0, events_1.once)(events, 'params'), (0, events_1.once)(events, 'plugin')]);
|
|
331
|
-
const { deviceManager, systemManager } = scrypted;
|
|
332
|
-
const server = new net_1.Server(async (socket) => {
|
|
333
|
-
let [filter] = await (0, events_1.once)(socket, 'data');
|
|
334
|
-
filter = filter.toString().trim();
|
|
335
|
-
if (filter === 'undefined')
|
|
336
|
-
filter = undefined;
|
|
337
|
-
const chain = [];
|
|
338
|
-
const nativeIds = deviceManager.nativeIds;
|
|
339
|
-
const reversed = new Map();
|
|
340
|
-
for (const nativeId of nativeIds.keys()) {
|
|
341
|
-
reversed.set(nativeIds.get(nativeId).id, nativeId);
|
|
342
|
-
}
|
|
343
|
-
while (filter) {
|
|
344
|
-
const { id } = nativeIds.get(filter);
|
|
345
|
-
const d = await systemManager.getDeviceById(id);
|
|
346
|
-
chain.push(filter);
|
|
347
|
-
filter = reversed.get(d.providerId);
|
|
348
|
-
}
|
|
349
|
-
chain.reverse();
|
|
350
|
-
let device = plugin;
|
|
351
|
-
for (const c of chain) {
|
|
352
|
-
device = await device.getDevice(c);
|
|
353
|
-
}
|
|
354
|
-
const ctx = Object.assign(params, {
|
|
355
|
-
device
|
|
356
|
-
});
|
|
357
|
-
delete ctx.console;
|
|
358
|
-
delete ctx.window;
|
|
359
|
-
delete ctx.WebSocket;
|
|
360
|
-
delete ctx.pluginHostAPI;
|
|
361
|
-
const replFilter = new Set(['require', 'localStorage']);
|
|
362
|
-
const replVariables = Object.keys(ctx).filter(key => !replFilter.has(key));
|
|
363
|
-
const welcome = `JavaScript REPL variables:\n${replVariables.map(key => ' ' + key).join('\n')}\n\n`;
|
|
364
|
-
socket.write(welcome);
|
|
365
|
-
const r = repl_1.default.start({
|
|
366
|
-
terminal: true,
|
|
367
|
-
input: socket,
|
|
368
|
-
output: socket,
|
|
369
|
-
// writer(this: REPLServer, obj: any) {
|
|
370
|
-
// const ret = util.inspect(obj, {
|
|
371
|
-
// colors: true,
|
|
372
|
-
// });
|
|
373
|
-
// return ret;//.replaceAll('\n', '\r\n');
|
|
374
|
-
// },
|
|
375
|
-
preview: false,
|
|
376
|
-
});
|
|
377
|
-
Object.assign(r.context, ctx);
|
|
378
|
-
const cleanup = () => {
|
|
379
|
-
r.close();
|
|
380
|
-
};
|
|
381
|
-
socket.on('close', cleanup);
|
|
382
|
-
socket.on('error', cleanup);
|
|
383
|
-
socket.on('end', cleanup);
|
|
384
|
-
});
|
|
385
|
-
return (0, listen_zero_1.listenZero)(server);
|
|
386
|
-
}
|
|
387
|
-
function startPluginClusterWorker() {
|
|
269
|
+
function startPluginRemote() {
|
|
388
270
|
const peer = new rpc_1.RpcPeer('unknown', 'host', (message, reject) => process.send(message, undefined, {
|
|
389
271
|
swallowErrors: !reject,
|
|
390
272
|
}, e => {
|
|
391
273
|
if (e)
|
|
392
|
-
reject(e);
|
|
274
|
+
reject?.(e);
|
|
393
275
|
}));
|
|
394
276
|
peer.transportSafeArgumentTypes.add(Buffer.name);
|
|
395
277
|
process.on('message', message => peer.handleMessage(message));
|
|
396
|
-
const events = new ws_1.EventEmitter();
|
|
397
278
|
let systemManager;
|
|
398
279
|
let deviceManager;
|
|
280
|
+
let api;
|
|
281
|
+
let pluginId;
|
|
399
282
|
function idForNativeId(nativeId) {
|
|
400
283
|
if (!deviceManager)
|
|
401
284
|
return;
|
|
@@ -439,15 +322,30 @@ function startPluginClusterWorker() {
|
|
|
439
322
|
};
|
|
440
323
|
const getDeviceConsole = (nativeId) => {
|
|
441
324
|
return getConsole(async (stdout, stderr) => {
|
|
442
|
-
|
|
443
|
-
|
|
325
|
+
const plugins = await api.getComponent('plugins');
|
|
326
|
+
const connect = async () => {
|
|
327
|
+
const port = await plugins.getRemoteServicePort(peer.selfName, 'console-writer');
|
|
328
|
+
const socket = net_1.default.connect(port);
|
|
329
|
+
socket.write(nativeId + '\n');
|
|
330
|
+
const writer = (data) => {
|
|
331
|
+
socket.write(data);
|
|
332
|
+
};
|
|
333
|
+
stdout.on('data', writer);
|
|
334
|
+
stderr.on('data', writer);
|
|
335
|
+
socket.on('error', () => {
|
|
336
|
+
stdout.removeAllListeners();
|
|
337
|
+
stderr.removeAllListeners();
|
|
338
|
+
stdout.pause();
|
|
339
|
+
stderr.pause();
|
|
340
|
+
setTimeout(connect, 10000);
|
|
341
|
+
});
|
|
342
|
+
};
|
|
343
|
+
connect();
|
|
444
344
|
}, undefined, undefined);
|
|
445
345
|
};
|
|
446
346
|
const getMixinConsole = (mixinId, nativeId) => {
|
|
447
347
|
return getConsole(async (stdout, stderr) => {
|
|
448
348
|
if (!mixinId || !systemManager.getDeviceById(mixinId).mixins.includes(idForNativeId(nativeId))) {
|
|
449
|
-
stdout.on('data', data => events.emit('stdout', data, nativeId));
|
|
450
|
-
stderr.on('data', data => events.emit('stderr', data, nativeId));
|
|
451
349
|
return;
|
|
452
350
|
}
|
|
453
351
|
const plugins = await systemManager.getComponent('plugins');
|
|
@@ -459,7 +357,7 @@ function startPluginClusterWorker() {
|
|
|
459
357
|
}
|
|
460
358
|
const { pluginId, nativeId: mixinNativeId } = await plugins.getDeviceInfo(mixinId);
|
|
461
359
|
const port = await plugins.getRemoteServicePort(pluginId, 'console-writer');
|
|
462
|
-
const socket =
|
|
360
|
+
const socket = net_1.default.connect(port);
|
|
463
361
|
socket.write(mixinNativeId + '\n');
|
|
464
362
|
const writer = (data) => {
|
|
465
363
|
let str = data.toString().trim();
|
|
@@ -491,26 +389,38 @@ function startPluginClusterWorker() {
|
|
|
491
389
|
});
|
|
492
390
|
global?.gc();
|
|
493
391
|
}, 10000);
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
const
|
|
392
|
+
let replPort;
|
|
393
|
+
let _pluginConsole;
|
|
394
|
+
const getPluginConsole = () => {
|
|
395
|
+
if (_pluginConsole)
|
|
396
|
+
return _pluginConsole;
|
|
397
|
+
_pluginConsole = getDeviceConsole(undefined);
|
|
398
|
+
};
|
|
497
399
|
(0, plugin_remote_1.attachPluginRemote)(peer, {
|
|
498
|
-
createMediaManager: async (
|
|
499
|
-
|
|
400
|
+
createMediaManager: async (sm) => {
|
|
401
|
+
systemManager = sm;
|
|
402
|
+
return new media_1.MediaManagerImpl(systemManager, getPluginConsole());
|
|
403
|
+
},
|
|
404
|
+
onGetRemote: async (_api, _pluginId) => {
|
|
405
|
+
api = _api;
|
|
406
|
+
pluginId = _pluginId;
|
|
407
|
+
peer.selfName = pluginId;
|
|
408
|
+
},
|
|
409
|
+
onPluginReady: async (scrypted, params, plugin) => {
|
|
410
|
+
replPort = (0, plugin_repl_1.createREPLServer)(scrypted, params, plugin);
|
|
411
|
+
},
|
|
412
|
+
getPluginConsole,
|
|
500
413
|
getDeviceConsole,
|
|
501
414
|
getMixinConsole,
|
|
502
415
|
async getServicePort(name) {
|
|
503
|
-
if (name === 'repl')
|
|
416
|
+
if (name === 'repl') {
|
|
417
|
+
if (!replPort)
|
|
418
|
+
throw new Error('REPL unavailable: Plugin not loaded.');
|
|
504
419
|
return replPort;
|
|
505
|
-
|
|
506
|
-
return (await consolePorts)[0];
|
|
507
|
-
if (name === 'console-writer')
|
|
508
|
-
return (await consolePorts)[1];
|
|
420
|
+
}
|
|
509
421
|
throw new Error(`unknown service ${name}`);
|
|
510
422
|
},
|
|
511
|
-
async
|
|
512
|
-
const pluginId = packageJson.name;
|
|
513
|
-
peer.selfName = pluginId;
|
|
423
|
+
async onLoadZip(zip, packageJson) {
|
|
514
424
|
(0, source_map_support_1.install)({
|
|
515
425
|
environment: 'node',
|
|
516
426
|
retrieveSourceMap(source) {
|
|
@@ -527,32 +437,22 @@ function startPluginClusterWorker() {
|
|
|
527
437
|
return null;
|
|
528
438
|
}
|
|
529
439
|
});
|
|
530
|
-
|
|
531
|
-
const writer = cp[1];
|
|
532
|
-
const socket = net_2.default.connect(writer);
|
|
533
|
-
await (0, events_1.once)(socket, 'connect');
|
|
534
|
-
try {
|
|
535
|
-
await (0, plugin_npm_dependencies_1.installOptionalDependencies)(pluginConsole, socket, packageJson);
|
|
536
|
-
}
|
|
537
|
-
finally {
|
|
538
|
-
socket.destroy();
|
|
539
|
-
}
|
|
440
|
+
await (0, plugin_npm_dependencies_1.installOptionalDependencies)(getPluginConsole(), packageJson);
|
|
540
441
|
}
|
|
541
442
|
}).then(scrypted => {
|
|
542
443
|
systemManager = scrypted.systemManager;
|
|
543
444
|
deviceManager = scrypted.deviceManager;
|
|
544
|
-
events.emit('scrypted', scrypted);
|
|
545
445
|
process.on('uncaughtException', e => {
|
|
546
|
-
|
|
446
|
+
getPluginConsole().error('uncaughtException', e);
|
|
547
447
|
scrypted.log.e('uncaughtException ' + e?.toString());
|
|
548
448
|
});
|
|
549
449
|
process.on('unhandledRejection', e => {
|
|
550
|
-
|
|
450
|
+
getPluginConsole().error('unhandledRejection', e);
|
|
551
451
|
scrypted.log.e('unhandledRejection ' + e?.toString());
|
|
552
452
|
});
|
|
553
453
|
});
|
|
554
454
|
}
|
|
555
|
-
exports.
|
|
455
|
+
exports.startPluginRemote = startPluginRemote;
|
|
556
456
|
/**
|
|
557
457
|
* Warning: do not await in any of these methods unless necessary, otherwise
|
|
558
458
|
* execution order of state reporting may fail.
|