@cloudflare/sandbox 0.0.0-9fa3058 → 0.0.0-aa00a75
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/CHANGELOG.md +139 -0
- package/Dockerfile +120 -26
- package/README.md +91 -489
- package/dist/chunk-BCJ7SF3Q.js +117 -0
- package/dist/chunk-BCJ7SF3Q.js.map +1 -0
- package/dist/chunk-BFVUNTP4.js +104 -0
- package/dist/chunk-BFVUNTP4.js.map +1 -0
- package/dist/chunk-EKSWCBCA.js +86 -0
- package/dist/chunk-EKSWCBCA.js.map +1 -0
- package/dist/chunk-HGF554LH.js +2236 -0
- package/dist/chunk-HGF554LH.js.map +1 -0
- package/dist/chunk-Z532A7QC.js +78 -0
- package/dist/chunk-Z532A7QC.js.map +1 -0
- package/dist/file-stream.d.ts +43 -0
- package/dist/file-stream.js +9 -0
- package/dist/file-stream.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/interpreter.d.ts +33 -0
- package/dist/interpreter.js +8 -0
- package/dist/interpreter.js.map +1 -0
- package/dist/request-handler.d.ts +18 -0
- package/dist/request-handler.js +12 -0
- package/dist/request-handler.js.map +1 -0
- package/dist/sandbox-D9K2ypln.d.ts +583 -0
- package/dist/sandbox.d.ts +4 -0
- package/dist/sandbox.js +12 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/security.d.ts +31 -0
- package/dist/security.js +13 -0
- package/dist/security.js.map +1 -0
- package/dist/sse-parser.d.ts +28 -0
- package/dist/sse-parser.js +11 -0
- package/dist/sse-parser.js.map +1 -0
- package/package.json +11 -5
- package/src/clients/base-client.ts +280 -0
- package/src/clients/command-client.ts +115 -0
- package/src/clients/file-client.ts +269 -0
- package/src/clients/git-client.ts +92 -0
- package/src/clients/index.ts +63 -0
- package/src/clients/interpreter-client.ts +329 -0
- package/src/clients/port-client.ts +105 -0
- package/src/clients/process-client.ts +177 -0
- package/src/clients/sandbox-client.ts +41 -0
- package/src/clients/types.ts +84 -0
- package/src/clients/utility-client.ts +94 -0
- package/src/errors/adapter.ts +180 -0
- package/src/errors/classes.ts +469 -0
- package/src/errors/index.ts +105 -0
- package/src/file-stream.ts +164 -0
- package/src/index.ts +85 -12
- package/src/interpreter.ts +159 -0
- package/src/request-handler.ts +69 -43
- package/src/sandbox.ts +559 -288
- package/src/security.ts +14 -23
- package/src/sse-parser.ts +4 -8
- package/startup.sh +3 -0
- package/tests/base-client.test.ts +328 -0
- package/tests/command-client.test.ts +407 -0
- package/tests/file-client.test.ts +643 -0
- package/tests/file-stream.test.ts +306 -0
- package/tests/git-client.test.ts +328 -0
- package/tests/port-client.test.ts +301 -0
- package/tests/process-client.test.ts +658 -0
- package/tests/sandbox.test.ts +465 -0
- package/tests/sse-parser.test.ts +290 -0
- package/tests/utility-client.test.ts +266 -0
- package/tests/wrangler.jsonc +35 -0
- package/tsconfig.json +9 -1
- package/vitest.config.ts +31 -0
- package/container_src/handler/exec.ts +0 -337
- package/container_src/handler/file.ts +0 -844
- package/container_src/handler/git.ts +0 -182
- package/container_src/handler/ports.ts +0 -314
- package/container_src/handler/process.ts +0 -640
- package/container_src/index.ts +0 -361
- package/container_src/package.json +0 -9
- package/container_src/types.ts +0 -103
- package/src/client.ts +0 -1038
- package/src/types.ts +0 -386
package/container_src/index.ts
DELETED
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
import { randomBytes } from "node:crypto";
|
|
2
|
-
import { serve } from "bun";
|
|
3
|
-
import { handleExecuteRequest, handleStreamingExecuteRequest } from "./handler/exec";
|
|
4
|
-
import {
|
|
5
|
-
handleDeleteFileRequest,
|
|
6
|
-
handleMkdirRequest,
|
|
7
|
-
handleMoveFileRequest,
|
|
8
|
-
handleReadFileRequest,
|
|
9
|
-
handleRenameFileRequest,
|
|
10
|
-
handleWriteFileRequest,
|
|
11
|
-
} from "./handler/file";
|
|
12
|
-
import { handleGitCheckoutRequest } from "./handler/git";
|
|
13
|
-
import {
|
|
14
|
-
handleExposePortRequest,
|
|
15
|
-
handleGetExposedPortsRequest,
|
|
16
|
-
handleProxyRequest,
|
|
17
|
-
handleUnexposePortRequest,
|
|
18
|
-
} from "./handler/ports";
|
|
19
|
-
import {
|
|
20
|
-
handleGetProcessLogsRequest,
|
|
21
|
-
handleGetProcessRequest,
|
|
22
|
-
handleKillAllProcessesRequest,
|
|
23
|
-
handleKillProcessRequest,
|
|
24
|
-
handleListProcessesRequest,
|
|
25
|
-
handleStartProcessRequest,
|
|
26
|
-
handleStreamProcessLogsRequest,
|
|
27
|
-
} from "./handler/process";
|
|
28
|
-
import type { ProcessRecord, SessionData } from "./types";
|
|
29
|
-
|
|
30
|
-
// In-memory session storage (in production, you'd want to use a proper database)
|
|
31
|
-
const sessions = new Map<string, SessionData>();
|
|
32
|
-
|
|
33
|
-
// In-memory storage for exposed ports
|
|
34
|
-
const exposedPorts = new Map<number, { name?: string; exposedAt: Date }>();
|
|
35
|
-
|
|
36
|
-
// In-memory process storage - cleared on container restart
|
|
37
|
-
const processes = new Map<string, ProcessRecord>();
|
|
38
|
-
|
|
39
|
-
// Generate a unique session ID using cryptographically secure randomness
|
|
40
|
-
function generateSessionId(): string {
|
|
41
|
-
return `session_${Date.now()}_${randomBytes(6).toString('hex')}`;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Clean up old sessions (older than 1 hour)
|
|
45
|
-
function cleanupOldSessions() {
|
|
46
|
-
const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000);
|
|
47
|
-
for (const [sessionId, session] of sessions.entries()) {
|
|
48
|
-
if (session.createdAt < oneHourAgo && !session.activeProcess) {
|
|
49
|
-
sessions.delete(sessionId);
|
|
50
|
-
console.log(`[Server] Cleaned up old session: ${sessionId}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Run cleanup every 10 minutes
|
|
56
|
-
setInterval(cleanupOldSessions, 10 * 60 * 1000);
|
|
57
|
-
|
|
58
|
-
const server = serve({
|
|
59
|
-
fetch(req: Request) {
|
|
60
|
-
const url = new URL(req.url);
|
|
61
|
-
const pathname = url.pathname;
|
|
62
|
-
|
|
63
|
-
console.log(`[Container] Incoming ${req.method} request to ${pathname}`);
|
|
64
|
-
|
|
65
|
-
// Handle CORS
|
|
66
|
-
const corsHeaders = {
|
|
67
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
|
68
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
69
|
-
"Access-Control-Allow-Origin": "*",
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
// Handle preflight requests
|
|
73
|
-
if (req.method === "OPTIONS") {
|
|
74
|
-
console.log(`[Container] Handling CORS preflight for ${pathname}`);
|
|
75
|
-
return new Response(null, { headers: corsHeaders, status: 200 });
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
// Handle different routes
|
|
80
|
-
console.log(`[Container] Processing ${req.method} ${pathname}`);
|
|
81
|
-
switch (pathname) {
|
|
82
|
-
case "/":
|
|
83
|
-
return new Response("Hello from Bun server! 🚀", {
|
|
84
|
-
headers: {
|
|
85
|
-
"Content-Type": "text/plain; charset=utf-8",
|
|
86
|
-
...corsHeaders,
|
|
87
|
-
},
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
case "/api/session/create":
|
|
91
|
-
if (req.method === "POST") {
|
|
92
|
-
const sessionId = generateSessionId();
|
|
93
|
-
const sessionData: SessionData = {
|
|
94
|
-
activeProcess: null,
|
|
95
|
-
createdAt: new Date(),
|
|
96
|
-
sessionId,
|
|
97
|
-
};
|
|
98
|
-
sessions.set(sessionId, sessionData);
|
|
99
|
-
|
|
100
|
-
console.log(`[Server] Created new session: ${sessionId}`);
|
|
101
|
-
|
|
102
|
-
return new Response(
|
|
103
|
-
JSON.stringify({
|
|
104
|
-
message: "Session created successfully",
|
|
105
|
-
sessionId,
|
|
106
|
-
timestamp: new Date().toISOString(),
|
|
107
|
-
}),
|
|
108
|
-
{
|
|
109
|
-
headers: {
|
|
110
|
-
"Content-Type": "application/json",
|
|
111
|
-
...corsHeaders,
|
|
112
|
-
},
|
|
113
|
-
}
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
break;
|
|
117
|
-
|
|
118
|
-
case "/api/session/list":
|
|
119
|
-
if (req.method === "GET") {
|
|
120
|
-
const sessionList = Array.from(sessions.values()).map(
|
|
121
|
-
(session) => ({
|
|
122
|
-
createdAt: session.createdAt.toISOString(),
|
|
123
|
-
hasActiveProcess: !!session.activeProcess,
|
|
124
|
-
sessionId: session.sessionId,
|
|
125
|
-
})
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
return new Response(
|
|
129
|
-
JSON.stringify({
|
|
130
|
-
count: sessionList.length,
|
|
131
|
-
sessions: sessionList,
|
|
132
|
-
timestamp: new Date().toISOString(),
|
|
133
|
-
}),
|
|
134
|
-
{
|
|
135
|
-
headers: {
|
|
136
|
-
"Content-Type": "application/json",
|
|
137
|
-
...corsHeaders,
|
|
138
|
-
},
|
|
139
|
-
}
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
break;
|
|
143
|
-
|
|
144
|
-
case "/api/execute":
|
|
145
|
-
if (req.method === "POST") {
|
|
146
|
-
return handleExecuteRequest(sessions, req, corsHeaders);
|
|
147
|
-
}
|
|
148
|
-
break;
|
|
149
|
-
|
|
150
|
-
case "/api/execute/stream":
|
|
151
|
-
if (req.method === "POST") {
|
|
152
|
-
return handleStreamingExecuteRequest(sessions, req, corsHeaders);
|
|
153
|
-
}
|
|
154
|
-
break;
|
|
155
|
-
|
|
156
|
-
case "/api/ping":
|
|
157
|
-
if (req.method === "GET") {
|
|
158
|
-
return new Response(
|
|
159
|
-
JSON.stringify({
|
|
160
|
-
message: "pong",
|
|
161
|
-
timestamp: new Date().toISOString(),
|
|
162
|
-
}),
|
|
163
|
-
{
|
|
164
|
-
headers: {
|
|
165
|
-
"Content-Type": "application/json",
|
|
166
|
-
...corsHeaders,
|
|
167
|
-
},
|
|
168
|
-
}
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
break;
|
|
172
|
-
|
|
173
|
-
case "/api/commands":
|
|
174
|
-
if (req.method === "GET") {
|
|
175
|
-
return new Response(
|
|
176
|
-
JSON.stringify({
|
|
177
|
-
availableCommands: [
|
|
178
|
-
"ls",
|
|
179
|
-
"pwd",
|
|
180
|
-
"echo",
|
|
181
|
-
"cat",
|
|
182
|
-
"grep",
|
|
183
|
-
"find",
|
|
184
|
-
"whoami",
|
|
185
|
-
"date",
|
|
186
|
-
"uptime",
|
|
187
|
-
"ps",
|
|
188
|
-
"top",
|
|
189
|
-
"df",
|
|
190
|
-
"du",
|
|
191
|
-
"free",
|
|
192
|
-
],
|
|
193
|
-
timestamp: new Date().toISOString(),
|
|
194
|
-
}),
|
|
195
|
-
{
|
|
196
|
-
headers: {
|
|
197
|
-
"Content-Type": "application/json",
|
|
198
|
-
...corsHeaders,
|
|
199
|
-
},
|
|
200
|
-
}
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
break;
|
|
204
|
-
|
|
205
|
-
case "/api/git/checkout":
|
|
206
|
-
if (req.method === "POST") {
|
|
207
|
-
return handleGitCheckoutRequest(sessions, req, corsHeaders);
|
|
208
|
-
}
|
|
209
|
-
break;
|
|
210
|
-
|
|
211
|
-
case "/api/mkdir":
|
|
212
|
-
if (req.method === "POST") {
|
|
213
|
-
return handleMkdirRequest(sessions, req, corsHeaders);
|
|
214
|
-
}
|
|
215
|
-
break;
|
|
216
|
-
|
|
217
|
-
case "/api/write":
|
|
218
|
-
if (req.method === "POST") {
|
|
219
|
-
return handleWriteFileRequest(req, corsHeaders);
|
|
220
|
-
}
|
|
221
|
-
break;
|
|
222
|
-
|
|
223
|
-
case "/api/read":
|
|
224
|
-
if (req.method === "POST") {
|
|
225
|
-
return handleReadFileRequest(req, corsHeaders);
|
|
226
|
-
}
|
|
227
|
-
break;
|
|
228
|
-
|
|
229
|
-
case "/api/delete":
|
|
230
|
-
if (req.method === "POST") {
|
|
231
|
-
return handleDeleteFileRequest(req, corsHeaders);
|
|
232
|
-
}
|
|
233
|
-
break;
|
|
234
|
-
|
|
235
|
-
case "/api/rename":
|
|
236
|
-
if (req.method === "POST") {
|
|
237
|
-
return handleRenameFileRequest(req, corsHeaders);
|
|
238
|
-
}
|
|
239
|
-
break;
|
|
240
|
-
|
|
241
|
-
case "/api/move":
|
|
242
|
-
if (req.method === "POST") {
|
|
243
|
-
return handleMoveFileRequest(req, corsHeaders);
|
|
244
|
-
}
|
|
245
|
-
break;
|
|
246
|
-
|
|
247
|
-
case "/api/expose-port":
|
|
248
|
-
if (req.method === "POST") {
|
|
249
|
-
return handleExposePortRequest(exposedPorts, req, corsHeaders);
|
|
250
|
-
}
|
|
251
|
-
break;
|
|
252
|
-
|
|
253
|
-
case "/api/unexpose-port":
|
|
254
|
-
if (req.method === "DELETE") {
|
|
255
|
-
return handleUnexposePortRequest(exposedPorts, req, corsHeaders);
|
|
256
|
-
}
|
|
257
|
-
break;
|
|
258
|
-
|
|
259
|
-
case "/api/exposed-ports":
|
|
260
|
-
if (req.method === "GET") {
|
|
261
|
-
return handleGetExposedPortsRequest(exposedPorts, req, corsHeaders);
|
|
262
|
-
}
|
|
263
|
-
break;
|
|
264
|
-
|
|
265
|
-
case "/api/process/start":
|
|
266
|
-
if (req.method === "POST") {
|
|
267
|
-
return handleStartProcessRequest(processes, req, corsHeaders);
|
|
268
|
-
}
|
|
269
|
-
break;
|
|
270
|
-
|
|
271
|
-
case "/api/process/list":
|
|
272
|
-
if (req.method === "GET") {
|
|
273
|
-
return handleListProcessesRequest(processes, req, corsHeaders);
|
|
274
|
-
}
|
|
275
|
-
break;
|
|
276
|
-
|
|
277
|
-
case "/api/process/kill-all":
|
|
278
|
-
if (req.method === "DELETE") {
|
|
279
|
-
return handleKillAllProcessesRequest(processes, req, corsHeaders);
|
|
280
|
-
}
|
|
281
|
-
break;
|
|
282
|
-
|
|
283
|
-
default:
|
|
284
|
-
// Handle dynamic routes for individual processes
|
|
285
|
-
if (pathname.startsWith("/api/process/")) {
|
|
286
|
-
const segments = pathname.split('/');
|
|
287
|
-
if (segments.length >= 4) {
|
|
288
|
-
const processId = segments[3];
|
|
289
|
-
const action = segments[4]; // Optional: logs, stream, etc.
|
|
290
|
-
|
|
291
|
-
if (!action && req.method === "GET") {
|
|
292
|
-
return handleGetProcessRequest(processes, req, corsHeaders, processId);
|
|
293
|
-
} else if (!action && req.method === "DELETE") {
|
|
294
|
-
return handleKillProcessRequest(processes, req, corsHeaders, processId);
|
|
295
|
-
} else if (action === "logs" && req.method === "GET") {
|
|
296
|
-
return handleGetProcessLogsRequest(processes, req, corsHeaders, processId);
|
|
297
|
-
} else if (action === "stream" && req.method === "GET") {
|
|
298
|
-
return handleStreamProcessLogsRequest(processes, req, corsHeaders, processId);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
// Check if this is a proxy request for an exposed port
|
|
303
|
-
if (pathname.startsWith("/proxy/")) {
|
|
304
|
-
return handleProxyRequest(exposedPorts, req, corsHeaders);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
console.log(`[Container] Route not found: ${pathname}`);
|
|
308
|
-
return new Response("Not Found", {
|
|
309
|
-
headers: corsHeaders,
|
|
310
|
-
status: 404,
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
} catch (error) {
|
|
314
|
-
console.error(`[Container] Error handling ${req.method} ${pathname}:`, error);
|
|
315
|
-
return new Response(
|
|
316
|
-
JSON.stringify({
|
|
317
|
-
error: "Internal server error",
|
|
318
|
-
message: error instanceof Error ? error.message : "Unknown error",
|
|
319
|
-
}),
|
|
320
|
-
{
|
|
321
|
-
headers: {
|
|
322
|
-
"Content-Type": "application/json",
|
|
323
|
-
...corsHeaders,
|
|
324
|
-
},
|
|
325
|
-
status: 500,
|
|
326
|
-
}
|
|
327
|
-
);
|
|
328
|
-
}
|
|
329
|
-
},
|
|
330
|
-
hostname: "0.0.0.0",
|
|
331
|
-
port: 3000,
|
|
332
|
-
// We don't need this, but typescript complains
|
|
333
|
-
websocket: { async message() { } },
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
console.log(`🚀 Bun server running on http://0.0.0.0:${server.port}`);
|
|
337
|
-
console.log(`📡 HTTP API endpoints available:`);
|
|
338
|
-
console.log(` POST /api/session/create - Create a new session`);
|
|
339
|
-
console.log(` GET /api/session/list - List all sessions`);
|
|
340
|
-
console.log(` POST /api/execute - Execute a command (non-streaming)`);
|
|
341
|
-
console.log(` POST /api/execute/stream - Execute a command (streaming)`);
|
|
342
|
-
console.log(` POST /api/git/checkout - Checkout a git repository`);
|
|
343
|
-
console.log(` POST /api/mkdir - Create a directory`);
|
|
344
|
-
console.log(` POST /api/write - Write a file`);
|
|
345
|
-
console.log(` POST /api/read - Read a file`);
|
|
346
|
-
console.log(` POST /api/delete - Delete a file`);
|
|
347
|
-
console.log(` POST /api/rename - Rename a file`);
|
|
348
|
-
console.log(` POST /api/move - Move a file`);
|
|
349
|
-
console.log(` POST /api/expose-port - Expose a port for external access`);
|
|
350
|
-
console.log(` DELETE /api/unexpose-port - Unexpose a port`);
|
|
351
|
-
console.log(` GET /api/exposed-ports - List exposed ports`);
|
|
352
|
-
console.log(` POST /api/process/start - Start a background process`);
|
|
353
|
-
console.log(` GET /api/process/list - List all processes`);
|
|
354
|
-
console.log(` GET /api/process/{id} - Get process status`);
|
|
355
|
-
console.log(` DELETE /api/process/{id} - Kill a process`);
|
|
356
|
-
console.log(` GET /api/process/{id}/logs - Get process logs`);
|
|
357
|
-
console.log(` GET /api/process/{id}/stream - Stream process logs (SSE)`);
|
|
358
|
-
console.log(` DELETE /api/process/kill-all - Kill all processes`);
|
|
359
|
-
console.log(` GET /proxy/{port}/* - Proxy requests to exposed ports`);
|
|
360
|
-
console.log(` GET /api/ping - Health check`);
|
|
361
|
-
console.log(` GET /api/commands - List available commands`);
|
package/container_src/types.ts
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import type { ChildProcess } from "node:child_process";
|
|
2
|
-
|
|
3
|
-
// Process management types
|
|
4
|
-
export type ProcessStatus =
|
|
5
|
-
| 'starting'
|
|
6
|
-
| 'running'
|
|
7
|
-
| 'completed'
|
|
8
|
-
| 'failed'
|
|
9
|
-
| 'killed'
|
|
10
|
-
| 'error';
|
|
11
|
-
|
|
12
|
-
export interface ProcessRecord {
|
|
13
|
-
id: string;
|
|
14
|
-
pid?: number;
|
|
15
|
-
command: string;
|
|
16
|
-
status: ProcessStatus;
|
|
17
|
-
startTime: Date;
|
|
18
|
-
endTime?: Date;
|
|
19
|
-
exitCode?: number;
|
|
20
|
-
sessionId?: string;
|
|
21
|
-
childProcess?: ChildProcess;
|
|
22
|
-
stdout: string;
|
|
23
|
-
stderr: string;
|
|
24
|
-
outputListeners: Set<(stream: 'stdout' | 'stderr', data: string) => void>;
|
|
25
|
-
statusListeners: Set<(status: ProcessStatus) => void>;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface StartProcessRequest {
|
|
29
|
-
command: string;
|
|
30
|
-
options?: {
|
|
31
|
-
processId?: string;
|
|
32
|
-
sessionId?: string;
|
|
33
|
-
timeout?: number;
|
|
34
|
-
env?: Record<string, string>;
|
|
35
|
-
cwd?: string;
|
|
36
|
-
encoding?: string;
|
|
37
|
-
autoCleanup?: boolean;
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface ExecuteRequest {
|
|
42
|
-
command: string;
|
|
43
|
-
sessionId?: string;
|
|
44
|
-
background?: boolean;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface GitCheckoutRequest {
|
|
48
|
-
repoUrl: string;
|
|
49
|
-
branch?: string;
|
|
50
|
-
targetDir?: string;
|
|
51
|
-
sessionId?: string;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export interface MkdirRequest {
|
|
55
|
-
path: string;
|
|
56
|
-
recursive?: boolean;
|
|
57
|
-
sessionId?: string;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface WriteFileRequest {
|
|
61
|
-
path: string;
|
|
62
|
-
content: string;
|
|
63
|
-
encoding?: string;
|
|
64
|
-
sessionId?: string;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export interface ReadFileRequest {
|
|
68
|
-
path: string;
|
|
69
|
-
encoding?: string;
|
|
70
|
-
sessionId?: string;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export interface DeleteFileRequest {
|
|
74
|
-
path: string;
|
|
75
|
-
sessionId?: string;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export interface RenameFileRequest {
|
|
79
|
-
oldPath: string;
|
|
80
|
-
newPath: string;
|
|
81
|
-
sessionId?: string;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export interface MoveFileRequest {
|
|
85
|
-
sourcePath: string;
|
|
86
|
-
destinationPath: string;
|
|
87
|
-
sessionId?: string;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export interface ExposePortRequest {
|
|
91
|
-
port: number;
|
|
92
|
-
name?: string;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export interface UnexposePortRequest {
|
|
96
|
-
port: number;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export interface SessionData {
|
|
100
|
-
sessionId: string;
|
|
101
|
-
activeProcess: ChildProcess | null;
|
|
102
|
-
createdAt: Date;
|
|
103
|
-
}
|