@scrypted/server 0.7.93 → 0.7.95
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/asynciterable-utils.d.ts +2 -0
- package/dist/asynciterable-utils.js +24 -0
- package/dist/asynciterable-utils.js.map +1 -0
- package/dist/cert.d.ts +6 -0
- package/dist/cert.js +75 -0
- package/dist/cert.js.map +1 -0
- package/dist/collection.d.ts +1 -0
- package/dist/collection.js +16 -0
- package/dist/collection.js.map +1 -0
- package/dist/db-types.d.ts +38 -0
- package/dist/db-types.js +45 -0
- package/dist/db-types.js.map +1 -0
- package/dist/event-registry.d.ts +19 -0
- package/dist/event-registry.js +92 -0
- package/dist/event-registry.js.map +1 -0
- package/dist/http-interfaces.d.ts +3 -0
- package/dist/http-interfaces.js +73 -0
- package/dist/http-interfaces.js.map +1 -0
- package/dist/infer-defaults.d.ts +11 -0
- package/dist/infer-defaults.js +119 -0
- package/dist/infer-defaults.js.map +1 -0
- package/dist/io.d.ts +22 -0
- package/dist/io.js +3 -0
- package/dist/io.js.map +1 -0
- package/dist/level.d.ts +110 -0
- package/dist/level.js +135 -0
- package/dist/level.js.map +1 -0
- package/dist/listen-zero.d.ts +13 -0
- package/dist/listen-zero.js +48 -0
- package/dist/listen-zero.js.map +1 -0
- package/dist/logger.d.ts +29 -0
- package/dist/logger.js +78 -0
- package/dist/logger.js.map +1 -0
- package/dist/media-helpers.d.ts +5 -0
- package/dist/media-helpers.js +89 -0
- package/dist/media-helpers.js.map +1 -0
- package/dist/mixin/mixin-cycle.d.ts +3 -0
- package/dist/mixin/mixin-cycle.js +32 -0
- package/dist/mixin/mixin-cycle.js.map +1 -0
- package/dist/plugin/acl.d.ts +16 -0
- package/dist/plugin/acl.js +83 -0
- package/dist/plugin/acl.js.map +1 -0
- package/dist/plugin/descriptor.d.ts +22 -0
- package/dist/plugin/descriptor.js +35 -0
- package/dist/plugin/descriptor.js.map +1 -0
- package/dist/plugin/media.d.ts +71 -0
- package/dist/plugin/media.js +420 -0
- package/dist/plugin/media.js.map +1 -0
- package/dist/plugin/mediaobject.d.ts +10 -0
- package/dist/plugin/mediaobject.js +26 -0
- package/dist/plugin/mediaobject.js.map +1 -0
- package/dist/plugin/plugin-api.d.ts +106 -0
- package/dist/plugin/plugin-api.js +120 -0
- package/dist/plugin/plugin-api.js.map +1 -0
- package/dist/plugin/plugin-console.d.ts +28 -0
- package/dist/plugin/plugin-console.js +291 -0
- package/dist/plugin/plugin-console.js.map +1 -0
- package/dist/plugin/plugin-debug.d.ts +4 -0
- package/dist/plugin/plugin-debug.js +3 -0
- package/dist/plugin/plugin-debug.js.map +1 -0
- package/dist/plugin/plugin-device.d.ts +54 -0
- package/dist/plugin/plugin-device.js +413 -0
- package/dist/plugin/plugin-device.js.map +1 -0
- package/dist/plugin/plugin-error.d.ts +2 -0
- package/dist/plugin/plugin-error.js +7 -0
- package/dist/plugin/plugin-error.js.map +1 -0
- package/dist/plugin/plugin-host-api.d.ts +43 -0
- package/dist/plugin/plugin-host-api.js +179 -0
- package/dist/plugin/plugin-host-api.js.map +1 -0
- package/dist/plugin/plugin-host.d.ts +45 -0
- package/dist/plugin/plugin-host.js +398 -0
- package/dist/plugin/plugin-host.js.map +1 -0
- package/dist/plugin/plugin-http.d.ts +18 -0
- package/dist/plugin/plugin-http.js +120 -0
- package/dist/plugin/plugin-http.js.map +1 -0
- package/dist/plugin/plugin-lazy-remote.d.ts +31 -0
- package/dist/plugin/plugin-lazy-remote.js +75 -0
- package/dist/plugin/plugin-lazy-remote.js.map +1 -0
- package/dist/plugin/plugin-npm-dependencies.d.ts +8 -0
- package/dist/plugin/plugin-npm-dependencies.js +103 -0
- package/dist/plugin/plugin-npm-dependencies.js.map +1 -0
- package/dist/plugin/plugin-remote-stats.d.ts +8 -0
- package/dist/plugin/plugin-remote-stats.js +30 -0
- package/dist/plugin/plugin-remote-stats.js.map +1 -0
- package/dist/plugin/plugin-remote-websocket.d.ts +29 -0
- package/dist/plugin/plugin-remote-websocket.js +152 -0
- package/dist/plugin/plugin-remote-websocket.js.map +1 -0
- package/dist/plugin/plugin-remote-worker.d.ts +5 -0
- package/dist/plugin/plugin-remote-worker.js +348 -0
- package/dist/plugin/plugin-remote-worker.js.map +1 -0
- package/dist/plugin/plugin-remote.d.ts +75 -0
- package/dist/plugin/plugin-remote.js +598 -0
- package/dist/plugin/plugin-remote.js.map +1 -0
- package/dist/plugin/plugin-repl.d.ts +2 -0
- package/dist/plugin/plugin-repl.js +74 -0
- package/dist/plugin/plugin-repl.js.map +1 -0
- package/dist/plugin/plugin-state-check.d.ts +1 -0
- package/dist/plugin/plugin-state-check.js +27 -0
- package/dist/plugin/plugin-state-check.js.map +1 -0
- package/dist/plugin/plugin-volume.d.ts +3 -0
- package/dist/plugin/plugin-volume.js +31 -0
- package/dist/plugin/plugin-volume.js.map +1 -0
- package/dist/plugin/runtime/child-process-worker.d.ts +20 -0
- package/dist/plugin/runtime/child-process-worker.js +42 -0
- package/dist/plugin/runtime/child-process-worker.js.map +1 -0
- package/dist/plugin/runtime/node-fork-worker.d.ts +9 -0
- package/dist/plugin/runtime/node-fork-worker.js +67 -0
- package/dist/plugin/runtime/node-fork-worker.js.map +1 -0
- package/dist/plugin/runtime/node-thread-worker.d.ts +20 -0
- package/dist/plugin/runtime/node-thread-worker.js +73 -0
- package/dist/plugin/runtime/node-thread-worker.js.map +1 -0
- package/dist/plugin/runtime/python-worker.d.ts +10 -0
- package/dist/plugin/runtime/python-worker.js +91 -0
- package/dist/plugin/runtime/python-worker.js.map +1 -0
- package/dist/plugin/runtime/runtime-worker.d.ts +26 -0
- package/dist/plugin/runtime/runtime-worker.js +3 -0
- package/dist/plugin/runtime/runtime-worker.js.map +1 -0
- package/dist/plugin/socket-serializer.d.ts +5 -0
- package/dist/plugin/socket-serializer.js +17 -0
- package/dist/plugin/socket-serializer.js.map +1 -0
- package/dist/plugin/system.d.ts +39 -0
- package/dist/plugin/system.js +216 -0
- package/dist/plugin/system.js.map +1 -0
- package/dist/rpc-buffer-serializer.d.ts +11 -0
- package/dist/rpc-buffer-serializer.js +30 -0
- package/dist/rpc-buffer-serializer.js.map +1 -0
- package/dist/rpc-serializer.d.ts +24 -0
- package/dist/rpc-serializer.js +144 -0
- package/dist/rpc-serializer.js.map +1 -0
- package/dist/rpc.d.ts +147 -0
- package/dist/rpc.js +689 -0
- package/dist/rpc.js.map +1 -0
- package/dist/runtime.d.ts +103 -0
- package/dist/runtime.js +815 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scrypted-main-exports.d.ts +6 -0
- package/dist/scrypted-main-exports.js +57 -0
- package/dist/scrypted-main-exports.js.map +1 -0
- package/dist/scrypted-main.d.ts +1 -0
- package/dist/scrypted-main.js +8 -0
- package/dist/scrypted-main.js.map +1 -0
- package/dist/scrypted-plugin-main.d.ts +2 -0
- package/dist/scrypted-plugin-main.js +43 -0
- package/dist/scrypted-plugin-main.js.map +1 -0
- package/dist/scrypted-server-main.d.ts +6 -0
- package/dist/scrypted-server-main.js +559 -0
- package/dist/scrypted-server-main.js.map +1 -0
- package/dist/server-settings.d.ts +5 -0
- package/dist/server-settings.js +91 -0
- package/dist/server-settings.js.map +1 -0
- package/dist/services/addresses.d.ts +7 -0
- package/dist/services/addresses.js +43 -0
- package/dist/services/addresses.js.map +1 -0
- package/dist/services/alerts.d.ts +9 -0
- package/dist/services/alerts.js +27 -0
- package/dist/services/alerts.js.map +1 -0
- package/dist/services/cors.d.ts +18 -0
- package/dist/services/cors.js +18 -0
- package/dist/services/cors.js.map +1 -0
- package/dist/services/info.d.ts +5 -0
- package/dist/services/info.js +18 -0
- package/dist/services/info.js.map +1 -0
- package/dist/services/plugin.d.ts +46 -0
- package/dist/services/plugin.js +172 -0
- package/dist/services/plugin.js.map +1 -0
- package/dist/services/service-control.d.ts +8 -0
- package/dist/services/service-control.js +39 -0
- package/dist/services/service-control.js.map +1 -0
- package/dist/services/users.d.ts +19 -0
- package/dist/services/users.js +75 -0
- package/dist/services/users.js.map +1 -0
- package/dist/sleep.d.ts +1 -0
- package/dist/sleep.js +8 -0
- package/dist/sleep.js.map +1 -0
- package/dist/state.d.ts +39 -0
- package/dist/state.js +247 -0
- package/dist/state.js.map +1 -0
- package/dist/threading.d.ts +3 -0
- package/dist/threading.js +93 -0
- package/dist/threading.js.map +1 -0
- package/dist/usertoken.d.ts +11 -0
- package/dist/usertoken.js +52 -0
- package/dist/usertoken.js.map +1 -0
- package/package.json +2 -2
- package/src/plugin/plugin-host-api.ts +3 -1
@@ -0,0 +1,348 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.startPluginRemote = void 0;
|
7
|
+
const adm_zip_1 = __importDefault(require("adm-zip"));
|
8
|
+
const events_1 = require("events");
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
10
|
+
const memfs_1 = require("memfs");
|
11
|
+
const net_1 = __importDefault(require("net"));
|
12
|
+
const path_1 = __importDefault(require("path"));
|
13
|
+
const source_map_support_1 = require("source-map-support");
|
14
|
+
const listen_zero_1 = require("../listen-zero");
|
15
|
+
const rpc_1 = require("../rpc");
|
16
|
+
const rpc_serializer_1 = require("../rpc-serializer");
|
17
|
+
const media_1 = require("./media");
|
18
|
+
const plugin_api_1 = require("./plugin-api");
|
19
|
+
const plugin_console_1 = require("./plugin-console");
|
20
|
+
const plugin_npm_dependencies_1 = require("./plugin-npm-dependencies");
|
21
|
+
const plugin_remote_1 = require("./plugin-remote");
|
22
|
+
const plugin_remote_stats_1 = require("./plugin-remote-stats");
|
23
|
+
const plugin_repl_1 = require("./plugin-repl");
|
24
|
+
const node_thread_worker_1 = require("./runtime/node-thread-worker");
|
25
|
+
const crypto_1 = __importDefault(require("crypto"));
|
26
|
+
const { link } = require('linkfs');
|
27
|
+
const serverVersion = require('../../package.json').version;
|
28
|
+
function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOptions) {
|
29
|
+
const peer = new rpc_1.RpcPeer('unknown', 'host', peerSend);
|
30
|
+
let systemManager;
|
31
|
+
let deviceManager;
|
32
|
+
let api;
|
33
|
+
let pluginsPromise;
|
34
|
+
function getPlugins() {
|
35
|
+
if (!pluginsPromise)
|
36
|
+
pluginsPromise = api.getComponent('plugins');
|
37
|
+
return pluginsPromise;
|
38
|
+
}
|
39
|
+
const { getDeviceConsole, getMixinConsole } = (0, plugin_console_1.prepareConsoles)(() => peer.selfName, () => systemManager, () => deviceManager, getPlugins);
|
40
|
+
let replPort;
|
41
|
+
let _pluginConsole;
|
42
|
+
const getPluginConsole = () => {
|
43
|
+
if (!_pluginConsole)
|
44
|
+
_pluginConsole = getDeviceConsole(undefined);
|
45
|
+
return _pluginConsole;
|
46
|
+
};
|
47
|
+
let postInstallSourceMapSupport;
|
48
|
+
(0, plugin_remote_1.attachPluginRemote)(peer, {
|
49
|
+
createMediaManager: async (sm, dm) => {
|
50
|
+
systemManager = sm;
|
51
|
+
deviceManager = dm;
|
52
|
+
return new media_1.MediaManagerImpl(systemManager, dm);
|
53
|
+
},
|
54
|
+
onGetRemote: async (_api, _pluginId) => {
|
55
|
+
api = _api;
|
56
|
+
peer.selfName = pluginId;
|
57
|
+
},
|
58
|
+
getPluginConsole,
|
59
|
+
getDeviceConsole,
|
60
|
+
getMixinConsole,
|
61
|
+
async getServicePort(name, ...args) {
|
62
|
+
if (name === 'repl') {
|
63
|
+
if (!replPort)
|
64
|
+
throw new Error('REPL unavailable: Plugin not loaded.');
|
65
|
+
return replPort;
|
66
|
+
}
|
67
|
+
throw new Error(`unknown service ${name}`);
|
68
|
+
},
|
69
|
+
async onLoadZip(scrypted, params, packageJson, zipData, zipOptions) {
|
70
|
+
const { clusterId, clusterSecret } = zipOptions;
|
71
|
+
const onProxySerialization = (value, proxyId, source) => {
|
72
|
+
const properties = rpc_1.RpcPeer.prepareProxyProperties(value) || {};
|
73
|
+
let clusterEntry = properties.__cluster;
|
74
|
+
// set the cluster identity if it does not exist.
|
75
|
+
if (!clusterEntry) {
|
76
|
+
clusterEntry = {
|
77
|
+
id: clusterId,
|
78
|
+
port: clusterPort,
|
79
|
+
proxyId,
|
80
|
+
source,
|
81
|
+
};
|
82
|
+
properties.__cluster = clusterEntry;
|
83
|
+
}
|
84
|
+
// always reassign the id and source.
|
85
|
+
// if this is already a p2p object, and is passed to a different peer,
|
86
|
+
// a future p2p object must be routed to the correct p2p peer to find the object.
|
87
|
+
// clusterEntry.proxyId = proxyId;
|
88
|
+
// clusterEntry.source = source;
|
89
|
+
return properties;
|
90
|
+
};
|
91
|
+
peer.onProxySerialization = onProxySerialization;
|
92
|
+
const resolveObject = async (id, sourcePeerPort) => {
|
93
|
+
const sourcePeer = sourcePeerPort ? await clusterPeers.get(sourcePeerPort) : peer;
|
94
|
+
return sourcePeer?.localProxyMap.get(id);
|
95
|
+
};
|
96
|
+
// all cluster clients, incoming and outgoing, connect with random ports which can be used as peer ids
|
97
|
+
// on the cluster server that is listening on the actual port/
|
98
|
+
// incoming connections: use the remote random/unique port
|
99
|
+
// outgoing connections: use the local random/unique port
|
100
|
+
const clusterPeers = new Map();
|
101
|
+
const clusterRpcServer = net_1.default.createServer(client => {
|
102
|
+
const clusterPeer = (0, rpc_serializer_1.createDuplexRpcPeer)(peer.selfName, 'cluster-client', client, client);
|
103
|
+
const clusterPeerPort = client.remotePort;
|
104
|
+
clusterPeer.onProxySerialization = (value, proxyId) => onProxySerialization(value, proxyId, clusterPeerPort);
|
105
|
+
clusterPeers.set(clusterPeerPort, Promise.resolve(clusterPeer));
|
106
|
+
startPluginRemoteOptions?.onClusterPeer?.(clusterPeer);
|
107
|
+
const portSecret = crypto_1.default.createHash('sha256').update(`${clusterPort}${clusterSecret}`).digest().toString('hex');
|
108
|
+
const connectRPCObject = async (id, secret, sourcePeerPort) => {
|
109
|
+
if (secret !== portSecret)
|
110
|
+
throw new Error('secret incorrect');
|
111
|
+
return resolveObject(id, sourcePeerPort);
|
112
|
+
};
|
113
|
+
clusterPeer.params['connectRPCObject'] = connectRPCObject;
|
114
|
+
client.on('close', () => {
|
115
|
+
clusterPeers.delete(clusterPeerPort);
|
116
|
+
clusterPeer.kill('cluster socket closed');
|
117
|
+
});
|
118
|
+
});
|
119
|
+
const clusterPort = await (0, listen_zero_1.listenZero)(clusterRpcServer);
|
120
|
+
const ensureClusterPeer = (port) => {
|
121
|
+
let clusterPeerPromise = clusterPeers.get(port);
|
122
|
+
if (!clusterPeerPromise) {
|
123
|
+
clusterPeerPromise = (async () => {
|
124
|
+
const socket = net_1.default.connect(port, '127.0.0.1');
|
125
|
+
socket.on('close', () => clusterPeers.delete(port));
|
126
|
+
try {
|
127
|
+
await (0, events_1.once)(socket, 'connect');
|
128
|
+
const clusterPeerPort = socket.address().port;
|
129
|
+
const clusterPeer = (0, rpc_serializer_1.createDuplexRpcPeer)(peer.selfName, 'cluster-server', socket, socket);
|
130
|
+
clusterPeer.tags.localPort = clusterPeerPort;
|
131
|
+
clusterPeer.onProxySerialization = (value, proxyId) => onProxySerialization(value, proxyId, clusterPeerPort);
|
132
|
+
return clusterPeer;
|
133
|
+
}
|
134
|
+
catch (e) {
|
135
|
+
console.error('failure ipc connect', e);
|
136
|
+
socket.destroy();
|
137
|
+
throw e;
|
138
|
+
}
|
139
|
+
})();
|
140
|
+
clusterPeers.set(port, clusterPeerPromise);
|
141
|
+
}
|
142
|
+
return clusterPeerPromise;
|
143
|
+
};
|
144
|
+
scrypted.connectRPCObject = async (value) => {
|
145
|
+
const clusterObject = value?.__cluster;
|
146
|
+
if (clusterObject?.id !== clusterId)
|
147
|
+
return value;
|
148
|
+
const { port, proxyId, source } = clusterObject;
|
149
|
+
if (port === clusterPort)
|
150
|
+
return resolveObject(proxyId, source);
|
151
|
+
try {
|
152
|
+
const clusterPeerPromise = ensureClusterPeer(port);
|
153
|
+
const clusterPeer = await clusterPeerPromise;
|
154
|
+
// this object is already connected
|
155
|
+
if (clusterPeer.tags.localPort === source)
|
156
|
+
return value;
|
157
|
+
const connectRPCObject = await clusterPeer.getParam('connectRPCObject');
|
158
|
+
const portSecret = crypto_1.default.createHash('sha256').update(`${port}${clusterSecret}`).digest().toString('hex');
|
159
|
+
const newValue = await connectRPCObject(proxyId, portSecret, source);
|
160
|
+
if (!newValue)
|
161
|
+
throw new Error('ipc object not found?');
|
162
|
+
return newValue;
|
163
|
+
}
|
164
|
+
catch (e) {
|
165
|
+
console.error('failure ipc', e);
|
166
|
+
return value;
|
167
|
+
}
|
168
|
+
};
|
169
|
+
let volume;
|
170
|
+
let pluginReader;
|
171
|
+
if (zipOptions?.unzippedPath && fs_1.default.existsSync(zipOptions?.unzippedPath)) {
|
172
|
+
volume = link(fs_1.default, ['', path_1.default.join(zipOptions.unzippedPath, 'fs')]);
|
173
|
+
pluginReader = name => {
|
174
|
+
const filename = path_1.default.join(zipOptions.unzippedPath, name);
|
175
|
+
if (!fs_1.default.existsSync(filename))
|
176
|
+
return;
|
177
|
+
return fs_1.default.readFileSync(filename);
|
178
|
+
};
|
179
|
+
}
|
180
|
+
else {
|
181
|
+
const admZip = new adm_zip_1.default(zipData);
|
182
|
+
volume = new memfs_1.Volume();
|
183
|
+
for (const entry of admZip.getEntries()) {
|
184
|
+
if (entry.isDirectory)
|
185
|
+
continue;
|
186
|
+
if (!entry.entryName.startsWith('fs/'))
|
187
|
+
continue;
|
188
|
+
const name = entry.entryName.substring('fs/'.length);
|
189
|
+
volume.mkdirpSync(path_1.default.dirname(name));
|
190
|
+
const data = entry.getData();
|
191
|
+
volume.writeFileSync(name, data);
|
192
|
+
}
|
193
|
+
pluginReader = name => {
|
194
|
+
const entry = admZip.getEntry(name);
|
195
|
+
if (!entry)
|
196
|
+
return;
|
197
|
+
return entry.getData();
|
198
|
+
};
|
199
|
+
}
|
200
|
+
zipData = undefined;
|
201
|
+
const pluginConsole = getPluginConsole?.();
|
202
|
+
params.console = pluginConsole;
|
203
|
+
const pnp = (0, plugin_npm_dependencies_1.getPluginNodePath)(pluginId);
|
204
|
+
pluginConsole?.log('node modules', pnp);
|
205
|
+
params.require = (name) => {
|
206
|
+
if (name === 'fakefs' || (name === 'fs' && !packageJson.scrypted.realfs)) {
|
207
|
+
return volume;
|
208
|
+
}
|
209
|
+
if (name === 'realfs') {
|
210
|
+
return require('fs');
|
211
|
+
}
|
212
|
+
try {
|
213
|
+
const module = require(name);
|
214
|
+
return module;
|
215
|
+
}
|
216
|
+
catch (e) {
|
217
|
+
const c = path_1.default.join(pnp, 'node_modules', name);
|
218
|
+
return require(c);
|
219
|
+
}
|
220
|
+
};
|
221
|
+
// const window: any = {};
|
222
|
+
const exports = {};
|
223
|
+
// window.exports = exports;
|
224
|
+
// params.window = window;
|
225
|
+
params.exports = exports;
|
226
|
+
const entry = pluginReader('main.nodejs.js.map');
|
227
|
+
const map = entry?.toString();
|
228
|
+
// plugins may install their own sourcemap support during startup, so
|
229
|
+
// hook the sourcemap installation after everything is loaded.
|
230
|
+
postInstallSourceMapSupport = (scrypted) => {
|
231
|
+
process.removeAllListeners('uncaughtException');
|
232
|
+
process.removeAllListeners('unhandledRejection');
|
233
|
+
process.on('uncaughtException', e => {
|
234
|
+
getPluginConsole().error('uncaughtException', e);
|
235
|
+
scrypted.log.e('uncaughtException ' + e?.toString());
|
236
|
+
});
|
237
|
+
process.on('unhandledRejection', e => {
|
238
|
+
getPluginConsole().error('unhandledRejection', e);
|
239
|
+
scrypted.log.e('unhandledRejection ' + e?.toString());
|
240
|
+
});
|
241
|
+
(0, source_map_support_1.install)({
|
242
|
+
environment: 'node',
|
243
|
+
retrieveSourceMap(source) {
|
244
|
+
if (source === '/plugin/main.nodejs.js' || source === `/${pluginId}/main.nodejs.js`) {
|
245
|
+
if (!map)
|
246
|
+
return null;
|
247
|
+
return {
|
248
|
+
url: '/plugin/main.nodejs.js',
|
249
|
+
map,
|
250
|
+
};
|
251
|
+
}
|
252
|
+
return null;
|
253
|
+
}
|
254
|
+
});
|
255
|
+
};
|
256
|
+
await (0, plugin_npm_dependencies_1.installOptionalDependencies)(getPluginConsole(), packageJson);
|
257
|
+
// process.cpuUsage is for the entire process.
|
258
|
+
// process.memoryUsage is per thread.
|
259
|
+
const allMemoryStats = new Map();
|
260
|
+
// start the stats updater/watchdog after installation has finished, as that may take some time.
|
261
|
+
peer.getParam('updateStats').then(updateStats => (0, plugin_remote_stats_1.startStatsUpdater)(allMemoryStats, updateStats));
|
262
|
+
const main = pluginReader('main.nodejs.js');
|
263
|
+
pluginReader = undefined;
|
264
|
+
const script = main.toString();
|
265
|
+
scrypted.connect = (socket, options) => {
|
266
|
+
process.send(options, socket);
|
267
|
+
};
|
268
|
+
const forks = new Set();
|
269
|
+
scrypted.fork = () => {
|
270
|
+
const ntw = new node_thread_worker_1.NodeThreadWorker(mainFilename, pluginId, {
|
271
|
+
env: process.env,
|
272
|
+
pluginDebug: undefined,
|
273
|
+
});
|
274
|
+
const result = (async () => {
|
275
|
+
const threadPeer = new rpc_1.RpcPeer('main', 'thread', (message, reject) => ntw.send(message, reject));
|
276
|
+
threadPeer.params.updateStats = (stats) => {
|
277
|
+
allMemoryStats.set(ntw, stats.memoryUsage);
|
278
|
+
};
|
279
|
+
ntw.setupRpcPeer(threadPeer);
|
280
|
+
class PluginForkAPI extends plugin_api_1.PluginAPIProxy {
|
281
|
+
[rpc_1.RpcPeer.PROPERTY_PROXY_ONEWAY_METHODS] = api[rpc_1.RpcPeer.PROPERTY_PROXY_ONEWAY_METHODS];
|
282
|
+
setStorage(nativeId, storage) {
|
283
|
+
const id = deviceManager.nativeIds.get(nativeId).id;
|
284
|
+
scrypted.pluginRemoteAPI.setNativeId(nativeId, id, storage);
|
285
|
+
for (const r of forks) {
|
286
|
+
if (r === remote)
|
287
|
+
continue;
|
288
|
+
r.setNativeId(nativeId, id, storage);
|
289
|
+
}
|
290
|
+
return super.setStorage(nativeId, storage);
|
291
|
+
}
|
292
|
+
}
|
293
|
+
const forkApi = new PluginForkAPI(api);
|
294
|
+
const remote = await (0, plugin_remote_1.setupPluginRemote)(threadPeer, forkApi, pluginId, { serverVersion }, () => systemManager.getSystemState());
|
295
|
+
forks.add(remote);
|
296
|
+
ntw.worker.on('exit', () => {
|
297
|
+
threadPeer.kill('worker exited');
|
298
|
+
forkApi.removeListeners();
|
299
|
+
forks.delete(remote);
|
300
|
+
allMemoryStats.delete(ntw);
|
301
|
+
});
|
302
|
+
for (const [nativeId, dmd] of deviceManager.nativeIds.entries()) {
|
303
|
+
await remote.setNativeId(nativeId, dmd.id, dmd.storage);
|
304
|
+
}
|
305
|
+
const forkOptions = Object.assign({}, zipOptions);
|
306
|
+
forkOptions.fork = true;
|
307
|
+
return remote.loadZip(packageJson, zipData, forkOptions);
|
308
|
+
})();
|
309
|
+
result.catch(() => ntw.kill());
|
310
|
+
return {
|
311
|
+
worker: ntw.worker,
|
312
|
+
result,
|
313
|
+
};
|
314
|
+
};
|
315
|
+
try {
|
316
|
+
peer.evalLocal(script, zipOptions?.filename || '/plugin/main.nodejs.js', params);
|
317
|
+
if (zipOptions?.fork) {
|
318
|
+
// pluginConsole?.log('plugin forked');
|
319
|
+
const fork = exports.fork;
|
320
|
+
const forked = await fork();
|
321
|
+
forked[rpc_1.RpcPeer.PROPERTY_JSON_DISABLE_SERIALIZATION] = true;
|
322
|
+
return forked;
|
323
|
+
}
|
324
|
+
pluginConsole?.log('plugin loaded');
|
325
|
+
let pluginInstance = exports.default;
|
326
|
+
// support exporting a plugin class, plugin main function,
|
327
|
+
// or a plugin instance
|
328
|
+
if (pluginInstance.toString().startsWith('class '))
|
329
|
+
pluginInstance = new pluginInstance();
|
330
|
+
if (typeof pluginInstance === 'function')
|
331
|
+
pluginInstance = await pluginInstance();
|
332
|
+
replPort = (0, plugin_repl_1.createREPLServer)(scrypted, params, pluginInstance);
|
333
|
+
postInstallSourceMapSupport(scrypted);
|
334
|
+
return pluginInstance;
|
335
|
+
}
|
336
|
+
catch (e) {
|
337
|
+
pluginConsole?.error('plugin failed to start', e);
|
338
|
+
throw e;
|
339
|
+
}
|
340
|
+
}
|
341
|
+
}).then(scrypted => {
|
342
|
+
systemManager = scrypted.systemManager;
|
343
|
+
deviceManager = scrypted.deviceManager;
|
344
|
+
});
|
345
|
+
return peer;
|
346
|
+
}
|
347
|
+
exports.startPluginRemote = startPluginRemote;
|
348
|
+
//# sourceMappingURL=plugin-remote-worker.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"plugin-remote-worker.js","sourceRoot":"","sources":["../../src/plugin/plugin-remote-worker.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,75 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import { Device, DeviceManager, DeviceManifest, DeviceState, Logger, MediaManager, ScryptedNativeId, ScryptedStatic, SystemDeviceState, SystemManager } from '@scrypted/types';
|
3
|
+
import { RpcPeer } from '../rpc';
|
4
|
+
import { PluginAPI, PluginHostInfo, PluginRemote, PluginRemoteLoadZipOptions } from './plugin-api';
|
5
|
+
import { WebSocketMethods } from './plugin-remote-websocket';
|
6
|
+
import { SystemManagerImpl } from './system';
|
7
|
+
interface DeviceManagerDevice {
|
8
|
+
id: string;
|
9
|
+
storage: {
|
10
|
+
[key: string]: any;
|
11
|
+
};
|
12
|
+
}
|
13
|
+
export declare class DeviceManagerImpl implements DeviceManager {
|
14
|
+
systemManager: SystemManagerImpl;
|
15
|
+
getDeviceConsole?: (nativeId?: ScryptedNativeId) => Console;
|
16
|
+
getMixinConsole?: (mixinId: string, nativeId?: ScryptedNativeId) => Console;
|
17
|
+
api: PluginAPI;
|
18
|
+
nativeIds: Map<string, DeviceManagerDevice>;
|
19
|
+
deviceStorage: Map<string, StorageImpl>;
|
20
|
+
mixinStorage: Map<string, Map<string, StorageImpl>>;
|
21
|
+
constructor(systemManager: SystemManagerImpl, getDeviceConsole?: (nativeId?: ScryptedNativeId) => Console, getMixinConsole?: (mixinId: string, nativeId?: ScryptedNativeId) => Console);
|
22
|
+
requestRestart(): Promise<void>;
|
23
|
+
getDeviceLogger(nativeId?: ScryptedNativeId): Logger;
|
24
|
+
getDeviceState(nativeId?: any): DeviceState;
|
25
|
+
createDeviceState(id: string, setState: (property: string, value: any) => Promise<void>): DeviceState;
|
26
|
+
getDeviceStorage(nativeId?: any): StorageImpl;
|
27
|
+
getMixinStorage(id: string, nativeId?: ScryptedNativeId): StorageImpl;
|
28
|
+
pruneMixinStorage(): void;
|
29
|
+
onMixinEvent(id: string, nativeId: ScryptedNativeId, eventInterface: string, eventData: any): Promise<void>;
|
30
|
+
getNativeIds(): string[];
|
31
|
+
onDeviceDiscovered(device: Device): Promise<string>;
|
32
|
+
onDeviceRemoved(nativeId: string): Promise<void>;
|
33
|
+
onDeviceEvent(nativeId: any, eventInterface: any, eventData?: any): Promise<void>;
|
34
|
+
onDevicesChanged(devices: DeviceManifest): Promise<void>;
|
35
|
+
}
|
36
|
+
declare class StorageImpl implements Storage {
|
37
|
+
deviceManager: DeviceManagerImpl;
|
38
|
+
nativeId: ScryptedNativeId;
|
39
|
+
prefix?: string;
|
40
|
+
api: PluginAPI;
|
41
|
+
[name: string]: any;
|
42
|
+
private static allowedMethods;
|
43
|
+
private static indexedHandler;
|
44
|
+
constructor(deviceManager: DeviceManagerImpl, nativeId: ScryptedNativeId, prefix?: string);
|
45
|
+
get storage(): {
|
46
|
+
[key: string]: any;
|
47
|
+
};
|
48
|
+
get length(): number;
|
49
|
+
clear(): void;
|
50
|
+
getItem(key: string): string;
|
51
|
+
key(index: number): string;
|
52
|
+
removeItem(key: string): void;
|
53
|
+
setItem(key: string, value: string): void;
|
54
|
+
}
|
55
|
+
export declare function setupPluginRemote(peer: RpcPeer, api: PluginAPI, pluginId: string, hostInfo: PluginHostInfo, getSystemState: () => {
|
56
|
+
[id: string]: {
|
57
|
+
[property: string]: SystemDeviceState;
|
58
|
+
};
|
59
|
+
}): Promise<PluginRemote>;
|
60
|
+
export interface WebSocketCustomHandler {
|
61
|
+
id: string;
|
62
|
+
methods: WebSocketMethods;
|
63
|
+
}
|
64
|
+
export type PluginReader = (name: string) => Buffer;
|
65
|
+
export interface PluginRemoteAttachOptions {
|
66
|
+
createMediaManager?: (systemManager: SystemManager, deviceManager: DeviceManagerImpl) => Promise<MediaManager>;
|
67
|
+
getServicePort?: (name: string, ...args: any[]) => Promise<number>;
|
68
|
+
getDeviceConsole?: (nativeId?: ScryptedNativeId) => Console;
|
69
|
+
getPluginConsole?: () => Console;
|
70
|
+
getMixinConsole?: (id: string, nativeId?: ScryptedNativeId) => Console;
|
71
|
+
onLoadZip?: (scrypted: ScryptedStatic, params: any, packageJson: any, zipData: Buffer | string, zipOptions: PluginRemoteLoadZipOptions) => Promise<any>;
|
72
|
+
onGetRemote?: (api: PluginAPI, pluginId: string) => Promise<void>;
|
73
|
+
}
|
74
|
+
export declare function attachPluginRemote(peer: RpcPeer, options?: PluginRemoteAttachOptions): Promise<ScryptedStatic>;
|
75
|
+
export {};
|