UNPKG

capacitor-firebase-kit

Version:

Provider-less Firebase Kit - Universal Firebase services integration for React, React Native, and Capacitor apps

178 lines 6.95 kB
import { PlatformAdapter } from '../core/platform-adapter'; export class NodeAdapter extends PlatformAdapter { constructor() { super(...arguments); this.adminApp = null; } async initialize(config) { this.validateConfig(config); this.config = config; try { const admin = await import('firebase-admin'); if (!admin.apps.length) { this.adminApp = admin.initializeApp({ projectId: config.projectId, // Additional admin SDK config can be added here }); } else { this.adminApp = admin.apps[0]; } } catch (_a) { console.warn('Firebase Admin SDK not found. Limited functionality available.'); } } async getService(serviceName) { if (!this.isSupported(serviceName)) { throw new Error(`Service ${serviceName} is not supported on Node.js platform`); } if (this.serviceCache.has(serviceName)) { return this.serviceCache.get(serviceName); } const service = await this.loadServiceModule(serviceName); this.serviceCache.set(serviceName, service); return service; } async loadServiceModule(serviceName) { // Most Firebase services are not available in Node.js // Return stubs that log warnings switch (serviceName) { case 'analytics': return this.createAnalyticsStub(); case 'appCheck': return this.createAppCheckStub(); case 'crashlytics': return this.createCrashlyticsStub(); case 'performance': return this.createPerformanceStub(); case 'remoteConfig': return this.createRemoteConfigStub(); case 'adMob': return this.createAdMobStub(); default: throw new Error(`Unknown service: ${serviceName}`); } } createAnalyticsStub() { const warn = (method) => console.warn(`Analytics.${method}() is not supported in Node.js environment`); return { logEvent: async () => warn('logEvent'), setUserId: async () => warn('setUserId'), setUserProperties: async () => warn('setUserProperties'), setCurrentScreen: async () => warn('setCurrentScreen'), setEnabled: async () => warn('setEnabled'), isSupported: async () => ({ isSupported: false }), }; } createAppCheckStub() { const warn = (method) => console.warn(`AppCheck.${method}() is not supported in Node.js environment`); return { initialize: async () => warn('initialize'), getToken: async () => { warn('getToken'); return { token: '' }; }, setTokenAutoRefreshEnabled: async () => warn('setTokenAutoRefreshEnabled'), }; } createCrashlyticsStub() { const warn = (method) => console.warn(`Crashlytics.${method}() is not supported in Node.js environment`); return { crash: async () => warn('crash'), setUserId: async () => warn('setUserId'), log: async () => warn('log'), setEnabled: async () => warn('setEnabled'), isEnabled: async () => ({ isEnabled: false }), recordException: async () => warn('recordException'), setCustomKey: async () => warn('setCustomKey'), setCustomKeys: async () => warn('setCustomKeys'), }; } createPerformanceStub() { const warn = (method) => console.warn(`Performance.${method}() is not supported in Node.js environment`); return { startTrace: async () => { warn('startTrace'); return { traceName: '', traceId: '' }; }, stopTrace: async () => warn('stopTrace'), incrementMetric: async () => warn('incrementMetric'), setEnabled: async () => warn('setEnabled'), isEnabled: async () => ({ isEnabled: false }), }; } createRemoteConfigStub() { const warn = (method) => console.warn(`RemoteConfig.${method}() is not supported in Node.js environment`); return { initialize: async () => warn('initialize'), fetchAndActivate: async () => { warn('fetchAndActivate'); return { activated: false }; }, fetchConfig: async () => warn('fetchConfig'), activate: async () => { warn('activate'); return { activated: false }; }, getValue: async () => { warn('getValue'); return { value: '', source: 'default' }; }, getString: async () => { warn('getString'); return { value: '' }; }, getNumber: async () => { warn('getNumber'); return { value: 0 }; }, getBoolean: async () => { warn('getBoolean'); return { value: false }; }, setLogLevel: async () => warn('setLogLevel'), }; } createAdMobStub() { const warn = (method) => console.warn(`AdMob.${method}() is not supported in Node.js environment`); return { initialize: async () => warn('initialize'), showBanner: async () => warn('showBanner'), hideBanner: async () => warn('hideBanner'), resumeBanner: async () => warn('resumeBanner'), removeBanner: async () => warn('removeBanner'), prepareInterstitial: async () => warn('prepareInterstitial'), showInterstitial: async () => warn('showInterstitial'), prepareRewardVideoAd: async () => warn('prepareRewardVideoAd'), showRewardVideoAd: async () => warn('showRewardVideoAd'), setApplicationMuted: async () => warn('setApplicationMuted'), setApplicationVolume: async () => warn('setApplicationVolume'), }; } isSupported(serviceName) { // All services return stubs in Node.js const supportedServices = [ 'analytics', 'appCheck', 'crashlytics', 'performance', 'remoteConfig', 'adMob', ]; return supportedServices.includes(serviceName); } async cleanup() { this.serviceCache.clear(); if (this.adminApp) { try { await this.adminApp.delete(); } catch (_a) { console.warn('Error cleaning up Firebase Admin app'); } } this.adminApp = null; } } //# sourceMappingURL=node-adapter.js.map