@ebowwa/sandbox 0.1.1

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 (108) hide show
  1. package/dist/compilers/index.d.ts +24 -0
  2. package/dist/compilers/index.d.ts.map +1 -0
  3. package/dist/compilers/index.js +42 -0
  4. package/dist/compilers/index.js.map +1 -0
  5. package/dist/compilers/javascript.d.ts +117 -0
  6. package/dist/compilers/javascript.d.ts.map +1 -0
  7. package/dist/compilers/javascript.js +462 -0
  8. package/dist/compilers/javascript.js.map +1 -0
  9. package/dist/compilers/python.d.ts +140 -0
  10. package/dist/compilers/python.d.ts.map +1 -0
  11. package/dist/compilers/python.js +650 -0
  12. package/dist/compilers/python.js.map +1 -0
  13. package/dist/compilers/typescript.d.ts +99 -0
  14. package/dist/compilers/typescript.d.ts.map +1 -0
  15. package/dist/compilers/typescript.js +323 -0
  16. package/dist/compilers/typescript.js.map +1 -0
  17. package/dist/core/cell.d.ts +160 -0
  18. package/dist/core/cell.d.ts.map +1 -0
  19. package/dist/core/cell.js +319 -0
  20. package/dist/core/cell.js.map +1 -0
  21. package/dist/core/compiler.d.ts +126 -0
  22. package/dist/core/compiler.d.ts.map +1 -0
  23. package/dist/core/compiler.js +123 -0
  24. package/dist/core/compiler.js.map +1 -0
  25. package/dist/core/index.d.ts +19 -0
  26. package/dist/core/index.d.ts.map +1 -0
  27. package/dist/core/index.js +14 -0
  28. package/dist/core/index.js.map +1 -0
  29. package/dist/core/limits.d.ts +173 -0
  30. package/dist/core/limits.d.ts.map +1 -0
  31. package/dist/core/limits.js +440 -0
  32. package/dist/core/limits.js.map +1 -0
  33. package/dist/core/permissions.d.ts +103 -0
  34. package/dist/core/permissions.d.ts.map +1 -0
  35. package/dist/core/permissions.js +341 -0
  36. package/dist/core/permissions.js.map +1 -0
  37. package/dist/core/runtime.d.ts +127 -0
  38. package/dist/core/runtime.d.ts.map +1 -0
  39. package/dist/core/runtime.js +325 -0
  40. package/dist/core/runtime.js.map +1 -0
  41. package/dist/core/types.d.ts +380 -0
  42. package/dist/core/types.d.ts.map +1 -0
  43. package/dist/core/types.js +67 -0
  44. package/dist/core/types.js.map +1 -0
  45. package/dist/index.d.ts +145 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +279 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/multi/index.d.ts +9 -0
  50. package/dist/multi/index.d.ts.map +1 -0
  51. package/dist/multi/index.js +7 -0
  52. package/dist/multi/index.js.map +1 -0
  53. package/dist/multi/polyglot.d.ts +179 -0
  54. package/dist/multi/polyglot.d.ts.map +1 -0
  55. package/dist/multi/polyglot.js +319 -0
  56. package/dist/multi/polyglot.js.map +1 -0
  57. package/dist/runtimes/docker.d.ts +97 -0
  58. package/dist/runtimes/docker.d.ts.map +1 -0
  59. package/dist/runtimes/docker.js +368 -0
  60. package/dist/runtimes/docker.js.map +1 -0
  61. package/dist/runtimes/index.d.ts +11 -0
  62. package/dist/runtimes/index.d.ts.map +1 -0
  63. package/dist/runtimes/index.js +9 -0
  64. package/dist/runtimes/index.js.map +1 -0
  65. package/dist/runtimes/process.d.ts +47 -0
  66. package/dist/runtimes/process.d.ts.map +1 -0
  67. package/dist/runtimes/process.js +230 -0
  68. package/dist/runtimes/process.js.map +1 -0
  69. package/dist/session/index.d.ts +12 -0
  70. package/dist/session/index.d.ts.map +1 -0
  71. package/dist/session/index.js +9 -0
  72. package/dist/session/index.js.map +1 -0
  73. package/dist/session/kernel.d.ts +199 -0
  74. package/dist/session/kernel.d.ts.map +1 -0
  75. package/dist/session/kernel.js +400 -0
  76. package/dist/session/kernel.js.map +1 -0
  77. package/dist/session/notebook.d.ts +168 -0
  78. package/dist/session/notebook.d.ts.map +1 -0
  79. package/dist/session/notebook.js +499 -0
  80. package/dist/session/notebook.js.map +1 -0
  81. package/dist/session/repl.d.ts +159 -0
  82. package/dist/session/repl.d.ts.map +1 -0
  83. package/dist/session/repl.js +409 -0
  84. package/dist/session/repl.js.map +1 -0
  85. package/package.json +142 -0
  86. package/src/compilers/index.ts +80 -0
  87. package/src/compilers/javascript.ts +571 -0
  88. package/src/compilers/python.ts +785 -0
  89. package/src/compilers/typescript.ts +442 -0
  90. package/src/core/cell.ts +439 -0
  91. package/src/core/compiler.ts +250 -0
  92. package/src/core/index.ts +123 -0
  93. package/src/core/limits.ts +508 -0
  94. package/src/core/permissions.ts +409 -0
  95. package/src/core/runtime.ts +499 -0
  96. package/src/core/types.ts +528 -0
  97. package/src/global.d.ts +59 -0
  98. package/src/index.ts +515 -0
  99. package/src/multi/index.ts +22 -0
  100. package/src/multi/polyglot.ts +461 -0
  101. package/src/runtimes/docker.ts +501 -0
  102. package/src/runtimes/index.ts +21 -0
  103. package/src/runtimes/process.ts +316 -0
  104. package/src/session/index.ts +41 -0
  105. package/src/session/kernel.ts +553 -0
  106. package/src/session/notebook.ts +635 -0
  107. package/src/session/repl.ts +521 -0
  108. package/src/wasm2wasm.d.ts +35 -0
@@ -0,0 +1,325 @@
1
+ /**
2
+ * Runtime Primitive
3
+ *
4
+ * Executes compiled code (WASM) with resource limits and permissions.
5
+ * Composable: different runtimes for different isolation levels.
6
+ */
7
+ /**
8
+ * WASM-in-WASM Runtime
9
+ *
10
+ * Uses @ebowwa/wasm2wasm for maximum isolation.
11
+ * Runs WASM bytecode inside a WASM interpreter.
12
+ */
13
+ export class Wasm2WasmRuntime {
14
+ name = "wasm2wasm";
15
+ capabilities = {
16
+ isolation: "wasm",
17
+ stateful: false,
18
+ async: true,
19
+ filesystem: false,
20
+ network: false,
21
+ maxMemory: 256 * 1024 * 1024, // 256MB
22
+ wasi: false,
23
+ };
24
+ executing = false;
25
+ async init() {
26
+ // Will initialize wasm2wasm when needed
27
+ }
28
+ async isAvailable() {
29
+ try {
30
+ // Check if @ebowwa/wasm2wasm is available
31
+ const module = await import("@ebowwa/wasm2wasm");
32
+ return typeof module.execute === "function";
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ async execute(request, options) {
39
+ const startTime = Date.now();
40
+ this.executing = true;
41
+ try {
42
+ // Dynamic import to avoid bundling issues
43
+ const { execute, validate } = await import("@ebowwa/wasm2wasm");
44
+ // Validate WASM first
45
+ const validation = validate(request.wasm.wasmBytes);
46
+ if (!validation.valid) {
47
+ return this.createErrorResult(`Invalid WASM: ${validation.error}`, "compile", startTime);
48
+ }
49
+ // Configure runtime with limits
50
+ const maxMemory = this.parseMemory(options.limits.memory);
51
+ const timeout = this.parseTimeout(options.limits.timeout);
52
+ // Set up timeout
53
+ const controller = new AbortController();
54
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
55
+ // Combine signals
56
+ const combinedSignal = options.signal
57
+ ? this.combineSignals(options.signal, controller.signal)
58
+ : controller.signal;
59
+ try {
60
+ // Execute using the main execute function
61
+ const result = await execute(request.wasm.wasmBytes, {
62
+ maxMemoryPages: Math.floor(maxMemory / 65536),
63
+ });
64
+ clearTimeout(timeoutId);
65
+ return {
66
+ success: result.success,
67
+ value: result.output,
68
+ metrics: {
69
+ duration: Date.now() - startTime,
70
+ memoryUsed: result.memoryUsed ?? 0,
71
+ },
72
+ output: {
73
+ stdout: [],
74
+ stderr: result.error ? [result.error] : [],
75
+ displays: [],
76
+ },
77
+ };
78
+ }
79
+ catch (error) {
80
+ clearTimeout(timeoutId);
81
+ if (combinedSignal.aborted) {
82
+ return this.createErrorResult("Execution timed out", "timeout", startTime);
83
+ }
84
+ throw error;
85
+ }
86
+ }
87
+ catch (error) {
88
+ return this.createErrorResult(error instanceof Error ? error.message : String(error), "runtime", startTime);
89
+ }
90
+ finally {
91
+ this.executing = false;
92
+ }
93
+ }
94
+ async terminate() {
95
+ this.executing = false;
96
+ }
97
+ isExecuting() {
98
+ return this.executing;
99
+ }
100
+ createErrorResult(message, type, startTime) {
101
+ return {
102
+ success: false,
103
+ error: { message, type },
104
+ metrics: {
105
+ duration: Date.now() - startTime,
106
+ memoryUsed: 0,
107
+ },
108
+ output: { stdout: [], stderr: [], displays: [] },
109
+ };
110
+ }
111
+ parseMemory(memory) {
112
+ if (!memory)
113
+ return 16 * 1024 * 1024; // 16MB default
114
+ if (typeof memory === "number")
115
+ return memory;
116
+ const match = memory.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);
117
+ if (!match)
118
+ return 16 * 1024 * 1024;
119
+ const [, num, unit] = match;
120
+ const multipliers = {
121
+ b: 1, kb: 1024, mb: 1024 ** 2, gb: 1024 ** 3,
122
+ };
123
+ return Math.floor(parseFloat(num) * (multipliers[unit?.toLowerCase() ?? "b"] ?? 1));
124
+ }
125
+ parseTimeout(timeout) {
126
+ if (!timeout)
127
+ return 30000; // 30s default
128
+ if (typeof timeout === "number")
129
+ return timeout;
130
+ const match = timeout.match(/^(\d+(?:\.\d+)?)\s*(ms|s|m)?$/i);
131
+ if (!match)
132
+ return 30000;
133
+ const [, num, unit] = match;
134
+ const multipliers = {
135
+ ms: 1, s: 1000, m: 60000,
136
+ };
137
+ return Math.floor(parseFloat(num) * (multipliers[unit?.toLowerCase() ?? "ms"] ?? 1));
138
+ }
139
+ combineSignals(sig1, sig2) {
140
+ const controller = new AbortController();
141
+ const handler = () => {
142
+ controller.abort();
143
+ sig1.removeEventListener("abort", handler);
144
+ sig2.removeEventListener("abort", handler);
145
+ };
146
+ sig1.addEventListener("abort", handler);
147
+ sig2.addEventListener("abort", handler);
148
+ return controller.signal;
149
+ }
150
+ }
151
+ /**
152
+ * Native WASM Runtime
153
+ *
154
+ * Uses browser/Node WebAssembly API directly.
155
+ * Less isolated but faster.
156
+ */
157
+ export class NativeWasmRuntime {
158
+ name = "native-wasm";
159
+ capabilities = {
160
+ isolation: "process",
161
+ stateful: true,
162
+ async: true,
163
+ filesystem: true,
164
+ network: true,
165
+ maxMemory: 4 * 1024 * 1024 * 1024, // 4GB
166
+ wasi: true,
167
+ };
168
+ executing = false;
169
+ async init() {
170
+ // No init needed
171
+ }
172
+ async isAvailable() {
173
+ return typeof WebAssembly === "object";
174
+ }
175
+ async execute(request, options) {
176
+ const startTime = Date.now();
177
+ this.executing = true;
178
+ const stdout = [];
179
+ const stderr = [];
180
+ const displays = [];
181
+ try {
182
+ // Compile WASM
183
+ const module = await WebAssembly.compile(request.wasm.wasmBytes);
184
+ // Build imports based on permissions
185
+ const imports = this.buildImports(options.permissions, stdout, stderr, displays);
186
+ // Instantiate
187
+ const instance = await WebAssembly.instantiate(module, imports);
188
+ // Get entrypoint
189
+ const entrypoint = request.entrypoint || "_start";
190
+ const exports = instance.exports;
191
+ if (!(entrypoint in exports)) {
192
+ return this.createErrorResult(`Entrypoint '${entrypoint}' not found in exports`, "runtime", startTime, stdout, stderr);
193
+ }
194
+ const fn = exports[entrypoint];
195
+ if (typeof fn !== "function") {
196
+ return this.createErrorResult(`Export '${entrypoint}' is not a function`, "runtime", startTime, stdout, stderr);
197
+ }
198
+ // Execute with timeout
199
+ const timeout = this.parseTimeout(options.limits?.timeout);
200
+ const result = await Promise.race([
201
+ fn(...(request.args ?? [])),
202
+ new Promise((_, reject) => setTimeout(() => reject(new Error("Timeout")), timeout)),
203
+ ]);
204
+ return {
205
+ success: true,
206
+ value: result,
207
+ metrics: {
208
+ duration: Date.now() - startTime,
209
+ memoryUsed: 0, // Not available in native
210
+ },
211
+ output: { stdout, stderr, displays },
212
+ };
213
+ }
214
+ catch (error) {
215
+ return this.createErrorResult(error instanceof Error ? error.message : String(error), "runtime", startTime, stdout, stderr);
216
+ }
217
+ finally {
218
+ this.executing = false;
219
+ }
220
+ }
221
+ async terminate() {
222
+ this.executing = false;
223
+ }
224
+ isExecuting() {
225
+ return this.executing;
226
+ }
227
+ buildImports(permissions, stdout, stderr, displays) {
228
+ const imports = {};
229
+ // Console import (always available)
230
+ imports.env = {
231
+ ...imports.env,
232
+ console_log: (msg, len) => {
233
+ // Simplified - would need memory access
234
+ stdout.push(`[log] message at offset ${msg}`);
235
+ },
236
+ console_error: (msg, len) => {
237
+ stderr.push(`[error] message at offset ${msg}`);
238
+ },
239
+ };
240
+ // Add memory if needed
241
+ if (permissions.fs?.read || permissions.fs?.write) {
242
+ imports.env = {
243
+ ...imports.env,
244
+ fs_read: () => { },
245
+ fs_write: () => { },
246
+ };
247
+ }
248
+ return imports;
249
+ }
250
+ createErrorResult(message, type, startTime, stdout = [], stderr = []) {
251
+ return {
252
+ success: false,
253
+ error: { message, type },
254
+ metrics: {
255
+ duration: Date.now() - startTime,
256
+ memoryUsed: 0,
257
+ },
258
+ output: { stdout, stderr, displays: [] },
259
+ };
260
+ }
261
+ parseTimeout(timeout) {
262
+ if (!timeout)
263
+ return 30000;
264
+ if (typeof timeout === "number")
265
+ return timeout;
266
+ const match = timeout.match(/^(\d+(?:\.\d+)?)\s*(ms|s|m)?$/i);
267
+ if (!match)
268
+ return 30000;
269
+ const [, num, unit] = match;
270
+ const multipliers = {
271
+ ms: 1, s: 1000, m: 60000,
272
+ };
273
+ return Math.floor(parseFloat(num) * (multipliers[unit?.toLowerCase() ?? "ms"] ?? 1));
274
+ }
275
+ }
276
+ /**
277
+ * Runtime Registry
278
+ *
279
+ * Manages available runtimes and selects appropriate one.
280
+ */
281
+ export class RuntimeRegistry {
282
+ runtimes = new Map();
283
+ register(runtime) {
284
+ this.runtimes.set(runtime.name, runtime);
285
+ }
286
+ get(name) {
287
+ return this.runtimes.get(name);
288
+ }
289
+ has(name) {
290
+ return this.runtimes.has(name);
291
+ }
292
+ async getAvailable() {
293
+ const available = [];
294
+ for (const [name, runtime] of this.runtimes) {
295
+ if (await runtime.isAvailable()) {
296
+ available.push(name);
297
+ }
298
+ }
299
+ return available;
300
+ }
301
+ /**
302
+ * Select best runtime for given requirements
303
+ */
304
+ selectBest(requirements) {
305
+ for (const runtime of this.runtimes.values()) {
306
+ const caps = runtime.capabilities;
307
+ if (requirements.isolation && caps.isolation !== requirements.isolation) {
308
+ continue;
309
+ }
310
+ if (requirements.filesystem && !caps.filesystem) {
311
+ continue;
312
+ }
313
+ if (requirements.network && !caps.network) {
314
+ continue;
315
+ }
316
+ return runtime;
317
+ }
318
+ return undefined;
319
+ }
320
+ }
321
+ // Default registry with built-in runtimes
322
+ export const defaultRuntimeRegistry = new RuntimeRegistry();
323
+ defaultRuntimeRegistry.register(new Wasm2WasmRuntime());
324
+ defaultRuntimeRegistry.register(new NativeWasmRuntime());
325
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/core/runtime.ts"],"names":[],"mappings":"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"}