main
## Summary Follow-up to #1688. Three fixes on the `network.egressProxy` / `network["egress_proxy"]` paths a caller reaches by bypassing the types, plus the one changelog snippet that does not run. **The guards disagreed.** Python raised `InvalidArgumentException` for a proxy without a string `address`; JS had none, and since `buildEgressProxyBody` rebuilds the body from the known fields, an address that isn't there simply vanished and the caller got an API error about a `{}` they never wrote. Nothing leaked — `address` is `required` in the spec, so all of these already failed closed at the API — but the error named the wrong thing. ```ts function buildEgressProxyBody(egressProxy: SandboxEgressProxyOpts) { + if (!isPlainObject(egressProxy) || typeof egressProxy.address !== 'string') { + throw new InvalidArgumentError( + `network egressProxy must be an object with a string 'address' (e.g. 'proxy.example.com:1080').` + ) + } ``` | caller passes | JS before | JS now | Python | |---|---|---|---| | `{}` | `{"egressProxy":{}}` | `InvalidArgumentError` | `InvalidArgumentException` | | `{address: 1080}` | `{"egressProxy":{"address":1080}}` | `InvalidArgumentError` | `InvalidArgumentException` | | `'proxy.example.com:1080'` | `{"egressProxy":{}}` — address dropped | `InvalidArgumentError` | `InvalidArgumentException` | **`null` credentials reached the wire.** Both SDKs checked `!== undefined` / `in`, so a `null` / `None` username or password serialized as a JSON null the API rejects (`type: string`). Reading a credential out of an unset environment variable is the way to land there, and it is the one case where the caller means "this proxy takes no credentials" — both now skip a nullish credential (`!= null` in JS, `.get(...) is not None` in Python). ```ts await Sandbox.create({ network: { egressProxy: { address: 'proxy.example.com:1080', // Unset in the environment; the proxy takes no credentials. username: process.env.PROXY_USER, }, }, }) ``` ```python Sandbox.create( network={ "egress_proxy": { "address": "proxy.example.com:1080", "username": os.environ.get("PROXY_USER"), }, }, ) ``` **The published `get_info` snippet.** The 2.41.0 entry in both changelogs printed `info.network["egress_proxy"]`, but `SandboxInfo.network` is `Optional` and `egress_proxy` is `NotRequired` — pyright rejects it (`reportOptionalSubscript`, `reportTypedDictNotRequiredAccess`) and it raises at runtime for a sandbox without a proxy, unlike the TS line right above it (`info.network?.egressProxy`). It now reads `print((info.network or {}).get("egress_proxy"))`. Tests cover the three rejected JS shapes and the null credentials in both SDKs. Link to Devin session: https://app.devin.ai/sessions/216bb02ad7924e4ba5f2968aaadc7938 Requested by: @mishushakov --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: mish@e2b.dev <mish@e2b.dev>
What is E2B?
E2B is an open-source infrastructure that allows you to run AI-generated code in secure isolated sandboxes in the cloud. To start and control sandboxes, use our JavaScript SDK or Python SDK.
Run your first Sandbox
1. Install SDK
JavaScript / TypeScript
npm i e2b
Python
pip install e2b
2. Get your E2B API key
E2B_API_KEY=e2b_***
3. Start a sandbox and run commands
JavaScript / TypeScript
import Sandbox from 'e2b'
const sandbox = await Sandbox.create()
const result = await sandbox.commands.run('echo "Hello from E2B!"')
console.log(result.stdout) // Hello from E2B!
Python
from e2b import Sandbox
with Sandbox.create() as sandbox:
result = sandbox.commands.run('echo "Hello from E2B!"')
print(result.stdout) # Hello from E2B!
4. Code execution with Code Interpreter
If you need to execute code with runCode()/run_code(), install the Code Interpreter SDK:
npm i @e2b/code-interpreter # JavaScript/TypeScript
pip install e2b-code-interpreter # Python
import { Sandbox } from '@e2b/code-interpreter'
const sandbox = await Sandbox.create()
const execution = await sandbox.runCode('x = 1; x += 1; x')
console.log(execution.text) // outputs 2
5. Check docs
Visit E2B documentation.
6. E2B cookbook
Visit our Cookbook to get inspired by examples with different LLMs and AI frameworks.
Self-hosting
Read the self-hosting guide to learn how to set up the E2B infrastructure on your own. The infrastructure is deployed using Terraform.
Supported cloud providers:
- 🟢 AWS
- 🟢 Google Cloud (GCP)
- Azure
- General Linux machine
Description
E2B 是开源的安全运行时环境,为企业级 AI Agent 提供真实工具支持。|GitHub 镜像 ⭐ 13.5k · 🍴 1k
https://github.com/e2b-dev/e2b
Readme
Apache-2.0
129 MiB
Languages
Python
57.1%
TypeScript
42.2%
Dockerfile
0.3%
JavaScript
0.1%
Makefile
0.1%
Other
0.1%

