linkshell-cli 0.6.4 → 0.8.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/dist/cli/tsconfig.tsbuildinfo +1 -1
- package/dist/host/src/direct.d.ts +32 -0
- package/dist/host/src/direct.js +144 -0
- package/dist/host/src/direct.js.map +1 -0
- package/dist/host/src/drivers/acp/connection.js +3 -0
- package/dist/host/src/drivers/acp/connection.js.map +1 -1
- package/dist/host/src/drivers/acp/driver.d.ts +10 -1
- package/dist/host/src/drivers/acp/driver.js +48 -0
- package/dist/host/src/drivers/acp/driver.js.map +1 -1
- package/dist/host/src/drivers/claude/transcript.d.ts +88 -61
- package/dist/host/src/drivers/claude/transcript.js +8 -0
- package/dist/host/src/drivers/claude/transcript.js.map +1 -1
- package/dist/host/src/drivers/codex/app-server.d.ts +4 -0
- package/dist/host/src/drivers/codex/app-server.js +28 -2
- package/dist/host/src/drivers/codex/app-server.js.map +1 -1
- package/dist/host/src/drivers/codex/driver.d.ts +2 -1
- package/dist/host/src/drivers/codex/driver.js +17 -4
- package/dist/host/src/drivers/codex/driver.js.map +1 -1
- package/dist/host/src/drivers/codex/mapper.d.ts +11 -1
- package/dist/host/src/drivers/codex/mapper.js +80 -0
- package/dist/host/src/drivers/codex/mapper.js.map +1 -1
- package/dist/host/src/drivers/codex/settings.d.ts +7 -2
- package/dist/host/src/drivers/codex/settings.js +21 -2
- package/dist/host/src/drivers/codex/settings.js.map +1 -1
- package/dist/host/src/drivers/types.d.ts +3 -1
- package/dist/host/src/fs.d.ts +3 -3
- package/dist/host/src/host.d.ts +8 -1
- package/dist/host/src/host.js +14 -0
- package/dist/host/src/host.js.map +1 -1
- package/dist/host/src/hub.d.ts +3 -1
- package/dist/host/src/hub.js +25 -0
- package/dist/host/src/hub.js.map +1 -1
- package/dist/host/src/input-helper.d.ts +1 -0
- package/dist/host/src/input-helper.js +208 -0
- package/dist/host/src/input-helper.js.map +1 -0
- package/dist/host/src/input.d.ts +121 -0
- package/dist/host/src/input.js +159 -0
- package/dist/host/src/input.js.map +1 -0
- package/dist/host/src/ports.d.ts +11 -2
- package/dist/host/src/ports.js +45 -7
- package/dist/host/src/ports.js.map +1 -1
- package/dist/host/src/questions.d.ts +21 -0
- package/dist/host/src/questions.js +102 -0
- package/dist/host/src/questions.js.map +1 -0
- package/dist/host/src/rpc/server.js +11 -2
- package/dist/host/src/rpc/server.js.map +1 -1
- package/dist/host/src/screen-viewer.d.ts +1 -0
- package/dist/host/src/screen-viewer.js +783 -0
- package/dist/host/src/screen-viewer.js.map +1 -0
- package/dist/host/src/screen.d.ts +23 -0
- package/dist/host/src/screen.js +65 -69
- package/dist/host/src/screen.js.map +1 -1
- package/dist/wire/src/direct.d.ts +22 -0
- package/dist/wire/src/direct.js +37 -0
- package/dist/wire/src/direct.js.map +1 -0
- package/dist/wire/src/index.d.ts +1 -0
- package/dist/wire/src/index.js +1 -0
- package/dist/wire/src/index.js.map +1 -1
- package/dist/wire/src/model.d.ts +287 -6
- package/dist/wire/src/model.js +33 -0
- package/dist/wire/src/model.js.map +1 -1
- package/dist/wire/src/rpc.d.ts +1865 -170
- package/dist/wire/src/rpc.js +27 -3
- package/dist/wire/src/rpc.js.map +1 -1
- package/dist/wire/src/updates.d.ts +390 -34
- package/dist/wire/src/updates.js +11 -1
- package/dist/wire/src/updates.js.map +1 -1
- package/package.json +3 -3
- package/src/types/werift.d.ts +0 -23
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-viewer.js","sourceRoot":"","sources":["../../../../host/src/screen-viewer.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,mEAAmE;AACnE,EAAE;AACF,4DAA4D;AAC5D,yEAAyE;AACzE,2CAA2C;AAC3C,6EAA6E;AAC7E,+EAA+E;AAC/E,2CAA2C;AAC3C,6FAA6F;AAE7F,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAC5B,uJAAuJ,IAAI,QAAQ,CAAC;AAEtK,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,IAAI,CAAC,qHAAqH,CAAC;IACjI,QAAQ,EAAE,IAAI,CAAC,6DAA6D,CAAC;IAC7E,KAAK,EAAE,IAAI,CAAC,oGAAoG,CAAC;IACjH,QAAQ,EAAE,IAAI,CAAC,iJAAiJ,CAAC;IACjK,GAAG,EAAE,IAAI,CAAC,0EAA0E,CAAC;IACrF,MAAM,EAAE,IAAI,CAAC,qHAAqH,CAAC;IACnI,MAAM,EAAE,IAAI,CAAC,oDAAoD,CAAC;IAClE,MAAM,EAAE,IAAI,CAAC,oDAAoD,CAAC;IAClE,IAAI,EAAE,IAAI,CAAC,4BAA4B,CAAC;CACzC,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCvB,CAAC;AAEF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkqBxB,CAAC;AAEF,MAAM,UAAU,UAAU;IACxB,OAAO;;;;SAIA,KAAK;;;;;;;;;;;;kEAYoD,KAAK,CAAC,QAAQ;+DACjB,KAAK,CAAC,GAAG;gEACR,KAAK,CAAC,MAAM;;;;;;;;;;;;;;;;;;6CAkB/B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;UACxD,MAAM;eACD,CAAC;AAChB,CAAC"}
|
|
@@ -3,6 +3,26 @@ export interface Display {
|
|
|
3
3
|
index: number;
|
|
4
4
|
name: string;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* How the picture is sent. `full` when it goes straight to the device; `low`
|
|
8
|
+
* when it is relayed by a gateway, which should carry messages rather than video.
|
|
9
|
+
*/
|
|
10
|
+
declare const PROFILES: {
|
|
11
|
+
readonly full: {
|
|
12
|
+
readonly fps: 20;
|
|
13
|
+
readonly width: 1600;
|
|
14
|
+
readonly bitrate: "3M";
|
|
15
|
+
readonly ceiling: "4M";
|
|
16
|
+
};
|
|
17
|
+
readonly low: {
|
|
18
|
+
readonly fps: 12;
|
|
19
|
+
readonly width: 1280;
|
|
20
|
+
readonly bitrate: "900k";
|
|
21
|
+
readonly ceiling: "1300k";
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type ScreenProfile = keyof typeof PROFILES;
|
|
25
|
+
export declare function captureArgs(display: number, quality?: ScreenProfile): string[];
|
|
6
26
|
/** Splits an Annex-B stream at access-unit delimiters (NAL type 9) into whole frames. */
|
|
7
27
|
export declare class AccessUnitSplitter {
|
|
8
28
|
private buffer;
|
|
@@ -27,7 +47,9 @@ export declare class ScreenShare {
|
|
|
27
47
|
private readonly log;
|
|
28
48
|
private server?;
|
|
29
49
|
private token;
|
|
50
|
+
private displays;
|
|
30
51
|
private readonly captures;
|
|
52
|
+
private readonly controls;
|
|
31
53
|
constructor(log: (message: string) => void);
|
|
32
54
|
start(): Promise<{
|
|
33
55
|
port: number;
|
|
@@ -39,3 +61,4 @@ export declare class ScreenShare {
|
|
|
39
61
|
private stream;
|
|
40
62
|
stop(): void;
|
|
41
63
|
}
|
|
64
|
+
export {};
|
package/dist/host/src/screen.js
CHANGED
|
@@ -4,36 +4,49 @@ import { createServer } from "node:http";
|
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
5
|
import { WebSocketServer } from "ws";
|
|
6
6
|
import { RpcError } from "@linkshell/wire";
|
|
7
|
+
import { InputControl } from "./input.js";
|
|
8
|
+
import { viewerPage } from "./screen-viewer.js";
|
|
7
9
|
// Viewing the computer's screen from the phone. The host serves a small
|
|
8
10
|
// viewer page and an H.264 stream on a loopback port; the phone opens it
|
|
9
11
|
// through the same encrypted forwarder as port previews, so the video never
|
|
10
12
|
// leaves the end-to-end channel and needs no NAT traversal. A random token
|
|
11
13
|
// gates the port: other programs on this machine can't watch the screen
|
|
12
|
-
// without having Screen Recording permission themselves.
|
|
14
|
+
// without having Screen Recording permission themselves. The same socket
|
|
15
|
+
// carries the viewer's pointer and key events back (see `input.ts`).
|
|
13
16
|
const run = promisify(execFile);
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
/**
|
|
18
|
+
* How the picture is sent. `full` when it goes straight to the device; `low`
|
|
19
|
+
* when it is relayed by a gateway, which should carry messages rather than video.
|
|
20
|
+
*/
|
|
21
|
+
const PROFILES = {
|
|
22
|
+
full: { fps: 20, width: 1600, bitrate: "3M", ceiling: "4M" },
|
|
23
|
+
low: { fps: 12, width: 1280, bitrate: "900k", ceiling: "1300k" },
|
|
24
|
+
};
|
|
16
25
|
async function hasFfmpeg() {
|
|
17
26
|
return run("ffmpeg", ["-hide_banner", "-version"], { timeout: 5000 }).then(() => true, () => false);
|
|
18
27
|
}
|
|
19
28
|
/** macOS: AVFoundation's "Capture screen N" devices. */
|
|
20
29
|
async function listDisplays() {
|
|
21
30
|
if (process.platform !== "darwin")
|
|
22
|
-
return [{ index: 0, name: "屏幕" }];
|
|
31
|
+
return [{ index: 0, name: "屏幕", screen: 0 }];
|
|
23
32
|
const output = await run("ffmpeg", ["-hide_banner", "-f", "avfoundation", "-list_devices", "true", "-i", ""], { timeout: 8000 }).then(({ stderr }) => stderr, (error) => error.stderr ?? "");
|
|
24
33
|
const displays = [];
|
|
25
34
|
for (const match of output.matchAll(/\[(\d+)\] Capture screen (\d+)/g)) {
|
|
26
|
-
displays.push({ index: Number(match[1]), name: `屏幕 ${Number(match[2]) + 1}
|
|
35
|
+
displays.push({ index: Number(match[1]), name: `屏幕 ${Number(match[2]) + 1}`, screen: Number(match[2]) });
|
|
27
36
|
}
|
|
28
37
|
return displays;
|
|
29
38
|
}
|
|
30
|
-
function captureArgs(display) {
|
|
39
|
+
export function captureArgs(display, quality = "full") {
|
|
40
|
+
const profile = PROFILES[quality];
|
|
31
41
|
const input = process.platform === "darwin"
|
|
32
|
-
? ["-f", "avfoundation", "-capture_cursor", "1", "-framerate", String(
|
|
33
|
-
: ["-f", "x11grab", "-framerate", String(
|
|
42
|
+
? ["-f", "avfoundation", "-capture_cursor", "1", "-framerate", String(profile.fps), "-i", `${display}:none`]
|
|
43
|
+
: ["-f", "x11grab", "-framerate", String(profile.fps), "-i", process.env.DISPLAY ?? ":0"];
|
|
34
44
|
const encode = process.platform === "darwin"
|
|
35
|
-
? ["-c:v", "h264_videotoolbox", "-realtime", "1", "-profile:v", "baseline", "-b:v",
|
|
36
|
-
: [
|
|
45
|
+
? ["-c:v", "h264_videotoolbox", "-realtime", "1", "-profile:v", "baseline", "-b:v", profile.bitrate, "-maxrate", profile.ceiling]
|
|
46
|
+
: [
|
|
47
|
+
"-c:v", "libx264", "-preset", "ultrafast", "-tune", "zerolatency", "-profile:v", "baseline", "-x264-params", "sliced-threads=0",
|
|
48
|
+
"-b:v", profile.bitrate, "-maxrate", profile.ceiling, "-bufsize", profile.ceiling,
|
|
49
|
+
];
|
|
37
50
|
return [
|
|
38
51
|
"-hide_banner",
|
|
39
52
|
"-loglevel",
|
|
@@ -42,10 +55,10 @@ function captureArgs(display) {
|
|
|
42
55
|
"-vf",
|
|
43
56
|
// AVFoundation captures a screen at its refresh rate whatever -framerate asks (120 a second on a
|
|
44
57
|
// ProMotion display): the frames are dropped here, before the encoder and the network pay for them.
|
|
45
|
-
`fps=${
|
|
58
|
+
`fps=${profile.fps},scale='min(${profile.width},iw)':-2,format=yuv420p`,
|
|
46
59
|
...encode,
|
|
47
60
|
"-g",
|
|
48
|
-
String(
|
|
61
|
+
String(profile.fps * 2),
|
|
49
62
|
"-bf",
|
|
50
63
|
"0",
|
|
51
64
|
// An access-unit delimiter before every frame, so the stream splits into frames cleanly.
|
|
@@ -142,63 +155,14 @@ export async function reapOrphanCaptures(log) {
|
|
|
142
155
|
return 0;
|
|
143
156
|
}
|
|
144
157
|
}
|
|
145
|
-
function viewerPage() {
|
|
146
|
-
return `<!doctype html>
|
|
147
|
-
<html><head><meta charset="utf-8">
|
|
148
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=6, user-scalable=yes">
|
|
149
|
-
<title>屏幕</title>
|
|
150
|
-
<style>
|
|
151
|
-
html, body { margin: 0; height: 100%; background: #000; overflow: hidden; }
|
|
152
|
-
body { display: flex; align-items: center; justify-content: center; }
|
|
153
|
-
canvas { max-width: 100vw; max-height: 100vh; object-fit: contain; }
|
|
154
|
-
#note { position: fixed; inset: 0; display: flex; align-items: center; justify-content: center; padding: 32px;
|
|
155
|
-
color: rgba(255,255,255,0.72); font: 15px/1.5 -apple-system, system-ui, sans-serif; text-align: center; }
|
|
156
|
-
</style></head>
|
|
157
|
-
<body><canvas></canvas><div id="note">正在连接电脑屏幕…</div>
|
|
158
|
-
<script>
|
|
159
|
-
const note = document.getElementById("note");
|
|
160
|
-
const canvas = document.querySelector("canvas");
|
|
161
|
-
const ctx = canvas.getContext("2d");
|
|
162
|
-
const say = (text) => { note.textContent = text; note.style.display = text ? "flex" : "none"; };
|
|
163
|
-
if (!("VideoDecoder" in window)) say("这个系统版本的浏览器内核不支持视频解码,请升级系统后再试。");
|
|
164
|
-
const hex = (n) => n.toString(16).padStart(2, "0");
|
|
165
|
-
function sps(unit) {
|
|
166
|
-
for (let i = 0; i + 3 < unit.length; i++)
|
|
167
|
-
if (unit[i] === 0 && unit[i + 1] === 0 && unit[i + 2] === 1 && (unit[i + 3] & 0x1f) === 7) return unit.subarray(i + 3);
|
|
168
|
-
}
|
|
169
|
-
let decoder;
|
|
170
|
-
const ws = new WebSocket("ws://" + location.host + "/stream" + location.search);
|
|
171
|
-
ws.binaryType = "arraybuffer";
|
|
172
|
-
ws.onmessage = (event) => {
|
|
173
|
-
if (typeof event.data === "string") { const message = JSON.parse(event.data); if (message.error) say(message.error); return; }
|
|
174
|
-
const bytes = new Uint8Array(event.data);
|
|
175
|
-
const key = bytes[0] === 1;
|
|
176
|
-
const unit = bytes.subarray(1);
|
|
177
|
-
if (!decoder) {
|
|
178
|
-
const params = key && sps(unit);
|
|
179
|
-
if (!params) return;
|
|
180
|
-
decoder = new VideoDecoder({
|
|
181
|
-
output: (frame) => {
|
|
182
|
-
if (canvas.width !== frame.displayWidth) { canvas.width = frame.displayWidth; canvas.height = frame.displayHeight; }
|
|
183
|
-
ctx.drawImage(frame, 0, 0);
|
|
184
|
-
frame.close();
|
|
185
|
-
say("");
|
|
186
|
-
},
|
|
187
|
-
error: (error) => say("解码失败:" + error.message),
|
|
188
|
-
});
|
|
189
|
-
decoder.configure({ codec: "avc1." + hex(params[1]) + hex(params[2]) + hex(params[3]), optimizeForLatency: true });
|
|
190
|
-
}
|
|
191
|
-
decoder.decode(new EncodedVideoChunk({ type: key ? "key" : "delta", timestamp: performance.now() * 1000, data: unit }));
|
|
192
|
-
};
|
|
193
|
-
ws.onclose = () => { if (note.style.display === "none" || note.textContent.startsWith("正在")) say("屏幕连接已断开"); };
|
|
194
|
-
</script></body></html>`;
|
|
195
|
-
}
|
|
196
158
|
/** The loopback viewer server; started on first use, one capture per watching device. */
|
|
197
159
|
export class ScreenShare {
|
|
198
160
|
log;
|
|
199
161
|
server;
|
|
200
162
|
token = "";
|
|
163
|
+
displays = [];
|
|
201
164
|
captures = new Set();
|
|
165
|
+
controls = new Set();
|
|
202
166
|
constructor(log) {
|
|
203
167
|
this.log = log;
|
|
204
168
|
void reapOrphanCaptures(log);
|
|
@@ -208,13 +172,13 @@ export class ScreenShare {
|
|
|
208
172
|
throw RpcError.app("not_supported", "这台电脑的系统暂不支持查看屏幕");
|
|
209
173
|
if (!(await hasFfmpeg()))
|
|
210
174
|
throw RpcError.app("not_supported", "查看屏幕需要电脑上装有 ffmpeg(brew install ffmpeg)");
|
|
211
|
-
const displays = await listDisplays();
|
|
175
|
+
const displays = (this.displays = await listDisplays());
|
|
212
176
|
if (!displays.length)
|
|
213
177
|
throw RpcError.app("not_supported", "没有找到可以捕获的屏幕");
|
|
214
178
|
// A fresh token per start: an old viewer URL stops working.
|
|
215
179
|
this.token = randomBytes(24).toString("base64url");
|
|
216
180
|
const port = await this.listen();
|
|
217
|
-
return { port, token: this.token, displays };
|
|
181
|
+
return { port, token: this.token, displays: displays.map(({ index, name }) => ({ index, name })) };
|
|
218
182
|
}
|
|
219
183
|
listen() {
|
|
220
184
|
if (this.server)
|
|
@@ -234,7 +198,8 @@ export class ScreenShare {
|
|
|
234
198
|
socket.destroy();
|
|
235
199
|
return;
|
|
236
200
|
}
|
|
237
|
-
|
|
201
|
+
const quality = url.searchParams.get("q") === "low" ? "low" : "full";
|
|
202
|
+
sockets.handleUpgrade(request, socket, head, (ws) => this.stream(ws, Number(url.searchParams.get("display") ?? NaN), quality));
|
|
238
203
|
});
|
|
239
204
|
this.server = server;
|
|
240
205
|
return new Promise((resolve, reject) => {
|
|
@@ -247,9 +212,33 @@ export class ScreenShare {
|
|
|
247
212
|
const expected = Buffer.from(this.token);
|
|
248
213
|
return this.token.length > 0 && given.length === expected.length && timingSafeEqual(given, expected);
|
|
249
214
|
}
|
|
250
|
-
stream(ws, display) {
|
|
251
|
-
const
|
|
215
|
+
stream(ws, display, quality) {
|
|
216
|
+
const shown = this.displays.find((entry) => entry.index === display) ?? this.displays[0];
|
|
217
|
+
const capture = spawn("ffmpeg", captureArgs(shown?.index ?? 0, quality), { stdio: ["ignore", "pipe", "pipe"] });
|
|
252
218
|
this.captures.add(capture);
|
|
219
|
+
const tell = (message) => ws.readyState === ws.OPEN && ws.send(JSON.stringify(message));
|
|
220
|
+
// The viewer's hands: started when it first asks to control, for the display it is watching.
|
|
221
|
+
const control = new InputControl({
|
|
222
|
+
state: (state) => tell({ control: state }),
|
|
223
|
+
cursor: (x, y) => tell({ cursor: { x, y } }),
|
|
224
|
+
posted: (event) => this.log(`[screen] dry run: ${JSON.stringify(event)}`),
|
|
225
|
+
}, this.log);
|
|
226
|
+
this.controls.add(control);
|
|
227
|
+
ws.on("message", (data, binary) => {
|
|
228
|
+
if (binary)
|
|
229
|
+
return;
|
|
230
|
+
let message;
|
|
231
|
+
try {
|
|
232
|
+
message = JSON.parse(String(data));
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (message?.t === "control")
|
|
238
|
+
void control.start(shown?.screen ?? 0);
|
|
239
|
+
else
|
|
240
|
+
control.send(message);
|
|
241
|
+
});
|
|
253
242
|
const splitter = new AccessUnitSplitter();
|
|
254
243
|
let errors = "";
|
|
255
244
|
capture.stdout.on("data", (chunk) => splitter.push(chunk, (unit, key) => {
|
|
@@ -270,13 +259,20 @@ export class ScreenShare {
|
|
|
270
259
|
}
|
|
271
260
|
ws.close();
|
|
272
261
|
});
|
|
273
|
-
ws.on("close", () =>
|
|
262
|
+
ws.on("close", () => {
|
|
263
|
+
endCapture(capture);
|
|
264
|
+
control.stop();
|
|
265
|
+
this.controls.delete(control);
|
|
266
|
+
});
|
|
274
267
|
}
|
|
275
268
|
stop() {
|
|
276
269
|
// The host is going: there is no later to insist in.
|
|
277
270
|
for (const capture of this.captures)
|
|
278
271
|
endCapture(capture, true);
|
|
279
272
|
this.captures.clear();
|
|
273
|
+
for (const control of this.controls)
|
|
274
|
+
control.stop();
|
|
275
|
+
this.controls.clear();
|
|
280
276
|
this.server?.close();
|
|
281
277
|
this.server = undefined;
|
|
282
278
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen.js","sourceRoot":"","sources":["../../../../host/src/screen.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"screen.js","sourceRoot":"","sources":["../../../../host/src/screen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** The data channel both sides use. */
|
|
2
|
+
export declare const DIRECT_LABEL = "linkshell-bulk";
|
|
3
|
+
/** The most stream bytes in one message: every WebRTC stack takes this size. */
|
|
4
|
+
export declare const DIRECT_CHUNK: number;
|
|
5
|
+
/**
|
|
6
|
+
* STUN servers used when a host names none: they only tell each side its
|
|
7
|
+
* public address. (Several, because none of them is reachable everywhere.)
|
|
8
|
+
*/
|
|
9
|
+
export declare const DEFAULT_ICE_SERVERS: string[];
|
|
10
|
+
export type DirectFrame = {
|
|
11
|
+
type: "data";
|
|
12
|
+
stream: number;
|
|
13
|
+
data: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
/** The sender's end of the stream is finished (`error`: why, when it broke). */
|
|
16
|
+
| {
|
|
17
|
+
type: "close";
|
|
18
|
+
stream: number;
|
|
19
|
+
error?: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function encodeDirectFrame(frame: DirectFrame): Uint8Array;
|
|
22
|
+
export declare function decodeDirectFrame(bytes: Uint8Array): DirectFrame | undefined;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// The direct channel: bulk streams (the screen, port previews) go from the
|
|
2
|
+
// computer to the device peer to peer, over a WebRTC data channel, instead of
|
|
3
|
+
// through the gateway. The offer and answer travel over the end-to-end
|
|
4
|
+
// encrypted RPC channel, so the gateway can neither read them nor stand in for
|
|
5
|
+
// either side; it carries only what little sets the connection up. When no
|
|
6
|
+
// direct path can be made, the streams stay on the RPC channel as before.
|
|
7
|
+
/** The data channel both sides use. */
|
|
8
|
+
export const DIRECT_LABEL = "linkshell-bulk";
|
|
9
|
+
/** The most stream bytes in one message: every WebRTC stack takes this size. */
|
|
10
|
+
export const DIRECT_CHUNK = 16 * 1024;
|
|
11
|
+
/**
|
|
12
|
+
* STUN servers used when a host names none: they only tell each side its
|
|
13
|
+
* public address. (Several, because none of them is reachable everywhere.)
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_ICE_SERVERS = ["stun:stun.cloudflare.com:3478", "stun:stun.chat.bilibili.com:3478", "stun:stun.l.google.com:19302"];
|
|
16
|
+
const DATA = 1;
|
|
17
|
+
const CLOSE = 2;
|
|
18
|
+
export function encodeDirectFrame(frame) {
|
|
19
|
+
const payload = frame.type === "data" ? frame.data : new TextEncoder().encode(frame.error ?? "");
|
|
20
|
+
const bytes = new Uint8Array(5 + payload.length);
|
|
21
|
+
bytes[0] = frame.type === "data" ? DATA : CLOSE;
|
|
22
|
+
new DataView(bytes.buffer).setUint32(1, frame.stream);
|
|
23
|
+
bytes.set(payload, 5);
|
|
24
|
+
return bytes;
|
|
25
|
+
}
|
|
26
|
+
export function decodeDirectFrame(bytes) {
|
|
27
|
+
if (bytes.length < 5)
|
|
28
|
+
return undefined;
|
|
29
|
+
const stream = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(1);
|
|
30
|
+
const payload = bytes.subarray(5);
|
|
31
|
+
if (bytes[0] === DATA)
|
|
32
|
+
return { type: "data", stream, data: payload };
|
|
33
|
+
if (bytes[0] === CLOSE)
|
|
34
|
+
return { type: "close", stream, error: payload.length ? new TextDecoder().decode(payload) : undefined };
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=direct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct.js","sourceRoot":"","sources":["../../../../wire/src/direct.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,uEAAuE;AACvE,+EAA+E;AAC/E,2EAA2E;AAC3E,0EAA0E;AAE1E,uCAAuC;AACvC,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE7C,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,+BAA+B,EAAE,kCAAkC,EAAE,8BAA8B,CAAC,CAAC;AAOzI,MAAM,IAAI,GAAG,CAAC,CAAC;AACf,MAAM,KAAK,GAAG,CAAC,CAAC;AAEhB,MAAM,UAAU,iBAAiB,CAAC,KAAkB;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACjG,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACtE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAChI,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/wire/src/index.d.ts
CHANGED
package/dist/wire/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../wire/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../wire/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|