OAuth-приложение
В репозиториях SDK Axios и SDK Fetch есть серверный пример: подключение проекта через OAuth с PKCE, сохранение токена в серверной сессии и чтение информации о проекте. Выберите один из них. Примерам не нужен Passport.
Подготовка
Нужны Git, npm и Node.js, совместимый с engines выбранного SDK. Создайте OAuth-приложение, включите разрешение project:read и настройте адрес возврата http://localhost:3000/auth/streamvi/callback. При подключении выберите учебный проект. Если меняете домен или порт, измените адрес и в настройках приложения, и в .env. Экраны настройки показаны в Настройках.
project:read нужен для запроса информации о проекте. Для других методов выбирайте их разрешения. В этом примере обмен кода использует PKCE и не требует секрета приложения: одноразовый code_verifier остаётся на сервере.
Локальный запуск
Для Axios:
git clone https://github.com/StreamVi/streamvi-sdk.git
cd streamvi-sdk
npm install
cp .env.example .env
Для Fetch клонируйте https://github.com/StreamVi/streamvi-sdk-fetch.git и перейдите в папку streamvi-sdk-fetch. Остальные шаги одинаковые. Это запуск демонстрационного сервера из репозитория. Для установки только клиента в своё приложение используйте инструкции SDK Axios или SDK Fetch.
Заполните .env в корне клонированного SDK:
STREAMVI_CLIENT_ID=YOUR_CLIENT_ID
CALLBACK_URL=http://localhost:3000/auth/streamvi/callback
SESSION_SECRET=YOUR_RANDOM_SESSION_SECRET
PORT=3000
Создайте случайный секрет сессии этой командой и подставьте результат в SESSION_SECRET:
node -e "console.log(require('node:crypto').randomBytes(32).toString('hex'))"
npm run example
Откройте локальную страницу примера и нажмите Connect a project. Не запускайте оба примера на одном порту. Файл .env не добавляйте в Git. Стартовая страница подтверждает запуск сервера; для проверки API завершите подключение и убедитесь, что отображается выбранный проект.
Как проходит подключение
Маршрут /auth/streamvi создаёт одноразовые state и code_verifier. Сервер сохраняет их в сессии на десять минут, а браузер отправляет в кабинет с code_challenge. После выбора проекта и согласия StreamVi возвращает браузер на /auth/streamvi/callback.
Обработчик использует сохранённую попытку только один раз: проверяет срок и state, затем обменивает код с исходным code_verifier. При ошибке или повторном возврате нужно начать подключение заново. Запуск новой попытки заменяет предыдущую. Сам механизм разобран в OAuth.
После успешного обмена сервер сохраняет токен и внутренний ID проекта, затем запрашивает информацию через SDK. Страница показывает название и ID проекта; токен в HTML и логи не выводится.
| Файл | Назначение |
|---|---|
example/config/oauth.ts | state, PKCE, проверка возврата и обмен кода |
example/config/session.ts | Серверная сессия |
example/routes/index.ts | Маршруты подключения, хранение результата и запрос проекта |
Перенос в своё приложение
Сессии примера хранятся в памяти и пропадают после перезапуска сервера. Для своего сервера настройте постоянное хранилище сессий, HTTPS и защищённые cookie, свяжите подключение с пользователем вашего приложения. Токен остаётся на сервере. Пример не обновляет его автоматически: при утрате доступа подключитесь повторно.
Пример Passport
Отдельный passport-streamvi-example показывает существующую интеграцию с Passport. В нём результат подключения, включая токен, выводится в ответ и консоль; такой вывод нужно убрать перед использованием в своём приложении. Он также зависит от опубликованного Passport с ограничениями проверки возврата, описанными на странице Passport.
Исправление стратегии уже слито в GitHub. При использовании Passport установите исправленный пакет и настройте сессию, state и PKCE по инструкции библиотеки. Серверные примеры SDK выше выполняют этот обмен напрямую и от Passport не зависят.