@swf2es/desktop 0.1.15 → 0.1.17

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.
Files changed (86) hide show
  1. package/README.md +85 -12
  2. package/dist/launch/launch.js +4 -1
  3. package/dist/launch/launch.js.map +1 -1
  4. package/dist/main/air.d.ts +3 -3
  5. package/dist/main/air.d.ts.map +1 -1
  6. package/dist/main/air.js +17 -8
  7. package/dist/main/air.js.map +1 -1
  8. package/dist/main/case-paths.d.ts +12 -0
  9. package/dist/main/case-paths.d.ts.map +1 -0
  10. package/dist/main/case-paths.js +84 -0
  11. package/dist/main/case-paths.js.map +1 -0
  12. package/dist/main/connections.d.ts +20 -1
  13. package/dist/main/connections.d.ts.map +1 -1
  14. package/dist/main/connections.js +71 -8
  15. package/dist/main/connections.js.map +1 -1
  16. package/dist/main/main.js +133 -9
  17. package/dist/main/main.js.map +1 -1
  18. package/dist/main/netlog.d.ts +21 -0
  19. package/dist/main/netlog.d.ts.map +1 -0
  20. package/dist/main/netlog.js +90 -0
  21. package/dist/main/netlog.js.map +1 -0
  22. package/dist/main/network.d.ts +10 -0
  23. package/dist/main/network.d.ts.map +1 -1
  24. package/dist/main/network.js +111 -35
  25. package/dist/main/network.js.map +1 -1
  26. package/dist/main/proxy.d.ts +48 -0
  27. package/dist/main/proxy.d.ts.map +1 -0
  28. package/dist/main/proxy.js +402 -0
  29. package/dist/main/proxy.js.map +1 -0
  30. package/dist/main/sandbox.d.ts.map +1 -1
  31. package/dist/main/sandbox.js +2 -1
  32. package/dist/main/sandbox.js.map +1 -1
  33. package/dist/main/settings.d.ts +2 -0
  34. package/dist/main/settings.d.ts.map +1 -1
  35. package/dist/main/settings.js +4 -0
  36. package/dist/main/settings.js.map +1 -1
  37. package/dist/main/sockets.d.ts +6 -2
  38. package/dist/main/sockets.d.ts.map +1 -1
  39. package/dist/main/sockets.js +18 -3
  40. package/dist/main/sockets.js.map +1 -1
  41. package/dist/main/websocket-connections.d.ts +73 -0
  42. package/dist/main/websocket-connections.d.ts.map +1 -0
  43. package/dist/main/websocket-connections.js +266 -0
  44. package/dist/main/websocket-connections.js.map +1 -0
  45. package/dist/main/websockets.d.ts +12 -0
  46. package/dist/main/websockets.d.ts.map +1 -0
  47. package/dist/main/websockets.js +94 -0
  48. package/dist/main/websockets.js.map +1 -0
  49. package/dist/preload/preload.cjs +20 -0
  50. package/dist/preload/preload.cjs.map +1 -1
  51. package/dist/renderer/air.d.ts.map +1 -1
  52. package/dist/renderer/air.js +1 -0
  53. package/dist/renderer/air.js.map +1 -1
  54. package/dist/renderer/full-screen.d.ts +4 -0
  55. package/dist/renderer/full-screen.d.ts.map +1 -0
  56. package/dist/renderer/full-screen.js +32 -0
  57. package/dist/renderer/full-screen.js.map +1 -0
  58. package/dist/renderer/index.d.ts.map +1 -1
  59. package/dist/renderer/index.js +4 -0
  60. package/dist/renderer/index.js.map +1 -1
  61. package/dist/renderer/websockets.d.ts +4 -0
  62. package/dist/renderer/websockets.d.ts.map +1 -0
  63. package/dist/renderer/websockets.js +36 -0
  64. package/dist/renderer/websockets.js.map +1 -0
  65. package/dist/shared/api.d.ts +53 -0
  66. package/dist/shared/api.d.ts.map +1 -1
  67. package/package.json +7 -7
  68. package/src/launch/launch.ts +5 -2
  69. package/src/main/air.ts +18 -8
  70. package/src/main/case-paths.ts +97 -0
  71. package/src/main/connections.ts +90 -8
  72. package/src/main/main.ts +174 -10
  73. package/src/main/netlog.ts +108 -0
  74. package/src/main/network.ts +140 -37
  75. package/src/main/proxy.ts +497 -0
  76. package/src/main/sandbox.ts +2 -1
  77. package/src/main/settings.ts +5 -0
  78. package/src/main/sockets.ts +22 -3
  79. package/src/main/websocket-connections.ts +344 -0
  80. package/src/main/websockets.ts +117 -0
  81. package/src/preload/preload.cts +23 -0
  82. package/src/renderer/air.ts +1 -0
  83. package/src/renderer/full-screen.ts +44 -0
  84. package/src/renderer/index.ts +4 -0
  85. package/src/renderer/websockets.ts +43 -0
  86. package/src/shared/api.ts +40 -0
@@ -0,0 +1,73 @@
1
+ import type { WebSocketEvent } from "../shared/api.js";
2
+ import { type ProxyConfig } from "./proxy.ts";
3
+ /**
4
+ * The bytes a connection may hold unsent, as a socket's (connections.ts)
5
+ * but for whole messages, which are larger than a socket's writes: a peer
6
+ * that stops reading would otherwise have the main process buffer all an
7
+ * application sends. Past this the connection fails.
8
+ */
9
+ export declare const MAX_BUFFERED: number;
10
+ /** Opens a client; throws as the WebSocket constructor does. */
11
+ export type Opener = (url: string, protocols: string[]) => unknown;
12
+ /** Whether this Node has the WHATWG WebSocket (22 and later, Electron's among them). */
13
+ export declare function hasWebSocket(): boolean;
14
+ /**
15
+ * What sends a client's requests with no certificate verified, for
16
+ * --ignore-certificate-errors; null where this Node gives no way to make
17
+ * one. The WHATWG WebSocket has no option for it: Node's is undici's,
18
+ * which takes a dispatcher, and Node exports no class of one, so it is
19
+ * made from the class of the dispatcher undici keeps for everything else.
20
+ */
21
+ export declare function unverifiedDispatcher(): unknown;
22
+ /**
23
+ * What sends every client's requests through `proxy` (--proxy): a tunnel to
24
+ * the URL's host, by name for the proxy to resolve, and TLS over it for
25
+ * wss:, its certificate unverified where `unverified` says so of its host.
26
+ * `warn` is told why a proxy did not make one. Null where this Node gives
27
+ * no way to make one, as unverifiedDispatcher.
28
+ */
29
+ export declare function proxiedDispatcher(proxy: ProxyConfig, unverified: (host: string) => boolean, warn?: (message: string) => void): unknown;
30
+ /** An opener whose every connection is `dispatcher`'s: proxiedDispatcher's. */
31
+ export declare function dispatchedOpener(dispatcher: unknown): Opener;
32
+ /**
33
+ * An opener that leaves a wss: server's certificate unverified where
34
+ * `unverified` says so of its host, through `dispatcher`
35
+ * (unverifiedDispatcher's); any other connection is the global's as it is.
36
+ */
37
+ export declare function webSocketOpener(unverified: (host: string) => boolean, dispatcher: unknown): Opener;
38
+ /** Whether the page asked for a ws: or wss: URL with a host, of a length a server takes. */
39
+ export declare function validWebSocketUrl(url: unknown): url is string;
40
+ export declare function validProtocols(protocols: unknown): protocols is string[];
41
+ export declare class WebSocketConnections {
42
+ private readonly clients;
43
+ private readonly tell;
44
+ private readonly open;
45
+ /** `tell` carries each connection's events to its page; `open` makes a client, the global's by default. */
46
+ constructor(tell: (id: number, event: WebSocketEvent) => void, open?: Opener);
47
+ get size(): number;
48
+ /** Counts closeAll's: a connection decided on before one belongs to a page that is gone. */
49
+ generation: number;
50
+ /**
51
+ * Connect `id` to `url`, offering `protocols`, each checked, as the page
52
+ * asks; a refusal, a URL or protocols the client throws for among them,
53
+ * is an error, then a close.
54
+ */
55
+ connect(id: number, url: unknown, protocols: unknown): void;
56
+ /**
57
+ * Send a text message for a string, a binary one for bytes, once the
58
+ * connection is open, unless the peer has left more than MAX_BUFFERED
59
+ * unread: then the connection fails.
60
+ */
61
+ send(id: number, data: string | Uint8Array): void;
62
+ /** Refuse `id`, as a server that took no connection: an error, then a close with no frame. */
63
+ refuse(id: number): void;
64
+ /** A close frame with `code` where the client sends it, 1000 or 3000 to 4999, else with none. */
65
+ close(id: number, code?: unknown): void;
66
+ /**
67
+ * Close every connection without a word: the page that held them is
68
+ * gone, and the next numbers its own from 1.
69
+ */
70
+ closeAll(): void;
71
+ private silence;
72
+ }
73
+ //# sourceMappingURL=websocket-connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-connections.d.ts","sourceRoot":"","sources":["../../src/main/websocket-connections.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAkB,KAAK,WAAW,EAAmB,MAAM,YAAY,CAAC;AAU/E;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAAmB,CAAC;AAwB7C,gEAAgE;AAChE,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;AAKnE,wFAAwF;AACxF,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAc9C;AAkBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACrC,IAAI,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAe,GACzC,OAAO,CA8CT;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAK5D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACrC,UAAU,EAAE,OAAO,GAClB,MAAM,CASR;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAW7D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI,MAAM,EAAE,CAMxE;AAMD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8C;IACnE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B,2GAA2G;IAC3G,YACE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI,EACjD,IAAI,GAAE,MAAsF,EAI7F;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,4FAA4F;IAC5F,UAAU,SAAK;IAEf;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAqC1D;IAED;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAkBhD;IAED,8FAA8F;IAC9F,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGvB;IAED,iGAAiG;IACjG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAWtC;IAED;;;OAGG;IACH,QAAQ,IAAI,IAAI,CAOf;IAED,OAAO,CAAC,OAAO;CAWhB"}
@@ -0,0 +1,266 @@
1
+ // One page's air.net.WebSocket connections, made with the WHATWG WebSocket
2
+ // of Electron's Node: what the WebSocket bridge (websockets.ts) holds for
3
+ // each page, apart from Electron so that node runs it in the tests
4
+ // (tests/desktop/websocket-connections.test.ts).
5
+ import { isIP } from "node:net";
6
+ import * as tls from "node:tls";
7
+ import { connectThrough } from "./proxy.js";
8
+ /** As many as a page may hold open at once; past it a connection is refused. */
9
+ const MAX_OPEN = 64;
10
+ /** The longest URL, and the most and longest subprotocols, a page may ask for. */
11
+ const MAX_URL = 8192;
12
+ const MAX_PROTOCOLS = 32;
13
+ const MAX_PROTOCOL = 256;
14
+ /**
15
+ * The bytes a connection may hold unsent, as a socket's (connections.ts)
16
+ * but for whole messages, which are larger than a socket's writes: a peer
17
+ * that stops reading would otherwise have the main process buffer all an
18
+ * application sends. Past this the connection fails.
19
+ */
20
+ export const MAX_BUFFERED = 16 * 1024 * 1024;
21
+ const OPEN = 1;
22
+ const globalClient = () => globalThis.WebSocket;
23
+ /** Whether this Node has the WHATWG WebSocket (22 and later, Electron's among them). */
24
+ export function hasWebSocket() {
25
+ return typeof globalClient() === "function";
26
+ }
27
+ /**
28
+ * What sends a client's requests with no certificate verified, for
29
+ * --ignore-certificate-errors; null where this Node gives no way to make
30
+ * one. The WHATWG WebSocket has no option for it: Node's is undici's,
31
+ * which takes a dispatcher, and Node exports no class of one, so it is
32
+ * made from the class of the dispatcher undici keeps for everything else.
33
+ */
34
+ export function unverifiedDispatcher() {
35
+ const Agent = agentClass();
36
+ if (!Agent) {
37
+ return null;
38
+ }
39
+ try {
40
+ const agent = new Agent({
41
+ connect: { rejectUnauthorized: false },
42
+ });
43
+ return typeof agent.dispatch === "function" ? agent : null;
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ }
49
+ /** undici's Agent, the class of the dispatcher it keeps for everything else; null where none. */
50
+ function agentClass() {
51
+ // Naming the global loads undici, which then sets its dispatcher.
52
+ if (!hasWebSocket()) {
53
+ return null;
54
+ }
55
+ const shared = globalThis[Symbol.for("undici.globalDispatcher.1")];
56
+ const Agent = shared?.constructor;
57
+ return typeof Agent === "function" && Agent.name === "Agent"
58
+ ? Agent
59
+ : null;
60
+ }
61
+ /**
62
+ * What sends every client's requests through `proxy` (--proxy): a tunnel to
63
+ * the URL's host, by name for the proxy to resolve, and TLS over it for
64
+ * wss:, its certificate unverified where `unverified` says so of its host.
65
+ * `warn` is told why a proxy did not make one. Null where this Node gives
66
+ * no way to make one, as unverifiedDispatcher.
67
+ */
68
+ export function proxiedDispatcher(proxy, unverified, warn = () => { }) {
69
+ const Agent = agentClass();
70
+ if (!Agent) {
71
+ return null;
72
+ }
73
+ // undici's connector: its options name the target, and its callback takes the socket made.
74
+ const connect = (options, done) => {
75
+ const host = options.hostname.replace(/^\[(.*)\]$/, "$1").toLowerCase();
76
+ const https = options.protocol === "https:";
77
+ const port = Number(options.port) || (https ? 443 : 80);
78
+ connectThrough(proxy, host, port).then((tunnel) => {
79
+ if (!https) {
80
+ done(null, tunnel);
81
+ return;
82
+ }
83
+ const secure = tls.connect({
84
+ socket: tunnel,
85
+ servername: isIP(host) ? undefined : (options.servername ?? host),
86
+ ALPNProtocols: ["http/1.1"],
87
+ ...(unverified(host) ? { rejectUnauthorized: false } : {}),
88
+ });
89
+ const failed = (error) => done(error, null);
90
+ secure.once("error", failed);
91
+ secure.once("secureConnect", () => {
92
+ secure.removeListener("error", failed);
93
+ done(null, secure);
94
+ });
95
+ }, (error) => {
96
+ warn(`no WebSocket to ${host}:${port}: ${error.message}`);
97
+ done(error, null);
98
+ });
99
+ };
100
+ try {
101
+ const agent = new Agent({ connect });
102
+ return typeof agent.dispatch === "function" ? agent : null;
103
+ }
104
+ catch {
105
+ return null;
106
+ }
107
+ }
108
+ /** An opener whose every connection is `dispatcher`'s: proxiedDispatcher's. */
109
+ export function dispatchedOpener(dispatcher) {
110
+ return (url, protocols) => {
111
+ const Client = globalClient();
112
+ return new Client(url, { protocols, dispatcher });
113
+ };
114
+ }
115
+ /**
116
+ * An opener that leaves a wss: server's certificate unverified where
117
+ * `unverified` says so of its host, through `dispatcher`
118
+ * (unverifiedDispatcher's); any other connection is the global's as it is.
119
+ */
120
+ export function webSocketOpener(unverified, dispatcher) {
121
+ return (url, protocols) => {
122
+ const Client = globalClient();
123
+ const parsed = new URL(url);
124
+ const host = parsed.hostname.replace(/^\[(.*)\]$/, "$1").toLowerCase();
125
+ return dispatcher && parsed.protocol === "wss:" && unverified(host)
126
+ ? new Client(url, { protocols, dispatcher })
127
+ : new Client(url, protocols);
128
+ };
129
+ }
130
+ /** Whether the page asked for a ws: or wss: URL with a host, of a length a server takes. */
131
+ export function validWebSocketUrl(url) {
132
+ if (typeof url !== "string" || url.length > MAX_URL) {
133
+ return false;
134
+ }
135
+ try {
136
+ const parsed = new URL(url);
137
+ return (parsed.protocol === "ws:" || parsed.protocol === "wss:") && parsed.hostname !== "";
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ }
143
+ export function validProtocols(protocols) {
144
+ return (Array.isArray(protocols) &&
145
+ protocols.length <= MAX_PROTOCOLS &&
146
+ protocols.every((p) => typeof p === "string" && p.length <= MAX_PROTOCOL));
147
+ }
148
+ /** The close codes the WHATWG WebSocket sends; any other throws. */
149
+ const sendable = (code) => code === 1000 || (typeof code === "number" && code >= 3000 && code <= 4999);
150
+ export class WebSocketConnections {
151
+ clients = new Map();
152
+ tell;
153
+ open;
154
+ /** `tell` carries each connection's events to its page; `open` makes a client, the global's by default. */
155
+ constructor(tell, open = (url, protocols) => new (globalClient())(url, protocols)) {
156
+ this.tell = tell;
157
+ this.open = open;
158
+ }
159
+ get size() {
160
+ return this.clients.size;
161
+ }
162
+ /** Counts closeAll's: a connection decided on before one belongs to a page that is gone. */
163
+ generation = 0;
164
+ /**
165
+ * Connect `id` to `url`, offering `protocols`, each checked, as the page
166
+ * asks; a refusal, a URL or protocols the client throws for among them,
167
+ * is an error, then a close.
168
+ */
169
+ connect(id, url, protocols) {
170
+ if (!validWebSocketUrl(url) ||
171
+ !validProtocols(protocols) ||
172
+ this.clients.has(id) ||
173
+ this.clients.size >= MAX_OPEN ||
174
+ !hasWebSocket()) {
175
+ this.refuse(id);
176
+ return;
177
+ }
178
+ let client;
179
+ try {
180
+ client = this.open(url, protocols);
181
+ }
182
+ catch {
183
+ this.refuse(id);
184
+ return;
185
+ }
186
+ client.binaryType = "arraybuffer";
187
+ this.clients.set(id, client);
188
+ client.onopen = () => this.tell(id, { type: "open", protocol: client.protocol });
189
+ client.onmessage = ({ data }) => this.tell(id, {
190
+ type: "message",
191
+ data: typeof data === "string" ? data : new Uint8Array(data),
192
+ });
193
+ client.onerror = () => this.tell(id, { type: "error" });
194
+ client.onclose = ({ code }) => {
195
+ // Only the client under this id: a page that reused it has another by now.
196
+ if (this.clients.get(id) === client) {
197
+ this.clients.delete(id);
198
+ }
199
+ this.tell(id, { type: "close", code });
200
+ };
201
+ }
202
+ /**
203
+ * Send a text message for a string, a binary one for bytes, once the
204
+ * connection is open, unless the peer has left more than MAX_BUFFERED
205
+ * unread: then the connection fails.
206
+ */
207
+ send(id, data) {
208
+ const client = this.clients.get(id);
209
+ if (!client || client.readyState !== OPEN) {
210
+ return;
211
+ }
212
+ const size = typeof data === "string" ? Buffer.byteLength(data) : data.length;
213
+ if (client.bufferedAmount + size > MAX_BUFFERED) {
214
+ // The client has no way to drop a connection: its close waits behind
215
+ // what is buffered, so the page is told now and the client left to it.
216
+ this.silence(client);
217
+ this.clients.delete(id);
218
+ this.tell(id, { type: "error" });
219
+ this.tell(id, { type: "close", code: 1006 });
220
+ return;
221
+ }
222
+ client.send(data);
223
+ }
224
+ /** Refuse `id`, as a server that took no connection: an error, then a close with no frame. */
225
+ refuse(id) {
226
+ this.tell(id, { type: "error" });
227
+ this.tell(id, { type: "close", code: 1006 });
228
+ }
229
+ /** A close frame with `code` where the client sends it, 1000 or 3000 to 4999, else with none. */
230
+ close(id, code) {
231
+ const client = this.clients.get(id);
232
+ if (!client) {
233
+ return;
234
+ }
235
+ try {
236
+ client.close(sendable(code) ? code : undefined);
237
+ }
238
+ catch {
239
+ // Already closing.
240
+ }
241
+ }
242
+ /**
243
+ * Close every connection without a word: the page that held them is
244
+ * gone, and the next numbers its own from 1.
245
+ */
246
+ closeAll() {
247
+ for (const client of this.clients.values()) {
248
+ this.silence(client);
249
+ }
250
+ this.clients.clear();
251
+ this.generation++;
252
+ }
253
+ silence(client) {
254
+ client.onopen = null;
255
+ client.onmessage = null;
256
+ client.onerror = null;
257
+ client.onclose = null;
258
+ try {
259
+ client.close();
260
+ }
261
+ catch {
262
+ // Already closing.
263
+ }
264
+ }
265
+ }
266
+ //# sourceMappingURL=websocket-connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-connections.js","sourceRoot":"","sources":["../../src/main/websocket-connections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type IpcMainEvent } from "electron";
2
+ import { type Opener } from "./websocket-connections.ts";
3
+ /**
4
+ * Carry WebSocket messages from pages that `trusted` accepts, each
5
+ * connection made only where `permit` allows its URL, with `open` if
6
+ * given. `log`, where given, is told each connection asked for, opened,
7
+ * refused, failed and closed (--log-network), and with `data` what each
8
+ * sends and receives too (--log-sockets), the connections' lines ending
9
+ * in `via`.
10
+ */
11
+ export declare function bridgeWebSockets(trusted: (event: IpcMainEvent) => boolean, permit: (url: string) => boolean, open: Opener | undefined, log?: ((line: string) => void) | null, data?: boolean, via?: string): void;
12
+ //# sourceMappingURL=websockets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websockets.d.ts","sourceRoot":"","sources":["../../src/main/websockets.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,YAAY,EAA6B,MAAM,UAAU,CAAC;AAExE,OAAO,EACL,KAAK,MAAM,EAIZ,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;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,CAwFN"}
@@ -0,0 +1,94 @@
1
+ // air.net.WebSocket's connections, made here for the page, which has no
2
+ // network of its own, and carried over IPC as flash.net.Socket's are
3
+ // (sockets.ts). Each page's connections (websocket-connections.ts) close
4
+ // as it navigates, reloads or goes.
5
+ import { ipcMain } from "electron";
6
+ import { webSocketDataLine, webSocketLine } from "./netlog.js";
7
+ import { validProtocols, validWebSocketUrl, WebSocketConnections, } from "./websocket-connections.js";
8
+ /**
9
+ * Carry WebSocket messages from pages that `trusted` accepts, each
10
+ * connection made only where `permit` allows its URL, with `open` if
11
+ * given. `log`, where given, is told each connection asked for, opened,
12
+ * refused, failed and closed (--log-network), and with `data` what each
13
+ * sends and receives too (--log-sockets), the connections' lines ending
14
+ * in `via`.
15
+ */
16
+ export function bridgeWebSockets(trusted, permit, open, log = null, data = false, via = "") {
17
+ const pages = new Map();
18
+ const connectionsOf = (contents) => {
19
+ const known = pages.get(contents);
20
+ if (known) {
21
+ return known;
22
+ }
23
+ const connections = new WebSocketConnections((id, event) => {
24
+ if (log) {
25
+ switch (event.type) {
26
+ case "open":
27
+ log(webSocketLine(id, event.protocol === "" ? "open" : `open ${event.protocol}`));
28
+ break;
29
+ case "message":
30
+ if (data) {
31
+ log(webSocketDataLine(id, false, event.data));
32
+ }
33
+ break;
34
+ case "close":
35
+ log(webSocketLine(id, `close ${event.code}`));
36
+ break;
37
+ case "error":
38
+ log(webSocketLine(id, "error"));
39
+ break;
40
+ }
41
+ }
42
+ if (!contents.isDestroyed()) {
43
+ contents.send("websocket:event", id, event);
44
+ }
45
+ }, open);
46
+ pages.set(contents, connections);
47
+ contents.on("did-start-navigation", (details) => {
48
+ if (details.isMainFrame && !details.isSameDocument) {
49
+ connections.closeAll();
50
+ }
51
+ });
52
+ contents.once("destroyed", () => {
53
+ connections.closeAll();
54
+ pages.delete(contents);
55
+ });
56
+ return connections;
57
+ };
58
+ ipcMain.on("websocket:connect", (event, id, url, protocols) => {
59
+ if (!trusted(event) || typeof id !== "number") {
60
+ return;
61
+ }
62
+ const connections = connectionsOf(event.sender);
63
+ if (!validWebSocketUrl(url) || !validProtocols(protocols)) {
64
+ connections.refuse(id);
65
+ return;
66
+ }
67
+ // As the client will read it: what is said of it has nothing a terminal would act on.
68
+ const href = new URL(url).href;
69
+ const allowed = permit(href);
70
+ log?.(webSocketLine(id, `${allowed ? `connecting to ${href}${via}` : `refused ${href}`}`));
71
+ if (allowed) {
72
+ connections.connect(id, href, protocols);
73
+ }
74
+ else {
75
+ connections.refuse(id);
76
+ }
77
+ });
78
+ ipcMain.on("websocket:send", (event, id, message) => {
79
+ if (trusted(event) &&
80
+ typeof id === "number" &&
81
+ (typeof message === "string" || message instanceof Uint8Array)) {
82
+ if (log && data) {
83
+ log(webSocketDataLine(id, true, message));
84
+ }
85
+ pages.get(event.sender)?.send(id, message);
86
+ }
87
+ });
88
+ ipcMain.on("websocket:close", (event, id, code) => {
89
+ if (trusted(event) && typeof id === "number") {
90
+ pages.get(event.sender)?.close(id, code);
91
+ }
92
+ });
93
+ }
94
+ //# sourceMappingURL=websockets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websockets.js","sourceRoot":"","sources":["../../src/main/websockets.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const { contextBridge, ipcRenderer, webUtils } = require("electron");
4
4
  let nextSocket = 1;
5
+ let nextWebSocket = 1;
5
6
  let nextRequest = 1;
6
7
  /** The requests waiting for their response, by number. */
7
8
  const responses = new Map();
@@ -14,6 +15,12 @@ const api = {
14
15
  write: (id, bytes) => ipcRenderer.invoke("files:write", id, bytes),
15
16
  release: (id) => ipcRenderer.send("files:release", id),
16
17
  },
18
+ fullScreen: {
19
+ set: (fullScreen) => ipcRenderer.send("desktop:full-screen", fullScreen === true),
20
+ onChange: (listener) => {
21
+ ipcRenderer.on("desktop:full-screen", (_event, fullScreen) => listener(fullScreen));
22
+ },
23
+ },
17
24
  start: () => ipcRenderer.invoke("desktop:start"),
18
25
  onOpen: (listener) => {
19
26
  ipcRenderer.on("desktop:open", (_event, movie) => listener(movie));
@@ -38,6 +45,18 @@ const api = {
38
45
  ipcRenderer.on("socket:event", (_event, id, event) => listener(id, event));
39
46
  },
40
47
  },
48
+ webSockets: {
49
+ connect: (url, protocols) => {
50
+ const id = nextWebSocket++;
51
+ ipcRenderer.send("websocket:connect", id, String(url), Array.from(protocols, String));
52
+ return id;
53
+ },
54
+ send: (id, data) => ipcRenderer.send("websocket:send", id, data),
55
+ close: (id, code) => ipcRenderer.send("websocket:close", id, code),
56
+ onEvent: (listener) => {
57
+ ipcRenderer.on("websocket:event", (_event, id, event) => listener(id, event));
58
+ },
59
+ },
41
60
  network: {
42
61
  fetch: (request, cancel) => {
43
62
  const id = nextRequest++;
@@ -76,6 +95,7 @@ const api = {
76
95
  remove: (path) => ipcRenderer.sendSync("air:remove", String(path)),
77
96
  move: (from, to) => ipcRenderer.sendSync("air:move", String(from), String(to)),
78
97
  window: () => ipcRenderer.sendSync("air:window"),
98
+ screens: () => ipcRenderer.sendSync("air:screens"),
79
99
  setBounds: (bounds) => ipcRenderer.send("air:set-bounds", bounds),
80
100
  setTitle: (title) => ipcRenderer.send("air:set-title", String(title)),
81
101
  minimize: () => ipcRenderer.send("air:window-do", "minimize"),
@@ -1 +1 @@
1
- {"version":3,"file":"preload.cjs","sourceRoot":"","sources":["../../src/preload/preload.cts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preload.cjs","sourceRoot":"","sources":["../../src/preload/preload.cts"],"names":[],"mappings":";;AAYA,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAA8B,CAAC;AAElG,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,0DAA0D;AAC1D,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+C,CAAC;AACzE,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAU,EAAE,QAAyB,EAAE,EAAE,CAC/E,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAC9B,CAAC;AAEF,MAAM,GAAG,GAAe;IACtB,KAAK,EAAE;QACL,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC;QACpF,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC;QACtD,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QAClD,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC;QAClE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;KACvD;IACD,UAAU,EAAE;QACV,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,KAAK,IAAI,CAAC;QACjF,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;YACrB,WAAW,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE,UAAmB,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/F,CAAC;KACF;IACD,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC;IAChD,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;QACnB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,KAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QACpB,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACzD,aAAa,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC;IAChE,mEAAmE;IACnE,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3F,aAAa,EAAE,CAAC,IAAiB,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC;IACtF,OAAO,EAAE;QACP,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACnE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC;QAC/D,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAU,EAAE,KAAkB,EAAE,EAAE,CACxE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CACpB,CAAC;QACJ,CAAC;KACF;IACD,UAAU,EAAE;QACV,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACtF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC;QAChE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC;QAClE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpB,WAAW,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAU,EAAE,KAAqB,EAAE,EAAE,CAC9E,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CACpB,CAAC;QACJ,CAAC;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzB,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YAChD,mFAAmF;YACnF,OAAO,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACtD,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;oBAC7B,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACrB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;gBACH,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAC/C,CAAC,EAAE,SAAS,EAA0B,EAAE,EAAE;oBACxC,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;oBACjB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACrB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;KAC1E;IACD,iFAAiF;IACjF,GAAG,EAAE;QACH,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;QACnF,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3E,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACzD,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CACzC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7F,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACrF,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;QAChD,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClD,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;QACjE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACrE,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;QAC7D,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;QAC7D,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;QAC3D,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;QAC7D,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACrF,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;QACvD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/D;CACF,CAAC;AAEF,aAAa,CAAC,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"air.d.ts","sourceRoot":"","sources":["../../src/renderer/air.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,sFAAsF;AACtF,wBAAgB,QAAQ,CACtB,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,UAAU,GACd;IACD,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,cAAc,EAAE,kBAAkB,CAAC;CACpC,CA6CA;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0BrE"}
1
+ {"version":3,"file":"air.d.ts","sourceRoot":"","sources":["../../src/renderer/air.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,sFAAsF;AACtF,wBAAgB,QAAQ,CACtB,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,UAAU,GACd;IACD,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,cAAc,EAAE,kBAAkB,CAAC;CACpC,CA8CA;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0BrE"}
@@ -22,6 +22,7 @@ export function airHosts(launch, air) {
22
22
  close: () => air.close(),
23
23
  stageOffset: () => air.window().contentOffset,
24
24
  },
25
+ screens: () => air.screens(),
25
26
  exit: (code) => air.exit(code),
26
27
  },
27
28
  fileSystem: {
@@ -1 +1 @@
1
- {"version":3,"file":"air.js","sourceRoot":"","sources":["../../src/renderer/air.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"air.js","sourceRoot":"","sources":["../../src/renderer/air.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WindowFullScreen } from "@swf2es/web";
2
+ import type { DesktopFullScreen } from "../shared/api.js";
3
+ export declare function windowFullScreen(shell: DesktopFullScreen): WindowFullScreen;
4
+ //# sourceMappingURL=full-screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-screen.d.ts","sourceRoot":"","sources":["../../src/renderer/full-screen.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB,CAmC3E"}
@@ -0,0 +1,32 @@
1
+ export function windowFullScreen(shell) {
2
+ const listeners = new Set();
3
+ let full = false;
4
+ shell.onChange((fullScreen) => {
5
+ full = fullScreen;
6
+ for (const listener of listeners) {
7
+ listener(fullScreen);
8
+ }
9
+ });
10
+ // In the capture phase: before the SWF's own key handlers, whatever has the focus.
11
+ document.addEventListener("keydown", (event) => {
12
+ if (event.key === "Escape" && full) {
13
+ full = false;
14
+ shell.set(false);
15
+ // No window manager tells of this one sooner than the SWF should hear.
16
+ for (const listener of listeners) {
17
+ listener(false);
18
+ }
19
+ }
20
+ }, true);
21
+ return {
22
+ set: (fullScreen) => {
23
+ full = fullScreen;
24
+ shell.set(fullScreen);
25
+ },
26
+ onChange: (listener) => {
27
+ listeners.add(listener);
28
+ return () => listeners.delete(listener);
29
+ },
30
+ };
31
+ }
32
+ //# sourceMappingURL=full-screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-screen.js","sourceRoot":"","sources":["../../src/renderer/full-screen.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACvD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC3D,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE;QAC5B,IAAI,GAAG,UAAU,CAAC;QAClB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,mFAAmF;IACnF,QAAQ,CAAC,gBAAgB,CACvB,SAAS,EACT,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,EAAE,CAAC;YACnC,IAAI,GAAG,KAAK,CAAC;YACb,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjB,uEAAuE;YACvE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC,EACD,IAAI,CACL,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE;YAClB,IAAI,GAAG,UAAU,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;YACrB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,UAAU,EAA6B,MAAM,kBAAkB,CAAC;AAMzF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,UAAU,EAA6B,MAAM,kBAAkB,CAAC;AAQzF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}