@scrypted/server 0.115.26 → 0.115.28

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.
@@ -18,7 +18,7 @@ const createWindow = () => {
18
18
  win = new electron_1.BrowserWindow({
19
19
  width: 800,
20
20
  height: 600,
21
- // show: false,
21
+ show: false,
22
22
  webPreferences: {
23
23
  backgroundThrottling: false,
24
24
  preload: path_1.default.join(__dirname, 'electron-plugin-preload.js'),
@@ -1 +1 @@
1
- {"version":3,"file":"electron-plugin-remote.js","sourceRoot":"","sources":["../../../../src/plugin/runtime/electron/electron-plugin-remote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"electron-plugin-remote.js","sourceRoot":"","sources":["../../../../src/plugin/runtime/electron/electron-plugin-remote.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
1
  import { RpcMessage, RpcPeer } from "../../rpc";
2
2
  import { ChildProcessWorker } from "./child-process-worker";
3
3
  import { RuntimeWorkerOptions } from "./runtime-worker";
4
+ import type { ScryptedRuntime } from '../../runtime';
4
5
  export declare class ElectronForkWorker extends ChildProcessWorker {
5
- constructor(mainFilename: string, pluginId: string, options: RuntimeWorkerOptions);
6
+ static allocatedDisplays: Set<number>;
7
+ allocatedDisplay: number;
8
+ constructor(mainFilename: string, pluginId: string, options: RuntimeWorkerOptions, runtime: ScryptedRuntime);
9
+ kill(): void;
6
10
  setupRpcPeer(peer: RpcPeer): void;
7
11
  send(message: RpcMessage, reject?: (e: Error) => void, serializationContext?: any): void;
8
12
  get pid(): number;
@@ -10,7 +10,9 @@ const net_1 = __importDefault(require("net"));
10
10
  const socket_serializer_1 = require("../socket-serializer");
11
11
  const child_process_worker_1 = require("./child-process-worker");
12
12
  class ElectronForkWorker extends child_process_worker_1.ChildProcessWorker {
13
- constructor(mainFilename, pluginId, options) {
13
+ static allocatedDisplays = new Set();
14
+ allocatedDisplay;
15
+ constructor(mainFilename, pluginId, options, runtime) {
14
16
  super(pluginId, options);
15
17
  const { env, pluginDebug } = options;
16
18
  const execArgv = process.execArgv.slice();
@@ -21,8 +23,19 @@ class ElectronForkWorker extends child_process_worker_1.ChildProcessWorker {
21
23
  const electronBin = require('electron');
22
24
  const args = [electronBin];
23
25
  if (process.platform === 'linux') {
26
+ // crappy but should work.
27
+ for (let i = 50; i < 100; i++) {
28
+ if (!ElectronForkWorker.allocatedDisplays.has(i)) {
29
+ this.allocatedDisplay = i;
30
+ break;
31
+ }
32
+ }
33
+ if (!this.allocatedDisplay)
34
+ throw new Error('unable to allocate DISPLAY for xvfb-run');
35
+ ElectronForkWorker.allocatedDisplays.add(this.allocatedDisplay);
24
36
  // requires xvfb-run as electron does not support the chrome --headless flag.
25
- args.unshift('xvfb-run', '-n', '0');
37
+ // dummy up a DISPLAY env variable. this value numerical because of the way it is.
38
+ args.unshift('xvfb-run', '-n', this.allocatedDisplay.toString());
26
39
  // https://github.com/gpuweb/gpuweb/wiki/Implementation-Status#chromium-chrome-edge-etc
27
40
  args.push('--no-sandbox', '--enable-unsafe-webgpu', '--ignore-gpu-blocklist', '--enable-features=Vulkan', '--disable-vulkan-surface');
28
41
  }
@@ -36,15 +49,22 @@ class ElectronForkWorker extends child_process_worker_1.ChildProcessWorker {
36
49
  this.worker = child_process_1.default.spawn(bin, args, {
37
50
  stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
38
51
  env: Object.assign({}, process.env, env),
39
- serialization: 'json',
52
+ serialization: 'advanced',
40
53
  // execArgv,
41
54
  });
55
+ this.worker.on('exit', () => {
56
+ });
42
57
  this.worker.send({
43
58
  pluginId,
44
59
  options,
45
60
  });
46
61
  this.setupWorker();
47
62
  }
63
+ kill() {
64
+ super.kill();
65
+ if (this.worker)
66
+ ElectronForkWorker.allocatedDisplays.delete(this.allocatedDisplay);
67
+ }
48
68
  setupRpcPeer(peer) {
49
69
  this.worker.on('message', (message, sendHandle) => {
50
70
  if (message.type && sendHandle) {
@@ -1 +1 @@
1
- {"version":3,"file":"electron-worker.js","sourceRoot":"","sources":["../../../src/plugin/runtime/electron-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"electron-worker.js","sourceRoot":"","sources":["../../../src/plugin/runtime/electron-worker.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ function getBuiltinRuntimeHosts() {
10
10
  pluginHosts.set('custom', (_, pluginId, options, runtime) => new custom_worker_1.CustomRuntimeWorker(pluginId, options, runtime));
11
11
  pluginHosts.set('python', (_, pluginId, options) => new python_worker_1.PythonRuntimeWorker(pluginId, options));
12
12
  pluginHosts.set('node', (mainFilename, pluginId, options) => new node_fork_worker_1.NodeForkWorker(mainFilename, pluginId, options));
13
- pluginHosts.set('electron', (mainFilename, pluginId, options) => new electron_worker_1.ElectronForkWorker(mainFilename, pluginId, options));
13
+ pluginHosts.set('electron', (mainFilename, pluginId, options, runtime) => new electron_worker_1.ElectronForkWorker(mainFilename, pluginId, options, runtime));
14
14
  return pluginHosts;
15
15
  }
16
16
  //# sourceMappingURL=runtime-host.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-host.js","sourceRoot":"","sources":["../../../src/plugin/runtime/runtime-host.ts"],"names":[],"mappings":";;AASA,wDASC;AAjBD,mDAAsD;AACtD,uDAAuD;AACvD,yDAAoD;AACpD,mDAAsD;AAKtD,SAAgB,sBAAsB;IAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEnD,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,mCAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClH,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,mCAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAChG,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,iCAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAClH,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,oCAAkB,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1H,OAAO,WAAW,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"runtime-host.js","sourceRoot":"","sources":["../../../src/plugin/runtime/runtime-host.ts"],"names":[],"mappings":";;AASA,wDASC;AAjBD,mDAAsD;AACtD,uDAAuD;AACvD,yDAAoD;AACpD,mDAAsD;AAKtD,SAAgB,sBAAsB;IAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEnD,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,mCAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClH,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,mCAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAChG,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,iCAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAClH,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,oCAAkB,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5I,OAAO,WAAW,CAAC;AACvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrypted/server",
3
- "version": "0.115.26",
3
+ "version": "0.115.28",
4
4
  "description": "",
5
5
  "dependencies": {
6
6
  "@mapbox/node-pre-gyp": "^1.0.11",
@@ -17,7 +17,7 @@ const createWindow = () => {
17
17
  win = new BrowserWindow({
18
18
  width: 800,
19
19
  height: 600,
20
- // show: false,
20
+ show: false,
21
21
  webPreferences: {
22
22
  backgroundThrottling: false,
23
23
  preload: path.join(__dirname, 'electron-plugin-preload.js'),
@@ -5,15 +5,17 @@ import { RpcMessage, RpcPeer } from "../../rpc";
5
5
  import { SidebandSocketSerializer } from "../socket-serializer";
6
6
  import { ChildProcessWorker } from "./child-process-worker";
7
7
  import { RuntimeWorkerOptions } from "./runtime-worker";
8
+ import type { ScryptedRuntime } from '../../runtime';
8
9
 
9
10
  export class ElectronForkWorker extends ChildProcessWorker {
11
+ static allocatedDisplays = new Set<number>();
12
+ allocatedDisplay: number;
10
13
 
11
- constructor(mainFilename: string, pluginId: string, options: RuntimeWorkerOptions) {
14
+ constructor(mainFilename: string, pluginId: string, options: RuntimeWorkerOptions, runtime: ScryptedRuntime) {
12
15
  super(pluginId, options);
13
16
 
14
17
  const { env, pluginDebug } = options;
15
18
 
16
-
17
19
  const execArgv: string[] = process.execArgv.slice();
18
20
  if (pluginDebug) {
19
21
  // execArgv.push(`--inspect=0.0.0.0:${pluginDebug.inspectPort}`);
@@ -23,8 +25,22 @@ export class ElectronForkWorker extends ChildProcessWorker {
23
25
  const electronBin: string = require('electron');
24
26
  const args = [electronBin];
25
27
  if (process.platform === 'linux') {
28
+ // crappy but should work.
29
+ for (let i = 50; i < 100; i++) {
30
+ if (!ElectronForkWorker.allocatedDisplays.has(i)) {
31
+ this.allocatedDisplay = i;
32
+ break;
33
+ }
34
+ }
35
+
36
+ if (!this.allocatedDisplay)
37
+ throw new Error('unable to allocate DISPLAY for xvfb-run');
38
+
39
+ ElectronForkWorker.allocatedDisplays.add(this.allocatedDisplay);
40
+
26
41
  // requires xvfb-run as electron does not support the chrome --headless flag.
27
- args.unshift('xvfb-run', '-n', '0');
42
+ // dummy up a DISPLAY env variable. this value numerical because of the way it is.
43
+ args.unshift('xvfb-run', '-n', this.allocatedDisplay.toString());
28
44
  // https://github.com/gpuweb/gpuweb/wiki/Implementation-Status#chromium-chrome-edge-etc
29
45
  args.push('--no-sandbox', '--enable-unsafe-webgpu', '--ignore-gpu-blocklist', '--enable-features=Vulkan', '--disable-vulkan-surface');
30
46
  }
@@ -43,10 +59,13 @@ export class ElectronForkWorker extends ChildProcessWorker {
43
59
  this.worker = child_process.spawn(bin, args, {
44
60
  stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
45
61
  env: Object.assign({}, process.env, env),
46
- serialization: 'json',
62
+ serialization: 'advanced',
47
63
  // execArgv,
48
64
  });
49
65
 
66
+ this.worker.on('exit', () => {
67
+ });
68
+
50
69
  this.worker.send({
51
70
  pluginId,
52
71
  options,
@@ -55,6 +74,12 @@ export class ElectronForkWorker extends ChildProcessWorker {
55
74
  this.setupWorker();
56
75
  }
57
76
 
77
+ kill(): void {
78
+ super.kill();
79
+ if (this.worker)
80
+ ElectronForkWorker.allocatedDisplays.delete(this.allocatedDisplay);
81
+ }
82
+
58
83
  setupRpcPeer(peer: RpcPeer): void {
59
84
  this.worker.on('message', (message, sendHandle) => {
60
85
  if ((message as any).type && sendHandle) {
@@ -13,7 +13,7 @@ export function getBuiltinRuntimeHosts() {
13
13
  pluginHosts.set('custom', (_, pluginId, options, runtime) => new CustomRuntimeWorker(pluginId, options, runtime));
14
14
  pluginHosts.set('python', (_, pluginId, options) => new PythonRuntimeWorker(pluginId, options));
15
15
  pluginHosts.set('node', (mainFilename, pluginId, options) => new NodeForkWorker(mainFilename, pluginId, options));
16
- pluginHosts.set('electron', (mainFilename, pluginId, options) => new ElectronForkWorker(mainFilename, pluginId, options));
16
+ pluginHosts.set('electron', (mainFilename, pluginId, options, runtime) => new ElectronForkWorker(mainFilename, pluginId, options, runtime));
17
17
 
18
18
  return pluginHosts;
19
19
  }