@volter/browser-wali 0.1.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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +20 -0
  3. package/dist/browser-wali-command.d.ts +22 -0
  4. package/dist/browser-wali-command.d.ts.map +1 -0
  5. package/dist/browser-wali-command.js +44 -0
  6. package/dist/browser-wali-command.js.map +1 -0
  7. package/dist/capabilities.d.ts +3 -0
  8. package/dist/capabilities.d.ts.map +1 -0
  9. package/dist/capabilities.js +23 -0
  10. package/dist/capabilities.js.map +1 -0
  11. package/dist/coherent-file-locks.d.ts +23 -0
  12. package/dist/coherent-file-locks.d.ts.map +1 -0
  13. package/dist/coherent-file-locks.js +134 -0
  14. package/dist/coherent-file-locks.js.map +1 -0
  15. package/dist/events.d.ts +30 -0
  16. package/dist/events.d.ts.map +1 -0
  17. package/dist/events.js +289 -0
  18. package/dist/events.js.map +1 -0
  19. package/dist/filesystem-protocol.d.ts +48 -0
  20. package/dist/filesystem-protocol.d.ts.map +1 -0
  21. package/dist/filesystem-protocol.js +27 -0
  22. package/dist/filesystem-protocol.js.map +1 -0
  23. package/dist/filesystem-remote.d.ts +65 -0
  24. package/dist/filesystem-remote.d.ts.map +1 -0
  25. package/dist/filesystem-remote.js +271 -0
  26. package/dist/filesystem-remote.js.map +1 -0
  27. package/dist/filesystem-worker.d.ts +2 -0
  28. package/dist/filesystem-worker.d.ts.map +1 -0
  29. package/dist/filesystem-worker.js +269 -0
  30. package/dist/filesystem-worker.js.map +1 -0
  31. package/dist/filesystem.d.ts +115 -0
  32. package/dist/filesystem.d.ts.map +1 -0
  33. package/dist/filesystem.js +1179 -0
  34. package/dist/filesystem.js.map +1 -0
  35. package/dist/index.d.ts +20 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/inspect.d.ts +7 -0
  40. package/dist/inspect.d.ts.map +1 -0
  41. package/dist/inspect.js +32 -0
  42. package/dist/inspect.js.map +1 -0
  43. package/dist/local-sockets.d.ts +13 -0
  44. package/dist/local-sockets.d.ts.map +1 -0
  45. package/dist/local-sockets.js +139 -0
  46. package/dist/local-sockets.js.map +1 -0
  47. package/dist/loopback-host.d.ts +14 -0
  48. package/dist/loopback-host.d.ts.map +1 -0
  49. package/dist/loopback-host.js +476 -0
  50. package/dist/loopback-host.js.map +1 -0
  51. package/dist/loopback-protocol.d.ts +41 -0
  52. package/dist/loopback-protocol.d.ts.map +1 -0
  53. package/dist/loopback-protocol.js +2 -0
  54. package/dist/loopback-protocol.js.map +1 -0
  55. package/dist/memory.d.ts +39 -0
  56. package/dist/memory.d.ts.map +1 -0
  57. package/dist/memory.js +520 -0
  58. package/dist/memory.js.map +1 -0
  59. package/dist/module-layout.d.ts +9 -0
  60. package/dist/module-layout.d.ts.map +1 -0
  61. package/dist/module-layout.js +105 -0
  62. package/dist/module-layout.js.map +1 -0
  63. package/dist/network-protocol.d.ts +43 -0
  64. package/dist/network-protocol.d.ts.map +1 -0
  65. package/dist/network-protocol.js +26 -0
  66. package/dist/network-protocol.js.map +1 -0
  67. package/dist/network-worker.d.ts +2 -0
  68. package/dist/network-worker.d.ts.map +1 -0
  69. package/dist/network-worker.js +943 -0
  70. package/dist/network-worker.js.map +1 -0
  71. package/dist/network.d.ts +52 -0
  72. package/dist/network.d.ts.map +1 -0
  73. package/dist/network.js +427 -0
  74. package/dist/network.js.map +1 -0
  75. package/dist/process-adapter.d.ts +14 -0
  76. package/dist/process-adapter.d.ts.map +1 -0
  77. package/dist/process-adapter.js +45 -0
  78. package/dist/process-adapter.js.map +1 -0
  79. package/dist/process-bridge.d.ts +54 -0
  80. package/dist/process-bridge.d.ts.map +1 -0
  81. package/dist/process-bridge.js +150 -0
  82. package/dist/process-bridge.js.map +1 -0
  83. package/dist/program.d.ts +49 -0
  84. package/dist/program.d.ts.map +1 -0
  85. package/dist/program.js +204 -0
  86. package/dist/program.js.map +1 -0
  87. package/dist/runtime.d.ts +9 -0
  88. package/dist/runtime.d.ts.map +1 -0
  89. package/dist/runtime.js +528 -0
  90. package/dist/runtime.js.map +1 -0
  91. package/dist/shared-pipes.d.ts +44 -0
  92. package/dist/shared-pipes.d.ts.map +1 -0
  93. package/dist/shared-pipes.js +306 -0
  94. package/dist/shared-pipes.js.map +1 -0
  95. package/dist/snapshot-filesystem.d.ts +31 -0
  96. package/dist/snapshot-filesystem.d.ts.map +1 -0
  97. package/dist/snapshot-filesystem.js +247 -0
  98. package/dist/snapshot-filesystem.js.map +1 -0
  99. package/dist/stdin.d.ts +36 -0
  100. package/dist/stdin.d.ts.map +1 -0
  101. package/dist/stdin.js +143 -0
  102. package/dist/stdin.js.map +1 -0
  103. package/dist/symlink.d.ts +8 -0
  104. package/dist/symlink.d.ts.map +1 -0
  105. package/dist/symlink.js +66 -0
  106. package/dist/symlink.js.map +1 -0
  107. package/dist/system.d.ts +41 -0
  108. package/dist/system.d.ts.map +1 -0
  109. package/dist/system.js +305 -0
  110. package/dist/system.js.map +1 -0
  111. package/dist/thread-coordinator-worker.d.ts +25 -0
  112. package/dist/thread-coordinator-worker.d.ts.map +1 -0
  113. package/dist/thread-coordinator-worker.js +49 -0
  114. package/dist/thread-coordinator-worker.js.map +1 -0
  115. package/dist/thread-worker.d.ts +2 -0
  116. package/dist/thread-worker.d.ts.map +1 -0
  117. package/dist/thread-worker.js +725 -0
  118. package/dist/thread-worker.js.map +1 -0
  119. package/dist/threads.d.ts +44 -0
  120. package/dist/threads.d.ts.map +1 -0
  121. package/dist/threads.js +154 -0
  122. package/dist/threads.js.map +1 -0
  123. package/dist/types.d.ts +112 -0
  124. package/dist/types.d.ts.map +1 -0
  125. package/dist/types.js +2 -0
  126. package/dist/types.js.map +1 -0
  127. package/dist/websocket-peer.d.ts +38 -0
  128. package/dist/websocket-peer.d.ts.map +1 -0
  129. package/dist/websocket-peer.js +407 -0
  130. package/dist/websocket-peer.js.map +1 -0
  131. package/dist/worker-program-protocol.d.ts +71 -0
  132. package/dist/worker-program-protocol.d.ts.map +1 -0
  133. package/dist/worker-program-protocol.js +2 -0
  134. package/dist/worker-program-protocol.js.map +1 -0
  135. package/dist/worker-program-worker.d.ts +2 -0
  136. package/dist/worker-program-worker.d.ts.map +1 -0
  137. package/dist/worker-program-worker.js +109 -0
  138. package/dist/worker-program-worker.js.map +1 -0
  139. package/dist/worker-program.d.ts +58 -0
  140. package/dist/worker-program.d.ts.map +1 -0
  141. package/dist/worker-program.js +425 -0
  142. package/dist/worker-program.js.map +1 -0
  143. package/package.json +23 -0
@@ -0,0 +1,528 @@
1
+ import { assertWaliModule, compileWaliModule, inspectWaliModule } from "./inspect.js";
2
+ import { createStdioAliasRegistry, WaliFileDescriptorTable } from "./filesystem.js";
3
+ import { createWaliAllocatorControl, createWaliSharedMmapRegistry, WaliMemoryManager } from "./memory.js";
4
+ import { WaliPthreadProcessExit, WaliSystemHost } from "./system.js";
5
+ import { WaliEventHost } from "./events.js";
6
+ import { createImportedMemory } from "./module-layout.js";
7
+ import { WaliThreadPool } from "./threads.js";
8
+ import { WaliLocalSocketHost } from "./local-sockets.js";
9
+ import { WaliNetworkCoordinator, WaliNetworkHost } from "./network.js";
10
+ import { BufferedWaliStdin, SharedWaliStdinReader } from "./stdin.js";
11
+ import { WaliFilesystemCoordinator, WaliSharedFileDescriptorHost } from "./filesystem-remote.js";
12
+ import { createWaliSharedPipeState, WaliSharedPipeHost } from "./shared-pipes.js";
13
+ import { applyProcessFilesystemPatch, BROWSER_PROCESS_RESPONSE_BYTES, closeSharedPipe, decodeProcessSnapshot, retainSharedPipe, } from "./process-bridge.js";
14
+ import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
15
+ import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
16
+ import { WaliCoherentFileLockClient } from "./coherent-file-locks.js";
17
+ const EBADF = 9n;
18
+ const EINVAL = 22n;
19
+ const encoder = new TextEncoder();
20
+ const decoder = new TextDecoder();
21
+ const WNOHANG = 1;
22
+ export class UnsupportedWaliImportError extends Error {
23
+ imports;
24
+ constructor(imports) {
25
+ super(`Unsupported WALI imports: ${imports.join(", ")}`);
26
+ this.imports = imports;
27
+ this.name = "UnsupportedWaliImportError";
28
+ }
29
+ }
30
+ class WaliProcessExit extends Error {
31
+ code;
32
+ constructor(code) {
33
+ super(`WALI process exited with status ${code}`);
34
+ this.code = code;
35
+ }
36
+ }
37
+ export class BrowserWaliRuntime {
38
+ async run(source, options = {}) {
39
+ const module = await compileWaliModule(source);
40
+ const descriptors = inspectWaliModule(module);
41
+ assertWaliModule(descriptors);
42
+ const waliDescriptors = descriptors.filter((descriptor) => descriptor.module === "wali");
43
+ const stdout = [];
44
+ const stderr = [];
45
+ const stdin = typeof options.stdin === "object" && options.stdin !== null && "read" in options.stdin
46
+ ? options.stdin
47
+ : new BufferedWaliStdin(typeof options.stdin === "string" ? encoder.encode(options.stdin) : options.stdin ?? new Uint8Array());
48
+ const argv = options.argv?.length ? [...options.argv] : ["wali-program"];
49
+ const argvBytes = argv.map((argument) => encoder.encode(`${argument}\0`));
50
+ const pid = normalizePid(options.pid);
51
+ const signalActions = new Map();
52
+ let instance;
53
+ let threadPool;
54
+ let networkCoordinator;
55
+ let filesystemCoordinator;
56
+ const importedMemory = createImportedMemory(source, options.memory);
57
+ const stdioAliasRegistry = createStdioAliasRegistry();
58
+ // Word 0 is the fatal flag. Word 1 retains the first failing worker slot,
59
+ // so a later futex wake cannot hide the original pthread diagnostic.
60
+ // Word 0: 0 healthy, 1 worker failure, 2 pthread exit_group.
61
+ // Word 1: first failing worker slot. Word 2: process exit code.
62
+ const pthreadFatal = new Int32Array(new SharedArrayBuffer(3 * Int32Array.BYTES_PER_ELEMENT));
63
+ Atomics.store(pthreadFatal, 1, -1);
64
+ const sharedPipeState = createWaliSharedPipeState();
65
+ const memory = () => {
66
+ if (importedMemory)
67
+ return importedMemory;
68
+ const exported = instance?.exports.memory;
69
+ if (!(exported instanceof WebAssembly.Memory))
70
+ throw new Error("WALI module does not export linear memory.");
71
+ return exported;
72
+ };
73
+ const view = () => new DataView(memory().buffer);
74
+ const bytes = () => new Uint8Array(memory().buffer);
75
+ const copyOut = (pointer, length) => {
76
+ assertMemoryRange(memory(), pointer, length);
77
+ return bytes().slice(pointer, pointer + length);
78
+ };
79
+ const copyIn = (pointer, value) => {
80
+ assertMemoryRange(memory(), pointer, value.byteLength);
81
+ bytes().set(value, pointer);
82
+ };
83
+ const emit = (fd, value) => {
84
+ if (fd === 1) {
85
+ stdout.push(value);
86
+ options.onStdout?.(value.slice());
87
+ }
88
+ else if (fd === 2) {
89
+ stderr.push(value);
90
+ options.onStderr?.(value.slice());
91
+ }
92
+ else {
93
+ return -EBADF;
94
+ }
95
+ return BigInt(value.byteLength);
96
+ };
97
+ const exit = (status) => { throw new WaliProcessExit(status & 0xff); };
98
+ const executablePath = options.executablePath
99
+ ?? (argv[0].startsWith("/") ? argv[0] : `/usr/bin/${argv[0]}`);
100
+ const threaded = waliDescriptors.some((descriptor) => descriptor.name === "__wasm_thread_spawn");
101
+ const mmapCursor = createWaliAllocatorControl();
102
+ const sharedMmapRegistry = createWaliSharedMmapRegistry();
103
+ if (threaded && options.filesystem?.toSnapshot && options.filesystem.replaceSnapshot) {
104
+ if (!importedMemory) {
105
+ throw new Error("A threaded WALI module must import its shared process memory.");
106
+ }
107
+ filesystemCoordinator = await WaliFilesystemCoordinator.create(options.filesystem.toSnapshot(), {
108
+ memory: importedMemory,
109
+ cwd: options.cwd ?? "/",
110
+ executablePath,
111
+ pid,
112
+ ...(options.filesystemUpdatePort ? { updatePort: options.filesystemUpdatePort } : {}),
113
+ ...(options.fileLocks ? { fileLocks: options.fileLocks } : {}),
114
+ ...(options.fileCoherence ? { fileCoherence: options.fileCoherence } : {}),
115
+ });
116
+ }
117
+ const runtimeFilesystem = filesystemCoordinator?.filesystem() ?? options.filesystem;
118
+ const syncFilesystem = () => {
119
+ if (filesystemCoordinator && options.filesystem?.replaceSnapshot) {
120
+ options.filesystem.replaceSnapshot(filesystemCoordinator.snapshot());
121
+ }
122
+ };
123
+ const fileDescriptors = new WaliFileDescriptorTable({
124
+ ...(runtimeFilesystem ? { filesystem: runtimeFilesystem } : {}),
125
+ cwd: options.cwd ?? "/",
126
+ stdin,
127
+ executablePath,
128
+ memory,
129
+ emit,
130
+ stdioAliasRegistry,
131
+ pid,
132
+ ...(!filesystemCoordinator && options.fileLocks ? {
133
+ fileLocks: options.fileCoherence
134
+ ? new WaliCoherentFileLockClient(new BrowserFileLockClient(options.fileLocks.channel), new BrowserFileCoherenceClient(options.fileCoherence), runtimeFilesystem)
135
+ : new BrowserFileLockClient(options.fileLocks.channel),
136
+ lockOwner: options.fileLocks.owner,
137
+ } : {}),
138
+ ...(filesystemCoordinator ? { specialDescriptorMinimum: 10_000, descriptorMaximum: 19_999 } : {}),
139
+ });
140
+ const environmentFile = fileDescriptors.writeEnvironmentFile(options.env ?? {}, pid);
141
+ const sharedFileHost = filesystemCoordinator
142
+ ? new WaliSharedFileDescriptorHost(filesystemCoordinator.filesystem(), stdioAliasRegistry) : undefined;
143
+ const memoryManager = new WaliMemoryManager(memory, (fd, offset, length) => sharedFileHost?.readForMapping(fd, offset, length)
144
+ ?? fileDescriptors.readForMapping(fd, offset, length), mmapCursor, (fd) => sharedFileHost?.mappingPath(fd) ?? fileDescriptors.mappingPath(fd), (path, offset, value) => sharedFileHost?.writeForMapping(path, offset, value)
145
+ ?? fileDescriptors.writeForMapping(path, offset, value), sharedMmapRegistry);
146
+ const systemHost = new WaliSystemHost(memory, pid, stdin, pthreadFatal);
147
+ if (options.network) {
148
+ networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer);
149
+ }
150
+ const networkHost = networkCoordinator ? new WaliNetworkHost(memory, networkCoordinator.createChannel()) : undefined;
151
+ const sharedPipeHost = new WaliSharedPipeHost(memory, sharedPipeState);
152
+ const eventHost = new WaliEventHost(memory, fileDescriptors, (fd, events) => sharedPipeHost.pollDescriptor(fd, events) ?? (networkHost?.isNetworkFd(fd)
153
+ ? networkHost.pollFd(fd, events) : undefined));
154
+ const localSocketHost = new WaliLocalSocketHost(memory, fileDescriptors);
155
+ const localFileImports = fileDescriptors.imports();
156
+ const fileImports = sharedFileHost?.imports(localFileImports) ?? localFileImports;
157
+ const pipeImports = sharedPipeHost.imports({ ...localSocketHost.imports(), ...fileImports });
158
+ const eventImports = eventHost.imports();
159
+ const systemImports = systemHost.imports();
160
+ const childProcesses = new Map();
161
+ const nextChildPid = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));
162
+ Atomics.store(nextChildPid, 0, Math.max(pid + 1, 10_000));
163
+ const readCString = (pointer) => {
164
+ if (!Number.isSafeInteger(pointer) || pointer <= 0 || pointer >= bytes().byteLength) {
165
+ throw new WebAssembly.RuntimeError("WALI process string pointer is out of bounds.");
166
+ }
167
+ const end = bytes().indexOf(0, pointer);
168
+ if (end < 0 || end - pointer > 1024 * 1024)
169
+ throw new WebAssembly.RuntimeError("WALI process string is not terminated.");
170
+ return decoder.decode(bytes().slice(pointer, end));
171
+ };
172
+ const readCStringArray = (pointer) => {
173
+ if (pointer === 0)
174
+ return [];
175
+ const values = [];
176
+ for (let index = 0; index < 65_536; index += 1) {
177
+ assertMemoryRange(memory(), pointer + index * 4, 4);
178
+ const item = view().getUint32(pointer + index * 4, true);
179
+ if (item === 0)
180
+ return values;
181
+ values.push(readCString(item));
182
+ }
183
+ throw new WebAssembly.RuntimeError("WALI process string array is not terminated.");
184
+ };
185
+ const exportPipe = (fd, role) => {
186
+ const handle = sharedPipeHost.exportBrowserProcessPipe(fd) ?? fileDescriptors.exportBrowserProcessPipe(fd);
187
+ if (!handle || handle.role !== role)
188
+ return;
189
+ return retainSharedPipe(handle);
190
+ };
191
+ const applyChildSnapshot = (process) => {
192
+ if (process.snapshotApplied)
193
+ return;
194
+ process.snapshotApplied = true;
195
+ const patch = decodeProcessSnapshot(process);
196
+ if (patch) {
197
+ if (filesystemCoordinator)
198
+ applyProcessFilesystemPatch(filesystemCoordinator.filesystem(), patch);
199
+ if (options.filesystem)
200
+ applyProcessFilesystemPatch(options.filesystem, patch);
201
+ const snapshot = options.filesystem?.toSnapshot?.();
202
+ if (snapshot)
203
+ options.browserProcess?.restore?.(snapshot);
204
+ }
205
+ };
206
+ const waitForChild = (requestedPid, statusPointer, optionsValue) => {
207
+ let childPid;
208
+ let process;
209
+ if (requestedPid === -1) {
210
+ const entry = childProcesses.entries().next().value;
211
+ if (!entry)
212
+ return -10n;
213
+ [childPid, process] = entry;
214
+ }
215
+ else {
216
+ const exact = childProcesses.get(requestedPid);
217
+ if (!exact)
218
+ return -10n;
219
+ childPid = requestedPid;
220
+ process = exact;
221
+ }
222
+ const control = new Int32Array(process.control);
223
+ if (Atomics.load(control, 0) === 0) {
224
+ if ((optionsValue & WNOHANG) !== 0)
225
+ return 0n;
226
+ while (Atomics.load(control, 0) === 0)
227
+ Atomics.wait(control, 0, 0, 1000);
228
+ }
229
+ applyChildSnapshot(process);
230
+ if (statusPointer !== 0) {
231
+ assertMemoryRange(memory(), statusPointer, 4);
232
+ view().setInt32(statusPointer, (Atomics.load(control, 1) & 0xff) << 8, true);
233
+ }
234
+ childProcesses.delete(childPid);
235
+ return BigInt(childPid);
236
+ };
237
+ const builtins = {
238
+ __init: () => 0,
239
+ __deinit: () => 0,
240
+ __proc_exit: (status) => exit(Number(status)),
241
+ __cl_get_argc: () => argvBytes.length,
242
+ __cl_get_argv_len: (index) => argvBytes[Number(index)]?.byteLength ?? 0,
243
+ __cl_copy_argv: (pointer, index) => {
244
+ const value = argvBytes[Number(index)];
245
+ if (!value)
246
+ return -1;
247
+ copyIn(Number(pointer), value);
248
+ return 0;
249
+ },
250
+ __get_init_envfile: (pointer, size) => environmentFile
251
+ ? fileDescriptors.copyCString(Number(pointer), environmentFile, Number(size)) : 0,
252
+ SYS_write: (fd, pointer, length) => emit(Number(fd), copyOut(Number(pointer), Number(length))),
253
+ SYS_writev: (fd, iovPointer, iovCount) => {
254
+ let written = 0n;
255
+ for (let index = 0; index < Number(iovCount); index += 1) {
256
+ const offset = Number(iovPointer) + index * 8;
257
+ assertMemoryRange(memory(), offset, 8);
258
+ const pointer = view().getUint32(offset, true);
259
+ const length = view().getUint32(offset + 4, true);
260
+ const result = emit(Number(fd), copyOut(pointer, length));
261
+ if (result < 0n)
262
+ return result;
263
+ written += result;
264
+ }
265
+ return written;
266
+ },
267
+ SYS_exit: (status) => exit(Number(status)),
268
+ SYS_exit_group: (status) => exit(Number(status)),
269
+ SYS_getpid: () => BigInt(pid),
270
+ SYS_getppid: () => 1n,
271
+ SYS_gettid: () => BigInt(pid),
272
+ SYS_getuid: () => 1000n,
273
+ SYS_geteuid: () => 1000n,
274
+ SYS_getgid: () => 1000n,
275
+ SYS_getegid: () => 1000n,
276
+ SYS_set_tid_address: () => BigInt(pid),
277
+ SYS_sched_yield: () => 0n,
278
+ SYS_sched_setscheduler: () => 0n,
279
+ SYS_tkill: () => 0n,
280
+ SYS_browser_spawn: (pathname, argvPointer, envPointer, cwdPointer, stdinFd, stdoutFd, stderrFd) => {
281
+ if (!options.browserProcess)
282
+ return -38;
283
+ const executablePath = readCString(Number(pathname));
284
+ const argvValue = readCStringArray(Number(argvPointer));
285
+ if (argvValue.length === 0)
286
+ argvValue.push(executablePath);
287
+ const envValue = {};
288
+ for (const entry of readCStringArray(Number(envPointer))) {
289
+ const separator = entry.indexOf("=");
290
+ if (separator > 0)
291
+ envValue[entry.slice(0, separator)] = entry.slice(separator + 1);
292
+ }
293
+ const childPid = Atomics.add(nextChildPid, 0, 1);
294
+ const process = {
295
+ control: new SharedArrayBuffer(8 * Int32Array.BYTES_PER_ELEMENT),
296
+ response: new SharedArrayBuffer(BROWSER_PROCESS_RESPONSE_BYTES),
297
+ snapshotApplied: false,
298
+ };
299
+ const stdin = exportPipe(Number(stdinFd), "reader");
300
+ const stdout = exportPipe(Number(stdoutFd), "writer");
301
+ const stderr = exportPipe(Number(stderrFd), "writer");
302
+ childProcesses.set(childPid, process);
303
+ try {
304
+ syncFilesystem();
305
+ options.browserProcess.spawn({
306
+ pid: childPid,
307
+ executablePath,
308
+ argv: argvValue,
309
+ env: envValue,
310
+ cwd: Number(cwdPointer) === 0 ? fileDescriptors.currentWorkingDirectory() : readCString(Number(cwdPointer)),
311
+ control: process.control,
312
+ response: process.response,
313
+ ...(stdin ? { stdin } : {}),
314
+ ...(stdout ? { stdout } : {}),
315
+ ...(stderr ? { stderr } : {}),
316
+ });
317
+ return childPid;
318
+ }
319
+ catch {
320
+ childProcesses.delete(childPid);
321
+ if (stdin)
322
+ closeSharedPipe(stdin);
323
+ if (stdout)
324
+ closeSharedPipe(stdout);
325
+ if (stderr)
326
+ closeSharedPipe(stderr);
327
+ return -5;
328
+ }
329
+ },
330
+ SYS_wait4: (childPid, status, optionsValue) => waitForChild(Number(childPid), Number(status), Number(optionsValue)),
331
+ SYS_kill: (childPid, signal) => {
332
+ const normalized = Math.abs(Number(childPid));
333
+ const process = childProcesses.get(normalized);
334
+ if (!process)
335
+ return -3n;
336
+ Atomics.store(new Int32Array(process.control), 3, Number(signal));
337
+ options.browserProcess?.kill?.(normalized, Number(signal));
338
+ return 0n;
339
+ },
340
+ SYS_setpgid: () => 0n,
341
+ SYS_getpgid: (childPid) => BigInt(Number(childPid) === 0 ? pid : Math.abs(Number(childPid))),
342
+ __wasm_thread_spawn: (functionPointer, argumentPointer) => threadPool?.spawn(Number(functionPointer), Number(argumentPointer)) ?? -11,
343
+ SYS_rt_sigaction: (signal, action, previous, setSize) => {
344
+ const signalNumber = Number(signal);
345
+ const actionPointer = Number(action);
346
+ const previousPointer = Number(previous);
347
+ if (signalNumber < 1 || signalNumber > 64 || Number(setSize) !== 8)
348
+ return -EINVAL;
349
+ if (actionPointer !== 0 && (signalNumber === 9 || signalNumber === 19))
350
+ return -EINVAL;
351
+ if (previousPointer !== 0)
352
+ copyIn(previousPointer, signalActions.get(signalNumber) ?? new Uint8Array(20));
353
+ if (actionPointer !== 0)
354
+ signalActions.set(signalNumber, copyOut(actionPointer, 20));
355
+ return 0n;
356
+ },
357
+ SYS_clock_gettime: (clockId, pointer) => {
358
+ const nowNanoseconds = clockNanoseconds(Number(clockId));
359
+ if (nowNanoseconds === undefined)
360
+ return -EINVAL;
361
+ writeTimespec(view(), Number(pointer), nowNanoseconds);
362
+ return 0n;
363
+ },
364
+ SYS_gettimeofday: (pointer) => {
365
+ if (Number(pointer) !== 0) {
366
+ const microseconds = BigInt(Date.now()) * 1000n;
367
+ assertMemoryRange(memory(), Number(pointer), 16);
368
+ view().setBigInt64(Number(pointer), microseconds / 1000000n, true);
369
+ view().setBigInt64(Number(pointer) + 8, microseconds % 1000000n, true);
370
+ }
371
+ return 0n;
372
+ },
373
+ SYS_getrandom: (pointer, length) => {
374
+ const destination = bytes().subarray(Number(pointer), Number(pointer) + Number(length));
375
+ assertMemoryRange(memory(), Number(pointer), Number(length));
376
+ fillRandom(destination);
377
+ return BigInt(destination.byteLength);
378
+ },
379
+ ...memoryManager.imports(),
380
+ ...systemImports,
381
+ ...pipeImports,
382
+ // The relay event worker is also the process-wide descriptor table for
383
+ // epoll, eventfd, and timerfd. Root and pthread instances must share it:
384
+ // Tokio passes waker descriptors across those instance boundaries.
385
+ ...(networkHost ? networkHost.imports({ ...pipeImports, ...eventImports }) : eventImports),
386
+ SYS_ioctl: (fd, request, argument) => sharedPipeHost.ioctl(Number(fd), Number(request))
387
+ ?? fileDescriptors.ioctl(Number(fd), Number(request))
388
+ ?? systemImports.SYS_ioctl(fd, request, argument),
389
+ };
390
+ const handlers = { ...builtins, ...options.imports };
391
+ const wali = {};
392
+ for (const descriptor of waliDescriptors) {
393
+ const handler = handlers[descriptor.name]
394
+ ?? (() => { throw new UnsupportedWaliImportError([descriptor.name]); });
395
+ wali[descriptor.name] = (...args) => {
396
+ options.onSyscall?.(descriptor.name, args);
397
+ const result = handler(...args);
398
+ options.onSyscallResult?.(descriptor.name, result);
399
+ return result;
400
+ };
401
+ }
402
+ const env = {
403
+ ...(importedMemory ? { memory: importedMemory } : {}),
404
+ _Unwind_Backtrace: () => 5,
405
+ _Unwind_FindEnclosingFunction: (programCounter) => programCounter,
406
+ _Unwind_GetCFA: () => 0,
407
+ };
408
+ instance = await WebAssembly.instantiate(module, {
409
+ wali,
410
+ env,
411
+ });
412
+ if (threaded) {
413
+ if (!importedMemory) {
414
+ throw new Error("A threaded WALI module must be linked with --import-memory so browser workers can share its process memory.");
415
+ }
416
+ threadPool = new WaliThreadPool({
417
+ module,
418
+ memory: importedMemory,
419
+ mmapCursor: memoryManager.allocatorControl(),
420
+ sharedMmapRegistry,
421
+ fatalState: pthreadFatal.buffer,
422
+ imports: descriptors,
423
+ size: options.threadPoolSize ?? 18,
424
+ pid,
425
+ executablePath,
426
+ argv,
427
+ cwd: fileDescriptors.currentWorkingDirectory(),
428
+ stdioAliasRegistry: stdioAliasRegistry.buffer,
429
+ sharedPipes: sharedPipeState,
430
+ childPidAllocator: nextChildPid.buffer,
431
+ ...(options.browserProcessPorts ? { browserProcessPorts: options.browserProcessPorts } : {}),
432
+ ...(options.threadOutputPorts ? { outputPorts: options.threadOutputPorts } : {}),
433
+ ...(stdin instanceof SharedWaliStdinReader ? { stdin: stdin.buffer } : {}),
434
+ onStdout: (chunk) => { emit(1, chunk); },
435
+ onStderr: (chunk) => { emit(2, chunk); },
436
+ ...(networkCoordinator ? { network: networkCoordinator } : {}),
437
+ ...(filesystemCoordinator ? { filesystem: filesystemCoordinator } : {}),
438
+ });
439
+ await threadPool.initialize();
440
+ }
441
+ const start = instance.exports._start;
442
+ if (typeof start !== "function")
443
+ throw new Error("WALI module does not export _start.");
444
+ let exitCode = 0;
445
+ try {
446
+ try {
447
+ start();
448
+ }
449
+ catch (error) {
450
+ if (error instanceof WaliProcessExit || error instanceof WaliPthreadProcessExit)
451
+ exitCode = error.code;
452
+ else if (error instanceof UnsupportedWaliImportError)
453
+ throw error;
454
+ else {
455
+ const message = error instanceof Error ? error.stack ?? error.message : String(error);
456
+ const fatalSlot = Atomics.load(pthreadFatal, 1);
457
+ const pthreadDiagnostics = threadPool?.diagnostics(fatalSlot >= 0 ? fatalSlot : undefined) ?? [];
458
+ throw new Error(`${message}\nWALI stdout:\n${decoder.decode(concatenate(stdout))}\nWALI stderr:\n${decoder.decode(concatenate(stderr))}`
459
+ + (pthreadDiagnostics.length > 0 ? `\nWALI pthread diagnostics:\n${pthreadDiagnostics.join("\n")}` : ""), { cause: error });
460
+ }
461
+ }
462
+ }
463
+ finally {
464
+ threadPool?.terminate();
465
+ networkCoordinator?.terminate();
466
+ syncFilesystem();
467
+ filesystemCoordinator?.terminate();
468
+ }
469
+ return {
470
+ exitCode,
471
+ stdout: decoder.decode(concatenate(stdout)),
472
+ stderr: decoder.decode(concatenate(stderr)),
473
+ imports: descriptors,
474
+ };
475
+ }
476
+ }
477
+ function normalizePid(pid) {
478
+ if (pid === undefined)
479
+ return 2;
480
+ if (!Number.isSafeInteger(pid) || pid <= 1 || pid > 0x7fff_ffff)
481
+ throw new Error("WALI pid must be an integer between 2 and 2147483647.");
482
+ return pid;
483
+ }
484
+ function assertMemoryRange(memory, pointer, length) {
485
+ if (!Number.isSafeInteger(pointer) || !Number.isSafeInteger(length) || pointer < 0 || length < 0
486
+ || pointer + length > memory.buffer.byteLength) {
487
+ throw new WebAssembly.RuntimeError(`WALI memory access is out of bounds: ${pointer}+${length}.`);
488
+ }
489
+ }
490
+ function concatenate(chunks) {
491
+ const result = new Uint8Array(chunks.reduce((total, chunk) => total + chunk.byteLength, 0));
492
+ let offset = 0;
493
+ for (const chunk of chunks) {
494
+ result.set(chunk, offset);
495
+ offset += chunk.byteLength;
496
+ }
497
+ return result;
498
+ }
499
+ function clockNanoseconds(clockId) {
500
+ if (clockId === 0) {
501
+ const milliseconds = typeof performance === "undefined"
502
+ ? Date.now() : performance.timeOrigin + performance.now();
503
+ return BigInt(Math.floor(milliseconds * 1_000_000));
504
+ }
505
+ if (clockId === 1 || clockId === 4) {
506
+ const milliseconds = typeof performance === "undefined" ? Date.now() : performance.now();
507
+ return BigInt(Math.floor(milliseconds * 1_000_000));
508
+ }
509
+ return undefined;
510
+ }
511
+ function writeTimespec(view, pointer, nanoseconds) {
512
+ if (pointer < 0 || pointer + 16 > view.byteLength)
513
+ throw new WebAssembly.RuntimeError("WALI timespec pointer is out of bounds.");
514
+ view.setBigInt64(pointer, nanoseconds / 1000000000n, true);
515
+ view.setBigInt64(pointer + 8, nanoseconds % 1000000000n, true);
516
+ }
517
+ function fillRandom(destination) {
518
+ if (!globalThis.crypto?.getRandomValues)
519
+ throw new Error("Web Crypto is required for SYS_getrandom.");
520
+ for (let offset = 0; offset < destination.byteLength; offset += 65_536) {
521
+ // Web Crypto, like TextDecoder, rejects a view backed by shared memory.
522
+ // Fill an ordinary buffer and copy it into the process snapshot.
523
+ const random = new Uint8Array(Math.min(65_536, destination.byteLength - offset));
524
+ globalThis.crypto.getRandomValues(random);
525
+ destination.set(random, offset);
526
+ }
527
+ }
528
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type BrowserProcessPipeHandle } from "./process-bridge.js";
2
+ import type { WaliImportHandler } from "./types.js";
3
+ export interface WaliSharedPipeState {
4
+ descriptors: SharedArrayBuffer;
5
+ descriptorFlags: SharedArrayBuffer;
6
+ slots: SharedArrayBuffer;
7
+ controls: SharedArrayBuffer;
8
+ payloads: SharedArrayBuffer;
9
+ }
10
+ export declare function createWaliSharedPipeState(): WaliSharedPipeState;
11
+ export declare function pollWaliSharedPipeState(state: WaliSharedPipeState, fd: number, events: number): number | undefined;
12
+ /** Process-wide anonymous pipes shared by the root Wasm instance and every pthread. */
13
+ export declare class WaliSharedPipeHost {
14
+ private readonly memory;
15
+ private readonly state;
16
+ private readonly descriptors;
17
+ private readonly descriptorFlags;
18
+ private readonly slots;
19
+ constructor(memory: () => WebAssembly.Memory, state: WaliSharedPipeState);
20
+ isPipeFd(fd: number): boolean;
21
+ exportBrowserProcessPipe(fd: number): BrowserProcessPipeHandle | undefined;
22
+ pollDescriptor(fd: number, events: number): number | undefined;
23
+ ioctl(fd: number, request: number): bigint | undefined;
24
+ imports(fallback?: Readonly<Record<string, WaliImportHandler>>): Record<string, WaliImportHandler>;
25
+ private pipe;
26
+ private read;
27
+ private write;
28
+ private readv;
29
+ private writev;
30
+ private fstat;
31
+ private fcntl;
32
+ private duplicate;
33
+ private close;
34
+ private poll;
35
+ private allocateSlot;
36
+ private allocateDescriptor;
37
+ private entry;
38
+ private handle;
39
+ private control;
40
+ private bytes;
41
+ private view;
42
+ private validRange;
43
+ }
44
+ //# sourceMappingURL=shared-pipes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-pipes.d.ts","sourceRoot":"","sources":["../src/shared-pipes.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAoBpD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,eAAe,EAAE,iBAAiB,CAAC;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,IAAI,mBAAmB,CAQ/D;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,mBAAmB,EAC1B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAapB;AAED,uFAAuF;AACvF,qBAAa,kBAAkB;IAM3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IANxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAa;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAGhB,MAAM,EAAE,MAAM,WAAW,CAAC,MAAM,EAChC,KAAK,EAAE,mBAAmB;IAO7C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK7B,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;IAK1E,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK9D,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMtD,OAAO,CAAC,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAwCtG,OAAO,CAAC,IAAI;IAwBZ,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,IAAI;IAiBZ,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;CAInB"}