@cloudflare/sandbox 0.3.6 → 0.4.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.
- package/.turbo/turbo-build.log +44 -0
- package/CHANGELOG.md +6 -8
- package/Dockerfile +88 -18
- package/README.md +89 -824
- package/dist/{chunk-JTKON2SH.js → chunk-BCJ7SF3Q.js} +9 -5
- 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-NNGBXDMY.js → chunk-EKSWCBCA.js} +3 -6
- 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-6UAWTJ5S.js → chunk-Z532A7QC.js} +13 -20
- package/dist/{chunk-6UAWTJ5S.js.map → chunk-Z532A7QC.js.map} +1 -1
- package/dist/file-stream.d.ts +16 -38
- package/dist/file-stream.js +1 -2
- package/dist/index.d.ts +6 -5
- package/dist/index.js +35 -39
- package/dist/index.js.map +1 -1
- package/dist/interpreter.d.ts +3 -3
- package/dist/interpreter.js +2 -2
- package/dist/request-handler.d.ts +4 -3
- package/dist/request-handler.js +4 -7
- package/dist/sandbox-D9K2ypln.d.ts +583 -0
- package/dist/sandbox.d.ts +3 -3
- package/dist/sandbox.js +4 -7
- package/dist/security.d.ts +4 -3
- package/dist/security.js +3 -3
- package/dist/sse-parser.js +1 -1
- 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/{interpreter-client.ts → clients/interpreter-client.ts} +148 -171
- 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 +119 -117
- package/src/index.ts +81 -69
- package/src/interpreter.ts +17 -8
- package/src/request-handler.ts +69 -43
- package/src/sandbox.ts +694 -533
- 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/bun.lock +0 -76
- package/container_src/circuit-breaker.ts +0 -121
- package/container_src/control-process.ts +0 -784
- package/container_src/handler/exec.ts +0 -185
- package/container_src/handler/file.ts +0 -457
- package/container_src/handler/git.ts +0 -130
- package/container_src/handler/ports.ts +0 -314
- package/container_src/handler/process.ts +0 -568
- package/container_src/handler/session.ts +0 -92
- package/container_src/index.ts +0 -601
- package/container_src/interpreter-service.ts +0 -276
- package/container_src/isolation.ts +0 -1213
- package/container_src/mime-processor.ts +0 -255
- package/container_src/package.json +0 -18
- package/container_src/runtime/executors/javascript/node_executor.ts +0 -123
- package/container_src/runtime/executors/python/ipython_executor.py +0 -338
- package/container_src/runtime/executors/typescript/ts_executor.ts +0 -138
- package/container_src/runtime/process-pool.ts +0 -464
- package/container_src/shell-escape.ts +0 -42
- package/container_src/startup.sh +0 -11
- package/container_src/types.ts +0 -131
- package/dist/chunk-32UDXUPC.js +0 -671
- package/dist/chunk-32UDXUPC.js.map +0 -1
- package/dist/chunk-5DILEXGY.js +0 -85
- package/dist/chunk-5DILEXGY.js.map +0 -1
- package/dist/chunk-D3U63BZP.js +0 -240
- package/dist/chunk-D3U63BZP.js.map +0 -1
- package/dist/chunk-FXYPFGOZ.js +0 -129
- package/dist/chunk-FXYPFGOZ.js.map +0 -1
- package/dist/chunk-JTKON2SH.js.map +0 -1
- package/dist/chunk-NNGBXDMY.js.map +0 -1
- package/dist/chunk-SQLJNZ3K.js +0 -674
- package/dist/chunk-SQLJNZ3K.js.map +0 -1
- package/dist/chunk-W7TVRPBG.js +0 -108
- package/dist/chunk-W7TVRPBG.js.map +0 -1
- package/dist/client-B3RUab0s.d.ts +0 -225
- package/dist/client.d.ts +0 -4
- package/dist/client.js +0 -7
- package/dist/client.js.map +0 -1
- package/dist/errors.d.ts +0 -95
- package/dist/errors.js +0 -27
- package/dist/errors.js.map +0 -1
- package/dist/interpreter-client.d.ts +0 -4
- package/dist/interpreter-client.js +0 -9
- package/dist/interpreter-client.js.map +0 -1
- package/dist/interpreter-types.d.ts +0 -259
- package/dist/interpreter-types.js +0 -9
- package/dist/interpreter-types.js.map +0 -1
- package/dist/types.d.ts +0 -453
- package/dist/types.js +0 -45
- package/dist/types.js.map +0 -1
- package/src/client.ts +0 -1048
- package/src/errors.ts +0 -219
- package/src/interpreter-types.ts +0 -390
- package/src/types.ts +0 -571
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
|
|
2
|
+
> @cloudflare/sandbox@0.4.1 build
|
|
3
|
+
> rm -rf dist && tsup src/*.ts --outDir dist --dts --sourcemap --format esm
|
|
4
|
+
|
|
5
|
+
[34mCLI[39m Building entry: src/file-stream.ts, src/index.ts, src/interpreter.ts, src/request-handler.ts, src/sandbox.ts, src/security.ts, src/sse-parser.ts
|
|
6
|
+
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
|
+
[34mCLI[39m tsup v8.5.0
|
|
8
|
+
[34mCLI[39m Target: es2022
|
|
9
|
+
[34mESM[39m Build start
|
|
10
|
+
[32mESM[39m [1mdist/file-stream.js [22m[32m146.00 B[39m
|
|
11
|
+
[32mESM[39m [1mdist/index.js [22m[32m946.00 B[39m
|
|
12
|
+
[32mESM[39m [1mdist/chunk-BFVUNTP4.js [22m[32m2.76 KB[39m
|
|
13
|
+
[32mESM[39m [1mdist/interpreter.js [22m[32m156.00 B[39m
|
|
14
|
+
[32mESM[39m [1mdist/request-handler.js [22m[32m262.00 B[39m
|
|
15
|
+
[32mESM[39m [1mdist/sandbox.js [22m[32m224.00 B[39m
|
|
16
|
+
[32mESM[39m [1mdist/chunk-HGF554LH.js [22m[32m67.41 KB[39m
|
|
17
|
+
[32mESM[39m [1mdist/chunk-BCJ7SF3Q.js [22m[32m3.26 KB[39m
|
|
18
|
+
[32mESM[39m [1mdist/security.js [22m[32m233.00 B[39m
|
|
19
|
+
[32mESM[39m [1mdist/chunk-Z532A7QC.js [22m[32m1.75 KB[39m
|
|
20
|
+
[32mESM[39m [1mdist/sse-parser.js [22m[32m233.00 B[39m
|
|
21
|
+
[32mESM[39m [1mdist/chunk-EKSWCBCA.js [22m[32m2.28 KB[39m
|
|
22
|
+
[32mESM[39m [1mdist/file-stream.js.map [22m[32m71.00 B[39m
|
|
23
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m2.45 KB[39m
|
|
24
|
+
[32mESM[39m [1mdist/chunk-BFVUNTP4.js.map [22m[32m6.71 KB[39m
|
|
25
|
+
[32mESM[39m [1mdist/interpreter.js.map [22m[32m71.00 B[39m
|
|
26
|
+
[32mESM[39m [1mdist/request-handler.js.map [22m[32m71.00 B[39m
|
|
27
|
+
[32mESM[39m [1mdist/sandbox.js.map [22m[32m71.00 B[39m
|
|
28
|
+
[32mESM[39m [1mdist/chunk-HGF554LH.js.map [22m[32m142.71 KB[39m
|
|
29
|
+
[32mESM[39m [1mdist/chunk-BCJ7SF3Q.js.map [22m[32m6.88 KB[39m
|
|
30
|
+
[32mESM[39m [1mdist/security.js.map [22m[32m71.00 B[39m
|
|
31
|
+
[32mESM[39m [1mdist/chunk-Z532A7QC.js.map [22m[32m3.96 KB[39m
|
|
32
|
+
[32mESM[39m [1mdist/sse-parser.js.map [22m[32m71.00 B[39m
|
|
33
|
+
[32mESM[39m [1mdist/chunk-EKSWCBCA.js.map [22m[32m5.61 KB[39m
|
|
34
|
+
[32mESM[39m ⚡️ Build success in 96ms
|
|
35
|
+
[34mDTS[39m Build start
|
|
36
|
+
[32mDTS[39m ⚡️ Build success in 2620ms
|
|
37
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m1.46 KB[39m
|
|
38
|
+
[32mDTS[39m [1mdist/file-stream.d.ts [22m[32m1.34 KB[39m
|
|
39
|
+
[32mDTS[39m [1mdist/interpreter.d.ts [22m[32m1007.00 B[39m
|
|
40
|
+
[32mDTS[39m [1mdist/request-handler.d.ts [22m[32m565.00 B[39m
|
|
41
|
+
[32mDTS[39m [1mdist/security.d.ts [22m[32m1.05 KB[39m
|
|
42
|
+
[32mDTS[39m [1mdist/sse-parser.d.ts [22m[32m1.18 KB[39m
|
|
43
|
+
[32mDTS[39m [1mdist/sandbox.d.ts [22m[32m156.00 B[39m
|
|
44
|
+
[32mDTS[39m [1mdist/sandbox-D9K2ypln.d.ts [22m[32m20.46 KB[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
# @cloudflare/sandbox
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 0.4.1
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
|
-
- [#
|
|
7
|
+
- [#111](https://github.com/cloudflare/sandbox-sdk/pull/111) [`1b5496b`](https://github.com/cloudflare/sandbox-sdk/commit/1b5496bfceaee53c31911b409476ea87bebffe4c) Thanks [@threepointone](https://github.com/threepointone)! - trigger a release
|
|
8
8
|
|
|
9
|
-
## 0.
|
|
9
|
+
## 0.4.0
|
|
10
10
|
|
|
11
|
-
###
|
|
12
|
-
|
|
13
|
-
- [#88](https://github.com/cloudflare/sandbox-sdk/pull/88) [`46eb4e6`](https://github.com/cloudflare/sandbox-sdk/commit/46eb4e6b6c671b682fc74f83563ccf5f316011cb) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Add binary file support with automatic MIME detection and streaming
|
|
11
|
+
### Minor Changes
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
- [#95](https://github.com/cloudflare/sandbox-sdk/pull/95) [`7aee736`](https://github.com/cloudflare/sandbox-sdk/commit/7aee736bf07a4bf9020e2109bdaaa70214d52a01) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Rewrite SDK with cleaner design patterns and tests. Remove the unnecessary isolation cruft and fix foundational issues with streaming, sessions, validations and error handling. Cover the SDK with unit & e2e tests.
|
|
16
14
|
|
|
17
15
|
### Patch Changes
|
|
18
16
|
|
|
19
|
-
- [#
|
|
17
|
+
- [#106](https://github.com/cloudflare/sandbox-sdk/pull/106) [`da947cd`](https://github.com/cloudflare/sandbox-sdk/commit/da947cd9543fc99831eefb1e8741fc905cb8fa42) Thanks [@jahands](https://github.com/jahands)! - fix examples failing to deploy and prevent committing node_modules
|
|
20
18
|
|
|
21
19
|
## 0.3.3
|
|
22
20
|
|
package/Dockerfile
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
|
-
# Sandbox
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# Sandbox container image with full development environment
|
|
2
|
+
# Multi-stage build optimized for Turborepo monorepo
|
|
3
|
+
|
|
4
|
+
# ============================================================================
|
|
5
|
+
# Stage 1: Prune monorepo to only include necessary packages
|
|
6
|
+
# ============================================================================
|
|
7
|
+
FROM node:20-alpine AS pruner
|
|
8
|
+
|
|
9
|
+
WORKDIR /app
|
|
10
|
+
|
|
11
|
+
# Install Turborepo globally
|
|
12
|
+
RUN npm install -g turbo
|
|
13
|
+
|
|
14
|
+
# Copy entire monorepo
|
|
15
|
+
COPY . .
|
|
16
|
+
|
|
17
|
+
# Prune to only @repo/sandbox-container and its dependencies (@repo/shared)
|
|
18
|
+
# The --docker flag generates out/json and out/full directories
|
|
19
|
+
RUN turbo prune @repo/sandbox-container --docker
|
|
20
|
+
|
|
21
|
+
# ============================================================================
|
|
22
|
+
# Stage 2: Install dependencies and build packages
|
|
23
|
+
# ============================================================================
|
|
24
|
+
FROM node:20-alpine AS builder
|
|
25
|
+
|
|
26
|
+
WORKDIR /app
|
|
27
|
+
|
|
28
|
+
# Copy pruned lockfile and package.json files (for Docker layer caching)
|
|
29
|
+
COPY --from=pruner /app/out/json/ .
|
|
30
|
+
COPY --from=pruner /app/out/package-lock.json ./package-lock.json
|
|
31
|
+
|
|
32
|
+
# Install ALL dependencies (including devDependencies for build)
|
|
33
|
+
RUN npm ci
|
|
34
|
+
|
|
35
|
+
# Copy pruned source code
|
|
36
|
+
COPY --from=pruner /app/out/full/ .
|
|
37
|
+
|
|
38
|
+
# Build all packages (Turborepo handles dependency order automatically)
|
|
39
|
+
# This builds @repo/shared first, then @repo/sandbox-container
|
|
40
|
+
RUN npx turbo run build
|
|
41
|
+
|
|
42
|
+
# ============================================================================
|
|
43
|
+
# Stage 3: Install production-only dependencies
|
|
44
|
+
# ============================================================================
|
|
45
|
+
FROM node:20-alpine AS prod-deps
|
|
46
|
+
|
|
47
|
+
WORKDIR /app
|
|
48
|
+
|
|
49
|
+
# Copy package files from builder
|
|
50
|
+
COPY --from=builder /app/package.json ./package.json
|
|
51
|
+
COPY --from=builder /app/package-lock.json ./package-lock.json
|
|
52
|
+
COPY --from=builder /app/packages ./packages
|
|
53
|
+
COPY --from=builder /app/tooling ./tooling
|
|
54
|
+
|
|
55
|
+
# Install ONLY production dependencies (excludes typescript, @types/*, etc.)
|
|
56
|
+
RUN npm ci --production
|
|
57
|
+
|
|
58
|
+
# ============================================================================
|
|
59
|
+
# Stage 4: Runtime - Ubuntu 22.04 with full development environment
|
|
60
|
+
# ============================================================================
|
|
61
|
+
FROM ubuntu:22.04 AS runtime
|
|
4
62
|
|
|
5
63
|
# Prevent interactive prompts during package installation
|
|
6
64
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
@@ -48,9 +106,15 @@ RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
|
|
|
48
106
|
&& apt-get install -y nodejs \
|
|
49
107
|
&& rm -rf /var/lib/apt/lists/*
|
|
50
108
|
|
|
51
|
-
# Install Bun from official image
|
|
52
|
-
COPY --from=bun
|
|
53
|
-
COPY --from=bun
|
|
109
|
+
# Install Bun runtime from official image
|
|
110
|
+
COPY --from=oven/bun:1 /usr/local/bin/bun /usr/local/bin/bun
|
|
111
|
+
COPY --from=oven/bun:1 /usr/local/bin/bunx /usr/local/bin/bunx
|
|
112
|
+
|
|
113
|
+
# Install development tools globally
|
|
114
|
+
RUN npm install -g \
|
|
115
|
+
wrangler \
|
|
116
|
+
vite \
|
|
117
|
+
opencode-ai
|
|
54
118
|
|
|
55
119
|
# Install essential Python packages for code execution
|
|
56
120
|
RUN pip3 install --no-cache-dir \
|
|
@@ -59,25 +123,30 @@ RUN pip3 install --no-cache-dir \
|
|
|
59
123
|
pandas \
|
|
60
124
|
ipython
|
|
61
125
|
|
|
62
|
-
# Set up container server directory
|
|
63
|
-
WORKDIR /container-server
|
|
64
|
-
|
|
65
126
|
# Verify installations
|
|
66
127
|
RUN python3 --version && \
|
|
67
128
|
node --version && \
|
|
68
129
|
npm --version && \
|
|
69
130
|
bun --version
|
|
70
131
|
|
|
71
|
-
#
|
|
72
|
-
|
|
73
|
-
|
|
132
|
+
# Set up runtime container server directory
|
|
133
|
+
WORKDIR /container-server
|
|
134
|
+
|
|
135
|
+
# Copy built sandbox-container package
|
|
136
|
+
COPY --from=builder /app/packages/sandbox-container/dist ./dist
|
|
137
|
+
COPY --from=builder /app/packages/sandbox-container/package.json ./package.json
|
|
138
|
+
|
|
139
|
+
# Copy Python executor to runtime location
|
|
140
|
+
COPY --from=builder /app/packages/sandbox-container/src/runtime/executors/python/ipython_executor.py ./dist/runtime/executors/python/
|
|
74
141
|
|
|
75
|
-
|
|
142
|
+
# Copy production-only node_modules (excludes typescript, @types/*, etc.)
|
|
143
|
+
# Includes: @repo/shared, zod, esbuild (runtime dependencies)
|
|
144
|
+
COPY --from=prod-deps /app/node_modules ./node_modules
|
|
76
145
|
|
|
77
|
-
#
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
146
|
+
# Copy workspace packages so node_modules symlinks work
|
|
147
|
+
# @repo/shared and @repo/typescript-config are symlinked in node_modules
|
|
148
|
+
COPY --from=prod-deps /app/packages/shared ./packages/shared
|
|
149
|
+
COPY --from=prod-deps /app/tooling/typescript-config ./tooling/typescript-config
|
|
81
150
|
|
|
82
151
|
# Configure process pool sizes (can be overridden at runtime)
|
|
83
152
|
ENV PYTHON_POOL_MIN_SIZE=3
|
|
@@ -96,7 +165,8 @@ RUN mkdir -p /workspace
|
|
|
96
165
|
# Expose the application port (3000 for control)
|
|
97
166
|
EXPOSE 3000
|
|
98
167
|
|
|
99
|
-
#
|
|
168
|
+
# Copy and make startup script executable
|
|
169
|
+
COPY packages/sandbox/startup.sh ./
|
|
100
170
|
RUN chmod +x startup.sh
|
|
101
171
|
|
|
102
172
|
# Use startup script
|