From 696996a50796d363acaeed8dbd84423fe813e4c0 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Thu, 18 Jun 2026 18:56:49 +0800 Subject: [PATCH 01/16] Add LiveAvatar sandbox gateway --- .env.example | 87 +++ .gitignore | 2 + README.md | 52 ++ docs/liveavatar-sandbox-gateway-flow.svg | 82 +++ docs/liveavatar-sandbox-gateway-flow@3x.png | Bin 0 -> 369332 bytes package.json | 2 + scripts/liveavatar-mode.mjs | 20 + scripts/start-liveavatar.mjs | 22 + scripts/start-sandbox-gateway.sh | 16 + server/sandbox-gateway/broker-client.mjs | 389 ++++++++++ server/sandbox-gateway/config.mjs | 89 +++ .../sandbox-gateway/local-target-client.mjs | 58 ++ server/sandbox-gateway/server.mjs | 680 ++++++++++++++++++ server/sandbox-gateway/session-store.mjs | 214 ++++++ server/sandbox-gateway/signature-auth.mjs | 169 +++++ server/sandbox-gateway/warm-pool.mjs | 260 +++++++ tests/liveavatar-mode.test.mjs | 17 + tests/sandbox-gateway-broker-client.test.mjs | 162 +++++ tests/sandbox-gateway-config.test.mjs | 21 + tests/sandbox-gateway-proxy.test.mjs | 103 +++ tests/sandbox-gateway-session-store.test.mjs | 137 ++++ tests/sandbox-gateway-signature-auth.test.mjs | 140 ++++ tests/sandbox-gateway-warm-pool.test.mjs | 127 ++++ 23 files changed, 2849 insertions(+) create mode 100644 docs/liveavatar-sandbox-gateway-flow.svg create mode 100644 docs/liveavatar-sandbox-gateway-flow@3x.png create mode 100644 scripts/liveavatar-mode.mjs create mode 100644 scripts/start-liveavatar.mjs create mode 100644 scripts/start-sandbox-gateway.sh create mode 100644 server/sandbox-gateway/broker-client.mjs create mode 100644 server/sandbox-gateway/config.mjs create mode 100644 server/sandbox-gateway/local-target-client.mjs create mode 100644 server/sandbox-gateway/server.mjs create mode 100644 server/sandbox-gateway/session-store.mjs create mode 100644 server/sandbox-gateway/signature-auth.mjs create mode 100644 server/sandbox-gateway/warm-pool.mjs create mode 100644 tests/liveavatar-mode.test.mjs create mode 100644 tests/sandbox-gateway-broker-client.test.mjs create mode 100644 tests/sandbox-gateway-config.test.mjs create mode 100644 tests/sandbox-gateway-proxy.test.mjs create mode 100644 tests/sandbox-gateway-session-store.test.mjs create mode 100644 tests/sandbox-gateway-signature-auth.test.mjs create mode 100644 tests/sandbox-gateway-warm-pool.test.mjs diff --git a/.env.example b/.env.example index a12b24e7b..7fda48909 100644 --- a/.env.example +++ b/.env.example @@ -8,3 +8,90 @@ # Only create `agent-starter-react/.env.local` for standalone frontend # development where this repository is launched directly with `pnpm dev`. # In that case, define only the variables needed for that standalone run. + +# Sandbox Gateway server-only example: +# Put real deployment values in `.env.sandbox-gateway`; do not expose broker +# credentials with NEXT_PUBLIC_ variables. +# +# Only gateway mode switch: +# 0 = run the normal frontend app +# 1 = start the LiveAvatar Sandbox Gateway +LIVEAVATAR_USE_SANDBOX=0 + +# Gateway runtime provider: +# sandbox = create real sandbox instances through Sandbox Broker +# local = proxy to LIVEAVATAR_LOCAL_PROXY_BASE_URL for local smoke tests +LIVEAVATAR_PROVIDER=sandbox + +# Gateway listen port. PORT is read first by the gateway runtime. +PORT=18090 +LIVEAVATAR_GATEWAY_PORT=18090 + +# Gateway URL token lifetime and active-session limit. +LIVEAVATAR_MAX_ACTIVE_SESSIONS=5 +LIVEAVATAR_TOKEN_TTL_SECONDS=3600 +LIVEAVATAR_STATE_FILE=./.sandbox-gateway/sessions.json + +# Optional warm pool: +# 0 = disabled; every request cold-creates a sandbox +# N = keep up to N ready idle sandboxes, bounded by LIVEAVATAR_MAX_ACTIVE_SESSIONS +# Pooled sandboxes request SANDBOX_TTL_SECONDS + LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS +# so a sandbox can sit idle briefly without stealing user session lifetime. +LIVEAVATAR_WARM_POOL_SIZE=0 +LIVEAVATAR_WARM_POOL_REFILL_INTERVAL_SECONDS=10 +LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS=300 +# 1 = during pool refill, request the sandbox home page and read the full body. +# This exposes startup timing in logs and warms caches only if the sandbox app caches it. +LIVEAVATAR_WARM_POOL_WARMUP_FULL_BODY=1 + +# Gateway create-session authentication: +# none = allow direct browser GET / to create a sandbox +# signature = require Ed25519 signed POST /__gateway/sessions +LIVEAVATAR_GATEWAY_AUTH=none +LIVEAVATAR_SIGNATURE_MAX_SKEW_SECONDS=300 +LIVEAVATAR_SIGNATURE_NONCE_TTL_SECONDS=300 +LIVEAVATAR_SIGNATURE_CLIENTS=client_001: + +# Local provider settings, used only when LIVEAVATAR_PROVIDER=local. +LIVEAVATAR_LOCAL_PROXY_BASE_URL=http://127.0.0.1:4003/ +LIVEAVATAR_LOCAL_READY_TIMEOUT_SECONDS=10 + +# Sandbox Broker endpoint and credentials. SANDBOX_BROKER_TOKEN is a server secret. +SANDBOX_BROKER_URL=https://sandbox.local.lexmount.net/api +SANDBOX_BROKER_TOKEN= +SANDBOX_TEMPLATE_ID=tpl-c2dcb6402fed4df09accca18 +SANDBOX_TENANT_ID=lexmount + +# Broker-side sandbox instance lifetime and exposed ports. +SANDBOX_TTL_SECONDS=3600 +SANDBOX_UI_PORT=4003 +SANDBOX_HEALTH_PORT=49999 +SANDBOX_EXTRA_PORTS=8013 +SANDBOX_READY_TIMEOUT_SECONDS=90 +SANDBOX_PROXY_BASE_TEMPLATE=https://sandbox.local.lexmount.net/api/v1/sandboxes/{sandbox_id}/proxy/{port}/ + +# Values with SANDBOX_ENV_ are passed into the created sandbox runtime with the prefix removed. +SANDBOX_ENV_INPUT_SOURCE=browser +SANDBOX_ENV_NEXT_PUBLIC_INPUT_SOURCE=browser +SANDBOX_ENV_AGENT_NAME=lexvoice-browser-agent +SANDBOX_ENV_ROOM_INPUT_URL=http://127.0.0.1:8013/start +SANDBOX_ENV_ROOM_INPUT_HOST=0.0.0.0 +SANDBOX_ENV_ROOM_INPUT_PORT=8013 +SANDBOX_ENV_AVATAR_TYPE=NONE +SANDBOX_ENV_MODEL_TYPE=QWEN_REALTIME +SANDBOX_ENV_PUBLISH_VOICE=1 +SANDBOX_ENV_LEXVOICE_RUN_SYSTEMD=1 +SANDBOX_ENV_LEXVOICE_ATTACH_TMUX=0 +SANDBOX_ENV_LEXVOICE_UI_URL=https://liveavatar.local.lexmount.net +SANDBOX_ENV_APP_CONFIG_ENDPOINT=http://:18090/__gateway/app-config +SANDBOX_ENV_NEXT_PUBLIC_APP_CONFIG_ENDPOINT=http://:18090/__gateway/app-config +SANDBOX_ENV_SANDBOX_ID=liveavatar-gateway +SANDBOX_ENV_LEXVOICE_UI_HOST=0.0.0.0 +SANDBOX_ENV_LEXVOICE_UI_PORT=4003 +SANDBOX_ENV_LIVEKIT_URL=wss://livekit.local.lexmount.net +SANDBOX_ENV_LIVEKIT_API_KEY= +SANDBOX_ENV_LIVEKIT_API_SECRET= +SANDBOX_ENV_QWEN_REALTIME_API_KEY= +SANDBOX_ENV_QWEN_REALTIME_MODEL=qwen3.5-omni-plus-realtime +SANDBOX_ENV_QWEN_REALTIME_BASE_URL=wss://dashscope.aliyuncs.com/api-ws/v1/realtime +SANDBOX_ENV_QWEN_REALTIME_VOICE=Serena diff --git a/.gitignore b/.gitignore index 122bf192a..d7de6aafb 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,8 @@ # testing /coverage +/logs/ +/.sandbox-gateway/ # next.js /.next/ diff --git a/README.md b/README.md index 3cadc5a13..8f18417b2 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,58 @@ If you replace the custom connection details endpoint, it must echo the requeste `sessionId` and derive the same room name so dispatch and stop calls coordinate with the connected room. +### Sandbox Gateway Mode + +![LiveAvatar Sandbox Gateway Flow](docs/liveavatar-sandbox-gateway-flow.svg) + +For deployments that should allocate an isolated sandbox per browser session, run +the server-only gateway entry from this frontend repository: + +```bash +pnpm sandbox-gateway +``` + +The gateway listens on `LIVEAVATAR_GATEWAY_PORT` (default `18090`). A request to +`/` creates a sandbox session and redirects to `/{slug}?token=...`. The gateway +validates that URL token for session-prefixed requests. For browser requests to +absolute app paths such as `/_next/*` or `/api/*`, the gateway recovers the +session from the same-origin `Referer` URL; it does not write a cookie. + +Gateway secrets stay in server environment variables, for example +`.env.sandbox-gateway`; do not prefix them with `NEXT_PUBLIC_`. Values prefixed +with `SANDBOX_ENV_` are forwarded to the sandbox runtime when it is created. + +Gateway logs are JSON lines written by the process stdout/stderr. The internal +ADP test launch redirects them to `logs/sandbox-gateway.log`. Sandbox lifecycle +events include `session.acquire.*`, `broker.create.*`, `broker.ready.*`, +`warm_pool.*`, `proxy.request.done`, and release events; timing fields use +milliseconds. + +Set `LIVEAVATAR_WARM_POOL_SIZE` to keep ready idle sandboxes. A request will +checkout a warm sandbox first and fall back to cold Broker creation when the pool +is empty. The pool is bounded by `LIVEAVATAR_MAX_ACTIVE_SESSIONS`, and pooled +sandboxes use `SANDBOX_TTL_SECONDS + LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS` so +short idle time does not reduce the user session lifetime. When +`LIVEAVATAR_WARM_POOL_WARMUP_FULL_BODY=1`, pool creation also reads the full +homepage response body. This records full startup timing and can warm app caches +when the sandbox runtime supports it; it does not remove per-request server +rendering latency from the sandbox app. + +When `LIVEAVATAR_GATEWAY_AUTH=signature`, sandbox creation must use a signed request: + +```text +POST /__gateway/sessions +X-Client-Id: client_001 +X-Timestamp: +X-Nonce: +X-Signature: +``` + +The caller signs the canonical request payload with its Ed25519 private key. The +gateway verifies it with the raw Ed25519 public key configured in +`LIVEAVATAR_SIGNATURE_CLIENTS`, then returns `{"url":"/{slug}?token=..."}` for +the browser to open. + For standalone frontend development, install dependencies and run the dev server directly: diff --git a/docs/liveavatar-sandbox-gateway-flow.svg b/docs/liveavatar-sandbox-gateway-flow.svg new file mode 100644 index 000000000..a3ba1831b --- /dev/null +++ b/docs/liveavatar-sandbox-gateway-flow.svg @@ -0,0 +1,82 @@ + + LiveAvatar Sandbox Gateway Flow + Browser-first sequence diagram for LiveAvatar sandbox gateway flow with URL token access and optional Ed25519 signature authorization. + + + + + + + + + + + + + + + LiveAvatar Sandbox Gateway Flow + + + 用户浏览器 / 域名 + 用户第一入口 + + + LiveAvatar Gateway + 创建、鉴权、代理 + + + 签名鉴权(可选) + Ed25519 verify + nonce + + + Sandbox Broker + + + Sandbox + + + + + + + + 1. 用户访问域名 / 18090 + + + 2. signature 模式:Gateway 校验签名、timestamp、nonce + + + 受控调用方 / ADP 持有私钥;Gateway 只保存客户端公钥 + + 3. Gateway 调 Broker 创建 sandbox + + + 4. Broker 启动实例 + + + 5. Gateway 返回 /xxx?token=... + + + 6. 浏览器访问专属链接(URL token) + + + 7. Gateway 校验 token / Referer 后反向代理应用请求 + + + 8. release / TTL 到期后,Gateway 调 Broker terminate + + diff --git a/docs/liveavatar-sandbox-gateway-flow@3x.png b/docs/liveavatar-sandbox-gateway-flow@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae596e0c40e6ef196157be3099054c69d4e06b35 GIT binary patch literal 369332 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�po|Qk{YvJ=bG6j1% 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

r<>fw^z6+S3MD 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 { + if (signal) { + process.kill(process.pid, signal); + return; + } + process.exit(code ?? 0); + }); +} diff --git a/scripts/start-sandbox-gateway.sh b/scripts/start-sandbox-gateway.sh new file mode 100644 index 000000000..6fc82f3d6 --- /dev/null +++ b/scripts/start-sandbox-gateway.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd "$(dirname "$0")/.." + +for env_file in .env .env.sandbox-gateway; do + if [[ -f "${env_file}" ]]; then + set -a + # shellcheck disable=SC1090 + source "${env_file}" + set +a + fi +done + +export LIVEAVATAR_USE_SANDBOX="${LIVEAVATAR_USE_SANDBOX:-1}" +exec node scripts/start-liveavatar.mjs diff --git a/server/sandbox-gateway/broker-client.mjs b/server/sandbox-gateway/broker-client.mjs new file mode 100644 index 000000000..bdd26c096 --- /dev/null +++ b/server/sandbox-gateway/broker-client.mjs @@ -0,0 +1,389 @@ +export class BrokerClient { + constructor({ + baseUrl, + token, + templateId = '', + tenantId = 'lexmount', + port = 4003, + healthPort = 49999, + extraPorts = [], + readyTimeoutMs = 90_000, + readyPollMs = 1_000, + proxyBaseTemplate = '', + env = {}, + fetchImpl = globalThis.fetch, + logger = () => undefined, + }) { + this.baseUrl = stripTrailingSlash(baseUrl); + this.token = token; + this.templateId = templateId; + this.tenantId = tenantId; + this.port = Number(port); + this.healthPort = Number(healthPort); + this.extraPorts = extraPorts.map(Number).filter((port) => Number.isFinite(port) && port > 0); + this.readyTimeoutMs = Number(readyTimeoutMs); + this.readyPollMs = Number(readyPollMs); + this.proxyBaseTemplate = proxyBaseTemplate; + this.env = { ...env }; + this.fetch = fetchImpl; + this.logger = logger; + } + + async createSandbox({ sessionId, ttlSeconds, warmupFullBody = false }) { + if (!this.templateId) { + throw new Error('SANDBOX_TEMPLATE_ID is required'); + } + const startedAt = Date.now(); + this.log('info', 'broker.create.start', { + sessionId, + templateId: this.templateId, + tenantId: this.tenantId, + ttlSeconds, + uiPort: this.port, + healthPort: this.healthPort, + }); + + const payload = { + template_id: this.templateId, + tenant_id: this.tenantId, + session_id: sessionId, + source: 'agent-starter-react-sandbox-gateway', + description: `liveavatar ${sessionId}`, + lifetime_sec: ttlSeconds, + ports: this.resolveRequestedPorts(), + allow_internet_access: true, + metadata: { + app: 'liveavatar', + gateway: 'agent-starter-react', + }, + }; + if (Object.keys(this.env).length > 0) { + payload.env_vars = this.env; + } + + const data = await this.createSandboxWithRecovery({ payload, sessionId }); + const acceptedAt = Date.now(); + const sandboxId = data.sandbox_id || data.sandboxId || data.id; + if (!sandboxId) { + throw new Error('broker did not return sandbox id'); + } + this.log('info', 'broker.create.accepted', { + sessionId, + sandboxId, + uiPort: this.port, + healthPort: this.healthPort, + durationMs: acceptedAt - startedAt, + }); + + const proxyBaseUrl = this.resolveProxyBaseUrl(data, sandboxId, this.port); + try { + const ready = await this.waitForSandboxReady(data, sandboxId, proxyBaseUrl, { + warmupFullBody, + }); + const readyAt = Date.now(); + this.log('info', 'broker.ready', { + sessionId, + sandboxId, + uiPort: this.port, + healthPort: this.healthPort, + durationMs: readyAt - startedAt, + readyDurationMs: readyAt - acceptedAt, + healthReadyMs: ready.health?.durationMs ?? null, + healthAttempts: ready.health?.attempts ?? null, + uiReadyMs: ready.ui.durationMs, + uiAttempts: ready.ui.attempts, + uiWarmupBodyMs: ready.ui.bodyMs ?? null, + uiWarmupBytes: ready.ui.bodyBytes ?? null, + }); + } catch (error) { + this.log('error', 'broker.ready.failed', { + sessionId, + sandboxId, + durationMs: Date.now() - startedAt, + message: error instanceof Error ? error.message : String(error), + }); + await this.releaseSandbox(sandboxId).catch(() => undefined); + throw error; + } + + return { sandboxId, proxyBaseUrl }; + } + + resolveRequestedPorts() { + const envRoomInputPort = Number(this.env.ROOM_INPUT_PORT); + return [ + ...new Set( + [this.port, this.healthPort, envRoomInputPort, ...this.extraPorts].filter( + (port) => Number.isFinite(port) && port > 0 + ) + ), + ]; + } + + async releaseSandbox(sandboxId) { + const encodedSandboxId = encodeURIComponent(sandboxId); + this.log('info', 'broker.release.start', { sandboxId }); + await this.request(`/v1/sandboxes/${encodedSandboxId}/terminate`, { + method: 'POST', + }); + this.log('info', 'broker.release.done', { sandboxId }); + } + + async createSandboxWithRecovery({ payload, sessionId }) { + const startedAt = Date.now(); + try { + const data = await this.request('/v1/sandboxes', { + method: 'POST', + body: JSON.stringify(payload), + }); + this.log('info', 'broker.create.post.done', { + sessionId, + durationMs: Date.now() - startedAt, + }); + return data; + } catch (error) { + if (error.code !== 'BROKER_FETCH_FAILED') { + throw error; + } + + this.log('error', 'broker.create.fetch_failed', { + sessionId, + durationMs: Date.now() - startedAt, + message: error.message, + cause: error.cause instanceof Error ? error.cause.message : '', + code: error.cause?.code || '', + }); + + await sleep(Math.min(this.readyPollMs, 1_000)); + const existing = await this.findSandboxBySessionId(sessionId).catch((lookupError) => { + this.log('error', 'broker.create.lookup_failed', { + sessionId, + message: lookupError instanceof Error ? lookupError.message : String(lookupError), + }); + return null; + }); + if (existing) { + this.log('info', 'broker.create.recovered', { + sessionId, + sandboxId: existing.sandbox_id || existing.sandboxId || existing.id, + }); + return existing; + } + + this.log('info', 'broker.create.retry', { sessionId }); + const retryStartedAt = Date.now(); + const data = await this.request('/v1/sandboxes', { + method: 'POST', + body: JSON.stringify(payload), + }); + this.log('info', 'broker.create.retry.done', { + sessionId, + durationMs: Date.now() - retryStartedAt, + }); + return data; + } + } + + async findSandboxBySessionId(sessionId) { + const data = await this.request('/v1/sandboxes', { method: 'GET' }); + const items = Array.isArray(data.data) ? data.data : Array.isArray(data) ? data : []; + return ( + items.find( + (item) => + (item.session_id === sessionId || item.sessionId === sessionId) && + !['terminated', 'failed'].includes(String(item.status || item.sandboxStatus || '')) + ) || null + ); + } + + log(level, event, details = {}) { + try { + this.logger(level, event, details); + } catch { + // Logging must never affect sandbox lifecycle operations. + } + } + + resolveProxyBaseUrl(data, sandboxId, port = this.port) { + const accessUrls = data.access_urls || data.accessUrls; + const direct = accessUrls?.[String(port)] || accessUrls?.[port]; + if (direct) { + return ensureTrailingSlash(direct); + } + + const endpoints = Array.isArray(data.endpoints) ? data.endpoints : []; + const endpoint = endpoints.find((item) => Number(item.port) === Number(port) && item.url); + if (endpoint?.url) { + return ensureTrailingSlash(endpoint.url); + } + + if (this.proxyBaseTemplate) { + return ensureTrailingSlash( + this.proxyBaseTemplate + .replaceAll('{sandbox_id}', sandboxId) + .replaceAll('{port}', String(port)) + ); + } + + throw new Error(`broker did not return proxy url for port ${port}`); + } + + async waitForSandboxReady(data, sandboxId, proxyBaseUrl, { warmupFullBody = false } = {}) { + const healthBaseUrl = tryResolveEndpointUrl(() => + this.resolveProxyBaseUrl(data, sandboxId, this.healthPort) + ); + const result = { + health: null, + ui: null, + }; + if (healthBaseUrl) { + const healthUrl = new URL('health', healthBaseUrl).toString(); + this.log('info', 'broker.ready.health.start', { + sandboxId, + healthPort: this.healthPort, + }); + result.health = await waitForHttpOk({ + url: healthUrl, + fetchImpl: this.fetch, + timeoutMs: this.readyTimeoutMs, + pollMs: this.readyPollMs, + }); + this.log('info', 'broker.ready.health.done', { + sandboxId, + healthPort: this.healthPort, + durationMs: result.health.durationMs, + attempts: result.health.attempts, + statusCode: result.health.statusCode, + }); + } + + this.log('info', 'broker.ready.ui.start', { + sandboxId, + uiPort: this.port, + }); + result.ui = await waitForHttpOk({ + url: proxyBaseUrl, + fetchImpl: this.fetch, + timeoutMs: this.readyTimeoutMs, + pollMs: this.readyPollMs, + consumeBody: warmupFullBody, + }); + this.log('info', 'broker.ready.ui.done', { + sandboxId, + uiPort: this.port, + durationMs: result.ui.durationMs, + attempts: result.ui.attempts, + statusCode: result.ui.statusCode, + bodyMs: result.ui.bodyMs ?? null, + bodyBytes: result.ui.bodyBytes ?? null, + consumeBody: warmupFullBody, + }); + return result; + } + + async request(path, init = {}) { + if (!this.baseUrl) { + throw new Error('SANDBOX_BROKER_URL is required'); + } + if (!this.token) { + throw new Error('SANDBOX_BROKER_TOKEN is required'); + } + + const method = init.method || 'GET'; + const startedAt = Date.now(); + let response; + try { + response = await this.fetch(`${this.baseUrl}${path}`, { + ...init, + headers: { + Authorization: `Bearer ${this.token}`, + 'Content-Type': 'application/json', + ...(init.headers || {}), + }, + }); + } catch (error) { + const wrapped = new Error( + `broker fetch failed: ${method} ${path}: ${ + error instanceof Error ? error.message : String(error) + }` + ); + wrapped.code = 'BROKER_FETCH_FAILED'; + wrapped.cause = error; + throw wrapped; + } + const bodyText = await response.text(); + this.log(response.ok ? 'info' : 'error', 'broker.request.done', { + method, + path, + statusCode: response.status, + durationMs: Date.now() - startedAt, + }); + if (!response.ok) { + const error = new Error(`broker request failed: ${response.status} ${bodyText}`); + error.status = response.status; + error.body = bodyText; + throw error; + } + if (response.status === 204 || !bodyText) { + return {}; + } + return JSON.parse(bodyText); + } +} + +async function waitForHttpOk({ url, fetchImpl, timeoutMs, pollMs, consumeBody = false }) { + const startedAt = Date.now(); + const deadline = Date.now() + timeoutMs; + let lastError = null; + let attempts = 0; + + while (Date.now() <= deadline) { + attempts += 1; + try { + const response = await fetchImpl(url, { redirect: 'manual' }); + if (response.ok || response.status === 302 || response.status === 307) { + let bodyMs = null; + let bodyBytes = null; + if (consumeBody && response.body) { + const bodyStartedAt = Date.now(); + const buffer = await response.arrayBuffer(); + bodyMs = Date.now() - bodyStartedAt; + bodyBytes = buffer.byteLength; + } + return { + attempts, + durationMs: Date.now() - startedAt, + statusCode: response.status, + bodyMs, + bodyBytes, + }; + } + lastError = new Error(`ready check ${url} returned ${response.status}`); + } catch (error) { + lastError = error; + } + await sleep(pollMs); + } + + throw lastError || new Error(`timed out waiting for ${url}`); +} + +function tryResolveEndpointUrl(fn) { + try { + return fn(); + } catch { + return ''; + } +} + +function ensureTrailingSlash(value) { + return String(value).endsWith('/') ? String(value) : `${value}/`; +} + +function stripTrailingSlash(value) { + return String(value || '').replace(/\/+$/, ''); +} + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} diff --git a/server/sandbox-gateway/config.mjs b/server/sandbox-gateway/config.mjs new file mode 100644 index 000000000..ea9bcb26f --- /dev/null +++ b/server/sandbox-gateway/config.mjs @@ -0,0 +1,89 @@ +export function readSandboxGatewayConfig(env = process.env) { + return { + port: readInt(env.PORT || env.LIVEAVATAR_GATEWAY_PORT, 18090), + provider: readString(env.LIVEAVATAR_PROVIDER, 'sandbox').toLowerCase(), + inviteCode: readString(env.LIVEAVATAR_INVITE_CODE), + tokenTtlMs: readInt(env.LIVEAVATAR_TOKEN_TTL_SECONDS, 3600) * 1000, + sandboxTtlSeconds: readInt(env.SANDBOX_TTL_SECONDS, 3600), + maxActiveSessions: readInt(env.LIVEAVATAR_MAX_ACTIVE_SESSIONS, 5), + warmPoolSize: readNonNegativeInt(env.LIVEAVATAR_WARM_POOL_SIZE, 0), + warmPoolRefillIntervalMs: readInt(env.LIVEAVATAR_WARM_POOL_REFILL_INTERVAL_SECONDS, 10) * 1000, + warmPoolMaxIdleSeconds: readInt(env.LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS, 300), + warmPoolWarmupFullBody: readBoolean(env.LIVEAVATAR_WARM_POOL_WARMUP_FULL_BODY, true), + stateFile: readString(env.LIVEAVATAR_STATE_FILE, './.sandbox-gateway/sessions.json'), + gatewayAuth: readString(env.LIVEAVATAR_GATEWAY_AUTH, 'none').toLowerCase(), + signatureClients: readString(env.LIVEAVATAR_SIGNATURE_CLIENTS), + signatureMaxSkewMs: readInt(env.LIVEAVATAR_SIGNATURE_MAX_SKEW_SECONDS, 300) * 1000, + signatureNonceTtlMs: readInt(env.LIVEAVATAR_SIGNATURE_NONCE_TTL_SECONDS, 300) * 1000, + brokerUrl: readString(env.SANDBOX_BROKER_URL), + brokerToken: readString(env.SANDBOX_BROKER_TOKEN), + sandboxTemplateId: readString(env.SANDBOX_TEMPLATE_ID), + sandboxTenantId: readString(env.SANDBOX_TENANT_ID, 'lexmount'), + sandboxPort: readInt(env.SANDBOX_UI_PORT, 4003), + sandboxHealthPort: readInt(env.SANDBOX_HEALTH_PORT, 49999), + sandboxExtraPorts: readPortList(env.SANDBOX_EXTRA_PORTS), + sandboxReadyTimeoutMs: readInt(env.SANDBOX_READY_TIMEOUT_SECONDS, 90) * 1000, + sandboxReadyPollMs: readInt(env.SANDBOX_READY_POLL_MS, 1000), + sandboxProxyBaseTemplate: readString( + env.SANDBOX_PROXY_BASE_TEMPLATE, + 'https://sandbox.local.lexmount.net/api/v1/sandboxes/{sandbox_id}/proxy/{port}/' + ), + sandboxEnv: readPrefixedEnv(env, 'SANDBOX_ENV_'), + localProxyBaseUrl: readString(env.LIVEAVATAR_LOCAL_PROXY_BASE_URL, 'http://127.0.0.1:4003/'), + localReadyTimeoutMs: readInt(env.LIVEAVATAR_LOCAL_READY_TIMEOUT_SECONDS, 10) * 1000, + localReadyPollMs: readInt(env.LIVEAVATAR_LOCAL_READY_POLL_MS, 500), + }; +} + +function readString(value, fallback = '') { + const normalized = String(value ?? '').trim(); + return normalized || fallback; +} + +function readInt(value, fallback) { + const parsed = Number.parseInt(String(value ?? ''), 10); + return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; +} + +function readNonNegativeInt(value, fallback) { + const parsed = Number.parseInt(String(value ?? ''), 10); + return Number.isFinite(parsed) && parsed >= 0 ? parsed : fallback; +} + +function readBoolean(value, fallback) { + const normalized = String(value ?? '') + .trim() + .toLowerCase(); + if (!normalized) { + return fallback; + } + if (['1', 'true', 'yes', 'on'].includes(normalized)) { + return true; + } + if (['0', 'false', 'no', 'off'].includes(normalized)) { + return false; + } + return fallback; +} + +function readPortList(value) { + return String(value ?? '') + .split(',') + .map((item) => Number.parseInt(item.trim(), 10)) + .filter((port) => Number.isFinite(port) && port > 0); +} + +function readPrefixedEnv(env, prefix) { + const values = {}; + for (const [key, value] of Object.entries(env)) { + if (!key.startsWith(prefix)) { + continue; + } + const targetKey = key.slice(prefix.length); + if (!targetKey || value == null || String(value).trim() === '') { + continue; + } + values[targetKey] = String(value); + } + return values; +} diff --git a/server/sandbox-gateway/local-target-client.mjs b/server/sandbox-gateway/local-target-client.mjs new file mode 100644 index 000000000..907fe11c8 --- /dev/null +++ b/server/sandbox-gateway/local-target-client.mjs @@ -0,0 +1,58 @@ +export class LocalTargetClient { + constructor({ + proxyBaseUrl = 'http://127.0.0.1:4003/', + readyTimeoutMs = 10_000, + readyPollMs = 500, + fetchImpl = globalThis.fetch, + } = {}) { + this.proxyBaseUrl = ensureTrailingSlash(proxyBaseUrl); + this.readyTimeoutMs = Number(readyTimeoutMs); + this.readyPollMs = Number(readyPollMs); + this.fetch = fetchImpl; + } + + async createSandbox({ sessionId }) { + await waitForHttpOk({ + url: this.proxyBaseUrl, + fetchImpl: this.fetch, + timeoutMs: this.readyTimeoutMs, + pollMs: this.readyPollMs, + }); + return { + sandboxId: `local-${sessionId}`, + proxyBaseUrl: this.proxyBaseUrl, + }; + } + + async releaseSandbox() { + return undefined; + } +} + +async function waitForHttpOk({ url, fetchImpl, timeoutMs, pollMs }) { + const deadline = Date.now() + timeoutMs; + let lastError = null; + + while (Date.now() <= deadline) { + try { + const response = await fetchImpl(url, { redirect: 'manual' }); + if (response.ok || response.status === 302 || response.status === 307) { + return; + } + lastError = new Error(`ready check ${url} returned ${response.status}`); + } catch (error) { + lastError = error; + } + await sleep(pollMs); + } + + throw lastError || new Error(`timed out waiting for ${url}`); +} + +function ensureTrailingSlash(value) { + return String(value).endsWith('/') ? String(value) : `${value}/`; +} + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} diff --git a/server/sandbox-gateway/server.mjs b/server/sandbox-gateway/server.mjs new file mode 100644 index 000000000..657e45c2b --- /dev/null +++ b/server/sandbox-gateway/server.mjs @@ -0,0 +1,680 @@ +import http from 'node:http'; +import { URL } from 'node:url'; +import { BrokerClient } from './broker-client.mjs'; +import { readSandboxGatewayConfig } from './config.mjs'; +import { LocalTargetClient } from './local-target-client.mjs'; +import { GatewayError, SessionStore } from './session-store.mjs'; +import { SignatureAuthenticator } from './signature-auth.mjs'; +import { WarmSandboxPool } from './warm-pool.mjs'; + +const HOP_BY_HOP_HEADERS = new Set([ + 'connection', + 'keep-alive', + 'proxy-authenticate', + 'proxy-authorization', + 'te', + 'trailer', + 'transfer-encoding', + 'upgrade', +]); +const BROWSER_INPUT_SOURCE = 'browser'; +const BROWSER_AGENT_NAME = 'lexvoice-browser-agent'; + +export function createServer({ config, store, signatureAuth = null, refillWarmPool = () => {} }) { + return http.createServer(async (req, res) => { + try { + await routeRequest({ req, res, config, store, signatureAuth, refillWarmPool }); + } catch (error) { + logGateway('error', 'request.failed', { + method: req.method || 'GET', + path: redactedRequestPath(req), + statusCode: error instanceof GatewayError ? error.statusCode : 500, + message: error instanceof Error ? error.message : String(error), + }); + sendError(res, error); + } + }); +} + +export async function routeRequest({ + req, + res, + config, + store, + signatureAuth = null, + refillWarmPool = () => {}, +}) { + const url = new URL(req.url || '/', 'http://gateway.local'); + const ip = clientIp(req); + const activeSessions = store.activeSessions(); + + if (url.pathname === '/_healthz') { + sendJson(res, 200, { + status: 'ok', + active: activeSessions.length, + max_active: config.maxActiveSessions, + warm_pool: + typeof store.warmPoolStats === 'function' + ? store.warmPoolStats() + : { + enabled: false, + target_size: 0, + configured_size: 0, + ready: 0, + warming: 0, + }, + }); + return; + } + + if (url.pathname === '/__gateway/app-config') { + if (req.method !== 'GET') { + throw new GatewayError('method not allowed', 405); + } + sendJson(res, 200, sandboxAppConfigOverrides()); + return; + } + + if (url.pathname === '/__gateway/sessions') { + if (req.method !== 'POST') { + throw new GatewayError('method not allowed', 405); + } + const body = await readJsonBody(req); + if (config.gatewayAuth === 'signature') { + if (!signatureAuth) { + throw new GatewayError('signature auth is not configured', 500); + } + const verified = signatureAuth.verify({ + headers: req.headers, + method: req.method, + path: url.pathname, + body, + }); + logGateway('info', 'signature.verify.done', { clientId: verified.clientId }); + } + const session = await acquireSession({ + store, + ip, + invite: String(body.invite || ''), + refillWarmPool, + }); + sendJson(res, 200, { + status: 'created', + url: `/${session.slug}?token=${encodeURIComponent(session.token)}`, + slug: session.slug, + expires_at: new Date(session.expiresAt).toISOString(), + }); + return; + } + + if (url.pathname === '/') { + if (config.gatewayAuth === 'signature') { + throw new GatewayError('signed session creation required', 401); + } + const session = await acquireSession({ + store, + ip, + invite: url.searchParams.get('invite') || '', + refillWarmPool, + }); + redirect(res, `/${session.slug}?token=${encodeURIComponent(session.token)}`); + return; + } + + const slug = firstPathSegment(url.pathname); + if (slug && url.pathname === `/${slug}/release`) { + const session = resolveRequestSession({ req, url, store, ip, expectedSlug: slug }); + if (req.method !== 'POST') { + sendReleasePage(res, session); + return; + } + logGateway('info', 'session.release.start', { slug }); + const released = await store.release({ + slug, + token: session.token, + ip, + }); + logGateway('info', 'session.release.done', { + slug, + sandboxId: released.sandboxId, + }); + sendJson(res, 200, { status: 'released', sandbox_id: released.sandboxId, slug }); + return; + } + + const active = resolveRequestSession({ req, url, store, ip }); + await proxyToSandbox({ req, res, url, session: active }); +} + +async function proxyToSandbox({ req, res, url, session }) { + const startedAt = Date.now(); + const target = buildProxyTarget({ + pathname: url.pathname, + search: url.search, + slug: session.slug, + proxyBaseUrl: session.proxyBaseUrl, + }); + const headers = new Headers(req.headers); + for (const header of HOP_BY_HOP_HEADERS) { + headers.delete(header); + } + headers.delete('host'); + headers.set('x-sandbox-id', session.sandboxId); + headers.set('x-liveavatar-session-slug', session.slug); + headers.set('x-liveavatar-session-id', session.sessionId); + + const init = { + method: req.method, + headers, + redirect: 'manual', + }; + if (!['GET', 'HEAD'].includes(req.method || 'GET')) { + init.body = req; + init.duplex = 'half'; + } + + const response = await fetch(target, init); + if (shouldRewriteSandboxAppConfig(response)) { + const body = await response.text(); + writeResponseHeaders(res, response, { rewritten: true }); + res.end(rewriteSandboxAppConfig(body, session)); + logGateway('info', 'proxy.request.done', { + method: req.method || 'GET', + path: url.pathname, + slug: session.slug, + sandboxId: session.sandboxId, + statusCode: response.status, + durationMs: Date.now() - startedAt, + rewritten: true, + }); + return; + } + + res.statusCode = response.status; + writeResponseHeaders(res, response); + if (!response.body) { + res.end(); + logGateway('info', 'proxy.request.done', { + method: req.method || 'GET', + path: url.pathname, + slug: session.slug, + sandboxId: session.sandboxId, + statusCode: response.status, + durationMs: Date.now() - startedAt, + rewritten: false, + }); + return; + } + for await (const chunk of response.body) { + res.write(chunk); + } + res.end(); + logGateway('info', 'proxy.request.done', { + method: req.method || 'GET', + path: url.pathname, + slug: session.slug, + sandboxId: session.sandboxId, + statusCode: response.status, + durationMs: Date.now() - startedAt, + rewritten: false, + }); +} + +function writeResponseHeaders(res, response, { rewritten = false } = {}) { + res.statusCode = response.status; + response.headers.forEach((value, key) => { + const normalized = key.toLowerCase(); + if (HOP_BY_HOP_HEADERS.has(normalized)) { + return; + } + if (rewritten && ['content-encoding', 'content-length', 'etag'].includes(normalized)) { + return; + } + res.setHeader(key, value); + }); +} + +function shouldRewriteSandboxAppConfig(response) { + const contentType = response.headers.get('content-type') || ''; + return contentType.includes('text/html') || contentType.includes('text/x-component'); +} + +export function rewriteSandboxAppConfig(body, session) { + const sandboxId = escapeJsonString(session.sandboxId); + const agentName = escapeJsonString(BROWSER_AGENT_NAME); + return String(body) + .replaceAll('\\"sandboxId\\":\\"$undefined\\"', `\\"sandboxId\\":\\"${sandboxId}\\"`) + .replaceAll('"sandboxId":"$undefined"', `"sandboxId":"${sandboxId}"`) + .replaceAll('\\"sandboxId\\":null', `\\"sandboxId\\":\\"${sandboxId}\\"`) + .replaceAll('"sandboxId":null', `"sandboxId":"${sandboxId}"`) + .replace(/\\"agentName\\":\\"[^"\\]*\\"/g, `\\"agentName\\":\\"${agentName}\\"`) + .replace(/"agentName":"[^"]*"/g, `"agentName":"${agentName}"`); +} + +export function buildProxyTarget({ pathname, search, slug, proxyBaseUrl }) { + const targetPath = stripSessionPrefix(pathname, slug).replace(/^\/+/, ''); + const relativePath = targetPath || ''; + return new URL(`${relativePath}${gatewaySearchRemoved(search)}`, proxyBaseUrl).toString(); +} + +export function sandboxAppConfigOverrides() { + return { + inputSource: { + type: 'string', + value: BROWSER_INPUT_SOURCE, + }, + audioInputDevice: { + type: 'string', + value: BROWSER_INPUT_SOURCE, + }, + visionInputDevice: { + type: 'string', + value: BROWSER_INPUT_SOURCE, + }, + outputDevice: { + type: 'string', + value: BROWSER_INPUT_SOURCE, + }, + usesBrowserRawMediaInput: { + type: 'boolean', + value: true, + }, + usesBrowserRawAudioInput: { + type: 'boolean', + value: true, + }, + usesBrowserRawVideoInput: { + type: 'boolean', + value: true, + }, + usesServerRoomInput: { + type: 'boolean', + value: false, + }, + supportsScreenShare: { + type: 'boolean', + value: false, + }, + showDefaultCameraPreview: { + type: 'boolean', + value: false, + }, + agentName: { + type: 'string', + value: BROWSER_AGENT_NAME, + }, + }; +} + +export function startSandboxGateway(config = readSandboxGatewayConfig()) { + const provider = createProvider(config); + const signatureAuth = createSignatureAuth(config); + const warmPool = + config.warmPoolSize > 0 + ? new WarmSandboxPool({ + broker: provider, + targetSize: config.warmPoolSize, + maxActiveSessions: config.maxActiveSessions, + sandboxTtlSeconds: config.sandboxTtlSeconds, + maxIdleSeconds: config.warmPoolMaxIdleSeconds, + warmupFullBody: config.warmPoolWarmupFullBody, + logger: logGateway, + }) + : null; + const store = new SessionStore({ + broker: provider, + warmPool, + inviteCode: config.inviteCode, + maxActiveSessions: config.maxActiveSessions, + tokenTtlMs: config.tokenTtlMs, + sandboxTtlSeconds: config.sandboxTtlSeconds, + stateFile: config.stateFile, + }); + const releaseInterval = setInterval(() => { + store.releaseExpired().catch((error) => { + logGateway('error', 'session.release_expired.failed', { + message: error instanceof Error ? error.message : String(error), + }); + }); + }, 60_000).unref(); + + const refillWarmPool = (trigger = 'manual') => { + if (!warmPool) { + return; + } + warmPool + .maintain({ + activeCount: store.activeSessions().length, + trigger, + }) + .catch((error) => { + logGateway('error', 'warm_pool.maintain.failed', { + trigger, + message: error instanceof Error ? error.message : String(error), + }); + }); + }; + + const warmPoolInterval = + warmPool && config.warmPoolRefillIntervalMs > 0 + ? setInterval(() => refillWarmPool('interval'), config.warmPoolRefillIntervalMs) + : null; + warmPoolInterval?.unref(); + + const server = createServer({ config, store, signatureAuth, refillWarmPool }); + let cleanupPromise = null; + const cleanupGateway = () => { + cleanupPromise ??= (async () => { + clearInterval(releaseInterval); + if (warmPoolInterval) { + clearInterval(warmPoolInterval); + } + if (warmPool) { + await warmPool.stop({ releaseIdle: true }); + } + })(); + return cleanupPromise; + }; + server.on('close', () => { + cleanupGateway().catch((error) => { + logGateway('error', 'gateway.cleanup.failed', { + message: error instanceof Error ? error.message : String(error), + }); + }); + }); + server.listen(config.port, '0.0.0.0', () => { + logGateway('info', 'gateway.listen', { + host: '0.0.0.0', + port: config.port, + provider: config.provider, + gatewayAuth: config.gatewayAuth, + maxActiveSessions: config.maxActiveSessions, + warmPoolSize: config.warmPoolSize, + warmPoolMaxIdleSeconds: config.warmPoolMaxIdleSeconds, + warmPoolWarmupFullBody: config.warmPoolWarmupFullBody, + }); + refillWarmPool('startup'); + }); + installShutdownHandlers(server, cleanupGateway); + return server; +} + +function installShutdownHandlers(server, cleanupGateway) { + let shuttingDown = false; + const shutdown = (signal) => { + if (shuttingDown) { + return; + } + shuttingDown = true; + logGateway('info', 'gateway.shutdown.start', { signal }); + server.close(async (error) => { + try { + await cleanupGateway(); + } catch (cleanupError) { + logGateway('error', 'gateway.cleanup.failed', { + signal, + message: cleanupError instanceof Error ? cleanupError.message : String(cleanupError), + }); + process.exitCode = 1; + } + if (error) { + logGateway('error', 'gateway.shutdown.failed', { + signal, + message: error instanceof Error ? error.message : String(error), + }); + process.exitCode = 1; + } else { + logGateway('info', 'gateway.shutdown.done', { signal }); + } + process.exit(); + }); + setTimeout(() => { + logGateway('error', 'gateway.shutdown.timeout', { signal }); + process.exit(1); + }, 10_000).unref(); + }; + + process.once('SIGINT', () => shutdown('SIGINT')); + process.once('SIGTERM', () => shutdown('SIGTERM')); +} + +function createSignatureAuth(config) { + if (config.gatewayAuth === 'none') { + return null; + } + if (config.gatewayAuth !== 'signature') { + throw new Error(`unsupported LIVEAVATAR_GATEWAY_AUTH: ${config.gatewayAuth}`); + } + return new SignatureAuthenticator({ + clients: config.signatureClients, + maxSkewMs: config.signatureMaxSkewMs, + nonceTtlMs: config.signatureNonceTtlMs, + }); +} + +function createProvider(config) { + if (config.provider === 'local') { + return new LocalTargetClient({ + proxyBaseUrl: config.localProxyBaseUrl, + readyTimeoutMs: config.localReadyTimeoutMs, + readyPollMs: config.localReadyPollMs, + }); + } + + if (config.provider !== 'sandbox') { + throw new Error(`unsupported LIVEAVATAR_PROVIDER: ${config.provider}`); + } + + return new BrokerClient({ + baseUrl: config.brokerUrl, + token: config.brokerToken, + templateId: config.sandboxTemplateId, + tenantId: config.sandboxTenantId, + port: config.sandboxPort, + healthPort: config.sandboxHealthPort, + extraPorts: config.sandboxExtraPorts, + readyTimeoutMs: config.sandboxReadyTimeoutMs, + readyPollMs: config.sandboxReadyPollMs, + proxyBaseTemplate: config.sandboxProxyBaseTemplate, + env: config.sandboxEnv, + logger: logGateway, + }); +} + +function stripSessionPrefix(pathname, slug) { + if (pathname === `/${slug}` || pathname === `/${slug}/`) { + return '/'; + } + if (pathname.startsWith(`/${slug}/`)) { + return pathname.slice(slug.length + 1) || '/'; + } + return pathname; +} + +function firstPathSegment(pathname) { + return ( + String(pathname || '') + .split('/') + .filter(Boolean)[0] || '' + ); +} + +function clientIp(req) { + const forwardedFor = String(req.headers['x-forwarded-for'] || '') + .split(',')[0] + .trim(); + return forwardedFor || req.socket.remoteAddress || 'unknown'; +} + +async function acquireSession({ store, ip, invite = '', refillWarmPool = () => {} }) { + const startedAt = Date.now(); + logGateway('info', 'session.acquire.start', { + inviteProvided: Boolean(invite), + }); + try { + const session = await store.acquire({ ip, invite }); + logGateway('info', 'session.acquire.done', { + slug: session.slug, + sandboxId: session.sandboxId, + allocationSource: session.allocationSource, + expiresAt: new Date(session.expiresAt).toISOString(), + durationMs: Date.now() - startedAt, + }); + refillWarmPool('post_acquire'); + return session; + } catch (error) { + logGateway('error', 'session.acquire.failed', { + durationMs: Date.now() - startedAt, + message: error instanceof Error ? error.message : String(error), + }); + throw error; + } +} + +async function readJsonBody(req) { + const raw = await readRequestBody(req, 16 * 1024); + if (!raw.trim()) { + return {}; + } + try { + return JSON.parse(raw); + } catch { + throw new GatewayError('invalid json body', 400); + } +} + +async function readRequestBody(req, limitBytes) { + let size = 0; + const chunks = []; + for await (const chunk of req) { + size += chunk.length; + if (size > limitBytes) { + throw new GatewayError('request body too large', 413); + } + chunks.push(chunk); + } + return Buffer.concat(chunks).toString('utf8'); +} + +function redactedRequestPath(req) { + try { + return new URL(req.url || '/', 'http://gateway.local').pathname; + } catch { + return '/'; + } +} + +function logGateway(level, event, details = {}) { + const payload = { + ts: new Date().toISOString(), + level, + component: 'liveavatar-sandbox-gateway', + event, + ...details, + }; + const line = JSON.stringify(payload); + if (level === 'error') { + console.error(line); + return; + } + console.log(line); +} + +function resolveRequestSession({ req, url, store, ip, expectedSlug = '' }) { + const current = sessionCandidateFromUrl(url); + if (current) { + if (expectedSlug && current.slug !== expectedSlug) { + throw new GatewayError('session slug mismatch', 401); + } + return store.requireSession({ ...current, ip }); + } + + const fromReferer = sessionCandidateFromReferer(req); + if (fromReferer) { + if (expectedSlug && fromReferer.slug !== expectedSlug) { + throw new GatewayError('session slug mismatch', 401); + } + return store.requireSession({ ...fromReferer, ip }); + } + + throw new GatewayError('token required', 401); +} + +function sessionCandidateFromUrl(url) { + const slug = firstPathSegment(url.pathname); + const token = url.searchParams.get('token') || ''; + return slug && token ? { slug, token } : null; +} + +function sessionCandidateFromReferer(req) { + const raw = String(req.headers.referer || req.headers.referrer || '').trim(); + if (!raw) { + return null; + } + + let refererUrl; + try { + refererUrl = new URL(raw, `http://${req.headers.host || 'gateway.local'}`); + } catch { + return null; + } + + const host = String(req.headers.host || '').trim(); + if (host && refererUrl.host !== host) { + return null; + } + return sessionCandidateFromUrl(refererUrl); +} + +function gatewaySearchRemoved(search) { + const searchParams = new URLSearchParams(search || ''); + searchParams.delete('token'); + const targetSearch = searchParams.toString(); + return targetSearch ? `?${targetSearch}` : ''; +} + +function redirect(res, location) { + res.statusCode = 302; + res.setHeader('Location', location); + res.end(); +} + +function sendJson(res, statusCode, payload) { + res.statusCode = statusCode; + res.setHeader('Content-Type', 'application/json; charset=utf-8'); + res.end(`${JSON.stringify(payload)}\n`); +} + +function sendReleasePage(res, session) { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + const action = `/${encodeURIComponent(session.slug)}/release?token=${encodeURIComponent(session.token)}`; + res.end(` +

+ +`); +} + +function sendError(res, error) { + const statusCode = error instanceof GatewayError ? error.statusCode : 500; + sendJson(res, statusCode, { + status: 'error', + error: error instanceof Error ? error.message : String(error), + }); +} + +function escapeHtml(value) { + return String(value) + .replaceAll('&', '&') + .replaceAll('<', '<') + .replaceAll('>', '>') + .replaceAll('"', '"'); +} + +function escapeJsonString(value) { + return JSON.stringify(String(value)).slice(1, -1); +} + +if (import.meta.url === `file://${process.argv[1]}`) { + startSandboxGateway(); +} diff --git a/server/sandbox-gateway/session-store.mjs b/server/sandbox-gateway/session-store.mjs new file mode 100644 index 000000000..89b0d9475 --- /dev/null +++ b/server/sandbox-gateway/session-store.mjs @@ -0,0 +1,214 @@ +import crypto from 'node:crypto'; +import fs from 'node:fs'; +import path from 'node:path'; + +export class GatewayError extends Error { + constructor(message, statusCode = 500) { + super(message); + this.name = 'GatewayError'; + this.statusCode = statusCode; + } +} + +export class SessionStore { + constructor({ + broker, + inviteCode = '', + maxActiveSessions = 5, + now = () => Date.now(), + randomId = () => crypto.randomBytes(8).toString('base64url'), + randomToken = () => crypto.randomBytes(24).toString('base64url'), + tokenTtlMs = 3_600_000, + sandboxTtlSeconds = 3_600, + stateFile = '', + warmPool = null, + }) { + this.broker = broker; + this.warmPool = warmPool; + this.inviteCode = inviteCode; + this.maxActiveSessions = maxActiveSessions; + this.now = now; + this.randomId = randomId; + this.randomToken = randomToken; + this.tokenTtlMs = tokenTtlMs; + this.sandboxTtlSeconds = sandboxTtlSeconds; + this.stateFile = stateFile; + this.sessions = []; + this.load(); + } + + load() { + if (!this.stateFile || !fs.existsSync(this.stateFile)) { + return; + } + + const parsed = JSON.parse(fs.readFileSync(this.stateFile, 'utf8')); + this.sessions = Array.isArray(parsed.sessions) ? parsed.sessions : []; + } + + save() { + if (!this.stateFile) { + return; + } + + fs.mkdirSync(path.dirname(this.stateFile), { recursive: true, mode: 0o700 }); + const tmpFile = `${this.stateFile}.${process.pid}.tmp`; + fs.writeFileSync(tmpFile, `${JSON.stringify({ sessions: this.sessions }, null, 2)}\n`, { + mode: 0o600, + }); + fs.renameSync(tmpFile, this.stateFile); + } + + async acquire({ ip, invite = '' }) { + this.assertInvite(invite); + this.expireOldSessions(); + + if (this.activeSessions().length >= this.maxActiveSessions) { + throw new GatewayError('active session limit reached', 429); + } + + const slug = this.uniqueSlug(); + const token = this.randomToken(); + const sessionId = `lv_${slug}`; + let sandbox = await this.warmPool?.checkout(); + let allocationSource = sandbox?.allocationSource || 'warm_pool'; + if (!sandbox) { + allocationSource = 'on_demand'; + sandbox = await this.broker.createSandbox({ + sessionId, + ttlSeconds: this.sandboxTtlSeconds, + }); + } + const now = this.now(); + const session = { + sessionId, + slug, + token, + ip, + invite, + sandboxId: sandbox.sandboxId, + proxyBaseUrl: sandbox.proxyBaseUrl, + allocationSource, + status: 'active', + createdAt: now, + lastUsedAt: now, + expiresAt: now + this.tokenTtlMs, + releasedAt: null, + }; + this.sessions.push(session); + this.save(); + return { ...session, reused: false }; + } + + warmPoolStats() { + if (!this.warmPool) { + return { + enabled: false, + target_size: 0, + configured_size: 0, + ready: 0, + warming: 0, + }; + } + return this.warmPool.stats({ activeCount: this.activeSessions().length }); + } + + requireSession({ slug, token = '', ip = '' }) { + this.expireOldSessions(); + const session = this.sessions.find((candidate) => candidate.slug === slug); + if (!session || session.status !== 'active') { + throw new GatewayError('session not found', 404); + } + if (session.expiresAt <= this.now()) { + session.status = 'expired'; + this.save(); + throw new GatewayError('session expired', 401); + } + if (token && !safeEqual(token, session.token)) { + throw new GatewayError('invalid token', 401); + } + if (!token) { + throw new GatewayError('token required', 401); + } + + session.lastUsedAt = this.now(); + this.save(); + return { ...session }; + } + + getActiveBySlug(slug) { + this.expireOldSessions(); + const session = this.sessions.find( + (candidate) => + candidate.slug === slug && candidate.status === 'active' && candidate.expiresAt > this.now() + ); + return session ? { ...session } : null; + } + + async release({ slug, token = '', ip = '' }) { + const session = this.requireSession({ slug, token, ip }); + const stored = this.sessions.find((candidate) => candidate.slug === slug); + await this.broker.releaseSandbox(session.sandboxId); + stored.status = 'released'; + stored.releasedAt = this.now(); + this.save(); + return { ...stored }; + } + + async releaseExpired() { + this.expireOldSessions(); + const expired = this.sessions.filter( + (session) => session.status === 'expired' && session.sandboxId && !session.releasedAt + ); + for (const session of expired) { + await this.broker.releaseSandbox(session.sandboxId); + session.releasedAt = this.now(); + this.save(); + } + return expired.length; + } + + activeSessions() { + return this.sessions.filter( + (session) => session.status === 'active' && session.expiresAt > this.now() + ); + } + + assertInvite(invite) { + if (this.inviteCode && invite !== this.inviteCode) { + throw new GatewayError('invalid invite', 401); + } + } + + expireOldSessions() { + let changed = false; + for (const session of this.sessions) { + if (session.status === 'active' && session.expiresAt <= this.now()) { + session.status = 'expired'; + changed = true; + } + } + if (changed) { + this.save(); + } + } + + uniqueSlug() { + for (let attempts = 0; attempts < 10; attempts += 1) { + const slug = this.randomId(); + if (!this.sessions.some((session) => session.slug === slug)) { + return slug; + } + } + throw new GatewayError('failed to allocate unique session slug', 500); + } +} + +function safeEqual(left, right) { + const leftBuffer = Buffer.from(String(left)); + const rightBuffer = Buffer.from(String(right)); + if (leftBuffer.length !== rightBuffer.length) { + return false; + } + return crypto.timingSafeEqual(leftBuffer, rightBuffer); +} diff --git a/server/sandbox-gateway/signature-auth.mjs b/server/sandbox-gateway/signature-auth.mjs new file mode 100644 index 000000000..ded0281b8 --- /dev/null +++ b/server/sandbox-gateway/signature-auth.mjs @@ -0,0 +1,169 @@ +import crypto from 'node:crypto'; +import { GatewayError } from './session-store.mjs'; + +const ED25519_SPKI_PREFIX = Buffer.from('302a300506032b6570032100', 'hex'); + +export class SignatureAuthenticator { + constructor({ + clients = '', + maxSkewMs = 300_000, + nonceTtlMs = 300_000, + now = () => Date.now(), + } = {}) { + this.clients = parseClients(clients); + this.maxSkewMs = maxSkewMs; + this.nonceTtlMs = nonceTtlMs; + this.now = now; + this.usedNonces = new Map(); + } + + verify({ headers, method, path, body = {} }) { + const clientId = requiredHeader(headers, 'x-client-id'); + const timestampRaw = requiredHeader(headers, 'x-timestamp'); + const nonce = requiredHeader(headers, 'x-nonce'); + const signatureRaw = requiredHeader(headers, 'x-signature'); + + const publicKey = this.clients.get(clientId); + if (!publicKey) { + throw new GatewayError('unknown client_id', 401); + } + + const timestamp = Number.parseInt(timestampRaw, 10); + if (!Number.isFinite(timestamp)) { + throw new GatewayError('invalid timestamp', 401); + } + + const nowSeconds = Math.floor(this.now() / 1000); + if (Math.abs(nowSeconds - timestamp) > Math.floor(this.maxSkewMs / 1000)) { + throw new GatewayError('request expired', 401); + } + + const canonical = buildCanonicalSignaturePayload({ + clientId, + timestamp, + nonce, + method, + path, + body, + }); + const signature = decodeBase64(signatureRaw, 'invalid signature'); + const ok = crypto.verify(null, canonical, publicKey, signature); + if (!ok) { + throw new GatewayError('invalid signature', 401); + } + + this.useNonce(clientId, nonce); + return { clientId }; + } + + useNonce(clientId, nonce) { + const now = this.now(); + this.cleanupNonces(now); + const key = `${clientId}:${nonce}`; + if (this.usedNonces.has(key)) { + throw new GatewayError('replay nonce', 401); + } + this.usedNonces.set(key, now + this.nonceTtlMs); + } + + cleanupNonces(now = this.now()) { + for (const [key, expiresAt] of this.usedNonces) { + if (expiresAt <= now) { + this.usedNonces.delete(key); + } + } + } +} + +export function buildCanonicalSignaturePayload({ clientId, timestamp, nonce, method, path, body }) { + const bodyHash = crypto.createHash('sha256').update(stableJsonStringify(body)).digest('hex'); + return Buffer.from( + stableJsonStringify({ + client_id: clientId, + timestamp, + nonce, + method: String(method || 'GET').toUpperCase(), + path, + body_hash: bodyHash, + }) + ); +} + +export function parseClients(value) { + const clients = new Map(); + for (const entry of String(value || '').split(',')) { + const trimmed = entry.trim(); + if (!trimmed) { + continue; + } + const separator = trimmed.indexOf(':'); + if (separator <= 0) { + throw new Error('LIVEAVATAR_SIGNATURE_CLIENTS entries must use client_id:public_key_base64'); + } + const clientId = trimmed.slice(0, separator).trim(); + const publicKeyBase64 = trimmed.slice(separator + 1).trim(); + if (!clientId || !publicKeyBase64) { + throw new Error('LIVEAVATAR_SIGNATURE_CLIENTS entries must use client_id:public_key_base64'); + } + clients.set(clientId, createEd25519PublicKey(publicKeyBase64)); + } + return clients; +} + +export function stableJsonStringify(value) { + if (value === null || typeof value !== 'object') { + return escapeJsonString(JSON.stringify(value)); + } + if (Array.isArray(value)) { + return `[${value.map((item) => stableJsonStringify(item)).join(',')}]`; + } + + return `{${Object.keys(value) + .sort() + .map((key) => `${escapeJsonString(JSON.stringify(key))}:${stableJsonStringify(value[key])}`) + .join(',')}}`; +} + +function createEd25519PublicKey(publicKeyBase64) { + const rawPublicKey = decodeBase64(publicKeyBase64, 'invalid public key'); + if (rawPublicKey.length !== 32) { + throw new Error('Ed25519 public keys must be raw 32-byte base64 values'); + } + return crypto.createPublicKey({ + key: Buffer.concat([ED25519_SPKI_PREFIX, rawPublicKey]), + format: 'der', + type: 'spki', + }); +} + +function requiredHeader(headers, name) { + const value = readHeader(headers, name); + if (!value) { + throw new GatewayError('missing signature headers', 401); + } + return value; +} + +function readHeader(headers, name) { + if (headers instanceof Headers) { + return headers.get(name) || ''; + } + return String(headers?.[name] || headers?.[name.toLowerCase()] || ''); +} + +function decodeBase64(value, message) { + try { + return Buffer.from(String(value || ''), 'base64'); + } catch { + throw new GatewayError(message, 401); + } +} + +function escapeJsonString(value) { + return value.replace(/[^\x00-\x7f]/g, (char) => + [...char] + .map((part) => part.codePointAt(0).toString(16).padStart(4, '0')) + .map((hex) => `\\u${hex}`) + .join('') + ); +} diff --git a/server/sandbox-gateway/warm-pool.mjs b/server/sandbox-gateway/warm-pool.mjs new file mode 100644 index 000000000..287560911 --- /dev/null +++ b/server/sandbox-gateway/warm-pool.mjs @@ -0,0 +1,260 @@ +import crypto from 'node:crypto'; + +export class WarmSandboxPool { + constructor({ + broker, + targetSize = 0, + maxActiveSessions = 5, + sandboxTtlSeconds = 3600, + maxIdleSeconds = 300, + warmupFullBody = true, + now = () => Date.now(), + randomId = () => crypto.randomBytes(8).toString('base64url'), + logger = () => undefined, + }) { + this.broker = broker; + this.targetSize = Math.max(0, Number(targetSize) || 0); + this.maxActiveSessions = Math.max(0, Number(maxActiveSessions) || 0); + this.sandboxTtlSeconds = Math.max(1, Number(sandboxTtlSeconds) || 3600); + this.maxIdleMs = Math.max(1, Number(maxIdleSeconds) || 300) * 1000; + this.refreshLeadMs = Math.min(60_000, Math.floor(this.maxIdleMs / 2)); + this.warmupFullBody = Boolean(warmupFullBody); + this.now = now; + this.randomId = randomId; + this.logger = logger; + this.items = []; + this.maintaining = null; + this.stopped = false; + } + + stats({ activeCount = 0 } = {}) { + this.dropExpiredItems({ release: false }); + const target = this.targetFor({ activeCount }); + return { + enabled: this.targetSize > 0, + target_size: target, + configured_size: this.targetSize, + ready: this.readyItems().length, + warming: this.items.filter((item) => item.status === 'warming').length, + max_idle_seconds: Math.round(this.maxIdleMs / 1000), + refresh_lead_seconds: Math.round(this.refreshLeadMs / 1000), + warmup_full_body: this.warmupFullBody, + }; + } + + async maintain({ activeCount = 0, trigger = 'manual' } = {}) { + if (this.stopped || this.targetSize <= 0) { + return; + } + if (this.maintaining) { + this.log('info', 'warm_pool.maintain.skip_busy', { trigger }); + return this.maintaining; + } + + this.maintaining = this.doMaintain({ activeCount, trigger }).finally(() => { + this.maintaining = null; + }); + return this.maintaining; + } + + async doMaintain({ activeCount, trigger }) { + const startedAt = this.now(); + await this.dropExpiredItems({ release: true }); + const target = this.targetFor({ activeCount }); + await this.releaseExtraReadyItems({ target }); + + while (!this.stopped && this.poolFootprint() < target) { + await this.createWarmSandbox({ trigger }); + } + await this.releaseExtraReadyItems({ target }); + + this.log('info', 'warm_pool.maintain.done', { + trigger, + durationMs: this.now() - startedAt, + ...this.stats({ activeCount }), + }); + } + + async checkout() { + await this.dropExpiredItems({ release: true }); + const ready = this.readyItems(); + if (ready.length === 0) { + this.log('info', 'warm_pool.checkout.miss', this.stats()); + return null; + } + + const item = ready[0]; + this.items = this.items.filter((candidate) => candidate !== item); + this.log('info', 'warm_pool.checkout.hit', { + poolId: item.poolId, + sandboxId: item.sandboxId, + warmedMs: this.now() - item.readyAt, + idleMs: this.now() - item.createdAt, + ready: this.readyItems().length, + warming: this.items.filter((candidate) => candidate.status === 'warming').length, + }); + return { + sandboxId: item.sandboxId, + proxyBaseUrl: item.proxyBaseUrl, + allocationSource: 'warm_pool', + poolId: item.poolId, + warmedMs: this.now() - item.readyAt, + }; + } + + async stop({ releaseIdle = true } = {}) { + this.stopped = true; + if (!releaseIdle) { + this.items = []; + return; + } + + const items = this.items; + this.items = []; + await Promise.allSettled( + items + .filter((item) => item.sandboxId) + .map((item) => this.releaseItem(item, { reason: 'stop' })) + ); + } + + targetFor({ activeCount = 0 } = {}) { + const remainingCapacity = Math.max(0, this.maxActiveSessions - Number(activeCount || 0)); + return Math.min(this.targetSize, remainingCapacity); + } + + readyItems() { + const now = this.now(); + return this.items.filter((item) => item.status === 'ready' && item.expiresAt > now); + } + + poolFootprint() { + const now = this.now(); + return this.items.filter( + (item) => + item.status === 'warming' || + (item.status === 'ready' && item.expiresAt - now > this.refreshLeadMs) + ).length; + } + + async createWarmSandbox({ trigger }) { + const poolId = `lv_pool_${this.randomId()}`; + const item = { + poolId, + status: 'warming', + createdAt: this.now(), + readyAt: 0, + expiresAt: this.now() + this.maxIdleMs, + sandboxId: '', + proxyBaseUrl: '', + }; + this.items.push(item); + + const ttlSeconds = this.sandboxTtlSeconds + Math.ceil(this.maxIdleMs / 1000); + this.log('info', 'warm_pool.create.start', { + trigger, + poolId, + ttlSeconds, + ready: this.readyItems().length, + warming: this.items.filter((candidate) => candidate.status === 'warming').length, + warmupFullBody: this.warmupFullBody, + }); + + const startedAt = this.now(); + try { + const sandbox = await this.broker.createSandbox({ + sessionId: poolId, + ttlSeconds, + warmupFullBody: this.warmupFullBody, + }); + item.status = 'ready'; + item.sandboxId = sandbox.sandboxId; + item.proxyBaseUrl = sandbox.proxyBaseUrl; + item.readyAt = this.now(); + this.log('info', 'warm_pool.create.done', { + trigger, + poolId, + sandboxId: item.sandboxId, + durationMs: this.now() - startedAt, + expiresAt: new Date(item.expiresAt).toISOString(), + }); + } catch (error) { + this.items = this.items.filter((candidate) => candidate !== item); + this.log('error', 'warm_pool.create.failed', { + trigger, + poolId, + durationMs: this.now() - startedAt, + message: error instanceof Error ? error.message : String(error), + }); + } + } + + async releaseExtraReadyItems({ target }) { + const ready = this.readyItems().sort((left, right) => left.expiresAt - right.expiresAt); + const extraCount = Math.max(0, ready.length - target); + if (extraCount === 0) { + return; + } + + const extra = ready.slice(0, extraCount); + this.items = this.items.filter((item) => !extra.includes(item)); + for (const item of extra) { + await this.releaseItem(item, { reason: 'over_target' }); + } + } + + async dropExpiredItems({ release }) { + const now = this.now(); + const expired = this.items.filter((item) => item.expiresAt <= now); + if (expired.length === 0) { + return; + } + + this.items = this.items.filter((item) => !expired.includes(item)); + if (!release) { + return; + } + + for (const item of expired) { + await this.releaseItem(item, { reason: 'idle_expired' }); + } + } + + async releaseItem(item, { reason }) { + if (!item.sandboxId) { + return; + } + + const startedAt = this.now(); + this.log('info', 'warm_pool.release.start', { + reason, + poolId: item.poolId, + sandboxId: item.sandboxId, + }); + try { + await this.broker.releaseSandbox(item.sandboxId); + this.log('info', 'warm_pool.release.done', { + reason, + poolId: item.poolId, + sandboxId: item.sandboxId, + durationMs: this.now() - startedAt, + }); + } catch (error) { + this.log('error', 'warm_pool.release.failed', { + reason, + poolId: item.poolId, + sandboxId: item.sandboxId, + durationMs: this.now() - startedAt, + message: error instanceof Error ? error.message : String(error), + }); + } + } + + log(level, event, details = {}) { + try { + this.logger(level, event, details); + } catch { + // Logging must never affect pool lifecycle operations. + } + } +} diff --git a/tests/liveavatar-mode.test.mjs b/tests/liveavatar-mode.test.mjs new file mode 100644 index 000000000..347161618 --- /dev/null +++ b/tests/liveavatar-mode.test.mjs @@ -0,0 +1,17 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { resolveLiveAvatarMode } from '../scripts/liveavatar-mode.mjs'; + +test('liveavatar mode defaults to the direct app', () => { + assert.equal(resolveLiveAvatarMode({}), 'app'); +}); + +test('LIVEAVATAR_USE_SANDBOX enables the sandbox gateway', () => { + assert.equal(resolveLiveAvatarMode({ LIVEAVATAR_USE_SANDBOX: '1' }), 'sandbox-gateway'); + assert.equal(resolveLiveAvatarMode({ LIVEAVATAR_USE_SANDBOX: 'true' }), 'sandbox-gateway'); +}); + +test('LIVEAVATAR_USE_SANDBOX=0 disables the sandbox gateway', () => { + assert.equal(resolveLiveAvatarMode({ LIVEAVATAR_USE_SANDBOX: '0' }), 'app'); + assert.equal(resolveLiveAvatarMode({ LIVEAVATAR_USE_SANDBOX: 'false' }), 'app'); +}); diff --git a/tests/sandbox-gateway-broker-client.test.mjs b/tests/sandbox-gateway-broker-client.test.mjs new file mode 100644 index 000000000..e0c6c98fd --- /dev/null +++ b/tests/sandbox-gateway-broker-client.test.mjs @@ -0,0 +1,162 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { BrokerClient } from '../server/sandbox-gateway/broker-client.mjs'; + +test('sandbox gateway sends SANDBOX_ENV values when creating a sandbox', async () => { + const requests = []; + const client = new BrokerClient({ + baseUrl: 'https://broker.example.test', + token: 'broker-token', + templateId: 'tpl-liveavatar', + tenantId: 'lexmount', + port: 4003, + healthPort: 49999, + readyTimeoutMs: 1, + readyPollMs: 1, + env: { + INPUT_SOURCE: 'browser', + AGENT_NAME: 'lexvoice-browser-agent', + ROOM_INPUT_PORT: '8013', + }, + fetchImpl: async (url, init = {}) => { + requests.push({ url, init }); + if (String(url).endsWith('/v1/sandboxes')) { + return Response.json({ + id: 'sbx_broker_1', + sandbox_id: 'sbx_broker_1', + access_urls: { + 4003: 'https://sandbox.example.test/proxy/4003/', + }, + }); + } + return new Response('ok'); + }, + }); + + const sandbox = await client.createSandbox({ sessionId: 'lv_abc', ttlSeconds: 3600 }); + + assert.equal(sandbox.sandboxId, 'sbx_broker_1'); + const createRequest = requests.find((request) => String(request.url).endsWith('/v1/sandboxes')); + const payload = JSON.parse(createRequest.init.body); + assert.equal(payload.template_id, 'tpl-liveavatar'); + assert.equal(payload.lifetime_sec, 3600); + assert.equal(payload.allow_internet_access, true); + assert.deepEqual(payload.ports, [4003, 49999, 8013]); + assert.deepEqual(payload.env_vars, { + INPUT_SOURCE: 'browser', + AGENT_NAME: 'lexvoice-browser-agent', + ROOM_INPUT_PORT: '8013', + }); + assert.equal(Object.hasOwn(payload, 'env'), false); + assert.equal(Object.hasOwn(payload, 'ttl_sec'), false); +}); + +test('sandbox gateway sends template_id for the current sandbox broker API', async () => { + const requests = []; + const client = new BrokerClient({ + baseUrl: 'https://broker.example.test', + token: 'broker-token', + templateId: 'tpl-liveavatar', + tenantId: 'lexmount', + port: 4003, + healthPort: 49999, + readyTimeoutMs: 1, + readyPollMs: 1, + fetchImpl: async (url, init = {}) => { + requests.push({ url, init }); + if (String(url).endsWith('/v1/sandboxes')) { + return Response.json({ + sandbox_id: 'sbx_template_1', + access_urls: { + 4003: 'https://sandbox.example.test/proxy/4003/', + }, + }); + } + return new Response('ok'); + }, + }); + + await client.createSandbox({ sessionId: 'lv_template', ttlSeconds: 3600 }); + + const createRequest = requests.find((request) => String(request.url).endsWith('/v1/sandboxes')); + const payload = JSON.parse(createRequest.init.body); + assert.equal(payload.template_id, 'tpl-liveavatar'); + assert.deepEqual(payload.ports, [4003, 49999]); + assert.equal(Object.hasOwn(payload, 'profile'), false); +}); + +test('sandbox gateway terminates sandboxes through the current broker API', async () => { + const requests = []; + const client = new BrokerClient({ + baseUrl: 'https://broker.example.test', + token: 'broker-token', + fetchImpl: async (url, init = {}) => { + requests.push({ url, init }); + return Response.json({ ok: true }, { status: 202 }); + }, + }); + + await client.releaseSandbox('sbx/with space'); + + assert.equal( + requests[0].url, + 'https://broker.example.test/v1/sandboxes/sbx%2Fwith%20space/terminate' + ); + assert.equal(requests[0].init.method, 'POST'); +}); + +test('sandbox gateway requires SANDBOX_TEMPLATE_ID', async () => { + const client = new BrokerClient({ + baseUrl: 'https://broker.example.test', + token: 'broker-token', + fetchImpl: async () => Response.json({}), + }); + + await assert.rejects( + client.createSandbox({ sessionId: 'lv_missing_template', ttlSeconds: 3600 }), + /SANDBOX_TEMPLATE_ID is required/ + ); +}); + +test('sandbox gateway retries sandbox creation after a transient broker fetch failure', async () => { + const requests = []; + let createAttempts = 0; + const client = new BrokerClient({ + baseUrl: 'https://broker.example.test', + token: 'broker-token', + templateId: 'tpl-liveavatar', + tenantId: 'lexmount', + port: 4003, + healthPort: 49999, + readyTimeoutMs: 1, + readyPollMs: 1, + fetchImpl: async (url, init = {}) => { + requests.push({ url, init }); + if (String(url).endsWith('/v1/sandboxes') && init.method === 'POST') { + createAttempts += 1; + if (createAttempts === 1) { + throw new TypeError('fetch failed'); + } + return Response.json({ + sandbox_id: 'sbx_retry_1', + access_urls: { + 4003: 'https://sandbox.example.test/proxy/4003/', + }, + }); + } + if (String(url).endsWith('/v1/sandboxes') && init.method === 'GET') { + return Response.json({ data: [] }); + } + return new Response('ok'); + }, + }); + + const sandbox = await client.createSandbox({ sessionId: 'lv_retry', ttlSeconds: 3600 }); + + assert.equal(sandbox.sandboxId, 'sbx_retry_1'); + assert.equal(createAttempts, 2); + assert.deepEqual( + requests.map((request) => request.init.method || 'GET'), + ['POST', 'GET', 'POST', 'GET'] + ); +}); diff --git a/tests/sandbox-gateway-config.test.mjs b/tests/sandbox-gateway-config.test.mjs new file mode 100644 index 000000000..874f020e4 --- /dev/null +++ b/tests/sandbox-gateway-config.test.mjs @@ -0,0 +1,21 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { readSandboxGatewayConfig } from '../server/sandbox-gateway/config.mjs'; + +test('sandbox gateway config reads the current sandbox template id', () => { + const config = readSandboxGatewayConfig({ + SANDBOX_TEMPLATE_ID: 'tpl-liveavatar', + SANDBOX_EXTRA_PORTS: '8013, 18084, bad', + LIVEAVATAR_WARM_POOL_SIZE: '2', + LIVEAVATAR_WARM_POOL_REFILL_INTERVAL_SECONDS: '7', + LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS: '120', + LIVEAVATAR_WARM_POOL_WARMUP_FULL_BODY: '0', + }); + + assert.equal(config.sandboxTemplateId, 'tpl-liveavatar'); + assert.deepEqual(config.sandboxExtraPorts, [8013, 18084]); + assert.equal(config.warmPoolSize, 2); + assert.equal(config.warmPoolRefillIntervalMs, 7000); + assert.equal(config.warmPoolMaxIdleSeconds, 120); + assert.equal(config.warmPoolWarmupFullBody, false); +}); diff --git a/tests/sandbox-gateway-proxy.test.mjs b/tests/sandbox-gateway-proxy.test.mjs new file mode 100644 index 000000000..0ecc3150b --- /dev/null +++ b/tests/sandbox-gateway-proxy.test.mjs @@ -0,0 +1,103 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { + buildProxyTarget, + rewriteSandboxAppConfig, + sandboxAppConfigOverrides, +} from '../server/sandbox-gateway/server.mjs'; + +test('sandbox gateway strips the session slug when proxying session-prefixed paths', () => { + const target = buildProxyTarget({ + pathname: '/abc123/api/client-config', + search: '?token=gateway-token&debug=1', + slug: 'abc123', + proxyBaseUrl: 'https://sandbox.local/api/v1/sandboxes/sbx/proxy/4003/', + }); + + assert.equal( + target, + 'https://sandbox.local/api/v1/sandboxes/sbx/proxy/4003/api/client-config?debug=1' + ); +}); + +test('sandbox gateway preserves absolute app paths', () => { + const target = buildProxyTarget({ + pathname: '/_next/static/chunk.js', + search: '?token=gateway-token', + slug: 'abc123', + proxyBaseUrl: 'https://sandbox.local/api/v1/sandboxes/sbx/proxy/4003/', + }); + + assert.equal( + target, + 'https://sandbox.local/api/v1/sandboxes/sbx/proxy/4003/_next/static/chunk.js' + ); +}); + +test('sandbox app config enables browser raw media while keeping browser microphone controls', () => { + assert.deepEqual(sandboxAppConfigOverrides(), { + inputSource: { + type: 'string', + value: 'browser', + }, + audioInputDevice: { + type: 'string', + value: 'browser', + }, + visionInputDevice: { + type: 'string', + value: 'browser', + }, + outputDevice: { + type: 'string', + value: 'browser', + }, + usesBrowserRawMediaInput: { + type: 'boolean', + value: true, + }, + usesBrowserRawAudioInput: { + type: 'boolean', + value: true, + }, + usesBrowserRawVideoInput: { + type: 'boolean', + value: true, + }, + usesServerRoomInput: { + type: 'boolean', + value: false, + }, + supportsScreenShare: { + type: 'boolean', + value: false, + }, + showDefaultCameraPreview: { + type: 'boolean', + value: false, + }, + agentName: { + type: 'string', + value: 'lexvoice-browser-agent', + }, + }); +}); + +test('sandbox gateway rewrites proxied app config for broker sandboxes', () => { + const body = + ''; + + assert.equal( + rewriteSandboxAppConfig(body, { sandboxId: 'sbx_123' }), + '' + ); +}); + +test('sandbox gateway rewrites unescaped agent name from proxied app config', () => { + const body = ''; + + assert.equal( + rewriteSandboxAppConfig(body, { sandboxId: 'sbx_123' }), + '' + ); +}); diff --git a/tests/sandbox-gateway-session-store.test.mjs b/tests/sandbox-gateway-session-store.test.mjs new file mode 100644 index 000000000..417fb828d --- /dev/null +++ b/tests/sandbox-gateway-session-store.test.mjs @@ -0,0 +1,137 @@ +import assert from 'node:assert/strict'; +import { mkdtempSync, rmSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { test } from 'node:test'; +import { SessionStore } from '../server/sandbox-gateway/session-store.mjs'; + +function createBroker() { + const calls = []; + return { + calls, + async createSandbox({ sessionId, ttlSeconds }) { + calls.push({ type: 'create', sessionId, ttlSeconds }); + return { + sandboxId: `sbx-${sessionId}`, + proxyBaseUrl: `https://sandbox.local/api/v1/sandboxes/sbx-${sessionId}/proxy/4003/`, + }; + }, + async releaseSandbox(sandboxId) { + calls.push({ type: 'release', sandboxId }); + }, + }; +} + +function createStore(options = {}) { + const dir = mkdtempSync(path.join(tmpdir(), 'lv-sandbox-gateway-')); + const broker = createBroker(); + const ids = ['abc123', 'def456', 'ghi789']; + const tokens = ['token-a', 'token-b', 'token-c']; + const store = new SessionStore({ + broker, + stateFile: path.join(dir, 'sessions.json'), + randomId: () => ids.shift(), + randomToken: () => tokens.shift(), + now: () => 1_000, + ...options, + }); + return { + broker, + store, + cleanup: () => rmSync(dir, { recursive: true, force: true }), + }; +} + +test('sandbox gateway does not reuse sessions by IP', async () => { + const { broker, store, cleanup } = createStore(); + try { + const first = await store.acquire({ ip: '10.0.0.1' }); + const second = await store.acquire({ ip: '10.0.0.1' }); + + assert.equal(first.slug, 'abc123'); + assert.equal(second.slug, 'def456'); + assert.equal(broker.calls.filter((call) => call.type === 'create').length, 2); + } finally { + cleanup(); + } +}); + +test('sandbox gateway validates token across IP changes', async () => { + const { store, cleanup } = createStore(); + try { + const session = await store.acquire({ ip: '10.0.0.1' }); + const loaded = store.requireSession({ + slug: session.slug, + token: session.token, + ip: '10.0.0.2', + }); + + assert.equal(loaded.slug, session.slug); + } finally { + cleanup(); + } +}); + +test('sandbox gateway keeps active sessions releasable when broker release fails', async () => { + const { broker, store, cleanup } = createStore(); + broker.releaseSandbox = async (sandboxId) => { + broker.calls.push({ type: 'release', sandboxId }); + throw new Error('release failed'); + }; + + try { + const session = await store.acquire({ ip: '10.0.0.1' }); + + await assert.rejects( + store.release({ + slug: session.slug, + token: session.token, + ip: '10.0.0.1', + }), + /release failed/ + ); + + assert.equal(store.sessions[0].status, 'active'); + assert.equal(store.sessions[0].releasedAt, null); + assert.equal(store.activeSessions().length, 1); + assert.deepEqual(broker.calls.at(-1), { + type: 'release', + sandboxId: 'sbx-lv_abc123', + }); + } finally { + cleanup(); + } +}); + +test('sandbox gateway checks out a warm sandbox before cold creation', async () => { + const { broker, store, cleanup } = createStore({ + warmPool: { + async checkout() { + return { + sandboxId: 'warm-sbx-1', + proxyBaseUrl: 'https://sandbox.local/api/v1/sandboxes/warm-sbx-1/proxy/4003/', + allocationSource: 'warm_pool', + }; + }, + stats() { + return { + enabled: true, + target_size: 1, + configured_size: 1, + ready: 0, + warming: 0, + }; + }, + }, + }); + + try { + const session = await store.acquire({ ip: '10.0.0.1' }); + + assert.equal(session.sandboxId, 'warm-sbx-1'); + assert.equal(session.allocationSource, 'warm_pool'); + assert.equal(broker.calls.filter((call) => call.type === 'create').length, 0); + } finally { + cleanup(); + } +}); diff --git a/tests/sandbox-gateway-signature-auth.test.mjs b/tests/sandbox-gateway-signature-auth.test.mjs new file mode 100644 index 000000000..fd0126ab2 --- /dev/null +++ b/tests/sandbox-gateway-signature-auth.test.mjs @@ -0,0 +1,140 @@ +import assert from 'node:assert/strict'; +import crypto from 'node:crypto'; +import { test } from 'node:test'; +import { createServer } from '../server/sandbox-gateway/server.mjs'; +import { + SignatureAuthenticator, + buildCanonicalSignaturePayload, + stableJsonStringify, +} from '../server/sandbox-gateway/signature-auth.mjs'; + +function createSigningClient({ clientId = 'client_001', nowSeconds = 1_781_496_000 } = {}) { + const { privateKey, publicKey } = crypto.generateKeyPairSync('ed25519'); + const publicKeyDer = publicKey.export({ format: 'der', type: 'spki' }); + const publicKeyBase64 = Buffer.from(publicKeyDer).subarray(-32).toString('base64'); + + return { + clientId, + nowSeconds, + publicKeyBase64, + sign({ method = 'POST', path = '/__gateway/sessions', body = {}, nonce = 'nonce-1' } = {}) { + const canonical = buildCanonicalSignaturePayload({ + clientId, + timestamp: nowSeconds, + nonce, + method, + path, + body, + }); + return { + 'x-client-id': clientId, + 'x-timestamp': String(nowSeconds), + 'x-nonce': nonce, + 'x-signature': crypto.sign(null, canonical, privateKey).toString('base64'), + }; + }, + }; +} + +test('sandbox gateway canonical JSON matches the Python signing shape', () => { + assert.equal(stableJsonStringify({ b: 2, a: '中' }), '{"a":"\\u4e2d","b":2}'); +}); + +test('sandbox gateway verifies Ed25519 signed requests and rejects nonce replay', () => { + const client = createSigningClient(); + const auth = new SignatureAuthenticator({ + clients: `${client.clientId}:${client.publicKeyBase64}`, + now: () => client.nowSeconds * 1000, + }); + const body = { invite: 'internal' }; + const headers = client.sign({ body }); + + const verified = auth.verify({ + headers, + method: 'POST', + path: '/__gateway/sessions', + body, + }); + assert.deepEqual(verified, { clientId: client.clientId }); + + assert.throws( + () => + auth.verify({ + headers, + method: 'POST', + path: '/__gateway/sessions', + body, + }), + /replay nonce/ + ); +}); + +test('sandbox gateway rejects invalid signatures', () => { + const client = createSigningClient(); + const auth = new SignatureAuthenticator({ + clients: `${client.clientId}:${client.publicKeyBase64}`, + now: () => client.nowSeconds * 1000, + }); + const body = { invite: 'internal' }; + const headers = client.sign({ body }); + + assert.throws( + () => + auth.verify({ + headers, + method: 'POST', + path: '/__gateway/sessions', + body: { invite: 'tampered' }, + }), + /invalid signature/ + ); +}); + +test('sandbox gateway signed session endpoint creates a sandbox session', async () => { + const client = createSigningClient(); + const auth = new SignatureAuthenticator({ + clients: `${client.clientId}:${client.publicKeyBase64}`, + now: () => client.nowSeconds * 1000, + }); + const store = { + activeSessions: () => [], + async acquire() { + return { + slug: 'abc123', + token: 'token-a', + sandboxId: 'sbx-abc123', + expiresAt: (client.nowSeconds + 3600) * 1000, + }; + }, + }; + const server = createServer({ + config: { + gatewayAuth: 'signature', + maxActiveSessions: 5, + }, + store, + signatureAuth: auth, + }); + await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); + const baseUrl = `http://127.0.0.1:${server.address().port}`; + + try { + const body = { invite: 'internal' }; + const response = await fetch(`${baseUrl}/__gateway/sessions`, { + method: 'POST', + headers: { + 'content-type': 'application/json', + ...client.sign({ body }), + }, + body: JSON.stringify(body), + }); + const payload = await response.json(); + + assert.equal(response.status, 200); + assert.equal(payload.status, 'created'); + assert.equal(payload.url, '/abc123?token=token-a'); + assert.equal(payload.slug, 'abc123'); + } finally { + await new Promise((resolve) => server.close(resolve)); + } +}); diff --git a/tests/sandbox-gateway-warm-pool.test.mjs b/tests/sandbox-gateway-warm-pool.test.mjs new file mode 100644 index 000000000..3bad2d12e --- /dev/null +++ b/tests/sandbox-gateway-warm-pool.test.mjs @@ -0,0 +1,127 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { WarmSandboxPool } from '../server/sandbox-gateway/warm-pool.mjs'; + +function createBroker() { + const calls = []; + return { + calls, + async createSandbox({ sessionId, ttlSeconds, warmupFullBody }) { + calls.push({ type: 'create', sessionId, ttlSeconds, warmupFullBody }); + return { + sandboxId: `sbx-${sessionId}`, + proxyBaseUrl: `https://sandbox.local/api/v1/sandboxes/sbx-${sessionId}/proxy/4003/`, + }; + }, + async releaseSandbox(sandboxId) { + calls.push({ type: 'release', sandboxId }); + }, + }; +} + +test('warm pool creates ready sandboxes with extra idle ttl and checks them out', async () => { + let now = 1_000; + const broker = createBroker(); + const events = []; + const pool = new WarmSandboxPool({ + broker, + targetSize: 1, + maxActiveSessions: 5, + sandboxTtlSeconds: 3600, + maxIdleSeconds: 300, + now: () => now, + randomId: () => 'pool-a', + logger: (level, event, details) => events.push({ level, event, details }), + }); + + await pool.maintain({ activeCount: 0, trigger: 'test' }); + + assert.deepEqual(broker.calls[0], { + type: 'create', + sessionId: 'lv_pool_pool-a', + ttlSeconds: 3900, + warmupFullBody: true, + }); + assert.equal(pool.stats({ activeCount: 0 }).warmup_full_body, true); + assert.equal(pool.stats({ activeCount: 0 }).ready, 1); + + now += 50; + const sandbox = await pool.checkout(); + + assert.equal(sandbox.sandboxId, 'sbx-lv_pool_pool-a'); + assert.equal(sandbox.allocationSource, 'warm_pool'); + assert.equal(pool.stats({ activeCount: 0 }).ready, 0); + assert.equal( + events.some((event) => event.event === 'warm_pool.checkout.hit'), + true + ); +}); + +test('warm pool does not exceed remaining active-session capacity', async () => { + const broker = createBroker(); + const pool = new WarmSandboxPool({ + broker, + targetSize: 2, + maxActiveSessions: 2, + now: () => 1_000, + }); + + await pool.maintain({ activeCount: 2, trigger: 'test' }); + + assert.equal(broker.calls.length, 0); + assert.equal(pool.stats({ activeCount: 2 }).target_size, 0); +}); + +test('warm pool releases expired idle sandboxes instead of assigning them', async () => { + let now = 1_000; + const broker = createBroker(); + const pool = new WarmSandboxPool({ + broker, + targetSize: 1, + maxActiveSessions: 5, + maxIdleSeconds: 1, + now: () => now, + randomId: () => 'pool-expired', + }); + + await pool.maintain({ activeCount: 0, trigger: 'test' }); + now += 1_001; + + const sandbox = await pool.checkout(); + + assert.equal(sandbox, null); + assert.deepEqual(broker.calls.at(-1), { + type: 'release', + sandboxId: 'sbx-lv_pool_pool-expired', + }); +}); + +test('warm pool refreshes before idle expiry and releases the older ready sandbox', async () => { + let now = 1_000; + const ids = ['old', 'new']; + const broker = createBroker(); + const pool = new WarmSandboxPool({ + broker, + targetSize: 1, + maxActiveSessions: 5, + maxIdleSeconds: 10, + now: () => now, + randomId: () => ids.shift(), + }); + + await pool.maintain({ activeCount: 0, trigger: 'initial' }); + now += 6_000; + await pool.maintain({ activeCount: 0, trigger: 'refresh' }); + + assert.deepEqual( + broker.calls.filter((call) => call.type === 'create').map((call) => call.sessionId), + ['lv_pool_old', 'lv_pool_new'] + ); + assert.deepEqual(broker.calls.at(-1), { + type: 'release', + sandboxId: 'sbx-lv_pool_old', + }); + + const sandbox = await pool.checkout(); + assert.equal(sandbox.sandboxId, 'sbx-lv_pool_new'); +}); From 238b8394970b0bf4c67db5637b6cd6fa7f8ec1b0 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 10:56:39 +0800 Subject: [PATCH 02/16] Remove generated sandbox flow PNG --- docs/liveavatar-sandbox-gateway-flow@3x.png | Bin 369332 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/liveavatar-sandbox-gateway-flow@3x.png diff --git a/docs/liveavatar-sandbox-gateway-flow@3x.png b/docs/liveavatar-sandbox-gateway-flow@3x.png deleted file mode 100644 index ae596e0c40e6ef196157be3099054c69d4e06b35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369332 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�po|Qk{YvJ=bG6j1% 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

r<>fw^z6+S3MD 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 Date: Wed, 24 Jun 2026 11:04:39 +0800 Subject: [PATCH 03/16] Fix sandbox session lint warning --- server/sandbox-gateway/session-store.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/sandbox-gateway/session-store.mjs b/server/sandbox-gateway/session-store.mjs index 89b0d9475..e648f1802 100644 --- a/server/sandbox-gateway/session-store.mjs +++ b/server/sandbox-gateway/session-store.mjs @@ -113,7 +113,7 @@ export class SessionStore { return this.warmPool.stats({ activeCount: this.activeSessions().length }); } - requireSession({ slug, token = '', ip = '' }) { + requireSession({ slug, token = '' }) { this.expireOldSessions(); const session = this.sessions.find((candidate) => candidate.slug === slug); if (!session || session.status !== 'active') { @@ -145,8 +145,8 @@ export class SessionStore { return session ? { ...session } : null; } - async release({ slug, token = '', ip = '' }) { - const session = this.requireSession({ slug, token, ip }); + async release({ slug, token = '' }) { + const session = this.requireSession({ slug, token }); const stored = this.sessions.find((candidate) => candidate.slug === slug); await this.broker.releaseSandbox(session.sandboxId); stored.status = 'released'; From e4726e01fb469be8c5e59b464ff3a71a652ba52d Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 11:17:34 +0800 Subject: [PATCH 04/16] Fix sandbox gateway lifecycle leaks --- server/sandbox-gateway/session-store.mjs | 28 ++++++++++++++- server/sandbox-gateway/warm-pool.mjs | 5 +-- tests/sandbox-gateway-session-store.test.mjs | 37 ++++++++++++++++++++ tests/sandbox-gateway-warm-pool.test.mjs | 22 ++++++++++++ 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/server/sandbox-gateway/session-store.mjs b/server/sandbox-gateway/session-store.mjs index e648f1802..ed6a6ba23 100644 --- a/server/sandbox-gateway/session-store.mjs +++ b/server/sandbox-gateway/session-store.mjs @@ -34,6 +34,7 @@ export class SessionStore { this.sandboxTtlSeconds = sandboxTtlSeconds; this.stateFile = stateFile; this.sessions = []; + this.acquireQueue = Promise.resolve(); this.load(); } @@ -60,6 +61,12 @@ export class SessionStore { } async acquire({ ip, invite = '' }) { + const next = this.acquireQueue.then(() => this.acquireLocked({ ip, invite })); + this.acquireQueue = next.catch(() => undefined); + return next; + } + + async acquireLocked({ ip, invite = '' }) { this.assertInvite(invite); this.expireOldSessions(); @@ -96,10 +103,29 @@ export class SessionStore { releasedAt: null, }; this.sessions.push(session); - this.save(); + try { + this.save(); + } catch (error) { + this.sessions = this.sessions.filter((candidate) => candidate !== session); + try { + await this.releaseAllocatedSandbox(sandbox); + } catch (releaseError) { + if (error instanceof Error) { + error.releaseError = releaseError; + } + } + throw error; + } return { ...session, reused: false }; } + async releaseAllocatedSandbox(sandbox) { + if (!sandbox?.sandboxId) { + return; + } + await this.broker.releaseSandbox(sandbox.sandboxId); + } + warmPoolStats() { if (!this.warmPool) { return { diff --git a/server/sandbox-gateway/warm-pool.mjs b/server/sandbox-gateway/warm-pool.mjs index 287560911..f99a52311 100644 --- a/server/sandbox-gateway/warm-pool.mjs +++ b/server/sandbox-gateway/warm-pool.mjs @@ -28,14 +28,15 @@ export class WarmSandboxPool { } stats({ activeCount = 0 } = {}) { - this.dropExpiredItems({ release: false }); + const now = this.now(); const target = this.targetFor({ activeCount }); return { enabled: this.targetSize > 0, target_size: target, configured_size: this.targetSize, ready: this.readyItems().length, - warming: this.items.filter((item) => item.status === 'warming').length, + warming: this.items.filter((item) => item.status === 'warming' && item.expiresAt > now) + .length, max_idle_seconds: Math.round(this.maxIdleMs / 1000), refresh_lead_seconds: Math.round(this.refreshLeadMs / 1000), warmup_full_body: this.warmupFullBody, diff --git a/tests/sandbox-gateway-session-store.test.mjs b/tests/sandbox-gateway-session-store.test.mjs index 417fb828d..04c162f6a 100644 --- a/tests/sandbox-gateway-session-store.test.mjs +++ b/tests/sandbox-gateway-session-store.test.mjs @@ -135,3 +135,40 @@ test('sandbox gateway checks out a warm sandbox before cold creation', async () cleanup(); } }); + +test('sandbox gateway enforces active-session limit across concurrent acquires', async () => { + const { broker, store, cleanup } = createStore({ maxActiveSessions: 1 }); + try { + const results = await Promise.allSettled([ + store.acquire({ ip: '10.0.0.1' }), + store.acquire({ ip: '10.0.0.2' }), + ]); + + assert.equal(results[0].status, 'fulfilled'); + assert.equal(results[1].status, 'rejected'); + assert.match(results[1].reason.message, /active session limit reached/); + assert.equal(broker.calls.filter((call) => call.type === 'create').length, 1); + assert.equal(store.activeSessions().length, 1); + } finally { + cleanup(); + } +}); + +test('sandbox gateway releases a sandbox when session persistence fails', async () => { + const { broker, store, cleanup } = createStore(); + store.save = () => { + throw new Error('save failed'); + }; + + try { + await assert.rejects(store.acquire({ ip: '10.0.0.1' }), /save failed/); + + assert.deepEqual(broker.calls, [ + { type: 'create', sessionId: 'lv_abc123', ttlSeconds: 3600 }, + { type: 'release', sandboxId: 'sbx-lv_abc123' }, + ]); + assert.equal(store.sessions.length, 0); + } finally { + cleanup(); + } +}); diff --git a/tests/sandbox-gateway-warm-pool.test.mjs b/tests/sandbox-gateway-warm-pool.test.mjs index 3bad2d12e..9c98e501d 100644 --- a/tests/sandbox-gateway-warm-pool.test.mjs +++ b/tests/sandbox-gateway-warm-pool.test.mjs @@ -96,6 +96,28 @@ test('warm pool releases expired idle sandboxes instead of assigning them', asyn }); }); +test('warm pool stats does not drop expired idle sandboxes', async () => { + let now = 1_000; + const broker = createBroker(); + const pool = new WarmSandboxPool({ + broker, + targetSize: 1, + maxActiveSessions: 5, + maxIdleSeconds: 1, + now: () => now, + randomId: () => 'pool-stats', + }); + + await pool.maintain({ activeCount: 0, trigger: 'test' }); + now += 1_001; + + const stats = pool.stats({ activeCount: 0 }); + + assert.equal(stats.ready, 0); + assert.equal(broker.calls.filter((call) => call.type === 'release').length, 0); + assert.equal(pool.items.length, 1); +}); + test('warm pool refreshes before idle expiry and releases the older ready sandbox', async () => { let now = 1_000; const ids = ['old', 'new']; From 62f1e8dd6b20b9ec3caffd701c70d3e31f956f94 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 11:44:45 +0800 Subject: [PATCH 05/16] Fix proxied fetch response headers --- server/sandbox-gateway/server.mjs | 22 ++++++++++++++-------- tests/sandbox-gateway-proxy.test.mjs | 10 ++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/server/sandbox-gateway/server.mjs b/server/sandbox-gateway/server.mjs index 657e45c2b..85fd16d42 100644 --- a/server/sandbox-gateway/server.mjs +++ b/server/sandbox-gateway/server.mjs @@ -17,6 +17,7 @@ const HOP_BY_HOP_HEADERS = new Set([ 'transfer-encoding', 'upgrade', ]); +const FETCH_BODY_METADATA_HEADERS = new Set(['content-encoding', 'content-length', 'etag']); const BROWSER_INPUT_SOURCE = 'browser'; const BROWSER_AGENT_NAME = 'lexvoice-browser-agent'; @@ -176,7 +177,7 @@ async function proxyToSandbox({ req, res, url, session }) { const response = await fetch(target, init); if (shouldRewriteSandboxAppConfig(response)) { const body = await response.text(); - writeResponseHeaders(res, response, { rewritten: true }); + writeResponseHeaders(res, response, { fetchedBody: true }); res.end(rewriteSandboxAppConfig(body, session)); logGateway('info', 'proxy.request.done', { method: req.method || 'GET', @@ -191,8 +192,8 @@ async function proxyToSandbox({ req, res, url, session }) { } res.statusCode = response.status; - writeResponseHeaders(res, response); if (!response.body) { + writeResponseHeaders(res, response); res.end(); logGateway('info', 'proxy.request.done', { method: req.method || 'GET', @@ -205,6 +206,7 @@ async function proxyToSandbox({ req, res, url, session }) { }); return; } + writeResponseHeaders(res, response, { fetchedBody: true }); for await (const chunk of response.body) { res.write(chunk); } @@ -220,20 +222,24 @@ async function proxyToSandbox({ req, res, url, session }) { }); } -function writeResponseHeaders(res, response, { rewritten = false } = {}) { +function writeResponseHeaders(res, response, { fetchedBody = false } = {}) { res.statusCode = response.status; response.headers.forEach((value, key) => { - const normalized = key.toLowerCase(); - if (HOP_BY_HOP_HEADERS.has(normalized)) { - return; - } - if (rewritten && ['content-encoding', 'content-length', 'etag'].includes(normalized)) { + if (shouldDropProxyResponseHeader(key, { fetchedBody })) { return; } res.setHeader(key, value); }); } +export function shouldDropProxyResponseHeader(headerName, { fetchedBody = false } = {}) { + const normalized = String(headerName || '').toLowerCase(); + if (HOP_BY_HOP_HEADERS.has(normalized)) { + return true; + } + return fetchedBody && FETCH_BODY_METADATA_HEADERS.has(normalized); +} + function shouldRewriteSandboxAppConfig(response) { const contentType = response.headers.get('content-type') || ''; return contentType.includes('text/html') || contentType.includes('text/x-component'); diff --git a/tests/sandbox-gateway-proxy.test.mjs b/tests/sandbox-gateway-proxy.test.mjs index 0ecc3150b..c7954787e 100644 --- a/tests/sandbox-gateway-proxy.test.mjs +++ b/tests/sandbox-gateway-proxy.test.mjs @@ -4,6 +4,7 @@ import { buildProxyTarget, rewriteSandboxAppConfig, sandboxAppConfigOverrides, + shouldDropProxyResponseHeader, } from '../server/sandbox-gateway/server.mjs'; test('sandbox gateway strips the session slug when proxying session-prefixed paths', () => { @@ -34,6 +35,15 @@ test('sandbox gateway preserves absolute app paths', () => { ); }); +test('sandbox gateway drops response headers that are invalid after fetch body decoding', () => { + assert.equal(shouldDropProxyResponseHeader('connection'), true); + assert.equal(shouldDropProxyResponseHeader('content-encoding'), false); + assert.equal(shouldDropProxyResponseHeader('content-encoding', { fetchedBody: true }), true); + assert.equal(shouldDropProxyResponseHeader('content-length', { fetchedBody: true }), true); + assert.equal(shouldDropProxyResponseHeader('etag', { fetchedBody: true }), true); + assert.equal(shouldDropProxyResponseHeader('content-type', { fetchedBody: true }), false); +}); + test('sandbox app config enables browser raw media while keeping browser microphone controls', () => { assert.deepEqual(sandboxAppConfigOverrides(), { inputSource: { From 561f52fca15be88d767284adabdf62fbe4d057bd Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 11:54:22 +0800 Subject: [PATCH 06/16] Preserve gateway agent name by default --- server/sandbox-gateway/config.mjs | 1 + server/sandbox-gateway/server.mjs | 48 +++++++++++------- tests/sandbox-gateway-proxy.test.mjs | 76 +++++++++++++++++++++++++--- 3 files changed, 102 insertions(+), 23 deletions(-) diff --git a/server/sandbox-gateway/config.mjs b/server/sandbox-gateway/config.mjs index ea9bcb26f..a020330b6 100644 --- a/server/sandbox-gateway/config.mjs +++ b/server/sandbox-gateway/config.mjs @@ -32,6 +32,7 @@ export function readSandboxGatewayConfig(env = process.env) { localProxyBaseUrl: readString(env.LIVEAVATAR_LOCAL_PROXY_BASE_URL, 'http://127.0.0.1:4003/'), localReadyTimeoutMs: readInt(env.LIVEAVATAR_LOCAL_READY_TIMEOUT_SECONDS, 10) * 1000, localReadyPollMs: readInt(env.LIVEAVATAR_LOCAL_READY_POLL_MS, 500), + appConfigAgentName: readString(env.LIVEAVATAR_AGENT_NAME), }; } diff --git a/server/sandbox-gateway/server.mjs b/server/sandbox-gateway/server.mjs index 85fd16d42..e21a5836c 100644 --- a/server/sandbox-gateway/server.mjs +++ b/server/sandbox-gateway/server.mjs @@ -19,7 +19,6 @@ const HOP_BY_HOP_HEADERS = new Set([ ]); const FETCH_BODY_METADATA_HEADERS = new Set(['content-encoding', 'content-length', 'etag']); const BROWSER_INPUT_SOURCE = 'browser'; -const BROWSER_AGENT_NAME = 'lexvoice-browser-agent'; export function createServer({ config, store, signatureAuth = null, refillWarmPool = () => {} }) { return http.createServer(async (req, res) => { @@ -72,7 +71,7 @@ export async function routeRequest({ if (req.method !== 'GET') { throw new GatewayError('method not allowed', 405); } - sendJson(res, 200, sandboxAppConfigOverrides()); + sendJson(res, 200, sandboxAppConfigOverrides({ agentName: config.appConfigAgentName })); return; } @@ -144,10 +143,10 @@ export async function routeRequest({ } const active = resolveRequestSession({ req, url, store, ip }); - await proxyToSandbox({ req, res, url, session: active }); + await proxyToSandbox({ req, res, url, session: active, config }); } -async function proxyToSandbox({ req, res, url, session }) { +async function proxyToSandbox({ req, res, url, session, config }) { const startedAt = Date.now(); const target = buildProxyTarget({ pathname: url.pathname, @@ -178,7 +177,11 @@ async function proxyToSandbox({ req, res, url, session }) { if (shouldRewriteSandboxAppConfig(response)) { const body = await response.text(); writeResponseHeaders(res, response, { fetchedBody: true }); - res.end(rewriteSandboxAppConfig(body, session)); + res.end( + rewriteSandboxAppConfig(body, session, { + agentName: config.appConfigAgentName, + }) + ); logGateway('info', 'proxy.request.done', { method: req.method || 'GET', path: url.pathname, @@ -245,16 +248,23 @@ function shouldRewriteSandboxAppConfig(response) { return contentType.includes('text/html') || contentType.includes('text/x-component'); } -export function rewriteSandboxAppConfig(body, session) { +export function rewriteSandboxAppConfig(body, session, { agentName = '' } = {}) { const sandboxId = escapeJsonString(session.sandboxId); - const agentName = escapeJsonString(BROWSER_AGENT_NAME); - return String(body) + let rewritten = String(body) .replaceAll('\\"sandboxId\\":\\"$undefined\\"', `\\"sandboxId\\":\\"${sandboxId}\\"`) .replaceAll('"sandboxId":"$undefined"', `"sandboxId":"${sandboxId}"`) .replaceAll('\\"sandboxId\\":null', `\\"sandboxId\\":\\"${sandboxId}\\"`) - .replaceAll('"sandboxId":null', `"sandboxId":"${sandboxId}"`) - .replace(/\\"agentName\\":\\"[^"\\]*\\"/g, `\\"agentName\\":\\"${agentName}\\"`) - .replace(/"agentName":"[^"]*"/g, `"agentName":"${agentName}"`); + .replaceAll('"sandboxId":null', `"sandboxId":"${sandboxId}"`); + const normalizedAgentName = String(agentName || '').trim(); + if (!normalizedAgentName) { + return rewritten; + } + + const escapedAgentName = escapeJsonString(normalizedAgentName); + rewritten = rewritten + .replace(/\\"agentName\\":\\"[^"\\]*\\"/g, `\\"agentName\\":\\"${escapedAgentName}\\"`) + .replace(/"agentName":"[^"]*"/g, `"agentName":"${escapedAgentName}"`); + return rewritten; } export function buildProxyTarget({ pathname, search, slug, proxyBaseUrl }) { @@ -263,8 +273,8 @@ export function buildProxyTarget({ pathname, search, slug, proxyBaseUrl }) { return new URL(`${relativePath}${gatewaySearchRemoved(search)}`, proxyBaseUrl).toString(); } -export function sandboxAppConfigOverrides() { - return { +export function sandboxAppConfigOverrides({ agentName = '' } = {}) { + const overrides = { inputSource: { type: 'string', value: BROWSER_INPUT_SOURCE, @@ -305,11 +315,15 @@ export function sandboxAppConfigOverrides() { type: 'boolean', value: false, }, - agentName: { - type: 'string', - value: BROWSER_AGENT_NAME, - }, }; + const normalizedAgentName = String(agentName || '').trim(); + if (normalizedAgentName) { + overrides.agentName = { + type: 'string', + value: normalizedAgentName, + }; + } + return overrides; } export function startSandboxGateway(config = readSandboxGatewayConfig()) { diff --git a/tests/sandbox-gateway-proxy.test.mjs b/tests/sandbox-gateway-proxy.test.mjs index c7954787e..8a08bcb16 100644 --- a/tests/sandbox-gateway-proxy.test.mjs +++ b/tests/sandbox-gateway-proxy.test.mjs @@ -86,10 +86,66 @@ test('sandbox app config enables browser raw media while keeping browser microph type: 'boolean', value: false, }, - agentName: { - type: 'string', - value: 'lexvoice-browser-agent', - }, + }); +}); + +test('sandbox app config only overrides agent name when explicitly configured', () => { + assert.deepEqual(sandboxAppConfigOverrides({ agentName: 'frontdesk-agent' }).agentName, { + type: 'string', + value: 'frontdesk-agent', + }); +}); + +test('sandbox gateway preserves proxied app agent name by default', () => { + const body = + ''; + + assert.equal( + rewriteSandboxAppConfig(body, { sandboxId: 'sbx_123' }), + '' + ); +}); + +test('sandbox gateway can explicitly override proxied app agent name', () => { + const body = + ''; + + assert.equal( + rewriteSandboxAppConfig( + body, + { sandboxId: 'sbx_123' }, + { agentName: 'lexvoice-browser-agent' } + ), + '' + ); +}); + +test('sandbox gateway preserves unescaped agent name by default', () => { + const body = ''; + + assert.equal( + rewriteSandboxAppConfig(body, { sandboxId: 'sbx_123' }), + '' + ); +}); + +test('sandbox gateway can explicitly override unescaped agent name', () => { + const body = ''; + + assert.equal( + rewriteSandboxAppConfig( + body, + { sandboxId: 'sbx_123' }, + { agentName: 'lexvoice-browser-agent' } + ), + '' + ); +}); + +test('sandbox app config can explicitly override agent name', () => { + assert.deepEqual(sandboxAppConfigOverrides({ agentName: 'lexvoice-browser-agent' }).agentName, { + type: 'string', + value: 'lexvoice-browser-agent', }); }); @@ -98,7 +154,11 @@ test('sandbox gateway rewrites proxied app config for broker sandboxes', () => { ''; assert.equal( - rewriteSandboxAppConfig(body, { sandboxId: 'sbx_123' }), + rewriteSandboxAppConfig( + body, + { sandboxId: 'sbx_123' }, + { agentName: 'lexvoice-browser-agent' } + ), '' ); }); @@ -107,7 +167,11 @@ test('sandbox gateway rewrites unescaped agent name from proxied app config', () const body = ''; assert.equal( - rewriteSandboxAppConfig(body, { sandboxId: 'sbx_123' }), + rewriteSandboxAppConfig( + body, + { sandboxId: 'sbx_123' }, + { agentName: 'lexvoice-browser-agent' } + ), '' ); }); From abf76c2d2a9146c84891fd08554a04bd7b22d633 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 12:12:44 +0800 Subject: [PATCH 07/16] Update sandbox template defaults --- .env.example | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 7fda48909..eaeefb9d3 100644 --- a/.env.example +++ b/.env.example @@ -59,7 +59,7 @@ LIVEAVATAR_LOCAL_READY_TIMEOUT_SECONDS=10 # Sandbox Broker endpoint and credentials. SANDBOX_BROKER_TOKEN is a server secret. SANDBOX_BROKER_URL=https://sandbox.local.lexmount.net/api SANDBOX_BROKER_TOKEN= -SANDBOX_TEMPLATE_ID=tpl-c2dcb6402fed4df09accca18 +SANDBOX_TEMPLATE_ID=tpl-8329b6cee1074751a787fe9c SANDBOX_TENANT_ID=lexmount # Broker-side sandbox instance lifetime and exposed ports. @@ -73,7 +73,7 @@ SANDBOX_PROXY_BASE_TEMPLATE=https://sandbox.local.lexmount.net/api/v1/sandboxes/ # Values with SANDBOX_ENV_ are passed into the created sandbox runtime with the prefix removed. SANDBOX_ENV_INPUT_SOURCE=browser SANDBOX_ENV_NEXT_PUBLIC_INPUT_SOURCE=browser -SANDBOX_ENV_AGENT_NAME=lexvoice-browser-agent +SANDBOX_ENV_AGENT_NAME=frontdesk-agent SANDBOX_ENV_ROOM_INPUT_URL=http://127.0.0.1:8013/start SANDBOX_ENV_ROOM_INPUT_HOST=0.0.0.0 SANDBOX_ENV_ROOM_INPUT_PORT=8013 From 94ac1a4e1a2aebc1271bad057adfbaee407b8158 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 13:45:17 +0800 Subject: [PATCH 08/16] Fix sandbox gateway review issues --- server/sandbox-gateway/server.mjs | 19 +++++-- server/sandbox-gateway/session-store.mjs | 39 +++++++++++-- server/sandbox-gateway/warm-pool.mjs | 22 ++++++- tests/sandbox-gateway-proxy.test.mjs | 46 +++++++++++++++ tests/sandbox-gateway-session-store.test.mjs | 60 +++++++++++++++++++- tests/sandbox-gateway-warm-pool.test.mjs | 30 ++++++++++ 6 files changed, 203 insertions(+), 13 deletions(-) diff --git a/server/sandbox-gateway/server.mjs b/server/sandbox-gateway/server.mjs index e21a5836c..e8419d873 100644 --- a/server/sandbox-gateway/server.mjs +++ b/server/sandbox-gateway/server.mjs @@ -1,4 +1,5 @@ import http from 'node:http'; +import { once } from 'node:events'; import { URL } from 'node:url'; import { BrokerClient } from './broker-client.mjs'; import { readSandboxGatewayConfig } from './config.mjs'; @@ -210,10 +211,7 @@ async function proxyToSandbox({ req, res, url, session, config }) { return; } writeResponseHeaders(res, response, { fetchedBody: true }); - for await (const chunk of response.body) { - res.write(chunk); - } - res.end(); + await writeProxyResponseBody(res, response.body); logGateway('info', 'proxy.request.done', { method: req.method || 'GET', path: url.pathname, @@ -225,6 +223,16 @@ async function proxyToSandbox({ req, res, url, session, config }) { }); } +export async function writeProxyResponseBody(res, body) { + for await (const chunk of body) { + if (res.write(chunk)) { + continue; + } + await once(res, 'drain'); + } + res.end(); +} + function writeResponseHeaders(res, response, { fetchedBody = false } = {}) { res.statusCode = response.status; response.headers.forEach((value, key) => { @@ -349,6 +357,7 @@ export function startSandboxGateway(config = readSandboxGatewayConfig()) { tokenTtlMs: config.tokenTtlMs, sandboxTtlSeconds: config.sandboxTtlSeconds, stateFile: config.stateFile, + logger: logGateway, }); const releaseInterval = setInterval(() => { store.releaseExpired().catch((error) => { @@ -692,7 +701,7 @@ function escapeHtml(value) { } function escapeJsonString(value) { - return JSON.stringify(String(value)).slice(1, -1); + return JSON.stringify(String(value)).slice(1, -1).replaceAll('<', '\\u003c'); } if (import.meta.url === `file://${process.argv[1]}`) { diff --git a/server/sandbox-gateway/session-store.mjs b/server/sandbox-gateway/session-store.mjs index ed6a6ba23..fb887e0dc 100644 --- a/server/sandbox-gateway/session-store.mjs +++ b/server/sandbox-gateway/session-store.mjs @@ -22,6 +22,7 @@ export class SessionStore { sandboxTtlSeconds = 3_600, stateFile = '', warmPool = null, + logger = () => undefined, }) { this.broker = broker; this.warmPool = warmPool; @@ -33,6 +34,7 @@ export class SessionStore { this.tokenTtlMs = tokenTtlMs; this.sandboxTtlSeconds = sandboxTtlSeconds; this.stateFile = stateFile; + this.logger = logger; this.sessions = []; this.acquireQueue = Promise.resolve(); this.load(); @@ -43,8 +45,16 @@ export class SessionStore { return; } - const parsed = JSON.parse(fs.readFileSync(this.stateFile, 'utf8')); - this.sessions = Array.isArray(parsed.sessions) ? parsed.sessions : []; + try { + const parsed = JSON.parse(fs.readFileSync(this.stateFile, 'utf8')); + this.sessions = Array.isArray(parsed.sessions) ? parsed.sessions : []; + } catch (error) { + this.sessions = []; + this.log('warn', 'session.store.load.failed', { + stateFile: this.stateFile, + message: error instanceof Error ? error.message : String(error), + }); + } } save() { @@ -174,11 +184,20 @@ export class SessionStore { async release({ slug, token = '' }) { const session = this.requireSession({ slug, token }); const stored = this.sessions.find((candidate) => candidate.slug === slug); - await this.broker.releaseSandbox(session.sandboxId); - stored.status = 'released'; - stored.releasedAt = this.now(); + stored.status = 'releasing'; this.save(); - return { ...stored }; + try { + await this.broker.releaseSandbox(session.sandboxId); + stored.status = 'released'; + stored.releasedAt = this.now(); + this.save(); + return { ...stored }; + } catch (error) { + stored.status = 'active'; + stored.releasedAt = null; + this.save(); + throw error; + } } async releaseExpired() { @@ -228,6 +247,14 @@ export class SessionStore { } throw new GatewayError('failed to allocate unique session slug', 500); } + + log(level, event, details = {}) { + try { + this.logger(level, event, details); + } catch { + // Logging must never affect session lifecycle operations. + } + } } function safeEqual(left, right) { diff --git a/server/sandbox-gateway/warm-pool.mjs b/server/sandbox-gateway/warm-pool.mjs index f99a52311..f1f23130c 100644 --- a/server/sandbox-gateway/warm-pool.mjs +++ b/server/sandbox-gateway/warm-pool.mjs @@ -8,6 +8,7 @@ export class WarmSandboxPool { sandboxTtlSeconds = 3600, maxIdleSeconds = 300, warmupFullBody = true, + maxMaintainCreateFailures = 3, now = () => Date.now(), randomId = () => crypto.randomBytes(8).toString('base64url'), logger = () => undefined, @@ -19,6 +20,7 @@ export class WarmSandboxPool { this.maxIdleMs = Math.max(1, Number(maxIdleSeconds) || 300) * 1000; this.refreshLeadMs = Math.min(60_000, Math.floor(this.maxIdleMs / 2)); this.warmupFullBody = Boolean(warmupFullBody); + this.maxMaintainCreateFailures = Math.max(1, Number(maxMaintainCreateFailures) || 3); this.now = now; this.randomId = randomId; this.logger = logger; @@ -64,8 +66,24 @@ export class WarmSandboxPool { const target = this.targetFor({ activeCount }); await this.releaseExtraReadyItems({ target }); + let createFailures = 0; while (!this.stopped && this.poolFootprint() < target) { - await this.createWarmSandbox({ trigger }); + const created = await this.createWarmSandbox({ trigger }); + if (created) { + createFailures = 0; + continue; + } + + createFailures += 1; + if (createFailures >= this.maxMaintainCreateFailures) { + this.log('error', 'warm_pool.maintain.create_limit_reached', { + trigger, + failures: createFailures, + target, + footprint: this.poolFootprint(), + }); + break; + } } await this.releaseExtraReadyItems({ target }); @@ -179,6 +197,7 @@ export class WarmSandboxPool { durationMs: this.now() - startedAt, expiresAt: new Date(item.expiresAt).toISOString(), }); + return true; } catch (error) { this.items = this.items.filter((candidate) => candidate !== item); this.log('error', 'warm_pool.create.failed', { @@ -187,6 +206,7 @@ export class WarmSandboxPool { durationMs: this.now() - startedAt, message: error instanceof Error ? error.message : String(error), }); + return false; } } diff --git a/tests/sandbox-gateway-proxy.test.mjs b/tests/sandbox-gateway-proxy.test.mjs index 8a08bcb16..1e05c8145 100644 --- a/tests/sandbox-gateway-proxy.test.mjs +++ b/tests/sandbox-gateway-proxy.test.mjs @@ -1,10 +1,12 @@ import assert from 'node:assert/strict'; +import { EventEmitter } from 'node:events'; import { test } from 'node:test'; import { buildProxyTarget, rewriteSandboxAppConfig, sandboxAppConfigOverrides, shouldDropProxyResponseHeader, + writeProxyResponseBody, } from '../server/sandbox-gateway/server.mjs'; test('sandbox gateway strips the session slug when proxying session-prefixed paths', () => { @@ -175,3 +177,47 @@ test('sandbox gateway rewrites unescaped agent name from proxied app config', () '' ); }); + +test('sandbox gateway escapes script-closing JSON sequences in rewritten app config', () => { + const body = ''; + + assert.equal( + rewriteSandboxAppConfig( + body, + { sandboxId: 'sbx_' }, + { agentName: 'agent_' } + ), + '' + ); +}); + +test('sandbox gateway waits for drain when proxy streaming backpressure is signaled', async () => { + const res = new (class extends EventEmitter { + chunks = []; + ended = false; + writeCalls = 0; + + write(chunk) { + this.writeCalls += 1; + this.chunks.push(Buffer.from(chunk).toString('utf8')); + if (this.writeCalls === 1) { + setImmediate(() => this.emit('drain')); + return false; + } + return true; + } + + end() { + this.ended = true; + } + })(); + async function* body() { + yield Buffer.from('a'); + yield Buffer.from('b'); + } + + await writeProxyResponseBody(res, body()); + + assert.deepEqual(res.chunks, ['a', 'b']); + assert.equal(res.ended, true); +}); diff --git a/tests/sandbox-gateway-session-store.test.mjs b/tests/sandbox-gateway-session-store.test.mjs index 04c162f6a..ebc06759e 100644 --- a/tests/sandbox-gateway-session-store.test.mjs +++ b/tests/sandbox-gateway-session-store.test.mjs @@ -1,5 +1,5 @@ import assert from 'node:assert/strict'; -import { mkdtempSync, rmSync } from 'node:fs'; +import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; import path from 'node:path'; import { test } from 'node:test'; @@ -103,6 +103,64 @@ test('sandbox gateway keeps active sessions releasable when broker release fails } }); +test('sandbox gateway starts with empty state when the session file is corrupt', () => { + const dir = mkdtempSync(path.join(tmpdir(), 'lv-sandbox-gateway-')); + const events = []; + try { + const stateFile = path.join(dir, 'sessions.json'); + writeFileSync(stateFile, '{not-json', { mode: 0o600 }); + + const store = new SessionStore({ + broker: createBroker(), + stateFile, + logger: (level, event, details) => events.push({ level, event, details }), + }); + + assert.deepEqual(store.sessions, []); + assert.equal(events[0].level, 'warn'); + assert.equal(events[0].event, 'session.store.load.failed'); + } finally { + rmSync(dir, { recursive: true, force: true }); + } +}); + +test('sandbox gateway only releases a session once across concurrent requests', async () => { + let releaseCalls = 0; + let releaseSandbox; + const releaseStarted = new Promise((resolve) => { + releaseSandbox = resolve; + }); + const { broker, store, cleanup } = createStore(); + broker.releaseSandbox = async (sandboxId) => { + releaseCalls += 1; + broker.calls.push({ type: 'release', sandboxId }); + await releaseStarted; + }; + + try { + const session = await store.acquire({ ip: '10.0.0.1' }); + const firstRelease = store.release({ + slug: session.slug, + token: session.token, + ip: '10.0.0.1', + }); + const secondRelease = store.release({ + slug: session.slug, + token: session.token, + ip: '10.0.0.1', + }); + + await assert.rejects(secondRelease, /session not found/); + releaseSandbox(); + await firstRelease; + + assert.equal(releaseCalls, 1); + assert.equal(store.sessions[0].status, 'released'); + } finally { + cleanup(); + } +}); + test('sandbox gateway checks out a warm sandbox before cold creation', async () => { const { broker, store, cleanup } = createStore({ warmPool: { diff --git a/tests/sandbox-gateway-warm-pool.test.mjs b/tests/sandbox-gateway-warm-pool.test.mjs index 9c98e501d..c47ab591a 100644 --- a/tests/sandbox-gateway-warm-pool.test.mjs +++ b/tests/sandbox-gateway-warm-pool.test.mjs @@ -147,3 +147,33 @@ test('warm pool refreshes before idle expiry and releases the older ready sandbo const sandbox = await pool.checkout(); assert.equal(sandbox.sandboxId, 'sbx-lv_pool_new'); }); + +test('warm pool stops refilling after repeated create failures', async () => { + const calls = []; + const events = []; + const pool = new WarmSandboxPool({ + broker: { + calls, + async createSandbox({ sessionId }) { + calls.push({ type: 'create', sessionId }); + throw new Error('broker unavailable'); + }, + async releaseSandbox() {}, + }, + targetSize: 1, + maxActiveSessions: 5, + maxMaintainCreateFailures: 3, + now: () => 1_000, + randomId: () => `fail-${calls.length}`, + logger: (level, event, details) => events.push({ level, event, details }), + }); + + await pool.maintain({ activeCount: 0, trigger: 'test' }); + + assert.equal(calls.length, 3); + assert.equal(pool.items.length, 0); + assert.equal( + events.some((event) => event.event === 'warm_pool.maintain.create_limit_reached'), + true + ); +}); From 7a823d171d63971053015d2140d513c60f9a9705 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 15:06:07 +0800 Subject: [PATCH 09/16] Remove frontend sandbox gateway runtime --- .env.example | 88 +-- README.md | 56 +- docs/liveavatar-sandbox-gateway-flow.svg | 82 -- next.config.ts | 2 +- package.json | 2 - scripts/liveavatar-mode.mjs | 20 - scripts/start-liveavatar.mjs | 22 - scripts/start-sandbox-gateway.sh | 16 - server/sandbox-gateway/broker-client.mjs | 389 ---------- server/sandbox-gateway/config.mjs | 90 --- .../sandbox-gateway/local-target-client.mjs | 58 -- server/sandbox-gateway/server.mjs | 709 ------------------ server/sandbox-gateway/session-store.mjs | 267 ------- server/sandbox-gateway/signature-auth.mjs | 169 ----- server/sandbox-gateway/warm-pool.mjs | 281 ------- tests/liveavatar-mode.test.mjs | 17 - tests/sandbox-gateway-broker-client.test.mjs | 162 ---- tests/sandbox-gateway-config.test.mjs | 21 - tests/sandbox-gateway-proxy.test.mjs | 223 ------ tests/sandbox-gateway-session-store.test.mjs | 232 ------ tests/sandbox-gateway-signature-auth.test.mjs | 140 ---- tests/sandbox-gateway-warm-pool.test.mjs | 179 ----- 22 files changed, 10 insertions(+), 3215 deletions(-) delete mode 100644 docs/liveavatar-sandbox-gateway-flow.svg delete mode 100644 scripts/liveavatar-mode.mjs delete mode 100644 scripts/start-liveavatar.mjs delete mode 100644 scripts/start-sandbox-gateway.sh delete mode 100644 server/sandbox-gateway/broker-client.mjs delete mode 100644 server/sandbox-gateway/config.mjs delete mode 100644 server/sandbox-gateway/local-target-client.mjs delete mode 100644 server/sandbox-gateway/server.mjs delete mode 100644 server/sandbox-gateway/session-store.mjs delete mode 100644 server/sandbox-gateway/signature-auth.mjs delete mode 100644 server/sandbox-gateway/warm-pool.mjs delete mode 100644 tests/liveavatar-mode.test.mjs delete mode 100644 tests/sandbox-gateway-broker-client.test.mjs delete mode 100644 tests/sandbox-gateway-config.test.mjs delete mode 100644 tests/sandbox-gateway-proxy.test.mjs delete mode 100644 tests/sandbox-gateway-session-store.test.mjs delete mode 100644 tests/sandbox-gateway-signature-auth.test.mjs delete mode 100644 tests/sandbox-gateway-warm-pool.test.mjs diff --git a/.env.example b/.env.example index eaeefb9d3..7fd8a8310 100644 --- a/.env.example +++ b/.env.example @@ -9,89 +9,5 @@ # development where this repository is launched directly with `pnpm dev`. # In that case, define only the variables needed for that standalone run. -# Sandbox Gateway server-only example: -# Put real deployment values in `.env.sandbox-gateway`; do not expose broker -# credentials with NEXT_PUBLIC_ variables. -# -# Only gateway mode switch: -# 0 = run the normal frontend app -# 1 = start the LiveAvatar Sandbox Gateway -LIVEAVATAR_USE_SANDBOX=0 - -# Gateway runtime provider: -# sandbox = create real sandbox instances through Sandbox Broker -# local = proxy to LIVEAVATAR_LOCAL_PROXY_BASE_URL for local smoke tests -LIVEAVATAR_PROVIDER=sandbox - -# Gateway listen port. PORT is read first by the gateway runtime. -PORT=18090 -LIVEAVATAR_GATEWAY_PORT=18090 - -# Gateway URL token lifetime and active-session limit. -LIVEAVATAR_MAX_ACTIVE_SESSIONS=5 -LIVEAVATAR_TOKEN_TTL_SECONDS=3600 -LIVEAVATAR_STATE_FILE=./.sandbox-gateway/sessions.json - -# Optional warm pool: -# 0 = disabled; every request cold-creates a sandbox -# N = keep up to N ready idle sandboxes, bounded by LIVEAVATAR_MAX_ACTIVE_SESSIONS -# Pooled sandboxes request SANDBOX_TTL_SECONDS + LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS -# so a sandbox can sit idle briefly without stealing user session lifetime. -LIVEAVATAR_WARM_POOL_SIZE=0 -LIVEAVATAR_WARM_POOL_REFILL_INTERVAL_SECONDS=10 -LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS=300 -# 1 = during pool refill, request the sandbox home page and read the full body. -# This exposes startup timing in logs and warms caches only if the sandbox app caches it. -LIVEAVATAR_WARM_POOL_WARMUP_FULL_BODY=1 - -# Gateway create-session authentication: -# none = allow direct browser GET / to create a sandbox -# signature = require Ed25519 signed POST /__gateway/sessions -LIVEAVATAR_GATEWAY_AUTH=none -LIVEAVATAR_SIGNATURE_MAX_SKEW_SECONDS=300 -LIVEAVATAR_SIGNATURE_NONCE_TTL_SECONDS=300 -LIVEAVATAR_SIGNATURE_CLIENTS=client_001: - -# Local provider settings, used only when LIVEAVATAR_PROVIDER=local. -LIVEAVATAR_LOCAL_PROXY_BASE_URL=http://127.0.0.1:4003/ -LIVEAVATAR_LOCAL_READY_TIMEOUT_SECONDS=10 - -# Sandbox Broker endpoint and credentials. SANDBOX_BROKER_TOKEN is a server secret. -SANDBOX_BROKER_URL=https://sandbox.local.lexmount.net/api -SANDBOX_BROKER_TOKEN= -SANDBOX_TEMPLATE_ID=tpl-8329b6cee1074751a787fe9c -SANDBOX_TENANT_ID=lexmount - -# Broker-side sandbox instance lifetime and exposed ports. -SANDBOX_TTL_SECONDS=3600 -SANDBOX_UI_PORT=4003 -SANDBOX_HEALTH_PORT=49999 -SANDBOX_EXTRA_PORTS=8013 -SANDBOX_READY_TIMEOUT_SECONDS=90 -SANDBOX_PROXY_BASE_TEMPLATE=https://sandbox.local.lexmount.net/api/v1/sandboxes/{sandbox_id}/proxy/{port}/ - -# Values with SANDBOX_ENV_ are passed into the created sandbox runtime with the prefix removed. -SANDBOX_ENV_INPUT_SOURCE=browser -SANDBOX_ENV_NEXT_PUBLIC_INPUT_SOURCE=browser -SANDBOX_ENV_AGENT_NAME=frontdesk-agent -SANDBOX_ENV_ROOM_INPUT_URL=http://127.0.0.1:8013/start -SANDBOX_ENV_ROOM_INPUT_HOST=0.0.0.0 -SANDBOX_ENV_ROOM_INPUT_PORT=8013 -SANDBOX_ENV_AVATAR_TYPE=NONE -SANDBOX_ENV_MODEL_TYPE=QWEN_REALTIME -SANDBOX_ENV_PUBLISH_VOICE=1 -SANDBOX_ENV_LEXVOICE_RUN_SYSTEMD=1 -SANDBOX_ENV_LEXVOICE_ATTACH_TMUX=0 -SANDBOX_ENV_LEXVOICE_UI_URL=https://liveavatar.local.lexmount.net -SANDBOX_ENV_APP_CONFIG_ENDPOINT=http://:18090/__gateway/app-config -SANDBOX_ENV_NEXT_PUBLIC_APP_CONFIG_ENDPOINT=http://:18090/__gateway/app-config -SANDBOX_ENV_SANDBOX_ID=liveavatar-gateway -SANDBOX_ENV_LEXVOICE_UI_HOST=0.0.0.0 -SANDBOX_ENV_LEXVOICE_UI_PORT=4003 -SANDBOX_ENV_LIVEKIT_URL=wss://livekit.local.lexmount.net -SANDBOX_ENV_LIVEKIT_API_KEY= -SANDBOX_ENV_LIVEKIT_API_SECRET= -SANDBOX_ENV_QWEN_REALTIME_API_KEY= -SANDBOX_ENV_QWEN_REALTIME_MODEL=qwen3.5-omni-plus-realtime -SANDBOX_ENV_QWEN_REALTIME_BASE_URL=wss://dashscope.aliyuncs.com/api-ws/v1/realtime -SANDBOX_ENV_QWEN_REALTIME_VOICE=Serena +# Sandbox gateway deployment config moved to: +# ../lex-voice/deploy/liveavatar_gateway/env.example diff --git a/README.md b/README.md index 8f18417b2..458706d45 100644 --- a/README.md +++ b/README.md @@ -68,57 +68,15 @@ If you replace the custom connection details endpoint, it must echo the requeste `sessionId` and derive the same room name so dispatch and stop calls coordinate with the connected room. -### Sandbox Gateway Mode +### LiveAvatar Gateway Deployments -![LiveAvatar Sandbox Gateway Flow](docs/liveavatar-sandbox-gateway-flow.svg) +Sandbox-backed public deployments are owned by the sibling `../lex-voice` +repository. Set `LIVEAVATAR_USE_SANDBOX=1` in `../lex-voice/.env` and configure +broker, template, warm pool, and `SANDBOX_ENV_*` values in +`../lex-voice/deploy/liveavatar_gateway/.env`. -For deployments that should allocate an isolated sandbox per browser session, run -the server-only gateway entry from this frontend repository: - -```bash -pnpm sandbox-gateway -``` - -The gateway listens on `LIVEAVATAR_GATEWAY_PORT` (default `18090`). A request to -`/` creates a sandbox session and redirects to `/{slug}?token=...`. The gateway -validates that URL token for session-prefixed requests. For browser requests to -absolute app paths such as `/_next/*` or `/api/*`, the gateway recovers the -session from the same-origin `Referer` URL; it does not write a cookie. - -Gateway secrets stay in server environment variables, for example -`.env.sandbox-gateway`; do not prefix them with `NEXT_PUBLIC_`. Values prefixed -with `SANDBOX_ENV_` are forwarded to the sandbox runtime when it is created. - -Gateway logs are JSON lines written by the process stdout/stderr. The internal -ADP test launch redirects them to `logs/sandbox-gateway.log`. Sandbox lifecycle -events include `session.acquire.*`, `broker.create.*`, `broker.ready.*`, -`warm_pool.*`, `proxy.request.done`, and release events; timing fields use -milliseconds. - -Set `LIVEAVATAR_WARM_POOL_SIZE` to keep ready idle sandboxes. A request will -checkout a warm sandbox first and fall back to cold Broker creation when the pool -is empty. The pool is bounded by `LIVEAVATAR_MAX_ACTIVE_SESSIONS`, and pooled -sandboxes use `SANDBOX_TTL_SECONDS + LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS` so -short idle time does not reduce the user session lifetime. When -`LIVEAVATAR_WARM_POOL_WARMUP_FULL_BODY=1`, pool creation also reads the full -homepage response body. This records full startup timing and can warm app caches -when the sandbox runtime supports it; it does not remove per-request server -rendering latency from the sandbox app. - -When `LIVEAVATAR_GATEWAY_AUTH=signature`, sandbox creation must use a signed request: - -```text -POST /__gateway/sessions -X-Client-Id: client_001 -X-Timestamp: -X-Nonce: -X-Signature: -``` - -The caller signs the canonical request payload with its Ed25519 private key. The -gateway verifies it with the raw Ed25519 public key configured in -`LIVEAVATAR_SIGNATURE_CLIENTS`, then returns `{"url":"/{slug}?token=..."}` for -the browser to open. +This frontend repository only runs the Next.js UI. It does not create, release, +or warm sandbox sessions. For standalone frontend development, install dependencies and run the dev server directly: diff --git a/docs/liveavatar-sandbox-gateway-flow.svg b/docs/liveavatar-sandbox-gateway-flow.svg deleted file mode 100644 index a3ba1831b..000000000 --- a/docs/liveavatar-sandbox-gateway-flow.svg +++ /dev/null @@ -1,82 +0,0 @@ - - LiveAvatar Sandbox Gateway Flow - Browser-first sequence diagram for LiveAvatar sandbox gateway flow with URL token access and optional Ed25519 signature authorization. - - - - - - - - - - - - - - - LiveAvatar Sandbox Gateway Flow - - - 用户浏览器 / 域名 - 用户第一入口 - - - LiveAvatar Gateway - 创建、鉴权、代理 - - - 签名鉴权(可选) - Ed25519 verify + nonce - - - Sandbox Broker - - - Sandbox - - - - - - - - 1. 用户访问域名 / 18090 - - - 2. signature 模式:Gateway 校验签名、timestamp、nonce - - - 受控调用方 / ADP 持有私钥;Gateway 只保存客户端公钥 - - 3. Gateway 调 Broker 创建 sandbox - - - 4. Broker 启动实例 - - - 5. Gateway 返回 /xxx?token=... - - - 6. 浏览器访问专属链接(URL token) - - - 7. Gateway 校验 token / Referer 后反向代理应用请求 - - - 8. release / TTL 到期后,Gateway 调 Broker terminate - - diff --git a/next.config.ts b/next.config.ts index 597fcaa5a..067bb54f3 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,7 @@ import type { NextConfig } from 'next'; const nextConfig: NextConfig = { - allowedDevOrigins: ['liveavatar.lexmount.cn'], + allowedDevOrigins: ['liveavatar.lexmount.cn', 'liveavatar.local.lexmount.net'], }; export default nextConfig; diff --git a/package.json b/package.json index 985ffcc53..dc7484700 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,6 @@ "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "start:liveavatar": "node scripts/start-liveavatar.mjs", - "sandbox-gateway": "bash scripts/start-sandbox-gateway.sh", "lint": "eslint .", "test": "tsx --test tests/*.test.mjs", "format": "prettier --write .", diff --git a/scripts/liveavatar-mode.mjs b/scripts/liveavatar-mode.mjs deleted file mode 100644 index 9055c2330..000000000 --- a/scripts/liveavatar-mode.mjs +++ /dev/null @@ -1,20 +0,0 @@ -export function resolveLiveAvatarMode(env = process.env) { - const sandboxSwitch = readBooleanSwitch(env.LIVEAVATAR_USE_SANDBOX); - return sandboxSwitch ? 'sandbox-gateway' : 'app'; -} - -function readBooleanSwitch(value) { - const normalized = String(value ?? '') - .trim() - .toLowerCase(); - if (!normalized) { - return null; - } - if (['1', 'true', 'yes', 'on'].includes(normalized)) { - return true; - } - if (['0', 'false', 'no', 'off'].includes(normalized)) { - return false; - } - return null; -} diff --git a/scripts/start-liveavatar.mjs b/scripts/start-liveavatar.mjs deleted file mode 100644 index 21389e5ae..000000000 --- a/scripts/start-liveavatar.mjs +++ /dev/null @@ -1,22 +0,0 @@ -import { spawn } from 'node:child_process'; -import { resolveLiveAvatarMode } from './liveavatar-mode.mjs'; - -const mode = resolveLiveAvatarMode(process.env); - -if (mode === 'sandbox-gateway') { - const { startSandboxGateway } = await import('../server/sandbox-gateway/server.mjs'); - startSandboxGateway(); -} else { - const child = spawn('next', ['start'], { - env: process.env, - shell: process.platform === 'win32', - stdio: 'inherit', - }); - child.on('exit', (code, signal) => { - if (signal) { - process.kill(process.pid, signal); - return; - } - process.exit(code ?? 0); - }); -} diff --git a/scripts/start-sandbox-gateway.sh b/scripts/start-sandbox-gateway.sh deleted file mode 100644 index 6fc82f3d6..000000000 --- a/scripts/start-sandbox-gateway.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -cd "$(dirname "$0")/.." - -for env_file in .env .env.sandbox-gateway; do - if [[ -f "${env_file}" ]]; then - set -a - # shellcheck disable=SC1090 - source "${env_file}" - set +a - fi -done - -export LIVEAVATAR_USE_SANDBOX="${LIVEAVATAR_USE_SANDBOX:-1}" -exec node scripts/start-liveavatar.mjs diff --git a/server/sandbox-gateway/broker-client.mjs b/server/sandbox-gateway/broker-client.mjs deleted file mode 100644 index bdd26c096..000000000 --- a/server/sandbox-gateway/broker-client.mjs +++ /dev/null @@ -1,389 +0,0 @@ -export class BrokerClient { - constructor({ - baseUrl, - token, - templateId = '', - tenantId = 'lexmount', - port = 4003, - healthPort = 49999, - extraPorts = [], - readyTimeoutMs = 90_000, - readyPollMs = 1_000, - proxyBaseTemplate = '', - env = {}, - fetchImpl = globalThis.fetch, - logger = () => undefined, - }) { - this.baseUrl = stripTrailingSlash(baseUrl); - this.token = token; - this.templateId = templateId; - this.tenantId = tenantId; - this.port = Number(port); - this.healthPort = Number(healthPort); - this.extraPorts = extraPorts.map(Number).filter((port) => Number.isFinite(port) && port > 0); - this.readyTimeoutMs = Number(readyTimeoutMs); - this.readyPollMs = Number(readyPollMs); - this.proxyBaseTemplate = proxyBaseTemplate; - this.env = { ...env }; - this.fetch = fetchImpl; - this.logger = logger; - } - - async createSandbox({ sessionId, ttlSeconds, warmupFullBody = false }) { - if (!this.templateId) { - throw new Error('SANDBOX_TEMPLATE_ID is required'); - } - const startedAt = Date.now(); - this.log('info', 'broker.create.start', { - sessionId, - templateId: this.templateId, - tenantId: this.tenantId, - ttlSeconds, - uiPort: this.port, - healthPort: this.healthPort, - }); - - const payload = { - template_id: this.templateId, - tenant_id: this.tenantId, - session_id: sessionId, - source: 'agent-starter-react-sandbox-gateway', - description: `liveavatar ${sessionId}`, - lifetime_sec: ttlSeconds, - ports: this.resolveRequestedPorts(), - allow_internet_access: true, - metadata: { - app: 'liveavatar', - gateway: 'agent-starter-react', - }, - }; - if (Object.keys(this.env).length > 0) { - payload.env_vars = this.env; - } - - const data = await this.createSandboxWithRecovery({ payload, sessionId }); - const acceptedAt = Date.now(); - const sandboxId = data.sandbox_id || data.sandboxId || data.id; - if (!sandboxId) { - throw new Error('broker did not return sandbox id'); - } - this.log('info', 'broker.create.accepted', { - sessionId, - sandboxId, - uiPort: this.port, - healthPort: this.healthPort, - durationMs: acceptedAt - startedAt, - }); - - const proxyBaseUrl = this.resolveProxyBaseUrl(data, sandboxId, this.port); - try { - const ready = await this.waitForSandboxReady(data, sandboxId, proxyBaseUrl, { - warmupFullBody, - }); - const readyAt = Date.now(); - this.log('info', 'broker.ready', { - sessionId, - sandboxId, - uiPort: this.port, - healthPort: this.healthPort, - durationMs: readyAt - startedAt, - readyDurationMs: readyAt - acceptedAt, - healthReadyMs: ready.health?.durationMs ?? null, - healthAttempts: ready.health?.attempts ?? null, - uiReadyMs: ready.ui.durationMs, - uiAttempts: ready.ui.attempts, - uiWarmupBodyMs: ready.ui.bodyMs ?? null, - uiWarmupBytes: ready.ui.bodyBytes ?? null, - }); - } catch (error) { - this.log('error', 'broker.ready.failed', { - sessionId, - sandboxId, - durationMs: Date.now() - startedAt, - message: error instanceof Error ? error.message : String(error), - }); - await this.releaseSandbox(sandboxId).catch(() => undefined); - throw error; - } - - return { sandboxId, proxyBaseUrl }; - } - - resolveRequestedPorts() { - const envRoomInputPort = Number(this.env.ROOM_INPUT_PORT); - return [ - ...new Set( - [this.port, this.healthPort, envRoomInputPort, ...this.extraPorts].filter( - (port) => Number.isFinite(port) && port > 0 - ) - ), - ]; - } - - async releaseSandbox(sandboxId) { - const encodedSandboxId = encodeURIComponent(sandboxId); - this.log('info', 'broker.release.start', { sandboxId }); - await this.request(`/v1/sandboxes/${encodedSandboxId}/terminate`, { - method: 'POST', - }); - this.log('info', 'broker.release.done', { sandboxId }); - } - - async createSandboxWithRecovery({ payload, sessionId }) { - const startedAt = Date.now(); - try { - const data = await this.request('/v1/sandboxes', { - method: 'POST', - body: JSON.stringify(payload), - }); - this.log('info', 'broker.create.post.done', { - sessionId, - durationMs: Date.now() - startedAt, - }); - return data; - } catch (error) { - if (error.code !== 'BROKER_FETCH_FAILED') { - throw error; - } - - this.log('error', 'broker.create.fetch_failed', { - sessionId, - durationMs: Date.now() - startedAt, - message: error.message, - cause: error.cause instanceof Error ? error.cause.message : '', - code: error.cause?.code || '', - }); - - await sleep(Math.min(this.readyPollMs, 1_000)); - const existing = await this.findSandboxBySessionId(sessionId).catch((lookupError) => { - this.log('error', 'broker.create.lookup_failed', { - sessionId, - message: lookupError instanceof Error ? lookupError.message : String(lookupError), - }); - return null; - }); - if (existing) { - this.log('info', 'broker.create.recovered', { - sessionId, - sandboxId: existing.sandbox_id || existing.sandboxId || existing.id, - }); - return existing; - } - - this.log('info', 'broker.create.retry', { sessionId }); - const retryStartedAt = Date.now(); - const data = await this.request('/v1/sandboxes', { - method: 'POST', - body: JSON.stringify(payload), - }); - this.log('info', 'broker.create.retry.done', { - sessionId, - durationMs: Date.now() - retryStartedAt, - }); - return data; - } - } - - async findSandboxBySessionId(sessionId) { - const data = await this.request('/v1/sandboxes', { method: 'GET' }); - const items = Array.isArray(data.data) ? data.data : Array.isArray(data) ? data : []; - return ( - items.find( - (item) => - (item.session_id === sessionId || item.sessionId === sessionId) && - !['terminated', 'failed'].includes(String(item.status || item.sandboxStatus || '')) - ) || null - ); - } - - log(level, event, details = {}) { - try { - this.logger(level, event, details); - } catch { - // Logging must never affect sandbox lifecycle operations. - } - } - - resolveProxyBaseUrl(data, sandboxId, port = this.port) { - const accessUrls = data.access_urls || data.accessUrls; - const direct = accessUrls?.[String(port)] || accessUrls?.[port]; - if (direct) { - return ensureTrailingSlash(direct); - } - - const endpoints = Array.isArray(data.endpoints) ? data.endpoints : []; - const endpoint = endpoints.find((item) => Number(item.port) === Number(port) && item.url); - if (endpoint?.url) { - return ensureTrailingSlash(endpoint.url); - } - - if (this.proxyBaseTemplate) { - return ensureTrailingSlash( - this.proxyBaseTemplate - .replaceAll('{sandbox_id}', sandboxId) - .replaceAll('{port}', String(port)) - ); - } - - throw new Error(`broker did not return proxy url for port ${port}`); - } - - async waitForSandboxReady(data, sandboxId, proxyBaseUrl, { warmupFullBody = false } = {}) { - const healthBaseUrl = tryResolveEndpointUrl(() => - this.resolveProxyBaseUrl(data, sandboxId, this.healthPort) - ); - const result = { - health: null, - ui: null, - }; - if (healthBaseUrl) { - const healthUrl = new URL('health', healthBaseUrl).toString(); - this.log('info', 'broker.ready.health.start', { - sandboxId, - healthPort: this.healthPort, - }); - result.health = await waitForHttpOk({ - url: healthUrl, - fetchImpl: this.fetch, - timeoutMs: this.readyTimeoutMs, - pollMs: this.readyPollMs, - }); - this.log('info', 'broker.ready.health.done', { - sandboxId, - healthPort: this.healthPort, - durationMs: result.health.durationMs, - attempts: result.health.attempts, - statusCode: result.health.statusCode, - }); - } - - this.log('info', 'broker.ready.ui.start', { - sandboxId, - uiPort: this.port, - }); - result.ui = await waitForHttpOk({ - url: proxyBaseUrl, - fetchImpl: this.fetch, - timeoutMs: this.readyTimeoutMs, - pollMs: this.readyPollMs, - consumeBody: warmupFullBody, - }); - this.log('info', 'broker.ready.ui.done', { - sandboxId, - uiPort: this.port, - durationMs: result.ui.durationMs, - attempts: result.ui.attempts, - statusCode: result.ui.statusCode, - bodyMs: result.ui.bodyMs ?? null, - bodyBytes: result.ui.bodyBytes ?? null, - consumeBody: warmupFullBody, - }); - return result; - } - - async request(path, init = {}) { - if (!this.baseUrl) { - throw new Error('SANDBOX_BROKER_URL is required'); - } - if (!this.token) { - throw new Error('SANDBOX_BROKER_TOKEN is required'); - } - - const method = init.method || 'GET'; - const startedAt = Date.now(); - let response; - try { - response = await this.fetch(`${this.baseUrl}${path}`, { - ...init, - headers: { - Authorization: `Bearer ${this.token}`, - 'Content-Type': 'application/json', - ...(init.headers || {}), - }, - }); - } catch (error) { - const wrapped = new Error( - `broker fetch failed: ${method} ${path}: ${ - error instanceof Error ? error.message : String(error) - }` - ); - wrapped.code = 'BROKER_FETCH_FAILED'; - wrapped.cause = error; - throw wrapped; - } - const bodyText = await response.text(); - this.log(response.ok ? 'info' : 'error', 'broker.request.done', { - method, - path, - statusCode: response.status, - durationMs: Date.now() - startedAt, - }); - if (!response.ok) { - const error = new Error(`broker request failed: ${response.status} ${bodyText}`); - error.status = response.status; - error.body = bodyText; - throw error; - } - if (response.status === 204 || !bodyText) { - return {}; - } - return JSON.parse(bodyText); - } -} - -async function waitForHttpOk({ url, fetchImpl, timeoutMs, pollMs, consumeBody = false }) { - const startedAt = Date.now(); - const deadline = Date.now() + timeoutMs; - let lastError = null; - let attempts = 0; - - while (Date.now() <= deadline) { - attempts += 1; - try { - const response = await fetchImpl(url, { redirect: 'manual' }); - if (response.ok || response.status === 302 || response.status === 307) { - let bodyMs = null; - let bodyBytes = null; - if (consumeBody && response.body) { - const bodyStartedAt = Date.now(); - const buffer = await response.arrayBuffer(); - bodyMs = Date.now() - bodyStartedAt; - bodyBytes = buffer.byteLength; - } - return { - attempts, - durationMs: Date.now() - startedAt, - statusCode: response.status, - bodyMs, - bodyBytes, - }; - } - lastError = new Error(`ready check ${url} returned ${response.status}`); - } catch (error) { - lastError = error; - } - await sleep(pollMs); - } - - throw lastError || new Error(`timed out waiting for ${url}`); -} - -function tryResolveEndpointUrl(fn) { - try { - return fn(); - } catch { - return ''; - } -} - -function ensureTrailingSlash(value) { - return String(value).endsWith('/') ? String(value) : `${value}/`; -} - -function stripTrailingSlash(value) { - return String(value || '').replace(/\/+$/, ''); -} - -function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} diff --git a/server/sandbox-gateway/config.mjs b/server/sandbox-gateway/config.mjs deleted file mode 100644 index a020330b6..000000000 --- a/server/sandbox-gateway/config.mjs +++ /dev/null @@ -1,90 +0,0 @@ -export function readSandboxGatewayConfig(env = process.env) { - return { - port: readInt(env.PORT || env.LIVEAVATAR_GATEWAY_PORT, 18090), - provider: readString(env.LIVEAVATAR_PROVIDER, 'sandbox').toLowerCase(), - inviteCode: readString(env.LIVEAVATAR_INVITE_CODE), - tokenTtlMs: readInt(env.LIVEAVATAR_TOKEN_TTL_SECONDS, 3600) * 1000, - sandboxTtlSeconds: readInt(env.SANDBOX_TTL_SECONDS, 3600), - maxActiveSessions: readInt(env.LIVEAVATAR_MAX_ACTIVE_SESSIONS, 5), - warmPoolSize: readNonNegativeInt(env.LIVEAVATAR_WARM_POOL_SIZE, 0), - warmPoolRefillIntervalMs: readInt(env.LIVEAVATAR_WARM_POOL_REFILL_INTERVAL_SECONDS, 10) * 1000, - warmPoolMaxIdleSeconds: readInt(env.LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS, 300), - warmPoolWarmupFullBody: readBoolean(env.LIVEAVATAR_WARM_POOL_WARMUP_FULL_BODY, true), - stateFile: readString(env.LIVEAVATAR_STATE_FILE, './.sandbox-gateway/sessions.json'), - gatewayAuth: readString(env.LIVEAVATAR_GATEWAY_AUTH, 'none').toLowerCase(), - signatureClients: readString(env.LIVEAVATAR_SIGNATURE_CLIENTS), - signatureMaxSkewMs: readInt(env.LIVEAVATAR_SIGNATURE_MAX_SKEW_SECONDS, 300) * 1000, - signatureNonceTtlMs: readInt(env.LIVEAVATAR_SIGNATURE_NONCE_TTL_SECONDS, 300) * 1000, - brokerUrl: readString(env.SANDBOX_BROKER_URL), - brokerToken: readString(env.SANDBOX_BROKER_TOKEN), - sandboxTemplateId: readString(env.SANDBOX_TEMPLATE_ID), - sandboxTenantId: readString(env.SANDBOX_TENANT_ID, 'lexmount'), - sandboxPort: readInt(env.SANDBOX_UI_PORT, 4003), - sandboxHealthPort: readInt(env.SANDBOX_HEALTH_PORT, 49999), - sandboxExtraPorts: readPortList(env.SANDBOX_EXTRA_PORTS), - sandboxReadyTimeoutMs: readInt(env.SANDBOX_READY_TIMEOUT_SECONDS, 90) * 1000, - sandboxReadyPollMs: readInt(env.SANDBOX_READY_POLL_MS, 1000), - sandboxProxyBaseTemplate: readString( - env.SANDBOX_PROXY_BASE_TEMPLATE, - 'https://sandbox.local.lexmount.net/api/v1/sandboxes/{sandbox_id}/proxy/{port}/' - ), - sandboxEnv: readPrefixedEnv(env, 'SANDBOX_ENV_'), - localProxyBaseUrl: readString(env.LIVEAVATAR_LOCAL_PROXY_BASE_URL, 'http://127.0.0.1:4003/'), - localReadyTimeoutMs: readInt(env.LIVEAVATAR_LOCAL_READY_TIMEOUT_SECONDS, 10) * 1000, - localReadyPollMs: readInt(env.LIVEAVATAR_LOCAL_READY_POLL_MS, 500), - appConfigAgentName: readString(env.LIVEAVATAR_AGENT_NAME), - }; -} - -function readString(value, fallback = '') { - const normalized = String(value ?? '').trim(); - return normalized || fallback; -} - -function readInt(value, fallback) { - const parsed = Number.parseInt(String(value ?? ''), 10); - return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; -} - -function readNonNegativeInt(value, fallback) { - const parsed = Number.parseInt(String(value ?? ''), 10); - return Number.isFinite(parsed) && parsed >= 0 ? parsed : fallback; -} - -function readBoolean(value, fallback) { - const normalized = String(value ?? '') - .trim() - .toLowerCase(); - if (!normalized) { - return fallback; - } - if (['1', 'true', 'yes', 'on'].includes(normalized)) { - return true; - } - if (['0', 'false', 'no', 'off'].includes(normalized)) { - return false; - } - return fallback; -} - -function readPortList(value) { - return String(value ?? '') - .split(',') - .map((item) => Number.parseInt(item.trim(), 10)) - .filter((port) => Number.isFinite(port) && port > 0); -} - -function readPrefixedEnv(env, prefix) { - const values = {}; - for (const [key, value] of Object.entries(env)) { - if (!key.startsWith(prefix)) { - continue; - } - const targetKey = key.slice(prefix.length); - if (!targetKey || value == null || String(value).trim() === '') { - continue; - } - values[targetKey] = String(value); - } - return values; -} diff --git a/server/sandbox-gateway/local-target-client.mjs b/server/sandbox-gateway/local-target-client.mjs deleted file mode 100644 index 907fe11c8..000000000 --- a/server/sandbox-gateway/local-target-client.mjs +++ /dev/null @@ -1,58 +0,0 @@ -export class LocalTargetClient { - constructor({ - proxyBaseUrl = 'http://127.0.0.1:4003/', - readyTimeoutMs = 10_000, - readyPollMs = 500, - fetchImpl = globalThis.fetch, - } = {}) { - this.proxyBaseUrl = ensureTrailingSlash(proxyBaseUrl); - this.readyTimeoutMs = Number(readyTimeoutMs); - this.readyPollMs = Number(readyPollMs); - this.fetch = fetchImpl; - } - - async createSandbox({ sessionId }) { - await waitForHttpOk({ - url: this.proxyBaseUrl, - fetchImpl: this.fetch, - timeoutMs: this.readyTimeoutMs, - pollMs: this.readyPollMs, - }); - return { - sandboxId: `local-${sessionId}`, - proxyBaseUrl: this.proxyBaseUrl, - }; - } - - async releaseSandbox() { - return undefined; - } -} - -async function waitForHttpOk({ url, fetchImpl, timeoutMs, pollMs }) { - const deadline = Date.now() + timeoutMs; - let lastError = null; - - while (Date.now() <= deadline) { - try { - const response = await fetchImpl(url, { redirect: 'manual' }); - if (response.ok || response.status === 302 || response.status === 307) { - return; - } - lastError = new Error(`ready check ${url} returned ${response.status}`); - } catch (error) { - lastError = error; - } - await sleep(pollMs); - } - - throw lastError || new Error(`timed out waiting for ${url}`); -} - -function ensureTrailingSlash(value) { - return String(value).endsWith('/') ? String(value) : `${value}/`; -} - -function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} diff --git a/server/sandbox-gateway/server.mjs b/server/sandbox-gateway/server.mjs deleted file mode 100644 index e8419d873..000000000 --- a/server/sandbox-gateway/server.mjs +++ /dev/null @@ -1,709 +0,0 @@ -import http from 'node:http'; -import { once } from 'node:events'; -import { URL } from 'node:url'; -import { BrokerClient } from './broker-client.mjs'; -import { readSandboxGatewayConfig } from './config.mjs'; -import { LocalTargetClient } from './local-target-client.mjs'; -import { GatewayError, SessionStore } from './session-store.mjs'; -import { SignatureAuthenticator } from './signature-auth.mjs'; -import { WarmSandboxPool } from './warm-pool.mjs'; - -const HOP_BY_HOP_HEADERS = new Set([ - 'connection', - 'keep-alive', - 'proxy-authenticate', - 'proxy-authorization', - 'te', - 'trailer', - 'transfer-encoding', - 'upgrade', -]); -const FETCH_BODY_METADATA_HEADERS = new Set(['content-encoding', 'content-length', 'etag']); -const BROWSER_INPUT_SOURCE = 'browser'; - -export function createServer({ config, store, signatureAuth = null, refillWarmPool = () => {} }) { - return http.createServer(async (req, res) => { - try { - await routeRequest({ req, res, config, store, signatureAuth, refillWarmPool }); - } catch (error) { - logGateway('error', 'request.failed', { - method: req.method || 'GET', - path: redactedRequestPath(req), - statusCode: error instanceof GatewayError ? error.statusCode : 500, - message: error instanceof Error ? error.message : String(error), - }); - sendError(res, error); - } - }); -} - -export async function routeRequest({ - req, - res, - config, - store, - signatureAuth = null, - refillWarmPool = () => {}, -}) { - const url = new URL(req.url || '/', 'http://gateway.local'); - const ip = clientIp(req); - const activeSessions = store.activeSessions(); - - if (url.pathname === '/_healthz') { - sendJson(res, 200, { - status: 'ok', - active: activeSessions.length, - max_active: config.maxActiveSessions, - warm_pool: - typeof store.warmPoolStats === 'function' - ? store.warmPoolStats() - : { - enabled: false, - target_size: 0, - configured_size: 0, - ready: 0, - warming: 0, - }, - }); - return; - } - - if (url.pathname === '/__gateway/app-config') { - if (req.method !== 'GET') { - throw new GatewayError('method not allowed', 405); - } - sendJson(res, 200, sandboxAppConfigOverrides({ agentName: config.appConfigAgentName })); - return; - } - - if (url.pathname === '/__gateway/sessions') { - if (req.method !== 'POST') { - throw new GatewayError('method not allowed', 405); - } - const body = await readJsonBody(req); - if (config.gatewayAuth === 'signature') { - if (!signatureAuth) { - throw new GatewayError('signature auth is not configured', 500); - } - const verified = signatureAuth.verify({ - headers: req.headers, - method: req.method, - path: url.pathname, - body, - }); - logGateway('info', 'signature.verify.done', { clientId: verified.clientId }); - } - const session = await acquireSession({ - store, - ip, - invite: String(body.invite || ''), - refillWarmPool, - }); - sendJson(res, 200, { - status: 'created', - url: `/${session.slug}?token=${encodeURIComponent(session.token)}`, - slug: session.slug, - expires_at: new Date(session.expiresAt).toISOString(), - }); - return; - } - - if (url.pathname === '/') { - if (config.gatewayAuth === 'signature') { - throw new GatewayError('signed session creation required', 401); - } - const session = await acquireSession({ - store, - ip, - invite: url.searchParams.get('invite') || '', - refillWarmPool, - }); - redirect(res, `/${session.slug}?token=${encodeURIComponent(session.token)}`); - return; - } - - const slug = firstPathSegment(url.pathname); - if (slug && url.pathname === `/${slug}/release`) { - const session = resolveRequestSession({ req, url, store, ip, expectedSlug: slug }); - if (req.method !== 'POST') { - sendReleasePage(res, session); - return; - } - logGateway('info', 'session.release.start', { slug }); - const released = await store.release({ - slug, - token: session.token, - ip, - }); - logGateway('info', 'session.release.done', { - slug, - sandboxId: released.sandboxId, - }); - sendJson(res, 200, { status: 'released', sandbox_id: released.sandboxId, slug }); - return; - } - - const active = resolveRequestSession({ req, url, store, ip }); - await proxyToSandbox({ req, res, url, session: active, config }); -} - -async function proxyToSandbox({ req, res, url, session, config }) { - const startedAt = Date.now(); - const target = buildProxyTarget({ - pathname: url.pathname, - search: url.search, - slug: session.slug, - proxyBaseUrl: session.proxyBaseUrl, - }); - const headers = new Headers(req.headers); - for (const header of HOP_BY_HOP_HEADERS) { - headers.delete(header); - } - headers.delete('host'); - headers.set('x-sandbox-id', session.sandboxId); - headers.set('x-liveavatar-session-slug', session.slug); - headers.set('x-liveavatar-session-id', session.sessionId); - - const init = { - method: req.method, - headers, - redirect: 'manual', - }; - if (!['GET', 'HEAD'].includes(req.method || 'GET')) { - init.body = req; - init.duplex = 'half'; - } - - const response = await fetch(target, init); - if (shouldRewriteSandboxAppConfig(response)) { - const body = await response.text(); - writeResponseHeaders(res, response, { fetchedBody: true }); - res.end( - rewriteSandboxAppConfig(body, session, { - agentName: config.appConfigAgentName, - }) - ); - logGateway('info', 'proxy.request.done', { - method: req.method || 'GET', - path: url.pathname, - slug: session.slug, - sandboxId: session.sandboxId, - statusCode: response.status, - durationMs: Date.now() - startedAt, - rewritten: true, - }); - return; - } - - res.statusCode = response.status; - if (!response.body) { - writeResponseHeaders(res, response); - res.end(); - logGateway('info', 'proxy.request.done', { - method: req.method || 'GET', - path: url.pathname, - slug: session.slug, - sandboxId: session.sandboxId, - statusCode: response.status, - durationMs: Date.now() - startedAt, - rewritten: false, - }); - return; - } - writeResponseHeaders(res, response, { fetchedBody: true }); - await writeProxyResponseBody(res, response.body); - logGateway('info', 'proxy.request.done', { - method: req.method || 'GET', - path: url.pathname, - slug: session.slug, - sandboxId: session.sandboxId, - statusCode: response.status, - durationMs: Date.now() - startedAt, - rewritten: false, - }); -} - -export async function writeProxyResponseBody(res, body) { - for await (const chunk of body) { - if (res.write(chunk)) { - continue; - } - await once(res, 'drain'); - } - res.end(); -} - -function writeResponseHeaders(res, response, { fetchedBody = false } = {}) { - res.statusCode = response.status; - response.headers.forEach((value, key) => { - if (shouldDropProxyResponseHeader(key, { fetchedBody })) { - return; - } - res.setHeader(key, value); - }); -} - -export function shouldDropProxyResponseHeader(headerName, { fetchedBody = false } = {}) { - const normalized = String(headerName || '').toLowerCase(); - if (HOP_BY_HOP_HEADERS.has(normalized)) { - return true; - } - return fetchedBody && FETCH_BODY_METADATA_HEADERS.has(normalized); -} - -function shouldRewriteSandboxAppConfig(response) { - const contentType = response.headers.get('content-type') || ''; - return contentType.includes('text/html') || contentType.includes('text/x-component'); -} - -export function rewriteSandboxAppConfig(body, session, { agentName = '' } = {}) { - const sandboxId = escapeJsonString(session.sandboxId); - let rewritten = String(body) - .replaceAll('\\"sandboxId\\":\\"$undefined\\"', `\\"sandboxId\\":\\"${sandboxId}\\"`) - .replaceAll('"sandboxId":"$undefined"', `"sandboxId":"${sandboxId}"`) - .replaceAll('\\"sandboxId\\":null', `\\"sandboxId\\":\\"${sandboxId}\\"`) - .replaceAll('"sandboxId":null', `"sandboxId":"${sandboxId}"`); - const normalizedAgentName = String(agentName || '').trim(); - if (!normalizedAgentName) { - return rewritten; - } - - const escapedAgentName = escapeJsonString(normalizedAgentName); - rewritten = rewritten - .replace(/\\"agentName\\":\\"[^"\\]*\\"/g, `\\"agentName\\":\\"${escapedAgentName}\\"`) - .replace(/"agentName":"[^"]*"/g, `"agentName":"${escapedAgentName}"`); - return rewritten; -} - -export function buildProxyTarget({ pathname, search, slug, proxyBaseUrl }) { - const targetPath = stripSessionPrefix(pathname, slug).replace(/^\/+/, ''); - const relativePath = targetPath || ''; - return new URL(`${relativePath}${gatewaySearchRemoved(search)}`, proxyBaseUrl).toString(); -} - -export function sandboxAppConfigOverrides({ agentName = '' } = {}) { - const overrides = { - inputSource: { - type: 'string', - value: BROWSER_INPUT_SOURCE, - }, - audioInputDevice: { - type: 'string', - value: BROWSER_INPUT_SOURCE, - }, - visionInputDevice: { - type: 'string', - value: BROWSER_INPUT_SOURCE, - }, - outputDevice: { - type: 'string', - value: BROWSER_INPUT_SOURCE, - }, - usesBrowserRawMediaInput: { - type: 'boolean', - value: true, - }, - usesBrowserRawAudioInput: { - type: 'boolean', - value: true, - }, - usesBrowserRawVideoInput: { - type: 'boolean', - value: true, - }, - usesServerRoomInput: { - type: 'boolean', - value: false, - }, - supportsScreenShare: { - type: 'boolean', - value: false, - }, - showDefaultCameraPreview: { - type: 'boolean', - value: false, - }, - }; - const normalizedAgentName = String(agentName || '').trim(); - if (normalizedAgentName) { - overrides.agentName = { - type: 'string', - value: normalizedAgentName, - }; - } - return overrides; -} - -export function startSandboxGateway(config = readSandboxGatewayConfig()) { - const provider = createProvider(config); - const signatureAuth = createSignatureAuth(config); - const warmPool = - config.warmPoolSize > 0 - ? new WarmSandboxPool({ - broker: provider, - targetSize: config.warmPoolSize, - maxActiveSessions: config.maxActiveSessions, - sandboxTtlSeconds: config.sandboxTtlSeconds, - maxIdleSeconds: config.warmPoolMaxIdleSeconds, - warmupFullBody: config.warmPoolWarmupFullBody, - logger: logGateway, - }) - : null; - const store = new SessionStore({ - broker: provider, - warmPool, - inviteCode: config.inviteCode, - maxActiveSessions: config.maxActiveSessions, - tokenTtlMs: config.tokenTtlMs, - sandboxTtlSeconds: config.sandboxTtlSeconds, - stateFile: config.stateFile, - logger: logGateway, - }); - const releaseInterval = setInterval(() => { - store.releaseExpired().catch((error) => { - logGateway('error', 'session.release_expired.failed', { - message: error instanceof Error ? error.message : String(error), - }); - }); - }, 60_000).unref(); - - const refillWarmPool = (trigger = 'manual') => { - if (!warmPool) { - return; - } - warmPool - .maintain({ - activeCount: store.activeSessions().length, - trigger, - }) - .catch((error) => { - logGateway('error', 'warm_pool.maintain.failed', { - trigger, - message: error instanceof Error ? error.message : String(error), - }); - }); - }; - - const warmPoolInterval = - warmPool && config.warmPoolRefillIntervalMs > 0 - ? setInterval(() => refillWarmPool('interval'), config.warmPoolRefillIntervalMs) - : null; - warmPoolInterval?.unref(); - - const server = createServer({ config, store, signatureAuth, refillWarmPool }); - let cleanupPromise = null; - const cleanupGateway = () => { - cleanupPromise ??= (async () => { - clearInterval(releaseInterval); - if (warmPoolInterval) { - clearInterval(warmPoolInterval); - } - if (warmPool) { - await warmPool.stop({ releaseIdle: true }); - } - })(); - return cleanupPromise; - }; - server.on('close', () => { - cleanupGateway().catch((error) => { - logGateway('error', 'gateway.cleanup.failed', { - message: error instanceof Error ? error.message : String(error), - }); - }); - }); - server.listen(config.port, '0.0.0.0', () => { - logGateway('info', 'gateway.listen', { - host: '0.0.0.0', - port: config.port, - provider: config.provider, - gatewayAuth: config.gatewayAuth, - maxActiveSessions: config.maxActiveSessions, - warmPoolSize: config.warmPoolSize, - warmPoolMaxIdleSeconds: config.warmPoolMaxIdleSeconds, - warmPoolWarmupFullBody: config.warmPoolWarmupFullBody, - }); - refillWarmPool('startup'); - }); - installShutdownHandlers(server, cleanupGateway); - return server; -} - -function installShutdownHandlers(server, cleanupGateway) { - let shuttingDown = false; - const shutdown = (signal) => { - if (shuttingDown) { - return; - } - shuttingDown = true; - logGateway('info', 'gateway.shutdown.start', { signal }); - server.close(async (error) => { - try { - await cleanupGateway(); - } catch (cleanupError) { - logGateway('error', 'gateway.cleanup.failed', { - signal, - message: cleanupError instanceof Error ? cleanupError.message : String(cleanupError), - }); - process.exitCode = 1; - } - if (error) { - logGateway('error', 'gateway.shutdown.failed', { - signal, - message: error instanceof Error ? error.message : String(error), - }); - process.exitCode = 1; - } else { - logGateway('info', 'gateway.shutdown.done', { signal }); - } - process.exit(); - }); - setTimeout(() => { - logGateway('error', 'gateway.shutdown.timeout', { signal }); - process.exit(1); - }, 10_000).unref(); - }; - - process.once('SIGINT', () => shutdown('SIGINT')); - process.once('SIGTERM', () => shutdown('SIGTERM')); -} - -function createSignatureAuth(config) { - if (config.gatewayAuth === 'none') { - return null; - } - if (config.gatewayAuth !== 'signature') { - throw new Error(`unsupported LIVEAVATAR_GATEWAY_AUTH: ${config.gatewayAuth}`); - } - return new SignatureAuthenticator({ - clients: config.signatureClients, - maxSkewMs: config.signatureMaxSkewMs, - nonceTtlMs: config.signatureNonceTtlMs, - }); -} - -function createProvider(config) { - if (config.provider === 'local') { - return new LocalTargetClient({ - proxyBaseUrl: config.localProxyBaseUrl, - readyTimeoutMs: config.localReadyTimeoutMs, - readyPollMs: config.localReadyPollMs, - }); - } - - if (config.provider !== 'sandbox') { - throw new Error(`unsupported LIVEAVATAR_PROVIDER: ${config.provider}`); - } - - return new BrokerClient({ - baseUrl: config.brokerUrl, - token: config.brokerToken, - templateId: config.sandboxTemplateId, - tenantId: config.sandboxTenantId, - port: config.sandboxPort, - healthPort: config.sandboxHealthPort, - extraPorts: config.sandboxExtraPorts, - readyTimeoutMs: config.sandboxReadyTimeoutMs, - readyPollMs: config.sandboxReadyPollMs, - proxyBaseTemplate: config.sandboxProxyBaseTemplate, - env: config.sandboxEnv, - logger: logGateway, - }); -} - -function stripSessionPrefix(pathname, slug) { - if (pathname === `/${slug}` || pathname === `/${slug}/`) { - return '/'; - } - if (pathname.startsWith(`/${slug}/`)) { - return pathname.slice(slug.length + 1) || '/'; - } - return pathname; -} - -function firstPathSegment(pathname) { - return ( - String(pathname || '') - .split('/') - .filter(Boolean)[0] || '' - ); -} - -function clientIp(req) { - const forwardedFor = String(req.headers['x-forwarded-for'] || '') - .split(',')[0] - .trim(); - return forwardedFor || req.socket.remoteAddress || 'unknown'; -} - -async function acquireSession({ store, ip, invite = '', refillWarmPool = () => {} }) { - const startedAt = Date.now(); - logGateway('info', 'session.acquire.start', { - inviteProvided: Boolean(invite), - }); - try { - const session = await store.acquire({ ip, invite }); - logGateway('info', 'session.acquire.done', { - slug: session.slug, - sandboxId: session.sandboxId, - allocationSource: session.allocationSource, - expiresAt: new Date(session.expiresAt).toISOString(), - durationMs: Date.now() - startedAt, - }); - refillWarmPool('post_acquire'); - return session; - } catch (error) { - logGateway('error', 'session.acquire.failed', { - durationMs: Date.now() - startedAt, - message: error instanceof Error ? error.message : String(error), - }); - throw error; - } -} - -async function readJsonBody(req) { - const raw = await readRequestBody(req, 16 * 1024); - if (!raw.trim()) { - return {}; - } - try { - return JSON.parse(raw); - } catch { - throw new GatewayError('invalid json body', 400); - } -} - -async function readRequestBody(req, limitBytes) { - let size = 0; - const chunks = []; - for await (const chunk of req) { - size += chunk.length; - if (size > limitBytes) { - throw new GatewayError('request body too large', 413); - } - chunks.push(chunk); - } - return Buffer.concat(chunks).toString('utf8'); -} - -function redactedRequestPath(req) { - try { - return new URL(req.url || '/', 'http://gateway.local').pathname; - } catch { - return '/'; - } -} - -function logGateway(level, event, details = {}) { - const payload = { - ts: new Date().toISOString(), - level, - component: 'liveavatar-sandbox-gateway', - event, - ...details, - }; - const line = JSON.stringify(payload); - if (level === 'error') { - console.error(line); - return; - } - console.log(line); -} - -function resolveRequestSession({ req, url, store, ip, expectedSlug = '' }) { - const current = sessionCandidateFromUrl(url); - if (current) { - if (expectedSlug && current.slug !== expectedSlug) { - throw new GatewayError('session slug mismatch', 401); - } - return store.requireSession({ ...current, ip }); - } - - const fromReferer = sessionCandidateFromReferer(req); - if (fromReferer) { - if (expectedSlug && fromReferer.slug !== expectedSlug) { - throw new GatewayError('session slug mismatch', 401); - } - return store.requireSession({ ...fromReferer, ip }); - } - - throw new GatewayError('token required', 401); -} - -function sessionCandidateFromUrl(url) { - const slug = firstPathSegment(url.pathname); - const token = url.searchParams.get('token') || ''; - return slug && token ? { slug, token } : null; -} - -function sessionCandidateFromReferer(req) { - const raw = String(req.headers.referer || req.headers.referrer || '').trim(); - if (!raw) { - return null; - } - - let refererUrl; - try { - refererUrl = new URL(raw, `http://${req.headers.host || 'gateway.local'}`); - } catch { - return null; - } - - const host = String(req.headers.host || '').trim(); - if (host && refererUrl.host !== host) { - return null; - } - return sessionCandidateFromUrl(refererUrl); -} - -function gatewaySearchRemoved(search) { - const searchParams = new URLSearchParams(search || ''); - searchParams.delete('token'); - const targetSearch = searchParams.toString(); - return targetSearch ? `?${targetSearch}` : ''; -} - -function redirect(res, location) { - res.statusCode = 302; - res.setHeader('Location', location); - res.end(); -} - -function sendJson(res, statusCode, payload) { - res.statusCode = statusCode; - res.setHeader('Content-Type', 'application/json; charset=utf-8'); - res.end(`${JSON.stringify(payload)}\n`); -} - -function sendReleasePage(res, session) { - res.statusCode = 200; - res.setHeader('Content-Type', 'text/html; charset=utf-8'); - const action = `/${encodeURIComponent(session.slug)}/release?token=${encodeURIComponent(session.token)}`; - res.end(` -

- -`); -} - -function sendError(res, error) { - const statusCode = error instanceof GatewayError ? error.statusCode : 500; - sendJson(res, statusCode, { - status: 'error', - error: error instanceof Error ? error.message : String(error), - }); -} - -function escapeHtml(value) { - return String(value) - .replaceAll('&', '&') - .replaceAll('<', '<') - .replaceAll('>', '>') - .replaceAll('"', '"'); -} - -function escapeJsonString(value) { - return JSON.stringify(String(value)).slice(1, -1).replaceAll('<', '\\u003c'); -} - -if (import.meta.url === `file://${process.argv[1]}`) { - startSandboxGateway(); -} diff --git a/server/sandbox-gateway/session-store.mjs b/server/sandbox-gateway/session-store.mjs deleted file mode 100644 index fb887e0dc..000000000 --- a/server/sandbox-gateway/session-store.mjs +++ /dev/null @@ -1,267 +0,0 @@ -import crypto from 'node:crypto'; -import fs from 'node:fs'; -import path from 'node:path'; - -export class GatewayError extends Error { - constructor(message, statusCode = 500) { - super(message); - this.name = 'GatewayError'; - this.statusCode = statusCode; - } -} - -export class SessionStore { - constructor({ - broker, - inviteCode = '', - maxActiveSessions = 5, - now = () => Date.now(), - randomId = () => crypto.randomBytes(8).toString('base64url'), - randomToken = () => crypto.randomBytes(24).toString('base64url'), - tokenTtlMs = 3_600_000, - sandboxTtlSeconds = 3_600, - stateFile = '', - warmPool = null, - logger = () => undefined, - }) { - this.broker = broker; - this.warmPool = warmPool; - this.inviteCode = inviteCode; - this.maxActiveSessions = maxActiveSessions; - this.now = now; - this.randomId = randomId; - this.randomToken = randomToken; - this.tokenTtlMs = tokenTtlMs; - this.sandboxTtlSeconds = sandboxTtlSeconds; - this.stateFile = stateFile; - this.logger = logger; - this.sessions = []; - this.acquireQueue = Promise.resolve(); - this.load(); - } - - load() { - if (!this.stateFile || !fs.existsSync(this.stateFile)) { - return; - } - - try { - const parsed = JSON.parse(fs.readFileSync(this.stateFile, 'utf8')); - this.sessions = Array.isArray(parsed.sessions) ? parsed.sessions : []; - } catch (error) { - this.sessions = []; - this.log('warn', 'session.store.load.failed', { - stateFile: this.stateFile, - message: error instanceof Error ? error.message : String(error), - }); - } - } - - save() { - if (!this.stateFile) { - return; - } - - fs.mkdirSync(path.dirname(this.stateFile), { recursive: true, mode: 0o700 }); - const tmpFile = `${this.stateFile}.${process.pid}.tmp`; - fs.writeFileSync(tmpFile, `${JSON.stringify({ sessions: this.sessions }, null, 2)}\n`, { - mode: 0o600, - }); - fs.renameSync(tmpFile, this.stateFile); - } - - async acquire({ ip, invite = '' }) { - const next = this.acquireQueue.then(() => this.acquireLocked({ ip, invite })); - this.acquireQueue = next.catch(() => undefined); - return next; - } - - async acquireLocked({ ip, invite = '' }) { - this.assertInvite(invite); - this.expireOldSessions(); - - if (this.activeSessions().length >= this.maxActiveSessions) { - throw new GatewayError('active session limit reached', 429); - } - - const slug = this.uniqueSlug(); - const token = this.randomToken(); - const sessionId = `lv_${slug}`; - let sandbox = await this.warmPool?.checkout(); - let allocationSource = sandbox?.allocationSource || 'warm_pool'; - if (!sandbox) { - allocationSource = 'on_demand'; - sandbox = await this.broker.createSandbox({ - sessionId, - ttlSeconds: this.sandboxTtlSeconds, - }); - } - const now = this.now(); - const session = { - sessionId, - slug, - token, - ip, - invite, - sandboxId: sandbox.sandboxId, - proxyBaseUrl: sandbox.proxyBaseUrl, - allocationSource, - status: 'active', - createdAt: now, - lastUsedAt: now, - expiresAt: now + this.tokenTtlMs, - releasedAt: null, - }; - this.sessions.push(session); - try { - this.save(); - } catch (error) { - this.sessions = this.sessions.filter((candidate) => candidate !== session); - try { - await this.releaseAllocatedSandbox(sandbox); - } catch (releaseError) { - if (error instanceof Error) { - error.releaseError = releaseError; - } - } - throw error; - } - return { ...session, reused: false }; - } - - async releaseAllocatedSandbox(sandbox) { - if (!sandbox?.sandboxId) { - return; - } - await this.broker.releaseSandbox(sandbox.sandboxId); - } - - warmPoolStats() { - if (!this.warmPool) { - return { - enabled: false, - target_size: 0, - configured_size: 0, - ready: 0, - warming: 0, - }; - } - return this.warmPool.stats({ activeCount: this.activeSessions().length }); - } - - requireSession({ slug, token = '' }) { - this.expireOldSessions(); - const session = this.sessions.find((candidate) => candidate.slug === slug); - if (!session || session.status !== 'active') { - throw new GatewayError('session not found', 404); - } - if (session.expiresAt <= this.now()) { - session.status = 'expired'; - this.save(); - throw new GatewayError('session expired', 401); - } - if (token && !safeEqual(token, session.token)) { - throw new GatewayError('invalid token', 401); - } - if (!token) { - throw new GatewayError('token required', 401); - } - - session.lastUsedAt = this.now(); - this.save(); - return { ...session }; - } - - getActiveBySlug(slug) { - this.expireOldSessions(); - const session = this.sessions.find( - (candidate) => - candidate.slug === slug && candidate.status === 'active' && candidate.expiresAt > this.now() - ); - return session ? { ...session } : null; - } - - async release({ slug, token = '' }) { - const session = this.requireSession({ slug, token }); - const stored = this.sessions.find((candidate) => candidate.slug === slug); - stored.status = 'releasing'; - this.save(); - try { - await this.broker.releaseSandbox(session.sandboxId); - stored.status = 'released'; - stored.releasedAt = this.now(); - this.save(); - return { ...stored }; - } catch (error) { - stored.status = 'active'; - stored.releasedAt = null; - this.save(); - throw error; - } - } - - async releaseExpired() { - this.expireOldSessions(); - const expired = this.sessions.filter( - (session) => session.status === 'expired' && session.sandboxId && !session.releasedAt - ); - for (const session of expired) { - await this.broker.releaseSandbox(session.sandboxId); - session.releasedAt = this.now(); - this.save(); - } - return expired.length; - } - - activeSessions() { - return this.sessions.filter( - (session) => session.status === 'active' && session.expiresAt > this.now() - ); - } - - assertInvite(invite) { - if (this.inviteCode && invite !== this.inviteCode) { - throw new GatewayError('invalid invite', 401); - } - } - - expireOldSessions() { - let changed = false; - for (const session of this.sessions) { - if (session.status === 'active' && session.expiresAt <= this.now()) { - session.status = 'expired'; - changed = true; - } - } - if (changed) { - this.save(); - } - } - - uniqueSlug() { - for (let attempts = 0; attempts < 10; attempts += 1) { - const slug = this.randomId(); - if (!this.sessions.some((session) => session.slug === slug)) { - return slug; - } - } - throw new GatewayError('failed to allocate unique session slug', 500); - } - - log(level, event, details = {}) { - try { - this.logger(level, event, details); - } catch { - // Logging must never affect session lifecycle operations. - } - } -} - -function safeEqual(left, right) { - const leftBuffer = Buffer.from(String(left)); - const rightBuffer = Buffer.from(String(right)); - if (leftBuffer.length !== rightBuffer.length) { - return false; - } - return crypto.timingSafeEqual(leftBuffer, rightBuffer); -} diff --git a/server/sandbox-gateway/signature-auth.mjs b/server/sandbox-gateway/signature-auth.mjs deleted file mode 100644 index ded0281b8..000000000 --- a/server/sandbox-gateway/signature-auth.mjs +++ /dev/null @@ -1,169 +0,0 @@ -import crypto from 'node:crypto'; -import { GatewayError } from './session-store.mjs'; - -const ED25519_SPKI_PREFIX = Buffer.from('302a300506032b6570032100', 'hex'); - -export class SignatureAuthenticator { - constructor({ - clients = '', - maxSkewMs = 300_000, - nonceTtlMs = 300_000, - now = () => Date.now(), - } = {}) { - this.clients = parseClients(clients); - this.maxSkewMs = maxSkewMs; - this.nonceTtlMs = nonceTtlMs; - this.now = now; - this.usedNonces = new Map(); - } - - verify({ headers, method, path, body = {} }) { - const clientId = requiredHeader(headers, 'x-client-id'); - const timestampRaw = requiredHeader(headers, 'x-timestamp'); - const nonce = requiredHeader(headers, 'x-nonce'); - const signatureRaw = requiredHeader(headers, 'x-signature'); - - const publicKey = this.clients.get(clientId); - if (!publicKey) { - throw new GatewayError('unknown client_id', 401); - } - - const timestamp = Number.parseInt(timestampRaw, 10); - if (!Number.isFinite(timestamp)) { - throw new GatewayError('invalid timestamp', 401); - } - - const nowSeconds = Math.floor(this.now() / 1000); - if (Math.abs(nowSeconds - timestamp) > Math.floor(this.maxSkewMs / 1000)) { - throw new GatewayError('request expired', 401); - } - - const canonical = buildCanonicalSignaturePayload({ - clientId, - timestamp, - nonce, - method, - path, - body, - }); - const signature = decodeBase64(signatureRaw, 'invalid signature'); - const ok = crypto.verify(null, canonical, publicKey, signature); - if (!ok) { - throw new GatewayError('invalid signature', 401); - } - - this.useNonce(clientId, nonce); - return { clientId }; - } - - useNonce(clientId, nonce) { - const now = this.now(); - this.cleanupNonces(now); - const key = `${clientId}:${nonce}`; - if (this.usedNonces.has(key)) { - throw new GatewayError('replay nonce', 401); - } - this.usedNonces.set(key, now + this.nonceTtlMs); - } - - cleanupNonces(now = this.now()) { - for (const [key, expiresAt] of this.usedNonces) { - if (expiresAt <= now) { - this.usedNonces.delete(key); - } - } - } -} - -export function buildCanonicalSignaturePayload({ clientId, timestamp, nonce, method, path, body }) { - const bodyHash = crypto.createHash('sha256').update(stableJsonStringify(body)).digest('hex'); - return Buffer.from( - stableJsonStringify({ - client_id: clientId, - timestamp, - nonce, - method: String(method || 'GET').toUpperCase(), - path, - body_hash: bodyHash, - }) - ); -} - -export function parseClients(value) { - const clients = new Map(); - for (const entry of String(value || '').split(',')) { - const trimmed = entry.trim(); - if (!trimmed) { - continue; - } - const separator = trimmed.indexOf(':'); - if (separator <= 0) { - throw new Error('LIVEAVATAR_SIGNATURE_CLIENTS entries must use client_id:public_key_base64'); - } - const clientId = trimmed.slice(0, separator).trim(); - const publicKeyBase64 = trimmed.slice(separator + 1).trim(); - if (!clientId || !publicKeyBase64) { - throw new Error('LIVEAVATAR_SIGNATURE_CLIENTS entries must use client_id:public_key_base64'); - } - clients.set(clientId, createEd25519PublicKey(publicKeyBase64)); - } - return clients; -} - -export function stableJsonStringify(value) { - if (value === null || typeof value !== 'object') { - return escapeJsonString(JSON.stringify(value)); - } - if (Array.isArray(value)) { - return `[${value.map((item) => stableJsonStringify(item)).join(',')}]`; - } - - return `{${Object.keys(value) - .sort() - .map((key) => `${escapeJsonString(JSON.stringify(key))}:${stableJsonStringify(value[key])}`) - .join(',')}}`; -} - -function createEd25519PublicKey(publicKeyBase64) { - const rawPublicKey = decodeBase64(publicKeyBase64, 'invalid public key'); - if (rawPublicKey.length !== 32) { - throw new Error('Ed25519 public keys must be raw 32-byte base64 values'); - } - return crypto.createPublicKey({ - key: Buffer.concat([ED25519_SPKI_PREFIX, rawPublicKey]), - format: 'der', - type: 'spki', - }); -} - -function requiredHeader(headers, name) { - const value = readHeader(headers, name); - if (!value) { - throw new GatewayError('missing signature headers', 401); - } - return value; -} - -function readHeader(headers, name) { - if (headers instanceof Headers) { - return headers.get(name) || ''; - } - return String(headers?.[name] || headers?.[name.toLowerCase()] || ''); -} - -function decodeBase64(value, message) { - try { - return Buffer.from(String(value || ''), 'base64'); - } catch { - throw new GatewayError(message, 401); - } -} - -function escapeJsonString(value) { - return value.replace(/[^\x00-\x7f]/g, (char) => - [...char] - .map((part) => part.codePointAt(0).toString(16).padStart(4, '0')) - .map((hex) => `\\u${hex}`) - .join('') - ); -} diff --git a/server/sandbox-gateway/warm-pool.mjs b/server/sandbox-gateway/warm-pool.mjs deleted file mode 100644 index f1f23130c..000000000 --- a/server/sandbox-gateway/warm-pool.mjs +++ /dev/null @@ -1,281 +0,0 @@ -import crypto from 'node:crypto'; - -export class WarmSandboxPool { - constructor({ - broker, - targetSize = 0, - maxActiveSessions = 5, - sandboxTtlSeconds = 3600, - maxIdleSeconds = 300, - warmupFullBody = true, - maxMaintainCreateFailures = 3, - now = () => Date.now(), - randomId = () => crypto.randomBytes(8).toString('base64url'), - logger = () => undefined, - }) { - this.broker = broker; - this.targetSize = Math.max(0, Number(targetSize) || 0); - this.maxActiveSessions = Math.max(0, Number(maxActiveSessions) || 0); - this.sandboxTtlSeconds = Math.max(1, Number(sandboxTtlSeconds) || 3600); - this.maxIdleMs = Math.max(1, Number(maxIdleSeconds) || 300) * 1000; - this.refreshLeadMs = Math.min(60_000, Math.floor(this.maxIdleMs / 2)); - this.warmupFullBody = Boolean(warmupFullBody); - this.maxMaintainCreateFailures = Math.max(1, Number(maxMaintainCreateFailures) || 3); - this.now = now; - this.randomId = randomId; - this.logger = logger; - this.items = []; - this.maintaining = null; - this.stopped = false; - } - - stats({ activeCount = 0 } = {}) { - const now = this.now(); - const target = this.targetFor({ activeCount }); - return { - enabled: this.targetSize > 0, - target_size: target, - configured_size: this.targetSize, - ready: this.readyItems().length, - warming: this.items.filter((item) => item.status === 'warming' && item.expiresAt > now) - .length, - max_idle_seconds: Math.round(this.maxIdleMs / 1000), - refresh_lead_seconds: Math.round(this.refreshLeadMs / 1000), - warmup_full_body: this.warmupFullBody, - }; - } - - async maintain({ activeCount = 0, trigger = 'manual' } = {}) { - if (this.stopped || this.targetSize <= 0) { - return; - } - if (this.maintaining) { - this.log('info', 'warm_pool.maintain.skip_busy', { trigger }); - return this.maintaining; - } - - this.maintaining = this.doMaintain({ activeCount, trigger }).finally(() => { - this.maintaining = null; - }); - return this.maintaining; - } - - async doMaintain({ activeCount, trigger }) { - const startedAt = this.now(); - await this.dropExpiredItems({ release: true }); - const target = this.targetFor({ activeCount }); - await this.releaseExtraReadyItems({ target }); - - let createFailures = 0; - while (!this.stopped && this.poolFootprint() < target) { - const created = await this.createWarmSandbox({ trigger }); - if (created) { - createFailures = 0; - continue; - } - - createFailures += 1; - if (createFailures >= this.maxMaintainCreateFailures) { - this.log('error', 'warm_pool.maintain.create_limit_reached', { - trigger, - failures: createFailures, - target, - footprint: this.poolFootprint(), - }); - break; - } - } - await this.releaseExtraReadyItems({ target }); - - this.log('info', 'warm_pool.maintain.done', { - trigger, - durationMs: this.now() - startedAt, - ...this.stats({ activeCount }), - }); - } - - async checkout() { - await this.dropExpiredItems({ release: true }); - const ready = this.readyItems(); - if (ready.length === 0) { - this.log('info', 'warm_pool.checkout.miss', this.stats()); - return null; - } - - const item = ready[0]; - this.items = this.items.filter((candidate) => candidate !== item); - this.log('info', 'warm_pool.checkout.hit', { - poolId: item.poolId, - sandboxId: item.sandboxId, - warmedMs: this.now() - item.readyAt, - idleMs: this.now() - item.createdAt, - ready: this.readyItems().length, - warming: this.items.filter((candidate) => candidate.status === 'warming').length, - }); - return { - sandboxId: item.sandboxId, - proxyBaseUrl: item.proxyBaseUrl, - allocationSource: 'warm_pool', - poolId: item.poolId, - warmedMs: this.now() - item.readyAt, - }; - } - - async stop({ releaseIdle = true } = {}) { - this.stopped = true; - if (!releaseIdle) { - this.items = []; - return; - } - - const items = this.items; - this.items = []; - await Promise.allSettled( - items - .filter((item) => item.sandboxId) - .map((item) => this.releaseItem(item, { reason: 'stop' })) - ); - } - - targetFor({ activeCount = 0 } = {}) { - const remainingCapacity = Math.max(0, this.maxActiveSessions - Number(activeCount || 0)); - return Math.min(this.targetSize, remainingCapacity); - } - - readyItems() { - const now = this.now(); - return this.items.filter((item) => item.status === 'ready' && item.expiresAt > now); - } - - poolFootprint() { - const now = this.now(); - return this.items.filter( - (item) => - item.status === 'warming' || - (item.status === 'ready' && item.expiresAt - now > this.refreshLeadMs) - ).length; - } - - async createWarmSandbox({ trigger }) { - const poolId = `lv_pool_${this.randomId()}`; - const item = { - poolId, - status: 'warming', - createdAt: this.now(), - readyAt: 0, - expiresAt: this.now() + this.maxIdleMs, - sandboxId: '', - proxyBaseUrl: '', - }; - this.items.push(item); - - const ttlSeconds = this.sandboxTtlSeconds + Math.ceil(this.maxIdleMs / 1000); - this.log('info', 'warm_pool.create.start', { - trigger, - poolId, - ttlSeconds, - ready: this.readyItems().length, - warming: this.items.filter((candidate) => candidate.status === 'warming').length, - warmupFullBody: this.warmupFullBody, - }); - - const startedAt = this.now(); - try { - const sandbox = await this.broker.createSandbox({ - sessionId: poolId, - ttlSeconds, - warmupFullBody: this.warmupFullBody, - }); - item.status = 'ready'; - item.sandboxId = sandbox.sandboxId; - item.proxyBaseUrl = sandbox.proxyBaseUrl; - item.readyAt = this.now(); - this.log('info', 'warm_pool.create.done', { - trigger, - poolId, - sandboxId: item.sandboxId, - durationMs: this.now() - startedAt, - expiresAt: new Date(item.expiresAt).toISOString(), - }); - return true; - } catch (error) { - this.items = this.items.filter((candidate) => candidate !== item); - this.log('error', 'warm_pool.create.failed', { - trigger, - poolId, - durationMs: this.now() - startedAt, - message: error instanceof Error ? error.message : String(error), - }); - return false; - } - } - - async releaseExtraReadyItems({ target }) { - const ready = this.readyItems().sort((left, right) => left.expiresAt - right.expiresAt); - const extraCount = Math.max(0, ready.length - target); - if (extraCount === 0) { - return; - } - - const extra = ready.slice(0, extraCount); - this.items = this.items.filter((item) => !extra.includes(item)); - for (const item of extra) { - await this.releaseItem(item, { reason: 'over_target' }); - } - } - - async dropExpiredItems({ release }) { - const now = this.now(); - const expired = this.items.filter((item) => item.expiresAt <= now); - if (expired.length === 0) { - return; - } - - this.items = this.items.filter((item) => !expired.includes(item)); - if (!release) { - return; - } - - for (const item of expired) { - await this.releaseItem(item, { reason: 'idle_expired' }); - } - } - - async releaseItem(item, { reason }) { - if (!item.sandboxId) { - return; - } - - const startedAt = this.now(); - this.log('info', 'warm_pool.release.start', { - reason, - poolId: item.poolId, - sandboxId: item.sandboxId, - }); - try { - await this.broker.releaseSandbox(item.sandboxId); - this.log('info', 'warm_pool.release.done', { - reason, - poolId: item.poolId, - sandboxId: item.sandboxId, - durationMs: this.now() - startedAt, - }); - } catch (error) { - this.log('error', 'warm_pool.release.failed', { - reason, - poolId: item.poolId, - sandboxId: item.sandboxId, - durationMs: this.now() - startedAt, - message: error instanceof Error ? error.message : String(error), - }); - } - } - - log(level, event, details = {}) { - try { - this.logger(level, event, details); - } catch { - // Logging must never affect pool lifecycle operations. - } - } -} diff --git a/tests/liveavatar-mode.test.mjs b/tests/liveavatar-mode.test.mjs deleted file mode 100644 index 347161618..000000000 --- a/tests/liveavatar-mode.test.mjs +++ /dev/null @@ -1,17 +0,0 @@ -import assert from 'node:assert/strict'; -import { test } from 'node:test'; -import { resolveLiveAvatarMode } from '../scripts/liveavatar-mode.mjs'; - -test('liveavatar mode defaults to the direct app', () => { - assert.equal(resolveLiveAvatarMode({}), 'app'); -}); - -test('LIVEAVATAR_USE_SANDBOX enables the sandbox gateway', () => { - assert.equal(resolveLiveAvatarMode({ LIVEAVATAR_USE_SANDBOX: '1' }), 'sandbox-gateway'); - assert.equal(resolveLiveAvatarMode({ LIVEAVATAR_USE_SANDBOX: 'true' }), 'sandbox-gateway'); -}); - -test('LIVEAVATAR_USE_SANDBOX=0 disables the sandbox gateway', () => { - assert.equal(resolveLiveAvatarMode({ LIVEAVATAR_USE_SANDBOX: '0' }), 'app'); - assert.equal(resolveLiveAvatarMode({ LIVEAVATAR_USE_SANDBOX: 'false' }), 'app'); -}); diff --git a/tests/sandbox-gateway-broker-client.test.mjs b/tests/sandbox-gateway-broker-client.test.mjs deleted file mode 100644 index e0c6c98fd..000000000 --- a/tests/sandbox-gateway-broker-client.test.mjs +++ /dev/null @@ -1,162 +0,0 @@ -import assert from 'node:assert/strict'; -import { test } from 'node:test'; -import { BrokerClient } from '../server/sandbox-gateway/broker-client.mjs'; - -test('sandbox gateway sends SANDBOX_ENV values when creating a sandbox', async () => { - const requests = []; - const client = new BrokerClient({ - baseUrl: 'https://broker.example.test', - token: 'broker-token', - templateId: 'tpl-liveavatar', - tenantId: 'lexmount', - port: 4003, - healthPort: 49999, - readyTimeoutMs: 1, - readyPollMs: 1, - env: { - INPUT_SOURCE: 'browser', - AGENT_NAME: 'lexvoice-browser-agent', - ROOM_INPUT_PORT: '8013', - }, - fetchImpl: async (url, init = {}) => { - requests.push({ url, init }); - if (String(url).endsWith('/v1/sandboxes')) { - return Response.json({ - id: 'sbx_broker_1', - sandbox_id: 'sbx_broker_1', - access_urls: { - 4003: 'https://sandbox.example.test/proxy/4003/', - }, - }); - } - return new Response('ok'); - }, - }); - - const sandbox = await client.createSandbox({ sessionId: 'lv_abc', ttlSeconds: 3600 }); - - assert.equal(sandbox.sandboxId, 'sbx_broker_1'); - const createRequest = requests.find((request) => String(request.url).endsWith('/v1/sandboxes')); - const payload = JSON.parse(createRequest.init.body); - assert.equal(payload.template_id, 'tpl-liveavatar'); - assert.equal(payload.lifetime_sec, 3600); - assert.equal(payload.allow_internet_access, true); - assert.deepEqual(payload.ports, [4003, 49999, 8013]); - assert.deepEqual(payload.env_vars, { - INPUT_SOURCE: 'browser', - AGENT_NAME: 'lexvoice-browser-agent', - ROOM_INPUT_PORT: '8013', - }); - assert.equal(Object.hasOwn(payload, 'env'), false); - assert.equal(Object.hasOwn(payload, 'ttl_sec'), false); -}); - -test('sandbox gateway sends template_id for the current sandbox broker API', async () => { - const requests = []; - const client = new BrokerClient({ - baseUrl: 'https://broker.example.test', - token: 'broker-token', - templateId: 'tpl-liveavatar', - tenantId: 'lexmount', - port: 4003, - healthPort: 49999, - readyTimeoutMs: 1, - readyPollMs: 1, - fetchImpl: async (url, init = {}) => { - requests.push({ url, init }); - if (String(url).endsWith('/v1/sandboxes')) { - return Response.json({ - sandbox_id: 'sbx_template_1', - access_urls: { - 4003: 'https://sandbox.example.test/proxy/4003/', - }, - }); - } - return new Response('ok'); - }, - }); - - await client.createSandbox({ sessionId: 'lv_template', ttlSeconds: 3600 }); - - const createRequest = requests.find((request) => String(request.url).endsWith('/v1/sandboxes')); - const payload = JSON.parse(createRequest.init.body); - assert.equal(payload.template_id, 'tpl-liveavatar'); - assert.deepEqual(payload.ports, [4003, 49999]); - assert.equal(Object.hasOwn(payload, 'profile'), false); -}); - -test('sandbox gateway terminates sandboxes through the current broker API', async () => { - const requests = []; - const client = new BrokerClient({ - baseUrl: 'https://broker.example.test', - token: 'broker-token', - fetchImpl: async (url, init = {}) => { - requests.push({ url, init }); - return Response.json({ ok: true }, { status: 202 }); - }, - }); - - await client.releaseSandbox('sbx/with space'); - - assert.equal( - requests[0].url, - 'https://broker.example.test/v1/sandboxes/sbx%2Fwith%20space/terminate' - ); - assert.equal(requests[0].init.method, 'POST'); -}); - -test('sandbox gateway requires SANDBOX_TEMPLATE_ID', async () => { - const client = new BrokerClient({ - baseUrl: 'https://broker.example.test', - token: 'broker-token', - fetchImpl: async () => Response.json({}), - }); - - await assert.rejects( - client.createSandbox({ sessionId: 'lv_missing_template', ttlSeconds: 3600 }), - /SANDBOX_TEMPLATE_ID is required/ - ); -}); - -test('sandbox gateway retries sandbox creation after a transient broker fetch failure', async () => { - const requests = []; - let createAttempts = 0; - const client = new BrokerClient({ - baseUrl: 'https://broker.example.test', - token: 'broker-token', - templateId: 'tpl-liveavatar', - tenantId: 'lexmount', - port: 4003, - healthPort: 49999, - readyTimeoutMs: 1, - readyPollMs: 1, - fetchImpl: async (url, init = {}) => { - requests.push({ url, init }); - if (String(url).endsWith('/v1/sandboxes') && init.method === 'POST') { - createAttempts += 1; - if (createAttempts === 1) { - throw new TypeError('fetch failed'); - } - return Response.json({ - sandbox_id: 'sbx_retry_1', - access_urls: { - 4003: 'https://sandbox.example.test/proxy/4003/', - }, - }); - } - if (String(url).endsWith('/v1/sandboxes') && init.method === 'GET') { - return Response.json({ data: [] }); - } - return new Response('ok'); - }, - }); - - const sandbox = await client.createSandbox({ sessionId: 'lv_retry', ttlSeconds: 3600 }); - - assert.equal(sandbox.sandboxId, 'sbx_retry_1'); - assert.equal(createAttempts, 2); - assert.deepEqual( - requests.map((request) => request.init.method || 'GET'), - ['POST', 'GET', 'POST', 'GET'] - ); -}); diff --git a/tests/sandbox-gateway-config.test.mjs b/tests/sandbox-gateway-config.test.mjs deleted file mode 100644 index 874f020e4..000000000 --- a/tests/sandbox-gateway-config.test.mjs +++ /dev/null @@ -1,21 +0,0 @@ -import assert from 'node:assert/strict'; -import { test } from 'node:test'; -import { readSandboxGatewayConfig } from '../server/sandbox-gateway/config.mjs'; - -test('sandbox gateway config reads the current sandbox template id', () => { - const config = readSandboxGatewayConfig({ - SANDBOX_TEMPLATE_ID: 'tpl-liveavatar', - SANDBOX_EXTRA_PORTS: '8013, 18084, bad', - LIVEAVATAR_WARM_POOL_SIZE: '2', - LIVEAVATAR_WARM_POOL_REFILL_INTERVAL_SECONDS: '7', - LIVEAVATAR_WARM_POOL_MAX_IDLE_SECONDS: '120', - LIVEAVATAR_WARM_POOL_WARMUP_FULL_BODY: '0', - }); - - assert.equal(config.sandboxTemplateId, 'tpl-liveavatar'); - assert.deepEqual(config.sandboxExtraPorts, [8013, 18084]); - assert.equal(config.warmPoolSize, 2); - assert.equal(config.warmPoolRefillIntervalMs, 7000); - assert.equal(config.warmPoolMaxIdleSeconds, 120); - assert.equal(config.warmPoolWarmupFullBody, false); -}); diff --git a/tests/sandbox-gateway-proxy.test.mjs b/tests/sandbox-gateway-proxy.test.mjs deleted file mode 100644 index 1e05c8145..000000000 --- a/tests/sandbox-gateway-proxy.test.mjs +++ /dev/null @@ -1,223 +0,0 @@ -import assert from 'node:assert/strict'; -import { EventEmitter } from 'node:events'; -import { test } from 'node:test'; -import { - buildProxyTarget, - rewriteSandboxAppConfig, - sandboxAppConfigOverrides, - shouldDropProxyResponseHeader, - writeProxyResponseBody, -} from '../server/sandbox-gateway/server.mjs'; - -test('sandbox gateway strips the session slug when proxying session-prefixed paths', () => { - const target = buildProxyTarget({ - pathname: '/abc123/api/client-config', - search: '?token=gateway-token&debug=1', - slug: 'abc123', - proxyBaseUrl: 'https://sandbox.local/api/v1/sandboxes/sbx/proxy/4003/', - }); - - assert.equal( - target, - 'https://sandbox.local/api/v1/sandboxes/sbx/proxy/4003/api/client-config?debug=1' - ); -}); - -test('sandbox gateway preserves absolute app paths', () => { - const target = buildProxyTarget({ - pathname: '/_next/static/chunk.js', - search: '?token=gateway-token', - slug: 'abc123', - proxyBaseUrl: 'https://sandbox.local/api/v1/sandboxes/sbx/proxy/4003/', - }); - - assert.equal( - target, - 'https://sandbox.local/api/v1/sandboxes/sbx/proxy/4003/_next/static/chunk.js' - ); -}); - -test('sandbox gateway drops response headers that are invalid after fetch body decoding', () => { - assert.equal(shouldDropProxyResponseHeader('connection'), true); - assert.equal(shouldDropProxyResponseHeader('content-encoding'), false); - assert.equal(shouldDropProxyResponseHeader('content-encoding', { fetchedBody: true }), true); - assert.equal(shouldDropProxyResponseHeader('content-length', { fetchedBody: true }), true); - assert.equal(shouldDropProxyResponseHeader('etag', { fetchedBody: true }), true); - assert.equal(shouldDropProxyResponseHeader('content-type', { fetchedBody: true }), false); -}); - -test('sandbox app config enables browser raw media while keeping browser microphone controls', () => { - assert.deepEqual(sandboxAppConfigOverrides(), { - inputSource: { - type: 'string', - value: 'browser', - }, - audioInputDevice: { - type: 'string', - value: 'browser', - }, - visionInputDevice: { - type: 'string', - value: 'browser', - }, - outputDevice: { - type: 'string', - value: 'browser', - }, - usesBrowserRawMediaInput: { - type: 'boolean', - value: true, - }, - usesBrowserRawAudioInput: { - type: 'boolean', - value: true, - }, - usesBrowserRawVideoInput: { - type: 'boolean', - value: true, - }, - usesServerRoomInput: { - type: 'boolean', - value: false, - }, - supportsScreenShare: { - type: 'boolean', - value: false, - }, - showDefaultCameraPreview: { - type: 'boolean', - value: false, - }, - }); -}); - -test('sandbox app config only overrides agent name when explicitly configured', () => { - assert.deepEqual(sandboxAppConfigOverrides({ agentName: 'frontdesk-agent' }).agentName, { - type: 'string', - value: 'frontdesk-agent', - }); -}); - -test('sandbox gateway preserves proxied app agent name by default', () => { - const body = - ''; - - assert.equal( - rewriteSandboxAppConfig(body, { sandboxId: 'sbx_123' }), - '' - ); -}); - -test('sandbox gateway can explicitly override proxied app agent name', () => { - const body = - ''; - - assert.equal( - rewriteSandboxAppConfig( - body, - { sandboxId: 'sbx_123' }, - { agentName: 'lexvoice-browser-agent' } - ), - '' - ); -}); - -test('sandbox gateway preserves unescaped agent name by default', () => { - const body = ''; - - assert.equal( - rewriteSandboxAppConfig(body, { sandboxId: 'sbx_123' }), - '' - ); -}); - -test('sandbox gateway can explicitly override unescaped agent name', () => { - const body = ''; - - assert.equal( - rewriteSandboxAppConfig( - body, - { sandboxId: 'sbx_123' }, - { agentName: 'lexvoice-browser-agent' } - ), - '' - ); -}); - -test('sandbox app config can explicitly override agent name', () => { - assert.deepEqual(sandboxAppConfigOverrides({ agentName: 'lexvoice-browser-agent' }).agentName, { - type: 'string', - value: 'lexvoice-browser-agent', - }); -}); - -test('sandbox gateway rewrites proxied app config for broker sandboxes', () => { - const body = - ''; - - assert.equal( - rewriteSandboxAppConfig( - body, - { sandboxId: 'sbx_123' }, - { agentName: 'lexvoice-browser-agent' } - ), - '' - ); -}); - -test('sandbox gateway rewrites unescaped agent name from proxied app config', () => { - const body = ''; - - assert.equal( - rewriteSandboxAppConfig( - body, - { sandboxId: 'sbx_123' }, - { agentName: 'lexvoice-browser-agent' } - ), - '' - ); -}); - -test('sandbox gateway escapes script-closing JSON sequences in rewritten app config', () => { - const body = ''; - - assert.equal( - rewriteSandboxAppConfig( - body, - { sandboxId: 'sbx_' }, - { agentName: 'agent_' } - ), - '' - ); -}); - -test('sandbox gateway waits for drain when proxy streaming backpressure is signaled', async () => { - const res = new (class extends EventEmitter { - chunks = []; - ended = false; - writeCalls = 0; - - write(chunk) { - this.writeCalls += 1; - this.chunks.push(Buffer.from(chunk).toString('utf8')); - if (this.writeCalls === 1) { - setImmediate(() => this.emit('drain')); - return false; - } - return true; - } - - end() { - this.ended = true; - } - })(); - async function* body() { - yield Buffer.from('a'); - yield Buffer.from('b'); - } - - await writeProxyResponseBody(res, body()); - - assert.deepEqual(res.chunks, ['a', 'b']); - assert.equal(res.ended, true); -}); diff --git a/tests/sandbox-gateway-session-store.test.mjs b/tests/sandbox-gateway-session-store.test.mjs deleted file mode 100644 index ebc06759e..000000000 --- a/tests/sandbox-gateway-session-store.test.mjs +++ /dev/null @@ -1,232 +0,0 @@ -import assert from 'node:assert/strict'; -import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'; -import { tmpdir } from 'node:os'; -import path from 'node:path'; -import { test } from 'node:test'; -import { SessionStore } from '../server/sandbox-gateway/session-store.mjs'; - -function createBroker() { - const calls = []; - return { - calls, - async createSandbox({ sessionId, ttlSeconds }) { - calls.push({ type: 'create', sessionId, ttlSeconds }); - return { - sandboxId: `sbx-${sessionId}`, - proxyBaseUrl: `https://sandbox.local/api/v1/sandboxes/sbx-${sessionId}/proxy/4003/`, - }; - }, - async releaseSandbox(sandboxId) { - calls.push({ type: 'release', sandboxId }); - }, - }; -} - -function createStore(options = {}) { - const dir = mkdtempSync(path.join(tmpdir(), 'lv-sandbox-gateway-')); - const broker = createBroker(); - const ids = ['abc123', 'def456', 'ghi789']; - const tokens = ['token-a', 'token-b', 'token-c']; - const store = new SessionStore({ - broker, - stateFile: path.join(dir, 'sessions.json'), - randomId: () => ids.shift(), - randomToken: () => tokens.shift(), - now: () => 1_000, - ...options, - }); - return { - broker, - store, - cleanup: () => rmSync(dir, { recursive: true, force: true }), - }; -} - -test('sandbox gateway does not reuse sessions by IP', async () => { - const { broker, store, cleanup } = createStore(); - try { - const first = await store.acquire({ ip: '10.0.0.1' }); - const second = await store.acquire({ ip: '10.0.0.1' }); - - assert.equal(first.slug, 'abc123'); - assert.equal(second.slug, 'def456'); - assert.equal(broker.calls.filter((call) => call.type === 'create').length, 2); - } finally { - cleanup(); - } -}); - -test('sandbox gateway validates token across IP changes', async () => { - const { store, cleanup } = createStore(); - try { - const session = await store.acquire({ ip: '10.0.0.1' }); - const loaded = store.requireSession({ - slug: session.slug, - token: session.token, - ip: '10.0.0.2', - }); - - assert.equal(loaded.slug, session.slug); - } finally { - cleanup(); - } -}); - -test('sandbox gateway keeps active sessions releasable when broker release fails', async () => { - const { broker, store, cleanup } = createStore(); - broker.releaseSandbox = async (sandboxId) => { - broker.calls.push({ type: 'release', sandboxId }); - throw new Error('release failed'); - }; - - try { - const session = await store.acquire({ ip: '10.0.0.1' }); - - await assert.rejects( - store.release({ - slug: session.slug, - token: session.token, - ip: '10.0.0.1', - }), - /release failed/ - ); - - assert.equal(store.sessions[0].status, 'active'); - assert.equal(store.sessions[0].releasedAt, null); - assert.equal(store.activeSessions().length, 1); - assert.deepEqual(broker.calls.at(-1), { - type: 'release', - sandboxId: 'sbx-lv_abc123', - }); - } finally { - cleanup(); - } -}); - -test('sandbox gateway starts with empty state when the session file is corrupt', () => { - const dir = mkdtempSync(path.join(tmpdir(), 'lv-sandbox-gateway-')); - const events = []; - try { - const stateFile = path.join(dir, 'sessions.json'); - writeFileSync(stateFile, '{not-json', { mode: 0o600 }); - - const store = new SessionStore({ - broker: createBroker(), - stateFile, - logger: (level, event, details) => events.push({ level, event, details }), - }); - - assert.deepEqual(store.sessions, []); - assert.equal(events[0].level, 'warn'); - assert.equal(events[0].event, 'session.store.load.failed'); - } finally { - rmSync(dir, { recursive: true, force: true }); - } -}); - -test('sandbox gateway only releases a session once across concurrent requests', async () => { - let releaseCalls = 0; - let releaseSandbox; - const releaseStarted = new Promise((resolve) => { - releaseSandbox = resolve; - }); - const { broker, store, cleanup } = createStore(); - broker.releaseSandbox = async (sandboxId) => { - releaseCalls += 1; - broker.calls.push({ type: 'release', sandboxId }); - await releaseStarted; - }; - - try { - const session = await store.acquire({ ip: '10.0.0.1' }); - const firstRelease = store.release({ - slug: session.slug, - token: session.token, - ip: '10.0.0.1', - }); - const secondRelease = store.release({ - slug: session.slug, - token: session.token, - ip: '10.0.0.1', - }); - - await assert.rejects(secondRelease, /session not found/); - releaseSandbox(); - await firstRelease; - - assert.equal(releaseCalls, 1); - assert.equal(store.sessions[0].status, 'released'); - } finally { - cleanup(); - } -}); - -test('sandbox gateway checks out a warm sandbox before cold creation', async () => { - const { broker, store, cleanup } = createStore({ - warmPool: { - async checkout() { - return { - sandboxId: 'warm-sbx-1', - proxyBaseUrl: 'https://sandbox.local/api/v1/sandboxes/warm-sbx-1/proxy/4003/', - allocationSource: 'warm_pool', - }; - }, - stats() { - return { - enabled: true, - target_size: 1, - configured_size: 1, - ready: 0, - warming: 0, - }; - }, - }, - }); - - try { - const session = await store.acquire({ ip: '10.0.0.1' }); - - assert.equal(session.sandboxId, 'warm-sbx-1'); - assert.equal(session.allocationSource, 'warm_pool'); - assert.equal(broker.calls.filter((call) => call.type === 'create').length, 0); - } finally { - cleanup(); - } -}); - -test('sandbox gateway enforces active-session limit across concurrent acquires', async () => { - const { broker, store, cleanup } = createStore({ maxActiveSessions: 1 }); - try { - const results = await Promise.allSettled([ - store.acquire({ ip: '10.0.0.1' }), - store.acquire({ ip: '10.0.0.2' }), - ]); - - assert.equal(results[0].status, 'fulfilled'); - assert.equal(results[1].status, 'rejected'); - assert.match(results[1].reason.message, /active session limit reached/); - assert.equal(broker.calls.filter((call) => call.type === 'create').length, 1); - assert.equal(store.activeSessions().length, 1); - } finally { - cleanup(); - } -}); - -test('sandbox gateway releases a sandbox when session persistence fails', async () => { - const { broker, store, cleanup } = createStore(); - store.save = () => { - throw new Error('save failed'); - }; - - try { - await assert.rejects(store.acquire({ ip: '10.0.0.1' }), /save failed/); - - assert.deepEqual(broker.calls, [ - { type: 'create', sessionId: 'lv_abc123', ttlSeconds: 3600 }, - { type: 'release', sandboxId: 'sbx-lv_abc123' }, - ]); - assert.equal(store.sessions.length, 0); - } finally { - cleanup(); - } -}); diff --git a/tests/sandbox-gateway-signature-auth.test.mjs b/tests/sandbox-gateway-signature-auth.test.mjs deleted file mode 100644 index fd0126ab2..000000000 --- a/tests/sandbox-gateway-signature-auth.test.mjs +++ /dev/null @@ -1,140 +0,0 @@ -import assert from 'node:assert/strict'; -import crypto from 'node:crypto'; -import { test } from 'node:test'; -import { createServer } from '../server/sandbox-gateway/server.mjs'; -import { - SignatureAuthenticator, - buildCanonicalSignaturePayload, - stableJsonStringify, -} from '../server/sandbox-gateway/signature-auth.mjs'; - -function createSigningClient({ clientId = 'client_001', nowSeconds = 1_781_496_000 } = {}) { - const { privateKey, publicKey } = crypto.generateKeyPairSync('ed25519'); - const publicKeyDer = publicKey.export({ format: 'der', type: 'spki' }); - const publicKeyBase64 = Buffer.from(publicKeyDer).subarray(-32).toString('base64'); - - return { - clientId, - nowSeconds, - publicKeyBase64, - sign({ method = 'POST', path = '/__gateway/sessions', body = {}, nonce = 'nonce-1' } = {}) { - const canonical = buildCanonicalSignaturePayload({ - clientId, - timestamp: nowSeconds, - nonce, - method, - path, - body, - }); - return { - 'x-client-id': clientId, - 'x-timestamp': String(nowSeconds), - 'x-nonce': nonce, - 'x-signature': crypto.sign(null, canonical, privateKey).toString('base64'), - }; - }, - }; -} - -test('sandbox gateway canonical JSON matches the Python signing shape', () => { - assert.equal(stableJsonStringify({ b: 2, a: '中' }), '{"a":"\\u4e2d","b":2}'); -}); - -test('sandbox gateway verifies Ed25519 signed requests and rejects nonce replay', () => { - const client = createSigningClient(); - const auth = new SignatureAuthenticator({ - clients: `${client.clientId}:${client.publicKeyBase64}`, - now: () => client.nowSeconds * 1000, - }); - const body = { invite: 'internal' }; - const headers = client.sign({ body }); - - const verified = auth.verify({ - headers, - method: 'POST', - path: '/__gateway/sessions', - body, - }); - assert.deepEqual(verified, { clientId: client.clientId }); - - assert.throws( - () => - auth.verify({ - headers, - method: 'POST', - path: '/__gateway/sessions', - body, - }), - /replay nonce/ - ); -}); - -test('sandbox gateway rejects invalid signatures', () => { - const client = createSigningClient(); - const auth = new SignatureAuthenticator({ - clients: `${client.clientId}:${client.publicKeyBase64}`, - now: () => client.nowSeconds * 1000, - }); - const body = { invite: 'internal' }; - const headers = client.sign({ body }); - - assert.throws( - () => - auth.verify({ - headers, - method: 'POST', - path: '/__gateway/sessions', - body: { invite: 'tampered' }, - }), - /invalid signature/ - ); -}); - -test('sandbox gateway signed session endpoint creates a sandbox session', async () => { - const client = createSigningClient(); - const auth = new SignatureAuthenticator({ - clients: `${client.clientId}:${client.publicKeyBase64}`, - now: () => client.nowSeconds * 1000, - }); - const store = { - activeSessions: () => [], - async acquire() { - return { - slug: 'abc123', - token: 'token-a', - sandboxId: 'sbx-abc123', - expiresAt: (client.nowSeconds + 3600) * 1000, - }; - }, - }; - const server = createServer({ - config: { - gatewayAuth: 'signature', - maxActiveSessions: 5, - }, - store, - signatureAuth: auth, - }); - await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); - const baseUrl = `http://127.0.0.1:${server.address().port}`; - - try { - const body = { invite: 'internal' }; - const response = await fetch(`${baseUrl}/__gateway/sessions`, { - method: 'POST', - headers: { - 'content-type': 'application/json', - ...client.sign({ body }), - }, - body: JSON.stringify(body), - }); - const payload = await response.json(); - - assert.equal(response.status, 200); - assert.equal(payload.status, 'created'); - assert.equal(payload.url, '/abc123?token=token-a'); - assert.equal(payload.slug, 'abc123'); - } finally { - await new Promise((resolve) => server.close(resolve)); - } -}); diff --git a/tests/sandbox-gateway-warm-pool.test.mjs b/tests/sandbox-gateway-warm-pool.test.mjs deleted file mode 100644 index c47ab591a..000000000 --- a/tests/sandbox-gateway-warm-pool.test.mjs +++ /dev/null @@ -1,179 +0,0 @@ -import assert from 'node:assert/strict'; -import { test } from 'node:test'; -import { WarmSandboxPool } from '../server/sandbox-gateway/warm-pool.mjs'; - -function createBroker() { - const calls = []; - return { - calls, - async createSandbox({ sessionId, ttlSeconds, warmupFullBody }) { - calls.push({ type: 'create', sessionId, ttlSeconds, warmupFullBody }); - return { - sandboxId: `sbx-${sessionId}`, - proxyBaseUrl: `https://sandbox.local/api/v1/sandboxes/sbx-${sessionId}/proxy/4003/`, - }; - }, - async releaseSandbox(sandboxId) { - calls.push({ type: 'release', sandboxId }); - }, - }; -} - -test('warm pool creates ready sandboxes with extra idle ttl and checks them out', async () => { - let now = 1_000; - const broker = createBroker(); - const events = []; - const pool = new WarmSandboxPool({ - broker, - targetSize: 1, - maxActiveSessions: 5, - sandboxTtlSeconds: 3600, - maxIdleSeconds: 300, - now: () => now, - randomId: () => 'pool-a', - logger: (level, event, details) => events.push({ level, event, details }), - }); - - await pool.maintain({ activeCount: 0, trigger: 'test' }); - - assert.deepEqual(broker.calls[0], { - type: 'create', - sessionId: 'lv_pool_pool-a', - ttlSeconds: 3900, - warmupFullBody: true, - }); - assert.equal(pool.stats({ activeCount: 0 }).warmup_full_body, true); - assert.equal(pool.stats({ activeCount: 0 }).ready, 1); - - now += 50; - const sandbox = await pool.checkout(); - - assert.equal(sandbox.sandboxId, 'sbx-lv_pool_pool-a'); - assert.equal(sandbox.allocationSource, 'warm_pool'); - assert.equal(pool.stats({ activeCount: 0 }).ready, 0); - assert.equal( - events.some((event) => event.event === 'warm_pool.checkout.hit'), - true - ); -}); - -test('warm pool does not exceed remaining active-session capacity', async () => { - const broker = createBroker(); - const pool = new WarmSandboxPool({ - broker, - targetSize: 2, - maxActiveSessions: 2, - now: () => 1_000, - }); - - await pool.maintain({ activeCount: 2, trigger: 'test' }); - - assert.equal(broker.calls.length, 0); - assert.equal(pool.stats({ activeCount: 2 }).target_size, 0); -}); - -test('warm pool releases expired idle sandboxes instead of assigning them', async () => { - let now = 1_000; - const broker = createBroker(); - const pool = new WarmSandboxPool({ - broker, - targetSize: 1, - maxActiveSessions: 5, - maxIdleSeconds: 1, - now: () => now, - randomId: () => 'pool-expired', - }); - - await pool.maintain({ activeCount: 0, trigger: 'test' }); - now += 1_001; - - const sandbox = await pool.checkout(); - - assert.equal(sandbox, null); - assert.deepEqual(broker.calls.at(-1), { - type: 'release', - sandboxId: 'sbx-lv_pool_pool-expired', - }); -}); - -test('warm pool stats does not drop expired idle sandboxes', async () => { - let now = 1_000; - const broker = createBroker(); - const pool = new WarmSandboxPool({ - broker, - targetSize: 1, - maxActiveSessions: 5, - maxIdleSeconds: 1, - now: () => now, - randomId: () => 'pool-stats', - }); - - await pool.maintain({ activeCount: 0, trigger: 'test' }); - now += 1_001; - - const stats = pool.stats({ activeCount: 0 }); - - assert.equal(stats.ready, 0); - assert.equal(broker.calls.filter((call) => call.type === 'release').length, 0); - assert.equal(pool.items.length, 1); -}); - -test('warm pool refreshes before idle expiry and releases the older ready sandbox', async () => { - let now = 1_000; - const ids = ['old', 'new']; - const broker = createBroker(); - const pool = new WarmSandboxPool({ - broker, - targetSize: 1, - maxActiveSessions: 5, - maxIdleSeconds: 10, - now: () => now, - randomId: () => ids.shift(), - }); - - await pool.maintain({ activeCount: 0, trigger: 'initial' }); - now += 6_000; - await pool.maintain({ activeCount: 0, trigger: 'refresh' }); - - assert.deepEqual( - broker.calls.filter((call) => call.type === 'create').map((call) => call.sessionId), - ['lv_pool_old', 'lv_pool_new'] - ); - assert.deepEqual(broker.calls.at(-1), { - type: 'release', - sandboxId: 'sbx-lv_pool_old', - }); - - const sandbox = await pool.checkout(); - assert.equal(sandbox.sandboxId, 'sbx-lv_pool_new'); -}); - -test('warm pool stops refilling after repeated create failures', async () => { - const calls = []; - const events = []; - const pool = new WarmSandboxPool({ - broker: { - calls, - async createSandbox({ sessionId }) { - calls.push({ type: 'create', sessionId }); - throw new Error('broker unavailable'); - }, - async releaseSandbox() {}, - }, - targetSize: 1, - maxActiveSessions: 5, - maxMaintainCreateFailures: 3, - now: () => 1_000, - randomId: () => `fail-${calls.length}`, - logger: (level, event, details) => events.push({ level, event, details }), - }); - - await pool.maintain({ activeCount: 0, trigger: 'test' }); - - assert.equal(calls.length, 3); - assert.equal(pool.items.length, 0); - assert.equal( - events.some((event) => event.event === 'warm_pool.maintain.create_limit_reached'), - true - ); -}); From 4ca0a8e1aadeb0aeb4fecfca685e0aed415e9cf6 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 15:21:45 +0800 Subject: [PATCH 10/16] Address frontend gateway review nits --- .env.example | 4 ++-- README.md | 20 ++++++++++---------- next.config.ts | 2 +- tests/project-config.test.mjs | 3 ++- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.env.example b/.env.example index 7fd8a8310..2f7433c0a 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ # This file is intentionally documentation-only. # # Integrated LexVoice runs should not configure frontend variables here. -# Use `../lex-voice/.env` as the single source of truth; `lex-voice/run.sh` +# Use the LexVoice repository `.env` as the single source of truth; `lex-voice/run.sh` # injects LiveKit, room-input, input-source, role-device, agent, media, and # debug settings into the frontend process when it starts `make start_ui`. # @@ -10,4 +10,4 @@ # In that case, define only the variables needed for that standalone run. # Sandbox gateway deployment config moved to: -# ../lex-voice/deploy/liveavatar_gateway/env.example +# lex-voice/deploy/liveavatar_gateway/env.example diff --git a/README.md b/README.md index 458706d45..7bc2cda1d 100644 --- a/README.md +++ b/README.md @@ -57,8 +57,8 @@ Run the following command to automatically clone this template. lk app create --template agent-starter-react ``` -For integrated LexVoice runs, configure `../lex-voice/.env` and start the -frontend through the LexVoice runtime scripts. `../lex-voice/run.sh` injects +For integrated LexVoice runs, configure the LexVoice repository `.env` and start +the frontend through the LexVoice runtime scripts. `lex-voice/run.sh` injects LiveKit, room-input, input-source, role-device, agent, media, and debug settings into this Next.js process. @@ -70,10 +70,10 @@ with the connected room. ### LiveAvatar Gateway Deployments -Sandbox-backed public deployments are owned by the sibling `../lex-voice` -repository. Set `LIVEAVATAR_USE_SANDBOX=1` in `../lex-voice/.env` and configure -broker, template, warm pool, and `SANDBOX_ENV_*` values in -`../lex-voice/deploy/liveavatar_gateway/.env`. +Sandbox-backed public deployments are owned by the LexVoice repository. Set +`LIVEAVATAR_USE_SANDBOX=1` in `lex-voice/.env` and configure broker, template, +warm pool, and `SANDBOX_ENV_*` values in +`lex-voice/deploy/liveavatar_gateway/.env`. This frontend repository only runs the Next.js UI. It does not create, release, or warm sandbox sessions. @@ -88,8 +88,8 @@ pnpm dev And open http://localhost:3000 in your browser. -You'll also need a LiveKit server and an agent worker. In this workspace, those -are normally provided by the sibling `../lex-voice` project. +You'll also need a LiveKit server and an agent worker. In integrated workspaces, +those are normally provided by the LexVoice project. ## Configuration @@ -128,7 +128,7 @@ You can update these values in [`app-config.ts`](./app-config.ts) to customize b #### Environment Variables -Integrated runs should keep runtime variables in `../lex-voice/.env`; this +Integrated runs should keep runtime variables in the LexVoice repository `.env`; this repository's `.env.example` is documentation-only. Only create `agent-starter-react/.env.local` for standalone frontend development launched directly with `pnpm dev`. @@ -140,7 +140,7 @@ LIVEKIT_URL=https://your-livekit-server-url ``` The frontend defaults to the browser camera/microphone input when no input -source is provided. Configure `INPUT_SOURCE` only in `../lex-voice/.env` for +source is provided. Configure `INPUT_SOURCE` only in the LexVoice repository `.env` for integrated backend runs. The LiveKit variables above are required for standalone voice agent functionality to work with your LiveKit project. diff --git a/next.config.ts b/next.config.ts index 067bb54f3..8564a5b86 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,7 @@ import type { NextConfig } from 'next'; const nextConfig: NextConfig = { - allowedDevOrigins: ['liveavatar.lexmount.cn', 'liveavatar.local.lexmount.net'], + allowedDevOrigins: ['liveavatar.local.lexmount.net'], }; export default nextConfig; diff --git a/tests/project-config.test.mjs b/tests/project-config.test.mjs index fa75dc818..99cf3e34e 100644 --- a/tests/project-config.test.mjs +++ b/tests/project-config.test.mjs @@ -15,7 +15,8 @@ test('README matches the documented LexVoice environment source', async () => { const envExample = await readFile('.env.example', 'utf8'); assert.match(envExample, /documentation-only/); - assert.match(readme, /\.\.\/lex-voice\/\.env/); + assert.match(readme, /LexVoice repository `\.env`/); + assert.doesNotMatch(readme, /\.\.\/lex-voice/); assert.match(readme, /single Next\.js instance or sticky routing/); assert.match(readme, /custom connection details endpoint/); assert.match(readme, /sessionId/); From be4b4905c9a5ba5e5936662e388992d6ed99a782 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 15:29:05 +0800 Subject: [PATCH 11/16] Tighten frontend review cleanup --- .env.example | 10 +++++----- .gitignore | 2 -- README.md | 12 ++++++------ tests/project-config.test.mjs | 2 ++ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.env.example b/.env.example index 2f7433c0a..52f315357 100644 --- a/.env.example +++ b/.env.example @@ -1,13 +1,13 @@ # This file is intentionally documentation-only. # # Integrated LexVoice runs should not configure frontend variables here. -# Use the LexVoice repository `.env` as the single source of truth; `lex-voice/run.sh` -# injects LiveKit, room-input, input-source, role-device, agent, media, and -# debug settings into the frontend process when it starts `make start_ui`. +# Use the LexVoice repository `.env` as the single source of truth; its `run.sh` +# injects LiveKit, room-input, input-source, role-device, agent, media, and debug +# settings into the frontend process when it starts `make start_ui`. # # Only create `agent-starter-react/.env.local` for standalone frontend # development where this repository is launched directly with `pnpm dev`. # In that case, define only the variables needed for that standalone run. -# Sandbox gateway deployment config moved to: -# lex-voice/deploy/liveavatar_gateway/env.example +# Sandbox gateway deployment config moved to the LexVoice repository under: +# deploy/liveavatar_gateway/env.example diff --git a/.gitignore b/.gitignore index d7de6aafb..122bf192a 100644 --- a/.gitignore +++ b/.gitignore @@ -12,8 +12,6 @@ # testing /coverage -/logs/ -/.sandbox-gateway/ # next.js /.next/ diff --git a/README.md b/README.md index 7bc2cda1d..ee73d6d63 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,9 @@ lk app create --template agent-starter-react ``` For integrated LexVoice runs, configure the LexVoice repository `.env` and start -the frontend through the LexVoice runtime scripts. `lex-voice/run.sh` injects -LiveKit, room-input, input-source, role-device, agent, media, and debug settings -into this Next.js process. +the frontend through the LexVoice runtime scripts. The LexVoice repository's +`run.sh` injects LiveKit, room-input, input-source, role-device, agent, media, +and debug settings into this Next.js process. The session lifecycle API keeps start/stop state in memory, so integrated deployments should route `/api/session/*` to a single Next.js instance or sticky routing. @@ -71,9 +71,9 @@ with the connected room. ### LiveAvatar Gateway Deployments Sandbox-backed public deployments are owned by the LexVoice repository. Set -`LIVEAVATAR_USE_SANDBOX=1` in `lex-voice/.env` and configure broker, template, -warm pool, and `SANDBOX_ENV_*` values in -`lex-voice/deploy/liveavatar_gateway/.env`. +`LIVEAVATAR_USE_SANDBOX=1` in the LexVoice repository `.env` and configure +broker, template, warm pool, and `SANDBOX_ENV_*` values in the LexVoice +repository's `deploy/liveavatar_gateway/.env`. This frontend repository only runs the Next.js UI. It does not create, release, or warm sandbox sessions. diff --git a/tests/project-config.test.mjs b/tests/project-config.test.mjs index 99cf3e34e..c793b7626 100644 --- a/tests/project-config.test.mjs +++ b/tests/project-config.test.mjs @@ -17,6 +17,8 @@ test('README matches the documented LexVoice environment source', async () => { assert.match(envExample, /documentation-only/); assert.match(readme, /LexVoice repository `\.env`/); assert.doesNotMatch(readme, /\.\.\/lex-voice/); + assert.doesNotMatch(readme, /lex-voice\//); + assert.doesNotMatch(envExample, /lex-voice\//); assert.match(readme, /single Next\.js instance or sticky routing/); assert.match(readme, /custom connection details endpoint/); assert.match(readme, /sessionId/); From e77af79a731c07b054bd19ba0a475332c67b9017 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 15:29:46 +0800 Subject: [PATCH 12/16] Narrow legacy gateway ignores --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 122bf192a..03a7151c0 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,12 @@ # testing /coverage +# Legacy sandbox gateway artifacts from pre-migration local runs +/.sandbox-gateway/ +/logs/direct-proxy.log +/logs/sandbox-gateway*.log +/logs/sandbox-gateway.pid + # next.js /.next/ /out/ From 13fac5f53aa625af3cc71c7fa85ecb28aaef221b Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 15:46:48 +0800 Subject: [PATCH 13/16] Clarify LexVoice gateway doc ownership --- .env.example | 4 ++-- README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 52f315357..d30d48e2d 100644 --- a/.env.example +++ b/.env.example @@ -9,5 +9,5 @@ # development where this repository is launched directly with `pnpm dev`. # In that case, define only the variables needed for that standalone run. -# Sandbox gateway deployment config moved to the LexVoice repository under: -# deploy/liveavatar_gateway/env.example +# Sandbox gateway deployment config lives in the LexVoice repository's +# `deploy/liveavatar_gateway/env.example`. diff --git a/README.md b/README.md index ee73d6d63..54ebe2f90 100644 --- a/README.md +++ b/README.md @@ -72,8 +72,8 @@ with the connected room. Sandbox-backed public deployments are owned by the LexVoice repository. Set `LIVEAVATAR_USE_SANDBOX=1` in the LexVoice repository `.env` and configure -broker, template, warm pool, and `SANDBOX_ENV_*` values in the LexVoice -repository's `deploy/liveavatar_gateway/.env`. +broker, template, warm pool, and `SANDBOX_ENV_*` values in the LexVoice repository's +`deploy/liveavatar_gateway/.env`. This frontend repository only runs the Next.js UI. It does not create, release, or warm sandbox sessions. From c9384db59493cc68aa8fffff7ec9a35d9b5b0d0e Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 15:52:34 +0800 Subject: [PATCH 14/16] Clarify gateway env example ownership --- .env.example | 6 ++++-- tests/project-config.test.mjs | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index d30d48e2d..de27196af 100644 --- a/.env.example +++ b/.env.example @@ -9,5 +9,7 @@ # development where this repository is launched directly with `pnpm dev`. # In that case, define only the variables needed for that standalone run. -# Sandbox gateway deployment config lives in the LexVoice repository's -# `deploy/liveavatar_gateway/env.example`. +# For sandbox gateway deployment, see the LexVoice repository's +# `deploy/liveavatar_gateway/env.example`; copy that reference file to +# `deploy/liveavatar_gateway/.env` inside the LexVoice repository to configure +# a deployed gateway. diff --git a/tests/project-config.test.mjs b/tests/project-config.test.mjs index c793b7626..6f1b935ef 100644 --- a/tests/project-config.test.mjs +++ b/tests/project-config.test.mjs @@ -18,6 +18,8 @@ test('README matches the documented LexVoice environment source', async () => { assert.match(readme, /LexVoice repository `\.env`/); assert.doesNotMatch(readme, /\.\.\/lex-voice/); assert.doesNotMatch(readme, /lex-voice\//); + assert.doesNotMatch(readme, /\blex-voice\b/); + assert.doesNotMatch(envExample, /\blex-voice\b/); assert.doesNotMatch(envExample, /lex-voice\//); assert.match(readme, /single Next\.js instance or sticky routing/); assert.match(readme, /custom connection details endpoint/); From e6a9a185977a2979baf7d8ac27c1b3c7d53b98e3 Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 15:55:11 +0800 Subject: [PATCH 15/16] Remove redundant LexVoice path assertion --- tests/project-config.test.mjs | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/project-config.test.mjs b/tests/project-config.test.mjs index 6f1b935ef..c19e55a5f 100644 --- a/tests/project-config.test.mjs +++ b/tests/project-config.test.mjs @@ -17,10 +17,8 @@ test('README matches the documented LexVoice environment source', async () => { assert.match(envExample, /documentation-only/); assert.match(readme, /LexVoice repository `\.env`/); assert.doesNotMatch(readme, /\.\.\/lex-voice/); - assert.doesNotMatch(readme, /lex-voice\//); assert.doesNotMatch(readme, /\blex-voice\b/); assert.doesNotMatch(envExample, /\blex-voice\b/); - assert.doesNotMatch(envExample, /lex-voice\//); assert.match(readme, /single Next\.js instance or sticky routing/); assert.match(readme, /custom connection details endpoint/); assert.match(readme, /sessionId/); From 7ff2d34cff194f960e4ec31d857ee6655fbb395f Mon Sep 17 00:00:00 2001 From: jiejuncai-ly Date: Wed, 24 Jun 2026 16:08:02 +0800 Subject: [PATCH 16/16] Remove redundant LexVoice path assertion --- tests/project-config.test.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/project-config.test.mjs b/tests/project-config.test.mjs index c19e55a5f..1cb1bf5c1 100644 --- a/tests/project-config.test.mjs +++ b/tests/project-config.test.mjs @@ -16,7 +16,6 @@ test('README matches the documented LexVoice environment source', async () => { assert.match(envExample, /documentation-only/); assert.match(readme, /LexVoice repository `\.env`/); - assert.doesNotMatch(readme, /\.\.\/lex-voice/); assert.doesNotMatch(readme, /\blex-voice\b/); assert.doesNotMatch(envExample, /\blex-voice\b/); assert.match(readme, /single Next\.js instance or sticky routing/);