@swf2es/desktop 0.1.22 → 0.1.24
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/main/connections.d.ts +14 -2
- package/dist/main/connections.d.ts.map +1 -1
- package/dist/main/connections.js +44 -8
- package/dist/main/connections.js.map +1 -1
- package/dist/main/network.d.ts.map +1 -1
- package/dist/main/network.js +2 -1
- package/dist/main/network.js.map +1 -1
- package/dist/main/proxy.d.ts +16 -1
- package/dist/main/proxy.d.ts.map +1 -1
- package/dist/main/proxy.js +67 -12
- package/dist/main/proxy.js.map +1 -1
- package/dist/main/relay.d.ts +55 -0
- package/dist/main/relay.d.ts.map +1 -0
- package/dist/main/relay.js +140 -0
- package/dist/main/relay.js.map +1 -0
- package/dist/main/sockets.d.ts.map +1 -1
- package/dist/main/sockets.js +21 -5
- package/dist/main/sockets.js.map +1 -1
- package/dist/main/websockets.d.ts.map +1 -1
- package/dist/main/websockets.js +14 -4
- package/dist/main/websockets.js.map +1 -1
- package/dist/preload/preload.cjs +7 -6
- package/dist/preload/preload.cjs.map +1 -1
- package/dist/renderer/sockets.d.ts.map +1 -1
- package/dist/renderer/sockets.js +31 -21
- package/dist/renderer/sockets.js.map +1 -1
- package/dist/renderer/websockets.d.ts.map +1 -1
- package/dist/renderer/websockets.js +29 -19
- package/dist/renderer/websockets.js.map +1 -1
- package/dist/shared/api.d.ts +12 -4
- package/dist/shared/api.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/main/connections.ts +55 -10
- package/src/main/network.ts +3 -1
- package/src/main/proxy.ts +87 -14
- package/src/main/relay.ts +169 -0
- package/src/main/sockets.ts +49 -29
- package/src/main/websockets.ts +17 -4
- package/src/preload/preload.cts +10 -8
- package/src/renderer/sockets.ts +30 -21
- package/src/renderer/websockets.ts +28 -19
- package/src/shared/api.ts +13 -4
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** Each connection's events, by its id, in the order they came. */
|
|
2
|
+
export type Batch<E> = [id: number, event: E][];
|
|
3
|
+
/**
|
|
4
|
+
* A batch that holds this many bytes goes at once, not when it would: a
|
|
5
|
+
* busy socket is not kept from its page, and neither the main process nor
|
|
6
|
+
* one message grows past it by more than a read.
|
|
7
|
+
*/
|
|
8
|
+
export declare const FLUSH_AT: number;
|
|
9
|
+
/**
|
|
10
|
+
* The least time between two batches, in milliseconds. The first event
|
|
11
|
+
* after a quiet spell goes at the end of its turn, so that a request's
|
|
12
|
+
* answer waits for nothing; what follows within the window waits for its
|
|
13
|
+
* end, and goes with the rest that came by then. Socket reads that cost
|
|
14
|
+
* little come many to a millisecond, each with a few bytes: a turn's
|
|
15
|
+
* batch alone left one message for most of them. On Windows the timer
|
|
16
|
+
* may wait for the system's resolution, about 16 ms: docs/architecture/
|
|
17
|
+
* desktop.md says why that does.
|
|
18
|
+
*/
|
|
19
|
+
export declare const WINDOW = 1;
|
|
20
|
+
export declare class Relay<E> {
|
|
21
|
+
private readonly send;
|
|
22
|
+
private readonly flushAt;
|
|
23
|
+
private batch;
|
|
24
|
+
private size;
|
|
25
|
+
/** Each connection's bytes, while nothing else of it has come after them in the batch. */
|
|
26
|
+
private readonly joining;
|
|
27
|
+
private readonly window;
|
|
28
|
+
private immediate;
|
|
29
|
+
private timer;
|
|
30
|
+
/** When the last batch went, by performance.now(). */
|
|
31
|
+
private sent;
|
|
32
|
+
/** `send` takes each batch, never an empty one. */
|
|
33
|
+
constructor(send: (batch: Batch<E>) => void, flushAt?: number, window?: number);
|
|
34
|
+
/** `event` for `id`, after whatever came for it before; `size` of its bytes count to FLUSH_AT. */
|
|
35
|
+
push(id: number, event: E, size?: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Bytes read for `id`, which it no longer holds: one event, as `wrap`
|
|
38
|
+
* makes it, with the bytes read for it before them in this batch.
|
|
39
|
+
*/
|
|
40
|
+
bytes(id: number, chunk: Uint8Array, wrap: (bytes: Uint8Array) => E): void;
|
|
41
|
+
/** Send what is gathered now. */
|
|
42
|
+
flush(): void;
|
|
43
|
+
/** Forget what is gathered: its page is gone, and the next numbers its connections from 1. */
|
|
44
|
+
drop(): void;
|
|
45
|
+
private added;
|
|
46
|
+
private readonly flushing;
|
|
47
|
+
private unschedule;
|
|
48
|
+
/**
|
|
49
|
+
* `id`'s bytes as one event, the chunks joined where there are more than
|
|
50
|
+
* one: a second copy of theirs, but one event for the SWF rather than one
|
|
51
|
+
* for each read, which costs it far more than the copy.
|
|
52
|
+
*/
|
|
53
|
+
private seal;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=relay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/main/relay.ts"],"names":[],"mappings":"AAOA,mEAAmE;AACnE,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,QAAa,CAAC;AAEnC;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,IAAI,CAAC;AAUxB,qBAAa,KAAK,CAAC,CAAC;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,IAAI,CAAK;IACjB,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,SAAS,CAAgD;IACjE,OAAO,CAAC,KAAK,CAA8C;IAC3D,sDAAsD;IACtD,OAAO,CAAC,IAAI,CAA4B;IAExC,mDAAmD;IACnD,YAAY,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,SAAW,EAAE,MAAM,SAAS,EAI/E;IAED,kGAAkG;IAClG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,SAAI,GAAG,IAAI,CAIzC;IAED;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,GAAG,IAAI,CAWzE;IAED,iCAAiC;IACjC,KAAK,IAAI,IAAI,CAeZ;IAED,8FAA8F;IAC9F,IAAI,IAAI,IAAI,CAKX;IAED,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAIvB;IAEF,OAAO,CAAC,UAAU;IAYlB;;;;OAIG;IACH,OAAO,CAAC,IAAI;CAmBb"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// What a page's connections say to it, gathered into one IPC message a
|
|
2
|
+
// millisecond at most: each message is serialized, posted and run as a
|
|
3
|
+
// task of the page's on its own, so a socket read or a WebSocket message
|
|
4
|
+
// apiece cost a page with busy connections tens of thousands a second.
|
|
5
|
+
// Apart from Electron so that node runs it in the tests
|
|
6
|
+
// (tests/desktop/relay.test.ts).
|
|
7
|
+
/**
|
|
8
|
+
* A batch that holds this many bytes goes at once, not when it would: a
|
|
9
|
+
* busy socket is not kept from its page, and neither the main process nor
|
|
10
|
+
* one message grows past it by more than a read.
|
|
11
|
+
*/
|
|
12
|
+
export const FLUSH_AT = 256 * 1024;
|
|
13
|
+
/**
|
|
14
|
+
* The least time between two batches, in milliseconds. The first event
|
|
15
|
+
* after a quiet spell goes at the end of its turn, so that a request's
|
|
16
|
+
* answer waits for nothing; what follows within the window waits for its
|
|
17
|
+
* end, and goes with the rest that came by then. Socket reads that cost
|
|
18
|
+
* little come many to a millisecond, each with a few bytes: a turn's
|
|
19
|
+
* batch alone left one message for most of them. On Windows the timer
|
|
20
|
+
* may wait for the system's resolution, about 16 ms: docs/architecture/
|
|
21
|
+
* desktop.md says why that does.
|
|
22
|
+
*/
|
|
23
|
+
export const WINDOW = 1;
|
|
24
|
+
export class Relay {
|
|
25
|
+
send;
|
|
26
|
+
flushAt;
|
|
27
|
+
batch = [];
|
|
28
|
+
size = 0;
|
|
29
|
+
/** Each connection's bytes, while nothing else of it has come after them in the batch. */
|
|
30
|
+
joining = new Map();
|
|
31
|
+
window;
|
|
32
|
+
immediate = null;
|
|
33
|
+
timer = null;
|
|
34
|
+
/** When the last batch went, by performance.now(). */
|
|
35
|
+
sent = Number.NEGATIVE_INFINITY;
|
|
36
|
+
/** `send` takes each batch, never an empty one. */
|
|
37
|
+
constructor(send, flushAt = FLUSH_AT, window = WINDOW) {
|
|
38
|
+
this.send = send;
|
|
39
|
+
this.flushAt = flushAt;
|
|
40
|
+
this.window = window;
|
|
41
|
+
}
|
|
42
|
+
/** `event` for `id`, after whatever came for it before; `size` of its bytes count to FLUSH_AT. */
|
|
43
|
+
push(id, event, size = 0) {
|
|
44
|
+
this.seal(id);
|
|
45
|
+
this.batch.push([id, event]);
|
|
46
|
+
this.added(size);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Bytes read for `id`, which it no longer holds: one event, as `wrap`
|
|
50
|
+
* makes it, with the bytes read for it before them in this batch.
|
|
51
|
+
*/
|
|
52
|
+
bytes(id, chunk, wrap) {
|
|
53
|
+
const joining = this.joining.get(id);
|
|
54
|
+
if (joining) {
|
|
55
|
+
joining.chunks.push(chunk);
|
|
56
|
+
joining.length += chunk.length;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.joining.set(id, { at: this.batch.length, chunks: [chunk], length: chunk.length, wrap });
|
|
60
|
+
this.batch.push([id, wrap(chunk)]);
|
|
61
|
+
}
|
|
62
|
+
this.added(chunk.length);
|
|
63
|
+
}
|
|
64
|
+
/** Send what is gathered now. */
|
|
65
|
+
flush() {
|
|
66
|
+
this.unschedule();
|
|
67
|
+
if (this.batch.length === 0) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
for (const id of this.joining.keys()) {
|
|
71
|
+
this.seal(id);
|
|
72
|
+
}
|
|
73
|
+
const batch = this.batch;
|
|
74
|
+
this.batch = [];
|
|
75
|
+
this.size = 0;
|
|
76
|
+
this.sent = performance.now();
|
|
77
|
+
this.send(batch);
|
|
78
|
+
}
|
|
79
|
+
/** Forget what is gathered: its page is gone, and the next numbers its connections from 1. */
|
|
80
|
+
drop() {
|
|
81
|
+
this.unschedule();
|
|
82
|
+
this.batch = [];
|
|
83
|
+
this.size = 0;
|
|
84
|
+
this.joining.clear();
|
|
85
|
+
}
|
|
86
|
+
added(size) {
|
|
87
|
+
this.size += size;
|
|
88
|
+
if (this.size >= this.flushAt) {
|
|
89
|
+
this.flush();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (this.immediate || this.timer) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const wait = this.sent + this.window - performance.now();
|
|
96
|
+
if (wait > 0) {
|
|
97
|
+
this.timer = setTimeout(this.flushing, wait);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
this.immediate = setImmediate(this.flushing);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
flushing = () => {
|
|
104
|
+
this.immediate = null;
|
|
105
|
+
this.timer = null;
|
|
106
|
+
this.flush();
|
|
107
|
+
};
|
|
108
|
+
unschedule() {
|
|
109
|
+
if (this.immediate) {
|
|
110
|
+
clearImmediate(this.immediate);
|
|
111
|
+
this.immediate = null;
|
|
112
|
+
}
|
|
113
|
+
if (this.timer) {
|
|
114
|
+
clearTimeout(this.timer);
|
|
115
|
+
this.timer = null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* `id`'s bytes as one event, the chunks joined where there are more than
|
|
120
|
+
* one: a second copy of theirs, but one event for the SWF rather than one
|
|
121
|
+
* for each read, which costs it far more than the copy.
|
|
122
|
+
*/
|
|
123
|
+
seal(id) {
|
|
124
|
+
const joining = this.joining.get(id);
|
|
125
|
+
if (!joining) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
this.joining.delete(id);
|
|
129
|
+
if (joining.chunks.length > 1) {
|
|
130
|
+
const bytes = new Uint8Array(joining.length);
|
|
131
|
+
let offset = 0;
|
|
132
|
+
for (let i = 0; i < joining.chunks.length; i++) {
|
|
133
|
+
bytes.set(joining.chunks[i], offset);
|
|
134
|
+
offset += joining.chunks[i].length;
|
|
135
|
+
}
|
|
136
|
+
this.batch[joining.at][1] = joining.wrap(bytes);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=relay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/main/relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sockets.d.ts","sourceRoot":"","sources":["../../src/main/sockets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sockets.d.ts","sourceRoot":"","sources":["../../src/main/sockets.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAA6B,MAAM,UAAU,CAAC;AAExE,OAAO,EAAE,KAAK,iBAAiB,EAA8B,MAAM,kBAAkB,CAAC;AAMtF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,EACzC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,EAC5E,GAAG,GAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAW,EAC3C,IAAI,UAAQ,EACZ,OAAO,GAAE,iBAAsB,GAC9B,IAAI,CA4FN"}
|
package/dist/main/sockets.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
// flash.net.Socket's TCP connections, made here for the page, which has
|
|
2
2
|
// no network of its own beyond fetch, and carried over IPC. Each page's
|
|
3
|
-
// connections (connections.ts) close as it navigates, reloads or goes
|
|
3
|
+
// connections (connections.ts) close as it navigates, reloads or goes, and
|
|
4
|
+
// their events go to it gathered, a message a millisecond at most
|
|
5
|
+
// (relay.ts).
|
|
4
6
|
import { ipcMain } from "electron";
|
|
5
7
|
import { Connections, validEndpoint } from "./connections.js";
|
|
6
8
|
import { socketDataLine, socketLine } from "./netlog.js";
|
|
9
|
+
import { Relay } from "./relay.js";
|
|
10
|
+
const dataEvent = (bytes) => ({ type: "data", bytes });
|
|
7
11
|
/**
|
|
8
12
|
* Carry socket messages from pages that `trusted` accepts, each connection
|
|
9
13
|
* made only as `permit` allows it, to the address it gives where it gives
|
|
@@ -19,6 +23,11 @@ export function bridgeSockets(trusted, permit, log = null, data = false, options
|
|
|
19
23
|
if (known) {
|
|
20
24
|
return known;
|
|
21
25
|
}
|
|
26
|
+
const relay = new Relay((batch) => {
|
|
27
|
+
if (!contents.isDestroyed()) {
|
|
28
|
+
contents.send("socket:events", batch);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
22
31
|
const connections = new Connections((id, event) => {
|
|
23
32
|
if (log && event.type !== "data") {
|
|
24
33
|
log(socketLine(id, event.type === "error" ? `error: ${event.message}` : event.type));
|
|
@@ -26,26 +35,33 @@ export function bridgeSockets(trusted, permit, log = null, data = false, options
|
|
|
26
35
|
else if (log && data && event.type === "data") {
|
|
27
36
|
log(socketDataLine(id, false, event.bytes));
|
|
28
37
|
}
|
|
29
|
-
if (
|
|
30
|
-
|
|
38
|
+
if (event.type === "data") {
|
|
39
|
+
relay.bytes(id, event.bytes, dataEvent);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
relay.push(id, event);
|
|
31
43
|
}
|
|
32
44
|
}, options);
|
|
33
45
|
pages.set(contents, connections);
|
|
34
46
|
contents.on("did-start-navigation", (details) => {
|
|
35
47
|
if (details.isMainFrame && !details.isSameDocument) {
|
|
36
48
|
connections.closeAll();
|
|
49
|
+
relay.drop();
|
|
37
50
|
}
|
|
38
51
|
});
|
|
39
52
|
contents.once("destroyed", () => {
|
|
40
53
|
connections.closeAll();
|
|
54
|
+
relay.drop();
|
|
41
55
|
pages.delete(contents);
|
|
42
56
|
});
|
|
43
57
|
return connections;
|
|
44
58
|
};
|
|
45
|
-
ipcMain.on("socket:connect", (event, id, host, port) => {
|
|
59
|
+
ipcMain.on("socket:connect", (event, id, host, port, asked) => {
|
|
46
60
|
if (!trusted(event) || typeof id !== "number") {
|
|
47
61
|
return;
|
|
48
62
|
}
|
|
63
|
+
// At once unless the SWF set tcpNoDelay to false (connections.ts).
|
|
64
|
+
const noDelay = asked !== false;
|
|
49
65
|
const connections = connectionsOf(event.sender);
|
|
50
66
|
if (!validEndpoint(host, port)) {
|
|
51
67
|
connections.refuse(id);
|
|
@@ -62,7 +78,7 @@ export function bridgeSockets(trusted, permit, log = null, data = false, options
|
|
|
62
78
|
const via = allowed && options.proxy ? " via proxy" : "";
|
|
63
79
|
log?.(socketLine(id, `${allowed ? "connecting to" : "refused"} ${host}:${port}${via}`));
|
|
64
80
|
if (allowed) {
|
|
65
|
-
connections.connect(id, host, port, allowed.address);
|
|
81
|
+
connections.connect(id, host, port, allowed.address, noDelay);
|
|
66
82
|
}
|
|
67
83
|
else {
|
|
68
84
|
connections.refuse(id);
|
package/dist/main/sockets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sockets.js","sourceRoot":"","sources":["../../src/main/sockets.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"sockets.js","sourceRoot":"","sources":["../../src/main/sockets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websockets.d.ts","sourceRoot":"","sources":["../../src/main/websockets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websockets.d.ts","sourceRoot":"","sources":["../../src/main/websockets.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,YAAY,EAA6B,MAAM,UAAU,CAAC;AAIxE,OAAO,EACL,KAAK,MAAM,EAIZ,MAAM,4BAA4B,CAAC;AAMpC;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,EACzC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EAChC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,GAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAW,EAC3C,IAAI,UAAQ,EACZ,GAAG,SAAK,GACP,IAAI,CA6FN"}
|
package/dist/main/websockets.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
// air.net.WebSocket's connections, made here for the page, which has no
|
|
2
2
|
// network of its own, and carried over IPC as flash.net.Socket's are
|
|
3
3
|
// (sockets.ts). Each page's connections (websocket-connections.ts) close
|
|
4
|
-
// as it navigates, reloads or goes
|
|
4
|
+
// as it navigates, reloads or goes, and their events go to it gathered,
|
|
5
|
+
// a message a millisecond at most (relay.ts), each message an event of its
|
|
6
|
+
// own.
|
|
5
7
|
import { ipcMain } from "electron";
|
|
6
8
|
import { webSocketDataLine, webSocketLine } from "./netlog.js";
|
|
9
|
+
import { Relay } from "./relay.js";
|
|
7
10
|
import { validProtocols, validWebSocketUrl, WebSocketConnections, } from "./websocket-connections.js";
|
|
11
|
+
/** About what a message takes to send: a string's UTF-16 is two bytes a unit. */
|
|
12
|
+
const messageSize = (data) => typeof data === "string" ? data.length * 2 : data.length;
|
|
8
13
|
/**
|
|
9
14
|
* Carry WebSocket messages from pages that `trusted` accepts, each
|
|
10
15
|
* connection made only where `permit` allows its URL, with `open` if
|
|
@@ -20,6 +25,11 @@ export function bridgeWebSockets(trusted, permit, open, log = null, data = false
|
|
|
20
25
|
if (known) {
|
|
21
26
|
return known;
|
|
22
27
|
}
|
|
28
|
+
const relay = new Relay((batch) => {
|
|
29
|
+
if (!contents.isDestroyed()) {
|
|
30
|
+
contents.send("websocket:events", batch);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
23
33
|
const connections = new WebSocketConnections((id, event) => {
|
|
24
34
|
if (log) {
|
|
25
35
|
switch (event.type) {
|
|
@@ -39,18 +49,18 @@ export function bridgeWebSockets(trusted, permit, open, log = null, data = false
|
|
|
39
49
|
break;
|
|
40
50
|
}
|
|
41
51
|
}
|
|
42
|
-
|
|
43
|
-
contents.send("websocket:event", id, event);
|
|
44
|
-
}
|
|
52
|
+
relay.push(id, event, event.type === "message" ? messageSize(event.data) : 0);
|
|
45
53
|
}, open);
|
|
46
54
|
pages.set(contents, connections);
|
|
47
55
|
contents.on("did-start-navigation", (details) => {
|
|
48
56
|
if (details.isMainFrame && !details.isSameDocument) {
|
|
49
57
|
connections.closeAll();
|
|
58
|
+
relay.drop();
|
|
50
59
|
}
|
|
51
60
|
});
|
|
52
61
|
contents.once("destroyed", () => {
|
|
53
62
|
connections.closeAll();
|
|
63
|
+
relay.drop();
|
|
54
64
|
pages.delete(contents);
|
|
55
65
|
});
|
|
56
66
|
return connections;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websockets.js","sourceRoot":"","sources":["../../src/main/websockets.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,qEAAqE;AACrE,yEAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"websockets.js","sourceRoot":"","sources":["../../src/main/websockets.ts"],"names":[],"mappings":"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"}
|
package/dist/preload/preload.cjs
CHANGED
|
@@ -34,15 +34,16 @@ const api = {
|
|
|
34
34
|
openDropped: (file) => ipcRenderer.send("desktop:open-path", webUtils.getPathForFile(file)),
|
|
35
35
|
chooseLibrary: (name) => ipcRenderer.send("desktop:choose-library", name),
|
|
36
36
|
sockets: {
|
|
37
|
-
connect: (host, port) => {
|
|
37
|
+
connect: (host, port, noDelay) => {
|
|
38
38
|
const id = nextSocket++;
|
|
39
|
-
|
|
39
|
+
const asked = typeof noDelay === "boolean" ? noDelay : undefined;
|
|
40
|
+
ipcRenderer.send("socket:connect", id, String(host), Number(port), asked);
|
|
40
41
|
return id;
|
|
41
42
|
},
|
|
42
43
|
send: (id, bytes) => ipcRenderer.send("socket:send", id, bytes),
|
|
43
44
|
close: (id) => ipcRenderer.send("socket:close", id),
|
|
44
|
-
|
|
45
|
-
ipcRenderer.on("socket:
|
|
45
|
+
onEvents: (listener) => {
|
|
46
|
+
ipcRenderer.on("socket:events", (_event, events) => listener(events));
|
|
46
47
|
},
|
|
47
48
|
},
|
|
48
49
|
webSockets: {
|
|
@@ -53,8 +54,8 @@ const api = {
|
|
|
53
54
|
},
|
|
54
55
|
send: (id, data) => ipcRenderer.send("websocket:send", id, data),
|
|
55
56
|
close: (id, code) => ipcRenderer.send("websocket:close", id, code),
|
|
56
|
-
|
|
57
|
-
ipcRenderer.on("websocket:
|
|
57
|
+
onEvents: (listener) => {
|
|
58
|
+
ipcRenderer.on("websocket:events", (_event, events) => listener(events));
|
|
58
59
|
},
|
|
59
60
|
},
|
|
60
61
|
network: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.cjs","sourceRoot":"","sources":["../../src/preload/preload.cts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"preload.cjs","sourceRoot":"","sources":["../../src/preload/preload.cts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sockets.d.ts","sourceRoot":"","sources":["../../src/renderer/sockets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"sockets.d.ts","sourceRoot":"","sources":["../../src/renderer/sockets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CA6CnE"}
|
package/dist/renderer/sockets.js
CHANGED
|
@@ -1,30 +1,40 @@
|
|
|
1
1
|
export function shellSocketHost(sockets) {
|
|
2
2
|
// Until its close, which the shell sends after an error and after a close asked for.
|
|
3
3
|
const open = new Map();
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
4
|
+
// A batch is one task: its events go to their connections in one loop.
|
|
5
|
+
sockets.onEvents((batch) => {
|
|
6
|
+
for (let i = 0; i < batch.length; i++) {
|
|
7
|
+
const [id, event] = batch[i];
|
|
8
|
+
const events = open.get(id);
|
|
9
|
+
if (!events) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
// One that throws leaves the rest to run, as when each came in a message of its own.
|
|
13
|
+
try {
|
|
14
|
+
switch (event.type) {
|
|
15
|
+
case "open":
|
|
16
|
+
events.open(event);
|
|
17
|
+
break;
|
|
18
|
+
case "data":
|
|
19
|
+
events.data(event.bytes);
|
|
20
|
+
break;
|
|
21
|
+
case "error":
|
|
22
|
+
events.error(event.message);
|
|
23
|
+
break;
|
|
24
|
+
case "close":
|
|
25
|
+
open.delete(id);
|
|
26
|
+
events.close();
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
reportError(error);
|
|
32
|
+
}
|
|
23
33
|
}
|
|
24
34
|
});
|
|
25
35
|
return {
|
|
26
|
-
connect(host, port, events) {
|
|
27
|
-
const id = sockets.connect(host, port);
|
|
36
|
+
connect(host, port, events, options) {
|
|
37
|
+
const id = sockets.connect(host, port, options?.noDelay);
|
|
28
38
|
open.set(id, events);
|
|
29
39
|
return {
|
|
30
40
|
send: (bytes) => sockets.send(id, bytes),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sockets.js","sourceRoot":"","sources":["../../src/renderer/sockets.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,qFAAqF;IACrF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC7C,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"sockets.js","sourceRoot":"","sources":["../../src/renderer/sockets.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,qFAAqF;IACrF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC7C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YAED,qFAAqF;YACrF,IAAI,CAAC;gBACH,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,MAAM;wBACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACnB,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACzB,MAAM;oBACR,KAAK,OAAO;wBACV,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC5B,MAAM;oBACR,KAAK,OAAO;wBACV,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM;gBACV,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,WAAW,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;YACjC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACrB,OAAO;gBACL,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;gBACxC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websockets.d.ts","sourceRoot":"","sources":["../../src/renderer/websockets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"websockets.d.ts","sourceRoot":"","sources":["../../src/renderer/websockets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,aAAa,CA6C/E"}
|
|
@@ -1,25 +1,35 @@
|
|
|
1
1
|
export function shellWebSocketHost(webSockets) {
|
|
2
2
|
// Until its close, which the shell sends after a failure too.
|
|
3
3
|
const open = new Map();
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
4
|
+
// A batch is one task: its events, a message each, go to their connections in one loop.
|
|
5
|
+
webSockets.onEvents((batch) => {
|
|
6
|
+
for (let i = 0; i < batch.length; i++) {
|
|
7
|
+
const [id, event] = batch[i];
|
|
8
|
+
const events = open.get(id);
|
|
9
|
+
if (!events) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
// One that throws leaves the rest to run, as when each came in a message of its own.
|
|
13
|
+
try {
|
|
14
|
+
switch (event.type) {
|
|
15
|
+
case "open":
|
|
16
|
+
events.open(event.protocol);
|
|
17
|
+
break;
|
|
18
|
+
case "message":
|
|
19
|
+
events.message(event.data);
|
|
20
|
+
break;
|
|
21
|
+
case "error":
|
|
22
|
+
events.error();
|
|
23
|
+
break;
|
|
24
|
+
case "close":
|
|
25
|
+
open.delete(id);
|
|
26
|
+
events.close(event.code);
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
reportError(error);
|
|
32
|
+
}
|
|
23
33
|
}
|
|
24
34
|
});
|
|
25
35
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websockets.js","sourceRoot":"","sources":["../../src/renderer/websockets.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,kBAAkB,CAAC,UAA6B;IAC9D,8DAA8D;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;IAChD,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"websockets.js","sourceRoot":"","sources":["../../src/renderer/websockets.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,kBAAkB,CAAC,UAA6B;IAC9D,8DAA8D;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;IAChD,wFAAwF;IACxF,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YAED,qFAAqF;YACrF,IAAI,CAAC;gBACH,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,MAAM;wBACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAC5B,MAAM;oBACR,KAAK,SAAS;wBACZ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3B,MAAM;oBACR,KAAK,OAAO;wBACV,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM;oBACR,KAAK,OAAO;wBACV,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAChB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACzB,MAAM;gBACV,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,WAAW,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM;YAC5B,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACrB,OAAO;gBACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;gBACzC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC;aAC5C,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|