Documentation

    Documentation

    Documentation

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. /
    2. /Интеграция Firebase

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

    1. /
    2. /Интеграция Firebase

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

    1. /
    2. /Интеграция Firebase

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

    navigation.docs_sidebar.audience.founderHint

    Добро пожаловать в Ring Platform
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Архитектура
    Data Model
    Real Time
    Security
    Бекенд Сервисы
    Режим k8s-postgres-fcm
    Интеграция Firebase
    Функции
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Messaging
    Notifications
    Push-уведомления через FCM (Ring)
    Протокол Tunnel
    Web3 Кошелек
    Store
    Реферальные коды (Refcodes)
    Интеграция платежей
    PaymentConductor
    SubscriptionConductor
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Система локалей
    Безопасность и соответствие
    NFT Маркетплейс
    Система Стейкинга Токенов
    Паттерны Оптимизации Производительности
    Мобильный Опыт
    API-интерфейс
    Аутентификация
    Email AI-CRM API
    Сущности
    Opportunities
    Messaging
    Notifications
    Wallet
    Store
    Администрирование
    Кастомизация
    Настройка токеномики
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Monitoring
    Оптимизация производительности
    Backup
    Разработка
    Локальная настройка
    Code Structure
    Компоненты документации
    Community tooling
    Ring MCP Server
    Генеративные изображения (ImageConductor)
    Автономная редакция (Grok)
    OSS vs enterprise
    Лучшие практики
    Workflow
    Code Style
    Производительность
    Testing
    Развёртывание
    Debugging
    Contributing
    Примеры
    Quick Start
    White Label
    Реальные Проекты
    Интеграции
    Ethereum-кошельки (Wagmi v3)

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

    navigation.docs_sidebar.audience.founderHint

    Добро пожаловать в Ring Platform
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Архитектура
    Data Model
    Real Time
    Security
    Бекенд Сервисы
    Режим k8s-postgres-fcm
    Интеграция Firebase
    Функции
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Messaging
    Notifications
    Push-уведомления через FCM (Ring)
    Протокол Tunnel
    Web3 Кошелек
    Store
    Реферальные коды (Refcodes)
    Интеграция платежей
    PaymentConductor
    SubscriptionConductor
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Система локалей
    Безопасность и соответствие
    NFT Маркетплейс
    Система Стейкинга Токенов
    Паттерны Оптимизации Производительности
    Мобильный Опыт
    API-интерфейс
    Аутентификация
    Email AI-CRM API
    Сущности
    Opportunities
    Messaging
    Notifications
    Wallet
    Store
    Администрирование
    Кастомизация
    Настройка токеномики
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Monitoring
    Оптимизация производительности
    Backup
    Разработка
    Локальная настройка
    Code Structure
    Компоненты документации
    Community tooling
    Ring MCP Server
    Генеративные изображения (ImageConductor)
    Автономная редакция (Grok)
    OSS vs enterprise
    Лучшие практики
    Workflow
    Code Style
    Производительность
    Testing
    Развёртывание
    Debugging
    Contributing
    Примеры
    Quick Start
    White Label
    Реальные Проекты
    Интеграции
    Ethereum-кошельки (Wagmi v3)

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

    navigation.docs_sidebar.audience.founderHint

    Добро пожаловать в Ring Platform
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Архитектура
    Data Model
    Real Time
    Security
    Бекенд Сервисы
    Режим k8s-postgres-fcm
    Интеграция Firebase
    Функции
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Messaging
    Notifications
    Push-уведомления через FCM (Ring)
    Протокол Tunnel
    Web3 Кошелек
    Store
    Реферальные коды (Refcodes)
    Интеграция платежей
    PaymentConductor
    SubscriptionConductor
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Система локалей
    Безопасность и соответствие
    NFT Маркетплейс
    Система Стейкинга Токенов
    Паттерны Оптимизации Производительности
    Мобильный Опыт
    API-интерфейс
    Аутентификация
    Email AI-CRM API
    Сущности
    Opportunities
    Messaging
    Notifications
    Wallet
    Store
    Администрирование
    Кастомизация
    Настройка токеномики
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Monitoring
    Оптимизация производительности
    Backup
    Разработка
    Локальная настройка
    Code Structure
    Компоненты документации
    Community tooling
    Ring MCP Server
    Генеративные изображения (ImageConductor)
    Автономная редакция (Grok)
    OSS vs enterprise
    Лучшие практики
    Workflow
    Code Style
    Производительность
    Testing
    Развёртывание
    Debugging
    Contributing
    Примеры
    Quick Start
    White Label
    Реальные Проекты
    Интеграции
    Ethereum-кошельки (Wagmi v3)

    Быстрый вход (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)
    Документация
    Бекенд Сервисы
    Документация
    Бекенд Сервисы
    Документация
    Бекенд Сервисы

    Интеграция 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 все три возвращают имитации из build-mock.server.ts. Имитация удовлетворяет типам 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 все три возвращают имитации из build-mock.server.ts. Имитация удовлетворяет типам 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 все три возвращают имитации из build-mock.server.ts. Имитация удовлетворяет типам TypeScript, но никогда не подключается к Firebase. Это предотвращает инициализацию Firebase, когда активен только PostgreSQL.

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

    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
    Очистка переменных окружения (важно):

    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
    Очистка переменных окружения (важно):

    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