@umituz/react-native-firebase 1.13.4 → 1.13.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@umituz/react-native-firebase",
3
- "version": "1.13.4",
4
- "description": "Unified Firebase package for React Native apps - Centralized initialization and core services (Auth, Firestore, Analytics, Crashlytics).",
3
+ "version": "1.13.6",
4
+ "description": "Unified Firebase package for React Native apps - Centralized initialization and core services (Auth, Firestore, Analytics).",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
7
7
  "scripts": {
@@ -21,7 +21,6 @@
21
21
  "database",
22
22
  "repository",
23
23
  "analytics",
24
- "crashlytics",
25
24
  "ddd",
26
25
  "domain-driven-design"
27
26
  ],
@@ -32,20 +31,12 @@
32
31
  "url": "https://github.com/umituz/react-native-firebase"
33
32
  },
34
33
  "peerDependencies": {
35
- "@react-native-firebase/analytics": ">=18.0.0",
36
- "@react-native-firebase/app": ">=18.0.0",
37
- "@react-native-firebase/crashlytics": ">=18.0.0",
38
- "@react-native-firebase/firestore": ">=18.0.0",
39
34
  "expo-apple-authentication": ">=6.0.0",
40
35
  "firebase": ">=10.0.0",
41
36
  "react": ">=18.2.0",
42
37
  "react-native": ">=0.74.0"
43
38
  },
44
39
  "devDependencies": {
45
- "@react-native-firebase/analytics": "^19.0.0",
46
- "@react-native-firebase/app": "^19.0.0",
47
- "@react-native-firebase/crashlytics": "^19.0.0",
48
- "@react-native-firebase/firestore": "^19.0.0",
49
40
  "@types/react": "~19.1.10",
50
41
  "firebase": "^12.6.0",
51
42
  "react": "19.1.0",
package/src/index.ts CHANGED
@@ -7,7 +7,6 @@
7
7
  * - Auth
8
8
  * - Firestore
9
9
  * - Analytics
10
- * - Crashlytics
11
10
  *
12
11
  * Usage:
13
12
  * import { initializeFirebase, getFirebaseApp } from '@umituz/react-native-firebase';
@@ -65,9 +64,3 @@ export * from './firestore';
65
64
 
66
65
  export * from './analytics';
67
66
 
68
- // =============================================================================
69
- // CRASHLYTICS MODULE
70
- // =============================================================================
71
-
72
- export * from './crashlytics';
73
-
@@ -1,9 +0,0 @@
1
- /**
2
- * Firebase Crashlytics Module
3
- */
4
-
5
- export { firebaseCrashlyticsService } from './infrastructure/services/FirebaseCrashlyticsService';
6
- export type { ICrashlyticsService } from './infrastructure/services/FirebaseCrashlyticsService';
7
- export { crashlyticsInitializerService } from './infrastructure/services/crashlytics-initializer.service';
8
- export { crashlyticsErrorService } from './infrastructure/services/crashlytics-error.service';
9
- export { crashlyticsUserService } from './infrastructure/services/crashlytics-user.service';
@@ -1,8 +0,0 @@
1
- /**
2
- * Crashlytics Adapters
3
- * Platform-specific implementations
4
- */
5
-
6
- export { nativeCrashlyticsAdapter } from './native-crashlytics.adapter';
7
- export type { NativeCrashlyticsAdapter } from './native-crashlytics.adapter';
8
-
@@ -1,84 +0,0 @@
1
- /**
2
- * Native Crashlytics Adapter
3
- * Single Responsibility: Handle Firebase Crashlytics native implementation
4
- * Uses React Native Firebase v23+ modular API
5
- *
6
- * NOTE: This adapter uses optional import to support Expo Go.
7
- * Native modules are only available in development builds or standalone apps.
8
- */
9
-
10
- // Optional import - will be null in Expo Go
11
- let nativeCrashlytics: any = null;
12
- try {
13
- // eslint-disable-next-line @typescript-eslint/no-var-requires
14
- nativeCrashlytics = require('@react-native-firebase/crashlytics');
15
- } catch {
16
- // Native module not available (e.g., Expo Go)
17
- // Silent fail - crashlytics is optional
18
- }
19
-
20
- export type CrashlyticsInstance = any;
21
-
22
- export interface NativeCrashlyticsAdapter {
23
- getCrashlytics(): CrashlyticsInstance;
24
- setUserId(crashlytics: CrashlyticsInstance, userId: string): Promise<void>;
25
- setAttributes(crashlytics: CrashlyticsInstance, attributes: Record<string, string>): Promise<void>;
26
- recordError(crashlytics: CrashlyticsInstance, error: Error): Promise<void>;
27
- log(crashlytics: CrashlyticsInstance, message: string): Promise<void>;
28
- }
29
-
30
- declare const __DEV__: boolean;
31
-
32
- export const nativeCrashlyticsAdapter: NativeCrashlyticsAdapter | null = nativeCrashlytics
33
- ? {
34
- getCrashlytics(): CrashlyticsInstance {
35
- return nativeCrashlytics.getCrashlytics();
36
- },
37
- async setUserId(crashlytics: CrashlyticsInstance, userId: string): Promise<void> {
38
- try {
39
- await nativeCrashlytics.setUserId(crashlytics, userId);
40
- } catch (error) {
41
- /* eslint-disable-next-line no-console */
42
- if (__DEV__) {
43
- console.warn('[Crashlytics] Failed to set user ID:', error);
44
- }
45
- }
46
- },
47
- async setAttributes(
48
- crashlytics: CrashlyticsInstance,
49
- attributes: Record<string, string>,
50
- ): Promise<void> {
51
- try {
52
- // Set each attribute individually using the modular API
53
- for (const [key, value] of Object.entries(attributes)) {
54
- await nativeCrashlytics.setAttribute(crashlytics, key, value);
55
- }
56
- } catch (error) {
57
- /* eslint-disable-next-line no-console */
58
- if (__DEV__) {
59
- console.warn('[Crashlytics] Failed to set attributes:', error);
60
- }
61
- }
62
- },
63
- async recordError(crashlytics: CrashlyticsInstance, error: Error): Promise<void> {
64
- try {
65
- await nativeCrashlytics.recordError(crashlytics, error);
66
- } catch (err) {
67
- /* eslint-disable-next-line no-console */
68
- if (__DEV__) {
69
- console.warn('[Crashlytics] Failed to record error:', err);
70
- }
71
- }
72
- },
73
- async log(crashlytics: CrashlyticsInstance, message: string): Promise<void> {
74
- try {
75
- await nativeCrashlytics.log(crashlytics, message);
76
- } catch (error) {
77
- /* eslint-disable-next-line no-console */
78
- if (__DEV__) {
79
- console.warn('[Crashlytics] Failed to log message:', error);
80
- }
81
- }
82
- },
83
- }
84
- : null;
@@ -1,93 +0,0 @@
1
- /**
2
- * Firebase Crashlytics Service
3
- * Single Responsibility: Orchestrate Crashlytics operations
4
- */
5
-
6
- import { crashlyticsInitializerService } from './crashlytics-initializer.service';
7
- import { crashlyticsErrorService } from './crashlytics-error.service';
8
- import { crashlyticsUserService } from './crashlytics-user.service';
9
- import type { CrashlyticsInstance } from '../adapters/native-crashlytics.adapter';
10
-
11
- export interface ICrashlyticsService {
12
- init(userId?: string, attributes?: Record<string, string>): Promise<void>;
13
- logError(error: Error, context?: string): Promise<void>;
14
- log(message: string): Promise<void>;
15
- setAttribute(key: string, value: string): Promise<void>;
16
- setAttributes(attributes: Record<string, string>): Promise<void>;
17
- clearUserData(): Promise<void>;
18
- destroy(): Promise<void>;
19
- }
20
-
21
- class FirebaseCrashlyticsService implements ICrashlyticsService {
22
- private attributes: Record<string, string> = {};
23
- private crashlytics: CrashlyticsInstance | null = null;
24
- private isDestroyed = false;
25
-
26
- async init(userId?: string, attributes?: Record<string, string>): Promise<void> {
27
- if (this.isDestroyed) {
28
- /* eslint-disable-next-line no-console */
29
- if (__DEV__) {
30
- console.warn('[Crashlytics] Cannot initialize destroyed service');
31
- }
32
- return;
33
- }
34
-
35
- try {
36
- this.crashlytics = crashlyticsInitializerService.initialize();
37
-
38
- if (this.crashlytics) {
39
- if (userId) {
40
- await crashlyticsUserService.setUserId(this.crashlytics, userId);
41
- }
42
-
43
- if (attributes) {
44
- await this.setAttributes(attributes);
45
- }
46
- }
47
- } catch (err) {
48
- /* eslint-disable-next-line no-console */
49
- if (__DEV__) {
50
- console.warn('[Crashlytics] Init failed:', err);
51
- }
52
- } finally {
53
- }
54
- }
55
-
56
- async logError(error: Error, context?: string): Promise<void> {
57
- if (this.isDestroyed) return;
58
- await crashlyticsErrorService.logError(this.crashlytics, error, context);
59
- }
60
-
61
- async log(message: string): Promise<void> {
62
- if (this.isDestroyed) return;
63
- await crashlyticsErrorService.log(this.crashlytics, message);
64
- }
65
-
66
- async setAttribute(key: string, value: string): Promise<void> {
67
- if (this.isDestroyed) return;
68
- this.attributes[key] = value;
69
- await crashlyticsUserService.setAttribute(this.crashlytics, key, value);
70
- }
71
-
72
- async setAttributes(attributes: Record<string, string>): Promise<void> {
73
- if (this.isDestroyed) return;
74
- await crashlyticsUserService.setAttributes(this.crashlytics, attributes);
75
- Object.assign(this.attributes, attributes);
76
- }
77
-
78
- async clearUserData(): Promise<void> {
79
- if (this.isDestroyed) return;
80
- await crashlyticsUserService.clearUserData(this.crashlytics);
81
- this.attributes = {};
82
- }
83
-
84
- async destroy(): Promise<void> {
85
- if (this.isDestroyed) return;
86
-
87
- await this.clearUserData();
88
- this.crashlytics = null;
89
- this.isDestroyed = true;
90
- }
91
- }
92
-
93
- export const firebaseCrashlyticsService = new FirebaseCrashlyticsService();
@@ -1,67 +0,0 @@
1
- /**
2
- * Crashlytics Error Service
3
- * Single Responsibility: Handle error logging operations
4
- */
5
-
6
- import { nativeCrashlyticsAdapter } from '../adapters/native-crashlytics.adapter';
7
- import type { CrashlyticsInstance } from '../adapters/native-crashlytics.adapter';
8
-
9
- export class CrashlyticsErrorService {
10
- /**
11
- * Log error to Crashlytics
12
- */
13
- async logError(
14
- crashlytics: CrashlyticsInstance | null,
15
- error: Error,
16
- context?: string,
17
- ): Promise<void> {
18
- try {
19
- /* eslint-disable-next-line no-console */
20
- if (__DEV__) {
21
- console.error(`[Crashlytics] Error${context ? ` in ${context}` : ''}:`, error);
22
- }
23
-
24
- if (!crashlytics || !nativeCrashlyticsAdapter) {
25
- return;
26
- }
27
-
28
- if (context) {
29
- await nativeCrashlyticsAdapter.log(crashlytics, `Context: ${context}`);
30
- }
31
- await nativeCrashlyticsAdapter.log(
32
- crashlytics,
33
- `Error: ${error.name} - ${error.message}`,
34
- );
35
- await nativeCrashlyticsAdapter.recordError(crashlytics, error);
36
- } catch (err) {
37
- /* eslint-disable-next-line no-console */
38
- if (__DEV__) {
39
- console.warn('[Crashlytics] Failed to log error:', err);
40
- }
41
- }
42
- }
43
-
44
- /**
45
- * Log message to Crashlytics
46
- */
47
- async log(crashlytics: CrashlyticsInstance | null, message: string): Promise<void> {
48
- try {
49
- if (!crashlytics || !nativeCrashlyticsAdapter) {
50
- /* eslint-disable-next-line no-console */
51
- if (__DEV__) {
52
- console.log(`[Crashlytics] ${message}`);
53
- }
54
- return;
55
- }
56
-
57
- await nativeCrashlyticsAdapter.log(crashlytics, message);
58
- } catch (err) {
59
- /* eslint-disable-next-line no-console */
60
- if (__DEV__) {
61
- console.warn('[Crashlytics] Failed to log message:', err);
62
- }
63
- }
64
- }
65
- }
66
-
67
- export const crashlyticsErrorService = new CrashlyticsErrorService();
@@ -1,31 +0,0 @@
1
- /**
2
- * Crashlytics Initializer Service
3
- * Single Responsibility: Handle Crashlytics initialization logic
4
- */
5
-
6
- import { nativeCrashlyticsAdapter } from '../adapters/native-crashlytics.adapter';
7
- import type { CrashlyticsInstance } from '../adapters/native-crashlytics.adapter';
8
-
9
- export class CrashlyticsInitializerService {
10
- /**
11
- * Initialize Crashlytics instance
12
- * Returns null if Crashlytics is not available (e.g., on web)
13
- */
14
- initialize(): CrashlyticsInstance | null {
15
- if (!nativeCrashlyticsAdapter) {
16
- return null;
17
- }
18
-
19
- try {
20
- return nativeCrashlyticsAdapter.getCrashlytics();
21
- } catch (error) {
22
- /* eslint-disable-next-line no-console */
23
- if (__DEV__) {
24
- console.warn('[Crashlytics] Initialization failed:', error);
25
- }
26
- return null;
27
- }
28
- }
29
- }
30
-
31
- export const crashlyticsInitializerService = new CrashlyticsInitializerService();
@@ -1,91 +0,0 @@
1
- /**
2
- * Crashlytics User Service
3
- * Single Responsibility: Handle user-related Crashlytics operations
4
- */
5
-
6
- import { nativeCrashlyticsAdapter } from '../adapters/native-crashlytics.adapter';
7
- import type { CrashlyticsInstance } from '../adapters/native-crashlytics.adapter';
8
-
9
- export class CrashlyticsUserService {
10
- /**
11
- * Set user ID
12
- */
13
- async setUserId(crashlytics: CrashlyticsInstance | null, userId: string): Promise<void> {
14
- try {
15
- if (!crashlytics || !nativeCrashlyticsAdapter) {
16
- return;
17
- }
18
-
19
- await nativeCrashlyticsAdapter.setUserId(crashlytics, userId);
20
- } catch (err) {
21
- /* eslint-disable-next-line no-console */
22
- if (__DEV__) {
23
- console.warn('[Crashlytics] Failed to set user ID:', err);
24
- }
25
- }
26
- }
27
-
28
- /**
29
- * Set attribute
30
- */
31
- async setAttribute(
32
- crashlytics: CrashlyticsInstance | null,
33
- key: string,
34
- value: string,
35
- ): Promise<void> {
36
- try {
37
- if (!crashlytics || !nativeCrashlyticsAdapter) {
38
- return;
39
- }
40
-
41
- await nativeCrashlyticsAdapter.setAttributes(crashlytics, { [key]: value });
42
- } catch (err) {
43
- /* eslint-disable-next-line no-console */
44
- if (__DEV__) {
45
- console.warn('[Crashlytics] Failed to set attribute:', err);
46
- }
47
- }
48
- }
49
-
50
- /**
51
- * Set multiple attributes
52
- */
53
- async setAttributes(
54
- crashlytics: CrashlyticsInstance | null,
55
- attributes: Record<string, string>,
56
- ): Promise<void> {
57
- try {
58
- if (!crashlytics || !nativeCrashlyticsAdapter) {
59
- return;
60
- }
61
-
62
- await nativeCrashlyticsAdapter.setAttributes(crashlytics, attributes);
63
- } catch (err) {
64
- /* eslint-disable-next-line no-console */
65
- if (__DEV__) {
66
- console.warn('[Crashlytics] Failed to set attributes:', err);
67
- }
68
- }
69
- }
70
-
71
- /**
72
- * Clear user data
73
- */
74
- async clearUserData(crashlytics: CrashlyticsInstance | null): Promise<void> {
75
- try {
76
- if (!crashlytics || !nativeCrashlyticsAdapter) {
77
- return;
78
- }
79
-
80
- await nativeCrashlyticsAdapter.setUserId(crashlytics, '');
81
- await nativeCrashlyticsAdapter.setAttributes(crashlytics, {});
82
- } catch (err) {
83
- /* eslint-disable-next-line no-console */
84
- if (__DEV__) {
85
- console.warn('[Crashlytics] Failed to clear user data:', err);
86
- }
87
- }
88
- }
89
- }
90
-
91
- export const crashlyticsUserService = new CrashlyticsUserService();
@@ -1,11 +0,0 @@
1
- /**
2
- * Crashlytics Infrastructure Services
3
- * Public API exports
4
- */
5
-
6
- export { firebaseCrashlyticsService } from './FirebaseCrashlyticsService';
7
- export type { ICrashlyticsService } from './FirebaseCrashlyticsService';
8
- export { crashlyticsInitializerService } from './crashlytics-initializer.service';
9
- export { crashlyticsErrorService } from './crashlytics-error.service';
10
- export { crashlyticsUserService } from './crashlytics-user.service';
11
-