@cloudflare/sandbox 0.3.7 → 0.4.2

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 (120) hide show
  1. package/.turbo/turbo-build.log +44 -0
  2. package/CHANGELOG.md +8 -10
  3. package/Dockerfile +82 -18
  4. package/README.md +89 -824
  5. package/dist/chunk-53JFOF7F.js +2352 -0
  6. package/dist/chunk-53JFOF7F.js.map +1 -0
  7. package/dist/chunk-BFVUNTP4.js +104 -0
  8. package/dist/chunk-BFVUNTP4.js.map +1 -0
  9. package/dist/{chunk-NNGBXDMY.js → chunk-EKSWCBCA.js} +3 -6
  10. package/dist/chunk-EKSWCBCA.js.map +1 -0
  11. package/dist/chunk-JXZMAU2C.js +559 -0
  12. package/dist/chunk-JXZMAU2C.js.map +1 -0
  13. package/dist/{chunk-6UAWTJ5S.js → chunk-Z532A7QC.js} +13 -20
  14. package/dist/{chunk-6UAWTJ5S.js.map → chunk-Z532A7QC.js.map} +1 -1
  15. package/dist/file-stream.d.ts +16 -38
  16. package/dist/file-stream.js +1 -2
  17. package/dist/index.d.ts +6 -5
  18. package/dist/index.js +45 -38
  19. package/dist/interpreter.d.ts +3 -3
  20. package/dist/interpreter.js +2 -2
  21. package/dist/request-handler.d.ts +4 -3
  22. package/dist/request-handler.js +4 -7
  23. package/dist/sandbox-D9K2ypln.d.ts +583 -0
  24. package/dist/sandbox.d.ts +3 -3
  25. package/dist/sandbox.js +4 -7
  26. package/dist/security.d.ts +4 -3
  27. package/dist/security.js +3 -3
  28. package/dist/sse-parser.js +1 -1
  29. package/package.json +12 -4
  30. package/src/clients/base-client.ts +280 -0
  31. package/src/clients/command-client.ts +115 -0
  32. package/src/clients/file-client.ts +269 -0
  33. package/src/clients/git-client.ts +92 -0
  34. package/src/clients/index.ts +63 -0
  35. package/src/{interpreter-client.ts → clients/interpreter-client.ts} +148 -171
  36. package/src/clients/port-client.ts +105 -0
  37. package/src/clients/process-client.ts +177 -0
  38. package/src/clients/sandbox-client.ts +41 -0
  39. package/src/clients/types.ts +84 -0
  40. package/src/clients/utility-client.ts +94 -0
  41. package/src/errors/adapter.ts +180 -0
  42. package/src/errors/classes.ts +469 -0
  43. package/src/errors/index.ts +105 -0
  44. package/src/file-stream.ts +119 -117
  45. package/src/index.ts +81 -69
  46. package/src/interpreter.ts +17 -8
  47. package/src/request-handler.ts +69 -43
  48. package/src/sandbox.ts +694 -533
  49. package/src/security.ts +14 -23
  50. package/src/sse-parser.ts +4 -8
  51. package/startup.sh +3 -0
  52. package/tests/base-client.test.ts +328 -0
  53. package/tests/command-client.test.ts +407 -0
  54. package/tests/file-client.test.ts +643 -0
  55. package/tests/file-stream.test.ts +306 -0
  56. package/tests/git-client.test.ts +328 -0
  57. package/tests/port-client.test.ts +301 -0
  58. package/tests/process-client.test.ts +658 -0
  59. package/tests/sandbox.test.ts +465 -0
  60. package/tests/sse-parser.test.ts +290 -0
  61. package/tests/utility-client.test.ts +266 -0
  62. package/tests/wrangler.jsonc +35 -0
  63. package/tsconfig.json +9 -1
  64. package/vitest.config.ts +31 -0
  65. package/container_src/bun.lock +0 -76
  66. package/container_src/circuit-breaker.ts +0 -121
  67. package/container_src/control-process.ts +0 -784
  68. package/container_src/handler/exec.ts +0 -185
  69. package/container_src/handler/file.ts +0 -457
  70. package/container_src/handler/git.ts +0 -130
  71. package/container_src/handler/ports.ts +0 -314
  72. package/container_src/handler/process.ts +0 -568
  73. package/container_src/handler/session.ts +0 -92
  74. package/container_src/index.ts +0 -601
  75. package/container_src/interpreter-service.ts +0 -276
  76. package/container_src/isolation.ts +0 -1213
  77. package/container_src/mime-processor.ts +0 -255
  78. package/container_src/package.json +0 -18
  79. package/container_src/runtime/executors/javascript/node_executor.ts +0 -123
  80. package/container_src/runtime/executors/python/ipython_executor.py +0 -338
  81. package/container_src/runtime/executors/typescript/ts_executor.ts +0 -138
  82. package/container_src/runtime/process-pool.ts +0 -464
  83. package/container_src/shell-escape.ts +0 -42
  84. package/container_src/startup.sh +0 -11
  85. package/container_src/types.ts +0 -131
  86. package/dist/chunk-32UDXUPC.js +0 -671
  87. package/dist/chunk-32UDXUPC.js.map +0 -1
  88. package/dist/chunk-5DILEXGY.js +0 -85
  89. package/dist/chunk-5DILEXGY.js.map +0 -1
  90. package/dist/chunk-D3U63BZP.js +0 -240
  91. package/dist/chunk-D3U63BZP.js.map +0 -1
  92. package/dist/chunk-FXYPFGOZ.js +0 -129
  93. package/dist/chunk-FXYPFGOZ.js.map +0 -1
  94. package/dist/chunk-JTKON2SH.js +0 -113
  95. package/dist/chunk-JTKON2SH.js.map +0 -1
  96. package/dist/chunk-NNGBXDMY.js.map +0 -1
  97. package/dist/chunk-SQLJNZ3K.js +0 -674
  98. package/dist/chunk-SQLJNZ3K.js.map +0 -1
  99. package/dist/chunk-W7TVRPBG.js +0 -108
  100. package/dist/chunk-W7TVRPBG.js.map +0 -1
  101. package/dist/client-B3RUab0s.d.ts +0 -225
  102. package/dist/client.d.ts +0 -4
  103. package/dist/client.js +0 -7
  104. package/dist/client.js.map +0 -1
  105. package/dist/errors.d.ts +0 -95
  106. package/dist/errors.js +0 -27
  107. package/dist/errors.js.map +0 -1
  108. package/dist/interpreter-client.d.ts +0 -4
  109. package/dist/interpreter-client.js +0 -9
  110. package/dist/interpreter-client.js.map +0 -1
  111. package/dist/interpreter-types.d.ts +0 -259
  112. package/dist/interpreter-types.js +0 -9
  113. package/dist/interpreter-types.js.map +0 -1
  114. package/dist/types.d.ts +0 -453
  115. package/dist/types.js +0 -45
  116. package/dist/types.js.map +0 -1
  117. package/src/client.ts +0 -1048
  118. package/src/errors.ts +0 -219
  119. package/src/interpreter-types.ts +0 -390
  120. package/src/types.ts +0 -571
@@ -0,0 +1,44 @@
1
+
2
+ > @cloudflare/sandbox@0.4.2 build
3
+ > rm -rf dist && tsup src/*.ts --outDir dist --dts --sourcemap --format esm
4
+
5
+ CLI 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
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v8.5.0
8
+ CLI Target: es2022
9
+ ESM Build start
10
+ ESM dist/file-stream.js 146.00 B
11
+ ESM dist/interpreter.js 156.00 B
12
+ ESM dist/chunk-BFVUNTP4.js 2.76 KB
13
+ ESM dist/sandbox.js 224.00 B
14
+ ESM dist/chunk-53JFOF7F.js 71.29 KB
15
+ ESM dist/chunk-JXZMAU2C.js 14.43 KB
16
+ ESM dist/security.js 233.00 B
17
+ ESM dist/chunk-Z532A7QC.js 1.75 KB
18
+ ESM dist/chunk-EKSWCBCA.js 2.28 KB
19
+ ESM dist/sse-parser.js 233.00 B
20
+ ESM dist/index.js 1.10 KB
21
+ ESM dist/request-handler.js 262.00 B
22
+ ESM dist/file-stream.js.map 71.00 B
23
+ ESM dist/interpreter.js.map 71.00 B
24
+ ESM dist/chunk-BFVUNTP4.js.map 6.71 KB
25
+ ESM dist/sandbox.js.map 71.00 B
26
+ ESM dist/security.js.map 71.00 B
27
+ ESM dist/chunk-Z532A7QC.js.map 3.96 KB
28
+ ESM dist/chunk-JXZMAU2C.js.map 33.44 KB
29
+ ESM dist/chunk-EKSWCBCA.js.map 5.61 KB
30
+ ESM dist/sse-parser.js.map 71.00 B
31
+ ESM dist/index.js.map 71.00 B
32
+ ESM dist/chunk-53JFOF7F.js.map 146.99 KB
33
+ ESM dist/request-handler.js.map 71.00 B
34
+ ESM ⚡️ Build success in 85ms
35
+ DTS Build start
36
+ DTS ⚡️ Build success in 2233ms
37
+ DTS dist/index.d.ts 1.46 KB
38
+ DTS dist/file-stream.d.ts 1.34 KB
39
+ DTS dist/interpreter.d.ts 1007.00 B
40
+ DTS dist/request-handler.d.ts 565.00 B
41
+ DTS dist/security.d.ts 1.05 KB
42
+ DTS dist/sse-parser.d.ts 1.18 KB
43
+ DTS dist/sandbox.d.ts 156.00 B
44
+ DTS dist/sandbox-D9K2ypln.d.ts 20.46 KB
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