@genspark/sb-box 0.0.0-stage → 0.1.0
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/CHANGELOG.md +14 -0
- package/LICENSE +21 -0
- package/README.md +102 -2
- package/dist/index.cjs +1167 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +641 -0
- package/dist/index.d.ts +641 -0
- package/dist/index.js +1095 -0
- package/dist/index.js.map +1 -0
- package/package.json +63 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/http.ts","../src/sse.ts","../src/sandbox.ts","../src/templates.ts","../src/client.ts"],"sourcesContent":["export { SbBox, Sandboxes, type SbBoxOptions } from './client.js'\nexport { Sandbox, Commands, BackgroundCommand, Files, Pty, PtySession, PtyWebSocket, type PtyWsHandlers } from './sandbox.js'\nexport { Templates } from './templates.js'\nexport { parseSse, type SseMessage } from './sse.js'\nexport { SDK_VERSION, DEFAULT_BASE_URL } from './http.js'\nexport * from './errors.js'\nexport * from './types.js'\n","const KEY_RE = /gsk-[A-Za-z0-9._-]+/g\n\n/** Replace any API key that leaked into a string. */\nexport function redact(text: string): string {\n return text.replace(KEY_RE, 'gsk-REDACTED')\n}\n\nexport interface SbBoxErrorInit {\n status: number\n code?: string\n message: string\n detail?: unknown\n retryAfter?: number\n requestId?: string\n}\n\n/** Base class of every error raised by the SDK. */\nexport class SbBoxError extends Error {\n readonly status: number\n readonly code?: string\n /** Parsed response body (or the raw text when it was not JSON). */\n readonly detail: unknown\n /** Seconds from a `Retry-After` header, when the server sent one. */\n readonly retryAfter?: number\n readonly requestId?: string\n\n constructor(init: SbBoxErrorInit) {\n super(redact(init.message))\n this.name = new.target.name\n this.status = init.status\n this.code = init.code\n this.detail = init.detail\n this.retryAfter = init.retryAfter\n this.requestId = init.requestId\n }\n\n /** A named field from the error body (`plan`, `limit`, `balance`, `recovery`, …). */\n field<T = unknown>(name: string): T | undefined {\n const d = this.detail\n if (d && typeof d === 'object') {\n const o = d as Record<string, unknown>\n if (name in o) return o[name] as T\n const inner = o.detail\n if (inner && typeof inner === 'object' && name in (inner as object)) {\n return (inner as Record<string, unknown>)[name] as T\n }\n }\n return undefined\n }\n}\n\nexport class ValidationError extends SbBoxError {}\nexport class AuthenticationError extends SbBoxError {}\nexport class InsufficientCreditsError extends SbBoxError {\n get balance(): number | undefined { return this.field<number>('balance') }\n}\nexport class ForbiddenError extends SbBoxError {}\nexport class PlanRequiredError extends ForbiddenError {\n get plan(): string | undefined { return this.field<string>('plan') }\n get upgrade(): string | undefined { return this.field<string>('upgrade') }\n}\nexport class NotFoundError extends SbBoxError {}\nexport class RegionRetiredError extends NotFoundError {\n get region(): string | undefined { return this.field<string>('region') }\n}\nexport class CommandTimeoutError extends SbBoxError {\n get killed(): boolean { return this.field<boolean>('killed') === true }\n}\nexport class ConflictError extends SbBoxError {}\nexport class LimitError extends ConflictError {\n get plan(): string | undefined { return this.field<string>('plan') }\n get limit(): number | undefined { return this.field<number>('limit') }\n get current(): number | undefined { return this.field<number>('current') }\n get requested(): number | undefined { return this.field<number>('requested') }\n}\nexport class InterpreterUnavailableError extends ConflictError {}\nexport class DiskLostError extends SbBoxError {}\nexport class MemoryExpiredError extends SbBoxError {\n get recovery(): string[] { return this.field<string[]>('recovery') ?? [] }\n}\nexport class ClientDisconnectedError extends SbBoxError {}\nexport class ServerError extends SbBoxError {}\nexport class InterpreterStartFailedError extends ServerError {}\n/** Network failure or request timeout before any HTTP status was received. */\nexport class SbBoxConnectionError extends SbBoxError {\n constructor(message: string, cause?: unknown) {\n super({ status: 0, message })\n if (cause !== undefined) (this as { cause?: unknown }).cause = cause\n }\n}\n/** `templates.waitReady` saw the build end in `error`. */\nexport class TemplateBuildError extends SbBoxError {\n readonly templateId: string\n readonly buildError?: string\n constructor(templateId: string, buildError?: string, detail?: unknown) {\n super({ status: 0, message: `template ${templateId} build failed: ${buildError ?? 'unknown error'}`, detail })\n this.templateId = templateId\n this.buildError = buildError\n }\n}\n/** A `wait` helper ran past its deadline. */\nexport class WaitTimeoutError extends SbBoxError {\n constructor(message: string) { super({ status: 0, message }) }\n}\n\nfunction pick(obj: unknown, key: string): unknown {\n if (obj && typeof obj === 'object' && key in (obj as object)) return (obj as Record<string, unknown>)[key]\n return undefined\n}\n\n/** Extract (code, message) from either `{\"detail\": …}` or `{\"error\": …}` envelopes. */\nexport function describeBody(body: unknown, fallback: string): { code?: string; message: string } {\n if (typeof body === 'string') return { message: body || fallback }\n if (!body || typeof body !== 'object') return { message: fallback }\n const detail = pick(body, 'detail')\n if (typeof detail === 'string') return { message: detail }\n if (detail && typeof detail === 'object') {\n const code = pick(detail, 'code')\n const msg = pick(detail, 'message') ?? pick(detail, 'error')\n return { code: typeof code === 'string' ? code : undefined, message: typeof msg === 'string' ? msg : JSON.stringify(detail) }\n }\n const err = pick(body, 'error')\n if (typeof err === 'string') {\n const code = pick(body, 'code')\n return { code: typeof code === 'string' ? code : undefined, message: err }\n }\n const reason = pick(body, 'reason')\n if (typeof reason === 'string') {\n const rec = pick(body, 'recovery')\n return { code: reason, message: Array.isArray(rec) ? `${reason} (recovery: ${rec.join(', ')})` : reason }\n }\n const message = pick(body, 'message')\n if (typeof message === 'string') {\n const errors = pick(body, 'errors')\n return { message: Array.isArray(errors) && errors.length ? `${message}: ${JSON.stringify(errors)}` : message }\n }\n const code = pick(body, 'code')\n return { code: typeof code === 'string' ? code : undefined, message: fallback }\n}\n\n/** Map an HTTP failure to the SDK error class from the contract table. */\nexport function errorFromResponse(status: number, body: unknown, headers: Headers): SbBoxError {\n const { code, message } = describeBody(body, `HTTP ${status}`)\n const ra = headers.get('retry-after')\n const retryAfter = ra != null && ra !== '' && !Number.isNaN(Number(ra)) ? Number(ra) : undefined\n const init: SbBoxErrorInit = {\n status, code, message, detail: body, retryAfter,\n requestId: headers.get('x-request-id') ?? undefined,\n }\n switch (status) {\n case 400: case 422: return new ValidationError(init)\n case 401: return new AuthenticationError(init)\n case 402: return new InsufficientCreditsError(init)\n case 403: return code === 'sb_box_plan_required' ? new PlanRequiredError(init) : new ForbiddenError(init)\n case 404: return code === 'sb_box_region_retired' ? new RegionRetiredError(init) : new NotFoundError(init)\n case 408: return new CommandTimeoutError(init)\n case 409:\n if (code && code.endsWith('_limit')) return new LimitError(init)\n if (code === 'sb_box_interpreter_unavailable') return new InterpreterUnavailableError(init)\n return new ConflictError(init)\n case 410: return new DiskLostError(init)\n case 428: return new MemoryExpiredError(init)\n case 499: return new ClientDisconnectedError(init)\n case 502: return code === 'sb_box_interpreter_start_failed' ? new InterpreterStartFailedError(init) : new ServerError(init)\n default:\n return status >= 500 ? new ServerError(init) : new SbBoxError(init)\n }\n}\n","import { errorFromResponse, redact, SbBoxConnectionError, SbBoxError } from './errors.js'\n\nexport const SDK_VERSION = '0.1.0'\nexport const DEFAULT_BASE_URL = 'https://www.genspark.ai/api/sb-box/v1'\n\nexport interface HttpOptions {\n apiKey: string\n baseUrl: string\n /** Default per-request timeout in seconds. */\n timeout: number\n /** Retries after the first attempt for retryable calls (0 = no retry). */\n retries: number\n userAgent: string\n fetch: typeof fetch\n}\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE'\n query?: Record<string, string | number | undefined>\n json?: unknown\n body?: Uint8Array | string\n contentType?: string\n headers?: Record<string, string>\n /** Seconds; overrides the client default. */\n timeout?: number\n /** Retry on connection errors and 502/503/504 (default false). */\n retry?: boolean\n /** Honour `Retry-After` on 503 until `deadlineMs`. */\n retryOn503Until?: number\n /** Return the raw Response (streams, bytes). */\n raw?: boolean\n /**\n * Raw responses only: when false, the timeout covers just the headers and the\n * caller owns the body for as long as it likes (unbounded server streams such\n * as `connect`). Default true: the timeout bounds the whole body; past it the\n * stream fails with `SbBoxConnectionError`.\n */\n bodyDeadline?: boolean\n signal?: AbortSignal\n}\n\nconst BACKOFF_MS = [500, 1000, 2000]\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const t = setTimeout(resolve, ms)\n signal?.addEventListener('abort', () => { clearTimeout(t); reject(signal.reason) }, { once: true })\n })\n}\n\nexport class Http {\n readonly opts: HttpOptions\n\n constructor(opts: HttpOptions) {\n this.opts = opts\n }\n\n url(path: string, query?: RequestOptions['query']): string {\n const u = new URL(this.opts.baseUrl.replace(/\\/+$/, '') + path)\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined && v !== null && v !== '') u.searchParams.set(k, String(v))\n }\n }\n return u.toString()\n }\n\n async request<T = unknown>(path: string, opts: RequestOptions = {}): Promise<T> {\n const res = await this.send(path, { ...opts, raw: false })\n return res as T\n }\n\n async raw(path: string, opts: RequestOptions = {}): Promise<Response> {\n return (await this.send(path, { ...opts, raw: true })) as Response\n }\n\n private async send(path: string, opts: RequestOptions): Promise<unknown> {\n const method = opts.method ?? 'GET'\n const headers: Record<string, string> = {\n 'X-Api-Key': this.opts.apiKey,\n 'User-Agent': this.opts.userAgent,\n Accept: opts.raw ? '*/*' : 'application/json',\n ...opts.headers,\n }\n let body: BodyInit | undefined\n if (opts.json !== undefined) {\n headers['Content-Type'] = 'application/json'\n body = JSON.stringify(opts.json)\n } else if (opts.body !== undefined) {\n headers['Content-Type'] = opts.contentType ?? 'application/octet-stream'\n body = opts.body as BodyInit\n }\n const url = this.url(path, opts.query)\n const timeoutMs = (opts.timeout ?? this.opts.timeout) * 1000\n const maxAttempts = opts.retry ? 1 + Math.max(0, this.opts.retries) : 1\n\n let attempt = 0\n while (true) {\n attempt++\n const ac = new AbortController()\n const onAbort = () => ac.abort(opts.signal?.reason)\n opts.signal?.addEventListener('abort', onAbort, { once: true })\n const timer = setTimeout(() => ac.abort(new Error(`request timed out after ${timeoutMs / 1000}s`)), timeoutMs)\n let res: Response\n try {\n res = await this.opts.fetch(url, { method, headers, body, signal: ac.signal })\n } catch (e) {\n clearTimeout(timer)\n opts.signal?.removeEventListener('abort', onAbort)\n if (opts.signal?.aborted) throw e\n if (opts.retry && attempt < maxAttempts) {\n await sleep(jitter(BACKOFF_MS[Math.min(attempt - 1, BACKOFF_MS.length - 1)]))\n continue\n }\n const msg = e instanceof Error ? e.message : String(e)\n throw new SbBoxConnectionError(`${method} ${path}: ${redact(msg)}`, e)\n }\n if (opts.raw && res.ok) {\n const release = () => {\n clearTimeout(timer)\n opts.signal?.removeEventListener('abort', onAbort)\n }\n if (opts.bodyDeadline === false || !res.body) {\n release()\n return res\n }\n return withBodyDeadline(res, ac.signal, release, `${method} ${path}: stream timed out after ${timeoutMs / 1000}s`)\n }\n if (res.ok) {\n try {\n return await this.parseBody(res)\n } finally {\n clearTimeout(timer)\n opts.signal?.removeEventListener('abort', onAbort)\n }\n }\n\n let parsed: unknown\n try {\n parsed = await this.parseBody(res)\n } catch {\n parsed = undefined\n } finally {\n clearTimeout(timer)\n opts.signal?.removeEventListener('abort', onAbort)\n }\n const err = errorFromResponse(res.status, parsed, res.headers)\n\n if (res.status === 503 && opts.retryOn503Until !== undefined) {\n const waitMs = (err.retryAfter ?? 2) * 1000\n if (Date.now() + waitMs <= opts.retryOn503Until) {\n await sleep(waitMs, opts.signal)\n continue\n }\n }\n if (opts.retry && attempt < maxAttempts && [502, 503, 504].includes(res.status)) {\n await sleep(jitter(BACKOFF_MS[Math.min(attempt - 1, BACKOFF_MS.length - 1)]), opts.signal)\n continue\n }\n throw err\n }\n }\n\n private async parseBody(res: Response): Promise<unknown> {\n const ct = res.headers.get('content-type') ?? ''\n const text = await res.text()\n if (!text) return undefined\n if (ct.includes('json')) {\n try { return JSON.parse(text) } catch { return text }\n }\n try { return JSON.parse(text) } catch { return text }\n }\n}\n\n/**\n * Re-wrap a streaming response so the request's abort signal keeps bounding the\n * body: an abort surfaces to the reader as `SbBoxConnectionError`, and the timer\n * is released once the body ends (normally or not).\n */\nfunction withBodyDeadline(res: Response, signal: AbortSignal, release: () => void, timeoutMsg: string): Response {\n const reader = res.body!.getReader()\n const body = new ReadableStream<Uint8Array>({\n async pull(controller) {\n let chunk: ReadableStreamReadResult<Uint8Array>\n try {\n chunk = await reader.read()\n } catch (e) {\n release()\n const err = signal.aborted\n ? new SbBoxConnectionError(redact(timeoutMsg), e)\n : new SbBoxConnectionError(redact(e instanceof Error ? e.message : String(e)), e)\n controller.error(err)\n return\n }\n if (chunk.done) {\n release()\n controller.close()\n return\n }\n controller.enqueue(chunk.value)\n },\n async cancel(reason) {\n release()\n await reader.cancel(reason).catch(() => undefined)\n },\n })\n return new Response(body, { status: res.status, statusText: res.statusText, headers: res.headers })\n}\n\nfunction jitter(ms: number): number {\n return ms * (0.75 + Math.random() * 0.5)\n}\n\nexport function ensureStringMap(name: string, m?: Record<string, unknown>): Record<string, string> | undefined {\n if (m === undefined) return undefined\n for (const [k, v] of Object.entries(m)) {\n if (typeof v !== 'string') {\n throw new SbBoxError({ status: 0, message: `${name}.${k} must be a string (got ${typeof v})` })\n }\n }\n return m as Record<string, string>\n}\n","export interface SseMessage {\n event: string\n data: string\n id?: string\n}\n\n/**\n * Parse a `text/event-stream` body into messages. `event:` defaults to `message`,\n * multi-line `data:` is joined with `\\n`, a blank line ends the event.\n */\nexport async function* parseSse(body: ReadableStream<Uint8Array>): AsyncGenerator<SseMessage> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buf = ''\n let event = ''\n let data: string[] = []\n let id: string | undefined\n\n const flush = (): SseMessage | undefined => {\n if (!event && data.length === 0) return undefined\n const msg: SseMessage = { event: event || 'message', data: data.join('\\n'), id }\n event = ''\n data = []\n id = undefined\n return msg\n }\n\n try {\n while (true) {\n const { value, done } = await reader.read()\n if (done) break\n buf += decoder.decode(value, { stream: true })\n let nl: number\n while ((nl = buf.indexOf('\\n')) >= 0) {\n let line = buf.slice(0, nl)\n buf = buf.slice(nl + 1)\n if (line.endsWith('\\r')) line = line.slice(0, -1)\n if (line === '') {\n const m = flush()\n if (m) yield m\n continue\n }\n if (line.startsWith(':')) continue\n const colon = line.indexOf(':')\n const field = colon < 0 ? line : line.slice(0, colon)\n let value = colon < 0 ? '' : line.slice(colon + 1)\n if (value.startsWith(' ')) value = value.slice(1)\n if (field === 'event') event = value\n else if (field === 'data') data.push(value)\n else if (field === 'id') id = value\n }\n }\n buf += decoder.decode()\n if (buf.trim()) {\n const colon = buf.indexOf(':')\n const field = colon < 0 ? buf : buf.slice(0, colon)\n const value = colon < 0 ? '' : buf.slice(colon + 1).replace(/^ /, '')\n if (field === 'data') data.push(value)\n else if (field === 'event') event = value\n }\n const m = flush()\n if (m) yield m\n } finally {\n reader.releaseLock()\n }\n}\n\nexport function parseJsonData<T = unknown>(msg: SseMessage): T | undefined {\n if (!msg.data) return undefined\n try {\n return JSON.parse(msg.data) as T\n } catch {\n return undefined\n }\n}\n","import { NotFoundError, SbBoxError, WaitTimeoutError } from './errors.js'\nimport { ensureStringMap, type Http } from './http.js'\nimport { parseJsonData, parseSse } from './sse.js'\nimport type {\n CodeResult, CommandResult, ExecEvent, ExecOptions, FileEntry, Grant, GrantOptions, MetricPoint,\n ProcessInfo, PtyEvent, PtyOptions, RunCodeOptions, SandboxInfo, SandboxState, SandboxVersion,\n StartCommandOptions, WaitOptions,\n} from './types.js'\n\nconst DEFAULT_SHELL = ['/bin/sh', '-c']\n\nfunction argv(command: string | string[]): string[] {\n if (typeof command === 'string') return [...DEFAULT_SHELL, command]\n if (!Array.isArray(command) || command.length === 0) throw new TypeError('command must be a non-empty argv array or a shell string')\n return command\n}\n\nfunction execBody(command: string | string[], opts: ExecOptions | StartCommandOptions, withTimeout: boolean, max?: number) {\n const body: Record<string, unknown> = { command: argv(command) }\n if (opts.cwd) body.cwd = opts.cwd\n const env = ensureStringMap('envVars', opts.envVars)\n if (env) body.envVars = env\n if (opts.user) body.user = opts.user\n if (withTimeout) {\n const t = (opts as ExecOptions).timeout ?? 60\n if (max !== undefined && t > max) throw new RangeError(`timeout must be <= ${max} seconds`)\n body.timeout = t\n }\n return body\n}\n\nasync function* execEvents(res: Response): AsyncGenerator<ExecEvent> {\n if (!res.body) return\n let execId: string | undefined\n for await (const m of parseSse(res.body)) {\n const d = parseJsonData<Record<string, unknown>>(m) ?? {}\n switch (m.event) {\n case 'execId':\n execId = typeof d.execId === 'string' ? d.execId : undefined\n break\n case 'stdout':\n case 'stderr':\n yield { kind: m.event, data: String(d.data ?? ''), execId }\n break\n case 'exit':\n yield { kind: 'exit', exitCode: Number(d.exitCode ?? 0), execId }\n return\n case 'error':\n yield { kind: 'error', data: String(d.error ?? m.data), stage: typeof d.stage === 'string' ? d.stage : undefined, execId }\n return\n default:\n break\n }\n }\n}\n\n/** A background command started with `sandbox.commands.start()`. */\nexport class BackgroundCommand {\n constructor(\n private readonly http: Http,\n readonly sandboxId: string,\n readonly execId: string,\n readonly pid: number,\n ) {}\n\n private p(suffix: string) { return `/sandboxes/${encodeURIComponent(this.sandboxId)}/commands/${encodeURIComponent(this.execId)}${suffix}` }\n\n async input(data: string): Promise<number> {\n const r = await this.http.request<{ written: number }>(this.p('/input'), { method: 'POST', json: { data } })\n return r.written\n }\n\n async close(): Promise<void> {\n await this.http.request(this.p('/close'), { method: 'POST' })\n }\n\n /** Block until the command exits; returns its exit code. `timeout` is seconds (default 600). */\n async wait(timeout = 600): Promise<number> {\n const r = await this.http.request<{ exitCode: number }>(this.p('/wait'), { method: 'POST', timeout: timeout + 30 })\n return r.exitCode\n }\n\n async kill(signal = 9): Promise<void> {\n await this.http.request(`/sandboxes/${encodeURIComponent(this.sandboxId)}/commands/kill`, {\n method: 'POST', json: { pid: this.pid, signal },\n })\n }\n\n /** Stream the command's output. Resolves to an empty stream if the server already reaped it. */\n async *connect(): AsyncGenerator<ExecEvent> {\n let res: Response\n try {\n res = await this.http.raw(this.p('/connect'), { headers: { Accept: 'text/event-stream' }, timeout: 3600, bodyDeadline: false })\n } catch (e) {\n if (e instanceof NotFoundError) return\n throw e\n }\n yield* execEvents(res)\n }\n}\n\nexport class Commands {\n constructor(private readonly http: Http, private readonly sandboxId: string) {}\n private p(suffix: string) { return `/sandboxes/${encodeURIComponent(this.sandboxId)}/commands${suffix}` }\n\n async start(command: string | string[], opts: StartCommandOptions = {}): Promise<BackgroundCommand> {\n const r = await this.http.request<{ execId: string; pid: number }>(this.p('/start'), {\n method: 'POST', json: execBody(command, opts, false), timeout: 120,\n })\n return new BackgroundCommand(this.http, this.sandboxId, r.execId, r.pid)\n }\n\n async list(): Promise<ProcessInfo[]> {\n return this.http.request<ProcessInfo[]>(this.p(''), { retry: true })\n }\n\n async kill(pid: number, signal = 9): Promise<void> {\n await this.http.request(this.p('/kill'), { method: 'POST', json: { pid, signal } })\n }\n\n async sendStdin(pid: number, data: string): Promise<void> {\n await this.http.request(this.p('/send-stdin'), { method: 'POST', json: { pid, data } })\n }\n}\n\nexport class Files {\n constructor(private readonly http: Http, private readonly sandboxId: string) {}\n private p(suffix: string) { return `/sandboxes/${encodeURIComponent(this.sandboxId)}/files${suffix}` }\n\n /** Write bytes (or a UTF-8 string). Returns the byte count written. */\n async write(path: string, data: Uint8Array | string, opts: { user?: string } = {}): Promise<number> {\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : data\n const r = await this.http.request<{ written: number }>(this.p('/stream'), {\n method: 'POST', body: bytes, query: { path, user: opts.user }, timeout: 600,\n })\n return r.written\n }\n\n async read(path: string, opts: { user?: string } = {}): Promise<Uint8Array> {\n const res = await this.http.raw(this.p('/stream'), { query: { path, user: opts.user }, timeout: 600, retry: true })\n return new Uint8Array(await res.arrayBuffer())\n }\n\n async readText(path: string, opts: { user?: string; encoding?: string } = {}): Promise<string> {\n const bytes = await this.read(path, opts)\n return new TextDecoder(opts.encoding ?? 'utf-8').decode(bytes)\n }\n\n async list(path = '/', opts: { user?: string } = {}): Promise<FileEntry[]> {\n return this.http.request<FileEntry[]>(this.p('/list'), { query: { path, user: opts.user }, retry: true })\n }\n}\n\n/** An interactive terminal opened with `sandbox.pty.open()`. */\nexport class PtySession {\n constructor(\n private readonly http: Http,\n readonly sandboxId: string,\n readonly execId: string,\n readonly pid: number,\n ) {}\n private p(suffix: string) { return `/sandboxes/${encodeURIComponent(this.sandboxId)}/pty/${encodeURIComponent(this.execId)}${suffix}` }\n\n async input(data: Uint8Array | string): Promise<void> {\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : data\n await this.http.request(this.p('/input'), { method: 'POST', body: bytes })\n }\n\n async resize(rows: number, cols: number): Promise<void> {\n await this.http.request(this.p('/resize'), { method: 'POST', json: { rows, cols } })\n }\n\n async kill(): Promise<void> {\n await this.http.request(this.p('/kill'), { method: 'POST' })\n }\n\n /** Stream terminal output (SSE). Ends with a `exit` event. */\n async *connect(): AsyncGenerator<PtyEvent> {\n const res = await this.http.raw(this.p('/connect'), { headers: { Accept: 'text/event-stream' }, timeout: 3600, bodyDeadline: false })\n if (!res.body) return\n for await (const m of parseSse(res.body)) {\n const d = parseJsonData<Record<string, unknown>>(m) ?? {}\n if (m.event === 'data') yield { kind: 'data', data: String(d.data ?? '') }\n else if (m.event === 'exit') {\n yield { kind: 'exit', exitCode: d.exitCode === undefined ? undefined : Number(d.exitCode), reason: typeof d.reason === 'string' ? d.reason : undefined }\n return\n }\n }\n }\n}\n\nexport interface PtyWsHandlers {\n onData?: (data: string, seq?: number) => void\n onExit?: (exitCode: number) => void\n onError?: (error: string) => void\n}\n\n/** A terminal over the WebSocket transport (`GET /sandboxes/{id}/ws/pty`). */\nexport class PtyWebSocket {\n constructor(private readonly ws: WsLike) {}\n\n input(data: string): void { this.ws.send(JSON.stringify({ type: 'stdin', data })) }\n resize(rows: number, cols: number): void { this.ws.send(JSON.stringify({ type: 'resize', rows, cols })) }\n kill(): void { this.ws.send(JSON.stringify({ type: 'kill' })) }\n close(): void { this.ws.close() }\n}\n\ninterface WsLike {\n send(data: string): void\n close(): void\n addEventListener(type: string, listener: (ev: { data?: unknown; message?: string }) => void): void\n}\n\nexport class Pty {\n constructor(private readonly http: Http, private readonly sandboxId: string) {}\n\n async open(opts: PtyOptions = {}): Promise<PtySession> {\n const json: Record<string, unknown> = {\n command: opts.command ?? ['/bin/bash'],\n rows: opts.rows ?? 24,\n cols: opts.cols ?? 80,\n }\n if (opts.cwd) json.cwd = opts.cwd\n const env = ensureStringMap('envVars', opts.envVars)\n if (env) json.envVars = env\n const r = await this.http.request<{ execId: string; pid: number }>(\n `/sandboxes/${encodeURIComponent(this.sandboxId)}/pty`, { method: 'POST', json, timeout: 120 },\n )\n return new PtySession(this.http, this.sandboxId, r.execId, r.pid)\n }\n\n /**\n * Open a terminal over WebSocket. Uses the global `WebSocket` (Node 22+, browsers) or the\n * optional `ws` package. Resolves once the socket is open and the start frame is sent.\n */\n async connectWs(opts: PtyOptions = {}, handlers: PtyWsHandlers = {}): Promise<PtyWebSocket> {\n const url = new URL(this.http.url(`/sandboxes/${encodeURIComponent(this.sandboxId)}/ws/pty`))\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'\n const headers = { 'X-Api-Key': this.http.opts.apiKey, 'User-Agent': this.http.opts.userAgent }\n\n let ws: WsLike\n const G = globalThis as { WebSocket?: new (url: string, protocols?: string[]) => WsLike }\n if (G.WebSocket) {\n // Browser-style constructor cannot set headers: fall back to the query parameter.\n url.searchParams.set('api_key', this.http.opts.apiKey)\n ws = new G.WebSocket(url.toString())\n } else {\n let mod: { default?: unknown; WebSocket?: unknown }\n try {\n mod = (await import('ws')) as unknown as { default?: unknown; WebSocket?: unknown }\n } catch {\n throw new SbBoxError({ status: 0, message: 'pty.connectWs needs a WebSocket implementation: upgrade to Node 22+ or `npm install ws`' })\n }\n const Ctor = (mod.default ?? mod.WebSocket) as new (url: string, opts: { headers: Record<string, string> }) => WsLike\n ws = new Ctor(url.toString(), { headers })\n }\n\n await new Promise<void>((resolve, reject) => {\n ws.addEventListener('open', () => resolve())\n ws.addEventListener('error', (ev) => reject(new SbBoxError({ status: 0, message: `pty websocket error: ${ev.message ?? 'connection failed'}` })))\n })\n const start: Record<string, unknown> = {}\n if (opts.command) start.command = opts.command\n if (opts.cwd) start.cwd = opts.cwd\n if (opts.rows) start.rows = opts.rows\n if (opts.cols) start.cols = opts.cols\n if (opts.envVars) start.envVars = ensureStringMap('envVars', opts.envVars)\n ws.send(JSON.stringify(start))\n ws.addEventListener('message', (ev) => {\n let frame: Record<string, unknown>\n try { frame = JSON.parse(String(ev.data)) } catch { return }\n if (frame.type === 'stdout') handlers.onData?.(String(frame.data ?? ''), typeof frame.seq === 'number' ? frame.seq : undefined)\n else if (frame.type === 'exit') handlers.onExit?.(Number(frame.exitCode ?? 0))\n else if (frame.type === 'error') handlers.onError?.(String(frame.error ?? ''))\n })\n return new PtyWebSocket(ws)\n }\n}\n\n/** Handle on one sandbox, bound to the client that created it. */\nexport class Sandbox {\n readonly commands: Commands\n readonly files: Files\n readonly pty: Pty\n private _info: SandboxInfo\n\n constructor(private readonly http: Http, info: SandboxInfo) {\n this._info = info\n this.commands = new Commands(http, info.id)\n this.files = new Files(http, info.id)\n this.pty = new Pty(http, info.id)\n }\n\n /** The last record seen for this sandbox (call `refresh()` to update). */\n get info(): SandboxInfo { return this._info }\n get id(): string { return this._info.id }\n get state(): SandboxState { return this._info.state }\n get templateId(): string | undefined { return this._info.templateId ?? this._info.template_id }\n get region(): string | undefined { return this._info.region }\n get metadata(): Record<string, string> { return this._info.metadata ?? {} }\n get versions(): SandboxVersion[] { return this._info.versions ?? [] }\n get createdAt(): string | undefined { return this._info.createdAt ?? this._info.created_at }\n get frozenAt(): string | undefined { return this._info.frozenAt }\n get timeoutAt(): string | undefined { return this._info.timeoutAt }\n /** Token to reach a sandbox created with `allowPublicTraffic: false` (create response only). */\n get trafficAccessToken(): string | undefined { return this._info.trafficAccessToken }\n\n /** Public URL of a port inside the sandbox. */\n portUrl(port: number): string {\n const tpl = this._info.portUrl\n if (!tpl) throw new SbBoxError({ status: 0, message: `sandbox ${this.id} has no portUrl` })\n return tpl.replace('{port}', String(port))\n }\n\n private p(suffix = '') { return `/sandboxes/${encodeURIComponent(this.id)}${suffix}` }\n\n private update(info: SandboxInfo): this {\n this._info = { ...this._info, ...info }\n return this\n }\n\n async refresh(): Promise<this> {\n return this.update(await this.http.request<SandboxInfo>(this.p(), { retry: true }))\n }\n\n async kill(): Promise<void> {\n await this.http.request(this.p(), { method: 'DELETE', retry: true })\n }\n\n /** Freeze. The server may answer 202 (still freezing); with `wait` (default) we poll until `frozen`. */\n async freeze(opts: { wait?: boolean } & WaitOptions = {}): Promise<this> {\n const r = await this.http.request<SandboxInfo & { status?: string }>(this.p('/freeze'), { method: 'POST', retry: true, timeout: 120 })\n if (r.id) this.update(r)\n else if (r.state) this._info = { ...this._info, state: r.state }\n if (opts.wait === false || this.state === 'frozen') return this\n return this.waitForState('frozen', { timeout: opts.timeout ?? 90, interval: opts.interval ?? 2 })\n }\n\n async waitForState(target: SandboxState | SandboxState[], opts: WaitOptions = {}): Promise<this> {\n const targets = Array.isArray(target) ? target : [target]\n const deadline = Date.now() + (opts.timeout ?? 90) * 1000\n const interval = (opts.interval ?? 2) * 1000\n while (true) {\n await this.refresh()\n if (targets.includes(this.state)) return this\n if (Date.now() + interval > deadline) {\n throw new WaitTimeoutError(`sandbox ${this.id} is ${this.state}, not ${targets.join('/')}, after ${opts.timeout ?? 90}s`)\n }\n await new Promise((r) => setTimeout(r, interval))\n }\n }\n\n async resume(opts: { timeout?: number } = {}): Promise<this> {\n const json: Record<string, unknown> = {}\n if (opts.timeout !== undefined) json.timeout = opts.timeout\n return this.update(await this.http.request<SandboxInfo>(this.p('/resume'), { method: 'POST', json, retry: true, timeout: 120 }))\n }\n\n async rollback(opts: { version?: number; timeout?: number } = {}): Promise<this> {\n const json: Record<string, unknown> = { version: opts.version ?? 0 }\n if (opts.timeout !== undefined) json.timeout = opts.timeout\n return this.update(await this.http.request<SandboxInfo>(this.p('/rollback'), { method: 'POST', json, timeout: 120 }))\n }\n\n /** Clone into a new sandbox owned by the caller. Retries on 503 + Retry-After until `timeout` (s). */\n async clone(opts: { version?: number; metadata?: Record<string, string>; timeout?: number } = {}): Promise<Sandbox> {\n const json: Record<string, unknown> = { version: opts.version ?? 0 }\n const md = ensureStringMap('metadata', opts.metadata)\n if (md) json.metadata = md\n const total = opts.timeout ?? 120\n const info = await this.http.request<SandboxInfo>(this.p('/clone'), {\n method: 'POST', json, timeout: 120, retryOn503Until: Date.now() + total * 1000,\n })\n return new Sandbox(this.http, info)\n }\n\n /** Set the lifetime deadline in seconds from now; 0 clears it. */\n async setTimeout(seconds: number): Promise<void> {\n await this.http.request(this.p('/timeout'), { method: 'POST', json: { timeout: seconds }, retry: true })\n }\n\n async reset(opts: { timeout?: number } = {}): Promise<this> {\n const total = opts.timeout ?? 120\n return this.update(await this.http.request<SandboxInfo>(this.p('/reset'), {\n method: 'POST', timeout: 120, retryOn503Until: Date.now() + total * 1000,\n }))\n }\n\n async metrics(opts: { start?: number; end?: number } = {}): Promise<MetricPoint[]> {\n return this.http.request<MetricPoint[]>(this.p('/metrics'), { query: { start: opts.start, end: opts.end }, retry: true })\n }\n\n async grant(userId: string, opts: GrantOptions = {}): Promise<Grant> {\n const json: Record<string, unknown> = { perm: opts.perm ?? 'read' }\n if (opts.expiresAt) json.expires_at = opts.expiresAt\n if (opts.reason) json.reason = opts.reason\n return this.http.request<Grant>(this.p(`/grants/${encodeURIComponent(userId)}`), { method: 'PUT', json })\n }\n\n async grants(): Promise<Grant[]> {\n return this.http.request<Grant[]>(this.p('/grants'), { retry: true })\n }\n\n async revoke(userId: string): Promise<void> {\n await this.http.request(this.p(`/grants/${encodeURIComponent(userId)}`), { method: 'DELETE' })\n }\n\n /** Run a command and wait for it. A non-zero exit is returned, not thrown. */\n async exec(command: string | string[], opts: ExecOptions = {}): Promise<CommandResult> {\n const body = execBody(command, opts, true, 600)\n return this.http.request<CommandResult>(this.p('/exec'), {\n method: 'POST', json: body, timeout: (body.timeout as number) + 30,\n })\n }\n\n /** Run a command and stream its output as it is produced. */\n async *execStream(command: string | string[], opts: ExecOptions = {}): AsyncGenerator<ExecEvent> {\n const body = execBody(command, opts, true, 600)\n const res = await this.http.raw(this.p('/sse/exec'), {\n method: 'POST', json: body, headers: { Accept: 'text/event-stream' }, timeout: (body.timeout as number) + 30,\n })\n yield* execEvents(res)\n }\n\n /** Execute code in the sandbox's stateful interpreter. */\n async runCode(code: string, opts: RunCodeOptions = {}): Promise<CodeResult> {\n const timeout = opts.timeout ?? 60\n if (timeout > 540) throw new RangeError('runCode timeout must be <= 540 seconds')\n const json: Record<string, unknown> = { code, language: opts.language ?? 'python', timeout }\n if (opts.contextId) json.contextId = opts.contextId\n const env = ensureStringMap('envVars', opts.envVars)\n if (env) json.envVars = env\n if (opts.images) json.images = opts.images\n return this.http.request<CodeResult>(this.p('/run-code'), { method: 'POST', json, timeout: timeout + 30 })\n }\n}\n","import { TemplateBuildError, WaitTimeoutError } from './errors.js'\nimport type { Http } from './http.js'\nimport type { Grant, GrantOptions, Template, TemplateBuild, TemplateBuildOptions, WaitOptions } from './types.js'\n\nexport class Templates {\n constructor(private readonly http: Http) {}\n\n /** Start a build. Async: poll `get()` or use `waitReady()`. */\n async build(opts: TemplateBuildOptions): Promise<TemplateBuild> {\n if (!opts.image && !opts.dockerfile) throw new TypeError('templates.build: image or dockerfile is required')\n const body: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(opts)) if (v !== undefined) body[k] = v\n return this.http.request<TemplateBuild>('/templates/build', { method: 'POST', json: body, timeout: 120 })\n }\n\n /** Poll until the template is `ready`; throws `TemplateBuildError` on `error`. */\n async waitReady(templateId: string, opts: WaitOptions = {}): Promise<Template> {\n const timeout = (opts.timeout ?? 600) * 1000\n const interval = (opts.interval ?? 5) * 1000\n const deadline = Date.now() + timeout\n while (true) {\n const t = await this.get(templateId)\n if (t.status === 'ready') return t\n if (t.status === 'error') throw new TemplateBuildError(templateId, t.buildError, t)\n if (Date.now() + interval > deadline) {\n throw new WaitTimeoutError(`template ${templateId} still ${t.status} after ${timeout / 1000}s`)\n }\n await new Promise((r) => setTimeout(r, interval))\n }\n }\n\n async list(): Promise<Template[]> {\n const r = await this.http.request<{ templates: Template[] }>('/templates', { retry: true })\n return r.templates ?? []\n }\n\n async shared(): Promise<Template[]> {\n return this.http.request<Template[]>('/templates/shared', { retry: true })\n }\n\n async get(templateId: string): Promise<Template> {\n return this.http.request<Template>(`/templates/${encodeURIComponent(templateId)}`, { retry: true })\n }\n\n async delete(templateId: string): Promise<void> {\n await this.http.request(`/templates/${encodeURIComponent(templateId)}`, { method: 'DELETE' })\n }\n\n async grant(templateId: string, userId: string, opts: GrantOptions = {}): Promise<Grant> {\n const json: Record<string, unknown> = { perm: opts.perm ?? 'read' }\n if (opts.expiresAt) json.expires_at = opts.expiresAt\n if (opts.reason) json.reason = opts.reason\n return this.http.request<Grant>(\n `/templates/${encodeURIComponent(templateId)}/grants/${encodeURIComponent(userId)}`,\n { method: 'PUT', json },\n )\n }\n\n async grants(templateId: string): Promise<Grant[]> {\n return this.http.request<Grant[]>(`/templates/${encodeURIComponent(templateId)}/grants`, { retry: true })\n }\n\n async revoke(templateId: string, userId: string): Promise<void> {\n await this.http.request(\n `/templates/${encodeURIComponent(templateId)}/grants/${encodeURIComponent(userId)}`,\n { method: 'DELETE' },\n )\n }\n}\n","import { SbBoxError } from './errors.js'\nimport { DEFAULT_BASE_URL, ensureStringMap, Http, SDK_VERSION } from './http.js'\nimport { Sandbox } from './sandbox.js'\nimport { Templates } from './templates.js'\nimport type {\n CreateSandboxOptions, Grant, GrantOptions, Limits, ListState, MetricPoint, Regions, SandboxInfo,\n SandboxSummary, Usage, WaitOptions,\n} from './types.js'\n\nexport interface SbBoxOptions {\n /** API key. Falls back to `SBBOX_API_KEY`, then `GSK_API_KEY`. */\n apiKey?: string\n /** Falls back to `SBBOX_BASE_URL`, then the production API. */\n baseUrl?: string\n /** Default request timeout in seconds (60). */\n timeout?: number\n /** Retries after the first attempt for reads and idempotent lifecycle calls (3). Set 0 to disable. */\n retries?: number\n /** Appended to the User-Agent, e.g. your app name. */\n userAgentSuffix?: string\n /** Custom fetch (tests, proxies). */\n fetch?: typeof fetch\n}\n\nfunction env(name: string): string | undefined {\n const p = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n return p?.env?.[name]\n}\n\nexport class Sandboxes {\n constructor(private readonly http: Http) {}\n\n async create(opts: CreateSandboxOptions = {}): Promise<Sandbox> {\n const json: Record<string, unknown> = {}\n if (opts.templateId) json.templateId = opts.templateId\n else json.templateName = opts.template ?? 'base'\n if (opts.timeout !== undefined) json.timeout = opts.timeout\n if (opts.onTimeout) json.lifecycle = { onTimeout: opts.onTimeout }\n const md = ensureStringMap('metadata', opts.metadata)\n if (md) json.metadata = md\n const ev = ensureStringMap('envVars', opts.envVars)\n if (ev) json.envVars = ev\n if (opts.network) json.network = opts.network\n const info = await this.http.request<SandboxInfo>('/sandboxes', { method: 'POST', json, timeout: 120 })\n return new Sandbox(this.http, info)\n }\n\n /** Compact rows. `state` filters (one or many); omitted = every live state. */\n async list(state?: ListState | ListState[]): Promise<SandboxSummary[]> {\n const s = state === undefined ? undefined : Array.isArray(state) ? state.join(',') : state\n const r = await this.http.request<{ sandboxes: SandboxSummary[] }>('/sandboxes', { query: { state: s }, retry: true })\n return r.sandboxes ?? []\n }\n\n async shared(): Promise<Sandbox[]> {\n const rows = await this.http.request<SandboxInfo[]>('/sandboxes/shared', { retry: true })\n return rows.map((r) => new Sandbox(this.http, r))\n }\n\n async get(sandboxId: string): Promise<Sandbox> {\n const info = await this.http.request<SandboxInfo>(`/sandboxes/${encodeURIComponent(sandboxId)}`, { retry: true })\n return new Sandbox(this.http, info)\n }\n\n /** Alias of `get()`. */\n connect(sandboxId: string): Promise<Sandbox> { return this.get(sandboxId) }\n\n private handle(id: string): Sandbox {\n return new Sandbox(this.http, { id, state: 'unknown' })\n }\n\n async kill(sandboxId: string): Promise<void> { return this.handle(sandboxId).kill() }\n async freeze(sandboxId: string, opts: { wait?: boolean } & WaitOptions = {}): Promise<Sandbox> { return this.handle(sandboxId).freeze(opts) }\n async resume(sandboxId: string, opts: { timeout?: number } = {}): Promise<Sandbox> { return this.handle(sandboxId).resume(opts) }\n async rollback(sandboxId: string, opts: { version?: number; timeout?: number } = {}): Promise<Sandbox> { return this.handle(sandboxId).rollback(opts) }\n async clone(sandboxId: string, opts: { version?: number; metadata?: Record<string, string>; timeout?: number } = {}): Promise<Sandbox> { return this.handle(sandboxId).clone(opts) }\n async setTimeout(sandboxId: string, seconds: number): Promise<void> { return this.handle(sandboxId).setTimeout(seconds) }\n async reset(sandboxId: string, opts: { timeout?: number } = {}): Promise<Sandbox> { return this.handle(sandboxId).reset(opts) }\n async metrics(sandboxId: string, opts: { start?: number; end?: number } = {}): Promise<MetricPoint[]> { return this.handle(sandboxId).metrics(opts) }\n async grant(sandboxId: string, userId: string, opts: GrantOptions = {}): Promise<Grant> { return this.handle(sandboxId).grant(userId, opts) }\n async grants(sandboxId: string): Promise<Grant[]> { return this.handle(sandboxId).grants() }\n async revoke(sandboxId: string, userId: string): Promise<void> { return this.handle(sandboxId).revoke(userId) }\n}\n\n/** Entry point: `const sbbox = new SbBox({ apiKey })`. */\nexport class SbBox {\n readonly templates: Templates\n readonly sandboxes: Sandboxes\n readonly baseUrl: string\n private readonly http: Http\n\n constructor(opts: SbBoxOptions = {}) {\n const apiKey = opts.apiKey ?? env('SBBOX_API_KEY') ?? env('GSK_API_KEY')\n if (!apiKey) {\n throw new SbBoxError({ status: 0, message: 'SB-Box API key missing: pass { apiKey } or set SBBOX_API_KEY (or GSK_API_KEY)' })\n }\n const f = opts.fetch ?? globalThis.fetch\n if (typeof f !== 'function') {\n throw new SbBoxError({ status: 0, message: 'global fetch is not available: use Node 18+ or pass { fetch }' })\n }\n this.baseUrl = (opts.baseUrl ?? env('SBBOX_BASE_URL') ?? DEFAULT_BASE_URL).replace(/\\/+$/, '')\n const ua = `sbbox-typescript-sdk/${SDK_VERSION} (+https://www.genspark.ai/sb-box/docs)` + (opts.userAgentSuffix ? ` ${opts.userAgentSuffix}` : '')\n this.http = new Http({\n apiKey, baseUrl: this.baseUrl, timeout: opts.timeout ?? 60, retries: opts.retries ?? 3, userAgent: ua, fetch: f,\n })\n this.templates = new Templates(this.http)\n this.sandboxes = new Sandboxes(this.http)\n }\n\n regions(): Promise<Regions> {\n return this.http.request<Regions>('/regions', { retry: true })\n }\n\n limits(): Promise<Limits> {\n return this.http.request<Limits>('/limits', { retry: true })\n }\n\n usage(days = 30): Promise<Usage> {\n return this.http.request<Usage>('/usage', { query: { days }, retry: true })\n }\n}\n"],"mappings":"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","names":["code","m","value","env"]}
|