@cloudflare/sandbox 0.4.11 → 0.4.14
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 +44 -16
- package/Dockerfile +15 -9
- package/README.md +0 -1
- 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 +370 -148
- 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 +45 -6
- 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 +220 -68
- 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-FE4PJSRB.js +0 -7
- package/dist/chunk-FE4PJSRB.js.map +0 -1
- package/dist/chunk-JXZMAU2C.js +0 -559
- package/dist/chunk-JXZMAU2C.js.map +0 -1
- package/dist/chunk-SVWLTRHD.js +0 -2456
- package/dist/chunk-SVWLTRHD.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-DWQVgVTY.d.ts +0 -603
- 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/.turbo/turbo-build.log
CHANGED
|
@@ -1,49 +1,15 @@
|
|
|
1
1
|
|
|
2
|
-
> @cloudflare/sandbox@0.4.
|
|
3
|
-
> rm -rf dist &&
|
|
2
|
+
> @cloudflare/sandbox@0.4.14 build
|
|
3
|
+
> rm -rf dist && tsdown --config tsdown.config.ts
|
|
4
4
|
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[
|
|
8
|
-
[
|
|
9
|
-
[
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[32mESM[39m [1mdist/chunk-JXZMAU2C.js [22m[32m14.43 KB[39m
|
|
17
|
-
[32mESM[39m [1mdist/chunk-SVWLTRHD.js [22m[32m75.12 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/version.js [22m[32m114.00 B[39m
|
|
23
|
-
[32mESM[39m [1mdist/chunk-FE4PJSRB.js [22m[32m115.00 B[39m
|
|
24
|
-
[32mESM[39m [1mdist/file-stream.js.map [22m[32m71.00 B[39m
|
|
25
|
-
[32mESM[39m [1mdist/index.js.map [22m[32m71.00 B[39m
|
|
26
|
-
[32mESM[39m [1mdist/chunk-BFVUNTP4.js.map [22m[32m6.71 KB[39m
|
|
27
|
-
[32mESM[39m [1mdist/interpreter.js.map [22m[32m71.00 B[39m
|
|
28
|
-
[32mESM[39m [1mdist/sandbox.js.map [22m[32m71.00 B[39m
|
|
29
|
-
[32mESM[39m [1mdist/request-handler.js.map [22m[32m71.00 B[39m
|
|
30
|
-
[32mESM[39m [1mdist/chunk-JXZMAU2C.js.map [22m[32m33.44 KB[39m
|
|
31
|
-
[32mESM[39m [1mdist/security.js.map [22m[32m71.00 B[39m
|
|
32
|
-
[32mESM[39m [1mdist/chunk-Z532A7QC.js.map [22m[32m3.96 KB[39m
|
|
33
|
-
[32mESM[39m [1mdist/sse-parser.js.map [22m[32m71.00 B[39m
|
|
34
|
-
[32mESM[39m [1mdist/chunk-EKSWCBCA.js.map [22m[32m5.61 KB[39m
|
|
35
|
-
[32mESM[39m [1mdist/version.js.map [22m[32m71.00 B[39m
|
|
36
|
-
[32mESM[39m [1mdist/chunk-FE4PJSRB.js.map [22m[32m391.00 B[39m
|
|
37
|
-
[32mESM[39m [1mdist/chunk-SVWLTRHD.js.map [22m[32m154.76 KB[39m
|
|
38
|
-
[32mESM[39m ⚡️ Build success in 108ms
|
|
39
|
-
[34mDTS[39m Build start
|
|
40
|
-
[32mDTS[39m ⚡️ Build success in 2440ms
|
|
41
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[32m1.46 KB[39m
|
|
42
|
-
[32mDTS[39m [1mdist/file-stream.d.ts [22m[32m1.34 KB[39m
|
|
43
|
-
[32mDTS[39m [1mdist/interpreter.d.ts [22m[32m1007.00 B[39m
|
|
44
|
-
[32mDTS[39m [1mdist/request-handler.d.ts [22m[32m565.00 B[39m
|
|
45
|
-
[32mDTS[39m [1mdist/security.d.ts [22m[32m1.05 KB[39m
|
|
46
|
-
[32mDTS[39m [1mdist/sse-parser.d.ts [22m[32m1.18 KB[39m
|
|
47
|
-
[32mDTS[39m [1mdist/version.d.ts [22m[32m303.00 B[39m
|
|
48
|
-
[32mDTS[39m [1mdist/sandbox.d.ts [22m[32m156.00 B[39m
|
|
49
|
-
[32mDTS[39m [1mdist/sandbox-DWQVgVTY.d.ts [22m[32m21.39 KB[39m
|
|
5
|
+
[34mℹ[39m tsdown [2mv0.15.11[22m powered by rolldown [2mv1.0.0-beta.45[22m
|
|
6
|
+
[34mℹ[39m Using tsdown config: [4m/home/runner/work/sandbox-sdk/sandbox-sdk/packages/sandbox/tsdown.config.ts[24m
|
|
7
|
+
[34mℹ[39m entry: [34msrc/index.ts[39m
|
|
8
|
+
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
9
|
+
[34mℹ[39m Build start
|
|
10
|
+
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m 95.61 kB[22m [2m│ gzip: 21.55 kB[22m
|
|
11
|
+
[34mℹ[39m [2mdist/[22mindex.js.map [2m202.56 kB[22m [2m│ gzip: 44.33 kB[22m
|
|
12
|
+
[34mℹ[39m [2mdist/[22mindex.d.ts.map [2m 72.31 kB[22m [2m│ gzip: 19.90 kB[22m
|
|
13
|
+
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.ts[22m[39m [2m 53.99 kB[22m [2m│ gzip: 11.70 kB[22m
|
|
14
|
+
[34mℹ[39m 4 files, total: 424.47 kB
|
|
15
|
+
[32m✔[39m Build complete in [32m2229ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# @cloudflare/sandbox
|
|
2
2
|
|
|
3
|
+
## 0.4.14
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#172](https://github.com/cloudflare/sandbox-sdk/pull/172) [`1bf3576`](https://github.com/cloudflare/sandbox-sdk/commit/1bf35768b02532c77df6f30a2f2eb08cb2b12115) Thanks [@threepointone](https://github.com/threepointone)! - Update dependencies
|
|
8
|
+
|
|
9
|
+
- [#176](https://github.com/cloudflare/sandbox-sdk/pull/176) [`7edbfa9`](https://github.com/cloudflare/sandbox-sdk/commit/7edbfa906668d75f540527f50b52483dc787192c) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Add cache mounts to Dockerfile for faster builds
|
|
10
|
+
|
|
11
|
+
Adds cache mounts for npm, apt, and pip package managers in the Dockerfile. This speeds up Docker image builds when dependencies change, particularly beneficial for users building from source.
|
|
12
|
+
|
|
13
|
+
- [#172](https://github.com/cloudflare/sandbox-sdk/pull/172) [`1bf3576`](https://github.com/cloudflare/sandbox-sdk/commit/1bf35768b02532c77df6f30a2f2eb08cb2b12115) Thanks [@threepointone](https://github.com/threepointone)! - Fix type generation
|
|
14
|
+
|
|
15
|
+
We inline types from `@repo/shared` so that it includes the types we reexport. Fixes #165
|
|
16
|
+
|
|
17
|
+
- [#175](https://github.com/cloudflare/sandbox-sdk/pull/175) [`77cb937`](https://github.com/cloudflare/sandbox-sdk/commit/77cb93762a619523758f769a10509e665ca819fe) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Move .connect to .wsConnect within DO stub
|
|
18
|
+
|
|
19
|
+
## 0.4.13
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- [#168](https://github.com/cloudflare/sandbox-sdk/pull/168) [`6b08f02`](https://github.com/cloudflare/sandbox-sdk/commit/6b08f02c061aef07cc98188abef2973ac92365f8) Thanks [@threepointone](https://github.com/threepointone)! - Fix type generation
|
|
24
|
+
|
|
25
|
+
We inline types from `@repo/shared` so that it includes the types we reexport. Fixes #165
|
|
26
|
+
|
|
27
|
+
- [#162](https://github.com/cloudflare/sandbox-sdk/pull/162) [`c4db459`](https://github.com/cloudflare/sandbox-sdk/commit/c4db459389a7b86048a03410d67d4dd7bf4a6085) Thanks [@whoiskatrin](https://github.com/whoiskatrin)! - Add WebSocket support via connect() method for routing client WebSocket connections directly to container services
|
|
28
|
+
|
|
29
|
+
## 0.4.12
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- [#137](https://github.com/cloudflare/sandbox-sdk/pull/137) [`7f4442b`](https://github.com/cloudflare/sandbox-sdk/commit/7f4442b7a097587d8f8e8f9ff2f887df6943a3db) Thanks [@whoiskatrin](https://github.com/whoiskatrin)! - add keepAlive flag to prevent containers from shutting down
|
|
34
|
+
|
|
3
35
|
## 0.4.11
|
|
4
36
|
|
|
5
37
|
### Patch Changes
|
|
@@ -21,7 +53,6 @@
|
|
|
21
53
|
This adds a new `exists()` method to the SDK that checks whether a file or directory exists at a given path. The method returns a boolean indicating existence, similar to Python's `os.path.exists()` and JavaScript's `fs.existsSync()`.
|
|
22
54
|
|
|
23
55
|
The implementation is end-to-end:
|
|
24
|
-
|
|
25
56
|
- New `FileExistsResult` and `FileExistsRequest` types in shared package
|
|
26
57
|
- Handler endpoint at `/api/exists` in container layer
|
|
27
58
|
- Client method in `FileClient` and `Sandbox` classes
|
|
@@ -120,50 +151,47 @@
|
|
|
120
151
|
Implements PID namespace isolation to protect control plane processes (Jupyter, Bun) from sandboxed code. Commands executed via `exec()` now run in isolated namespaces that cannot see or interact with system processes.
|
|
121
152
|
|
|
122
153
|
**Key security improvements:**
|
|
123
|
-
|
|
124
154
|
- Control plane processes are hidden from sandboxed commands
|
|
125
155
|
- Platform secrets in `/proc/1/environ` are inaccessible
|
|
126
156
|
- Ports 8888 (Jupyter) and 3000 (Bun) are protected from hijacking
|
|
127
157
|
|
|
128
158
|
**Breaking changes:**
|
|
129
|
-
|
|
130
159
|
1. **Removed `sessionId` parameter**: The `sessionId` parameter has been removed from all methods (`exec()`, `execStream()`, `startProcess()`, etc.). Each sandbox now maintains its own persistent session automatically.
|
|
131
160
|
|
|
132
161
|
```javascript
|
|
133
162
|
// Before: manual session management
|
|
134
|
-
await sandbox.exec(
|
|
163
|
+
await sandbox.exec('cd /app', { sessionId: 'my-session' });
|
|
135
164
|
|
|
136
165
|
// After: automatic session per sandbox
|
|
137
|
-
await sandbox.exec(
|
|
166
|
+
await sandbox.exec('cd /app');
|
|
138
167
|
```
|
|
139
168
|
|
|
140
169
|
2. **Commands now maintain state**: Commands within the same sandbox now share state (working directory, environment variables, background processes). Previously each command was stateless.
|
|
141
170
|
|
|
142
171
|
```javascript
|
|
143
172
|
// Before: each exec was independent
|
|
144
|
-
await sandbox.exec(
|
|
145
|
-
await sandbox.exec(
|
|
173
|
+
await sandbox.exec('cd /app');
|
|
174
|
+
await sandbox.exec('pwd'); // Output: /workspace
|
|
146
175
|
|
|
147
176
|
// After: state persists in session
|
|
148
|
-
await sandbox.exec(
|
|
149
|
-
await sandbox.exec(
|
|
177
|
+
await sandbox.exec('cd /app');
|
|
178
|
+
await sandbox.exec('pwd'); // Output: /app
|
|
150
179
|
```
|
|
151
180
|
|
|
152
181
|
**Migration guide:**
|
|
153
|
-
|
|
154
182
|
- Remove `sessionId` from all method calls - each sandbox maintains its own session
|
|
155
183
|
- If you need isolated execution contexts within the same sandbox, use `sandbox.createSession()`:
|
|
156
184
|
```javascript
|
|
157
185
|
// Create independent sessions with different environments
|
|
158
186
|
const buildSession = await sandbox.createSession({
|
|
159
|
-
name:
|
|
160
|
-
env: { NODE_ENV:
|
|
161
|
-
cwd:
|
|
187
|
+
name: 'build',
|
|
188
|
+
env: { NODE_ENV: 'production' },
|
|
189
|
+
cwd: '/build'
|
|
162
190
|
});
|
|
163
191
|
const testSession = await sandbox.createSession({
|
|
164
|
-
name:
|
|
165
|
-
env: { NODE_ENV:
|
|
166
|
-
cwd:
|
|
192
|
+
name: 'test',
|
|
193
|
+
env: { NODE_ENV: 'test' },
|
|
194
|
+
cwd: '/test'
|
|
167
195
|
});
|
|
168
196
|
```
|
|
169
197
|
- Environment variables set in one command persist to the next
|
package/Dockerfile
CHANGED
|
@@ -29,8 +29,9 @@ WORKDIR /app
|
|
|
29
29
|
COPY --from=pruner /app/out/json/ .
|
|
30
30
|
COPY --from=pruner /app/out/package-lock.json ./package-lock.json
|
|
31
31
|
|
|
32
|
-
# Install ALL dependencies
|
|
33
|
-
RUN npm
|
|
32
|
+
# Install ALL dependencies with cache mount for npm packages
|
|
33
|
+
RUN --mount=type=cache,target=/root/.npm \
|
|
34
|
+
npm ci
|
|
34
35
|
|
|
35
36
|
# Copy pruned source code
|
|
36
37
|
COPY --from=pruner /app/out/full/ .
|
|
@@ -53,7 +54,8 @@ COPY --from=builder /app/packages ./packages
|
|
|
53
54
|
COPY --from=builder /app/tooling ./tooling
|
|
54
55
|
|
|
55
56
|
# Install ONLY production dependencies (excludes typescript, @types/*, etc.)
|
|
56
|
-
RUN npm
|
|
57
|
+
RUN --mount=type=cache,target=/root/.npm \
|
|
58
|
+
npm ci --production
|
|
57
59
|
|
|
58
60
|
# ============================================================================
|
|
59
61
|
# Stage 4: Runtime - Ubuntu 22.04 with only runtime dependencies
|
|
@@ -69,8 +71,12 @@ ENV DEBIAN_FRONTEND=noninteractive
|
|
|
69
71
|
# Set the sandbox version as an environment variable for version checking
|
|
70
72
|
ENV SANDBOX_VERSION=${SANDBOX_VERSION}
|
|
71
73
|
|
|
72
|
-
# Install essential runtime packages
|
|
73
|
-
RUN apt
|
|
74
|
+
# Install essential runtime packages with cache mounts
|
|
75
|
+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
76
|
+
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
77
|
+
rm -f /etc/apt/apt.conf.d/docker-clean && \
|
|
78
|
+
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache && \
|
|
79
|
+
apt-get update && apt-get install -y --no-install-recommends \
|
|
74
80
|
curl \
|
|
75
81
|
wget \
|
|
76
82
|
ca-certificates \
|
|
@@ -82,8 +88,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
82
88
|
unzip \
|
|
83
89
|
zip \
|
|
84
90
|
jq \
|
|
85
|
-
file
|
|
86
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
91
|
+
file
|
|
87
92
|
|
|
88
93
|
# Set Python 3.11 as default python3
|
|
89
94
|
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
|
|
@@ -96,8 +101,9 @@ RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
|
|
|
96
101
|
# Install Bun runtime from official image
|
|
97
102
|
COPY --from=oven/bun:1 /usr/local/bin/bun /usr/local/bin/bun
|
|
98
103
|
|
|
99
|
-
# Install essential Python packages
|
|
100
|
-
RUN
|
|
104
|
+
# Install essential Python packages with cache mount
|
|
105
|
+
RUN --mount=type=cache,target=/root/.cache/pip \
|
|
106
|
+
pip3 install \
|
|
101
107
|
matplotlib \
|
|
102
108
|
numpy \
|
|
103
109
|
pandas \
|
package/README.md
CHANGED
|
@@ -144,7 +144,6 @@ See the [examples directory](./examples) for complete working examples:
|
|
|
144
144
|
|
|
145
145
|
- [Minimal](./examples/minimal) - Basic sandbox setup
|
|
146
146
|
- [Code Interpreter](./examples/code-interpreter) - Use sandbox as an interpreter tool with gpt-oss
|
|
147
|
-
- [Complete](./examples/basic) - Huge example integrated with every sandbox feature
|
|
148
147
|
|
|
149
148
|
## Status
|
|
150
149
|
|