INTEGRITY Документация

Справочник по HTTP API

Эта страница описывает каждый маршрут, предоставляемый мост песочницы в стабильном шаблоне.

Аутентификация

Все маршруты внутри /v1/sandbox/* и /v1/openapi.* требуют Bearer-токен:

Authorization: Bearer <SANDBOX_API_KEY>

Когда SANDBOX_API_KEY не настроен, аутентификация пропускается для удобства локальной разработки. Перед развертыванием в продакшене обязательно задайте секрет.

схема OpenAPI

Мост предоставляет собственную документацию по API:

Метод Маршрут Описание
GET /v1/openapi.json Машиночитаемая схема OpenAPI 3.1.
GET /v1/openapi Интерактивная документация в формате HTML.

Оба маршрута принимают аутентификацию через заголовок Bearer или ?token= параметр запроса.

При локальном запуске с npm run dev, откройте http://localhost:8787/v1/openapi в браузере, чтобы интерактивно изучить каждую конечную точку.

Жизненный цикл песочницы

Метод Маршрут Описание
POST /v1/sandbox Создаёт новую песочницу. Возвращает {"id": "<sandbox-id>"}.
DELETE /v1/sandbox/:id Уничтожает контейнер sandbox. Возвращает 204.
GET /v1/sandbox/:id/running Проверка активности контейнера. Возвращает {"running": true|false}.

Выполнение команд

Метод Маршрут Описание
POST /v1/sandbox/:id/exec Выполняет команду. Ответ передаётся потоком SSE (см. ниже).

/exec конечная точка принимает тело в формате JSON:

{
  "argv": ["sh", "-lc", "echo hello"],
  "timeout_ms": 10000,
  "cwd": "/workspace"
}

Экранирование argv

Каждый элемент массива argv массив экранируется с помощью ANSI-C $'...' экранирование перед объединением в команду оболочки. Токены, содержащие только безопасные символы (A-Za-z0-9@%+=:,./-) передаются без изменений. Все остальные токены оборачиваются в $'...' с экранированными обратными слэшами, одинарными кавычками, символами новой строки, возврата каретки и табуляции. Это предотвращает shell injection и сохраняет аргументы, содержащие пробелы, кавычки или специальные символы.

Формат ответа SSE

Ответ представляет собой text/event-stream со следующими типами событий:

Событие Данные Описание
stdout Фрагмент в кодировке Base64 Стандартный вывод команды.
stderr Фрагмент в кодировке Base64 Стандартный поток ошибок команды.
exit {"exit_code": N} Команда выполнена. Событие терминала.
error {"error": "…", "code": "…"} Команда завершилась с ошибкой. Событие терминала.

Файловые операции

Метод Маршрут Описание
GET /v1/sandbox/:id/file/* Считайте файл. Возвращает необработанные байты (application/octet-stream).
PUT /v1/sandbox/:id/file/* Запись файла. Тело запроса: необработанные байты. Возвращает {"ok": true}. Максимум 32 MiB.

Путь к файлу кодируется в URL после /file/. Все пути должны находиться в пределах /workspace. Попытки обхода пути (например, ../../etc/passwd) отклоняются.

Сохранение состояния рабочей области

Метод Маршрут Описание
POST /v1/sandbox/:id/persist Сериализуйте /workspace в tar-архив. Возвращает необработанные байты tar.
POST /v1/sandbox/:id/hydrate Заполните /workspace из tar-архива, отправленного в теле запроса.

/persist конечная точка принимает необязательный excludes параметр запроса: список относительных путей через запятую, которые нужно исключить из архива.

/hydrate конечная точка принимает необработанные данные tar объёмом до 32 MiB.

Монтирования бакетов

Метод Маршрут Описание
POST /v1/sandbox/:id/mount Подключение S3-совместимого бакета как локального каталога.
POST /v1/sandbox/:id/unmount Отмонтируйте ранее смонтированный bucket.

/mount конечная точка принимает тело в формате JSON. Поддерживаются два сценария:

Монтирования R2 binding

Опустите endpoint и передайте имя привязки R2 в Worker в bucket:

{
  "bucket": "MY_BUCKET",
  "mountPath": "/mnt/data",
  "options": {
    "readOnly": false,
    "prefix": "/subdir"
  }
}

Когда options.endpoint не указан, bucket означает имя привязки R2 в Worker.

Для явного монтирования S3-совместимой конечной точки укажите endpoint и при необходимости credentials:

{
  "bucket": "my-r2-bucket",
  "mountPath": "/mnt/data",
  "options": {
    "endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com",
    "readOnly": false,
    "prefix": "/subdir",
    "credentials": {
      "accessKeyId": "...",
      "secretAccessKey": "..."
    }
  }
}

Когда endpoint указан, bucket означает имя удалённого бакета. Учётные данные необязательны только в этом режиме: мост определяет их автоматически из секретов Worker (R2_ACCESS_KEY_ID / R2_SECRET_ACCESS_KEY или AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY) если не указано.

Сеансы

Метод Маршрут Описание
POST /v1/sandbox/:id/session Создаёт сеанс. Возвращает {"id": "<session-id>"}.
DELETE /v1/sandbox/:id/session/:sid Удалите сессию. Возвращает 204.

Сессии изолируют рабочую директорию, переменные окружения и состояние выполнения команд внутри sandbox. Передайте Session-Id header в /exec, /file/*, а также /pty запросы, чтобы привязать их к сессии.

Если не указан Session-Id header, запросы используют неявный режим выполнения сандбокса. По умолчанию это сессия по умолчанию, но SDK, настроенные с enableDefaultSession: false вместо этого выполняйте такие неявные операции без сессии.

Терминал (PTY)

Метод Маршрут Описание
GET /v1/sandbox/:id/pty Переход на сеанс PTY через WebSocket.

Параметры запроса:

Параметр Тип По умолчанию Описание
cols число 80 Ширина терминала в столбцах.
rows число 24 Высота терминала в строках.
shell string , Исполняемый файл shell (например, /bin/bash).
session string , ID сессии для сессионного PTY.

WebSocket передаёт двоичные кадры для ввода-вывода терминала и текстовые кадры JSON для управляющих сообщений:

Направление Тип кадра Content
От клиента к серверу Двоичный Нажатия клавиш в кодировке UTF-8.
От сервера к клиенту Двоичный Вывод терминала, включая escape-последовательности ANSI.
От клиента к серверу Текст (JSON) Управляющие сообщения (например, {"type": "resize", "cols": 120, "rows": 30}).
От сервера к клиенту Текст (JSON) Статусные сообщения (ready, exit, error).

Прогретый пул

Метод Маршрут Описание
GET /v1/pool/stats Текущая статистика пула.
POST /v1/pool/prime Запустите цикл alarm для прогретого пула.
POST /v1/pool/shutdown-prewarmed Остановите все простаивающие прогретые контейнеры.

Пул прогретых контейнеров заранее запускает контейнеры песочниц, чтобы новые сеансы запускались мгновенно. Настройте его с помощью переменных окружения в wrangler.jsonc:

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "vars": {
    "WARM_POOL_TARGET": "3",
    "WARM_POOL_REFRESH_INTERVAL": "10000"
  }
}
[vars]
WARM_POOL_TARGET = "3"           # Number of idle containers to keep warm (0 = disabled)
WARM_POOL_REFRESH_INTERVAL = "10000"  # Health-check interval in milliseconds

Cron-триггер (* * * * *) автоматически прогревает пул после развёртывания. Установите WARM_POOL_TARGET к "0" (значение по умолчанию), чтобы отключить пул и избежать непредвиденных расходов.

Health check

Метод Маршрут Описание
GET /health Проверка работоспособности без аутентификации. Возвращает {"ok": true}.