Проекты
Изоляция захватов, повторов, декодеров и закладок по целям — как кодовые базы в IDE.
Проект — это верхнеуровневая область видимости для всего, что вы собираете и производите в Traffic Jam: сессии захвата и папки, история повторов, пайплайны и скрипты декодирования, protobuf-схемы и привязки, правила модели маршрутов, аннотации эндпоинтов, клиентские сертификаты, профили отпечатков, канарейки и закладки. Переключение проекта меняет всё рабочее пространство разом — так же, как вы переключаете кодовые базы в IDE.
Заводите отдельный проект на каждую цель или аудит (например, goldapple mobile и partner-api audit), чтобы доказательства, декодеры и заметки никогда не смешивались.
Управление проектами
Переключатель проектов находится вверху левой боковой панели. В его меню можно:
- Переключиться — щёлкните проект, чтобы сделать его активным. Библиотека захватов, вкладки анализа, закладки и все реестры реверс-инжиниринга перезагружаются в новой области.
- Новый проект… — создаёт проект и сразу переключается на него. Новый проект пуст, кроме встроенных скриптов декодирования, которые засеваются в каждый проект.
- Переименовать — меняет имя проекта, не трогая содержимое.
- Удалить — удаляет проект и всё его содержимое (захваты, повторы, декодеры, закладки) каскадно. Активный проект удалить нельзя — сначала переключитесь. Действие требует подтверждения и необратимо.
Активный проект запоминается между перезапусками и показывается значком в заголовке рабочей области.
Как устроена изоляция
В каждой таблице сущностей базы SQLite есть внешний ключ project_id на таблицу projects (ON DELETE CASCADE — поэтому удаление проекта тотально). Бэкенд определяет активный проект из заголовка X-Traffic-Jam-Project в middleware withActiveProject; единственные маршруты без области — /api/projects и /api/health.
| Маршрут | Область |
|---|---|
GET/POST /api/projects, PATCH/DELETE /api/projects/{id} | Без области (управление проектами) |
GET/PUT/DELETE /api/projects/active | Без области (выбор области) |
PUT /api/projects/{id}/bookmarks-import | Без области (массовый импорт закладок) |
Всё остальное под /api | Требует активный проект; строки других проектов возвращают 404 |
В новой базе засевается проект Default, и бэкенд активирует его при старте, поэтому скрипты, не отправляющие заголовок проекта, продолжают работать.
Закладки переехали на бэкенд
Раньше закладки (на запросы и на захваты) жили в localStorage браузера; теперь они хранятся в базе данных по проектам (таблицы request_bookmarks / capture_bookmarks) и управляются через /api/bookmarks. При первом запуске после обновления приложение один раз переносит устаревшие закладки из localStorage в первый активированный проект через PUT /api/projects/{id}/bookmarks-import, после чего удаляет старый документ.
[!WARNING] Проекты — это ломающее изменение. База v0.4 — новый файл (
traffic-jam-v2.sqlite3); старыйtraffic-jam.sqlite3остаётся на месте, но больше не читается.