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

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

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

    Documentation

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

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    Real-Time Messaging
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    White Label
    Интеграция Web3
    Реальные Проекты
    Кастомизация
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server

    Быстрый вход (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
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    Real-Time Messaging
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    White Label
    Интеграция Web3
    Реальные Проекты
    Кастомизация
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server

    Быстрый вход (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
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    Real-Time Messaging
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    White Label
    Интеграция Web3
    Реальные Проекты
    Кастомизация
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server

    Быстрый вход (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

    Интеграция Firebase

    Ring Platform использует Firebase в двух отдельных направлениях — серверный Admin SDK для FCM push и серверных операций, и клиентский браузерный SDK для регистрации push-токенов и отображения уведомлений. Эти направления используют разные стратегии учётных данных и разные версии SDK.

    В режимах k8s-postgres-fcm и supabase-fcm Firebase Admin используется только для FCM push. Абстракция базы данных (DatabaseService) маршрутизирует к PostgreSQL, а не к Firestore. Только DB_BACKEND_MODE=firebase-full активирует Firestore как основное хранилище данных.

    Серверные файлы

    ФайлНазначениеСтратегия учётных данных
    lib/firebase-admin.server.tsSingleton Firebase Admin SDK — FCM, Auth, Firestore, RTDBВсегда явный cert() — требует AUTH_FIREBASE_CLIENT_EMAIL + AUTH_FIREBASE_PRIVATE_KEY
    lib/database/adapters/FirebaseAdapter.tsАбстракция базы данных для Firestore (активен только в режиме firebase-full)ADC-first — запасной cert() при наличии учётных данных в конфигурации
    lib/services/firebase-service-manager.tsКэшированные чтения Firestore с использованием React 19 cache(), пакетные операции, транзакцииДелегирует к firebase-admin.server.ts
    lib/firebase/build-mock.server.tsИмитация сервисов во время SSG-сборки Next.js — предотвращает 22+ лишних инициализацийВозвращает имитации без подключения

    Клиентские файлы

    ФайлНазначение
    public/firebase-messaging-sw.jsService worker — Firebase compat SDK v12.9.0 загружается с CDN, обрабатывает push-события и фоновые сообщения

    Файл lib/firebase.ts отсутствует — клиентский Firebase инициализируется исключительно внутри service worker через importScripts() с CDN. Регистрация FCM-токена в браузере происходит в React-компонентах с помощью хука use-fcm.ts внутри FCMProvider.

    Когда мне нужен Firebase?

    Ваш Ring-клон требует учётных данных Firebase в двух контекстах:

    1. Push-уведомления (FCM) — опционально для всех значений DB_BACKEND_MODE. Firebase является только транспортным средством доставки push; ваши данные приложения остаются в основной базе данных (PostgreSQL или Firestore).
    2. Полноценный бэкенд Firestore — только когда DB_BACKEND_MODE=firebase-full. Firebase Admin SDK служит основной базой данных.

    Если вам не нужны push-уведомления, вы можете опустить все переменные окружения Firebase. Платформа работает на одном PostgreSQL.

    Какие функции Firebase НЕ используются

    • Firebase Authentication (Auth.js v5 обрабатывает всю аутентификацию — Google, Apple, email, криптокошелёк)
    • Firebase Storage (загрузка файлов осуществляется через Vercel Blob или /api/entities/upload)
    • Firebase Realtime Database (не подключена к данным приложения; экспорт RTDB существует в firebase-admin.server.ts, но не используется в режиме firebase-full)
    • Firebase Hosting (Ring Platform работает на k3s, Vercel или Docker)
    • FirebaseUI / клиентский auth SDK (файл lib/firebase.ts отсутствует)

    Firebase Admin SDK (firebase-admin.server.ts)

    Admin SDK инициализируется с явными учётными данными сервисного аккаунта через cert(). Все три переменные окружения AUTH_FIREBASE_* являются обязательными — запасной вариант ADC в этом файле отсутствует.

    Экспорты:

    ЭкспортВозвращаетПримечания
    getAdminDb()Firestore или имитацияВозвращает имитацию в режимах postgres-primary и во время сборки
    getAdminAuth()Auth или имитацияТа же логика имитации
    getAdminRtdb()Database или имитацияRTDB — активно не используется в маршрутах приложения

    В режимах k8s-postgres-fcm и supabase-fcm все три возвращают из . Имитация удовлетворяет типам TypeScript, но никогда не подключается к Firebase. Это предотвращает инициализацию Firebase, когда активен только PostgreSQL.

    Интеграция Firebase

    Ring Platform использует Firebase в двух отдельных направлениях — серверный Admin SDK для FCM push и серверных операций, и клиентский браузерный SDK для регистрации push-токенов и отображения уведомлений. Эти направления используют разные стратегии учётных данных и разные версии SDK.

    В режимах k8s-postgres-fcm и supabase-fcm Firebase Admin используется только для FCM push. Абстракция базы данных (DatabaseService) маршрутизирует к PostgreSQL, а не к Firestore. Только DB_BACKEND_MODE=firebase-full активирует Firestore как основное хранилище данных.

    Серверные файлы

    ФайлНазначениеСтратегия учётных данных
    lib/firebase-admin.server.tsSingleton Firebase Admin SDK — FCM, Auth, Firestore, RTDBВсегда явный cert() — требует AUTH_FIREBASE_CLIENT_EMAIL + AUTH_FIREBASE_PRIVATE_KEY
    lib/database/adapters/FirebaseAdapter.tsАбстракция базы данных для Firestore (активен только в режиме firebase-full)ADC-first — запасной cert() при наличии учётных данных в конфигурации
    lib/services/firebase-service-manager.tsКэшированные чтения Firestore с использованием React 19 cache(), пакетные операции, транзакцииДелегирует к firebase-admin.server.ts
    lib/firebase/build-mock.server.tsИмитация сервисов во время SSG-сборки Next.js — предотвращает 22+ лишних инициализацийВозвращает имитации без подключения

    Клиентские файлы

    ФайлНазначение
    public/firebase-messaging-sw.jsService worker — Firebase compat SDK v12.9.0 загружается с CDN, обрабатывает push-события и фоновые сообщения

    Файл lib/firebase.ts отсутствует — клиентский Firebase инициализируется исключительно внутри service worker через importScripts() с CDN. Регистрация FCM-токена в браузере происходит в React-компонентах с помощью хука use-fcm.ts внутри FCMProvider.

    Когда мне нужен Firebase?

    Ваш Ring-клон требует учётных данных Firebase в двух контекстах:

    1. Push-уведомления (FCM) — опционально для всех значений DB_BACKEND_MODE. Firebase является только транспортным средством доставки push; ваши данные приложения остаются в основной базе данных (PostgreSQL или Firestore).
    2. Полноценный бэкенд Firestore — только когда DB_BACKEND_MODE=firebase-full. Firebase Admin SDK служит основной базой данных.

    Если вам не нужны push-уведомления, вы можете опустить все переменные окружения Firebase. Платформа работает на одном PostgreSQL.

    Какие функции Firebase НЕ используются

    • Firebase Authentication (Auth.js v5 обрабатывает всю аутентификацию — Google, Apple, email, криптокошелёк)
    • Firebase Storage (загрузка файлов осуществляется через Vercel Blob или /api/entities/upload)
    • Firebase Realtime Database (не подключена к данным приложения; экспорт RTDB существует в firebase-admin.server.ts, но не используется в режиме firebase-full)
    • Firebase Hosting (Ring Platform работает на k3s, Vercel или Docker)
    • FirebaseUI / клиентский auth SDK (файл lib/firebase.ts отсутствует)

    Firebase Admin SDK (firebase-admin.server.ts)

    Admin SDK инициализируется с явными учётными данными сервисного аккаунта через cert(). Все три переменные окружения AUTH_FIREBASE_* являются обязательными — запасной вариант ADC в этом файле отсутствует.

    Экспорты:

    ЭкспортВозвращаетПримечания
    getAdminDb()Firestore или имитацияВозвращает имитацию в режимах postgres-primary и во время сборки
    getAdminAuth()Auth или имитацияТа же логика имитации
    getAdminRtdb()Database или имитацияRTDB — активно не используется в маршрутах приложения

    В режимах k8s-postgres-fcm и supabase-fcm все три возвращают из . Имитация удовлетворяет типам TypeScript, но никогда не подключается к Firebase. Это предотвращает инициализацию Firebase, когда активен только PostgreSQL.

    Интеграция Firebase

    Ring Platform использует Firebase в двух отдельных направлениях — серверный Admin SDK для FCM push и серверных операций, и клиентский браузерный SDK для регистрации push-токенов и отображения уведомлений. Эти направления используют разные стратегии учётных данных и разные версии SDK.

    В режимах k8s-postgres-fcm и supabase-fcm Firebase Admin используется только для FCM push. Абстракция базы данных (DatabaseService) маршрутизирует к PostgreSQL, а не к Firestore. Только DB_BACKEND_MODE=firebase-full активирует Firestore как основное хранилище данных.

    Серверные файлы

    ФайлНазначениеСтратегия учётных данных
    lib/firebase-admin.server.tsSingleton Firebase Admin SDK — FCM, Auth, Firestore, RTDBВсегда явный cert() — требует AUTH_FIREBASE_CLIENT_EMAIL + AUTH_FIREBASE_PRIVATE_KEY
    lib/database/adapters/FirebaseAdapter.tsАбстракция базы данных для Firestore (активен только в режиме firebase-full)ADC-first — запасной cert() при наличии учётных данных в конфигурации
    lib/services/firebase-service-manager.tsКэшированные чтения Firestore с использованием React 19 cache(), пакетные операции, транзакцииДелегирует к firebase-admin.server.ts
    lib/firebase/build-mock.server.tsИмитация сервисов во время SSG-сборки Next.js — предотвращает 22+ лишних инициализацийВозвращает имитации без подключения

    Клиентские файлы

    ФайлНазначение
    public/firebase-messaging-sw.jsService worker — Firebase compat SDK v12.9.0 загружается с CDN, обрабатывает push-события и фоновые сообщения

    Файл lib/firebase.ts отсутствует — клиентский Firebase инициализируется исключительно внутри service worker через importScripts() с CDN. Регистрация FCM-токена в браузере происходит в React-компонентах с помощью хука use-fcm.ts внутри FCMProvider.

    Когда мне нужен Firebase?

    Ваш Ring-клон требует учётных данных Firebase в двух контекстах:

    1. Push-уведомления (FCM) — опционально для всех значений DB_BACKEND_MODE. Firebase является только транспортным средством доставки push; ваши данные приложения остаются в основной базе данных (PostgreSQL или Firestore).
    2. Полноценный бэкенд Firestore — только когда DB_BACKEND_MODE=firebase-full. Firebase Admin SDK служит основной базой данных.

    Если вам не нужны push-уведомления, вы можете опустить все переменные окружения Firebase. Платформа работает на одном PostgreSQL.

    Какие функции Firebase НЕ используются

    • Firebase Authentication (Auth.js v5 обрабатывает всю аутентификацию — Google, Apple, email, криптокошелёк)
    • Firebase Storage (загрузка файлов осуществляется через Vercel Blob или /api/entities/upload)
    • Firebase Realtime Database (не подключена к данным приложения; экспорт RTDB существует в firebase-admin.server.ts, но не используется в режиме firebase-full)
    • Firebase Hosting (Ring Platform работает на k3s, Vercel или Docker)
    • FirebaseUI / клиентский auth SDK (файл lib/firebase.ts отсутствует)

    Firebase Admin SDK (firebase-admin.server.ts)

    Admin SDK инициализируется с явными учётными данными сервисного аккаунта через cert(). Все три переменные окружения AUTH_FIREBASE_* являются обязательными — запасной вариант ADC в этом файле отсутствует.

    Экспорты:

    ЭкспортВозвращаетПримечания
    getAdminDb()Firestore или имитацияВозвращает имитацию в режимах postgres-primary и во время сборки
    getAdminAuth()Auth или имитацияТа же логика имитации
    getAdminRtdb()Database или имитацияRTDB — активно не используется в маршрутах приложения

    В режимах k8s-postgres-fcm и supabase-fcm все три возвращают из . Имитация удовлетворяет типам TypeScript, но никогда не подключается к Firebase. Это предотвращает инициализацию Firebase, когда активен только PostgreSQL.

    имитации
    build-mock.server.ts

    Очистка переменных окружения (важно):

    SDK агрессивно очищает входные данные переменных окружения — удаляет внешние кавычки, преобразует \\n в реальные новые строки, обрезает пробелы. Согласованность двойных кавычек в env.local.template для AUTH_FIREBASE_PRIVATE_KEY является намеренной:

    FirebaseAdapter (FirebaseAdapter.ts)

    FirebaseAdapter реализует IDatabaseService и используется только когда DB_BACKEND_MODE=firebase-full. По умолчанию он использует Application Default Credentials (ADC):

    Адаптер предоставляет стандартный контракт DatabaseService:

    firebase-service-manager (firebase-service-manager.ts)

    Предоставляет кэшированные операции Firebase с использованием React 19 cache() для дедупликации на один запрос. Используется только когда getAdminDb() возвращает реальный (не имитированный) экземпляр Firestore.

    Ключевые экспорты:

    ЭкспортОписание
    getCachedDocument(collection, docId)Одиночный документ с дедупликацией через cache()
    getCachedCollection(collection, options)Запрос коллекции с кэшированием
    getCachedDocumentBatch(requests)Пакетное получение нескольких документов
    getCachedCollectionAdvanced(collection, queryConfig)Сложные запросы (where, orderBy, paginate)
    getCachedSubcollection(parentCol, parentId, subCol, options)Запросы вложенных коллекций
    getCachedCollectionGroup(collectionId, options)Межколлекционные запросы
    createDocument, updateDocument, deleteDocumentОперации записи (без кэширования)
    createBatchWriter / executeBatchПакетная запись
    runTransactionАтомные транзакции
    getCacheMetrics / logCachePerformanceОтладочные метрики (только для разработки)

    Оптимизация на этапе сборки: Все кэшированные функции вызываются только когда getAdminDb() возвращает реальный Firestore. Во время сборки (SSG) методы имитированного Firestore возвращают пустые результаты, а слой cache() дедуплицирует в пределах каждого запроса.

    Имитация на этапе сборки (build-mock.server.ts)

    Во время статической генерации Next.js (NEXT_PHASE=phase-production-build) вызовы Firebase Admin перехватываются имитированными сервисами:

    Это предотвращает примерно 22 лишних инициализации Firebase Admin во время SSG и сокращает время сборки примерно на 31%.

    Клиентский Firebase (FCM service worker)

    Service worker по адресу public/firebase-messaging-sw.js загружает Firebase compat SDK v12.9.0 с Google CDN:

    Service worker поддерживает внедрённую во время выполнения конфигурацию Firebase через переменные self.* (устанавливаются заполнителями env.local.template на этапе сборки или внедряются в развёртываниях k8s).

    Процесс регистрации FCM-токена:

    1. React-компонент 'use client' вызывает Notification.requestPermission()
    2. После предоставления разрешения вызывает getToken(messaging, { vapidKey })
    3. Токен сохраняется через Server Action upsertFcmToken в основную базу данных (PostgreSQL или Firestore в зависимости от DB_BACKEND_MODE)
    4. При выходе из системы useAuth().signOut() вызывает unregisterCurrentDeviceFcmToken(), которая запускает deleteToken Firebase + инвалидацию на стороне сервера

    Переменные окружения

    Admin SDK (серверная часть)

    Client SDK (браузерная часть)

    Ключевые различия между двумя направлениями Firebase

    АспектAdmin SDK (firebase-admin.server.ts)Адаптер (FirebaseAdapter.ts)
    Учётные данныеВсегда явный cert()ADC-first, запасной cert()
    Переменные окруженияВсе 3 AUTH_FIREBASE_* обязательныТолько AUTH_FIREBASE_PROJECT_ID для ADC
    Активен вВсе значения DB_BACKEND_MODE (FCM)Только firebase-full
    Имитация в postgres-primaryДа — возвращает имитированные Firestore/AuthНет — адаптер не зарегистрирован
    Путь импортаfirebase-admin/app, firebase-admin/firestoreТо же
    Версияv14 (именованные подпути импорта)v14

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

    Режимы бэкенда

    Push-уведомления (FCM)

    Переменные окружения

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

    bash
    
    AUTH_FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQ...\n-----END PRIVATE KEY-----\n"
    bash
    
    # Обязательные для FCM + инициализации Firebase Admin (все три):
    AUTH_FIREBASE_PROJECT_ID=your_firebase_project_id
    AUTH_FIREBASE_CLIENT_EMAIL=your_firebase_client_email
    AUTH_FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
    
    # Опционально:
    FIREBASE_DATABASE_URL=https://your-project-default-rtdb.firebaseio.com
    FIREBASE_PRIVATE_KEY_ID=your_firebase_private_key_id
    FIREBASE_CLIENT_ID="your_firebase_client_id"
    FIREBASE_FIRESTORE_DEBUG=true
    bash
    
    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_firebase_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=G-YCZKPV315E
    NEXT_PUBLIC_FIREBASE_VAPID_KEY=your_vapid_key
    имитации
    build-mock.server.ts

    Очистка переменных окружения (важно):

    SDK агрессивно очищает входные данные переменных окружения — удаляет внешние кавычки, преобразует \\n в реальные новые строки, обрезает пробелы. Согласованность двойных кавычек в env.local.template для AUTH_FIREBASE_PRIVATE_KEY является намеренной:

    FirebaseAdapter (FirebaseAdapter.ts)

    FirebaseAdapter реализует IDatabaseService и используется только когда DB_BACKEND_MODE=firebase-full. По умолчанию он использует Application Default Credentials (ADC):

    Адаптер предоставляет стандартный контракт DatabaseService:

    firebase-service-manager (firebase-service-manager.ts)

    Предоставляет кэшированные операции Firebase с использованием React 19 cache() для дедупликации на один запрос. Используется только когда getAdminDb() возвращает реальный (не имитированный) экземпляр Firestore.

    Ключевые экспорты:

    ЭкспортОписание
    getCachedDocument(collection, docId)Одиночный документ с дедупликацией через cache()
    getCachedCollection(collection, options)Запрос коллекции с кэшированием
    getCachedDocumentBatch(requests)Пакетное получение нескольких документов
    getCachedCollectionAdvanced(collection, queryConfig)Сложные запросы (where, orderBy, paginate)
    getCachedSubcollection(parentCol, parentId, subCol, options)Запросы вложенных коллекций
    getCachedCollectionGroup(collectionId, options)Межколлекционные запросы
    createDocument, updateDocument, deleteDocumentОперации записи (без кэширования)
    createBatchWriter / executeBatchПакетная запись
    runTransactionАтомные транзакции
    getCacheMetrics / logCachePerformanceОтладочные метрики (только для разработки)

    Оптимизация на этапе сборки: Все кэшированные функции вызываются только когда getAdminDb() возвращает реальный Firestore. Во время сборки (SSG) методы имитированного Firestore возвращают пустые результаты, а слой cache() дедуплицирует в пределах каждого запроса.

    Имитация на этапе сборки (build-mock.server.ts)

    Во время статической генерации Next.js (NEXT_PHASE=phase-production-build) вызовы Firebase Admin перехватываются имитированными сервисами:

    Это предотвращает примерно 22 лишних инициализации Firebase Admin во время SSG и сокращает время сборки примерно на 31%.

    Клиентский Firebase (FCM service worker)

    Service worker по адресу public/firebase-messaging-sw.js загружает Firebase compat SDK v12.9.0 с Google CDN:

    Service worker поддерживает внедрённую во время выполнения конфигурацию Firebase через переменные self.* (устанавливаются заполнителями env.local.template на этапе сборки или внедряются в развёртываниях k8s).

    Процесс регистрации FCM-токена:

    1. React-компонент 'use client' вызывает Notification.requestPermission()
    2. После предоставления разрешения вызывает getToken(messaging, { vapidKey })
    3. Токен сохраняется через Server Action upsertFcmToken в основную базу данных (PostgreSQL или Firestore в зависимости от DB_BACKEND_MODE)
    4. При выходе из системы useAuth().signOut() вызывает unregisterCurrentDeviceFcmToken(), которая запускает deleteToken Firebase + инвалидацию на стороне сервера

    Переменные окружения

    Admin SDK (серверная часть)

    Client SDK (браузерная часть)

    Ключевые различия между двумя направлениями Firebase

    АспектAdmin SDK (firebase-admin.server.ts)Адаптер (FirebaseAdapter.ts)
    Учётные данныеВсегда явный cert()ADC-first, запасной cert()
    Переменные окруженияВсе 3 AUTH_FIREBASE_* обязательныТолько AUTH_FIREBASE_PROJECT_ID для ADC
    Активен вВсе значения DB_BACKEND_MODE (FCM)Только firebase-full
    Имитация в postgres-primaryДа — возвращает имитированные Firestore/AuthНет — адаптер не зарегистрирован
    Путь импортаfirebase-admin/app, firebase-admin/firestoreТо же
    Версияv14 (именованные подпути импорта)v14

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

    Режимы бэкенда

    Push-уведомления (FCM)

    Переменные окружения

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

    bash
    
    AUTH_FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQ...\n-----END PRIVATE KEY-----\n"
    bash
    
    # Обязательные для FCM + инициализации Firebase Admin (все три):
    AUTH_FIREBASE_PROJECT_ID=your_firebase_project_id
    AUTH_FIREBASE_CLIENT_EMAIL=your_firebase_client_email
    AUTH_FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
    
    # Опционально:
    FIREBASE_DATABASE_URL=https://your-project-default-rtdb.firebaseio.com
    FIREBASE_PRIVATE_KEY_ID=your_firebase_private_key_id
    FIREBASE_CLIENT_ID="your_firebase_client_id"
    FIREBASE_FIRESTORE_DEBUG=true
    bash
    
    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_firebase_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=G-YCZKPV315E
    NEXT_PUBLIC_FIREBASE_VAPID_KEY=your_vapid_key
    имитации
    build-mock.server.ts

    Очистка переменных окружения (важно):

    SDK агрессивно очищает входные данные переменных окружения — удаляет внешние кавычки, преобразует \\n в реальные новые строки, обрезает пробелы. Согласованность двойных кавычек в env.local.template для AUTH_FIREBASE_PRIVATE_KEY является намеренной:

    FirebaseAdapter (FirebaseAdapter.ts)

    FirebaseAdapter реализует IDatabaseService и используется только когда DB_BACKEND_MODE=firebase-full. По умолчанию он использует Application Default Credentials (ADC):

    Адаптер предоставляет стандартный контракт DatabaseService:

    firebase-service-manager (firebase-service-manager.ts)

    Предоставляет кэшированные операции Firebase с использованием React 19 cache() для дедупликации на один запрос. Используется только когда getAdminDb() возвращает реальный (не имитированный) экземпляр Firestore.

    Ключевые экспорты:

    ЭкспортОписание
    getCachedDocument(collection, docId)Одиночный документ с дедупликацией через cache()
    getCachedCollection(collection, options)Запрос коллекции с кэшированием
    getCachedDocumentBatch(requests)Пакетное получение нескольких документов
    getCachedCollectionAdvanced(collection, queryConfig)Сложные запросы (where, orderBy, paginate)
    getCachedSubcollection(parentCol, parentId, subCol, options)Запросы вложенных коллекций
    getCachedCollectionGroup(collectionId, options)Межколлекционные запросы
    createDocument, updateDocument, deleteDocumentОперации записи (без кэширования)
    createBatchWriter / executeBatchПакетная запись
    runTransactionАтомные транзакции
    getCacheMetrics / logCachePerformanceОтладочные метрики (только для разработки)

    Оптимизация на этапе сборки: Все кэшированные функции вызываются только когда getAdminDb() возвращает реальный Firestore. Во время сборки (SSG) методы имитированного Firestore возвращают пустые результаты, а слой cache() дедуплицирует в пределах каждого запроса.

    Имитация на этапе сборки (build-mock.server.ts)

    Во время статической генерации Next.js (NEXT_PHASE=phase-production-build) вызовы Firebase Admin перехватываются имитированными сервисами:

    Это предотвращает примерно 22 лишних инициализации Firebase Admin во время SSG и сокращает время сборки примерно на 31%.

    Клиентский Firebase (FCM service worker)

    Service worker по адресу public/firebase-messaging-sw.js загружает Firebase compat SDK v12.9.0 с Google CDN:

    Service worker поддерживает внедрённую во время выполнения конфигурацию Firebase через переменные self.* (устанавливаются заполнителями env.local.template на этапе сборки или внедряются в развёртываниях k8s).

    Процесс регистрации FCM-токена:

    1. React-компонент 'use client' вызывает Notification.requestPermission()
    2. После предоставления разрешения вызывает getToken(messaging, { vapidKey })
    3. Токен сохраняется через Server Action upsertFcmToken в основную базу данных (PostgreSQL или Firestore в зависимости от DB_BACKEND_MODE)
    4. При выходе из системы useAuth().signOut() вызывает unregisterCurrentDeviceFcmToken(), которая запускает deleteToken Firebase + инвалидацию на стороне сервера

    Переменные окружения

    Admin SDK (серверная часть)

    Client SDK (браузерная часть)

    Ключевые различия между двумя направлениями Firebase

    АспектAdmin SDK (firebase-admin.server.ts)Адаптер (FirebaseAdapter.ts)
    Учётные данныеВсегда явный cert()ADC-first, запасной cert()
    Переменные окруженияВсе 3 AUTH_FIREBASE_* обязательныТолько AUTH_FIREBASE_PROJECT_ID для ADC
    Активен вВсе значения DB_BACKEND_MODE (FCM)Только firebase-full
    Имитация в postgres-primaryДа — возвращает имитированные Firestore/AuthНет — адаптер не зарегистрирован
    Путь импортаfirebase-admin/app, firebase-admin/firestoreТо же
    Версияv14 (именованные подпути импорта)v14

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

    Режимы бэкенда

    Push-уведомления (FCM)

    Переменные окружения

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

    bash
    
    AUTH_FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQ...\n-----END PRIVATE KEY-----\n"
    bash
    
    # Обязательные для FCM + инициализации Firebase Admin (все три):
    AUTH_FIREBASE_PROJECT_ID=your_firebase_project_id
    AUTH_FIREBASE_CLIENT_EMAIL=your_firebase_client_email
    AUTH_FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
    
    # Опционально:
    FIREBASE_DATABASE_URL=https://your-project-default-rtdb.firebaseio.com
    FIREBASE_PRIVATE_KEY_ID=your_firebase_private_key_id
    FIREBASE_CLIENT_ID="your_firebase_client_id"
    FIREBASE_FIRESTORE_DEBUG=true
    bash
    
    NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key
    NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
    NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_firebase_project_id
    NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
    NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
    NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
    NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=G-YCZKPV315E
    NEXT_PUBLIC_FIREBASE_VAPID_KEY=your_vapid_key
    1. Документация
    2. /Бекенд Сервисы
    3. /Интеграция Firebase

    Обновлено 28 июн. 2026 г.5 мин прослушивания

    1. Документация
    2. /Бекенд Сервисы
    3. /Интеграция Firebase

    Обновлено 28 июн. 2026 г.5 мин прослушивания

    1. Документация
    2. /Бекенд Сервисы
    3. /Интеграция Firebase

    Обновлено 28 июн. 2026 г.5 мин прослушивания