> ## Documentation Index
> Fetch the complete documentation index at: https://veriqa.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Примеры

> Запускаемые примеры и клиенты для копирования в репозитории: что показывает каждый, где лежит и как его запустить.

В репозитории ([veriqa.app/source](https://veriqa.app/source)) в каталоге `samples/` лежит галерея
примеров. Всё там — под лицензией **MIT** и написано так, чтобы переносить к себе в проект.

<Note>
  **Veriqa живёт на стороне издателя токенов.** Приложение, которое только впускает пользователей,
  остаётся обычной проверяющей стороной OpenID Connect — без пакета Veriqa и без SDK. Пакеты Veriqa
  нужны только там, где приложение само *является* издателем (встроенный режим) или вызывает API
  подтверждений с сервера.
</Note>

Примеры бывают двух видов:

* **Запускаемые** — проекты со своим `README.md`, портами и конфигурацией. .NET-пример запускается
  `dotnet run --project <путь>`; примеры вне .NET, которые работают рядом с Veriqa, — `docker compose up`
  в своей папке.
* **Код для копирования** — один файл на стек с полной обвязкой клиента. Проекта вокруг него нет:
  окружающее приложение — ваше.

## Примеры сценариев

Каждый показывает один механизм и ничего больше.

| Путь | Что показывает | Вид |
| - | - | - |
| `dotnet/inproc/login` | Вход с Veriqa, встроенной в приложение: издатель работает внутри процесса | запускаемый · `https://localhost:7300` |
| `dotnet/inproc/login-client` | Проверяющая сторона этого издателя: штатный OIDC-клиент ASP.NET Core, ничего специфичного для Veriqa | запускаемый · `https://localhost:7020` |
| `dotnet/inproc/confirmation` | Подтверждение действия бэкенда сервер-сервер — без входа и без редиректа браузера | запускаемый · `https://localhost:7310` |
| `dotnet/inproc/step-up` | Степ-ап перед разрушительным действием: подтвердить может только владелец аккаунта | запускаемый · `https://localhost:7330` |
| `dotnet/inproc/agent-approval` | Одобрение человеком вызова инструмента ИИ-агента | запускаемый · `https://localhost:7340` |
| `dotnet/aspire/login` | Тот же вход под .NET Aspire, хранилище транзакций — оркестрируемый ресурс (нужен Docker) | запускаемый · `https://localhost:7320` |
| `dotnet/custom-channel` | Сторонний канал через публичный SPI — см. [Свой канальный адаптер](/docs/ru/guides/custom-channel-adapter) | запускаемый · `https://localhost:7320` |
| `python/custom-channel-telegram` | Telegram через внешний адаптер на Python, подключённый конфигурацией, — см. [HTTP-адаптер канала на любом языке](/docs/ru/guides/custom-channel-adapter#http-адаптер-канала-на-любом-языке) | запускаемый · `docker compose` |
| `node/custom-channel-whatsapp-twilio` | WhatsApp через Twilio, внешний адаптер на Node, — см. [HTTP-адаптер канала на любом языке](/docs/ru/guides/custom-channel-adapter#http-адаптер-канала-на-любом-языке) | запускаемый · `docker compose` |
| `node/custom-channel-whatsapp-baileys` | WhatsApp через Baileys, внешний адаптер на Node, — рабочий адаптер для отладки сценариев с WhatsApp, небольших команд и собственного использования; **неофициальный клиент WhatsApp Web, номер могут заблокировать**; см. [HTTP-адаптер канала на любом языке](/docs/ru/guides/custom-channel-adapter#http-адаптер-канала-на-любом-языке) | запускаемый · `docker compose` |
| `dotnet/remote/login` | Клиент внешнего издателя (self-hosted или Veriqa Cloud) | код для копирования |
| `java/Application.java` | Тот же клиент на Spring Security OAuth2 Client | код для копирования |
| `node/index.ts` | Тот же клиент на `openid-client` + Express | код для копирования |
| `python/main.py` | Тот же клиент на Authlib + FastAPI | код для копирования |
| `docker-compose/` | Self-hosted сервер авторизации за Nginx с PostgreSQL, Redis и RabbitMQ — только для демонстрации | развёртывание |

Пример Aspire и хост собственного канала занимают один порт 7320 — запускайте их по очереди.

## Пример для агентского харнеса

`claude-code/` — плагин Claude Code, а не .NET-проект: выбранные действия агента — `git push`, старт
длинного цикла команд, затратный прогон с оценкой токенов — ждут, пока человек одобрит их в
мессенджере; для затратного прогона — цепочкой из двух согласующих. См.
[«Подтверждения в Claude Code»](/docs/ru/research/claude-code-approvals) и README примера.

## Примеры-витрины

Два примера в `samples/dotnet/showcase/` изображают продукт целиком, чтобы сценарии было видно от
начала до конца так, как их встречает пользователь. Каждый — один процесс в трёх ролях: встроенный
издатель, OIDC-клиент браузера и бэкенд, создающий подтверждения.

<CardGroup cols={2}>
  <Card title="Nova Stream — стриминг на телевизоре" icon="tv">
    `dotnet/showcase/streaming-tv` · `https://localhost:7350`. Вход по QR с дивана, приветственная
    карточка из claims канала, узнавание вернувшегося зрителя, степ-ап при покупке фильма.
    Управление пультом, написан под браузеры телевизоров (Tizen 5.5, webOS 5), работает за
    HTTP-туннелем.
  </Card>

  <Card title="Helio — поддержка клиентов" icon="headset">
    `dotnet/showcase/support-desk` · `https://localhost:7360`. Публичная страница поддержки, вход,
    карточка клиента и степ-ап перед закрытием или удалением обращения.
  </Card>
</CardGroup>

Что они показывают сверх примеров сценариев:

* **Карточку человека** из claims, которые дал канал: имя, аватар, `@username` и
  замаскированный ID (Telegram), замаскированный телефон (WhatsApp), адрес (Email). Идентификаторы
  маскируются на сервере, полное значение в браузер не уходит.
* **Степ-ап, адресованный вошедшему.** Подтверждение называет личность текущей сессии
  (`expected_identities`), и операция применяется, только если совпал `matched_type`, —
  подтверждение с другого аккаунта ничего не меняет.
* **Квитанции по назначению.** Вопрос входа заменяется на «Sign-in to … confirmed ✅»
  (`ReplacePrompt`); подтверждение сохраняет вопрос и получает квитанцию отдельным сообщением
  (`NewMessage`, задан в записи клиента бэкенда). См. `OutcomeNotice` в
  [Конфигурации](/docs/ru/reference/configuration).
* **Собственные страницы Veriqa под брендом.** Страница входа и окно подтверждения — экраны
  продукта; через `AuthPageDesign` заданы только бренд, цвет, тема и — для телевизора — таблица
  стилей.

<Tip>
  Бот Telegram доставляет обновления на один адрес webhook, поэтому с одним токеном бота входы
  принимает только один из двух примеров-витрин одновременно.
</Tip>

## Запуск .NET-примеров

* .NET SDK 10.0+ и доверенный локальный HTTPS-сертификат (`dotnet dev-certs https --trust`).
* **Включите хотя бы один канал и дайте ему учётные данные.** Все примеры поставляются с
  `"Enabled": false` у всех каналов; без включённого канала страница входа отвечает
  `no_channels_available`. Быстрее всего — токен бота, см. [Настройка каналов](/docs/ru/guides/channels)
  и README самого примера.
* Пары вроде `login` + `login-client` запускайте начиная с издателя: иначе клиент не пройдёт discovery.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.