{"version":3,"file":"index.mjs","names":["BaseSandbox","this","CoreE2B"],"sources":["../src/messaging.ts","../src/utils.ts","../src/consts.ts","../src/sandbox.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["import { NotFoundError, SandboxError, TimeoutError } from 'e2b'\nimport { ChartTypes } from './charts'\n\nexport async function extractError(res: Response) {\n  if (res.ok) {\n    return\n  }\n\n  switch (res.status) {\n    case 502:\n      return new TimeoutError(\n        `${await res.text()}: This error is likely due to sandbox timeout. You can modify the sandbox timeout by passing 'timeoutMs' when starting the sandbox or calling '.setTimeout' on the sandbox with the desired timeout.`\n      )\n    case 404:\n      return new NotFoundError(await res.text())\n    default: {\n      const body = (await res.text()).trim()\n      return new SandboxError(\n        `${res.status} ${res.statusText}${body ? `: ${body}` : ''}`\n      )\n    }\n  }\n}\n\n/**\n * Represents an output message from the sandbox code execution.\n */\nexport class OutputMessage {\n  constructor(\n    /**\n     * The output line.\n     */\n    public readonly line: string,\n    /**\n     * Unix epoch in nanoseconds.\n     */\n    public readonly timestamp: number,\n    /**\n     * Whether the output is an error.\n     */\n    public readonly error: boolean\n  ) {}\n\n  public toString() {\n    return this.line\n  }\n}\n\n/**\n * Represents an error that occurred during the execution of a cell.\n * The error contains the name of the error, the value of the error, and the traceback.\n */\nexport class ExecutionError {\n  constructor(\n    /**\n     * Name of the error.\n     **/\n    public name: string,\n    /**\n     * Value of the error.\n     **/\n    public value: string,\n    /**\n     * The raw traceback of the error.\n     **/\n    public traceback: string\n  ) {}\n}\n\n/**\n * Represents a MIME type.\n */\nexport type MIMEType = string\n\ntype E2BData = {\n  data: Record<string, unknown>\n  chart: ChartTypes\n}\n\n/**\n * Dictionary that maps MIME types to their corresponding representations of the data.\n */\nexport type RawData = {\n  [key: MIMEType]: string\n} & E2BData\n\n/**\n * Represents the data to be displayed as a result of executing a cell in a Jupyter notebook.\n * The result is similar to the structure returned by ipython kernel: https://ipython.readthedocs.io/en/stable/development/execution.html#execution-semantics\n *\n *\n * The result can contain multiple types of data, such as text, images, plots, etc. Each type of data is represented\n * as a string, and the result can contain multiple types of data. The display calls don't have to have text representation,\n * for the actual result the representation is always present for the result, the other representations are always optional.\n */\nexport class Result {\n  /**\n   * Text representation of the result.\n   */\n  readonly text?: string\n  /**\n   * HTML representation of the data.\n   */\n  readonly html?: string\n  /**\n   * Markdown representation of the data.\n   */\n  readonly markdown?: string\n  /**\n   * SVG representation of the data.\n   */\n  readonly svg?: string\n  /**\n   * PNG representation of the data.\n   */\n  readonly png?: string\n  /**\n   * JPEG representation of the data.\n   */\n  readonly jpeg?: string\n  /**\n   * PDF representation of the data.\n   */\n  readonly pdf?: string\n  /**\n   * LaTeX representation of the data.\n   */\n  readonly latex?: string\n  /**\n   * JSON representation of the data.\n   */\n  readonly json?: string\n  /**\n   * JavaScript representation of the data.\n   */\n  readonly javascript?: string\n  /**\n   * Contains the data from DataFrame.\n   */\n  readonly data?: Record<string, unknown>\n  /**\n   * Contains the chart data.\n   */\n  readonly chart?: ChartTypes\n  /**\n   * Extra data that can be included. Not part of the standard types.\n   */\n  readonly extra?: any\n\n  readonly raw: RawData\n\n  constructor(\n    rawData: RawData,\n    public readonly isMainResult: boolean\n  ) {\n    const data = { ...rawData }\n    delete data['type']\n    delete data['is_main_result']\n\n    this.text = data['text']\n    this.html = data['html']\n    this.markdown = data['markdown']\n    this.svg = data['svg']\n    this.png = data['png']\n    this.jpeg = data['jpeg']\n    this.pdf = data['pdf']\n    this.latex = data['latex']\n    this.json = data['json']\n    this.javascript = data['javascript']\n    this.isMainResult = isMainResult\n    this.raw = data\n\n    this.data = data['data']\n    this.chart = data['chart']\n\n    this.extra = {}\n\n    for (const key of Object.keys(data)) {\n      if (\n        ![\n          'plain',\n          'html',\n          'markdown',\n          'svg',\n          'png',\n          'jpeg',\n          'pdf',\n          'latex',\n          'json',\n          'javascript',\n          'data',\n          'chart',\n          'extra',\n          'text',\n        ].includes(key)\n      ) {\n        this.extra[key] = data[key]\n      }\n    }\n  }\n\n  /**\n   * Returns all the formats available for the result.\n   *\n   * @returns Array of strings representing the formats available for the result.\n   */\n  formats(): string[] {\n    const formats = []\n    if (this.html) {\n      formats.push('html')\n    }\n    if (this.markdown) {\n      formats.push('markdown')\n    }\n    if (this.svg) {\n      formats.push('svg')\n    }\n    if (this.png) {\n      formats.push('png')\n    }\n    if (this.jpeg) {\n      formats.push('jpeg')\n    }\n    if (this.pdf) {\n      formats.push('pdf')\n    }\n    if (this.latex) {\n      formats.push('latex')\n    }\n    if (this.json) {\n      formats.push('json')\n    }\n    if (this.javascript) {\n      formats.push('javascript')\n    }\n    if (this.data) {\n      formats.push('data')\n    }\n\n    for (const key of Object.keys(this.extra)) {\n      formats.push(key)\n    }\n\n    return formats\n  }\n\n  /**\n   * Returns the serializable representation of the result.\n   */\n  toJSON() {\n    return {\n      text: this.text,\n      html: this.html,\n      markdown: this.markdown,\n      svg: this.svg,\n      png: this.png,\n      jpeg: this.jpeg,\n      pdf: this.pdf,\n      latex: this.latex,\n      json: this.json,\n      javascript: this.javascript,\n      ...(Object.keys(this.extra).length > 0 ? { extra: this.extra } : {}),\n    }\n  }\n}\n\n/**\n * Data printed to stdout and stderr during execution, usually by print statements, logs, warnings, subprocesses, etc.\n */\nexport type Logs = {\n  /**\n   * List of strings printed to stdout by prints, subprocesses, etc.\n   */\n  stdout: string[]\n  /**\n   * List of strings printed to stderr by prints, subprocesses, etc.\n   */\n  stderr: string[]\n}\n\n/**\n * Represents the result of a cell execution.\n */\nexport class Execution {\n  constructor(\n    /**\n     * List of result of the cell (interactively interpreted last line), display calls (e.g. matplotlib plots).\n     */\n    public results: Result[] = [],\n    /**\n     * Logs printed to stdout and stderr during execution.\n     */\n    public logs: Logs = { stdout: [], stderr: [] },\n    /**\n     * An Error object if an error occurred, null otherwise.\n     */\n    public error?: ExecutionError,\n    /**\n     * Execution count of the cell.\n     */\n    public executionCount?: number\n  ) {}\n\n  /**\n   * Returns the text representation of the main result of the cell.\n   */\n  get text(): string | undefined {\n    for (const data of this.results) {\n      if (data.isMainResult) {\n        return data.text\n      }\n    }\n  }\n\n  /**\n   * Returns the serializable representation of the execution result.\n   */\n  toJSON() {\n    return {\n      results: this.results,\n      logs: this.logs,\n      error: this.error,\n    }\n  }\n}\n\nexport async function parseOutput(\n  execution: Execution,\n  line: string,\n  onStdout?: (output: OutputMessage) => Promise<any> | any,\n  onStderr?: (output: OutputMessage) => Promise<any> | any,\n  onResult?: (data: Result) => Promise<any> | any,\n  onError?: (error: ExecutionError) => Promise<any> | any\n) {\n  const msg = JSON.parse(line)\n\n  switch (msg.type) {\n    case 'result': {\n      const result = new Result(\n        { ...msg, type: undefined, is_main_result: undefined },\n        msg.is_main_result\n      )\n      execution.results.push(result)\n      if (onResult) {\n        await onResult(result)\n      }\n      break\n    }\n    case 'stdout':\n      execution.logs.stdout.push(msg.text)\n      if (onStdout) {\n        await onStdout({\n          error: false,\n          line: msg.text,\n          timestamp: new Date().getTime() * 1000,\n        })\n      }\n      break\n    case 'stderr':\n      execution.logs.stderr.push(msg.text)\n      if (onStderr) {\n        await onStderr({\n          error: true,\n          line: msg.text,\n          timestamp: new Date().getTime() * 1000,\n        })\n      }\n      break\n    case 'error':\n      execution.error = new ExecutionError(msg.name, msg.value, msg.traceback)\n      if (onError) {\n        await onError(execution.error)\n      }\n      break\n    case 'number_of_executions':\n      execution.executionCount = msg.execution_count\n      break\n  }\n}\n","import { TimeoutError } from 'e2b'\n\nexport function formatRequestTimeoutError(error: unknown) {\n  if (error instanceof Error && error.name === 'AbortError') {\n    return new TimeoutError(\n      \"Request timed out — the 'requestTimeoutMs' option can be used to increase this timeout\"\n    )\n  }\n\n  return error\n}\n\nexport function formatExecutionTimeoutError(error: unknown) {\n  if (error instanceof Error && error.name === 'AbortError') {\n    return new TimeoutError(\n      \"Execution timed out — the 'timeoutMs' option can be used to increase this timeout\"\n    )\n  }\n\n  return error\n}\n\nconst CONNECTION_CLOSED_CODES = ['ECONNRESET', 'EPIPE', 'UND_ERR_SOCKET']\n\n// Deno (hyper) and workerd surface a mid-stream disconnect as a plain error\n// with no `code` and no `cause` — the message is the only signal.\nconst CONNECTION_CLOSED_MESSAGES = [\n  'error reading a body from connection',\n  'connection closed before message completed',\n  'connection reset by peer',\n  'network connection lost',\n]\n\n/**\n * Checks if the error means the connection was closed/reset while the request\n * was in flight. The shape of this error is runtime-specific — Bun sets a\n * `code` directly, Node's fetch (undici) wraps the socket error in the `cause`\n * of a generic `TypeError`, and Deno and workerd only set a message.\n */\nexport function isConnectionClosedError(error: unknown): boolean {\n  if (!(error instanceof Error)) {\n    return false\n  }\n\n  const code = (error as { code?: unknown }).code\n  if (typeof code === 'string' && CONNECTION_CLOSED_CODES.includes(code)) {\n    return true\n  }\n\n  if (error.name === 'ConnectionReset' || error.name === 'ConnectionClosed') {\n    return true\n  }\n\n  const message = error.message.toLowerCase()\n  if (CONNECTION_CLOSED_MESSAGES.some((m) => message.includes(m))) {\n    return true\n  }\n\n  if (error.cause) {\n    return isConnectionClosedError(error.cause)\n  }\n\n  return false\n}\n\nexport async function* readLines(stream: ReadableStream<Uint8Array>) {\n  const reader = stream.getReader()\n  const decoder = new TextDecoder()\n  let buffer = ''\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read()\n\n      if (value !== undefined) {\n        buffer += decoder.decode(value, { stream: true })\n      }\n\n      if (done) {\n        buffer += decoder.decode()\n        if (buffer.length > 0) {\n          yield buffer\n        }\n        break\n      }\n\n      let newlineIdx = -1\n\n      do {\n        newlineIdx = buffer.indexOf('\\n')\n        if (newlineIdx !== -1) {\n          yield buffer.slice(0, newlineIdx)\n          buffer = buffer.slice(newlineIdx + 1)\n        }\n      } while (newlineIdx !== -1)\n    }\n  } finally {\n    reader.releaseLock()\n  }\n}\n","export const DEFAULT_TIMEOUT_MS = 60_000 // 1 minute\nexport const JUPYTER_PORT = 49999\n","import { Sandbox as BaseSandbox, InvalidArgumentError, TimeoutError } from 'e2b'\n\nimport {\n  Result,\n  Execution,\n  OutputMessage,\n  parseOutput,\n  extractError,\n  ExecutionError,\n} from './messaging'\nimport {\n  formatExecutionTimeoutError,\n  formatRequestTimeoutError,\n  isConnectionClosedError,\n  readLines,\n} from './utils'\nimport { JUPYTER_PORT, DEFAULT_TIMEOUT_MS } from './consts'\n\n/**\n * Represents a context for code execution.\n */\nexport type Context = {\n  /**\n   * The ID of the context.\n   */\n  id: string\n  /**\n   * The language of the context.\n   */\n  language: string\n  /**\n   * The working directory of the context.\n   */\n  cwd: string\n}\n\n/* eslint-disable @typescript-eslint/ban-types */\n/**\n * Supported language for code execution.\n */\nexport type RunCodeLanguage =\n  'python' | 'javascript' | 'typescript' | 'r' | 'java' | 'bash' | (string & {})\n/* eslint-enable @typescript-eslint/ban-types */\n\n/**\n * Options for running code.\n */\nexport interface RunCodeOpts {\n  /**\n   * Callback for handling stdout messages.\n   */\n  onStdout?: (output: OutputMessage) => Promise<any> | any\n  /**\n   * Callback for handling stderr messages.\n   */\n  onStderr?: (output: OutputMessage) => Promise<any> | any\n  /**\n   * Callback for handling the final execution result.\n   */\n  onResult?: (data: Result) => Promise<any> | any\n  /**\n   * Callback for handling the `ExecutionError` object.\n   */\n  onError?: (error: ExecutionError) => Promise<any> | any\n  /**\n   * Custom environment variables for code execution.\n   *\n   * @default {}\n   */\n  envs?: Record<string, string>\n  /**\n   * Timeout for the code execution in **milliseconds**.\n   *\n   * @default 60_000 // 60 seconds\n   */\n  timeoutMs?: number\n  /**\n   * Timeout for the request in **milliseconds**.\n   *\n   * @default 30_000 // 30 seconds\n   */\n  requestTimeoutMs?: number\n}\n\n/**\n * Options for creating a code context.\n */\nexport interface CreateCodeContextOpts {\n  /**\n   * Working directory for the context.\n   *\n   * @default /home/user\n   */\n  cwd?: string\n  /**\n   * Language for the context.\n   *\n   * @default python\n   */\n  language?: RunCodeLanguage\n  /**\n   * Timeout for the request in **milliseconds**.\n   *\n   * @default 30_000 // 30 seconds\n   */\n  requestTimeoutMs?: number\n}\n\n/**\n * E2B cloud sandbox is a secure and isolated cloud environment.\n *\n * The sandbox allows you to:\n * - Access Linux OS\n * - Create, list, and delete files and directories\n * - Run commands\n * - Run isolated code\n * - Access the internet\n *\n * Check docs [here](https://e2b.dev/docs).\n *\n * Use {@link Sandbox.create} to create a new sandbox.\n *\n * @example\n * ```ts\n * import { Sandbox } from '@e2b/code-interpreter'\n *\n * const sandbox = await Sandbox.create()\n * ```\n */\nexport class Sandbox extends BaseSandbox {\n  protected static override readonly defaultTemplate: string =\n    'code-interpreter-v1'\n\n  protected get jupyterUrl(): string {\n    return this.connectionConfig.getSandboxUrl(this.sandboxId, {\n      sandboxDomain: this.sandboxDomain,\n      envdPort: JUPYTER_PORT,\n    })\n  }\n\n  /**\n   * Run the code for the specified language.\n   *\n   * Specify the `language` or `context` option to run the code as a different language or in a different `Context`.\n   * If no language is specified, Python is used.\n   *\n   * You can reference previously defined variables, imports, and functions in the code.\n   *\n   * @param code code to execute.\n   * @param opts options for executing the code.\n   *\n   * @returns `Execution` result object.\n   */\n  async runCode(\n    code: string,\n    opts?: RunCodeOpts & {\n      /**\n       * Language to use for code execution.\n       *\n       * If not defined, the default Python context is used.\n       */\n      language?: RunCodeLanguage\n    }\n  ): Promise<Execution>\n  /**\n   * Runs the code in the specified context, if not specified, the default context is used.\n   *\n   * Specify the `language` or `context` option to run the code as a different language or in a different `Context`.\n   *\n   * You can reference previously defined variables, imports, and functions in the code.\n   *\n   * @param code code to execute.\n   * @param opts options for executing the code\n   *\n   * @returns `Execution` result object\n   */\n  async runCode(\n    code: string,\n    opts?: RunCodeOpts & {\n      /**\n       * Context to run the code in.\n       */\n      context?: Context\n    }\n  ): Promise<Execution>\n  async runCode(\n    code: string,\n    opts?: RunCodeOpts & {\n      language?: string\n      context?: Context\n    }\n  ): Promise<Execution> {\n    if (opts?.context && opts?.language) {\n      throw new InvalidArgumentError(\n        'You can provide context or language, but not both at the same time.'\n      )\n    }\n\n    const controller = new AbortController()\n\n    const requestTimeout =\n      opts?.requestTimeoutMs ?? this.connectionConfig.requestTimeoutMs\n\n    const reqTimer = requestTimeout\n      ? setTimeout(() => {\n          controller.abort()\n        }, requestTimeout)\n      : undefined\n\n    const headers: Record<string, string> = {\n      'Content-Type': 'application/json',\n      'E2b-Sandbox-Id': this.sandboxId,\n      'E2b-Sandbox-Port': JUPYTER_PORT.toString(),\n    }\n\n    if (this.trafficAccessToken) {\n      headers['E2B-Traffic-Access-Token'] = this.trafficAccessToken\n    }\n    if (this.envdAccessToken) {\n      headers['X-Access-Token'] = this.envdAccessToken\n    }\n\n    try {\n      const res = await fetch(`${this.jupyterUrl}/execute`, {\n        method: 'POST',\n        headers,\n        body: JSON.stringify({\n          code,\n          context_id: opts?.context?.id,\n          language: opts?.language,\n          env_vars: opts?.envs,\n        }),\n        signal: controller.signal,\n        keepalive: true,\n      })\n\n      const error = await extractError(res)\n      if (error) {\n        throw error\n      }\n\n      if (!res.body) {\n        throw new Error(\n          `No response body: ${res.statusText} ${await res?.text()}`\n        )\n      }\n\n      clearTimeout(reqTimer)\n\n      const bodyTimeout = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS\n\n      const bodyTimer = bodyTimeout\n        ? setTimeout(() => {\n            controller.abort()\n          }, bodyTimeout)\n        : undefined\n\n      const execution = new Execution()\n\n      try {\n        for await (const chunk of readLines(res.body)) {\n          await parseOutput(\n            execution,\n            chunk,\n            opts?.onStdout,\n            opts?.onStderr,\n            opts?.onResult,\n            opts?.onError\n          )\n        }\n      } catch (error) {\n        throw formatExecutionTimeoutError(error)\n      } finally {\n        clearTimeout(bodyTimer)\n      }\n\n      return execution\n    } catch (error) {\n      throw await this.handleRequestError(error)\n    }\n  }\n\n  /**\n   * Creates a new context to run code in.\n   *\n   * @param opts options for creating the context.\n   *\n   * @returns context object.\n   */\n  async createCodeContext(opts?: CreateCodeContextOpts): Promise<Context> {\n    try {\n      const headers: Record<string, string> = {\n        'Content-Type': 'application/json',\n        'E2b-Sandbox-Id': this.sandboxId,\n        'E2b-Sandbox-Port': JUPYTER_PORT.toString(),\n      }\n\n      if (this.trafficAccessToken) {\n        headers['E2B-Traffic-Access-Token'] = this.trafficAccessToken\n      }\n\n      const res = await fetch(`${this.jupyterUrl}/contexts`, {\n        method: 'POST',\n        headers,\n        body: JSON.stringify({\n          language: opts?.language,\n          cwd: opts?.cwd,\n        }),\n        keepalive: true,\n        signal: this.connectionConfig.getSignal(opts?.requestTimeoutMs),\n      })\n\n      const error = await extractError(res)\n      if (error) {\n        throw error\n      }\n\n      return await res.json()\n    } catch (error) {\n      throw await this.handleRequestError(error)\n    }\n  }\n\n  /**\n   * Removes a context.\n   *\n   * @param context context to remove.\n   *\n   * @returns void.\n   */\n  async removeCodeContext(context: Context | string): Promise<void> {\n    try {\n      const id = typeof context === 'string' ? context : context.id\n      const headers: Record<string, string> = {\n        'Content-Type': 'application/json',\n        'E2b-Sandbox-Id': this.sandboxId,\n        'E2b-Sandbox-Port': JUPYTER_PORT.toString(),\n      }\n\n      if (this.trafficAccessToken) {\n        headers['E2B-Traffic-Access-Token'] = this.trafficAccessToken\n      }\n\n      const res = await fetch(`${this.jupyterUrl}/contexts/${id}`, {\n        method: 'DELETE',\n        headers,\n        keepalive: true,\n        signal: this.connectionConfig.getSignal(\n          this.connectionConfig.requestTimeoutMs\n        ),\n      })\n\n      const error = await extractError(res)\n      if (error) {\n        throw error\n      }\n    } catch (error) {\n      throw await this.handleRequestError(error)\n    }\n  }\n\n  /**\n   * List all contexts.\n   *\n   * @returns list of contexts.\n   */\n  async listCodeContexts(): Promise<Context[]> {\n    try {\n      const headers: Record<string, string> = {\n        'Content-Type': 'application/json',\n        'E2b-Sandbox-Id': this.sandboxId,\n        'E2b-Sandbox-Port': JUPYTER_PORT.toString(),\n      }\n\n      if (this.trafficAccessToken) {\n        headers['E2B-Traffic-Access-Token'] = this.trafficAccessToken\n      }\n\n      const res = await fetch(`${this.jupyterUrl}/contexts`, {\n        method: 'GET',\n        headers,\n        keepalive: true,\n        signal: this.connectionConfig.getSignal(\n          this.connectionConfig.requestTimeoutMs\n        ),\n      })\n\n      const error = await extractError(res)\n      if (error) {\n        throw error\n      }\n\n      return await res.json()\n    } catch (error) {\n      throw await this.handleRequestError(error)\n    }\n  }\n\n  /**\n   * Restart a context.\n   *\n   * @param context context to restart.\n   *\n   * @returns void.\n   */\n  async restartCodeContext(context: Context | string): Promise<void> {\n    try {\n      const id = typeof context === 'string' ? context : context.id\n      const headers: Record<string, string> = {\n        'Content-Type': 'application/json',\n        'E2b-Sandbox-Id': this.sandboxId,\n        'E2b-Sandbox-Port': JUPYTER_PORT.toString(),\n      }\n\n      if (this.trafficAccessToken) {\n        headers['E2B-Traffic-Access-Token'] = this.trafficAccessToken\n      }\n\n      const res = await fetch(`${this.jupyterUrl}/contexts/${id}/restart`, {\n        method: 'POST',\n        headers,\n        keepalive: true,\n        signal: this.connectionConfig.getSignal(\n          this.connectionConfig.requestTimeoutMs\n        ),\n      })\n\n      const error = await extractError(res)\n      if (error) {\n        throw error\n      }\n    } catch (error) {\n      throw await this.handleRequestError(error)\n    }\n  }\n\n  /**\n   * Returns the error to throw for a failed request. If the connection was\n   * closed because the sandbox was killed mid-request, returns a descriptive\n   * `TimeoutError`. Otherwise falls back to formatting request timeouts and\n   * re-throwing the original error.\n   */\n  private async handleRequestError(error: unknown): Promise<unknown> {\n    if (\n      isConnectionClosedError(error) &&\n      // If the state check itself fails we can't tell whether the sandbox\n      // was killed — assume it's running so we re-throw the original error\n      // instead of wrongly claiming the sandbox is gone.\n      (await this.isRunning().catch(() => true)) === false\n    ) {\n      return new TimeoutError(\n        'The sandbox was killed while the request was in progress. This can happen when the sandbox times out or is killed manually. ' +\n          \"You can modify the sandbox timeout by passing 'timeoutMs' when starting the sandbox or calling '.setTimeout' on the sandbox with the desired timeout.\"\n      )\n    }\n\n    return formatRequestTimeoutError(error)\n  }\n}\n","import {\n  ConnectionOpts,\n  E2BClientOpts,\n  E2B as CoreE2B,\n  Secret,\n  Template,\n  Volume,\n} from 'e2b'\n\nimport { Sandbox } from './sandbox'\n\nexport type { E2BClientOpts }\n\n/**\n * E2B client with an explicitly bound connection configuration.\n *\n * The resources exposed by the client ({@link E2B.Sandbox},\n * {@link E2B.Volume}, {@link E2B.Template}, {@link E2B.Secret}) behave exactly\n * like the top-level `Sandbox` / `Volume` / `Template` / `Secret` exports,\n * except the options passed to the client are used as the defaults instead of\n * the environment variables.\n * Per-call options still take precedence over the client's options.\n *\n * Multiple clients are fully isolated from each other and from the top-level\n * env-configured exports.\n *\n * @example\n * ```ts\n * import { E2B } from '@e2b/code-interpreter'\n *\n * const client = new E2B({ apiKey: 'e2b_...', domain: 'e2b.dev' })\n *\n * const sandbox = await client.Sandbox.create()\n * const execution = await sandbox.runCode('x = 1; x += 1; x')\n * ```\n */\nexport class E2B {\n  /**\n   * Code Interpreter `Sandbox` class bound to this client's connection\n   * configuration.\n   */\n  readonly Sandbox: typeof Sandbox\n\n  /**\n   * `Volume` class bound to this client's connection configuration.\n   */\n  readonly Volume: typeof Volume\n\n  /**\n   * `Template` bound to this client's connection configuration. Both the\n   * builder (`client.Template()`) and the statics\n   * (`client.Template.build(...)`, `client.Template.exists(...)`, …) work like\n   * the top-level `Template`.\n   */\n  readonly Template: typeof Template\n\n  /**\n   * `Secret` class bound to this client's connection configuration.\n   */\n  readonly Secret: typeof Secret\n\n  /**\n   * Create a new client with the connection options bound to it.\n   *\n   * @param opts connection options used as the defaults for every call made\n   *   through this client's resource classes.\n   */\n  constructor(opts?: E2BClientOpts) {\n    // Options are copied so later mutations of the caller's object cannot\n    // change the bound configuration. `signal` is dropped rather than only\n    // typed away, since it cancels a single request and a caller passing a\n    // wider-typed object (or plain JS) would otherwise bind it to every call.\n    const boundOpts: E2BClientOpts = { ...(opts ?? {}) }\n    delete (boundOpts as ConnectionOpts).signal\n\n    if (boundOpts.headers) {\n      boundOpts.headers = { ...boundOpts.headers }\n    }\n    if (boundOpts.apiHeaders) {\n      boundOpts.apiHeaders = { ...boundOpts.apiHeaders }\n    }\n\n    this.Sandbox = class extends Sandbox {\n      protected static override readonly boundOpts = boundOpts\n    }\n\n    // The resources that are not specific to the Code Interpreter are bound by\n    // the core client.\n    const core = new CoreE2B(boundOpts)\n    this.Volume = core.Volume\n    this.Template = core.Template\n    this.Secret = core.Secret\n  }\n}\n","export * from 'e2b'\n\nexport { E2B } from './client'\nexport type { E2BClientOpts } from './client'\nexport { Sandbox } from './sandbox'\nexport type {\n  Context,\n  RunCodeLanguage,\n  RunCodeOpts,\n  CreateCodeContextOpts,\n} from './sandbox'\nexport type {\n  Logs,\n  ExecutionError,\n  Result,\n  Execution,\n  MIMEType,\n  RawData,\n  OutputMessage,\n} from './messaging'\nexport type {\n  ScaleType,\n  ChartType,\n  ChartTypes,\n  Chart,\n  BarChart,\n  BarData,\n  LineChart,\n  ScatterChart,\n  BoxAndWhiskerChart,\n  BoxAndWhiskerData,\n  PieChart,\n  PieData,\n  SuperChart,\n  PointData,\n} from './charts'\nimport { Sandbox } from './sandbox'\n\nexport default Sandbox\n"],"mappings":"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"}