@scrypted/server 0.123.1 → 0.123.2

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.
Files changed (98) hide show
  1. package/dist/ip.d.ts +2 -0
  2. package/dist/ip.js +5 -4
  3. package/dist/ip.js.map +1 -1
  4. package/dist/listen-zero.d.ts +5 -2
  5. package/dist/listen-zero.js +2 -1
  6. package/dist/listen-zero.js.map +1 -1
  7. package/dist/plugin/plugin-api.d.ts +9 -3
  8. package/dist/plugin/plugin-api.js +10 -1
  9. package/dist/plugin/plugin-api.js.map +1 -1
  10. package/dist/plugin/plugin-console.d.ts +2 -1
  11. package/dist/plugin/plugin-console.js +27 -6
  12. package/dist/plugin/plugin-console.js.map +1 -1
  13. package/dist/plugin/plugin-host-api.js +1 -1
  14. package/dist/plugin/plugin-host-api.js.map +1 -1
  15. package/dist/plugin/plugin-host.d.ts +4 -7
  16. package/dist/plugin/plugin-host.js +76 -62
  17. package/dist/plugin/plugin-host.js.map +1 -1
  18. package/dist/plugin/plugin-lazy-remote.d.ts +3 -3
  19. package/dist/plugin/plugin-lazy-remote.js +2 -2
  20. package/dist/plugin/plugin-lazy-remote.js.map +1 -1
  21. package/dist/plugin/plugin-remote-stats.d.ts +2 -2
  22. package/dist/plugin/plugin-remote-stats.js +4 -2
  23. package/dist/plugin/plugin-remote-stats.js.map +1 -1
  24. package/dist/plugin/plugin-remote-worker.d.ts +0 -1
  25. package/dist/plugin/plugin-remote-worker.js +77 -335
  26. package/dist/plugin/plugin-remote-worker.js.map +1 -1
  27. package/dist/plugin/plugin-remote.d.ts +3 -3
  28. package/dist/plugin/plugin-remote.js +2 -2
  29. package/dist/plugin/plugin-remote.js.map +1 -1
  30. package/dist/plugin/plugin-repl.js +2 -1
  31. package/dist/plugin/plugin-repl.js.map +1 -1
  32. package/dist/plugin/runtime/cluster-fork.worker.d.ts +9 -0
  33. package/dist/plugin/runtime/cluster-fork.worker.js +73 -0
  34. package/dist/plugin/runtime/cluster-fork.worker.js.map +1 -0
  35. package/dist/plugin/runtime/custom-worker.js +2 -2
  36. package/dist/plugin/runtime/custom-worker.js.map +1 -1
  37. package/dist/plugin/runtime/node-fork-worker.js +5 -3
  38. package/dist/plugin/runtime/node-fork-worker.js.map +1 -1
  39. package/dist/plugin/runtime/python-worker.js +2 -2
  40. package/dist/plugin/runtime/python-worker.js.map +1 -1
  41. package/dist/rpc.d.ts +1 -0
  42. package/dist/rpc.js +3 -2
  43. package/dist/rpc.js.map +1 -1
  44. package/dist/runtime.d.ts +4 -0
  45. package/dist/runtime.js +16 -2
  46. package/dist/runtime.js.map +1 -1
  47. package/dist/scrypted-cluster-common.d.ts +22 -0
  48. package/dist/scrypted-cluster-common.js +332 -0
  49. package/dist/scrypted-cluster-common.js.map +1 -0
  50. package/dist/scrypted-cluster-main.d.ts +2 -0
  51. package/dist/scrypted-cluster-main.js +12 -0
  52. package/dist/scrypted-cluster-main.js.map +1 -0
  53. package/dist/scrypted-cluster.d.ts +38 -0
  54. package/dist/scrypted-cluster.js +277 -0
  55. package/dist/scrypted-cluster.js.map +1 -0
  56. package/dist/scrypted-main-exports.js +20 -14
  57. package/dist/scrypted-main-exports.js.map +1 -1
  58. package/dist/scrypted-server-main.js +8 -15
  59. package/dist/scrypted-server-main.js.map +1 -1
  60. package/dist/server-settings.d.ts +1 -0
  61. package/dist/server-settings.js +2 -1
  62. package/dist/server-settings.js.map +1 -1
  63. package/dist/services/backup.js.map +1 -1
  64. package/dist/services/cluster-fork.d.ts +7 -0
  65. package/dist/services/cluster-fork.js +25 -0
  66. package/dist/services/cluster-fork.js.map +1 -0
  67. package/dist/services/plugin.d.ts +2 -7
  68. package/dist/services/plugin.js +2 -17
  69. package/dist/services/plugin.js.map +1 -1
  70. package/package.json +2 -2
  71. package/python/plugin_remote.py +150 -135
  72. package/python/rpc_reader.py +3 -19
  73. package/src/ip.ts +5 -4
  74. package/src/listen-zero.ts +3 -2
  75. package/src/plugin/plugin-api.ts +11 -3
  76. package/src/plugin/plugin-console.ts +29 -7
  77. package/src/plugin/plugin-host-api.ts +1 -1
  78. package/src/plugin/plugin-host.ts +92 -77
  79. package/src/plugin/plugin-lazy-remote.ts +4 -4
  80. package/src/plugin/plugin-remote-stats.ts +6 -4
  81. package/src/plugin/plugin-remote-worker.ts +91 -376
  82. package/src/plugin/plugin-remote.ts +5 -5
  83. package/src/plugin/plugin-repl.ts +2 -1
  84. package/src/plugin/runtime/cluster-fork.worker.ts +92 -0
  85. package/src/plugin/runtime/custom-worker.ts +2 -2
  86. package/src/plugin/runtime/node-fork-worker.ts +6 -3
  87. package/src/plugin/runtime/python-worker.ts +2 -2
  88. package/src/rpc.ts +3 -2
  89. package/src/runtime.ts +17 -2
  90. package/src/scrypted-cluster-common.ts +374 -0
  91. package/src/scrypted-cluster-main.ts +12 -0
  92. package/src/scrypted-cluster.ts +326 -0
  93. package/src/scrypted-main-exports.ts +22 -16
  94. package/src/scrypted-server-main.ts +15 -23
  95. package/src/server-settings.ts +1 -0
  96. package/src/services/backup.ts +0 -1
  97. package/src/services/cluster-fork.ts +22 -0
  98. package/src/services/plugin.ts +3 -21
@@ -4,17 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.startPluginRemote = startPluginRemote;
7
- const events_1 = require("events");
8
7
  const fs_1 = __importDefault(require("fs"));
9
- const net_1 = __importDefault(require("net"));
10
8
  const path_1 = __importDefault(require("path"));
11
9
  const source_map_support_1 = require("source-map-support");
12
10
  const worker_threads_1 = __importDefault(require("worker_threads"));
13
- const cluster_hash_1 = require("../cluster/cluster-hash");
14
- const listen_zero_1 = require("../listen-zero");
15
11
  const rpc_1 = require("../rpc");
16
12
  const rpc_peer_eval_1 = require("../rpc-peer-eval");
17
- const rpc_serializer_1 = require("../rpc-serializer");
13
+ const scrypted_cluster_common_1 = require("../scrypted-cluster-common");
18
14
  const media_1 = require("./media");
19
15
  const plugin_api_1 = require("./plugin-api");
20
16
  const plugin_console_1 = require("./plugin-console");
@@ -23,17 +19,21 @@ const plugin_remote_1 = require("./plugin-remote");
23
19
  const plugin_remote_stats_1 = require("./plugin-remote-stats");
24
20
  const plugin_repl_1 = require("./plugin-repl");
25
21
  const plugin_volume_1 = require("./plugin-volume");
22
+ const child_process_worker_1 = require("./runtime/child-process-worker");
23
+ const cluster_fork_worker_1 = require("./runtime/cluster-fork.worker");
26
24
  const node_thread_worker_1 = require("./runtime/node-thread-worker");
27
25
  const node_worker_common_1 = require("./runtime/node-worker-common");
28
26
  const runtime_host_1 = require("./runtime/runtime-host");
29
- const child_process_worker_1 = require("./runtime/child-process-worker");
30
- const deferred_1 = require("../deferred");
31
27
  const serverVersion = require('../../package.json').version;
32
28
  function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOptions) {
33
29
  const peer = new rpc_1.RpcPeer('unknown', 'host', peerSend);
30
+ const clusterPeerSetup = (0, scrypted_cluster_common_1.prepareClusterPeer)(peer);
31
+ const { initializeCluster, connectRPCObject, SCRYPTED_CLUSTER_ADDRESS, connectClusterObject, ensureClusterPeer, mainThreadBrokerRegister, mainThreadPort } = clusterPeerSetup;
32
+ peer.params.initializeCluster = initializeCluster;
34
33
  let systemManager;
35
34
  let deviceManager;
36
35
  let api;
36
+ let originalAPI;
37
37
  let pluginsPromise;
38
38
  function getPlugins() {
39
39
  if (!pluginsPromise)
@@ -67,6 +67,7 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
67
67
  return super.setStorage(nativeId, storage);
68
68
  }
69
69
  }
70
+ originalAPI = _api;
70
71
  api = new PluginForkableAPI(_api);
71
72
  peer.selfName = pluginId;
72
73
  return api;
@@ -78,291 +79,19 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
78
79
  if (name === 'repl') {
79
80
  if (!replPort)
80
81
  throw new Error('REPL unavailable: Plugin not loaded.');
81
- return replPort;
82
+ return [await replPort, process.env.SCRYPTED_CLUSTER_ADDRESS];
82
83
  }
83
84
  throw new Error(`unknown service ${name}`);
84
85
  },
85
- async onLoadZip(scrypted, params, packageJson, getZip, zipOptions) {
86
+ async onLoadZip(scrypted, params, packageJson, zipAPI, zipOptions) {
86
87
  const mainFile = zipOptions?.main || 'main';
87
88
  const mainNodejs = `${mainFile}.nodejs.js`;
88
89
  const pluginMainNodeJs = `/plugin/${mainNodejs}`;
89
90
  const pluginIdMainNodeJs = `/${pluginId}/${mainNodejs}`;
90
- const { clusterId, clusterSecret, zipHash } = zipOptions;
91
- const { zipFile, unzippedPath } = await (0, node_worker_common_1.prepareZip)((0, plugin_volume_1.getPluginVolume)(pluginId), zipHash, getZip);
92
- const SCRYPTED_CLUSTER_ADDRESS = process.env.SCRYPTED_CLUSTER_ADDRESS;
93
- function isClusterAddress(address) {
94
- return !address || address === SCRYPTED_CLUSTER_ADDRESS;
95
- }
96
- const onProxySerialization = (peer, value, sourceKey) => {
97
- const properties = rpc_1.RpcPeer.prepareProxyProperties(value) || {};
98
- let clusterEntry = properties.__cluster;
99
- // ensure globally stable proxyIds.
100
- // worker threads will embed their pid and tid in the proxy id for cross worker fast path.
101
- const proxyId = peer.localProxied.get(value)?.id || clusterEntry?.proxyId || `n-${process.pid}-${worker_threads_1.default.threadId}-${rpc_1.RpcPeer.generateId()}`;
102
- // if the cluster entry already exists, check if it belongs to this node.
103
- // if it belongs to this node, the entry must also be for this peer.
104
- // relying on the liveness/gc of a different peer may cause race conditions.
105
- if (clusterEntry) {
106
- if (isClusterAddress(clusterEntry?.address) && clusterPort === clusterEntry.port && sourceKey !== clusterEntry.sourceKey)
107
- clusterEntry = undefined;
108
- }
109
- if (!clusterEntry) {
110
- clusterEntry = {
111
- id: clusterId,
112
- address: SCRYPTED_CLUSTER_ADDRESS,
113
- port: clusterPort,
114
- proxyId,
115
- sourceKey,
116
- sha256: null,
117
- };
118
- clusterEntry.sha256 = (0, cluster_hash_1.computeClusterObjectHash)(clusterEntry, clusterSecret);
119
- properties.__cluster = clusterEntry;
120
- }
121
- return {
122
- proxyId,
123
- properties,
124
- };
125
- };
126
- peer.onProxySerialization = value => onProxySerialization(peer, value, undefined);
127
- const resolveObject = async (id, sourceKey) => {
128
- const sourcePeer = sourceKey
129
- ? await clusterPeers.get(sourceKey)
130
- : peer;
131
- if (!sourcePeer)
132
- console.error('source peer not found', sourceKey);
133
- const ret = sourcePeer?.localProxyMap.get(id);
134
- if (!ret) {
135
- console.error('source key not found', sourceKey, id);
136
- return;
137
- }
138
- return ret;
139
- };
140
- // all cluster clients, incoming and outgoing, connect with random ports which can be used as peer ids
141
- // on the cluster server that is listening on the actual port/
142
- // incoming connections: use the remote random/unique port
143
- // outgoing connections: use the local random/unique port
144
- const clusterPeers = new Map();
145
- function getClusterPeerKey(address, port) {
146
- return `${address}:${port}`;
147
- }
148
- const clusterRpcServer = net_1.default.createServer(client => {
149
- const clusterPeerAddress = client.remoteAddress;
150
- const clusterPeerPort = client.remotePort;
151
- const clusterPeerKey = getClusterPeerKey(clusterPeerAddress, clusterPeerPort);
152
- const clusterPeer = (0, rpc_serializer_1.createDuplexRpcPeer)(peer.selfName, clusterPeerKey, client, client);
153
- // the listening peer sourceKey (client address/port) is used by the OTHER peer (the client)
154
- // to determine if it is already connected to THIS peer (the server).
155
- clusterPeer.onProxySerialization = (value) => onProxySerialization(clusterPeer, value, clusterPeerKey);
156
- clusterPeers.set(clusterPeerKey, Promise.resolve(clusterPeer));
157
- startPluginRemoteOptions?.onClusterPeer?.(clusterPeer);
158
- const connectRPCObject = async (o) => {
159
- const sha256 = (0, cluster_hash_1.computeClusterObjectHash)(o, clusterSecret);
160
- if (sha256 !== o.sha256)
161
- throw new Error('secret incorrect');
162
- return resolveObject(o.proxyId, o.sourceKey);
163
- };
164
- clusterPeer.params['connectRPCObject'] = connectRPCObject;
165
- client.on('close', () => {
166
- clusterPeers.delete(clusterPeerKey);
167
- clusterPeer.kill('cluster socket closed');
168
- });
169
- });
170
- const listenAddress = SCRYPTED_CLUSTER_ADDRESS
171
- ? '0.0.0.0'
172
- : '127.0.0.1';
173
- const clusterPort = await (0, listen_zero_1.listenZero)(clusterRpcServer, listenAddress);
174
- const ensureClusterPeer = (address, connectPort) => {
175
- if (isClusterAddress(address))
176
- address = '127.0.0.1';
177
- const clusterPeerKey = getClusterPeerKey(address, connectPort);
178
- let clusterPeerPromise = clusterPeers.get(clusterPeerKey);
179
- if (clusterPeerPromise)
180
- return clusterPeerPromise;
181
- clusterPeerPromise = (async () => {
182
- const socket = net_1.default.connect(connectPort, address);
183
- socket.on('close', () => clusterPeers.delete(clusterPeerKey));
184
- try {
185
- await (0, events_1.once)(socket, 'connect');
186
- const { address: sourceAddress } = socket.address();
187
- if (sourceAddress !== SCRYPTED_CLUSTER_ADDRESS && sourceAddress !== '127.0.0.1')
188
- console.warn("source address mismatch", sourceAddress);
189
- const clusterPeer = (0, rpc_serializer_1.createDuplexRpcPeer)(peer.selfName, clusterPeerKey, socket, socket);
190
- clusterPeer.onProxySerialization = (value) => onProxySerialization(clusterPeer, value, clusterPeerKey);
191
- return clusterPeer;
192
- }
193
- catch (e) {
194
- console.error('failure ipc connect', e);
195
- socket.destroy();
196
- throw e;
197
- }
198
- })();
199
- clusterPeers.set(clusterPeerKey, clusterPeerPromise);
200
- return clusterPeerPromise;
201
- };
202
- async function peerConnectRPCObject(peer, o) {
203
- let peerConnectRPCObject = peer.tags['connectRPCObject'];
204
- if (!peerConnectRPCObject) {
205
- peerConnectRPCObject = peer.getParam('connectRPCObject');
206
- peer.tags['connectRPCObject'] = peerConnectRPCObject;
207
- }
208
- const resolved = await peerConnectRPCObject;
209
- return resolved(o);
210
- }
211
- const tidChannels = new Map();
212
- const tidPeers = new Map();
213
- function connectTidPeer(tid) {
214
- let peerPromise = tidPeers.get(tid);
215
- if (peerPromise)
216
- return peerPromise;
217
- let tidDeferred = tidChannels.get(tid);
218
- // if the tid port is not available yet, request it.
219
- if (!tidDeferred) {
220
- tidDeferred = new deferred_1.Deferred();
221
- tidChannels.set(tid, tidDeferred);
222
- if (mainThreadPort) {
223
- // request the connection via the main thread
224
- mainThreadPort.postMessage({
225
- threadId: tid,
226
- });
227
- }
228
- }
229
- const threadPeerKey = `thread:${tid}`;
230
- function peerCleanup() {
231
- clusterPeers.delete(threadPeerKey);
232
- }
233
- peerPromise = tidDeferred.promise.then(port => {
234
- const threadPeer = node_thread_worker_1.NodeThreadWorker.createRpcPeer(peer.selfName, threadPeerKey, port);
235
- threadPeer.onProxySerialization = value => onProxySerialization(threadPeer, value, threadPeerKey);
236
- const connectRPCObject = async (o) => {
237
- const sha256 = (0, cluster_hash_1.computeClusterObjectHash)(o, clusterSecret);
238
- if (sha256 !== o.sha256)
239
- throw new Error('secret incorrect');
240
- return resolveObject(o.proxyId, o.sourceKey);
241
- };
242
- threadPeer.params['connectRPCObject'] = connectRPCObject;
243
- function cleanup(message) {
244
- peerCleanup();
245
- tidChannels.delete(tid);
246
- tidPeers.delete(tid);
247
- threadPeer.kill(message);
248
- }
249
- port.on('close', () => cleanup('connection closed.'));
250
- port.on('messageerror', () => cleanup('message error.'));
251
- return threadPeer;
252
- });
253
- peerPromise.catch(() => peerCleanup());
254
- clusterPeers.set(threadPeerKey, peerPromise);
255
- tidPeers.set(tid, peerPromise);
256
- return peerPromise;
257
- }
258
- const mainThreadPort = worker_threads_1.default.isMainThread ? undefined : worker_threads_1.default.workerData.mainThreadPort;
259
- if (!worker_threads_1.default.isMainThread) {
260
- // the main thread port will send messages with a thread port when a thread wants to initiate a connection.
261
- mainThreadPort.on('message', async (message) => {
262
- const { port, threadId } = message;
263
- let tidDeferred = tidChannels.get(threadId);
264
- if (!tidDeferred) {
265
- tidDeferred = new deferred_1.Deferred();
266
- tidChannels.set(threadId, tidDeferred);
267
- }
268
- tidDeferred.resolve(port);
269
- connectTidPeer(threadId);
270
- });
271
- }
272
- async function connectIPCObject(clusterObject, tid) {
273
- // if the main thread is trying to connect to an object,
274
- // the argument order matters here, as the connection attempt looks at the
275
- // connectThreadId to see if the target is main thread.
276
- if (worker_threads_1.default.isMainThread)
277
- mainThreadBrokerConnect(tid, worker_threads_1.default.threadId);
278
- const clusterPeer = await connectTidPeer(tid);
279
- const existing = clusterPeer.remoteWeakProxies[clusterObject.proxyId]?.deref();
280
- if (existing)
281
- return existing;
282
- return peerConnectRPCObject(clusterPeer, clusterObject);
283
- }
284
- const brokeredConnections = new Set();
285
- const workers = new Map();
286
- function mainThreadBrokerConnect(threadId, connectThreadId) {
287
- if (worker_threads_1.default.isMainThread && threadId === worker_threads_1.default.threadId) {
288
- const msg = 'invalid ipc, main thread cannot connect to itself';
289
- console.error(msg);
290
- throw new Error(msg);
291
- }
292
- // both workers nay initiate connection to each other at same time, so this
293
- // is a synchronization point.
294
- const key = JSON.stringify([threadId, connectThreadId].sort());
295
- if (brokeredConnections.has(key))
296
- return;
297
- brokeredConnections.add(key);
298
- const worker = workers.get(threadId);
299
- const connect = workers.get(connectThreadId);
300
- const channel = new worker_threads_1.default.MessageChannel();
301
- worker.postMessage({
302
- port: channel.port1,
303
- threadId: connectThreadId,
304
- }, [channel.port1]);
305
- if (connect) {
306
- connect.postMessage({
307
- port: channel.port2,
308
- threadId,
309
- }, [channel.port2]);
310
- }
311
- else if (connectThreadId === worker_threads_1.default.threadId) {
312
- connectTidPeer(threadId);
313
- const deferred = tidChannels.get(threadId);
314
- deferred.resolve(channel.port2);
315
- }
316
- else {
317
- channel.port2.close();
318
- }
319
- }
320
- function mainThreadBrokerRegister(workerPort, threadId) {
321
- workers.set(threadId, workerPort);
322
- // this is main thread, so there will be two types of requests from the child: registration requests from grandchildren and connection requests.
323
- workerPort.on('message', async (message) => {
324
- const { port, threadId: connectThreadId } = message;
325
- if (port) {
326
- mainThreadBrokerRegister(port, connectThreadId);
327
- }
328
- else {
329
- mainThreadBrokerConnect(threadId, connectThreadId);
330
- }
331
- });
332
- }
333
- scrypted.connectRPCObject = async (value) => {
334
- const clusterObject = value?.__cluster;
335
- if (clusterObject?.id !== clusterId)
336
- return value;
337
- const { address, port, proxyId, sourceKey } = clusterObject;
338
- // handle the case when trying to connect to an object is on this cluster node,
339
- // returning the actual object, rather than initiating a loopback connection.
340
- if (port === clusterPort)
341
- return resolveObject(proxyId, sourceKey);
342
- // can use worker to worker ipc if the address and pid matches and both side are node.
343
- if (address === SCRYPTED_CLUSTER_ADDRESS && proxyId.startsWith('n-')) {
344
- const parts = proxyId.split('-');
345
- const pid = parseInt(parts[1]);
346
- if (pid === process.pid)
347
- return connectIPCObject(clusterObject, parseInt(parts[2]));
348
- }
349
- try {
350
- const clusterPeerPromise = ensureClusterPeer(address, port);
351
- const clusterPeer = await clusterPeerPromise;
352
- // may already have this proxy so check first.
353
- const existing = clusterPeer.remoteWeakProxies[proxyId]?.deref();
354
- if (existing)
355
- return existing;
356
- const newValue = await peerConnectRPCObject(clusterPeer, clusterObject);
357
- if (!newValue)
358
- throw new Error('rpc object not found?');
359
- return newValue;
360
- }
361
- catch (e) {
362
- console.error('failure rpc', clusterObject, e);
363
- return value;
364
- }
365
- };
91
+ const { zipHash } = zipOptions;
92
+ const { zipFile, unzippedPath } = await (0, node_worker_common_1.prepareZip)((0, plugin_volume_1.getPluginVolume)(pluginId), zipHash, zipAPI.getZip);
93
+ await initializeCluster(zipOptions);
94
+ scrypted.connectRPCObject = connectRPCObject;
366
95
  if (worker_threads_1.default.isMainThread) {
367
96
  const fsDir = path_1.default.join(unzippedPath, 'fs');
368
97
  await fs_1.default.promises.mkdir(fsDir, {
@@ -442,7 +171,7 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
442
171
  // process.memoryUsage is per thread.
443
172
  const allMemoryStats = new Map();
444
173
  // start the stats updater/watchdog after installation has finished, as that may take some time.
445
- peer.getParam('updateStats').then(updateStats => (0, plugin_remote_stats_1.startStatsUpdater)(allMemoryStats, updateStats));
174
+ (0, plugin_remote_stats_1.startStatsUpdater)(allMemoryStats, zipAPI.updateStats);
446
175
  let pong;
447
176
  peer.params.ping = async (time) => {
448
177
  pong ||= await peer.getParam('pong');
@@ -455,63 +184,73 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
455
184
  };
456
185
  const pluginRemoteAPI = scrypted.pluginRemoteAPI;
457
186
  scrypted.fork = (options) => {
187
+ let forkPeer;
458
188
  let runtimeWorker;
459
189
  let nativeWorker;
460
- if (options?.runtime) {
461
- const builtins = (0, runtime_host_1.getBuiltinRuntimeHosts)();
462
- const runtime = builtins.get(options.runtime);
463
- if (!runtime)
464
- throw new Error('unknown runtime ' + options.runtime);
465
- runtimeWorker = runtime(mainFilename, pluginId, {
466
- packageJson,
467
- env: process.env,
468
- pluginDebug: undefined,
469
- zipFile,
470
- unzippedPath,
471
- zipHash,
472
- }, undefined);
473
- if (runtimeWorker instanceof child_process_worker_1.ChildProcessWorker) {
474
- nativeWorker = runtimeWorker.childProcess;
475
- const console = options?.id ? getMixinConsole(options.id, options.nativeId) : undefined;
476
- (0, plugin_console_1.pipeWorkerConsole)(nativeWorker, console);
477
- }
190
+ // if running in a cluster, fork to a matching cluster worker only if necessary.
191
+ if ((0, cluster_fork_worker_1.needsClusterForkWorker)(options)) {
192
+ ({ runtimeWorker, forkPeer } = (0, cluster_fork_worker_1.createClusterForkWorker)(api.getComponent('cluster-fork'), zipHash, zipAPI.getZip, options, packageJson, scrypted.connectRPCObject));
478
193
  }
479
194
  else {
480
- // when a node thread is created, also create a secondary message channel to link the grandparent (or mainthread) and child.
481
- const mainThreadChannel = new worker_threads_1.default.MessageChannel();
482
- const ntw = new node_thread_worker_1.NodeThreadWorker(mainFilename, pluginId, {
483
- packageJson,
484
- env: process.env,
485
- pluginDebug: undefined,
486
- zipFile,
487
- unzippedPath,
488
- zipHash,
489
- }, {
490
- name: options?.name,
491
- }, {
492
- // child connection to grandparent
493
- mainThreadPort: mainThreadChannel.port1,
494
- }, [mainThreadChannel.port1]);
495
- runtimeWorker = ntw;
496
- nativeWorker = ntw.worker;
497
- const { threadId } = ntw.worker;
498
- if (mainThreadPort) {
499
- // grandparent connection to child
500
- mainThreadPort.postMessage({
501
- port: mainThreadChannel.port2,
502
- threadId,
503
- }, [mainThreadChannel.port2]);
195
+ if (options?.runtime) {
196
+ const builtins = (0, runtime_host_1.getBuiltinRuntimeHosts)();
197
+ const runtime = builtins.get(options.runtime);
198
+ if (!runtime)
199
+ throw new Error('unknown runtime ' + options.runtime);
200
+ runtimeWorker = runtime(mainFilename, pluginId, {
201
+ packageJson,
202
+ env: undefined,
203
+ pluginDebug: undefined,
204
+ zipFile,
205
+ unzippedPath,
206
+ zipHash,
207
+ }, undefined);
208
+ if (runtimeWorker instanceof child_process_worker_1.ChildProcessWorker) {
209
+ nativeWorker = runtimeWorker.childProcess;
210
+ }
504
211
  }
505
212
  else {
506
- mainThreadBrokerRegister(mainThreadChannel.port2, threadId);
213
+ // when a node thread is created, also create a secondary message channel to link the grandparent (or mainthread) and child.
214
+ const mainThreadChannel = new worker_threads_1.default.MessageChannel();
215
+ const ntw = new node_thread_worker_1.NodeThreadWorker(mainFilename, pluginId, {
216
+ packageJson,
217
+ env: undefined,
218
+ pluginDebug: undefined,
219
+ zipFile,
220
+ unzippedPath,
221
+ zipHash,
222
+ }, {
223
+ name: options?.name,
224
+ }, {
225
+ // child connection to grandparent
226
+ mainThreadPort: mainThreadChannel.port1,
227
+ }, [mainThreadChannel.port1]);
228
+ runtimeWorker = ntw;
229
+ nativeWorker = ntw.worker;
230
+ const { threadId } = ntw.worker;
231
+ if (mainThreadPort) {
232
+ // grandparent connection to child
233
+ mainThreadPort.postMessage({
234
+ port: mainThreadChannel.port2,
235
+ threadId,
236
+ }, [mainThreadChannel.port2]);
237
+ }
238
+ else {
239
+ mainThreadBrokerRegister(mainThreadChannel.port2, threadId);
240
+ }
241
+ }
242
+ // thread workers inherit main console. pipe anything else.
243
+ if (!(runtimeWorker instanceof node_thread_worker_1.NodeThreadWorker)) {
244
+ const console = options?.id ? getMixinConsole(options.id, options.nativeId) : undefined;
245
+ (0, plugin_console_1.pipeWorkerConsole)(nativeWorker, console);
507
246
  }
247
+ const localPeer = new rpc_1.RpcPeer('main', 'thread', (message, reject, serializationContext) => runtimeWorker.send(message, reject, serializationContext));
248
+ runtimeWorker.setupRpcPeer(localPeer);
249
+ forkPeer = Promise.resolve(localPeer);
508
250
  }
509
251
  const result = (async () => {
510
- const threadPeer = new rpc_1.RpcPeer('main', 'thread', (message, reject, serializationContext) => runtimeWorker.send(message, reject, serializationContext));
511
- threadPeer.params.updateStats = (stats) => {
512
- allMemoryStats.set(runtimeWorker, stats.memoryUsage);
513
- };
514
- runtimeWorker.setupRpcPeer(threadPeer);
252
+ const threadPeer = await forkPeer;
253
+ // todo: handle nested forks and skip wrap. this is probably buggy.
515
254
  class PluginForkAPI extends plugin_api_1.PluginAPIProxy {
516
255
  [rpc_1.RpcPeer.PROPERTY_PROXY_ONEWAY_METHODS] = api[rpc_1.RpcPeer.PROPERTY_PROXY_ONEWAY_METHODS];
517
256
  setStorage(nativeId, storage) {
@@ -546,7 +285,10 @@ function startPluginRemote(mainFilename, pluginId, peerSend, startPluginRemoteOp
546
285
  const forkOptions = Object.assign({}, zipOptions);
547
286
  forkOptions.fork = true;
548
287
  forkOptions.main = options?.filename;
549
- return remote.loadZip(packageJson, getZip, forkOptions);
288
+ const forkZipAPI = new plugin_api_1.PluginZipAPI(zipAPI.getZip, async (stats) => {
289
+ allMemoryStats.set(runtimeWorker, stats.memoryUsage);
290
+ });
291
+ return remote.loadZip(packageJson, forkZipAPI, forkOptions);
550
292
  })();
551
293
  result.catch(() => runtimeWorker.kill());
552
294
  const worker = {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-remote-worker.js","sourceRoot":"","sources":["../../src/plugin/plugin-remote-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-remote-worker.js","sourceRoot":"","sources":["../../src/plugin/plugin-remote-worker.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Device, DeviceManager, DeviceManifest, DeviceState, Logger, MediaManager, ScryptedNativeId, ScryptedStatic, SystemDeviceState, SystemManager, WritableDeviceState } from '@scrypted/types';
2
2
  import { RpcPeer } from '../rpc';
3
- import { PluginAPI, PluginHostInfo, PluginRemote, PluginRemoteLoadZipOptions } from './plugin-api';
3
+ import { PluginAPI, PluginHostInfo, PluginRemote, PluginRemoteLoadZipOptions, PluginZipAPI } from './plugin-api';
4
4
  import { WebSocketMethods } from './plugin-remote-websocket';
5
5
  import { SystemManagerImpl } from './system';
6
6
  interface DeviceManagerDevice {
@@ -62,11 +62,11 @@ export interface WebSocketCustomHandler {
62
62
  }
63
63
  export interface PluginRemoteAttachOptions {
64
64
  createMediaManager?: (systemManager: SystemManager, deviceManager: DeviceManagerImpl) => Promise<MediaManager>;
65
- getServicePort?: (name: string, ...args: any[]) => Promise<number>;
65
+ getServicePort?: (name: string, ...args: any[]) => Promise<[number, string]>;
66
66
  getDeviceConsole?: (nativeId?: ScryptedNativeId) => Console;
67
67
  getPluginConsole?: () => Console;
68
68
  getMixinConsole?: (id: string, nativeId?: ScryptedNativeId) => Console;
69
- onLoadZip?: (scrypted: ScryptedStatic, params: any, packageJson: any, getZip: () => Promise<Buffer>, zipOptions: PluginRemoteLoadZipOptions) => Promise<any>;
69
+ onLoadZip?: (scrypted: ScryptedStatic, params: any, packageJson: any, zipAPI: PluginZipAPI, zipOptions: PluginRemoteLoadZipOptions) => Promise<any>;
70
70
  onGetRemote?: (api: PluginAPI, pluginId: string) => Promise<PluginAPI>;
71
71
  }
72
72
  export declare function attachPluginRemote(peer: RpcPeer, options?: PluginRemoteAttachOptions): Promise<ScryptedStatic>;
@@ -563,7 +563,7 @@ function attachPluginRemote(peer, options) {
563
563
  deviceManager.pruneMixinStorage();
564
564
  done(ret);
565
565
  },
566
- async loadZip(packageJson, getZip, zipOptions) {
566
+ async loadZip(packageJson, zipAPI, zipOptions) {
567
567
  const params = {
568
568
  __filename: undefined,
569
569
  deviceManager,
@@ -584,7 +584,7 @@ function attachPluginRemote(peer, options) {
584
584
  };
585
585
  params.pluginRuntimeAPI = ret;
586
586
  try {
587
- return await options.onLoadZip(ret, params, packageJson, getZip, zipOptions);
587
+ return await options.onLoadZip(ret, params, packageJson, zipAPI, zipOptions);
588
588
  }
589
589
  catch (e) {
590
590
  console.error('plugin start/fork failed', e);