@scrypted/server 0.123.1 → 0.123.3
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.
- package/dist/ip.d.ts +2 -0
- package/dist/ip.js +5 -4
- package/dist/ip.js.map +1 -1
- package/dist/listen-zero.d.ts +5 -2
- package/dist/listen-zero.js +2 -1
- package/dist/listen-zero.js.map +1 -1
- package/dist/plugin/plugin-api.d.ts +9 -3
- package/dist/plugin/plugin-api.js +10 -1
- package/dist/plugin/plugin-api.js.map +1 -1
- package/dist/plugin/plugin-console.d.ts +2 -1
- package/dist/plugin/plugin-console.js +27 -6
- package/dist/plugin/plugin-console.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.d.ts +4 -7
- package/dist/plugin/plugin-host.js +76 -62
- package/dist/plugin/plugin-host.js.map +1 -1
- package/dist/plugin/plugin-lazy-remote.d.ts +3 -3
- package/dist/plugin/plugin-lazy-remote.js +2 -2
- package/dist/plugin/plugin-lazy-remote.js.map +1 -1
- package/dist/plugin/plugin-remote-stats.d.ts +2 -2
- package/dist/plugin/plugin-remote-stats.js +4 -2
- package/dist/plugin/plugin-remote-stats.js.map +1 -1
- package/dist/plugin/plugin-remote-worker.d.ts +0 -1
- package/dist/plugin/plugin-remote-worker.js +77 -335
- package/dist/plugin/plugin-remote-worker.js.map +1 -1
- package/dist/plugin/plugin-remote.d.ts +3 -3
- package/dist/plugin/plugin-remote.js +2 -2
- package/dist/plugin/plugin-remote.js.map +1 -1
- package/dist/plugin/plugin-repl.js +2 -1
- package/dist/plugin/plugin-repl.js.map +1 -1
- package/dist/plugin/runtime/cluster-fork.worker.d.ts +9 -0
- package/dist/plugin/runtime/cluster-fork.worker.js +73 -0
- package/dist/plugin/runtime/cluster-fork.worker.js.map +1 -0
- package/dist/plugin/runtime/custom-worker.js +2 -2
- package/dist/plugin/runtime/custom-worker.js.map +1 -1
- package/dist/plugin/runtime/node-fork-worker.js +5 -3
- package/dist/plugin/runtime/node-fork-worker.js.map +1 -1
- package/dist/plugin/runtime/python-worker.js +2 -2
- package/dist/plugin/runtime/python-worker.js.map +1 -1
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.js +3 -2
- package/dist/rpc.js.map +1 -1
- package/dist/runtime.d.ts +4 -0
- package/dist/runtime.js +16 -2
- package/dist/runtime.js.map +1 -1
- package/dist/scrypted-cluster-common.d.ts +22 -0
- package/dist/scrypted-cluster-common.js +332 -0
- package/dist/scrypted-cluster-common.js.map +1 -0
- package/dist/scrypted-cluster-main.d.ts +2 -0
- package/dist/scrypted-cluster-main.js +12 -0
- package/dist/scrypted-cluster-main.js.map +1 -0
- package/dist/scrypted-cluster.d.ts +38 -0
- package/dist/scrypted-cluster.js +277 -0
- package/dist/scrypted-cluster.js.map +1 -0
- package/dist/scrypted-main-exports.js +20 -14
- package/dist/scrypted-main-exports.js.map +1 -1
- package/dist/scrypted-server-main.js +8 -15
- package/dist/scrypted-server-main.js.map +1 -1
- package/dist/server-settings.d.ts +1 -0
- package/dist/server-settings.js +2 -1
- package/dist/server-settings.js.map +1 -1
- package/dist/services/backup.js.map +1 -1
- package/dist/services/cluster-fork.d.ts +7 -0
- package/dist/services/cluster-fork.js +25 -0
- package/dist/services/cluster-fork.js.map +1 -0
- package/dist/services/plugin.d.ts +2 -7
- package/dist/services/plugin.js +2 -17
- package/dist/services/plugin.js.map +1 -1
- package/package.json +2 -2
- package/python/plugin_remote.py +150 -135
- package/python/rpc_reader.py +3 -19
- package/src/ip.ts +5 -4
- package/src/listen-zero.ts +3 -2
- package/src/plugin/plugin-api.ts +11 -3
- package/src/plugin/plugin-console.ts +29 -7
- package/src/plugin/plugin-host-api.ts +1 -1
- package/src/plugin/plugin-host.ts +92 -77
- package/src/plugin/plugin-lazy-remote.ts +4 -4
- package/src/plugin/plugin-remote-stats.ts +6 -4
- package/src/plugin/plugin-remote-worker.ts +91 -376
- package/src/plugin/plugin-remote.ts +5 -5
- package/src/plugin/plugin-repl.ts +2 -1
- package/src/plugin/runtime/cluster-fork.worker.ts +92 -0
- package/src/plugin/runtime/custom-worker.ts +2 -2
- package/src/plugin/runtime/node-fork-worker.ts +6 -3
- package/src/plugin/runtime/python-worker.ts +2 -2
- package/src/rpc.ts +3 -2
- package/src/runtime.ts +17 -2
- package/src/scrypted-cluster-common.ts +374 -0
- package/src/scrypted-cluster-main.ts +12 -0
- package/src/scrypted-cluster.ts +329 -0
- package/src/scrypted-main-exports.ts +22 -16
- package/src/scrypted-server-main.ts +15 -23
- package/src/server-settings.ts +1 -0
- package/src/services/backup.ts +0 -1
- package/src/services/cluster-fork.ts +22 -0
- 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
|
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,
|
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 {
|
91
|
-
const { zipFile, unzippedPath } = await (0, node_worker_common_1.prepareZip)((0, plugin_volume_1.getPluginVolume)(pluginId), zipHash, getZip);
|
92
|
-
|
93
|
-
|
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
|
-
|
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
|
461
|
-
|
462
|
-
|
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
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
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
|
-
|
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 =
|
511
|
-
|
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
|
-
|
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":";;;;;AAqCA,8CAwoBC;AA3qBD,mCAA8B;AAC9B,4CAAoB;AACpB,8CAAsB;AACtB,gDAAwB;AACxB,2DAAwE;AACxE,oEAA4C;AAC5C,0DAAmE;AAEnE,gDAA4C;AAC5C,gCAA6C;AAC7C,oDAA6C;AAC7C,sDAAwD;AACxD,mCAA2C;AAC3C,6CAAmG;AACnG,qDAAsE;AACtE,uEAA2F;AAC3F,mDAA2F;AAC3F,+DAAuE;AACvE,+CAAiD;AACjD,mDAAkD;AAClD,qEAAgE;AAChE,qEAA0D;AAE1D,yDAAgE;AAChE,yEAAoE;AACpE,0CAAuC;AAEvC,MAAM,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;AAQ5D,SAAgB,iBAAiB,CAAC,YAAoB,EAAE,QAAgB,EAAE,QAAgG,EAAE,wBAAmD;IAC3N,MAAM,IAAI,GAAG,IAAI,aAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEtD,IAAI,aAA4B,CAAC;IACjC,IAAI,aAAgC,CAAC;IACrC,IAAI,GAAc,CAAC;IAGnB,IAAI,cAA4B,CAAC;IACjC,SAAS,UAAU;QACf,IAAI,CAAC,cAAc;YACf,cAAc,GAAG,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAA,gCAAe,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEzI,IAAI,QAAyB,CAAC;IAE9B,IAAI,cAAuB,CAAC;IAC5B,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,cAAc;YACf,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC;IAC1B,CAAC,CAAA;IAED,IAAI,2BAA+D,CAAC;IAEpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEtC,IAAA,kCAAkB,EAAC,IAAI,EAAE;QACrB,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YACjC,aAAa,GAAG,EAAE,CAAC;YACnB,aAAa,GAAG,EAAE,CAAA;YAClB,OAAO,IAAI,wBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YACnC,MAAM,iBAAkB,SAAQ,2BAAc;gBAC1C,CAAC,aAAO,CAAC,6BAA6B,CAAC,GAAI,IAAY,CAAC,aAAO,CAAC,6BAA6B,CAAC,CAAC;gBAE/F,UAAU,CAAC,QAAgB,EAAE,OAAgC;oBACzD,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBACpD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACpB,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;oBACzC,CAAC;oBACD,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC;aACJ;YAED,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,OAAO,GAAG,CAAC;QACf,CAAC;QACD,gBAAgB;QAChB,gBAAgB;QAChB,eAAe;QACf,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAW;YACrC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ;oBACT,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;gBAC3D,OAAO,QAAQ,CAAC;YACpB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,QAAwB,EAAE,MAAW,EAAE,WAAgB,EAAE,MAA6B,EAAE,UAAsC;YAC1I,MAAM,QAAQ,GAAG,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC;YAC5C,MAAM,UAAU,GAAG,GAAG,QAAQ,YAAY,CAAC;YAC3C,MAAM,gBAAgB,GAAG,WAAW,UAAU,EAAE,CAAC;YACjD,MAAM,kBAAkB,GAAG,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;YAExD,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;YACzD,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,+BAAU,EAAC,IAAA,+BAAe,EAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAE/F,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;YAEtE,SAAS,gBAAgB,CAAC,OAAe;gBACrC,OAAO,CAAC,OAAO,IAAI,OAAO,KAAK,wBAAwB,CAAC;YAC5D,CAAC;YAED,MAAM,oBAAoB,GAAG,CAAC,IAAa,EAAE,KAAU,EAAE,SAAiB,EAAE,EAAE;gBAC1E,MAAM,UAAU,GAAG,aAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC/D,IAAI,YAAY,GAAkB,UAAU,CAAC,SAAS,CAAC;gBAEvD,mCAAmC;gBACnC,0FAA0F;gBAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,YAAY,EAAE,OAAO,IAAI,KAAK,OAAO,CAAC,GAAG,IAAI,wBAAc,CAAC,QAAQ,IAAI,aAAO,CAAC,UAAU,EAAE,EAAE,CAAC;gBAEnJ,yEAAyE;gBACzE,oEAAoE;gBACpE,4EAA4E;gBAC5E,IAAI,YAAY,EAAE,CAAC;oBACf,IAAI,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,WAAW,KAAK,YAAY,CAAC,IAAI,IAAI,SAAS,KAAK,YAAY,CAAC,SAAS;wBACpH,YAAY,GAAG,SAAS,CAAC;gBACjC,CAAC;gBAED,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChB,YAAY,GAAG;wBACX,EAAE,EAAE,SAAS;wBACb,OAAO,EAAE,wBAAwB;wBACjC,IAAI,EAAE,WAAW;wBACjB,OAAO;wBACP,SAAS;wBACT,MAAM,EAAE,IAAI;qBACf,CAAC;oBACF,YAAY,CAAC,MAAM,GAAG,IAAA,uCAAwB,EAAC,YAAY,EAAE,aAAa,CAAC,CAAC;oBAC5E,UAAU,CAAC,SAAS,GAAG,YAAY,CAAC;gBACxC,CAAC;gBAED,OAAO;oBACH,OAAO;oBACP,UAAU;iBACb,CAAC;YACN,CAAC,CAAA;YAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAElF,MAAM,aAAa,GAAG,KAAK,EAAE,EAAU,EAAE,SAAiB,EAAE,EAAE;gBAC1D,MAAM,UAAU,GAAG,SAAS;oBACxB,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;oBACnC,CAAC,CAAC,IAAI,CAAC;gBACX,IAAI,CAAC,UAAU;oBACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;gBACtD,MAAM,GAAG,GAAG,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;oBACP,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;oBACrD,OAAO;gBACX,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC,CAAA;YAED,sGAAsG;YACtG,8DAA8D;YAC9D,0DAA0D;YAC1D,yDAAyD;YACzD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAC;YACzD,SAAS,iBAAiB,CAAC,OAAe,EAAE,IAAY;gBACpD,OAAO,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;YAChC,CAAC;YAED,MAAM,gBAAgB,GAAG,aAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC/C,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC;gBAChD,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC1C,MAAM,cAAc,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;gBAC9E,MAAM,WAAW,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvF,4FAA4F;gBAC5F,qEAAqE;gBACrE,WAAW,CAAC,oBAAoB,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;gBACvG,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/D,wBAAwB,EAAE,aAAa,EAAE,CAAC,WAAW,CAAC,CAAC;gBACvD,MAAM,gBAAgB,GAAqB,KAAK,EAAE,CAAC,EAAE,EAAE;oBACnD,MAAM,MAAM,GAAG,IAAA,uCAAwB,EAAC,CAAC,EAAE,aAAa,CAAC,CAAC;oBAC1D,IAAI,MAAM,KAAK,CAAC,CAAC,MAAM;wBACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;oBACxC,OAAO,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBACjD,CAAC,CAAA;gBACD,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,gBAAgB,CAAC;gBAC1D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBACpB,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACpC,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAA;YAEF,MAAM,aAAa,GAAG,wBAAwB;gBAC1C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,WAAW,CAAC;YAClB,MAAM,WAAW,GAAG,MAAM,IAAA,wBAAU,EAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;YAEtE,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAE,EAAE;gBAC/D,IAAI,gBAAgB,CAAC,OAAO,CAAC;oBACzB,OAAO,GAAG,WAAW,CAAC;gBAE1B,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC/D,IAAI,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAC1D,IAAI,kBAAkB;oBAClB,OAAO,kBAAkB,CAAC;gBAE9B,kBAAkB,GAAG,CAAC,KAAK,IAAI,EAAE;oBAC7B,MAAM,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;oBAE9D,IAAI,CAAC;wBACD,MAAM,IAAA,aAAI,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;wBAC9B,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAI,MAAM,CAAC,OAAO,EAAsB,CAAC;wBACzE,IAAI,aAAa,KAAK,wBAAwB,IAAI,aAAa,KAAK,WAAW;4BAC3E,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;wBAE3D,MAAM,WAAW,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;wBACvF,WAAW,CAAC,oBAAoB,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;wBACvG,OAAO,WAAW,CAAC;oBACvB,CAAC;oBACD,OAAO,CAAC,EAAE,CAAC;wBACP,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;wBACxC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,MAAM,CAAC,CAAC;oBACZ,CAAC;gBACL,CAAC,CAAC,EAAE,CAAC;gBAEL,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBACrD,OAAO,kBAAkB,CAAC;YAC9B,CAAC,CAAC;YAEF,KAAK,UAAU,oBAAoB,CAAC,IAAa,EAAE,CAAgB;gBAC/D,IAAI,oBAAoB,GAA8B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACpF,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBACxB,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;oBACzD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,oBAAoB,CAAC;gBACzD,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC;gBAC5C,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgD,CAAC;YAC5E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;YAErD,SAAS,cAAc,CAAC,GAAW;gBAC/B,IAAI,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,WAAW;oBACX,OAAO,WAAW,CAAC;gBACvB,IAAI,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,oDAAoD;gBACpD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,WAAW,GAAG,IAAI,mBAAQ,EAA8B,CAAC;oBACzD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;oBAElC,IAAI,cAAc,EAAE,CAAC;wBACjB,6CAA6C;wBAC7C,cAAc,CAAC,WAAW,CAAC;4BACvB,QAAQ,EAAE,GAAG;yBAChB,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBAED,MAAM,aAAa,GAAG,UAAU,GAAG,EAAE,CAAC;gBACtC,SAAS,WAAW;oBAChB,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACvC,CAAC;gBACD,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC1C,MAAM,UAAU,GAAG,qCAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;oBACtF,UAAU,CAAC,oBAAoB,GAAG,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;oBAElG,MAAM,gBAAgB,GAAqB,KAAK,EAAE,CAAC,EAAE,EAAE;wBACnD,MAAM,MAAM,GAAG,IAAA,uCAAwB,EAAC,CAAC,EAAE,aAAa,CAAC,CAAC;wBAC1D,IAAI,MAAM,KAAK,CAAC,CAAC,MAAM;4BACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;wBACxC,OAAO,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oBACjD,CAAC,CAAA;oBACD,UAAU,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,gBAAgB,CAAC;oBAEzD,SAAS,OAAO,CAAC,OAAe;wBAC5B,WAAW,EAAE,CAAC;wBACd,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACxB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACrB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC7B,CAAC;oBACD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBACtD,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACzD,OAAO,UAAU,CAAC;gBACtB,CAAC,CAAC,CAAC;gBACH,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;gBACvC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;gBAC7C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBAE/B,OAAO,WAAW,CAAC;YACvB,CAAC;YAED,MAAM,cAAc,GAA+B,wBAAc,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAc,CAAC,UAAU,CAAC,cAAc,CAAC;YACtI,IAAI,CAAC,wBAAc,CAAC,YAAY,EAAE,CAAC;gBAC/B,2GAA2G;gBAC3G,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAA+D,EAAE,EAAE;oBACnG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;oBACnC,IAAI,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;wBACf,WAAW,GAAG,IAAI,mBAAQ,EAA8B,CAAC;wBACzD,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBAC3C,CAAC;oBACD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC1B,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACP,CAAC;YAED,KAAK,UAAU,gBAAgB,CAAC,aAA4B,EAAE,GAAW;gBACrE,wDAAwD;gBACxD,0EAA0E;gBAC1E,uDAAuD;gBACvD,IAAI,wBAAc,CAAC,YAAY;oBAC3B,uBAAuB,CAAC,GAAG,EAAE,wBAAc,CAAC,QAAQ,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;gBAC/E,IAAI,QAAQ;oBACR,OAAO,QAAQ,CAAC;gBACpB,OAAO,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsC,CAAC;YAC9D,SAAS,uBAAuB,CAAC,QAAgB,EAAE,eAAuB;gBACtE,IAAI,wBAAc,CAAC,YAAY,IAAI,QAAQ,KAAK,wBAAc,CAAC,QAAQ,EAAE,CAAC;oBACtE,MAAM,GAAG,GAAG,mDAAmD,CAAC;oBAChE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBACD,2EAA2E;gBAC3E,8BAA8B;gBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/D,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;oBAC5B,OAAO;gBAEX,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,IAAI,wBAAc,CAAC,cAAc,EAAE,CAAC;gBAEpD,MAAM,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,OAAO,CAAC,KAAK;oBACnB,QAAQ,EAAE,eAAe;iBAC5B,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAEpB,IAAI,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,WAAW,CAAC;wBAChB,IAAI,EAAE,OAAO,CAAC,KAAK;wBACnB,QAAQ;qBACX,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxB,CAAC;qBACI,IAAI,eAAe,KAAK,wBAAc,CAAC,QAAQ,EAAE,CAAC;oBACnD,cAAc,CAAC,QAAQ,CAAC,CAAC;oBACzB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC3C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;qBACI,CAAC;oBACF,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC;YAED,SAAS,wBAAwB,CAAC,UAAsC,EAAE,QAAgB;gBACtF,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAElC,gJAAgJ;gBAChJ,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAA+D,EAAE,EAAE;oBAC/F,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;oBAEpD,IAAI,IAAI,EAAE,CAAC;wBACP,wBAAwB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;oBACpD,CAAC;yBACI,CAAC;wBACF,uBAAuB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;oBACvD,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;YAED,QAAQ,CAAC,gBAAgB,GAAG,KAAK,EAAE,KAAU,EAAE,EAAE;gBAC7C,MAAM,aAAa,GAAkB,KAAK,EAAE,SAAS,CAAC;gBACtD,IAAI,aAAa,EAAE,EAAE,KAAK,SAAS;oBAC/B,OAAO,KAAK,CAAC;gBACjB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;gBAC5D,+EAA+E;gBAC/E,6EAA6E;gBAC7E,IAAI,IAAI,KAAK,WAAW;oBACpB,OAAO,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAE7C,sFAAsF;gBACtF,IAAI,OAAO,KAAK,wBAAwB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG;wBACnB,OAAO,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,CAAC;gBAED,IAAI,CAAC;oBACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC5D,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC;oBAC7C,8CAA8C;oBAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;oBACjE,IAAI,QAAQ;wBACR,OAAO,QAAQ,CAAC;oBACpB,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBACxE,IAAI,CAAC,QAAQ;wBACT,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC7C,OAAO,QAAQ,CAAC;gBACpB,CAAC;gBACD,OAAO,CAAC,EAAE,CAAC;oBACP,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;oBAC/C,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC,CAAA;YACD,IAAI,wBAAc,CAAC,YAAY,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;gBAC3C,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;oBAC3B,SAAS,EAAE,IAAI;iBAClB,CAAC,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAED,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;gBAClC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;oBACxB,OAAO;gBACX,OAAO,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC,CAAC;YAEF,MAAM,aAAa,GAAG,gBAAgB,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAA,2CAAiB,EAAC,QAAQ,CAAC,CAAC;YACxC,aAAa,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;gBAC9B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACpB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;gBACD,IAAI,CAAC;oBACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC;wBACvC,IAAI,CAAC;4BACD,MAAM,CAAC,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;4BACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;4BAC1B,OAAO,MAAM,CAAC;wBAClB,CAAC;wBACD,OAAO,CAAC,EAAE,CAAC;wBACX,CAAC;oBACL,CAAC;oBACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC7B,OAAO,MAAM,CAAC;gBAClB,CAAC;gBACD,OAAO,CAAC,EAAE,CAAC;oBACP,MAAM,CAAC,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;oBAC/C,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;YACL,CAAC,CAAC;YACF,0BAA0B;YAC1B,MAAM,OAAO,GAAQ,EAAE,CAAC;YACxB,4BAA4B;YAC5B,0BAA0B;YAC1B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YAEzB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,UAAU,MAAM,CAAC,CAAA;YAC/C,MAAM,GAAG,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC;YAE9B,qEAAqE;YACrE,8DAA8D;YAC9D,2BAA2B,GAAG,CAAC,QAAQ,EAAE,EAAE;gBACvC,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;gBAChD,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;gBAEjD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE;oBAChC,gBAAgB,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;oBACjD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACtE,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE;oBACjC,gBAAgB,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;oBAClD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAE,CAAW,CAAC,KAAK,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAClF,CAAC,CAAC,CAAC;gBAEH,IAAA,4BAAuB,EAAC;oBACpB,WAAW,EAAE,MAAM;oBACnB,iBAAiB,CAAC,MAAM;wBACpB,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;4BAC/D,IAAI,CAAC,GAAG;gCACJ,OAAO,IAAI,CAAC;4BAChB,OAAO;gCACH,GAAG,EAAE,gBAAgB;gCACrB,GAAG;6BACN,CAAA;wBACL,CAAC;wBACD,OAAO,IAAI,CAAC;oBAChB,CAAC;iBACJ,CAAC,CAAC;YACP,CAAC,CAAC;YAEF,MAAM,IAAA,qDAA2B,EAAC,gBAAgB,EAAE,EAAE,WAAW,CAAC,CAAC;YAEnE,8CAA8C;YAC9C,qCAAqC;YACrC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAqC,CAAC;YACpE,gGAAgG;YAChG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAA,uCAAiB,EAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;YAEjG,IAAI,IAAqC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;gBACtC,IAAI,KAAK,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,CAAC;YAEF,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE/B,QAAQ,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;gBACnC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC,CAAA;YAED,MAAM,eAAe,GAAiB,QAAQ,CAAC,eAAe,CAAC;YAE/D,QAAQ,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE;gBACxB,IAAI,aAA4B,CAAC;gBACjC,IAAI,YAAgE,CAAC;gBACrE,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;oBACnB,MAAM,QAAQ,GAAG,IAAA,qCAAsB,GAAE,CAAC;oBAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC9C,IAAI,CAAC,OAAO;wBACR,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC1D,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE;wBAC5C,WAAW;wBACX,GAAG,EAAE,OAAO,CAAC,GAAG;wBAChB,WAAW,EAAE,SAAS;wBACtB,OAAO;wBACP,YAAY;wBACZ,OAAO;qBACV,EAAE,SAAS,CAAC,CAAC;oBAEd,IAAI,aAAa,YAAY,yCAAkB,EAAE,CAAC;wBAC9C,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC;wBAC1C,MAAM,OAAO,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACxF,IAAA,kCAAiB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBAC7C,CAAC;gBACL,CAAC;qBACI,CAAC;oBACF,4HAA4H;oBAC5H,MAAM,iBAAiB,GAAG,IAAI,wBAAc,CAAC,cAAc,EAAE,CAAC;oBAE9D,MAAM,GAAG,GAAG,IAAI,qCAAgB,CAAC,YAAY,EAAE,QAAQ,EAAE;wBACrD,WAAW;wBACX,GAAG,EAAE,OAAO,CAAC,GAAG;wBAChB,WAAW,EAAE,SAAS;wBACtB,OAAO;wBACP,YAAY;wBACZ,OAAO;qBACV,EAAE;wBACC,IAAI,EAAE,OAAO,EAAE,IAAI;qBACtB,EAAE;wBACC,kCAAkC;wBAClC,cAAc,EAAE,iBAAiB,CAAC,KAAK;qBAC1C,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9B,aAAa,GAAG,GAAG,CAAC;oBACpB,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;oBAE1B,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;oBAChC,IAAI,cAAc,EAAE,CAAC;wBACjB,kCAAkC;wBAClC,cAAc,CAAC,WAAW,CAAC;4BACvB,IAAI,EAAE,iBAAiB,CAAC,KAAK;4BAC7B,QAAQ;yBACX,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAClC,CAAC;yBACI,CAAC;wBACF,wBAAwB,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAChE,CAAC;gBACL,CAAC;gBAED,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;oBACvB,MAAM,UAAU,GAAG,IAAI,aAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;oBACvJ,UAAU,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,KAAkB,EAAE,EAAE;wBACnD,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;oBACzD,CAAC,CAAA;oBACD,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAEvC,MAAM,aAAc,SAAQ,2BAAc;wBACtC,CAAC,aAAO,CAAC,6BAA6B,CAAC,GAAI,GAAW,CAAC,aAAO,CAAC,6BAA6B,CAAC,CAAC;wBAE9F,UAAU,CAAC,QAAgB,EAAE,OAAgC;4BACzD,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;4BACpD,eAAe,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;4BACnD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gCACpB,IAAI,CAAC,KAAK,MAAM;oCACZ,SAAS;gCACb,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;4BACzC,CAAC;4BACD,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBAC/C,CAAC;qBACJ;oBACD,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;oBAEvC,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAiB,EAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;oBAC/H,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAClB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;wBAC1B,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACjC,OAAO,CAAC,eAAe,EAAE,CAAC;wBAC1B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACrB,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBACzC,CAAC,CAAC,CAAC;oBACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE;wBAC1B,UAAU,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;wBACrC,OAAO,CAAC,eAAe,EAAE,CAAC;wBAC1B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACrB,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBACzC,CAAC,CAAC,CAAC;oBAEH,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC9D,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC5D,CAAC;oBAED,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;oBAClD,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;oBACxB,WAAW,CAAC,IAAI,GAAG,OAAO,EAAE,QAAQ,CAAC;oBACrC,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;gBAC3D,CAAC,CAAC,EAAE,CAAC;gBAEL,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;gBAEzC,MAAM,MAAM,GAAe;oBACvB,EAAE,CAAC,KAAa,EAAE,QAAkC;wBAChD,OAAO,aAAa,CAAC,EAAE,CAAC,KAAY,EAAE,QAAQ,CAAC,CAAC;oBACpD,CAAC;oBACD,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE;oBACrC,cAAc,CAAC,KAAK,EAAE,QAAQ;wBAC1B,OAAO,aAAa,CAAC,cAAc,CAAC,KAAY,EAAE,QAAQ,CAAC,CAAC;oBAChE,CAAC;oBACD,YAAY;iBACf,CAAC;gBACF,OAAO;oBACH,MAAM;oBACN,MAAM;iBACT,CAAC;YACN,CAAC,CAAA;YAED,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC;gBAC3E,IAAA,yBAAS,EAAC,IAAI,EAAE,MAAM,EAAE,wBAAwB,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAE7F,IAAI,UAAU,EAAE,IAAI,EAAE,CAAC;oBACnB,uCAAuC;oBACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;oBAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;oBAC5B,MAAM,CAAC,aAAO,CAAC,mCAAmC,CAAC,GAAG,IAAI,CAAC;oBAC3D,OAAO,MAAM,CAAC;gBAClB,CAAC;gBAED,aAAa,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;gBACpC,IAAI,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;gBACrC,0DAA0D;gBAC1D,uBAAuB;gBACvB,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAC9C,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;gBAC1C,IAAI,OAAO,cAAc,KAAK,UAAU;oBACpC,cAAc,GAAG,MAAM,cAAc,EAAE,CAAC;gBAE5C,QAAQ,GAAG,IAAA,8BAAgB,EAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;gBAC9D,2BAA2B,CAAC,QAAQ,CAAC,CAAC;gBAEtC,OAAO,cAAc,CAAC;YAC1B,CAAC;YACD,OAAO,CAAC,EAAE,CAAC;gBACP,aAAa,EAAE,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;gBAClD,MAAM,CAAC,CAAC;YACZ,CAAC;QACL,CAAC;KACJ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACf,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QACvC,aAAa,GAAG,QAAQ,CAAC,aAAkC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
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,
|
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,
|
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,
|
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);
|