@desklink/host 0.3.0 → 0.4.0
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/NOTICE +3 -0
- package/README.md +92 -23
- package/bin/desklink-host.mjs +14 -5
- package/dist/bridge.d.ts +3 -4
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +18 -7
- package/dist/bridge.js.map +1 -1
- package/dist/engineProcess.d.ts +6 -1
- package/dist/engineProcess.d.ts.map +1 -1
- package/dist/engineProcess.js +34 -5
- package/dist/engineProcess.js.map +1 -1
- package/dist/protocol.d.ts +35 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/resolveEngine.d.ts +6 -0
- package/dist/resolveEngine.d.ts.map +1 -1
- package/dist/resolveEngine.js +45 -6
- package/dist/resolveEngine.js.map +1 -1
- package/docs/BOUNDARY.md +8 -8
- package/docs/PROTOCOL.md +185 -45
- package/engine/Cargo.lock +2 -2
- package/engine/Cargo.toml +7 -12
- package/engine/build.rs +62 -5
- package/engine/native/agent_indicator.h +57 -0
- package/engine/native/agent_overlay_mac.m +51 -4
- package/engine/native/agent_overlay_wayland.c +189 -35
- package/engine/native/agent_overlay_x11.c +186 -55
- package/engine/src/capture.rs +96 -5
- package/engine/src/capture_win.rs +23 -0
- package/engine/src/clipboard.rs +174 -0
- package/engine/src/clipboard_win.rs +8 -0
- package/engine/src/cursor.rs +118 -0
- package/engine/src/indicator.rs +271 -5
- package/engine/src/input_win.rs +91 -0
- package/engine/src/keymap_win.rs +39 -0
- package/engine/src/mac.rs +28 -6
- package/engine/src/main.rs +167 -25
- package/engine/src/peer.rs +10 -4
- package/engine/src/portal.rs +42 -4
- package/engine/src/portal_win.rs +37 -0
- package/engine/src/protocol.rs +56 -10
- package/engine/src/session.rs +749 -203
- package/engine/src/win.rs +110 -0
- package/engine/src/x11.rs +44 -29
- package/engine/src/x11_mac.rs +4 -0
- package/examples/reference-client.html +3 -5
- package/package.json +4 -4
package/NOTICE
CHANGED
|
@@ -9,6 +9,9 @@ licences.
|
|
|
9
9
|
VP9 encoding. A source build links the host system's libvpx; the prebuilt
|
|
10
10
|
engine (@desklink/host-linux-x64-gnu) links libvpx v1.16.0 statically and
|
|
11
11
|
carries its licence and patent grant in THIRD_PARTY_LICENSES.txt.
|
|
12
|
+
Windows source builds use libvpx 1.16.0 statically with MSVC /MT. The
|
|
13
|
+
Windows build script retains its BSD licence, WebM patent grant and the
|
|
14
|
+
x86inc assembly macros' ISC notice in THIRD_PARTY_LICENSES.txt.
|
|
12
15
|
https://chromium.googlesource.com/webm/libvpx/+/refs/heads/main/LICENSE
|
|
13
16
|
|
|
14
17
|
inputtino MIT
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<a href="https://www.npmjs.com/package/@desklink/host"><img alt="npm" src="https://img.shields.io/npm/v/@desklink/host?style=flat&label=npm" /></a>
|
|
5
5
|
<a href="https://github.com/umeranjum17/desklink/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/umeranjum17/desklink/ci.yml?style=flat&branch=main" /></a>
|
|
6
6
|
<a href="LICENSE"><img alt="Apache 2.0" src="https://img.shields.io/badge/license-Apache--2.0-666?style=flat" /></a>
|
|
7
|
-
<img alt="Linux and macOS" src="https://img.shields.io/badge/Linux%20%7C%20macOS-111?style=flat" />
|
|
7
|
+
<img alt="Linux and macOS (preview)" src="https://img.shields.io/badge/Linux%20%7C%20macOS%20%28preview%29-111?style=flat" />
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
@@ -19,8 +19,7 @@ particular application.
|
|
|
19
19
|
|
|
20
20
|
## What it does
|
|
21
21
|
|
|
22
|
-
The engine supports Linux and macOS desktop sessions
|
|
23
|
-
a source build with a static VP9 library.
|
|
22
|
+
The engine supports Linux desktop sessions, and macOS (preview) desktop sessions.
|
|
24
23
|
|
|
25
24
|
- **Capture** through the XDG Desktop Portal (`ScreenCast`) and PipeWire, with
|
|
26
25
|
compositor consent, from an explicitly selected X display's root window, or
|
|
@@ -60,11 +59,13 @@ a source build with a static VP9 library.
|
|
|
60
59
|
- **Clipboard** explicitly, in both directions, only when asked. It is never
|
|
61
60
|
polled and never used as a hidden way to type. On Wayland, writes require
|
|
62
61
|
`wl-copy` from `wl-clipboard`; macOS uses the plain-text general pasteboard.
|
|
62
|
+
X11 uses the session's selected display; see the [clipboard protocol](docs/PROTOCOL.md#clipboard-over-the-local-protocol)
|
|
63
|
+
for supported targets, transfer limits and selection lifetime.
|
|
63
64
|
|
|
64
65
|
## What it deliberately does not do
|
|
65
66
|
|
|
66
|
-
- It does not decide *who* the user is. The consumer
|
|
67
|
-
|
|
67
|
+
- It does not decide *who* the user is. The consumer pairs; a paired consumer
|
|
68
|
+
gets all available view, input and clipboard access, without per-session grants.
|
|
68
69
|
- It does not open a public listener, run as root, install udev rules, join
|
|
69
70
|
groups or raise capabilities.
|
|
70
71
|
- It does not carry audio, arbitrate between two controllers, or remember a
|
|
@@ -74,7 +75,7 @@ a source build with a static VP9 library.
|
|
|
74
75
|
|
|
75
76
|
The npm badge tracks the registry version. npm installs the matching optional
|
|
76
77
|
engine package: `@desklink/host-linux-x64-gnu` or `@desklink/host-darwin-arm64`.
|
|
77
|
-
Supported platforms: Linux x64 with glibc 2.36 or newer and macOS arm64.
|
|
78
|
+
Supported platforms: Linux x64 with glibc 2.36 or newer and macOS arm64 (preview).
|
|
78
79
|
See the [changelog](../../CHANGELOG.md) for release changes.
|
|
79
80
|
|
|
80
81
|
```sh
|
|
@@ -89,24 +90,54 @@ platform package `@desklink/host-linux-x64-gnu`, which carries the prebuilt
|
|
|
89
90
|
engine, and `resolveEngine()` finds it there. No Rust toolchain, compiler or
|
|
90
91
|
install script is involved, so `--ignore-scripts` installs work. The engine
|
|
91
92
|
requires the system's `libpipewire-0.3.so.0`, `libxkbcommon.so.0`,
|
|
92
|
-
`libevdev.so.2`, `libstdc++.so.6`, `libXcursor.so.1`, `libX11.so.6`,
|
|
93
|
-
`libwayland-client.so.0`
|
|
93
|
+
`libevdev.so.2`, `libstdc++.so.6`, `libXcursor.so.1`, `libX11.so.6`,
|
|
94
|
+
`libXext.so.6`, `libwayland-client.so.0`, `libfontconfig.so.1`, and `libfreetype.so.6`
|
|
95
|
+
(normally supplied by a modern Linux desktop). If one is missing, the host reports `missing system library: <name>`
|
|
94
96
|
with code `missing-system-library` rather than failing silently; it does not
|
|
95
97
|
bundle these system libraries. libvpx and inputtino are linked into the engine.
|
|
98
|
+
Wayland point labels use Fontconfig (MIT) and FreeType (FTL) from the system;
|
|
99
|
+
this software is based in part on the work of the FreeType Team.
|
|
96
100
|
|
|
97
101
|
The one step no install does for you is [kernel input access](#kernel-input-access),
|
|
98
102
|
and only the portal backend needs it.
|
|
99
103
|
|
|
100
|
-
macOS arm64 also has a prebuilt engine. There is no prebuilt engine for other platforms. Another Linux (arm64, musl)
|
|
101
|
-
can [build it from source](#building-from-source). Windows
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
macOS arm64 (preview) also has a prebuilt engine. There is no prebuilt engine for other platforms. Another Linux (arm64, musl)
|
|
105
|
+
can [build it from source](#building-from-source). Windows has a source-built transport preview for
|
|
106
|
+
`x86_64-pc-windows-msvc`: static libvpx enables `serve` and consumer-fed H.264
|
|
107
|
+
encoded sources. Native capture, input, clipboard and the agent indicator are
|
|
108
|
+
unavailable. Native Windows desktop capture sessions are not supported yet. Node resolution
|
|
109
|
+
is an opt-in preview for Windows 11 22H2+ x64: set `DESKLINK_WINDOWS=1` and
|
|
110
|
+
point `DESKLINK_ENGINE` at a built `desklink-host.exe`. Windows platform packages
|
|
111
|
+
are not published yet. Without static libvpx, the executable's `capabilities`
|
|
112
|
+
command remains available, but CLI `capabilities` and `bridge` require `serve`.
|
|
113
|
+
The Windows bridge defaults to `--source display` and handles Ctrl+Break;
|
|
114
|
+
consumer-fed video requires `--source encoded`.
|
|
115
|
+
A startup exit `0xC0000135` is reported as `missing-system-library` (a required
|
|
116
|
+
DLL could not load); spawn failures are reported as `engine-spawn-failed` with
|
|
117
|
+
the underlying error. Elevated windows and the secure desktop remain outside
|
|
118
|
+
Windows control support.
|
|
119
|
+
|
|
120
|
+
On Windows with Visual Studio Build Tools and PowerShell 7, build libvpx with
|
|
121
|
+
`release/build-libvpx-win.ps1 -OutDir <new-build-directory>`, set
|
|
122
|
+
`DESKLINK_VPX_STATIC_DIR` to its `prefix` directory and
|
|
123
|
+
`RUSTFLAGS=-Ctarget-feature=+crt-static`, then run `cargo build --locked --target
|
|
124
|
+
x86_64-pc-windows-msvc --manifest-path engine/Cargo.toml`. The build retains
|
|
125
|
+
libvpx's licence and patent grant in `prefix/THIRD_PARTY_LICENSES.txt`.
|
|
126
|
+
Without that prefix the compile seam still builds and refuses `serve`.
|
|
127
|
+
Hosted Windows CI resolves the opt-in engine through the published Node API
|
|
128
|
+
and completes a `serve` hello/capabilities handshake with clean shutdown; it
|
|
129
|
+
also checks Chrome decode and input relay, and DLL
|
|
130
|
+
dependencies. Dedicated Windows rig qualification of
|
|
131
|
+
capture, input, mixed DPI, GPU encoding and elevation is pending; signing and
|
|
132
|
+
packaging are later lanes.
|
|
133
|
+
|
|
134
|
+
### macOS (preview)
|
|
104
135
|
|
|
105
136
|
The macOS engine shares protocol v3's WebRTC session path: selected-display
|
|
106
137
|
ScreenCaptureKit capture, VP9 encoding (H.264 through VideoToolbox for a receiver
|
|
107
138
|
that asks), Quartz pointer/keyboard events, and
|
|
108
139
|
plain-text NSPasteboard operations. `capabilities` is non-prompting; `session.open`
|
|
109
|
-
requests Screen Recording and, for
|
|
140
|
+
requests Screen Recording and, for input, Accessibility consent when needed.
|
|
110
141
|
For persistent grants, install the signed `DesklinkHost.app` at one fixed path.
|
|
111
142
|
Build the engine on the Mac, then run
|
|
112
143
|
`release/install-mac-app.sh <engine> <absolute path to DesklinkHost.app> [existing signing PEM]`
|
|
@@ -132,10 +163,12 @@ current input layout is diagnostic); free-form text uses Unicode key events.
|
|
|
132
163
|
|
|
133
164
|
The published engine is an **unsigned macOS arm64 CLI** in the optional
|
|
134
165
|
`@desklink/host-darwin-arm64` platform package; no Developer ID identity or
|
|
135
|
-
notarization is required. The macOS engine is enabled by default; `DESKLINK_MACOS=0` explicitly disables it.
|
|
136
|
-
To build and pack it, build on an Apple Silicon Mac with Rust 1.97+ and static
|
|
166
|
+
notarization is required. The macOS (preview) engine is enabled by default; `DESKLINK_MACOS=0` explicitly disables it.
|
|
167
|
+
To build and pack it, build on an Apple Silicon Mac with Rust 1.97.1+ and static
|
|
137
168
|
Homebrew libvpx, then follow
|
|
138
169
|
[Building and packing a release](#building-and-packing-a-release).
|
|
170
|
+
For a source build, `DESKLINK_VPX_STATIC_DIR` is the libvpx install prefix
|
|
171
|
+
(containing `include/` and `lib/libvpx.a`), not its `lib/` directory.
|
|
139
172
|
The app-bundled signed harness is for local TCC qualification, not npm
|
|
140
173
|
installation. See the [macOS protocol](docs/PROTOCOL.md#macos).
|
|
141
174
|
|
|
@@ -170,10 +203,13 @@ install:
|
|
|
170
203
|
| libvpx (`vpx.pc`) | `libvpx-dev` | `libvpx-devel` | `libvpx` |
|
|
171
204
|
| PipeWire 0.3.65+ (`libpipewire-0.3`) | `libpipewire-0.3-dev` | `pipewire-devel` | `pipewire` |
|
|
172
205
|
| xkbcommon | `libxkbcommon-dev` | `libxkbcommon-devel` | `libxkbcommon` |
|
|
206
|
+
| FreeType (FTL; dynamically linked) | `libfreetype6-dev` | `freetype-devel` | `freetype2` |
|
|
207
|
+
| Fontconfig (MIT; dynamically linked) | `libfontconfig1-dev` | `fontconfig-devel` | `fontconfig` |
|
|
173
208
|
| Wayland (`wayland-client`) | `libwayland-dev` | `wayland-devel` | `wayland` |
|
|
174
209
|
| libevdev | `libevdev-dev` | `libevdev-devel` | `libevdev` |
|
|
175
210
|
| libxcb (source/container builds only) | `libxcb1-dev` | `libxcb-devel` | `libxcb` |
|
|
176
211
|
| Xcursor | `libxcursor-dev` | `libXcursor-devel` | `libxcursor` |
|
|
212
|
+
| Xext | `libxext-dev` | `libXext-devel` | `libxext` |
|
|
177
213
|
|
|
178
214
|
These are build prerequisites, not additional runtime requirements for the
|
|
179
215
|
prebuilt package; in particular, libxcb is not a prebuilt runtime requirement.
|
|
@@ -201,8 +237,8 @@ npx -p @desklink/host desklink-host setup-input # anywhere else, e.g. under an
|
|
|
201
237
|
```
|
|
202
238
|
|
|
203
239
|
That prints the exact, narrowly scoped rule — and changes nothing. Without
|
|
204
|
-
`uinput` access a portal session
|
|
205
|
-
|
|
240
|
+
`uinput` access a portal session still opens and captures; input actions are
|
|
241
|
+
refused with `input-unavailable` until access is set up. An X
|
|
206
242
|
session instead uses XTest and does not need `/dev/uinput`.
|
|
207
243
|
|
|
208
244
|
## Licence and provenance
|
|
@@ -229,7 +265,7 @@ import { EngineClient, resolveEngine } from '@desklink/host';
|
|
|
229
265
|
|
|
230
266
|
const engine = resolveEngine(); // prebuilt, or a source build
|
|
231
267
|
const client = await EngineClient.start(engine.command, engine.args);
|
|
232
|
-
const session = await client.openSession({
|
|
268
|
+
const session = await client.openSession({});
|
|
233
269
|
|
|
234
270
|
// Everything the engine wants to tell the client arrives here, in order.
|
|
235
271
|
client.drainEvents().forEach((event) => myChannel.send(event));
|
|
@@ -239,9 +275,21 @@ await client.acceptAnswer(session.sessionId, session.generation, answerSdp);
|
|
|
239
275
|
await client.addCandidate(session.sessionId, session.generation, candidate, sdpMid, sdpMLineIndex);
|
|
240
276
|
```
|
|
241
277
|
|
|
278
|
+
For cursor-free recordings, open with `cursor: 'hidden'` and inspect
|
|
279
|
+
`session.cursor`: Linux portals require Metadata for hidden capture;
|
|
280
|
+
`positions` is true for accepted hidden sessions. Subscribe to
|
|
281
|
+
`session.cursor` events for source-coordinate `x`, `y`, `visible`, and monotonic
|
|
282
|
+
`timestamp_us` (the same clock as local frame metadata). Hidden-only portals
|
|
283
|
+
return `cursor_positions_unavailable`. X11 reports positions even on still
|
|
284
|
+
frames and already captures root pixels without a cursor. macOS, Windows, and consumer-encoded
|
|
285
|
+
sources return `cursor-unavailable` for hidden requests. Omitting the option
|
|
286
|
+
preserves existing behavior. See [the cursor protocol](docs/PROTOCOL.md#cursor-free-capture).
|
|
287
|
+
|
|
242
288
|
`myChannel` is the application's own authenticated connection, whatever that is.
|
|
243
289
|
There is no second identity system, no pairing ceremony and no account: the
|
|
244
|
-
engine trusts the consumer's
|
|
290
|
+
engine trusts the consumer's pairing. A paired consumer gets all available
|
|
291
|
+
view, input and clipboard access; missing input or clipboard backends fail per
|
|
292
|
+
action.
|
|
245
293
|
For the application's pairing, identity and signaling transport, see the
|
|
246
294
|
[BYOKit integration guidance](../../README.md#why-desklink-exists).
|
|
247
295
|
|
|
@@ -266,7 +314,13 @@ source with its flag or environment; clients cannot choose or override it.
|
|
|
266
314
|
|
|
267
315
|
Two things the bridge is honest about: `ws://` is plaintext, so keep it on a
|
|
268
316
|
private network or put it behind TLS; and the token in the URL *is* the
|
|
269
|
-
|
|
317
|
+
pairing credential for full view, input and clipboard, so treat it as a secret.
|
|
318
|
+
Stopping the bridge refuses new requests and stops the listener. It shuts down
|
|
319
|
+
the engine while client transports remain open so an active control channel can
|
|
320
|
+
receive `{"kind":"revoked","code":"closed"}` (with a reason), then closes the
|
|
321
|
+
sockets. Teardown remains bounded if the engine or a client does not respond;
|
|
322
|
+
notification failure does not preserve access. Restarting with a new token
|
|
323
|
+
also prevents the old pairing from opening future sessions.
|
|
270
324
|
|
|
271
325
|
## Packaging
|
|
272
326
|
|
|
@@ -292,8 +346,9 @@ the executable bit already set in the tarball.
|
|
|
292
346
|
|
|
293
347
|
`platformTag()` includes the libc (`-gnu` or `-musl`) because a glibc binary on a
|
|
294
348
|
musl system fails in ways that read as "broken install" rather than "unsupported
|
|
295
|
-
platform".
|
|
296
|
-
|
|
349
|
+
platform". Linux variants are published only after their own qualification; macOS arm64
|
|
350
|
+
is published as a default-enabled preview, not as qualified desktop support.
|
|
351
|
+
See [Install and run](#install-and-run) for current support. Another variant,
|
|
297
352
|
such as Linux arm64, needs a real machine to run a real journey first. macOS
|
|
298
353
|
and Windows are separate backends, not separate builds.
|
|
299
354
|
|
|
@@ -301,7 +356,7 @@ and Windows are separate backends, not separate builds.
|
|
|
301
356
|
|
|
302
357
|
The Linux engine build needs Docker and Node, with no local Rust toolchain or
|
|
303
358
|
system libraries. The macOS engine build needs the Apple Silicon prerequisites
|
|
304
|
-
in [macOS](#macos). Run the following from the repository root after installing
|
|
359
|
+
in [macOS (preview)](#macos-preview). Run the following from the repository root after installing
|
|
305
360
|
workspace dependencies:
|
|
306
361
|
|
|
307
362
|
```sh
|
|
@@ -332,6 +387,20 @@ node packages/desktop-host/release/pack.mjs --engine dist-desklink/engine-darwin
|
|
|
332
387
|
packages/desktop-host/release/check-install.sh
|
|
333
388
|
```
|
|
334
389
|
|
|
390
|
+
The Mac release build copies libvpx headers and its archive into an
|
|
391
|
+
archive-only prefix and rejects an executable that still links a libvpx dylib.
|
|
392
|
+
|
|
393
|
+
The `engine-macos-seam` CI job also runs this build, packing and clean-install
|
|
394
|
+
check on a hosted ARM64 runner. Its `darwin-arm64-release` artifact contains the
|
|
395
|
+
engine output, native tarball, install log and `darwin-build-manifest.txt`.
|
|
396
|
+
The manifest records the candidate source commit/tree and archive hash,
|
|
397
|
+
architecture, lockfile and builder hashes, actual Homebrew/static-libvpx inputs,
|
|
398
|
+
engine version/capabilities, linked libraries and output hashes. On pull requests
|
|
399
|
+
the job checks out the candidate head rather than the synthetic merge commit.
|
|
400
|
+
Verify the downloaded artifact's source, version, architecture and hashes before
|
|
401
|
+
including it in the release. This job does not qualify interactive capture,
|
|
402
|
+
input, clipboard or OS-consent journeys.
|
|
403
|
+
|
|
335
404
|
Each call keeps the other platform tarball and also packs the host,
|
|
336
405
|
React Native receiver and AXI CLI. All package versions must match before
|
|
337
406
|
publication. Packing publishes nothing.
|
package/bin/desklink-host.mjs
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import { spawn } from 'node:child_process';
|
|
11
11
|
import { randomBytes } from 'node:crypto';
|
|
12
12
|
import { Bridge } from '../dist/bridge.js';
|
|
13
|
-
import { EngineClient } from '../dist/engineProcess.js';
|
|
13
|
+
import { EngineClient, windowsEngineStartupError } from '../dist/engineProcess.js';
|
|
14
14
|
import { explainMissingEngine, resolveEngine } from '../dist/resolveEngine.js';
|
|
15
15
|
|
|
16
16
|
const [command, ...rest] = process.argv.slice(2);
|
|
@@ -52,7 +52,7 @@ Set DESKLINK_ENGINE to use an engine built somewhere else (MUXR_DESKLINK_ENGINE
|
|
|
52
52
|
const listen = flag('listen', '127.0.0.1:19400');
|
|
53
53
|
const token = flag('token', randomBytes(24).toString('base64url'));
|
|
54
54
|
if (typeof token !== 'string' || token.trim() === '') throw new Error('the bridge token must not be blank');
|
|
55
|
-
const sourceKind = flag('source', process.env.MUXR_DESKTOP_SOURCE ?? 'portal');
|
|
55
|
+
const sourceKind = flag('source', process.env.MUXR_DESKTOP_SOURCE ?? (process.platform === 'win32' ? 'display' : 'portal'));
|
|
56
56
|
const display = flag('display', process.env.MUXR_DESKTOP_X11_DISPLAY);
|
|
57
57
|
const displayId = flag('display-id', process.env.MUXR_DESKTOP_DISPLAY_ID);
|
|
58
58
|
if (!['portal', 'x11', 'display'].includes(sourceKind)) {
|
|
@@ -85,11 +85,13 @@ Set DESKLINK_ENGINE to use an engine built somewhere else (MUXR_DESKLINK_ENGINE
|
|
|
85
85
|
console.log('');
|
|
86
86
|
console.log(`open http://${host}:${bridge.port}/?token=${encodeURIComponent(token)}`);
|
|
87
87
|
console.log('');
|
|
88
|
-
console.log('
|
|
88
|
+
console.log('Anyone with this URL has full available view, input and clipboard access.');
|
|
89
|
+
console.log('Stop the bridge to revoke live and future access.');
|
|
89
90
|
console.log('ws:// is plaintext: keep it on a private network, or put it behind TLS.');
|
|
90
91
|
const stop = async () => { await bridge.close(); process.exit(0); };
|
|
91
92
|
process.on('SIGINT', () => void stop());
|
|
92
93
|
process.on('SIGTERM', () => void stop());
|
|
94
|
+
if (process.platform === 'win32') process.on('SIGBREAK', () => void stop());
|
|
93
95
|
return await new Promise(() => undefined);
|
|
94
96
|
}
|
|
95
97
|
if (command === 'capabilities') {
|
|
@@ -111,8 +113,15 @@ Set DESKLINK_ENGINE to use an engine built somewhere else (MUXR_DESKLINK_ENGINE
|
|
|
111
113
|
console.error(explainMissingEngine());
|
|
112
114
|
return 1;
|
|
113
115
|
}
|
|
114
|
-
const child = spawn(resolved.command, [command, ...rest], { stdio: 'inherit' });
|
|
115
|
-
return await new Promise((resolve
|
|
116
|
+
const child = spawn(resolved.command, [command, ...rest], { stdio: 'inherit', windowsHide: true });
|
|
117
|
+
return await new Promise((resolve, reject) => {
|
|
118
|
+
child.on('error', (error) => reject(windowsEngineStartupError(null, error) ?? error));
|
|
119
|
+
child.on('exit', (code) => {
|
|
120
|
+
const startupError = windowsEngineStartupError(code);
|
|
121
|
+
if (startupError !== null) reject(startupError);
|
|
122
|
+
else resolve(code ?? 0);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
116
125
|
}
|
|
117
126
|
|
|
118
127
|
main().then(
|
package/dist/bridge.d.ts
CHANGED
|
@@ -17,10 +17,9 @@ export interface BridgeOptions {
|
|
|
17
17
|
/** Address to listen on, e.g. `127.0.0.1:19400` or `0.0.0.0:19400`. */
|
|
18
18
|
listen: string;
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* anyone who finds it.
|
|
20
|
+
* Pairing credential: holding it grants all available view, input and
|
|
21
|
+
* clipboard access. Stop the bridge to revoke live and future access.
|
|
22
|
+
* Required, not optional; `ws://` is plaintext.
|
|
24
23
|
*/
|
|
25
24
|
token: string;
|
|
26
25
|
engineCommand: string;
|
package/dist/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC1B,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC1B,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,yDAAyD;AACzD,eAAO,MAAM,WAAW,aAAa,CAAC;AAYtC,qBAAa,MAAM;IAMX,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAThC,OAAO,CAAC,OAAO,CAAS;IACxB,gFAAgF;IAChF,OAAO,CAAC,OAAO,CAAyD;IAExE,OAAO;WAQM,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAsD3D,6EAA6E;IAC7E,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED,OAAO,CAAC,MAAM;IAuEd,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,wBAAwB;IAa1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAe/B"}
|
package/dist/bridge.js
CHANGED
|
@@ -47,12 +47,13 @@ export class Bridge {
|
|
|
47
47
|
static async start(options) {
|
|
48
48
|
if (options.token.trim() === '')
|
|
49
49
|
throw new Error('the bridge token must not be blank');
|
|
50
|
+
let bridge;
|
|
50
51
|
const server = createServer((request, response) => {
|
|
51
52
|
const url = new URL(request.url ?? '/', 'http://localhost');
|
|
52
53
|
// The page is served only to a caller that already has the token: an
|
|
53
54
|
// unauthenticated page that connects to a desktop would be a worse
|
|
54
55
|
// secret than the socket itself.
|
|
55
|
-
if (options.serveExample !== false && url.pathname === '/' && url.searchParams.get('token') === options.token) {
|
|
56
|
+
if (!bridge?.closing && options.serveExample !== false && url.pathname === '/' && url.searchParams.get('token') === options.token) {
|
|
56
57
|
response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'no-store' });
|
|
57
58
|
response.end(examplePage());
|
|
58
59
|
return;
|
|
@@ -69,7 +70,7 @@ export class Bridge {
|
|
|
69
70
|
// all, not merely be refused an answer.
|
|
70
71
|
verifyClient: ((info) => {
|
|
71
72
|
const url = new URL(info.req.url ?? '/', 'http://localhost');
|
|
72
|
-
return url.searchParams.get('token') === options.token;
|
|
73
|
+
return !bridge?.closing && url.searchParams.get('token') === options.token;
|
|
73
74
|
}),
|
|
74
75
|
});
|
|
75
76
|
const engine = await EngineClient.start(options.engineCommand, options.engineArgs, {
|
|
@@ -87,8 +88,8 @@ export class Bridge {
|
|
|
87
88
|
}
|
|
88
89
|
},
|
|
89
90
|
});
|
|
90
|
-
|
|
91
|
-
sockets.on('connection', (socket) => bridge
|
|
91
|
+
bridge = new Bridge(server, sockets, engine, options.source, options.engineOptions?.onEvent !== undefined);
|
|
92
|
+
sockets.on('connection', (socket) => bridge?.attach(socket));
|
|
92
93
|
const address = splitAddress(options.listen);
|
|
93
94
|
await new Promise((resolve, reject) => {
|
|
94
95
|
server.once('error', reject);
|
|
@@ -103,6 +104,8 @@ export class Bridge {
|
|
|
103
104
|
}
|
|
104
105
|
attach(socket) {
|
|
105
106
|
socket.on('message', (raw) => {
|
|
107
|
+
if (this.closing)
|
|
108
|
+
return;
|
|
106
109
|
let request;
|
|
107
110
|
try {
|
|
108
111
|
request = JSON.parse(String(raw));
|
|
@@ -142,7 +145,7 @@ export class Bridge {
|
|
|
142
145
|
const forwarded = this.defaultSource?.kind === 'x11'
|
|
143
146
|
&& (method === 'hello' || method === 'capabilities')
|
|
144
147
|
&& result !== null && result.clipboard !== null && typeof result.clipboard === 'object'
|
|
145
|
-
? { ...result, clipboard: { ...result.clipboard, read:
|
|
148
|
+
? { ...result, clipboard: { ...result.clipboard, read: true, write: true } }
|
|
146
149
|
: result;
|
|
147
150
|
if (method === 'session.open' && socket.readyState !== socket.OPEN) {
|
|
148
151
|
this.releaseSessionIfDetached(true);
|
|
@@ -204,11 +207,19 @@ export class Bridge {
|
|
|
204
207
|
if (this.closing)
|
|
205
208
|
return;
|
|
206
209
|
this.closing = true;
|
|
210
|
+
const listenerClosed = new Promise((resolve) => this.server.close(() => resolve()));
|
|
211
|
+
await this.engine.stop().catch(() => undefined);
|
|
212
|
+
this.session = undefined;
|
|
207
213
|
for (const socket of this.sockets.clients)
|
|
208
214
|
socket.close();
|
|
215
|
+
const timer = setTimeout(() => {
|
|
216
|
+
for (const socket of this.sockets.clients)
|
|
217
|
+
socket.terminate();
|
|
218
|
+
}, 1000);
|
|
209
219
|
await new Promise((resolve) => this.sockets.close(() => resolve()));
|
|
210
|
-
|
|
211
|
-
|
|
220
|
+
clearTimeout(timer);
|
|
221
|
+
this.server.closeAllConnections();
|
|
222
|
+
await listenerClosed;
|
|
212
223
|
}
|
|
213
224
|
}
|
|
214
225
|
function splitAddress(listen) {
|
package/dist/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAe,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAiD,MAAM,IAAI,CAAC;AAGpF,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/engineProcess.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type EngineCapabilities, type EngineEvent, type OpenedSession, type OpenSessionRequest, type SessionMetrics } from './protocol.js';
|
|
1
|
+
import { EngineRefused, type EngineCapabilities, type EngineEvent, type OpenedSession, type PointRequest, type OpenSessionRequest, type SessionMetrics } from './protocol.js';
|
|
2
|
+
export declare function windowsEngineStartupError(code: number | null, error?: Error): EngineRefused | null;
|
|
2
3
|
export interface EngineClientOptions {
|
|
3
4
|
/**
|
|
4
5
|
* Request timeout: an engine that does not answer in time is killed, not
|
|
@@ -62,6 +63,10 @@ export declare class EngineClient {
|
|
|
62
63
|
writeClipboard(sessionId: string, text: string): Promise<{
|
|
63
64
|
written: boolean;
|
|
64
65
|
}>;
|
|
66
|
+
/** Show or clear a transient cue on the host, without moving its pointer. */
|
|
67
|
+
point(sessionId: string, request: PointRequest): Promise<{
|
|
68
|
+
shown: boolean;
|
|
69
|
+
}>;
|
|
65
70
|
closeSession(sessionId: string): Promise<{
|
|
66
71
|
closed: boolean;
|
|
67
72
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineProcess.d.ts","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"engineProcess.d.ts","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"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"}
|
package/dist/engineProcess.js
CHANGED
|
@@ -2,6 +2,17 @@ import { spawn, spawnSync } from 'node:child_process';
|
|
|
2
2
|
import { appendFileSync } from 'node:fs';
|
|
3
3
|
import { createInterface } from 'node:readline';
|
|
4
4
|
import { EngineRefused, PROTOCOL_VERSION, } from './protocol.js';
|
|
5
|
+
export function windowsEngineStartupError(code, error) {
|
|
6
|
+
if (process.platform !== 'win32')
|
|
7
|
+
return null;
|
|
8
|
+
if (code !== null && (code >>> 0) === 0xc0000135) {
|
|
9
|
+
return new EngineRefused('missing-system-library', 'The Windows desktop engine could not load a required DLL (0xC0000135); use a complete Windows engine build with its required runtime libraries.');
|
|
10
|
+
}
|
|
11
|
+
if (error !== undefined) {
|
|
12
|
+
return new EngineRefused('engine-spawn-failed', `The Windows desktop engine could not start: ${error.message}. Check the engine path and Windows application-control policy.`);
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
5
16
|
/**
|
|
6
17
|
* A consumer of the engine's local control protocol.
|
|
7
18
|
*
|
|
@@ -29,7 +40,7 @@ export class EngineClient {
|
|
|
29
40
|
for (const [id, pending] of this.pending) {
|
|
30
41
|
this.pending.delete(id);
|
|
31
42
|
clearTimeout(pending.timer);
|
|
32
|
-
pending.reject(new Error('the desktop engine exited'));
|
|
43
|
+
pending.reject(windowsEngineStartupError(code) ?? new Error('the desktop engine exited'));
|
|
33
44
|
}
|
|
34
45
|
if (!this.stopping)
|
|
35
46
|
options.onExit?.({ code, signal });
|
|
@@ -37,6 +48,13 @@ export class EngineClient {
|
|
|
37
48
|
child.on('error', (error) => {
|
|
38
49
|
this.closed = true;
|
|
39
50
|
options.onDiagnostic?.(`engine process error: ${error.message}`);
|
|
51
|
+
if (process.platform !== 'win32')
|
|
52
|
+
return;
|
|
53
|
+
for (const [id, pending] of this.pending) {
|
|
54
|
+
this.pending.delete(id);
|
|
55
|
+
clearTimeout(pending.timer);
|
|
56
|
+
pending.reject(windowsEngineStartupError(null, error) ?? error);
|
|
57
|
+
}
|
|
40
58
|
});
|
|
41
59
|
}
|
|
42
60
|
/** Start an engine process and complete the protocol handshake. */
|
|
@@ -46,12 +64,12 @@ export class EngineClient {
|
|
|
46
64
|
const missing = /error while loading shared libraries: ([^:\s]+): cannot open shared object file/.exec(probe.stderr ?? '')?.[1];
|
|
47
65
|
if (missing !== undefined && [
|
|
48
66
|
'libpipewire-0.3.so.0', 'libxkbcommon.so.0', 'libevdev.so.2', 'libstdc++.so.6',
|
|
49
|
-
'libXcursor.so.1', 'libX11.so.6', 'libwayland-client.so.0',
|
|
67
|
+
'libXcursor.so.1', 'libX11.so.6', 'libXext.so.6', 'libwayland-client.so.0', 'libfontconfig.so.1', 'libfreetype.so.6',
|
|
50
68
|
].includes(missing)) {
|
|
51
69
|
throw new EngineRefused('missing-system-library', `missing system library: ${missing}`);
|
|
52
70
|
}
|
|
53
71
|
}
|
|
54
|
-
const child = spawn(command, args, { env, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
72
|
+
const child = spawn(command, args, { env, stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true });
|
|
55
73
|
if (env.DESKLINK_AXI_ENGINE_PID_FILE && child.pid) {
|
|
56
74
|
try {
|
|
57
75
|
appendFileSync(env.DESKLINK_AXI_ENGINE_PID_FILE, `${child.pid}\n`);
|
|
@@ -89,7 +107,7 @@ export class EngineClient {
|
|
|
89
107
|
const event = parsed;
|
|
90
108
|
// Setup notifications are drained by the consumer; queue them so a
|
|
91
109
|
// slow reader cannot lose an offer or a candidate.
|
|
92
|
-
if (event.event !== 'session.frame.changed' || options.onEvent === undefined)
|
|
110
|
+
if ((event.event !== 'session.frame.changed' && event.event !== 'session.cursor') || options.onEvent === undefined)
|
|
93
111
|
this.queue.push(event);
|
|
94
112
|
options.onEvent?.(event);
|
|
95
113
|
return;
|
|
@@ -144,7 +162,7 @@ export class EngineClient {
|
|
|
144
162
|
openSession(request, timeoutMs) {
|
|
145
163
|
return this.request('session.open', {
|
|
146
164
|
...(request.source === undefined ? {} : { source: request.source }),
|
|
147
|
-
|
|
165
|
+
...(request.cursor === undefined ? {} : { cursor: request.cursor }),
|
|
148
166
|
...(request.maxWidth === undefined ? {} : { max_width: request.maxWidth }),
|
|
149
167
|
...(request.maxHeight === undefined ? {} : { max_height: request.maxHeight }),
|
|
150
168
|
...(request.bitrateKbps === undefined ? {} : { bitrate_kbps: request.bitrateKbps }),
|
|
@@ -182,6 +200,17 @@ export class EngineClient {
|
|
|
182
200
|
writeClipboard(sessionId, text) {
|
|
183
201
|
return this.request('session.clipboard.write', { session_id: sessionId, text });
|
|
184
202
|
}
|
|
203
|
+
/** Show or clear a transient cue on the host, without moving its pointer. */
|
|
204
|
+
point(sessionId, request) {
|
|
205
|
+
return this.request('session.point', {
|
|
206
|
+
session_id: sessionId,
|
|
207
|
+
...(request.clear === true ? { clear: true } : {
|
|
208
|
+
x: request.x, y: request.y,
|
|
209
|
+
...(request.label === undefined ? {} : { label: request.label }),
|
|
210
|
+
...(request.timeoutMs === undefined ? {} : { timeout_ms: request.timeoutMs }),
|
|
211
|
+
}),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
185
214
|
closeSession(sessionId) {
|
|
186
215
|
return this.request('session.close', { session_id: sessionId });
|
|
187
216
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engineProcess.js","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAuC,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EACH,aAAa,EACb,gBAAgB,GAMnB,MAAM,eAAe,CAAC;AAqBvB;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACJ,KAAK,CAAiC;IACtC,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,KAAK,GAAkB,EAAE,CAAC;IACnC,MAAM,GAAG,CAAC,CAAC;IACX,MAAM,GAAG,KAAK,CAAC;IACf,QAAQ,GAAG,KAAK,CAAC;IACR,SAAS,CAAS;IAEnC,YAAoB,KAAqC,EAAE,OAA4B;QACnF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,MAAM,CAAC;QAEpD,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,CAAC,YAAY,EAAE,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC;IAED,mEAAmE;IACnE,MAAM,CAAC,KAAK,CAAC,KAAK,CACd,OAAe,EACf,IAAc,EACd,UAA+B,EAAE,EACjC,MAAyB,OAAO,CAAC,GAAG;QAEpC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACxF,MAAM,OAAO,GAAG,iFAAiF,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChI,IAAI,OAAO,KAAK,SAAS,IAAI;gBACzB,sBAAsB,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB;gBAC9E,iBAAiB,EAAE,aAAa,EAAE,wBAAwB;aAC7D,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,aAAa,CAAC,wBAAwB,EAAE,2BAA2B,OAAO,EAAE,CAAC,CAAC;YAC5F,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,IAAI,GAAG,CAAC,4BAA4B,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YAChD,IAAI,CAAC;gBAAC,cAAc,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,CAAC;YAC3E,OAAO,KAAK,EAAE,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAC,MAAM,KAAK,CAAC;YAAC,CAAC;QACzD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,kEAAkE;YAClE,mDAAmD;YACnD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,OAA4B;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO;QAC3B,IAAI,MAA+B,CAAC;QACpC,IAAI,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,YAAY,EAAE,CAAC,wCAAwC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACxF,OAAO;QACX,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAgC,CAAC;YAC/C,mEAAmE;YACnE,mDAAmD;YACnD,IAAI,KAAK,CAAC,KAAK,KAAK,uBAAuB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrG,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO;QACX,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAwD,CAAC;QAC9E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,gCAAgC,CAAC,CAAC,CAAC;YAC7G,OAAO;QACX,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAI,MAAc,EAAE,MAAgC,EAAE,SAAS,GAAG,IAAI,CAAC,SAAS;QACnF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC7F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAmC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1F,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,OAAO,CAAqB,cAAc,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,OAA2B,EAAE,SAAkB;QACvD,OAAO,IAAI,CAAC,OAAO,CAAgB,cAAc,EAAE;YAC/C,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACnE,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC1E,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YAC7E,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;YACnF,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;YAChF,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;YACtF,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;YAChF,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,EAAE,SAAS,CAAC,CAAC;IAClB,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,UAAkB,EAAE,GAAW;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;YACvC,UAAU,EAAE,SAAS;YACrB,UAAU;YACV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE;SACvC,CAAC,CAAC;IACP,CAAC;IAED,YAAY,CACR,SAAiB,EACjB,UAAkB,EAClB,SAAiB,EACjB,MAAqB,EACrB,aAA4B;QAE5B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;YACrC,UAAU,EAAE,SAAS;YACrB,UAAU;YACV,SAAS;YACT,OAAO,EAAE,MAAM;YACf,gBAAgB,EAAE,aAAa;SAClC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC,OAAO,CAAiB,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa,CAAC,SAAiB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,IAAY;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,YAAY,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,qDAAqD;IACrD,WAAW,CAAC,SAAkB;QAC1B,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;gBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;gBAC1D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;;OAQG;IACK,OAAO,CAAC,MAAa;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI;QACN,yEAAyE;QACzE,kDAAkD;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,uEAAuE;QACvE,qEAAqE;QACrE,QAAQ;QACR,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAChC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO,OAAO,EAAE,CAAC;YAC3E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBACpB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,MAAc,EAAE,MAA2C,EAAE,SAAiB;IAC5F,MAAM,OAAO,GAAG,qCAAqC,MAAM,OAAO,SAAS,IAAI,CAAC;IAChF,MAAM,MAAM,GAAG,MAAM,EAAE,MAAwC,CAAC;IAChE,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAClF,OAAO,IAAI,aAAa,CAAC,iBAAiB,EAAE,GAAG,OAAO,mDAAmD,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"engineProcess.js","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"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"}
|