Skip to content

fix(js-sdk): use commands.run in Sandbox.getHost() example#1531

Open
anxkhn wants to merge 1 commit into
e2b-dev:fix/js-sdk-gethost-example-basefrom
anxkhn:patch-5
Open

fix(js-sdk): use commands.run in Sandbox.getHost() example#1531
anxkhn wants to merge 1 commit into
e2b-dev:fix/js-sdk-gethost-example-basefrom
anxkhn:patch-5

Conversation

@anxkhn

@anxkhn anxkhn commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

The JSDoc @example on the public Sandbox.getHost() method calls
sandbox.commands.exec(...), but the Commands class has no exec method. It
exposes run. Copy-pasting the documented snippet therefore throws:

TypeError: sandbox.commands.exec is not a function

Where

packages/js-sdk/src/sandbox/index.ts, in the getHost() doc comment:

/**
 * ...
 * @example
 * ```ts
 * const sandbox = await Sandbox.create()
 * // Start an HTTP server
 * await sandbox.commands.exec('python3 -m http.server 3000')  // <- no such method
 * // Get the hostname of the HTTP server
 * const serverURL = sandbox.getHost(3000)
 * ```
 */

The Commands class (packages/js-sdk/src/sandbox/commands/index.ts) exposes
list, sendStdin, closeStdin, kill, connect, and run (four run
overloads), plus a private start. There is no exec. The correct method here
is run, which is what every other example already uses, including the sibling
@example in this same file (the commands.run(...) snippet a few methods up)
and both Python SDK mirrors (get_host in sandbox_sync/main.py and
sandbox_async/main.py already use commands.run).

Fix

One token, exec -> run:

- await sandbox.commands.exec('python3 -m http.server 3000')
+ await sandbox.commands.run('python3 -m http.server 3000')

Documentation only. No behavior or type change.

Parity with the Python SDK

The repo guidelines ask that SDK changes be mirrored across the JS and Python
SDKs. Here the Python get_host examples already use commands.run correctly,
so this defect exists only in the JS SDK doc comment and no Python change is
needed to reach parity.

Tests

This is a JSDoc @example correction with no runtime code path to exercise, so
it adds no test, matching the repo's existing precedent for documentation-only
fixes (e.g. .changeset/sandbox-list-docstring.md, and merged doc-fix PRs such
as #1511 / #1500 / #1260, none of which added a regression test). Correctness is
that the example now names the real public API: after the change, commands.exec
no longer appears anywhere in the SDK source, and commands.run matches the
Commands class and the sibling examples.

Offline gates run locally (Node 20, pnpm 9.15.5):

pnpm --filter e2b run lint        # oxlint, clean
pnpm --filter e2b run typecheck   # tsc --noEmit, clean
pnpm --filter e2b run build       # tsc + tsup, ESM/CJS/DTS built
prettier --check src/sandbox/index.ts  # clean

A changeset (e2b, patch) is included.


Linked issues

  • None. There is no existing GitHub issue for this; it is a self-evident public
    doc-example defect (the documented snippet throws at runtime). Not filing a
    separate issue for a one-token doc fix.

Pre-flight checklist (repo AGENTS.md / CLAUDE.md gates)

The getHost() JSDoc @example called sandbox.commands.exec(), which is not a method on the Commands class (it exposes run()), so copy-pasting the snippet threw "TypeError: sandbox.commands.exec is not a function". Switch it to sandbox.commands.run(), matching the sibling example in the same file and the Python SDK. Documentation only, no behavior change.

Signed-off-by: Anas Khan <83116240+anxkhn@users.noreply.github.com>
@changeset-bot

changeset-bot Bot commented Jul 7, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 61d2c56

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
e2b Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 61d2c5620f

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

* const sandbox = await Sandbox.create()
* // Start an HTTP server
* await sandbox.commands.exec('python3 -m http.server 3000')
* await sandbox.commands.run('python3 -m http.server 3000')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Run the server example in the background

When users copy-paste this getHost() example, commands.run still does not reach the getHost line because Commands.run waits for completion unless opts.background is true (packages/js-sdk/src/sandbox/commands/index.ts lines 408-423). python3 -m http.server is a long-lived process, so this await will hang or time out instead of starting a server and returning a host; the existing HTTP-server tests use { background: true } for this case.

Useful? React with 👍 / 👎.

@mishushakov mishushakov changed the base branch from main to fix/js-sdk-gethost-example-base July 7, 2026 20:30
@mishushakov

Copy link
Copy Markdown
Member

@anxkhn please fix the codex comment and in any other places

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants