ВозможностиОрганизации
Документация
    Ring Platform

    Децентрализованное самостроящееся будущее

    Войти
    Организации
    Возможности
    Магазин
    Документация
    Концепции платформы
    RING ЭкономикаSonoratek LLCГлобальное влияниеAI встречает Web3
    Начать
    Быстрый стартКалькуляторДорожная карта
    Конфиденциальность|Контакты
    v1.106.26|Sonoratek LLC

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    Членство и кредиты
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    Шторка страницы
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Организации
    Возможности
    AI Matcher
    Messaging
    Peer Games
    News
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Уведомления
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Ring Mailer и RingdomX Mail
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    Членство и кредиты
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    Шторка страницы
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Организации
    Возможности
    AI Matcher
    Messaging
    Peer Games
    News
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Уведомления
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Ring Mailer и RingdomX Mail
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    Членство и кредиты
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    WalletConductor
    Реферальные коды (Refcodes)
    Шторка страницы
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Организации
    Возможности
    AI Matcher
    Messaging
    Peer Games
    News
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Уведомления
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Ring Mailer и RingdomX Mail
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Быстрый старт — ваш первый клон Ring
    Руководство по кастомизации
    Vertical Presets (SSOT)
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Интеграция платёжного шлюза
    Референсные деплои Ring
    Конфигурация проекта
    Публичные переменные окружения
    Секреты Order Lab
    Project ID WalletConnect (Reown Cloud)
    Поддерживаемые сервисы
    Вики NODUS (знания проекта)
    Плейбук конфигурации
    Web3
    Token launch jurisdictions
    Кошелёк
    Советы по безопасности кошелька
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Развёртывание на собственном сервере
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    Архитектура PaymentConductor
    Wallet Conductor
    Архитектура News Kingdom
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server
    OSS и enterprise

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content


    title: Валидация данных description: Архитектура валидации входных данных Ring Platform: схемы Zod, гарды на границе маршрутов, верификация HMAC webhook и безопасность бизнес-данных для основателей и разработчиков last_modified: "2026-10-16" audience: both

    Валидация данных

    Используйте вкладки Основатель / Разработчик в боковой панели документации. Основатели: как валидация защищает бизнес-данные. Разработчики: полный справочник паттернов Zod с примерами из кодовой базы.

    Каждый API-вызов к вашему Ring-клону: это контракт. Клиент обещает корректно сформированные данные, сервер обещает обработать их безопасно. Валидация данных: способ Ring Platform обеспечить этот контракт, отклоняя некорректный ввод до того, как он испортит записи, создаст фантомные заказы или обойдёт верификацию платежей.

    Слои валидации кратко

    СлойЧто ловитКто отвечает
    Граница маршрутаОтсутствующие поля, неверные типы, некорректный JSONСхемы Zod в обработчиках /app/api/**
    Граница сервисаНарушения бизнес-правил (неверная роль, отсутствие владения)Доменные сервисы в features/*/services/
    Граница базы данныхНарушения ограничений (NOT NULL, UNIQUE, CHECK)Ограничения PostgreSQL в data/schema.sql

    Каждый слой даёт узкую гарантию. Ни один слой не заменяет остальные.

    Почему валидация защищает бизнес

    Цена плохих данных

    Без валидации некорректный API-запрос может:

    • Создать записи-призраки: opportunity без заголовка появляется в результатах поиска
    • Испортить платёжные записи: webhook с поддельной подписью запускает возврат
    • Сломать UX: невалидные preferences роняют страницу настроек
    • Утечь конфиденциальные данные: пропущенная проверка visibility раскрывает listings deal-room

    Трёхслойная валидация Ring Platform ловит это до попадания в базу.

    Что это значит для вашего клона

    Когда вы ringize деплой, вы наследуете валидацию, которая:

    • Отклоняет неполные профили сущностей: name, type, location и visibility обязательны до создания записи
    • Верифицирует платёжные webhook: HMAC-подписи WayForPay проверяются до любого изменения статуса заказа
    • Охраняет confidential-тиры: проверка роли выполняется до возврата confidential данных entity/opportunity
    • Предотвращает инъекцию preferences: настройки пользователя валидируются по известной схеме, неизвестные поля не проходят

    Бизнес-сценарии

    Спуфинг платёжного webhook

    Архитектура схем Zod

    Ring Platform использует Zod как единственную библиотеку валидации во всех API-маршрутах, Server Actions и обработчиках webhook. Схемы служат и runtime-валидаторами, и генераторами TypeScript-типов через z.infer<>.

    Расположение схем (SSOT)

    РасположениеНазначениеПримеры
    lib/zod/Общие кросс-feature схемыcredit-schemas.ts, store-product.ts, desk-schemas.ts, airdrop-schemas.ts
    features/*/types/Feature-специфичные схемыfeatures/opportunities/types/, features/news/types/
    app/api/**/route.tsЛокальные схемы маршрутаInline-схемы для MCP и webhook-маршрутов

    Канонический паттерн границы маршрута

    Каждый API-маршрут следует этому паттерну: parse, validate, затем использование типизированных данных:

    Анти-паттерн: as any

    Связанная документация

    Модель безопасности

    RBAC, confidential-тиры, чеклист hardening API и layout-level auth-гейты.

    Модель данных

    Контракт JSONB-документов, schema.sql SSOT и паттерны DatabaseService.

    PaymentConductor

    Верификация HMAC webhook, идемпотентные order references и settlement-потоки.

    Best Practices

    Конвенции Server Action, паттерны доступа к БД и обработка ошибок.

    1. Документация
    2. /Архитектура
    3. /Data Validation

    5 мин прослушивания


    title: Валидация данных description: Архитектура валидации входных данных Ring Platform: схемы Zod, гарды на границе маршрутов, верификация HMAC webhook и безопасность бизнес-данных для основателей и разработчиков last_modified: "2026-10-16" audience: both

    Валидация данных

    Используйте вкладки Основатель / Разработчик в боковой панели документации. Основатели: как валидация защищает бизнес-данные. Разработчики: полный справочник паттернов Zod с примерами из кодовой базы.

    Каждый API-вызов к вашему Ring-клону: это контракт. Клиент обещает корректно сформированные данные, сервер обещает обработать их безопасно. Валидация данных: способ Ring Platform обеспечить этот контракт, отклоняя некорректный ввод до того, как он испортит записи, создаст фантомные заказы или обойдёт верификацию платежей.

    Слои валидации кратко

    СлойЧто ловитКто отвечает
    Граница маршрутаОтсутствующие поля, неверные типы, некорректный JSONСхемы Zod в обработчиках /app/api/**
    Граница сервисаНарушения бизнес-правил (неверная роль, отсутствие владения)Доменные сервисы в features/*/services/
    Граница базы данныхНарушения ограничений (NOT NULL, UNIQUE, CHECK)Ограничения PostgreSQL в data/schema.sql

    Каждый слой даёт узкую гарантию. Ни один слой не заменяет остальные.

    Почему валидация защищает бизнес

    Цена плохих данных

    Без валидации некорректный API-запрос может:

    • Создать записи-призраки: opportunity без заголовка появляется в результатах поиска
    • Испортить платёжные записи: webhook с поддельной подписью запускает возврат
    • Сломать UX: невалидные preferences роняют страницу настроек
    • Утечь конфиденциальные данные: пропущенная проверка visibility раскрывает listings deal-room

    Трёхслойная валидация Ring Platform ловит это до попадания в базу.

    Что это значит для вашего клона

    Когда вы ringize деплой, вы наследуете валидацию, которая:

    • Отклоняет неполные профили сущностей: name, type, location и visibility обязательны до создания записи
    • Верифицирует платёжные webhook: HMAC-подписи WayForPay проверяются до любого изменения статуса заказа
    • Охраняет confidential-тиры: проверка роли выполняется до возврата confidential данных entity/opportunity
    • Предотвращает инъекцию preferences: настройки пользователя валидируются по известной схеме, неизвестные поля не проходят

    Бизнес-сценарии

    Спуфинг платёжного webhook

    Архитектура схем Zod

    Ring Platform использует Zod как единственную библиотеку валидации во всех API-маршрутах, Server Actions и обработчиках webhook. Схемы служат и runtime-валидаторами, и генераторами TypeScript-типов через z.infer<>.

    Расположение схем (SSOT)

    РасположениеНазначениеПримеры
    lib/zod/Общие кросс-feature схемыcredit-schemas.ts, store-product.ts, desk-schemas.ts, airdrop-schemas.ts
    features/*/types/Feature-специфичные схемыfeatures/opportunities/types/, features/news/types/
    app/api/**/route.tsЛокальные схемы маршрутаInline-схемы для MCP и webhook-маршрутов

    Канонический паттерн границы маршрута

    Каждый API-маршрут следует этому паттерну: parse, validate, затем использование типизированных данных:

    Анти-паттерн: as any

    Связанная документация

    Модель безопасности

    RBAC, confidential-тиры, чеклист hardening API и layout-level auth-гейты.

    Модель данных

    Контракт JSONB-документов, schema.sql SSOT и паттерны DatabaseService.

    PaymentConductor

    Верификация HMAC webhook, идемпотентные order references и settlement-потоки.

    Best Practices

    Конвенции Server Action, паттерны доступа к БД и обработка ошибок.

    1. Документация
    2. /Архитектура
    3. /Data Validation

    5 мин прослушивания


    title: Валидация данных description: Архитектура валидации входных данных Ring Platform: схемы Zod, гарды на границе маршрутов, верификация HMAC webhook и безопасность бизнес-данных для основателей и разработчиков last_modified: "2026-10-16" audience: both

    Валидация данных

    Используйте вкладки Основатель / Разработчик в боковой панели документации. Основатели: как валидация защищает бизнес-данные. Разработчики: полный справочник паттернов Zod с примерами из кодовой базы.

    Каждый API-вызов к вашему Ring-клону: это контракт. Клиент обещает корректно сформированные данные, сервер обещает обработать их безопасно. Валидация данных: способ Ring Platform обеспечить этот контракт, отклоняя некорректный ввод до того, как он испортит записи, создаст фантомные заказы или обойдёт верификацию платежей.

    Слои валидации кратко

    СлойЧто ловитКто отвечает
    Граница маршрутаОтсутствующие поля, неверные типы, некорректный JSONСхемы Zod в обработчиках /app/api/**
    Граница сервисаНарушения бизнес-правил (неверная роль, отсутствие владения)Доменные сервисы в features/*/services/
    Граница базы данныхНарушения ограничений (NOT NULL, UNIQUE, CHECK)Ограничения PostgreSQL в data/schema.sql

    Каждый слой даёт узкую гарантию. Ни один слой не заменяет остальные.

    Почему валидация защищает бизнес

    Цена плохих данных

    Без валидации некорректный API-запрос может:

    • Создать записи-призраки: opportunity без заголовка появляется в результатах поиска
    • Испортить платёжные записи: webhook с поддельной подписью запускает возврат
    • Сломать UX: невалидные preferences роняют страницу настроек
    • Утечь конфиденциальные данные: пропущенная проверка visibility раскрывает listings deal-room

    Трёхслойная валидация Ring Platform ловит это до попадания в базу.

    Что это значит для вашего клона

    Когда вы ringize деплой, вы наследуете валидацию, которая:

    • Отклоняет неполные профили сущностей: name, type, location и visibility обязательны до создания записи
    • Верифицирует платёжные webhook: HMAC-подписи WayForPay проверяются до любого изменения статуса заказа
    • Охраняет confidential-тиры: проверка роли выполняется до возврата confidential данных entity/opportunity
    • Предотвращает инъекцию preferences: настройки пользователя валидируются по известной схеме, неизвестные поля не проходят

    Бизнес-сценарии

    Спуфинг платёжного webhook

    Архитектура схем Zod

    Ring Platform использует Zod как единственную библиотеку валидации во всех API-маршрутах, Server Actions и обработчиках webhook. Схемы служат и runtime-валидаторами, и генераторами TypeScript-типов через z.infer<>.

    Расположение схем (SSOT)

    РасположениеНазначениеПримеры
    lib/zod/Общие кросс-feature схемыcredit-schemas.ts, store-product.ts, desk-schemas.ts, airdrop-schemas.ts
    features/*/types/Feature-специфичные схемыfeatures/opportunities/types/, features/news/types/
    app/api/**/route.tsЛокальные схемы маршрутаInline-схемы для MCP и webhook-маршрутов

    Канонический паттерн границы маршрута

    Каждый API-маршрут следует этому паттерну: parse, validate, затем использование типизированных данных:

    Анти-паттерн: as any

    Связанная документация

    Модель безопасности

    RBAC, confidential-тиры, чеклист hardening API и layout-level auth-гейты.

    Модель данных

    Контракт JSONB-документов, schema.sql SSOT и паттерны DatabaseService.

    PaymentConductor

    Верификация HMAC webhook, идемпотентные order references и settlement-потоки.

    Best Practices

    Конвенции Server Action, паттерны доступа к БД и обработка ошибок.

    1. Документация
    2. /Архитектура
    3. /Data Validation

    5 мин прослушивания

    Атакующий шлёт поддельный webhook «payment completed». Ring сначала валидирует HMAC-подпись: при несовпадении webhook отклоняется до изменения статуса заказа.

    Создание opportunity

    Клиент отправляет opportunity без title или category. Zod отклоняет запрос на границе маршрута с понятным сообщением об ошибке: запись-призрак не создаётся.

    Пользовательские preferences

    Вредоносный клиент пытается внедрить неизвестные поля в preferences. Схема Zod отбрасывает неизвестные ключи: принимаются только locale, currency и theme.

    Confidential deal room

    Подписчик пытается получить confidential opportunities. Гейт маршрута проверяет роль до выполнения запроса: база не видит неавторизованный запрос.

    Вывод для оператора

    Валидация: не только забота разработчика. Она напрямую защищает выручку, доверие пользователей и compliance-позу. Каждый Ring-клон поставляет эти гарды включёнными по умолчанию.

    Никогда не используйте body as any, чтобы обойти TypeScript при вызове сервисных функций. Если сервис ожидает конкретный тип, создайте схему Zod, которая валидирует форму, затем приведите валидированный вывод: parsed.data as Parameters<typeof service>[0]. Валидация Zod делает приведение безопасным.

    z.preprocess для нормализации webhook

    Платёжные webhook (WayForPay, Stripe) приходят в разных форматах. z.preprocess нормализует сырое тело до валидации, но для HMAC-верифицированных webhook никогда не трансформируйте значения (HMAC использует Object.values() на сыром payload):

    Для webhook с несколькими wire-форматами (например Web Vitals metrics) z.preprocess может нормализовать в каноническую форму:

    Условная валидация через superRefine

    Когда правила зависят от значений полей (например, требования к metadata различаются по типу conversation), используйте superRefine:

    Извлечение enum из TypeScript enums

    Для больших TypeScript enums (например NotificationType с 27 значениями) извлекайте значения в runtime для Zod:

    after() для неблокирующих записей аналитики

    Маршруты аналитики используют Next.js 16 after(), чтобы ответить сразу, пока записи в БД идут в фоне. Это убирает ~50 мс блокирующей задержки на каждый analytics-вызов:

    HMAC + Zod для платёжных webhook

    Обработка платёжных webhook сочетает валидацию формы Zod с верификацией HMAC-подписи:

    Поток валидации платёжного webhook
    1. 1

      Parse и валидация формы

      Zod гарантирует, что payload содержит обязательные поля (orderReference, merchantSignature, amount и т.д.) до любой обработки.

    2. 2

      Верификация HMAC-подписи

      Пересчитайте HMAC-MD5 из значений payload с помощью merchant secret key. Сравните с merchantSignature. При несовпадении отклоните.

    3. 3

      Диспетчеризация по order reference

      Разберите префикс orderReference, чтобы определить тип заказа (store, membership, news promotion) и направить в нужный обработчик.

    4. 4

      Идемпотентное обновление

      Обработчики проверяют существующий статус заказа до обновления: дублирующие webhook безопасно игнорируются.

    Валидация MCP-маршрутов

    Все маршруты /api/mcp/v1/* используют схемы Zod с .passthrough() для прямой совместимости. Это позволяет MCP-клиентам слать дополнительные поля без поломки, при этом обязательные поля всё равно валидируются:

    Устранённые анти-паттерны

    Анти-паттернПочему опасноЗамена
    body as anyОбходит всю проверку типовZod safeParse + типизированный вывод
    Ручные цепочки ifЛегко пропустить крайние случаиОдин вызов schema.safeParse()
    Мутация parsed bodyПобочные эффекты ломают предсказуемостьSpread в новый объект
    Нет валидации на маршрутеСервис получает мусорZod на границе маршрута
    as Record<string, unknown> при чтении БДСкрывает несовпадения типовschema.safeParse(dbResult.data)

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

    Сессии Auth.js v5, role enum SSOT и multi-provider setup.

    Атакующий шлёт поддельный webhook «payment completed». Ring сначала валидирует HMAC-подпись: при несовпадении webhook отклоняется до изменения статуса заказа.

    Создание opportunity

    Клиент отправляет opportunity без title или category. Zod отклоняет запрос на границе маршрута с понятным сообщением об ошибке: запись-призрак не создаётся.

    Пользовательские preferences

    Вредоносный клиент пытается внедрить неизвестные поля в preferences. Схема Zod отбрасывает неизвестные ключи: принимаются только locale, currency и theme.

    Confidential deal room

    Подписчик пытается получить confidential opportunities. Гейт маршрута проверяет роль до выполнения запроса: база не видит неавторизованный запрос.

    Вывод для оператора

    Валидация: не только забота разработчика. Она напрямую защищает выручку, доверие пользователей и compliance-позу. Каждый Ring-клон поставляет эти гарды включёнными по умолчанию.

    Никогда не используйте body as any, чтобы обойти TypeScript при вызове сервисных функций. Если сервис ожидает конкретный тип, создайте схему Zod, которая валидирует форму, затем приведите валидированный вывод: parsed.data as Parameters<typeof service>[0]. Валидация Zod делает приведение безопасным.

    z.preprocess для нормализации webhook

    Платёжные webhook (WayForPay, Stripe) приходят в разных форматах. z.preprocess нормализует сырое тело до валидации, но для HMAC-верифицированных webhook никогда не трансформируйте значения (HMAC использует Object.values() на сыром payload):

    Для webhook с несколькими wire-форматами (например Web Vitals metrics) z.preprocess может нормализовать в каноническую форму:

    Условная валидация через superRefine

    Когда правила зависят от значений полей (например, требования к metadata различаются по типу conversation), используйте superRefine:

    Извлечение enum из TypeScript enums

    Для больших TypeScript enums (например NotificationType с 27 значениями) извлекайте значения в runtime для Zod:

    after() для неблокирующих записей аналитики

    Маршруты аналитики используют Next.js 16 after(), чтобы ответить сразу, пока записи в БД идут в фоне. Это убирает ~50 мс блокирующей задержки на каждый analytics-вызов:

    HMAC + Zod для платёжных webhook

    Обработка платёжных webhook сочетает валидацию формы Zod с верификацией HMAC-подписи:

    Поток валидации платёжного webhook
    1. 1

      Parse и валидация формы

      Zod гарантирует, что payload содержит обязательные поля (orderReference, merchantSignature, amount и т.д.) до любой обработки.

    2. 2

      Верификация HMAC-подписи

      Пересчитайте HMAC-MD5 из значений payload с помощью merchant secret key. Сравните с merchantSignature. При несовпадении отклоните.

    3. 3

      Диспетчеризация по order reference

      Разберите префикс orderReference, чтобы определить тип заказа (store, membership, news promotion) и направить в нужный обработчик.

    4. 4

      Идемпотентное обновление

      Обработчики проверяют существующий статус заказа до обновления: дублирующие webhook безопасно игнорируются.

    Валидация MCP-маршрутов

    Все маршруты /api/mcp/v1/* используют схемы Zod с .passthrough() для прямой совместимости. Это позволяет MCP-клиентам слать дополнительные поля без поломки, при этом обязательные поля всё равно валидируются:

    Устранённые анти-паттерны

    Анти-паттернПочему опасноЗамена
    body as anyОбходит всю проверку типовZod safeParse + типизированный вывод
    Ручные цепочки ifЛегко пропустить крайние случаиОдин вызов schema.safeParse()
    Мутация parsed bodyПобочные эффекты ломают предсказуемостьSpread в новый объект
    Нет валидации на маршрутеСервис получает мусорZod на границе маршрута
    as Record<string, unknown> при чтении БДСкрывает несовпадения типовschema.safeParse(dbResult.data)

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

    Сессии Auth.js v5, role enum SSOT и multi-provider setup.

    Атакующий шлёт поддельный webhook «payment completed». Ring сначала валидирует HMAC-подпись: при несовпадении webhook отклоняется до изменения статуса заказа.

    Создание opportunity

    Клиент отправляет opportunity без title или category. Zod отклоняет запрос на границе маршрута с понятным сообщением об ошибке: запись-призрак не создаётся.

    Пользовательские preferences

    Вредоносный клиент пытается внедрить неизвестные поля в preferences. Схема Zod отбрасывает неизвестные ключи: принимаются только locale, currency и theme.

    Confidential deal room

    Подписчик пытается получить confidential opportunities. Гейт маршрута проверяет роль до выполнения запроса: база не видит неавторизованный запрос.

    Вывод для оператора

    Валидация: не только забота разработчика. Она напрямую защищает выручку, доверие пользователей и compliance-позу. Каждый Ring-клон поставляет эти гарды включёнными по умолчанию.

    Никогда не используйте body as any, чтобы обойти TypeScript при вызове сервисных функций. Если сервис ожидает конкретный тип, создайте схему Zod, которая валидирует форму, затем приведите валидированный вывод: parsed.data as Parameters<typeof service>[0]. Валидация Zod делает приведение безопасным.

    z.preprocess для нормализации webhook

    Платёжные webhook (WayForPay, Stripe) приходят в разных форматах. z.preprocess нормализует сырое тело до валидации, но для HMAC-верифицированных webhook никогда не трансформируйте значения (HMAC использует Object.values() на сыром payload):

    Для webhook с несколькими wire-форматами (например Web Vitals metrics) z.preprocess может нормализовать в каноническую форму:

    Условная валидация через superRefine

    Когда правила зависят от значений полей (например, требования к metadata различаются по типу conversation), используйте superRefine:

    Извлечение enum из TypeScript enums

    Для больших TypeScript enums (например NotificationType с 27 значениями) извлекайте значения в runtime для Zod:

    after() для неблокирующих записей аналитики

    Маршруты аналитики используют Next.js 16 after(), чтобы ответить сразу, пока записи в БД идут в фоне. Это убирает ~50 мс блокирующей задержки на каждый analytics-вызов:

    HMAC + Zod для платёжных webhook

    Обработка платёжных webhook сочетает валидацию формы Zod с верификацией HMAC-подписи:

    Поток валидации платёжного webhook
    1. 1

      Parse и валидация формы

      Zod гарантирует, что payload содержит обязательные поля (orderReference, merchantSignature, amount и т.д.) до любой обработки.

    2. 2

      Верификация HMAC-подписи

      Пересчитайте HMAC-MD5 из значений payload с помощью merchant secret key. Сравните с merchantSignature. При несовпадении отклоните.

    3. 3

      Диспетчеризация по order reference

      Разберите префикс orderReference, чтобы определить тип заказа (store, membership, news promotion) и направить в нужный обработчик.

    4. 4

      Идемпотентное обновление

      Обработчики проверяют существующий статус заказа до обновления: дублирующие webhook безопасно игнорируются.

    Валидация MCP-маршрутов

    Все маршруты /api/mcp/v1/* используют схемы Zod с .passthrough() для прямой совместимости. Это позволяет MCP-клиентам слать дополнительные поля без поломки, при этом обязательные поля всё равно валидируются:

    Устранённые анти-паттерны

    Анти-паттернПочему опасноЗамена
    body as anyОбходит всю проверку типовZod safeParse + типизированный вывод
    Ручные цепочки ifЛегко пропустить крайние случаиОдин вызов schema.safeParse()
    Мутация parsed bodyПобочные эффекты ломают предсказуемостьSpread в новый объект
    Нет валидации на маршрутеСервис получает мусорZod на границе маршрута
    as Record<string, unknown> при чтении БДСкрывает несовпадения типовschema.safeParse(dbResult.data)

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

    Сессии Auth.js v5, role enum SSOT и multi-provider setup.