МожливостіСутності
Документація
    Ring Platform

    Децентралізоване самобудівне майбутнє

    Увійти
    Сутності
    Можливості
    Магазин
    Документація
    Концепції
    RING ЕкономікаSonoratek LLCГлобальний впливAI зустрічає Web3
    Розпочати
    Швидкий стартКалькуляторДорожня карта
    Конфіденційність|Контакти
    v1.104.25|Sonoratek LLC

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура 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
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура 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
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура 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

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

    Використовуйте вкладки Founder / Developer на бічній панелі документації. Засновники: дізнайтеся, як валідація захищає ваші бізнес-дані. Розробники: отримайте повний довідник патернів Zod із реальними прикладами кодової бази.

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

    Шари валідації на одному погляді

    || Шар | Що виявляє | Хто відповідає | ||-------|----------------|-------------| || Межа маршруту | Відсутні поля, неправильні типи, некоректний JSON | Схеми Zod в обробниках маршрутів /app/api/** | || Межа сервісу | Порушення бізнес-правил (неправильна роль, відсутнє право власності) | Доменно-орієнтовані сервіси у features/*/services/ | || Межа бази даних | Порушення обмежень (NOT NULL, UNIQUE, CHECK) | Обмеження PostgreSQL у data/schema.sql |

    Кожен шар додає вузьку гарантію. Жоден окремий шар не замінює інші.

    Чому валідація захищає ваш бізнес

    Ціна поганих даних

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

    • Створити фантомні записи — можливість без назви з’являється в результатах пошуку
    • Пошкодити платіжні записи — webhook із підробленим підписом запускає повернення коштів
    • Порушити роботу користувацького інтерфейсу — недійсні налаштування призводять до падіння сторінки параметрів
    • Розкрити конфіденційні дані — відсутня перевірка видимості відкриває оголошення кімнати угоди

    Тришарова валідація Ring Platform виявляє це до того, як дані потраплять у вашу базу.

    Що це означає для вашого клону

    Виконуючи ringize розгортання, ви успадковуєте валідацію, яка:

    • Відхиляє неповні профілі сутностей — ім’я, тип, розташування та видимість потрібні до створення запису
    • Перевіряє платіжні webhook-и — HMAC-підписи WayForPay перевіряються до будь-якої зміни статусу замовлення
    • Захищає конфіденційні рівні — валідація ролі відбувається до повернення конфіденційних даних сутності/можливості
    • Запобігає ін’єкції налаштувань — параметри користувача перевіряються за відомою схемою, тому невідомі поля не можуть непомітно проникнути

    Бізнес-сценарії

    Підроблення платіжного webhook

    Зловмисник надсилає фальшивий webhook «платіж завершено». Ring спочатку перевіряє HMAC-підпис — якщо він не збігається, webhook відхиляється до будь-якої зміни статусу замовлення.

    Створення можливості

    Клієнт надсилає можливість без назви або категорії. Zod відхиляє її на межі маршруту з чітким повідомленням про помилку — фантомний запис не створюється.

    Налаштування користувача

    Шкідливий клієнт намагається додати невідомі поля до налаштувань. Схема Zod вилучає невідомі ключі — дозволені лише locale, currency і theme.

    Конфіденційна кімната угоди

    Висновок для оператора

    Валідація — це не лише питання для розробників: вона безпосередньо захищає ваші доходи, довіру користувачів і стан відповідності вимогам. Кожен клон Ring постачається з цими захисними механізмами, увімкненими за замовчуванням.

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

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

    Розташування схем (SSOT)

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

    Канонічний патерн межі маршруту

    Кожен API-маршрут дотримується цього патерну — розібрати, перевірити, а потім використати типізовані дані:

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

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

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

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

    Для webhook-ів із кількома дротовими форматами (наприклад, метрики Web Vitals) z.preprocess може нормалізувати дані до канонічної форми:

    Умовна валідація з superRefine

    Коли правила валідації залежать від значень полів (наприклад, вимоги до метаданих різняться залежно від типу розмови), використовуйте :

    Пов’язана документація

    Модель безпеки

    RBAC, конфіденційні рівні, чекліст зміцнення API та захист автентифікації на рівні макета.

    Модель даних

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

    PaymentConductor

    Перевірка HMAC webhook-ів, ідемпотентні посилання на замовлення та потоки розрахунків.

    Найкращі практики

    Угоди Server Action, патерни доступу до бази даних і обробка помилок.

    1. Документація
    2. /Архітектура
    3. /Валідація даних

    Оновлено 6 вер. 2026 р.5 хв прослуховування

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

    Використовуйте вкладки Founder / Developer на бічній панелі документації. Засновники: дізнайтеся, як валідація захищає ваші бізнес-дані. Розробники: отримайте повний довідник патернів Zod із реальними прикладами кодової бази.

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

    Шари валідації на одному погляді

    || Шар | Що виявляє | Хто відповідає | ||-------|----------------|-------------| || Межа маршруту | Відсутні поля, неправильні типи, некоректний JSON | Схеми Zod в обробниках маршрутів /app/api/** | || Межа сервісу | Порушення бізнес-правил (неправильна роль, відсутнє право власності) | Доменно-орієнтовані сервіси у features/*/services/ | || Межа бази даних | Порушення обмежень (NOT NULL, UNIQUE, CHECK) | Обмеження PostgreSQL у data/schema.sql |

    Кожен шар додає вузьку гарантію. Жоден окремий шар не замінює інші.

    Чому валідація захищає ваш бізнес

    Ціна поганих даних

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

    • Створити фантомні записи — можливість без назви з’являється в результатах пошуку
    • Пошкодити платіжні записи — webhook із підробленим підписом запускає повернення коштів
    • Порушити роботу користувацького інтерфейсу — недійсні налаштування призводять до падіння сторінки параметрів
    • Розкрити конфіденційні дані — відсутня перевірка видимості відкриває оголошення кімнати угоди

    Тришарова валідація Ring Platform виявляє це до того, як дані потраплять у вашу базу.

    Що це означає для вашого клону

    Виконуючи ringize розгортання, ви успадковуєте валідацію, яка:

    • Відхиляє неповні профілі сутностей — ім’я, тип, розташування та видимість потрібні до створення запису
    • Перевіряє платіжні webhook-и — HMAC-підписи WayForPay перевіряються до будь-якої зміни статусу замовлення
    • Захищає конфіденційні рівні — валідація ролі відбувається до повернення конфіденційних даних сутності/можливості
    • Запобігає ін’єкції налаштувань — параметри користувача перевіряються за відомою схемою, тому невідомі поля не можуть непомітно проникнути

    Бізнес-сценарії

    Підроблення платіжного webhook

    Зловмисник надсилає фальшивий webhook «платіж завершено». Ring спочатку перевіряє HMAC-підпис — якщо він не збігається, webhook відхиляється до будь-якої зміни статусу замовлення.

    Створення можливості

    Клієнт надсилає можливість без назви або категорії. Zod відхиляє її на межі маршруту з чітким повідомленням про помилку — фантомний запис не створюється.

    Налаштування користувача

    Шкідливий клієнт намагається додати невідомі поля до налаштувань. Схема Zod вилучає невідомі ключі — дозволені лише locale, currency і theme.

    Конфіденційна кімната угоди

    Висновок для оператора

    Валідація — це не лише питання для розробників: вона безпосередньо захищає ваші доходи, довіру користувачів і стан відповідності вимогам. Кожен клон Ring постачається з цими захисними механізмами, увімкненими за замовчуванням.

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

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

    Розташування схем (SSOT)

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

    Канонічний патерн межі маршруту

    Кожен API-маршрут дотримується цього патерну — розібрати, перевірити, а потім використати типізовані дані:

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

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

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

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

    Для webhook-ів із кількома дротовими форматами (наприклад, метрики Web Vitals) z.preprocess може нормалізувати дані до канонічної форми:

    Умовна валідація з superRefine

    Коли правила валідації залежать від значень полів (наприклад, вимоги до метаданих різняться залежно від типу розмови), використовуйте :

    Пов’язана документація

    Модель безпеки

    RBAC, конфіденційні рівні, чекліст зміцнення API та захист автентифікації на рівні макета.

    Модель даних

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

    PaymentConductor

    Перевірка HMAC webhook-ів, ідемпотентні посилання на замовлення та потоки розрахунків.

    Найкращі практики

    Угоди Server Action, патерни доступу до бази даних і обробка помилок.

    1. Документація
    2. /Архітектура
    3. /Валідація даних

    Оновлено 6 вер. 2026 р.5 хв прослуховування

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

    Використовуйте вкладки Founder / Developer на бічній панелі документації. Засновники: дізнайтеся, як валідація захищає ваші бізнес-дані. Розробники: отримайте повний довідник патернів Zod із реальними прикладами кодової бази.

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

    Шари валідації на одному погляді

    || Шар | Що виявляє | Хто відповідає | ||-------|----------------|-------------| || Межа маршруту | Відсутні поля, неправильні типи, некоректний JSON | Схеми Zod в обробниках маршрутів /app/api/** | || Межа сервісу | Порушення бізнес-правил (неправильна роль, відсутнє право власності) | Доменно-орієнтовані сервіси у features/*/services/ | || Межа бази даних | Порушення обмежень (NOT NULL, UNIQUE, CHECK) | Обмеження PostgreSQL у data/schema.sql |

    Кожен шар додає вузьку гарантію. Жоден окремий шар не замінює інші.

    Чому валідація захищає ваш бізнес

    Ціна поганих даних

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

    • Створити фантомні записи — можливість без назви з’являється в результатах пошуку
    • Пошкодити платіжні записи — webhook із підробленим підписом запускає повернення коштів
    • Порушити роботу користувацького інтерфейсу — недійсні налаштування призводять до падіння сторінки параметрів
    • Розкрити конфіденційні дані — відсутня перевірка видимості відкриває оголошення кімнати угоди

    Тришарова валідація Ring Platform виявляє це до того, як дані потраплять у вашу базу.

    Що це означає для вашого клону

    Виконуючи ringize розгортання, ви успадковуєте валідацію, яка:

    • Відхиляє неповні профілі сутностей — ім’я, тип, розташування та видимість потрібні до створення запису
    • Перевіряє платіжні webhook-и — HMAC-підписи WayForPay перевіряються до будь-якої зміни статусу замовлення
    • Захищає конфіденційні рівні — валідація ролі відбувається до повернення конфіденційних даних сутності/можливості
    • Запобігає ін’єкції налаштувань — параметри користувача перевіряються за відомою схемою, тому невідомі поля не можуть непомітно проникнути

    Бізнес-сценарії

    Підроблення платіжного webhook

    Зловмисник надсилає фальшивий webhook «платіж завершено». Ring спочатку перевіряє HMAC-підпис — якщо він не збігається, webhook відхиляється до будь-якої зміни статусу замовлення.

    Створення можливості

    Клієнт надсилає можливість без назви або категорії. Zod відхиляє її на межі маршруту з чітким повідомленням про помилку — фантомний запис не створюється.

    Налаштування користувача

    Шкідливий клієнт намагається додати невідомі поля до налаштувань. Схема Zod вилучає невідомі ключі — дозволені лише locale, currency і theme.

    Конфіденційна кімната угоди

    Висновок для оператора

    Валідація — це не лише питання для розробників: вона безпосередньо захищає ваші доходи, довіру користувачів і стан відповідності вимогам. Кожен клон Ring постачається з цими захисними механізмами, увімкненими за замовчуванням.

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

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

    Розташування схем (SSOT)

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

    Канонічний патерн межі маршруту

    Кожен API-маршрут дотримується цього патерну — розібрати, перевірити, а потім використати типізовані дані:

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

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

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

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

    Для webhook-ів із кількома дротовими форматами (наприклад, метрики Web Vitals) z.preprocess може нормалізувати дані до канонічної форми:

    Умовна валідація з superRefine

    Коли правила валідації залежать від значень полів (наприклад, вимоги до метаданих різняться залежно від типу розмови), використовуйте :

    Пов’язана документація

    Модель безпеки

    RBAC, конфіденційні рівні, чекліст зміцнення API та захист автентифікації на рівні макета.

    Модель даних

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

    PaymentConductor

    Перевірка HMAC webhook-ів, ідемпотентні посилання на замовлення та потоки розрахунків.

    Найкращі практики

    Угоди Server Action, патерни доступу до бази даних і обробка помилок.

    1. Документація
    2. /Архітектура
    3. /Валідація даних

    Оновлено 6 вер. 2026 р.5 хв прослуховування

    Підписник намагається отримати доступ до конфіденційних можливостей. Захист маршруту перевіряє роль до виконання запиту — база даних ніколи не бачить неавторизованого запиту.

    superRefine

    Витягування enum із TypeScript enum

    Для великих TypeScript enum (наприклад, NotificationType із 27 значеннями) витягніть значення під час виконання для Zod:

    after() для неблокувальних записів аналітики

    Маршрути аналітики використовують after() Next.js 16, щоб відповідати одразу, поки записи до БД виконуються у фоновому режимі. Це усуває близько 50 мс блокувальної затримки для кожного аналітичного виклику:

    HMAC + Zod для платіжних webhook-ів

    Обробка платіжного webhook поєднує перевірку форми за допомогою Zod із перевіркою HMAC-підпису:

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

      Розібрати й перевірити форму

      Zod гарантує, що payload має обов’язкові поля (orderReference, merchantSignature, amount тощо) до початку будь-якої обробки.

    2. 2

      Перевірити HMAC-підпис

      Повторно обчисліть HMAC-MD5 зі значень payload, використовуючи секретний ключ продавця. Порівняйте результат із merchantSignature. У разі невідповідності відхиліть запит.

    3. 3

      Направити за посиланням на замовлення

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

    4. 4

      Ідемпотентне оновлення

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

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

    Усі маршрути /api/mcp/v1/* використовують схеми Zod із .passthrough() для прямої сумісності. Це дозволяє MCP-клієнтам надсилати додаткові поля без помилок, водночас обов’язкові поля все одно перевіряються:

    Устранені антипатерни

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

    Автентифікація

    Сесії Auth.js v5, SSOT enum ролей і налаштування кількох провайдерів.

    Підписник намагається отримати доступ до конфіденційних можливостей. Захист маршруту перевіряє роль до виконання запиту — база даних ніколи не бачить неавторизованого запиту.

    superRefine

    Витягування enum із TypeScript enum

    Для великих TypeScript enum (наприклад, NotificationType із 27 значеннями) витягніть значення під час виконання для Zod:

    after() для неблокувальних записів аналітики

    Маршрути аналітики використовують after() Next.js 16, щоб відповідати одразу, поки записи до БД виконуються у фоновому режимі. Це усуває близько 50 мс блокувальної затримки для кожного аналітичного виклику:

    HMAC + Zod для платіжних webhook-ів

    Обробка платіжного webhook поєднує перевірку форми за допомогою Zod із перевіркою HMAC-підпису:

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

      Розібрати й перевірити форму

      Zod гарантує, що payload має обов’язкові поля (orderReference, merchantSignature, amount тощо) до початку будь-якої обробки.

    2. 2

      Перевірити HMAC-підпис

      Повторно обчисліть HMAC-MD5 зі значень payload, використовуючи секретний ключ продавця. Порівняйте результат із merchantSignature. У разі невідповідності відхиліть запит.

    3. 3

      Направити за посиланням на замовлення

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

    4. 4

      Ідемпотентне оновлення

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

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

    Усі маршрути /api/mcp/v1/* використовують схеми Zod із .passthrough() для прямої сумісності. Це дозволяє MCP-клієнтам надсилати додаткові поля без помилок, водночас обов’язкові поля все одно перевіряються:

    Устранені антипатерни

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

    Автентифікація

    Сесії Auth.js v5, SSOT enum ролей і налаштування кількох провайдерів.

    Підписник намагається отримати доступ до конфіденційних можливостей. Захист маршруту перевіряє роль до виконання запиту — база даних ніколи не бачить неавторизованого запиту.

    superRefine

    Витягування enum із TypeScript enum

    Для великих TypeScript enum (наприклад, NotificationType із 27 значеннями) витягніть значення під час виконання для Zod:

    after() для неблокувальних записів аналітики

    Маршрути аналітики використовують after() Next.js 16, щоб відповідати одразу, поки записи до БД виконуються у фоновому режимі. Це усуває близько 50 мс блокувальної затримки для кожного аналітичного виклику:

    HMAC + Zod для платіжних webhook-ів

    Обробка платіжного webhook поєднує перевірку форми за допомогою Zod із перевіркою HMAC-підпису:

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

      Розібрати й перевірити форму

      Zod гарантує, що payload має обов’язкові поля (orderReference, merchantSignature, amount тощо) до початку будь-якої обробки.

    2. 2

      Перевірити HMAC-підпис

      Повторно обчисліть HMAC-MD5 зі значень payload, використовуючи секретний ключ продавця. Порівняйте результат із merchantSignature. У разі невідповідності відхиліть запит.

    3. 3

      Направити за посиланням на замовлення

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

    4. 4

      Ідемпотентне оновлення

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

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

    Усі маршрути /api/mcp/v1/* використовують схеми Zod із .passthrough() для прямої сумісності. Це дозволяє MCP-клієнтам надсилати додаткові поля без помилок, водночас обов’язкові поля все одно перевіряються:

    Устранені антипатерни

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

    Автентифікація

    Сесії Auth.js v5, SSOT enum ролей і налаштування кількох провайдерів.