@cloudflare/sandbox 0.0.0-dcf36ef → 0.0.0-e489cbb

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 (96) hide show
  1. package/CHANGELOG.md +8 -10
  2. package/Dockerfile +82 -18
  3. package/README.md +89 -824
  4. package/dist/chunk-53JFOF7F.js +2352 -0
  5. package/dist/chunk-53JFOF7F.js.map +1 -0
  6. package/dist/chunk-BFVUNTP4.js +104 -0
  7. package/dist/chunk-BFVUNTP4.js.map +1 -0
  8. package/dist/chunk-EKSWCBCA.js +86 -0
  9. package/dist/chunk-EKSWCBCA.js.map +1 -0
  10. package/dist/chunk-JXZMAU2C.js +559 -0
  11. package/dist/chunk-JXZMAU2C.js.map +1 -0
  12. package/dist/chunk-Z532A7QC.js +78 -0
  13. package/dist/chunk-Z532A7QC.js.map +1 -0
  14. package/dist/file-stream.d.ts +43 -0
  15. package/dist/file-stream.js +9 -0
  16. package/dist/file-stream.js.map +1 -0
  17. package/dist/index.d.ts +9 -0
  18. package/dist/index.js +66 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/interpreter.d.ts +33 -0
  21. package/dist/interpreter.js +8 -0
  22. package/dist/interpreter.js.map +1 -0
  23. package/dist/request-handler.d.ts +18 -0
  24. package/dist/request-handler.js +12 -0
  25. package/dist/request-handler.js.map +1 -0
  26. package/dist/sandbox-D9K2ypln.d.ts +583 -0
  27. package/dist/sandbox.d.ts +4 -0
  28. package/dist/sandbox.js +12 -0
  29. package/dist/sandbox.js.map +1 -0
  30. package/dist/security.d.ts +31 -0
  31. package/dist/security.js +13 -0
  32. package/dist/security.js.map +1 -0
  33. package/dist/sse-parser.d.ts +28 -0
  34. package/dist/sse-parser.js +11 -0
  35. package/dist/sse-parser.js.map +1 -0
  36. package/package.json +12 -4
  37. package/src/clients/base-client.ts +280 -0
  38. package/src/clients/command-client.ts +115 -0
  39. package/src/clients/file-client.ts +269 -0
  40. package/src/clients/git-client.ts +92 -0
  41. package/src/clients/index.ts +63 -0
  42. package/src/{interpreter-client.ts → clients/interpreter-client.ts} +148 -171
  43. package/src/clients/port-client.ts +105 -0
  44. package/src/clients/process-client.ts +177 -0
  45. package/src/clients/sandbox-client.ts +41 -0
  46. package/src/clients/types.ts +84 -0
  47. package/src/clients/utility-client.ts +94 -0
  48. package/src/errors/adapter.ts +180 -0
  49. package/src/errors/classes.ts +469 -0
  50. package/src/errors/index.ts +105 -0
  51. package/src/file-stream.ts +119 -117
  52. package/src/index.ts +81 -69
  53. package/src/interpreter.ts +17 -8
  54. package/src/request-handler.ts +69 -43
  55. package/src/sandbox.ts +694 -533
  56. package/src/security.ts +14 -23
  57. package/src/sse-parser.ts +4 -8
  58. package/startup.sh +3 -0
  59. package/tests/base-client.test.ts +328 -0
  60. package/tests/command-client.test.ts +407 -0
  61. package/tests/file-client.test.ts +643 -0
  62. package/tests/file-stream.test.ts +306 -0
  63. package/tests/git-client.test.ts +328 -0
  64. package/tests/port-client.test.ts +301 -0
  65. package/tests/process-client.test.ts +658 -0
  66. package/tests/sandbox.test.ts +465 -0
  67. package/tests/sse-parser.test.ts +290 -0
  68. package/tests/utility-client.test.ts +266 -0
  69. package/tests/wrangler.jsonc +35 -0
  70. package/tsconfig.json +9 -1
  71. package/vitest.config.ts +31 -0
  72. package/container_src/bun.lock +0 -76
  73. package/container_src/circuit-breaker.ts +0 -121
  74. package/container_src/control-process.ts +0 -784
  75. package/container_src/handler/exec.ts +0 -185
  76. package/container_src/handler/file.ts +0 -457
  77. package/container_src/handler/git.ts +0 -130
  78. package/container_src/handler/ports.ts +0 -314
  79. package/container_src/handler/process.ts +0 -568
  80. package/container_src/handler/session.ts +0 -92
  81. package/container_src/index.ts +0 -601
  82. package/container_src/interpreter-service.ts +0 -276
  83. package/container_src/isolation.ts +0 -1213
  84. package/container_src/mime-processor.ts +0 -255
  85. package/container_src/package.json +0 -18
  86. package/container_src/runtime/executors/javascript/node_executor.ts +0 -123
  87. package/container_src/runtime/executors/python/ipython_executor.py +0 -338
  88. package/container_src/runtime/executors/typescript/ts_executor.ts +0 -138
  89. package/container_src/runtime/process-pool.ts +0 -464
  90. package/container_src/shell-escape.ts +0 -42
  91. package/container_src/startup.sh +0 -11
  92. package/container_src/types.ts +0 -131
  93. package/src/client.ts +0 -1048
  94. package/src/errors.ts +0 -219
  95. package/src/interpreter-types.ts +0 -390
  96. package/src/types.ts +0 -571
package/CHANGELOG.md CHANGED
@@ -1,28 +1,26 @@
1
1
  # @cloudflare/sandbox
2
2
 
3
- ## 0.3.7
3
+ ## 0.4.2
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - [#98](https://github.com/cloudflare/sandbox-sdk/pull/98) [`d951819`](https://github.com/cloudflare/sandbox-sdk/commit/d951819b18e9cff9ce09851c6855f05039973b65) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Bake wrangler, vite & opencode in base image
7
+ - [`e53d7e7`](https://github.com/cloudflare/sandbox-sdk/commit/e53d7e7ce185f79bdd899029bb532e9651ae7ba5) Thanks [@threepointone](https://github.com/threepointone)! - fix build by inlining repo/shared
8
8
 
9
- ## 0.3.6
9
+ ## 0.4.1
10
10
 
11
11
  ### Patch Changes
12
12
 
13
- - [#90](https://github.com/cloudflare/sandbox-sdk/pull/90) [`66cc85b`](https://github.com/cloudflare/sandbox-sdk/commit/66cc85b679b466b3ffb1f00fbd697670fc186f06) Thanks [@eastlondoner](https://github.com/eastlondoner)! - set bun idletimeout
13
+ - [#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
14
14
 
15
- ## 0.3.5
15
+ ## 0.4.0
16
16
 
17
- ### Patch Changes
18
-
19
- - [#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
17
+ ### Minor Changes
20
18
 
21
- ## 0.3.4
19
+ - [#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.
22
20
 
23
21
  ### Patch Changes
24
22
 
25
- - [#86](https://github.com/cloudflare/sandbox-sdk/pull/86) [`feafd32`](https://github.com/cloudflare/sandbox-sdk/commit/feafd32a51f50dfaf4994bddcbfb56d46cada622) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Fix session reuse to reuse existing healthy session
23
+ - [#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
26
24
 
27
25
  ## 0.3.3
28
26
 
package/Dockerfile CHANGED
@@ -1,6 +1,64 @@
1
- # Sandbox base image with development tools, Python, Node.js, and Bun
2
- FROM oven/bun:latest AS bun-source
3
- FROM ubuntu:22.04
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,9 @@ 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 (avoids architecture compatibility issues)
52
- COPY --from=bun-source /usr/local/bin/bun /usr/local/bin/bun
53
- COPY --from=bun-source /usr/local/bin/bunx /usr/local/bin/bunx
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
54
112
 
55
113
  # Install development tools globally
56
114
  RUN npm install -g \
@@ -65,25 +123,30 @@ RUN pip3 install --no-cache-dir \
65
123
  pandas \
66
124
  ipython
67
125
 
68
- # Set up container server directory
69
- WORKDIR /container-server
70
-
71
126
  # Verify installations
72
127
  RUN python3 --version && \
73
128
  node --version && \
74
129
  npm --version && \
75
130
  bun --version
76
131
 
77
- # Copy container source files to server directory
78
- COPY container_src/package.json container_src/bun.lock ./
79
- RUN bun install --frozen-lockfile
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/
80
141
 
81
- COPY container_src/ ./
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
82
145
 
83
- # Compile TypeScript files using the locally installed TypeScript
84
- RUN npx tsc control-process.ts --outDir . --module commonjs --target es2020 --esModuleInterop --skipLibCheck
85
- RUN cd runtime/executors/javascript && npx tsc node_executor.ts --module commonjs --target es2020 --esModuleInterop --skipLibCheck
86
- RUN cd runtime/executors/typescript && npx tsc ts_executor.ts --module commonjs --target es2020 --esModuleInterop --skipLibCheck
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
87
150
 
88
151
  # Configure process pool sizes (can be overridden at runtime)
89
152
  ENV PYTHON_POOL_MIN_SIZE=3
@@ -102,7 +165,8 @@ RUN mkdir -p /workspace
102
165
  # Expose the application port (3000 for control)
103
166
  EXPOSE 3000
104
167
 
105
- # Make startup script executable
168
+ # Copy and make startup script executable
169
+ COPY packages/sandbox/startup.sh ./
106
170
  RUN chmod +x startup.sh
107
171
 
108
172
  # Use startup script