МожливостіСутності
Документація
    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

    SubscriptionConductor

    Фільтруйте цю сторінку як Founder / Developer у бічній панелі. Засновники дізнаються що коштує кожен провайдер і як налаштувати комісії; розробники — архітектуру, контракти модулів провайдерів і деталі cron-пайплайнів.

    SubscriptionConductor (v1, Фаза S4) — мульти-провайдерна система білінгу членських підписок Ring Platform. Один SSOT-реєстр (subscription_ledger) відстежує всі стани підписників незалежно від способу оплати. Шість модулів провайдерів реалізують спільний контракт SubscriptionProviderModule, а п'ять cron-пайплайнів підтримують підписки актуальними.

    Реалізація: lib/payments/subscription/.

    Що отримують засновники від SubscriptionConductor

    Ваша платформа заробляє регулярний дохід через членські підписки — з нульовою комісією платформи на внутрішні методи (кредитний баланс, RING-токен, NFT-гейт). Оберіть, які шлюзи увімкнути, налаштуйте перекладення комісій і відстежуйте чистий дохід в адмін-панелі.

    Статус функцій

    ПровайдерДеталіШлюзСтатус
    WayForPayрекурентний білінг через recTokenWayForPay (UAH)✅ Доступно
    Кредитний балансавтосписання з внутрішніх RING-кредитівКредитні бали✅ Доступно
    RING-токенончейн-платіж у SolanaRING (Токени)✅ Доступно
    StripeStripe Subscriptions APIStripe (USD)🔮 TBD
    NFT-гейт12-місячний доступ через soulbound NFTNFT Сертифікат🔮 TBD
    PayPalPayPal рекурентний білінгPayPal (USD)🔮 TBD

    Тарифи комісій і чистий дохід

    Кожен шлюз утримує власну комісію. Внутрішні методи (кредитний баланс, RING-токен, NFT-гейт) стягують 0% — кожен долар іде вашій платформі.

    ПровайдерКомісія %Фіксована комісіяВалюта
    WayForPay2.5%—UAH
    Stripe2.9%$0.30USD
    Кредитний баланс0%—USD
    RING-токен0%—RING (Токени)
    NFT-гейт0%—RING
    PayPal

    Формула чистого доходу: net = gross - (gross × feePercent / 100) - feeFixed. Функція calculateNetRevenue() у subscription-config.ts обчислює це на сервері; адмін-панель показує gross, fee та net для кожної підписки.

    Конфігурація (ring-config.json)

    Усі налаштування провайдерів зберігаються в ring-config.json у секції payment.gateways:

    • cardPaymentProcessor — картковий шлюз за замовчуванням (wayforpay або stripe). Перевизначення через PAYMENT_MEMBERSHIP_PROCESSOR=stripe.
    • supportedMethods — провайдери, доступні користувачам при оформленні.
    • futureMethods — провайдери з позначкою "Незабаром" в UI.
    • gateways.<provider>.feePercent — відсоткова комісія, що утримується перед вашим чистим доходом.

    Адмін-панель

    Супер-адміни мають доступ до /admin/subscriptions:

    • Список підписок — фільтр за провайдером, статусом, користувачем; кожен рядок показує gross, fee та net дохід.
    • Агрегована статистика — /api/admin/subscriptions/stats повертає total_active, due_for_payment, розбивки by_provider та by_method.
    • Відстеження доходу — calculateNetRevenue() викликається для кожного рядка, щоб засновники бачили реальний дохід після комісій шлюзів.

    Архітектура

    Реєстр провайдерів

    Шість модулів провайдерів реалізують контракт SubscriptionProviderModule (lib/payments/subscription/subscription-types.ts). Conductor визначає їх за ID провайдера:

    ID провайдераМодульДжерело
    credit_balanceringCreditSubscriptionProviderproviders/ring-credit-subscription.ts
    ring_tokenringTokenSubscriptionProviderproviders/ring-token-subscription.ts
    stripestripeSubscriptionProviderproviders/stripe-subscription.ts
    wayforpaywayforpaySubscriptionProviderproviders/subscription-provider-stubs.ts

    Пов’язане

    • PaymentConductor — оркестрація одноразових платежів
    • WayForPay інтеграція
    • Гаманець і кредити
    • Магазин — потік оформлення членства
    • Адмін-панель
    1. Документація
    2. /Функції
    3. /SubscriptionConductor

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

    SubscriptionConductor

    Фільтруйте цю сторінку як Founder / Developer у бічній панелі. Засновники дізнаються що коштує кожен провайдер і як налаштувати комісії; розробники — архітектуру, контракти модулів провайдерів і деталі cron-пайплайнів.

    SubscriptionConductor (v1, Фаза S4) — мульти-провайдерна система білінгу членських підписок Ring Platform. Один SSOT-реєстр (subscription_ledger) відстежує всі стани підписників незалежно від способу оплати. Шість модулів провайдерів реалізують спільний контракт SubscriptionProviderModule, а п'ять cron-пайплайнів підтримують підписки актуальними.

    Реалізація: lib/payments/subscription/.

    Що отримують засновники від SubscriptionConductor

    Ваша платформа заробляє регулярний дохід через членські підписки — з нульовою комісією платформи на внутрішні методи (кредитний баланс, RING-токен, NFT-гейт). Оберіть, які шлюзи увімкнути, налаштуйте перекладення комісій і відстежуйте чистий дохід в адмін-панелі.

    Статус функцій

    ПровайдерДеталіШлюзСтатус
    WayForPayрекурентний білінг через recTokenWayForPay (UAH)✅ Доступно
    Кредитний балансавтосписання з внутрішніх RING-кредитівКредитні бали✅ Доступно
    RING-токенончейн-платіж у SolanaRING (Токени)✅ Доступно
    StripeStripe Subscriptions APIStripe (USD)🔮 TBD
    NFT-гейт12-місячний доступ через soulbound NFTNFT Сертифікат🔮 TBD
    PayPalPayPal рекурентний білінгPayPal (USD)🔮 TBD

    Тарифи комісій і чистий дохід

    Кожен шлюз утримує власну комісію. Внутрішні методи (кредитний баланс, RING-токен, NFT-гейт) стягують 0% — кожен долар іде вашій платформі.

    ПровайдерКомісія %Фіксована комісіяВалюта
    WayForPay2.5%—UAH
    Stripe2.9%$0.30USD
    Кредитний баланс0%—USD
    RING-токен0%—RING (Токени)
    NFT-гейт0%—RING
    PayPal

    Формула чистого доходу: net = gross - (gross × feePercent / 100) - feeFixed. Функція calculateNetRevenue() у subscription-config.ts обчислює це на сервері; адмін-панель показує gross, fee та net для кожної підписки.

    Конфігурація (ring-config.json)

    Усі налаштування провайдерів зберігаються в ring-config.json у секції payment.gateways:

    • cardPaymentProcessor — картковий шлюз за замовчуванням (wayforpay або stripe). Перевизначення через PAYMENT_MEMBERSHIP_PROCESSOR=stripe.
    • supportedMethods — провайдери, доступні користувачам при оформленні.
    • futureMethods — провайдери з позначкою "Незабаром" в UI.
    • gateways.<provider>.feePercent — відсоткова комісія, що утримується перед вашим чистим доходом.

    Адмін-панель

    Супер-адміни мають доступ до /admin/subscriptions:

    • Список підписок — фільтр за провайдером, статусом, користувачем; кожен рядок показує gross, fee та net дохід.
    • Агрегована статистика — /api/admin/subscriptions/stats повертає total_active, due_for_payment, розбивки by_provider та by_method.
    • Відстеження доходу — calculateNetRevenue() викликається для кожного рядка, щоб засновники бачили реальний дохід після комісій шлюзів.

    Архітектура

    Реєстр провайдерів

    Шість модулів провайдерів реалізують контракт SubscriptionProviderModule (lib/payments/subscription/subscription-types.ts). Conductor визначає їх за ID провайдера:

    ID провайдераМодульДжерело
    credit_balanceringCreditSubscriptionProviderproviders/ring-credit-subscription.ts
    ring_tokenringTokenSubscriptionProviderproviders/ring-token-subscription.ts
    stripestripeSubscriptionProviderproviders/stripe-subscription.ts
    wayforpaywayforpaySubscriptionProviderproviders/subscription-provider-stubs.ts

    Пов’язане

    • PaymentConductor — оркестрація одноразових платежів
    • WayForPay інтеграція
    • Гаманець і кредити
    • Магазин — потік оформлення членства
    • Адмін-панель
    1. Документація
    2. /Функції
    3. /SubscriptionConductor

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

    SubscriptionConductor

    Фільтруйте цю сторінку як Founder / Developer у бічній панелі. Засновники дізнаються що коштує кожен провайдер і як налаштувати комісії; розробники — архітектуру, контракти модулів провайдерів і деталі cron-пайплайнів.

    SubscriptionConductor (v1, Фаза S4) — мульти-провайдерна система білінгу членських підписок Ring Platform. Один SSOT-реєстр (subscription_ledger) відстежує всі стани підписників незалежно від способу оплати. Шість модулів провайдерів реалізують спільний контракт SubscriptionProviderModule, а п'ять cron-пайплайнів підтримують підписки актуальними.

    Реалізація: lib/payments/subscription/.

    Що отримують засновники від SubscriptionConductor

    Ваша платформа заробляє регулярний дохід через членські підписки — з нульовою комісією платформи на внутрішні методи (кредитний баланс, RING-токен, NFT-гейт). Оберіть, які шлюзи увімкнути, налаштуйте перекладення комісій і відстежуйте чистий дохід в адмін-панелі.

    Статус функцій

    ПровайдерДеталіШлюзСтатус
    WayForPayрекурентний білінг через recTokenWayForPay (UAH)✅ Доступно
    Кредитний балансавтосписання з внутрішніх RING-кредитівКредитні бали✅ Доступно
    RING-токенончейн-платіж у SolanaRING (Токени)✅ Доступно
    StripeStripe Subscriptions APIStripe (USD)🔮 TBD
    NFT-гейт12-місячний доступ через soulbound NFTNFT Сертифікат🔮 TBD
    PayPalPayPal рекурентний білінгPayPal (USD)🔮 TBD

    Тарифи комісій і чистий дохід

    Кожен шлюз утримує власну комісію. Внутрішні методи (кредитний баланс, RING-токен, NFT-гейт) стягують 0% — кожен долар іде вашій платформі.

    ПровайдерКомісія %Фіксована комісіяВалюта
    WayForPay2.5%—UAH
    Stripe2.9%$0.30USD
    Кредитний баланс0%—USD
    RING-токен0%—RING (Токени)
    NFT-гейт0%—RING
    PayPal

    Формула чистого доходу: net = gross - (gross × feePercent / 100) - feeFixed. Функція calculateNetRevenue() у subscription-config.ts обчислює це на сервері; адмін-панель показує gross, fee та net для кожної підписки.

    Конфігурація (ring-config.json)

    Усі налаштування провайдерів зберігаються в ring-config.json у секції payment.gateways:

    • cardPaymentProcessor — картковий шлюз за замовчуванням (wayforpay або stripe). Перевизначення через PAYMENT_MEMBERSHIP_PROCESSOR=stripe.
    • supportedMethods — провайдери, доступні користувачам при оформленні.
    • futureMethods — провайдери з позначкою "Незабаром" в UI.
    • gateways.<provider>.feePercent — відсоткова комісія, що утримується перед вашим чистим доходом.

    Адмін-панель

    Супер-адміни мають доступ до /admin/subscriptions:

    • Список підписок — фільтр за провайдером, статусом, користувачем; кожен рядок показує gross, fee та net дохід.
    • Агрегована статистика — /api/admin/subscriptions/stats повертає total_active, due_for_payment, розбивки by_provider та by_method.
    • Відстеження доходу — calculateNetRevenue() викликається для кожного рядка, щоб засновники бачили реальний дохід після комісій шлюзів.

    Архітектура

    Реєстр провайдерів

    Шість модулів провайдерів реалізують контракт SubscriptionProviderModule (lib/payments/subscription/subscription-types.ts). Conductor визначає їх за ID провайдера:

    ID провайдераМодульДжерело
    credit_balanceringCreditSubscriptionProviderproviders/ring-credit-subscription.ts
    ring_tokenringTokenSubscriptionProviderproviders/ring-token-subscription.ts
    stripestripeSubscriptionProviderproviders/stripe-subscription.ts
    wayforpaywayforpaySubscriptionProviderproviders/subscription-provider-stubs.ts

    Пов’язане

    • PaymentConductor — оркестрація одноразових платежів
    • WayForPay інтеграція
    • Гаманець і кредити
    • Магазин — потік оформлення членства
    • Адмін-панель
    1. Документація
    2. /Функції
    3. /SubscriptionConductor

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

    2.9%
    $0.30
    USD
    nft_gate
    nftGateSubscriptionProvider
    providers/subscription-provider-stubs.ts
    paypalpaypalSubscriptionProviderproviders/subscription-provider-stubs.ts

    Заглушки для WayForPay, NFT Gate та PayPal є заповнювачами; Stripe, Credit Balance та RING Token мають повні реалізації.

    Схема subscription_ledger

    SSOT-колекція: subscription_ledger. Схема визначена в lib/payments/subscription/subscription-ledger-schema.ts (Zod).

    Ключові поля:

    ПолеТипОпис
    idstringID рядка реєстру (sub_<ts>_<userIdSuffix>)
    user_idstringID користувача-власника
    providerenumstripe, wayforpay, credit_balance, ring_token, nft_gate, paypal
    gatewaystringЛюдино-читана мітка (напр. "Stripe", "WayForPay")
    methodenumcard, credit_balance, crypto, nft
    statusenumactive, expired, cancelled, suspended, grace_period
    amountnumberЦіна підписки (у мінорних одиницях)
    currencystringВалюта білінгу
    gateway_fee_percentnumberВідсоткова комісія (напр. 2.9)
    gateway_fee_fixednumberФіксована комісія в мінорних одиницях (напр. 30 для Stripe)
    stripe_subscription_idstring?Stripe-посилання (якщо провайдер Stripe)
    wayforpay_rec_tokenstring?Рекурентний токен WayForPay
    solana_tx_signaturestring?Ончейн-підпис транзакції
    nft_mint_addressstring?Адреса мінту NFT-сертифіката
    start_timenumberПочаток підписки (мс епохи)
    next_payment_duenumberЧас наступного платежу
    failed_attemptsnumberПослідовні невдачі платежу (макс 3 → авто expiring)
    auto_renewbooleanПрапор автоподовження
    total_paidstringЗагалом сплачено за весь час
    payments_countnumberКількість успішних платежів

    API Conductor

    SubscriptionConductor (lib/payments/subscription/subscription-conductor.ts) надає:

    ОпераціяСигнатураОпис
    createSubscription(input: CreateSubscriptionInput) → CreateSubscriptionResultМаршрутизація до модуля провайдера, вставка рядка реєстру
    cancelSubscription(userId, provider, gatewayRef?) → CancelSubscriptionResultСкасування у провайдера + позначка рядків реєстру
    renewSubscription(userId, provider, gatewayRef?) → RenewSubscriptionResultПоновлення у провайдера + оновлення реєстру
    getSubscription(userId) → SubscriptionLedgerRow | nullОстання активна підписка користувача
    getSubscriptions(filter) → SubscriptionLedgerRow[]Запит за користувачем, провайдером, статусом, методом, вікном оплати
    getStats() → SubscriptionStatsАгреговані підрахунки за статусом, провайдером, методом
    calculateNetRevenue(row) → { gross, fee, net, currency }Чистий дохід на рядок

    API-маршрути

    МетодШляхПризначенняАвторизація
    POST/api/membership/subscription/createСтворення підписки через conductorСесія
    GET/api/membership/subscription/statusСтатус підписки + балансСесія
    POST/api/membership/subscription/cancelСкасування підпискиСесія
    POST/api/membership/payment/tokenОбробка токен-платежуСесія
    GET/api/admin/subscriptionsСписок усіх підписокСуперадмін
    GET/api/admin/subscriptions/statsАгрегована статистикаСуперадмін

    Cron-пайплайни

    П'ять cron-пайплайнів зареєстровані в lib/processes/registry.ts у категорії membership:

    ID пайплайнуCron-шляхОбробникРозклад
    subscription-expiry-check/api/cron/subscription-expiryrunSubscriptionExpiryCheckЩодня опівночі
    credit-balance-monthly/api/cron/credit-balance-monthlyrunCreditBalanceMonthlyЩогодини
    subscription-payment/api/cron/subscription-paymentrunSubscriptionPaymentCheckЩодня о 2:00
    solana-batch-payment/api/cron/solana-batch-paymentrunSolanaBatchPaymentЩодня о 3:00
    nft-gate-expiry/api/cron/nft-gate-expiryrunNftGateExpiryЩодня о 4:00

    Пайплайни запускаються через HTTP cron-завдання за cronPath. Обробники імпортуються з lib/processes/subscription/:

    • expiry-check.ts — позначає прострочені підписки як expired і знижує ролі користувачів
    • credit-balance-monthly.ts — списує щомісячну плату з кредитного балансу
    • subscription-payment.ts — обробляє рекурентні платежі Stripe/WayForPay
    • solana-nft-stubs.ts — пакетні перекази RING-токенів і закінчення терміну NFT-гейту

    Додавання нового провайдера

    1. Реалізуйте контракт SubscriptionProviderModule у providers/<name>-subscription.ts
    2. Зареєструйте в subscription-conductor.ts у providerRegistry Map
    3. Додайте конфігурацію шлюзу в ring-config.json payment.gateways.<provider>
    4. Додайте до масиву SUBSCRIPTION_PROVIDERS у subscription-ledger-schema.ts
    5. Оновіть getMembershipPaymentOptions() у subscription-config.ts
    6. За потреби додайте обробник cron-пайплайну в lib/processes/subscription/

    Змінні середовища

    json
    
    {
      "payment": {
        "cardPaymentProcessor": "wayforpay",
        "supportedMethods": ["wayforpay", "credit_balance", "ring_token"],
        "futureMethods": ["stripe", "paypal", "nft_gate"],
        "gateways": {
          "wayforpay": { "enabled": true, "feePercent": 2.5, "currency": "UAH" },
          "stripe": { "enabled": false, "feePercent": 2.9, "feeFixedCents": 30, "currency": "USD" },
          "credit_balance": { "enabled": true, "feePercent": 0, "currency": "USD" },
          "ring_token": { "enabled": true, "feePercent": 0, "currency": "RING", "label": "Tokens" },
          "paypal": { "enabled": false, "feePercent": 2.9, "feeFixedCents": 30, "currency": "USD" },
          "nft_gate": { "enabled": false, "feePercent": 0, "currency": "RING", "label": "NFT Certificate" }
        }
      }
    }
    text
    
    Membership upgrade / checkout
            ↓
    lib/payments/subscription/subscription-conductor.ts
            ↓
    Модулі провайдерів: stripe | wayforpay | credit_balance | ring_token | nft_gate | paypal
            ↓
    subscription_ledger (PostgreSQL — провайдер-агностичний SSOT)
            ↓
    Cron-пайплайни: expiry + payment + credit-balance + solana-batch + nft-gate
    bash
    
    PAYMENT_MEMBERSHIP_PROCESSOR=wayforpay    # Перевизначення карткового шлюзу для членства
    WAYFORPAY_MERCHANT_ACCOUNT=your_merchant
    WAYFORPAY_SECRET_KEY=your_secret
    STRIPE_SECRET_KEY=sk_live_...
    STRIPE_WEBHOOK_SECRET=whsec_...
    2.9%
    $0.30
    USD
    nft_gate
    nftGateSubscriptionProvider
    providers/subscription-provider-stubs.ts
    paypalpaypalSubscriptionProviderproviders/subscription-provider-stubs.ts

    Заглушки для WayForPay, NFT Gate та PayPal є заповнювачами; Stripe, Credit Balance та RING Token мають повні реалізації.

    Схема subscription_ledger

    SSOT-колекція: subscription_ledger. Схема визначена в lib/payments/subscription/subscription-ledger-schema.ts (Zod).

    Ключові поля:

    ПолеТипОпис
    idstringID рядка реєстру (sub_<ts>_<userIdSuffix>)
    user_idstringID користувача-власника
    providerenumstripe, wayforpay, credit_balance, ring_token, nft_gate, paypal
    gatewaystringЛюдино-читана мітка (напр. "Stripe", "WayForPay")
    methodenumcard, credit_balance, crypto, nft
    statusenumactive, expired, cancelled, suspended, grace_period
    amountnumberЦіна підписки (у мінорних одиницях)
    currencystringВалюта білінгу
    gateway_fee_percentnumberВідсоткова комісія (напр. 2.9)
    gateway_fee_fixednumberФіксована комісія в мінорних одиницях (напр. 30 для Stripe)
    stripe_subscription_idstring?Stripe-посилання (якщо провайдер Stripe)
    wayforpay_rec_tokenstring?Рекурентний токен WayForPay
    solana_tx_signaturestring?Ончейн-підпис транзакції
    nft_mint_addressstring?Адреса мінту NFT-сертифіката
    start_timenumberПочаток підписки (мс епохи)
    next_payment_duenumberЧас наступного платежу
    failed_attemptsnumberПослідовні невдачі платежу (макс 3 → авто expiring)
    auto_renewbooleanПрапор автоподовження
    total_paidstringЗагалом сплачено за весь час
    payments_countnumberКількість успішних платежів

    API Conductor

    SubscriptionConductor (lib/payments/subscription/subscription-conductor.ts) надає:

    ОпераціяСигнатураОпис
    createSubscription(input: CreateSubscriptionInput) → CreateSubscriptionResultМаршрутизація до модуля провайдера, вставка рядка реєстру
    cancelSubscription(userId, provider, gatewayRef?) → CancelSubscriptionResultСкасування у провайдера + позначка рядків реєстру
    renewSubscription(userId, provider, gatewayRef?) → RenewSubscriptionResultПоновлення у провайдера + оновлення реєстру
    getSubscription(userId) → SubscriptionLedgerRow | nullОстання активна підписка користувача
    getSubscriptions(filter) → SubscriptionLedgerRow[]Запит за користувачем, провайдером, статусом, методом, вікном оплати
    getStats() → SubscriptionStatsАгреговані підрахунки за статусом, провайдером, методом
    calculateNetRevenue(row) → { gross, fee, net, currency }Чистий дохід на рядок

    API-маршрути

    МетодШляхПризначенняАвторизація
    POST/api/membership/subscription/createСтворення підписки через conductorСесія
    GET/api/membership/subscription/statusСтатус підписки + балансСесія
    POST/api/membership/subscription/cancelСкасування підпискиСесія
    POST/api/membership/payment/tokenОбробка токен-платежуСесія
    GET/api/admin/subscriptionsСписок усіх підписокСуперадмін
    GET/api/admin/subscriptions/statsАгрегована статистикаСуперадмін

    Cron-пайплайни

    П'ять cron-пайплайнів зареєстровані в lib/processes/registry.ts у категорії membership:

    ID пайплайнуCron-шляхОбробникРозклад
    subscription-expiry-check/api/cron/subscription-expiryrunSubscriptionExpiryCheckЩодня опівночі
    credit-balance-monthly/api/cron/credit-balance-monthlyrunCreditBalanceMonthlyЩогодини
    subscription-payment/api/cron/subscription-paymentrunSubscriptionPaymentCheckЩодня о 2:00
    solana-batch-payment/api/cron/solana-batch-paymentrunSolanaBatchPaymentЩодня о 3:00
    nft-gate-expiry/api/cron/nft-gate-expiryrunNftGateExpiryЩодня о 4:00

    Пайплайни запускаються через HTTP cron-завдання за cronPath. Обробники імпортуються з lib/processes/subscription/:

    • expiry-check.ts — позначає прострочені підписки як expired і знижує ролі користувачів
    • credit-balance-monthly.ts — списує щомісячну плату з кредитного балансу
    • subscription-payment.ts — обробляє рекурентні платежі Stripe/WayForPay
    • solana-nft-stubs.ts — пакетні перекази RING-токенів і закінчення терміну NFT-гейту

    Додавання нового провайдера

    1. Реалізуйте контракт SubscriptionProviderModule у providers/<name>-subscription.ts
    2. Зареєструйте в subscription-conductor.ts у providerRegistry Map
    3. Додайте конфігурацію шлюзу в ring-config.json payment.gateways.<provider>
    4. Додайте до масиву SUBSCRIPTION_PROVIDERS у subscription-ledger-schema.ts
    5. Оновіть getMembershipPaymentOptions() у subscription-config.ts
    6. За потреби додайте обробник cron-пайплайну в lib/processes/subscription/

    Змінні середовища

    json
    
    {
      "payment": {
        "cardPaymentProcessor": "wayforpay",
        "supportedMethods": ["wayforpay", "credit_balance", "ring_token"],
        "futureMethods": ["stripe", "paypal", "nft_gate"],
        "gateways": {
          "wayforpay": { "enabled": true, "feePercent": 2.5, "currency": "UAH" },
          "stripe": { "enabled": false, "feePercent": 2.9, "feeFixedCents": 30, "currency": "USD" },
          "credit_balance": { "enabled": true, "feePercent": 0, "currency": "USD" },
          "ring_token": { "enabled": true, "feePercent": 0, "currency": "RING", "label": "Tokens" },
          "paypal": { "enabled": false, "feePercent": 2.9, "feeFixedCents": 30, "currency": "USD" },
          "nft_gate": { "enabled": false, "feePercent": 0, "currency": "RING", "label": "NFT Certificate" }
        }
      }
    }
    text
    
    Membership upgrade / checkout
            ↓
    lib/payments/subscription/subscription-conductor.ts
            ↓
    Модулі провайдерів: stripe | wayforpay | credit_balance | ring_token | nft_gate | paypal
            ↓
    subscription_ledger (PostgreSQL — провайдер-агностичний SSOT)
            ↓
    Cron-пайплайни: expiry + payment + credit-balance + solana-batch + nft-gate
    bash
    
    PAYMENT_MEMBERSHIP_PROCESSOR=wayforpay    # Перевизначення карткового шлюзу для членства
    WAYFORPAY_MERCHANT_ACCOUNT=your_merchant
    WAYFORPAY_SECRET_KEY=your_secret
    STRIPE_SECRET_KEY=sk_live_...
    STRIPE_WEBHOOK_SECRET=whsec_...
    2.9%
    $0.30
    USD
    nft_gate
    nftGateSubscriptionProvider
    providers/subscription-provider-stubs.ts
    paypalpaypalSubscriptionProviderproviders/subscription-provider-stubs.ts

    Заглушки для WayForPay, NFT Gate та PayPal є заповнювачами; Stripe, Credit Balance та RING Token мають повні реалізації.

    Схема subscription_ledger

    SSOT-колекція: subscription_ledger. Схема визначена в lib/payments/subscription/subscription-ledger-schema.ts (Zod).

    Ключові поля:

    ПолеТипОпис
    idstringID рядка реєстру (sub_<ts>_<userIdSuffix>)
    user_idstringID користувача-власника
    providerenumstripe, wayforpay, credit_balance, ring_token, nft_gate, paypal
    gatewaystringЛюдино-читана мітка (напр. "Stripe", "WayForPay")
    methodenumcard, credit_balance, crypto, nft
    statusenumactive, expired, cancelled, suspended, grace_period
    amountnumberЦіна підписки (у мінорних одиницях)
    currencystringВалюта білінгу
    gateway_fee_percentnumberВідсоткова комісія (напр. 2.9)
    gateway_fee_fixednumberФіксована комісія в мінорних одиницях (напр. 30 для Stripe)
    stripe_subscription_idstring?Stripe-посилання (якщо провайдер Stripe)
    wayforpay_rec_tokenstring?Рекурентний токен WayForPay
    solana_tx_signaturestring?Ончейн-підпис транзакції
    nft_mint_addressstring?Адреса мінту NFT-сертифіката
    start_timenumberПочаток підписки (мс епохи)
    next_payment_duenumberЧас наступного платежу
    failed_attemptsnumberПослідовні невдачі платежу (макс 3 → авто expiring)
    auto_renewbooleanПрапор автоподовження
    total_paidstringЗагалом сплачено за весь час
    payments_countnumberКількість успішних платежів

    API Conductor

    SubscriptionConductor (lib/payments/subscription/subscription-conductor.ts) надає:

    ОпераціяСигнатураОпис
    createSubscription(input: CreateSubscriptionInput) → CreateSubscriptionResultМаршрутизація до модуля провайдера, вставка рядка реєстру
    cancelSubscription(userId, provider, gatewayRef?) → CancelSubscriptionResultСкасування у провайдера + позначка рядків реєстру
    renewSubscription(userId, provider, gatewayRef?) → RenewSubscriptionResultПоновлення у провайдера + оновлення реєстру
    getSubscription(userId) → SubscriptionLedgerRow | nullОстання активна підписка користувача
    getSubscriptions(filter) → SubscriptionLedgerRow[]Запит за користувачем, провайдером, статусом, методом, вікном оплати
    getStats() → SubscriptionStatsАгреговані підрахунки за статусом, провайдером, методом
    calculateNetRevenue(row) → { gross, fee, net, currency }Чистий дохід на рядок

    API-маршрути

    МетодШляхПризначенняАвторизація
    POST/api/membership/subscription/createСтворення підписки через conductorСесія
    GET/api/membership/subscription/statusСтатус підписки + балансСесія
    POST/api/membership/subscription/cancelСкасування підпискиСесія
    POST/api/membership/payment/tokenОбробка токен-платежуСесія
    GET/api/admin/subscriptionsСписок усіх підписокСуперадмін
    GET/api/admin/subscriptions/statsАгрегована статистикаСуперадмін

    Cron-пайплайни

    П'ять cron-пайплайнів зареєстровані в lib/processes/registry.ts у категорії membership:

    ID пайплайнуCron-шляхОбробникРозклад
    subscription-expiry-check/api/cron/subscription-expiryrunSubscriptionExpiryCheckЩодня опівночі
    credit-balance-monthly/api/cron/credit-balance-monthlyrunCreditBalanceMonthlyЩогодини
    subscription-payment/api/cron/subscription-paymentrunSubscriptionPaymentCheckЩодня о 2:00
    solana-batch-payment/api/cron/solana-batch-paymentrunSolanaBatchPaymentЩодня о 3:00
    nft-gate-expiry/api/cron/nft-gate-expiryrunNftGateExpiryЩодня о 4:00

    Пайплайни запускаються через HTTP cron-завдання за cronPath. Обробники імпортуються з lib/processes/subscription/:

    • expiry-check.ts — позначає прострочені підписки як expired і знижує ролі користувачів
    • credit-balance-monthly.ts — списує щомісячну плату з кредитного балансу
    • subscription-payment.ts — обробляє рекурентні платежі Stripe/WayForPay
    • solana-nft-stubs.ts — пакетні перекази RING-токенів і закінчення терміну NFT-гейту

    Додавання нового провайдера

    1. Реалізуйте контракт SubscriptionProviderModule у providers/<name>-subscription.ts
    2. Зареєструйте в subscription-conductor.ts у providerRegistry Map
    3. Додайте конфігурацію шлюзу в ring-config.json payment.gateways.<provider>
    4. Додайте до масиву SUBSCRIPTION_PROVIDERS у subscription-ledger-schema.ts
    5. Оновіть getMembershipPaymentOptions() у subscription-config.ts
    6. За потреби додайте обробник cron-пайплайну в lib/processes/subscription/

    Змінні середовища

    json
    
    {
      "payment": {
        "cardPaymentProcessor": "wayforpay",
        "supportedMethods": ["wayforpay", "credit_balance", "ring_token"],
        "futureMethods": ["stripe", "paypal", "nft_gate"],
        "gateways": {
          "wayforpay": { "enabled": true, "feePercent": 2.5, "currency": "UAH" },
          "stripe": { "enabled": false, "feePercent": 2.9, "feeFixedCents": 30, "currency": "USD" },
          "credit_balance": { "enabled": true, "feePercent": 0, "currency": "USD" },
          "ring_token": { "enabled": true, "feePercent": 0, "currency": "RING", "label": "Tokens" },
          "paypal": { "enabled": false, "feePercent": 2.9, "feeFixedCents": 30, "currency": "USD" },
          "nft_gate": { "enabled": false, "feePercent": 0, "currency": "RING", "label": "NFT Certificate" }
        }
      }
    }
    text
    
    Membership upgrade / checkout
            ↓
    lib/payments/subscription/subscription-conductor.ts
            ↓
    Модулі провайдерів: stripe | wayforpay | credit_balance | ring_token | nft_gate | paypal
            ↓
    subscription_ledger (PostgreSQL — провайдер-агностичний SSOT)
            ↓
    Cron-пайплайни: expiry + payment + credit-balance + solana-batch + nft-gate
    bash
    
    PAYMENT_MEMBERSHIP_PROCESSOR=wayforpay    # Перевизначення карткового шлюзу для членства
    WAYFORPAY_MERCHANT_ACCOUNT=your_merchant
    WAYFORPAY_SECRET_KEY=your_secret
    STRIPE_SECRET_KEY=sk_live_...
    STRIPE_WEBHOOK_SECRET=whsec_...