@cloudflare/sandbox 0.4.12 → 0.4.15
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/.turbo/turbo-build.log +13 -47
- package/CHANGELOG.md +46 -16
- package/Dockerfile +78 -31
- package/README.md +9 -2
- package/dist/index.d.ts +1889 -9
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3144 -65
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/clients/base-client.ts +39 -24
- package/src/clients/command-client.ts +8 -8
- package/src/clients/file-client.ts +31 -26
- package/src/clients/git-client.ts +3 -4
- package/src/clients/index.ts +12 -16
- package/src/clients/interpreter-client.ts +51 -47
- package/src/clients/port-client.ts +10 -10
- package/src/clients/process-client.ts +11 -8
- package/src/clients/sandbox-client.ts +2 -4
- package/src/clients/types.ts +6 -2
- package/src/clients/utility-client.ts +10 -6
- package/src/errors/adapter.ts +90 -32
- package/src/errors/classes.ts +189 -64
- package/src/errors/index.ts +9 -5
- package/src/file-stream.ts +11 -6
- package/src/index.ts +22 -15
- package/src/interpreter.ts +50 -41
- package/src/request-handler.ts +24 -21
- package/src/sandbox.ts +339 -149
- package/src/security.ts +21 -6
- package/src/sse-parser.ts +4 -3
- package/src/version.ts +1 -1
- package/tests/base-client.test.ts +116 -80
- package/tests/command-client.test.ts +149 -112
- package/tests/file-client.test.ts +309 -197
- package/tests/file-stream.test.ts +24 -20
- package/tests/get-sandbox.test.ts +10 -10
- package/tests/git-client.test.ts +188 -101
- package/tests/port-client.test.ts +100 -108
- package/tests/process-client.test.ts +204 -179
- package/tests/request-handler.test.ts +117 -65
- package/tests/sandbox.test.ts +219 -67
- package/tests/sse-parser.test.ts +17 -16
- package/tests/utility-client.test.ts +79 -72
- package/tsdown.config.ts +12 -0
- package/vitest.config.ts +6 -6
- package/dist/chunk-BFVUNTP4.js +0 -104
- package/dist/chunk-BFVUNTP4.js.map +0 -1
- package/dist/chunk-EKSWCBCA.js +0 -86
- package/dist/chunk-EKSWCBCA.js.map +0 -1
- package/dist/chunk-JXZMAU2C.js +0 -559
- package/dist/chunk-JXZMAU2C.js.map +0 -1
- package/dist/chunk-UJ3TV4M6.js +0 -7
- package/dist/chunk-UJ3TV4M6.js.map +0 -1
- package/dist/chunk-YE265ASX.js +0 -2484
- package/dist/chunk-YE265ASX.js.map +0 -1
- package/dist/chunk-Z532A7QC.js +0 -78
- package/dist/chunk-Z532A7QC.js.map +0 -1
- package/dist/file-stream.d.ts +0 -43
- package/dist/file-stream.js +0 -9
- package/dist/file-stream.js.map +0 -1
- package/dist/interpreter.d.ts +0 -33
- package/dist/interpreter.js +0 -8
- package/dist/interpreter.js.map +0 -1
- package/dist/request-handler.d.ts +0 -18
- package/dist/request-handler.js +0 -13
- package/dist/request-handler.js.map +0 -1
- package/dist/sandbox-CLZWpfGc.d.ts +0 -613
- package/dist/sandbox.d.ts +0 -4
- package/dist/sandbox.js +0 -13
- package/dist/sandbox.js.map +0 -1
- package/dist/security.d.ts +0 -31
- package/dist/security.js +0 -13
- package/dist/security.js.map +0 -1
- package/dist/sse-parser.d.ts +0 -28
- package/dist/sse-parser.js +0 -11
- package/dist/sse-parser.js.map +0 -1
- package/dist/version.d.ts +0 -8
- package/dist/version.js +0 -7
- package/dist/version.js.map +0 -1
package/dist/chunk-JXZMAU2C.js
DELETED
|
@@ -1,559 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
validateLanguage
|
|
3
|
-
} from "./chunk-Z532A7QC.js";
|
|
4
|
-
|
|
5
|
-
// ../shared/dist/interpreter-types.js
|
|
6
|
-
var Execution = class {
|
|
7
|
-
code;
|
|
8
|
-
context;
|
|
9
|
-
/**
|
|
10
|
-
* All results from the execution
|
|
11
|
-
*/
|
|
12
|
-
results = [];
|
|
13
|
-
/**
|
|
14
|
-
* Accumulated stdout and stderr
|
|
15
|
-
*/
|
|
16
|
-
logs = {
|
|
17
|
-
stdout: [],
|
|
18
|
-
stderr: []
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Execution error if any
|
|
22
|
-
*/
|
|
23
|
-
error;
|
|
24
|
-
/**
|
|
25
|
-
* Execution count (for interpreter)
|
|
26
|
-
*/
|
|
27
|
-
executionCount;
|
|
28
|
-
constructor(code, context) {
|
|
29
|
-
this.code = code;
|
|
30
|
-
this.context = context;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Convert to a plain object for serialization
|
|
34
|
-
*/
|
|
35
|
-
toJSON() {
|
|
36
|
-
return {
|
|
37
|
-
code: this.code,
|
|
38
|
-
logs: this.logs,
|
|
39
|
-
error: this.error,
|
|
40
|
-
executionCount: this.executionCount,
|
|
41
|
-
results: this.results.map((result) => ({
|
|
42
|
-
text: result.text,
|
|
43
|
-
html: result.html,
|
|
44
|
-
png: result.png,
|
|
45
|
-
jpeg: result.jpeg,
|
|
46
|
-
svg: result.svg,
|
|
47
|
-
latex: result.latex,
|
|
48
|
-
markdown: result.markdown,
|
|
49
|
-
javascript: result.javascript,
|
|
50
|
-
json: result.json,
|
|
51
|
-
chart: result.chart,
|
|
52
|
-
data: result.data
|
|
53
|
-
}))
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
var ResultImpl = class {
|
|
58
|
-
raw;
|
|
59
|
-
constructor(raw) {
|
|
60
|
-
this.raw = raw;
|
|
61
|
-
}
|
|
62
|
-
get text() {
|
|
63
|
-
return this.raw.text || this.raw.data?.["text/plain"];
|
|
64
|
-
}
|
|
65
|
-
get html() {
|
|
66
|
-
return this.raw.html || this.raw.data?.["text/html"];
|
|
67
|
-
}
|
|
68
|
-
get png() {
|
|
69
|
-
return this.raw.png || this.raw.data?.["image/png"];
|
|
70
|
-
}
|
|
71
|
-
get jpeg() {
|
|
72
|
-
return this.raw.jpeg || this.raw.data?.["image/jpeg"];
|
|
73
|
-
}
|
|
74
|
-
get svg() {
|
|
75
|
-
return this.raw.svg || this.raw.data?.["image/svg+xml"];
|
|
76
|
-
}
|
|
77
|
-
get latex() {
|
|
78
|
-
return this.raw.latex || this.raw.data?.["text/latex"];
|
|
79
|
-
}
|
|
80
|
-
get markdown() {
|
|
81
|
-
return this.raw.markdown || this.raw.data?.["text/markdown"];
|
|
82
|
-
}
|
|
83
|
-
get javascript() {
|
|
84
|
-
return this.raw.javascript || this.raw.data?.["application/javascript"];
|
|
85
|
-
}
|
|
86
|
-
get json() {
|
|
87
|
-
return this.raw.json || this.raw.data?.["application/json"];
|
|
88
|
-
}
|
|
89
|
-
get chart() {
|
|
90
|
-
return this.raw.chart;
|
|
91
|
-
}
|
|
92
|
-
get data() {
|
|
93
|
-
return this.raw.data;
|
|
94
|
-
}
|
|
95
|
-
formats() {
|
|
96
|
-
const formats = [];
|
|
97
|
-
if (this.text)
|
|
98
|
-
formats.push("text");
|
|
99
|
-
if (this.html)
|
|
100
|
-
formats.push("html");
|
|
101
|
-
if (this.png)
|
|
102
|
-
formats.push("png");
|
|
103
|
-
if (this.jpeg)
|
|
104
|
-
formats.push("jpeg");
|
|
105
|
-
if (this.svg)
|
|
106
|
-
formats.push("svg");
|
|
107
|
-
if (this.latex)
|
|
108
|
-
formats.push("latex");
|
|
109
|
-
if (this.markdown)
|
|
110
|
-
formats.push("markdown");
|
|
111
|
-
if (this.javascript)
|
|
112
|
-
formats.push("javascript");
|
|
113
|
-
if (this.json)
|
|
114
|
-
formats.push("json");
|
|
115
|
-
if (this.chart)
|
|
116
|
-
formats.push("chart");
|
|
117
|
-
return formats;
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
// ../shared/dist/logger/index.js
|
|
122
|
-
import { AsyncLocalStorage } from "async_hooks";
|
|
123
|
-
|
|
124
|
-
// ../shared/dist/logger/types.js
|
|
125
|
-
var LogLevel;
|
|
126
|
-
(function(LogLevel2) {
|
|
127
|
-
LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
|
|
128
|
-
LogLevel2[LogLevel2["INFO"] = 1] = "INFO";
|
|
129
|
-
LogLevel2[LogLevel2["WARN"] = 2] = "WARN";
|
|
130
|
-
LogLevel2[LogLevel2["ERROR"] = 3] = "ERROR";
|
|
131
|
-
})(LogLevel || (LogLevel = {}));
|
|
132
|
-
|
|
133
|
-
// ../shared/dist/logger/logger.js
|
|
134
|
-
var COLORS = {
|
|
135
|
-
reset: "\x1B[0m",
|
|
136
|
-
debug: "\x1B[36m",
|
|
137
|
-
// Cyan
|
|
138
|
-
info: "\x1B[32m",
|
|
139
|
-
// Green
|
|
140
|
-
warn: "\x1B[33m",
|
|
141
|
-
// Yellow
|
|
142
|
-
error: "\x1B[31m",
|
|
143
|
-
// Red
|
|
144
|
-
dim: "\x1B[2m"
|
|
145
|
-
// Dim
|
|
146
|
-
};
|
|
147
|
-
var CloudflareLogger = class _CloudflareLogger {
|
|
148
|
-
baseContext;
|
|
149
|
-
minLevel;
|
|
150
|
-
pretty;
|
|
151
|
-
/**
|
|
152
|
-
* Create a new CloudflareLogger
|
|
153
|
-
*
|
|
154
|
-
* @param baseContext Base context included in all log entries
|
|
155
|
-
* @param minLevel Minimum log level to output (default: INFO)
|
|
156
|
-
* @param pretty Enable pretty printing for human-readable output (default: false)
|
|
157
|
-
*/
|
|
158
|
-
constructor(baseContext, minLevel = LogLevel.INFO, pretty = false) {
|
|
159
|
-
this.baseContext = baseContext;
|
|
160
|
-
this.minLevel = minLevel;
|
|
161
|
-
this.pretty = pretty;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Log debug-level message
|
|
165
|
-
*/
|
|
166
|
-
debug(message, context) {
|
|
167
|
-
if (this.shouldLog(LogLevel.DEBUG)) {
|
|
168
|
-
const logData = this.buildLogData("debug", message, context);
|
|
169
|
-
this.output(console.log, logData);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Log info-level message
|
|
174
|
-
*/
|
|
175
|
-
info(message, context) {
|
|
176
|
-
if (this.shouldLog(LogLevel.INFO)) {
|
|
177
|
-
const logData = this.buildLogData("info", message, context);
|
|
178
|
-
this.output(console.log, logData);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Log warning-level message
|
|
183
|
-
*/
|
|
184
|
-
warn(message, context) {
|
|
185
|
-
if (this.shouldLog(LogLevel.WARN)) {
|
|
186
|
-
const logData = this.buildLogData("warn", message, context);
|
|
187
|
-
this.output(console.warn, logData);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Log error-level message
|
|
192
|
-
*/
|
|
193
|
-
error(message, error, context) {
|
|
194
|
-
if (this.shouldLog(LogLevel.ERROR)) {
|
|
195
|
-
const logData = this.buildLogData("error", message, context, error);
|
|
196
|
-
this.output(console.error, logData);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Create a child logger with additional context
|
|
201
|
-
*/
|
|
202
|
-
child(context) {
|
|
203
|
-
return new _CloudflareLogger({ ...this.baseContext, ...context }, this.minLevel, this.pretty);
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Check if a log level should be output
|
|
207
|
-
*/
|
|
208
|
-
shouldLog(level) {
|
|
209
|
-
return level >= this.minLevel;
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Build log data object
|
|
213
|
-
*/
|
|
214
|
-
buildLogData(level, message, context, error) {
|
|
215
|
-
const logData = {
|
|
216
|
-
level,
|
|
217
|
-
msg: message,
|
|
218
|
-
...this.baseContext,
|
|
219
|
-
...context,
|
|
220
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
221
|
-
};
|
|
222
|
-
if (error) {
|
|
223
|
-
logData.error = {
|
|
224
|
-
message: error.message,
|
|
225
|
-
stack: error.stack,
|
|
226
|
-
name: error.name
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
return logData;
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Output log data to console (pretty or JSON)
|
|
233
|
-
*/
|
|
234
|
-
output(consoleFn, data) {
|
|
235
|
-
if (this.pretty) {
|
|
236
|
-
this.outputPretty(consoleFn, data);
|
|
237
|
-
} else {
|
|
238
|
-
this.outputJson(consoleFn, data);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Output as JSON (production)
|
|
243
|
-
*/
|
|
244
|
-
outputJson(consoleFn, data) {
|
|
245
|
-
consoleFn(JSON.stringify(data));
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Output as pretty-printed, colored text (development)
|
|
249
|
-
*
|
|
250
|
-
* Format: LEVEL [component] message (trace: tr_...) {context}
|
|
251
|
-
* Example: INFO [sandbox-do] Command started (trace: tr_7f3a9b2c) {commandId: "cmd-123"}
|
|
252
|
-
*/
|
|
253
|
-
outputPretty(consoleFn, data) {
|
|
254
|
-
const { level, msg, timestamp, traceId, component, sandboxId, sessionId, processId, commandId, operation, duration, error, ...rest } = data;
|
|
255
|
-
const levelStr = String(level || "INFO").toUpperCase();
|
|
256
|
-
const levelColor = this.getLevelColor(levelStr);
|
|
257
|
-
const componentBadge = component ? `[${component}]` : "";
|
|
258
|
-
const traceIdShort = traceId ? String(traceId).substring(0, 12) : "";
|
|
259
|
-
let logLine = `${levelColor}${levelStr.padEnd(5)}${COLORS.reset} ${componentBadge} ${msg}`;
|
|
260
|
-
if (traceIdShort) {
|
|
261
|
-
logLine += ` ${COLORS.dim}(trace: ${traceIdShort})${COLORS.reset}`;
|
|
262
|
-
}
|
|
263
|
-
const contextFields = [];
|
|
264
|
-
if (operation)
|
|
265
|
-
contextFields.push(`operation: ${operation}`);
|
|
266
|
-
if (commandId)
|
|
267
|
-
contextFields.push(`commandId: ${String(commandId).substring(0, 12)}`);
|
|
268
|
-
if (sandboxId)
|
|
269
|
-
contextFields.push(`sandboxId: ${sandboxId}`);
|
|
270
|
-
if (sessionId)
|
|
271
|
-
contextFields.push(`sessionId: ${String(sessionId).substring(0, 12)}`);
|
|
272
|
-
if (processId)
|
|
273
|
-
contextFields.push(`processId: ${processId}`);
|
|
274
|
-
if (duration !== void 0)
|
|
275
|
-
contextFields.push(`duration: ${duration}ms`);
|
|
276
|
-
if (contextFields.length > 0) {
|
|
277
|
-
logLine += ` ${COLORS.dim}{${contextFields.join(", ")}}${COLORS.reset}`;
|
|
278
|
-
}
|
|
279
|
-
consoleFn(logLine);
|
|
280
|
-
if (error && typeof error === "object") {
|
|
281
|
-
const errorObj = error;
|
|
282
|
-
if (errorObj.message) {
|
|
283
|
-
consoleFn(` ${COLORS.error}Error: ${errorObj.message}${COLORS.reset}`);
|
|
284
|
-
}
|
|
285
|
-
if (errorObj.stack) {
|
|
286
|
-
consoleFn(` ${COLORS.dim}${errorObj.stack}${COLORS.reset}`);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
if (Object.keys(rest).length > 0) {
|
|
290
|
-
consoleFn(` ${COLORS.dim}${JSON.stringify(rest, null, 2)}${COLORS.reset}`);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Get ANSI color code for log level
|
|
295
|
-
*/
|
|
296
|
-
getLevelColor(level) {
|
|
297
|
-
const levelLower = level.toLowerCase();
|
|
298
|
-
switch (levelLower) {
|
|
299
|
-
case "debug":
|
|
300
|
-
return COLORS.debug;
|
|
301
|
-
case "info":
|
|
302
|
-
return COLORS.info;
|
|
303
|
-
case "warn":
|
|
304
|
-
return COLORS.warn;
|
|
305
|
-
case "error":
|
|
306
|
-
return COLORS.error;
|
|
307
|
-
default:
|
|
308
|
-
return COLORS.reset;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
};
|
|
312
|
-
|
|
313
|
-
// ../shared/dist/logger/trace-context.js
|
|
314
|
-
var TraceContext = class _TraceContext {
|
|
315
|
-
/**
|
|
316
|
-
* HTTP header name for trace ID propagation
|
|
317
|
-
*/
|
|
318
|
-
static TRACE_HEADER = "X-Trace-Id";
|
|
319
|
-
/**
|
|
320
|
-
* Generate a new trace ID
|
|
321
|
-
*
|
|
322
|
-
* Format: "tr_" + 16 random hex characters
|
|
323
|
-
* Example: "tr_7f3a9b2c4e5d6f1a"
|
|
324
|
-
*
|
|
325
|
-
* @returns Newly generated trace ID
|
|
326
|
-
*/
|
|
327
|
-
static generate() {
|
|
328
|
-
const randomHex = crypto.randomUUID().replace(/-/g, "").substring(0, 16);
|
|
329
|
-
return `tr_${randomHex}`;
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Extract trace ID from HTTP request headers
|
|
333
|
-
*
|
|
334
|
-
* @param headers Request headers
|
|
335
|
-
* @returns Trace ID if present, null otherwise
|
|
336
|
-
*/
|
|
337
|
-
static fromHeaders(headers) {
|
|
338
|
-
return headers.get(_TraceContext.TRACE_HEADER);
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Create headers object with trace ID for outgoing requests
|
|
342
|
-
*
|
|
343
|
-
* @param traceId Trace ID to include
|
|
344
|
-
* @returns Headers object with X-Trace-Id set
|
|
345
|
-
*/
|
|
346
|
-
static toHeaders(traceId) {
|
|
347
|
-
return { [_TraceContext.TRACE_HEADER]: traceId };
|
|
348
|
-
}
|
|
349
|
-
/**
|
|
350
|
-
* Get the header name used for trace ID propagation
|
|
351
|
-
*
|
|
352
|
-
* @returns Header name ("X-Trace-Id")
|
|
353
|
-
*/
|
|
354
|
-
static getHeaderName() {
|
|
355
|
-
return _TraceContext.TRACE_HEADER;
|
|
356
|
-
}
|
|
357
|
-
};
|
|
358
|
-
|
|
359
|
-
// ../shared/dist/logger/index.js
|
|
360
|
-
function createNoOpLogger() {
|
|
361
|
-
return {
|
|
362
|
-
debug: () => {
|
|
363
|
-
},
|
|
364
|
-
info: () => {
|
|
365
|
-
},
|
|
366
|
-
warn: () => {
|
|
367
|
-
},
|
|
368
|
-
error: () => {
|
|
369
|
-
},
|
|
370
|
-
child: () => createNoOpLogger()
|
|
371
|
-
};
|
|
372
|
-
}
|
|
373
|
-
var loggerStorage = new AsyncLocalStorage();
|
|
374
|
-
function getLogger() {
|
|
375
|
-
const logger = loggerStorage.getStore();
|
|
376
|
-
if (!logger) {
|
|
377
|
-
throw new Error("Logger not initialized in async context. Ensure runWithLogger() is called at the entry point (e.g., fetch handler).");
|
|
378
|
-
}
|
|
379
|
-
return logger;
|
|
380
|
-
}
|
|
381
|
-
function runWithLogger(logger, fn) {
|
|
382
|
-
return loggerStorage.run(logger, fn);
|
|
383
|
-
}
|
|
384
|
-
function createLogger(context) {
|
|
385
|
-
const minLevel = getLogLevelFromEnv();
|
|
386
|
-
const pretty = isPrettyPrintEnabled();
|
|
387
|
-
const baseContext = {
|
|
388
|
-
...context,
|
|
389
|
-
traceId: context.traceId || TraceContext.generate(),
|
|
390
|
-
component: context.component
|
|
391
|
-
};
|
|
392
|
-
return new CloudflareLogger(baseContext, minLevel, pretty);
|
|
393
|
-
}
|
|
394
|
-
function getLogLevelFromEnv() {
|
|
395
|
-
const envLevel = getEnvVar("SANDBOX_LOG_LEVEL") || "info";
|
|
396
|
-
switch (envLevel.toLowerCase()) {
|
|
397
|
-
case "debug":
|
|
398
|
-
return LogLevel.DEBUG;
|
|
399
|
-
case "info":
|
|
400
|
-
return LogLevel.INFO;
|
|
401
|
-
case "warn":
|
|
402
|
-
return LogLevel.WARN;
|
|
403
|
-
case "error":
|
|
404
|
-
return LogLevel.ERROR;
|
|
405
|
-
default:
|
|
406
|
-
return LogLevel.INFO;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
function isPrettyPrintEnabled() {
|
|
410
|
-
const format = getEnvVar("SANDBOX_LOG_FORMAT");
|
|
411
|
-
if (format) {
|
|
412
|
-
return format.toLowerCase() === "pretty";
|
|
413
|
-
}
|
|
414
|
-
return false;
|
|
415
|
-
}
|
|
416
|
-
function getEnvVar(name) {
|
|
417
|
-
if (typeof process !== "undefined" && process.env) {
|
|
418
|
-
return process.env[name];
|
|
419
|
-
}
|
|
420
|
-
if (typeof Bun !== "undefined") {
|
|
421
|
-
const bunEnv = Bun.env;
|
|
422
|
-
if (bunEnv) {
|
|
423
|
-
return bunEnv[name];
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
return void 0;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// ../shared/dist/types.js
|
|
430
|
-
function isExecResult(value) {
|
|
431
|
-
return value && typeof value.success === "boolean" && typeof value.exitCode === "number" && typeof value.stdout === "string" && typeof value.stderr === "string";
|
|
432
|
-
}
|
|
433
|
-
function isProcess(value) {
|
|
434
|
-
return value && typeof value.id === "string" && typeof value.command === "string" && typeof value.status === "string";
|
|
435
|
-
}
|
|
436
|
-
function isProcessStatus(value) {
|
|
437
|
-
return ["starting", "running", "completed", "failed", "killed", "error"].includes(value);
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
// src/interpreter.ts
|
|
441
|
-
var CodeInterpreter = class {
|
|
442
|
-
interpreterClient;
|
|
443
|
-
contexts = /* @__PURE__ */ new Map();
|
|
444
|
-
constructor(sandbox) {
|
|
445
|
-
this.interpreterClient = sandbox.client.interpreter;
|
|
446
|
-
}
|
|
447
|
-
/**
|
|
448
|
-
* Create a new code execution context
|
|
449
|
-
*/
|
|
450
|
-
async createCodeContext(options = {}) {
|
|
451
|
-
validateLanguage(options.language);
|
|
452
|
-
const context = await this.interpreterClient.createCodeContext(options);
|
|
453
|
-
this.contexts.set(context.id, context);
|
|
454
|
-
return context;
|
|
455
|
-
}
|
|
456
|
-
/**
|
|
457
|
-
* Run code with optional context
|
|
458
|
-
*/
|
|
459
|
-
async runCode(code, options = {}) {
|
|
460
|
-
let context = options.context;
|
|
461
|
-
if (!context) {
|
|
462
|
-
const language = options.language || "python";
|
|
463
|
-
context = await this.getOrCreateDefaultContext(language);
|
|
464
|
-
}
|
|
465
|
-
const execution = new Execution(code, context);
|
|
466
|
-
await this.interpreterClient.runCodeStream(context.id, code, options.language, {
|
|
467
|
-
onStdout: (output) => {
|
|
468
|
-
execution.logs.stdout.push(output.text);
|
|
469
|
-
if (options.onStdout) return options.onStdout(output);
|
|
470
|
-
},
|
|
471
|
-
onStderr: (output) => {
|
|
472
|
-
execution.logs.stderr.push(output.text);
|
|
473
|
-
if (options.onStderr) return options.onStderr(output);
|
|
474
|
-
},
|
|
475
|
-
onResult: async (result) => {
|
|
476
|
-
execution.results.push(new ResultImpl(result));
|
|
477
|
-
if (options.onResult) return options.onResult(result);
|
|
478
|
-
},
|
|
479
|
-
onError: (error) => {
|
|
480
|
-
execution.error = error;
|
|
481
|
-
if (options.onError) return options.onError(error);
|
|
482
|
-
}
|
|
483
|
-
});
|
|
484
|
-
return execution;
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* Run code and return a streaming response
|
|
488
|
-
*/
|
|
489
|
-
async runCodeStream(code, options = {}) {
|
|
490
|
-
let context = options.context;
|
|
491
|
-
if (!context) {
|
|
492
|
-
const language = options.language || "python";
|
|
493
|
-
context = await this.getOrCreateDefaultContext(language);
|
|
494
|
-
}
|
|
495
|
-
const response = await this.interpreterClient.doFetch("/api/execute/code", {
|
|
496
|
-
method: "POST",
|
|
497
|
-
headers: {
|
|
498
|
-
"Content-Type": "application/json",
|
|
499
|
-
Accept: "text/event-stream"
|
|
500
|
-
},
|
|
501
|
-
body: JSON.stringify({
|
|
502
|
-
context_id: context.id,
|
|
503
|
-
code,
|
|
504
|
-
language: options.language
|
|
505
|
-
})
|
|
506
|
-
});
|
|
507
|
-
if (!response.ok) {
|
|
508
|
-
const errorData = await response.json().catch(() => ({ error: "Unknown error" }));
|
|
509
|
-
throw new Error(
|
|
510
|
-
errorData.error || `Failed to execute code: ${response.status}`
|
|
511
|
-
);
|
|
512
|
-
}
|
|
513
|
-
if (!response.body) {
|
|
514
|
-
throw new Error("No response body for streaming execution");
|
|
515
|
-
}
|
|
516
|
-
return response.body;
|
|
517
|
-
}
|
|
518
|
-
/**
|
|
519
|
-
* List all code contexts
|
|
520
|
-
*/
|
|
521
|
-
async listCodeContexts() {
|
|
522
|
-
const contexts = await this.interpreterClient.listCodeContexts();
|
|
523
|
-
for (const context of contexts) {
|
|
524
|
-
this.contexts.set(context.id, context);
|
|
525
|
-
}
|
|
526
|
-
return contexts;
|
|
527
|
-
}
|
|
528
|
-
/**
|
|
529
|
-
* Delete a code context
|
|
530
|
-
*/
|
|
531
|
-
async deleteCodeContext(contextId) {
|
|
532
|
-
await this.interpreterClient.deleteCodeContext(contextId);
|
|
533
|
-
this.contexts.delete(contextId);
|
|
534
|
-
}
|
|
535
|
-
async getOrCreateDefaultContext(language) {
|
|
536
|
-
for (const context of this.contexts.values()) {
|
|
537
|
-
if (context.language === language) {
|
|
538
|
-
return context;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
return this.createCodeContext({ language });
|
|
542
|
-
}
|
|
543
|
-
};
|
|
544
|
-
|
|
545
|
-
export {
|
|
546
|
-
Execution,
|
|
547
|
-
ResultImpl,
|
|
548
|
-
LogLevel,
|
|
549
|
-
TraceContext,
|
|
550
|
-
createNoOpLogger,
|
|
551
|
-
getLogger,
|
|
552
|
-
runWithLogger,
|
|
553
|
-
createLogger,
|
|
554
|
-
isExecResult,
|
|
555
|
-
isProcess,
|
|
556
|
-
isProcessStatus,
|
|
557
|
-
CodeInterpreter
|
|
558
|
-
};
|
|
559
|
-
//# sourceMappingURL=chunk-JXZMAU2C.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../shared/dist/interpreter-types.js","../../shared/dist/logger/index.js","../../shared/dist/logger/types.js","../../shared/dist/logger/logger.js","../../shared/dist/logger/trace-context.js","../../shared/dist/types.js","../src/interpreter.ts"],"sourcesContent":["// Execution Result Container\nexport class Execution {\n code;\n context;\n /**\n * All results from the execution\n */\n results = [];\n /**\n * Accumulated stdout and stderr\n */\n logs = {\n stdout: [],\n stderr: [],\n };\n /**\n * Execution error if any\n */\n error;\n /**\n * Execution count (for interpreter)\n */\n executionCount;\n constructor(code, context) {\n this.code = code;\n this.context = context;\n }\n /**\n * Convert to a plain object for serialization\n */\n toJSON() {\n return {\n code: this.code,\n logs: this.logs,\n error: this.error,\n executionCount: this.executionCount,\n results: this.results.map((result) => ({\n text: result.text,\n html: result.html,\n png: result.png,\n jpeg: result.jpeg,\n svg: result.svg,\n latex: result.latex,\n markdown: result.markdown,\n javascript: result.javascript,\n json: result.json,\n chart: result.chart,\n data: result.data,\n })),\n };\n }\n}\n// Implementation of Result\nexport class ResultImpl {\n raw;\n constructor(raw) {\n this.raw = raw;\n }\n get text() {\n return this.raw.text || this.raw.data?.[\"text/plain\"];\n }\n get html() {\n return this.raw.html || this.raw.data?.[\"text/html\"];\n }\n get png() {\n return this.raw.png || this.raw.data?.[\"image/png\"];\n }\n get jpeg() {\n return this.raw.jpeg || this.raw.data?.[\"image/jpeg\"];\n }\n get svg() {\n return this.raw.svg || this.raw.data?.[\"image/svg+xml\"];\n }\n get latex() {\n return this.raw.latex || this.raw.data?.[\"text/latex\"];\n }\n get markdown() {\n return this.raw.markdown || this.raw.data?.[\"text/markdown\"];\n }\n get javascript() {\n return this.raw.javascript || this.raw.data?.[\"application/javascript\"];\n }\n get json() {\n return this.raw.json || this.raw.data?.[\"application/json\"];\n }\n get chart() {\n return this.raw.chart;\n }\n get data() {\n return this.raw.data;\n }\n formats() {\n const formats = [];\n if (this.text)\n formats.push(\"text\");\n if (this.html)\n formats.push(\"html\");\n if (this.png)\n formats.push(\"png\");\n if (this.jpeg)\n formats.push(\"jpeg\");\n if (this.svg)\n formats.push(\"svg\");\n if (this.latex)\n formats.push(\"latex\");\n if (this.markdown)\n formats.push(\"markdown\");\n if (this.javascript)\n formats.push(\"javascript\");\n if (this.json)\n formats.push(\"json\");\n if (this.chart)\n formats.push(\"chart\");\n return formats;\n }\n}\n","/**\n * Logger module for Cloudflare Sandbox SDK\n *\n * Provides structured, trace-aware logging with:\n * - AsyncLocalStorage for implicit context propagation\n * - Pretty printing for local development\n * - JSON output for production\n * - Environment auto-detection\n * - Log level configuration\n *\n * Usage:\n *\n * ```typescript\n * // Create a logger at entry point\n * const logger = createLogger({ component: 'sandbox-do', traceId: 'tr_abc123' });\n *\n * // Store in AsyncLocalStorage for entire request\n * await runWithLogger(logger, async () => {\n * await handleRequest();\n * });\n *\n * // Retrieve logger anywhere in call stack\n * const logger = getLogger();\n * logger.info('Operation started');\n *\n * // Add operation-specific context\n * const execLogger = logger.child({ operation: 'exec', commandId: 'cmd-456' });\n * await runWithLogger(execLogger, async () => {\n * // All nested calls automatically get execLogger\n * await executeCommand();\n * });\n * ```\n */\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { CloudflareLogger } from './logger.js';\nimport { TraceContext } from './trace-context.js';\nimport { LogLevel as LogLevelEnum } from './types.js';\nexport { CloudflareLogger } from './logger.js';\nexport { TraceContext } from './trace-context.js';\nexport { LogLevel as LogLevelEnum } from './types.js';\n/**\n * Create a no-op logger for testing\n *\n * Returns a logger that implements the Logger interface but does nothing.\n * Useful for tests that don't need actual logging output.\n *\n * @returns No-op logger instance\n *\n * @example\n * ```typescript\n * // In tests\n * const client = new HttpClient({\n * baseUrl: 'http://test.com',\n * logger: createNoOpLogger() // Optional - tests can enable real logging if needed\n * });\n * ```\n */\nexport function createNoOpLogger() {\n return {\n debug: () => { },\n info: () => { },\n warn: () => { },\n error: () => { },\n child: () => createNoOpLogger(),\n };\n}\n/**\n * AsyncLocalStorage for logger context\n *\n * Enables implicit logger propagation throughout the call stack without\n * explicit parameter passing. The logger is stored per async context.\n */\nconst loggerStorage = new AsyncLocalStorage();\n/**\n * Get the current logger from AsyncLocalStorage\n *\n * @throws Error if no logger is initialized in the current async context\n * @returns Current logger instance\n *\n * @example\n * ```typescript\n * function someHelperFunction() {\n * const logger = getLogger(); // Automatically has all context!\n * logger.info('Helper called');\n * }\n * ```\n */\nexport function getLogger() {\n const logger = loggerStorage.getStore();\n if (!logger) {\n throw new Error('Logger not initialized in async context. ' +\n 'Ensure runWithLogger() is called at the entry point (e.g., fetch handler).');\n }\n return logger;\n}\n/**\n * Run a function with a logger stored in AsyncLocalStorage\n *\n * The logger is available to all code within the function via getLogger().\n * This is typically called at request entry points (fetch handler) and when\n * creating child loggers with additional context.\n *\n * @param logger Logger instance to store in context\n * @param fn Function to execute with logger context\n * @returns Result of the function\n *\n * @example\n * ```typescript\n * // At request entry point\n * async fetch(request: Request): Promise<Response> {\n * const logger = createLogger({ component: 'sandbox-do', traceId: 'tr_abc' });\n * return runWithLogger(logger, async () => {\n * return await this.handleRequest(request);\n * });\n * }\n *\n * // When adding operation context\n * async exec(command: string) {\n * const logger = getLogger().child({ operation: 'exec', commandId: 'cmd-123' });\n * return runWithLogger(logger, async () => {\n * logger.info('Command started');\n * await this.executeCommand(command); // Nested calls get the child logger\n * logger.info('Command completed');\n * });\n * }\n * ```\n */\nexport function runWithLogger(logger, fn) {\n return loggerStorage.run(logger, fn);\n}\n/**\n * Create a new logger instance\n *\n * @param context Base context for the logger. Must include 'component'.\n * TraceId will be auto-generated if not provided.\n * @returns New logger instance\n *\n * @example\n * ```typescript\n * // In Durable Object\n * const logger = createLogger({\n * component: 'sandbox-do',\n * traceId: TraceContext.fromHeaders(request.headers) || TraceContext.generate(),\n * sandboxId: this.id\n * });\n *\n * // In Container\n * const logger = createLogger({\n * component: 'container',\n * traceId: TraceContext.fromHeaders(request.headers)!,\n * sessionId: this.id\n * });\n * ```\n */\nexport function createLogger(context) {\n const minLevel = getLogLevelFromEnv();\n const pretty = isPrettyPrintEnabled();\n const baseContext = {\n ...context,\n traceId: context.traceId || TraceContext.generate(),\n component: context.component,\n };\n return new CloudflareLogger(baseContext, minLevel, pretty);\n}\n/**\n * Get log level from environment variable\n *\n * Checks SANDBOX_LOG_LEVEL env var, falls back to default based on environment.\n * Default: 'debug' for development, 'info' for production\n */\nfunction getLogLevelFromEnv() {\n const envLevel = getEnvVar('SANDBOX_LOG_LEVEL') || 'info';\n switch (envLevel.toLowerCase()) {\n case 'debug':\n return LogLevelEnum.DEBUG;\n case 'info':\n return LogLevelEnum.INFO;\n case 'warn':\n return LogLevelEnum.WARN;\n case 'error':\n return LogLevelEnum.ERROR;\n default:\n // Invalid level, fall back to info\n return LogLevelEnum.INFO;\n }\n}\n/**\n * Check if pretty printing should be enabled\n *\n * Checks SANDBOX_LOG_FORMAT env var, falls back to auto-detection:\n * - Local development: pretty (colored, human-readable)\n * - Production: json (structured)\n */\nfunction isPrettyPrintEnabled() {\n // Check explicit SANDBOX_LOG_FORMAT env var\n const format = getEnvVar('SANDBOX_LOG_FORMAT');\n if (format) {\n return format.toLowerCase() === 'pretty';\n }\n return false;\n}\n/**\n * Get environment variable value\n *\n * Supports both Node.js (process.env) and Bun (Bun.env)\n */\nfunction getEnvVar(name) {\n // Try process.env first (Node.js / Bun)\n if (typeof process !== 'undefined' && process.env) {\n return process.env[name];\n }\n // Try Bun.env (Bun runtime)\n if (typeof Bun !== 'undefined') {\n const bunEnv = Bun.env;\n if (bunEnv) {\n return bunEnv[name];\n }\n }\n return undefined;\n}\n","/**\n * Logger types for Cloudflare Sandbox SDK\n *\n * Provides structured, trace-aware logging across Worker, Durable Object, and Container.\n */\n/**\n * Log levels (from most to least verbose)\n */\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n})(LogLevel || (LogLevel = {}));\n","/**\n * Logger implementation\n */\nimport { LogLevel as LogLevelEnum } from './types.js';\n/**\n * ANSI color codes for terminal output\n */\nconst COLORS = {\n reset: '\\x1b[0m',\n debug: '\\x1b[36m', // Cyan\n info: '\\x1b[32m', // Green\n warn: '\\x1b[33m', // Yellow\n error: '\\x1b[31m', // Red\n dim: '\\x1b[2m', // Dim\n};\n/**\n * CloudflareLogger implements structured logging with support for\n * both JSON output (production) and pretty printing (development).\n */\nexport class CloudflareLogger {\n baseContext;\n minLevel;\n pretty;\n /**\n * Create a new CloudflareLogger\n *\n * @param baseContext Base context included in all log entries\n * @param minLevel Minimum log level to output (default: INFO)\n * @param pretty Enable pretty printing for human-readable output (default: false)\n */\n constructor(baseContext, minLevel = LogLevelEnum.INFO, pretty = false) {\n this.baseContext = baseContext;\n this.minLevel = minLevel;\n this.pretty = pretty;\n }\n /**\n * Log debug-level message\n */\n debug(message, context) {\n if (this.shouldLog(LogLevelEnum.DEBUG)) {\n const logData = this.buildLogData('debug', message, context);\n this.output(console.log, logData);\n }\n }\n /**\n * Log info-level message\n */\n info(message, context) {\n if (this.shouldLog(LogLevelEnum.INFO)) {\n const logData = this.buildLogData('info', message, context);\n this.output(console.log, logData);\n }\n }\n /**\n * Log warning-level message\n */\n warn(message, context) {\n if (this.shouldLog(LogLevelEnum.WARN)) {\n const logData = this.buildLogData('warn', message, context);\n this.output(console.warn, logData);\n }\n }\n /**\n * Log error-level message\n */\n error(message, error, context) {\n if (this.shouldLog(LogLevelEnum.ERROR)) {\n const logData = this.buildLogData('error', message, context, error);\n this.output(console.error, logData);\n }\n }\n /**\n * Create a child logger with additional context\n */\n child(context) {\n return new CloudflareLogger({ ...this.baseContext, ...context }, this.minLevel, this.pretty);\n }\n /**\n * Check if a log level should be output\n */\n shouldLog(level) {\n return level >= this.minLevel;\n }\n /**\n * Build log data object\n */\n buildLogData(level, message, context, error) {\n const logData = {\n level,\n msg: message,\n ...this.baseContext,\n ...context,\n timestamp: new Date().toISOString(),\n };\n // Add error details if provided\n if (error) {\n logData.error = {\n message: error.message,\n stack: error.stack,\n name: error.name,\n };\n }\n return logData;\n }\n /**\n * Output log data to console (pretty or JSON)\n */\n output(consoleFn, data) {\n if (this.pretty) {\n this.outputPretty(consoleFn, data);\n }\n else {\n this.outputJson(consoleFn, data);\n }\n }\n /**\n * Output as JSON (production)\n */\n outputJson(consoleFn, data) {\n consoleFn(JSON.stringify(data));\n }\n /**\n * Output as pretty-printed, colored text (development)\n *\n * Format: LEVEL [component] message (trace: tr_...) {context}\n * Example: INFO [sandbox-do] Command started (trace: tr_7f3a9b2c) {commandId: \"cmd-123\"}\n */\n outputPretty(consoleFn, data) {\n const { level, msg, timestamp, traceId, component, sandboxId, sessionId, processId, commandId, operation, duration, error, ...rest } = data;\n // Build the main log line\n const levelStr = String(level || 'INFO').toUpperCase();\n const levelColor = this.getLevelColor(levelStr);\n const componentBadge = component ? `[${component}]` : '';\n const traceIdShort = traceId ? String(traceId).substring(0, 12) : '';\n // Start with level and component\n let logLine = `${levelColor}${levelStr.padEnd(5)}${COLORS.reset} ${componentBadge} ${msg}`;\n // Add trace ID if present\n if (traceIdShort) {\n logLine += ` ${COLORS.dim}(trace: ${traceIdShort})${COLORS.reset}`;\n }\n // Collect important context fields\n const contextFields = [];\n if (operation)\n contextFields.push(`operation: ${operation}`);\n if (commandId)\n contextFields.push(`commandId: ${String(commandId).substring(0, 12)}`);\n if (sandboxId)\n contextFields.push(`sandboxId: ${sandboxId}`);\n if (sessionId)\n contextFields.push(`sessionId: ${String(sessionId).substring(0, 12)}`);\n if (processId)\n contextFields.push(`processId: ${processId}`);\n if (duration !== undefined)\n contextFields.push(`duration: ${duration}ms`);\n // Add important context inline\n if (contextFields.length > 0) {\n logLine += ` ${COLORS.dim}{${contextFields.join(', ')}}${COLORS.reset}`;\n }\n // Output main log line\n consoleFn(logLine);\n // Output error details on separate lines if present\n if (error && typeof error === 'object') {\n const errorObj = error;\n if (errorObj.message) {\n consoleFn(` ${COLORS.error}Error: ${errorObj.message}${COLORS.reset}`);\n }\n if (errorObj.stack) {\n consoleFn(` ${COLORS.dim}${errorObj.stack}${COLORS.reset}`);\n }\n }\n // Output additional context if present\n if (Object.keys(rest).length > 0) {\n consoleFn(` ${COLORS.dim}${JSON.stringify(rest, null, 2)}${COLORS.reset}`);\n }\n }\n /**\n * Get ANSI color code for log level\n */\n getLevelColor(level) {\n const levelLower = level.toLowerCase();\n switch (levelLower) {\n case 'debug':\n return COLORS.debug;\n case 'info':\n return COLORS.info;\n case 'warn':\n return COLORS.warn;\n case 'error':\n return COLORS.error;\n default:\n return COLORS.reset;\n }\n }\n}\n","/**\n * Trace context utilities for request correlation\n *\n * Trace IDs enable correlating logs across distributed components:\n * Worker → Durable Object → Container → back\n *\n * The trace ID is propagated via the X-Trace-Id HTTP header.\n */\n/**\n * Utility for managing trace context across distributed components\n */\n// biome-ignore lint/complexity/noStaticOnlyClass: Keep as class for namespace grouping and discoverability\nexport class TraceContext {\n /**\n * HTTP header name for trace ID propagation\n */\n static TRACE_HEADER = 'X-Trace-Id';\n /**\n * Generate a new trace ID\n *\n * Format: \"tr_\" + 16 random hex characters\n * Example: \"tr_7f3a9b2c4e5d6f1a\"\n *\n * @returns Newly generated trace ID\n */\n static generate() {\n // Use crypto.randomUUID() for randomness, extract 16 hex chars\n const randomHex = crypto.randomUUID().replace(/-/g, '').substring(0, 16);\n return `tr_${randomHex}`;\n }\n /**\n * Extract trace ID from HTTP request headers\n *\n * @param headers Request headers\n * @returns Trace ID if present, null otherwise\n */\n static fromHeaders(headers) {\n return headers.get(TraceContext.TRACE_HEADER);\n }\n /**\n * Create headers object with trace ID for outgoing requests\n *\n * @param traceId Trace ID to include\n * @returns Headers object with X-Trace-Id set\n */\n static toHeaders(traceId) {\n return { [TraceContext.TRACE_HEADER]: traceId };\n }\n /**\n * Get the header name used for trace ID propagation\n *\n * @returns Header name (\"X-Trace-Id\")\n */\n static getHeaderName() {\n return TraceContext.TRACE_HEADER;\n }\n}\n","// Type guards for runtime validation\nexport function isExecResult(value) {\n return value &&\n typeof value.success === 'boolean' &&\n typeof value.exitCode === 'number' &&\n typeof value.stdout === 'string' &&\n typeof value.stderr === 'string';\n}\nexport function isProcess(value) {\n return value &&\n typeof value.id === 'string' &&\n typeof value.command === 'string' &&\n typeof value.status === 'string';\n}\nexport function isProcessStatus(value) {\n return ['starting', 'running', 'completed', 'failed', 'killed', 'error'].includes(value);\n}\n// Re-export interpreter types for convenience\nexport { Execution, ResultImpl } from './interpreter-types';\n","import {\n type CodeContext,\n type CreateContextOptions,\n Execution,\n type ExecutionError,\n type OutputMessage,\n type Result,\n ResultImpl,\n type RunCodeOptions,\n} from \"@repo/shared\";\nimport type { InterpreterClient } from \"./clients/interpreter-client.js\";\nimport type { Sandbox } from \"./sandbox.js\";\nimport { validateLanguage } from \"./security.js\";\n\nexport class CodeInterpreter {\n private interpreterClient: InterpreterClient;\n private contexts = new Map<string, CodeContext>();\n\n constructor(sandbox: Sandbox) {\n // In init-testing architecture, client is a SandboxClient with an interpreter property\n this.interpreterClient = (sandbox.client as any).interpreter as InterpreterClient;\n }\n\n /**\n * Create a new code execution context\n */\n async createCodeContext(\n options: CreateContextOptions = {}\n ): Promise<CodeContext> {\n // Validate language before sending to container\n validateLanguage(options.language);\n\n const context = await this.interpreterClient.createCodeContext(options);\n this.contexts.set(context.id, context);\n return context;\n }\n\n /**\n * Run code with optional context\n */\n async runCode(\n code: string,\n options: RunCodeOptions = {}\n ): Promise<Execution> {\n // Get or create context\n let context = options.context;\n if (!context) {\n // Try to find or create a default context for the language\n const language = options.language || \"python\";\n context = await this.getOrCreateDefaultContext(language);\n }\n\n // Create execution object to collect results\n const execution = new Execution(code, context);\n\n // Stream execution\n await this.interpreterClient.runCodeStream(context.id, code, options.language, {\n onStdout: (output: OutputMessage) => {\n execution.logs.stdout.push(output.text);\n if (options.onStdout) return options.onStdout(output);\n },\n onStderr: (output: OutputMessage) => {\n execution.logs.stderr.push(output.text);\n if (options.onStderr) return options.onStderr(output);\n },\n onResult: async (result: Result) => {\n execution.results.push(new ResultImpl(result) as any);\n if (options.onResult) return options.onResult(result);\n },\n onError: (error: ExecutionError) => {\n execution.error = error;\n if (options.onError) return options.onError(error);\n },\n });\n\n return execution;\n }\n\n /**\n * Run code and return a streaming response\n */\n async runCodeStream(\n code: string,\n options: RunCodeOptions = {}\n ): Promise<ReadableStream> {\n // Get or create context\n let context = options.context;\n if (!context) {\n const language = options.language || \"python\";\n context = await this.getOrCreateDefaultContext(language);\n }\n\n // Create streaming response\n // Note: doFetch is protected but we need direct access for raw stream response\n const response = await (this.interpreterClient as any).doFetch(\"/api/execute/code\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n },\n body: JSON.stringify({\n context_id: context.id,\n code,\n language: options.language,\n }),\n });\n\n if (!response.ok) {\n const errorData = (await response\n .json()\n .catch(() => ({ error: \"Unknown error\" }))) as { error?: string };\n throw new Error(\n errorData.error || `Failed to execute code: ${response.status}`\n );\n }\n\n if (!response.body) {\n throw new Error(\"No response body for streaming execution\");\n }\n\n return response.body;\n }\n\n /**\n * List all code contexts\n */\n async listCodeContexts(): Promise<CodeContext[]> {\n const contexts = await this.interpreterClient.listCodeContexts();\n\n // Update local cache\n for (const context of contexts) {\n this.contexts.set(context.id, context);\n }\n\n return contexts;\n }\n\n /**\n * Delete a code context\n */\n async deleteCodeContext(contextId: string): Promise<void> {\n await this.interpreterClient.deleteCodeContext(contextId);\n this.contexts.delete(contextId);\n }\n\n private async getOrCreateDefaultContext(\n language: \"python\" | \"javascript\" | \"typescript\"\n ): Promise<CodeContext> {\n // Check if we have a cached context for this language\n for (const context of this.contexts.values()) {\n if (context.language === language) {\n return context;\n }\n }\n\n // Create new default context\n return this.createCodeContext({ language });\n }\n}\n"],"mappings":"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","names":["LogLevel"]}
|
package/dist/chunk-UJ3TV4M6.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["/**\n * SDK version - automatically synchronized with package.json by Changesets\n * This file is auto-updated by .github/changeset-version.ts during releases\n * DO NOT EDIT MANUALLY - Changes will be overwritten on the next version bump\n */\nexport const SDK_VERSION = '0.4.12';\n"],"mappings":";AAKO,IAAM,cAAc;","names":[]}
|