@loyalytics/swan-react-native-sdk 2.0.1

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.
Files changed (204) hide show
  1. package/LICENSE +55 -0
  2. package/README.md +67 -0
  3. package/docs/IOS_NOTIFICATION_EXTENSION_SETUP.md +335 -0
  4. package/ios/README.md +64 -0
  5. package/ios/SwanNotificationServiceExtension/Info.plist +31 -0
  6. package/ios/SwanNotificationServiceExtension/NotificationService.swift +337 -0
  7. package/ios/SwanNotificationServiceExtension/SwanNotificationServiceExtension.entitlements +10 -0
  8. package/lib/commonjs/components/FooterView.js +125 -0
  9. package/lib/commonjs/components/FooterView.js.map +1 -0
  10. package/lib/commonjs/components/FullScreenView.js +172 -0
  11. package/lib/commonjs/components/FullScreenView.js.map +1 -0
  12. package/lib/commonjs/components/HeaderView.js +205 -0
  13. package/lib/commonjs/components/HeaderView.js.map +1 -0
  14. package/lib/commonjs/components/PopUpView.js +186 -0
  15. package/lib/commonjs/components/PopUpView.js.map +1 -0
  16. package/lib/commonjs/config/BatchConfig.js +53 -0
  17. package/lib/commonjs/config/BatchConfig.js.map +1 -0
  18. package/lib/commonjs/constants/ApiUrls.js +56 -0
  19. package/lib/commonjs/constants/ApiUrls.js.map +1 -0
  20. package/lib/commonjs/core/EventQueueManager.js +345 -0
  21. package/lib/commonjs/core/EventQueueManager.js.map +1 -0
  22. package/lib/commonjs/core/FlushManager.js +245 -0
  23. package/lib/commonjs/core/FlushManager.js.map +1 -0
  24. package/lib/commonjs/core/NetworkMonitor.js +97 -0
  25. package/lib/commonjs/core/NetworkMonitor.js.map +1 -0
  26. package/lib/commonjs/index.js +3506 -0
  27. package/lib/commonjs/index.js.map +1 -0
  28. package/lib/commonjs/providers/FirebasePushProvider.js +130 -0
  29. package/lib/commonjs/providers/FirebasePushProvider.js.map +1 -0
  30. package/lib/commonjs/providers/NullPushProvider.js +59 -0
  31. package/lib/commonjs/providers/NullPushProvider.js.map +1 -0
  32. package/lib/commonjs/providers/PushNotificationProvider.js +30 -0
  33. package/lib/commonjs/providers/PushNotificationProvider.js.map +1 -0
  34. package/lib/commonjs/services/DeviceRegistrationService.js +248 -0
  35. package/lib/commonjs/services/DeviceRegistrationService.js.map +1 -0
  36. package/lib/commonjs/services/PushTokenService.js +284 -0
  37. package/lib/commonjs/services/PushTokenService.js.map +1 -0
  38. package/lib/commonjs/state/AuthStateMachine.js +161 -0
  39. package/lib/commonjs/state/AuthStateMachine.js.map +1 -0
  40. package/lib/commonjs/state/DeviceStateMachine.js +104 -0
  41. package/lib/commonjs/state/DeviceStateMachine.js.map +1 -0
  42. package/lib/commonjs/state/PushStateMachine.js +129 -0
  43. package/lib/commonjs/state/PushStateMachine.js.map +1 -0
  44. package/lib/commonjs/types/EventQueue.js +50 -0
  45. package/lib/commonjs/types/EventQueue.js.map +1 -0
  46. package/lib/commonjs/types/SDK.js +2 -0
  47. package/lib/commonjs/types/SDK.js.map +1 -0
  48. package/lib/commonjs/utils/FirebaseNotificationManager.js +492 -0
  49. package/lib/commonjs/utils/FirebaseNotificationManager.js.map +1 -0
  50. package/lib/commonjs/utils/Logger.js +56 -0
  51. package/lib/commonjs/utils/Logger.js.map +1 -0
  52. package/lib/commonjs/utils/SharedCredentialsManager.js +146 -0
  53. package/lib/commonjs/utils/SharedCredentialsManager.js.map +1 -0
  54. package/lib/commonjs/version.js +12 -0
  55. package/lib/commonjs/version.js.map +1 -0
  56. package/lib/module/components/FooterView.js +121 -0
  57. package/lib/module/components/FooterView.js.map +1 -0
  58. package/lib/module/components/FullScreenView.js +167 -0
  59. package/lib/module/components/FullScreenView.js.map +1 -0
  60. package/lib/module/components/HeaderView.js +199 -0
  61. package/lib/module/components/HeaderView.js.map +1 -0
  62. package/lib/module/components/PopUpView.js +181 -0
  63. package/lib/module/components/PopUpView.js.map +1 -0
  64. package/lib/module/config/BatchConfig.js +49 -0
  65. package/lib/module/config/BatchConfig.js.map +1 -0
  66. package/lib/module/constants/ApiUrls.js +52 -0
  67. package/lib/module/constants/ApiUrls.js.map +1 -0
  68. package/lib/module/core/EventQueueManager.js +340 -0
  69. package/lib/module/core/EventQueueManager.js.map +1 -0
  70. package/lib/module/core/FlushManager.js +240 -0
  71. package/lib/module/core/FlushManager.js.map +1 -0
  72. package/lib/module/core/NetworkMonitor.js +92 -0
  73. package/lib/module/core/NetworkMonitor.js.map +1 -0
  74. package/lib/module/index.js +3494 -0
  75. package/lib/module/index.js.map +1 -0
  76. package/lib/module/providers/FirebasePushProvider.js +124 -0
  77. package/lib/module/providers/FirebasePushProvider.js.map +1 -0
  78. package/lib/module/providers/NullPushProvider.js +53 -0
  79. package/lib/module/providers/NullPushProvider.js.map +1 -0
  80. package/lib/module/providers/PushNotificationProvider.js +26 -0
  81. package/lib/module/providers/PushNotificationProvider.js.map +1 -0
  82. package/lib/module/services/DeviceRegistrationService.js +243 -0
  83. package/lib/module/services/DeviceRegistrationService.js.map +1 -0
  84. package/lib/module/services/PushTokenService.js +278 -0
  85. package/lib/module/services/PushTokenService.js.map +1 -0
  86. package/lib/module/state/AuthStateMachine.js +155 -0
  87. package/lib/module/state/AuthStateMachine.js.map +1 -0
  88. package/lib/module/state/DeviceStateMachine.js +98 -0
  89. package/lib/module/state/DeviceStateMachine.js.map +1 -0
  90. package/lib/module/state/PushStateMachine.js +123 -0
  91. package/lib/module/state/PushStateMachine.js.map +1 -0
  92. package/lib/module/types/EventQueue.js +46 -0
  93. package/lib/module/types/EventQueue.js.map +1 -0
  94. package/lib/module/types/SDK.js +2 -0
  95. package/lib/module/types/SDK.js.map +1 -0
  96. package/lib/module/utils/FirebaseNotificationManager.js +486 -0
  97. package/lib/module/utils/FirebaseNotificationManager.js.map +1 -0
  98. package/lib/module/utils/Logger.js +52 -0
  99. package/lib/module/utils/Logger.js.map +1 -0
  100. package/lib/module/utils/SharedCredentialsManager.js +140 -0
  101. package/lib/module/utils/SharedCredentialsManager.js.map +1 -0
  102. package/lib/module/version.js +8 -0
  103. package/lib/module/version.js.map +1 -0
  104. package/lib/typescript/commonjs/package.json +1 -0
  105. package/lib/typescript/commonjs/src/components/FooterView.d.ts +3 -0
  106. package/lib/typescript/commonjs/src/components/FooterView.d.ts.map +1 -0
  107. package/lib/typescript/commonjs/src/components/FullScreenView.d.ts +3 -0
  108. package/lib/typescript/commonjs/src/components/FullScreenView.d.ts.map +1 -0
  109. package/lib/typescript/commonjs/src/components/HeaderView.d.ts +3 -0
  110. package/lib/typescript/commonjs/src/components/HeaderView.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/src/components/PopUpView.d.ts +3 -0
  112. package/lib/typescript/commonjs/src/components/PopUpView.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/src/config/BatchConfig.d.ts +7 -0
  114. package/lib/typescript/commonjs/src/config/BatchConfig.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/src/constants/ApiUrls.d.ts +56 -0
  116. package/lib/typescript/commonjs/src/constants/ApiUrls.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/src/core/EventQueueManager.d.ts +63 -0
  118. package/lib/typescript/commonjs/src/core/EventQueueManager.d.ts.map +1 -0
  119. package/lib/typescript/commonjs/src/core/FlushManager.d.ts +63 -0
  120. package/lib/typescript/commonjs/src/core/FlushManager.d.ts.map +1 -0
  121. package/lib/typescript/commonjs/src/core/NetworkMonitor.d.ts +38 -0
  122. package/lib/typescript/commonjs/src/core/NetworkMonitor.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/src/index.d.ts +663 -0
  124. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  125. package/lib/typescript/commonjs/src/providers/FirebasePushProvider.d.ts +28 -0
  126. package/lib/typescript/commonjs/src/providers/FirebasePushProvider.d.ts.map +1 -0
  127. package/lib/typescript/commonjs/src/providers/NullPushProvider.d.ts +25 -0
  128. package/lib/typescript/commonjs/src/providers/NullPushProvider.d.ts.map +1 -0
  129. package/lib/typescript/commonjs/src/providers/PushNotificationProvider.d.ts +105 -0
  130. package/lib/typescript/commonjs/src/providers/PushNotificationProvider.d.ts.map +1 -0
  131. package/lib/typescript/commonjs/src/services/DeviceRegistrationService.d.ts +60 -0
  132. package/lib/typescript/commonjs/src/services/DeviceRegistrationService.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/src/services/PushTokenService.d.ts +82 -0
  134. package/lib/typescript/commonjs/src/services/PushTokenService.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/src/state/AuthStateMachine.d.ts +61 -0
  136. package/lib/typescript/commonjs/src/state/AuthStateMachine.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/src/state/DeviceStateMachine.d.ts +51 -0
  138. package/lib/typescript/commonjs/src/state/DeviceStateMachine.d.ts.map +1 -0
  139. package/lib/typescript/commonjs/src/state/PushStateMachine.d.ts +61 -0
  140. package/lib/typescript/commonjs/src/state/PushStateMachine.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/src/types/EventQueue.d.ts +85 -0
  142. package/lib/typescript/commonjs/src/types/EventQueue.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/src/types/SDK.d.ts +54 -0
  144. package/lib/typescript/commonjs/src/types/SDK.d.ts.map +1 -0
  145. package/lib/typescript/commonjs/src/utils/FirebaseNotificationManager.d.ts +169 -0
  146. package/lib/typescript/commonjs/src/utils/FirebaseNotificationManager.d.ts.map +1 -0
  147. package/lib/typescript/commonjs/src/utils/Logger.d.ts +32 -0
  148. package/lib/typescript/commonjs/src/utils/Logger.d.ts.map +1 -0
  149. package/lib/typescript/commonjs/src/utils/SharedCredentialsManager.d.ts +54 -0
  150. package/lib/typescript/commonjs/src/utils/SharedCredentialsManager.d.ts.map +1 -0
  151. package/lib/typescript/commonjs/src/version.d.ts +2 -0
  152. package/lib/typescript/commonjs/src/version.d.ts.map +1 -0
  153. package/lib/typescript/module/package.json +1 -0
  154. package/lib/typescript/module/src/components/FooterView.d.ts +3 -0
  155. package/lib/typescript/module/src/components/FooterView.d.ts.map +1 -0
  156. package/lib/typescript/module/src/components/FullScreenView.d.ts +3 -0
  157. package/lib/typescript/module/src/components/FullScreenView.d.ts.map +1 -0
  158. package/lib/typescript/module/src/components/HeaderView.d.ts +3 -0
  159. package/lib/typescript/module/src/components/HeaderView.d.ts.map +1 -0
  160. package/lib/typescript/module/src/components/PopUpView.d.ts +3 -0
  161. package/lib/typescript/module/src/components/PopUpView.d.ts.map +1 -0
  162. package/lib/typescript/module/src/config/BatchConfig.d.ts +7 -0
  163. package/lib/typescript/module/src/config/BatchConfig.d.ts.map +1 -0
  164. package/lib/typescript/module/src/constants/ApiUrls.d.ts +56 -0
  165. package/lib/typescript/module/src/constants/ApiUrls.d.ts.map +1 -0
  166. package/lib/typescript/module/src/core/EventQueueManager.d.ts +63 -0
  167. package/lib/typescript/module/src/core/EventQueueManager.d.ts.map +1 -0
  168. package/lib/typescript/module/src/core/FlushManager.d.ts +63 -0
  169. package/lib/typescript/module/src/core/FlushManager.d.ts.map +1 -0
  170. package/lib/typescript/module/src/core/NetworkMonitor.d.ts +38 -0
  171. package/lib/typescript/module/src/core/NetworkMonitor.d.ts.map +1 -0
  172. package/lib/typescript/module/src/index.d.ts +663 -0
  173. package/lib/typescript/module/src/index.d.ts.map +1 -0
  174. package/lib/typescript/module/src/providers/FirebasePushProvider.d.ts +28 -0
  175. package/lib/typescript/module/src/providers/FirebasePushProvider.d.ts.map +1 -0
  176. package/lib/typescript/module/src/providers/NullPushProvider.d.ts +25 -0
  177. package/lib/typescript/module/src/providers/NullPushProvider.d.ts.map +1 -0
  178. package/lib/typescript/module/src/providers/PushNotificationProvider.d.ts +105 -0
  179. package/lib/typescript/module/src/providers/PushNotificationProvider.d.ts.map +1 -0
  180. package/lib/typescript/module/src/services/DeviceRegistrationService.d.ts +60 -0
  181. package/lib/typescript/module/src/services/DeviceRegistrationService.d.ts.map +1 -0
  182. package/lib/typescript/module/src/services/PushTokenService.d.ts +82 -0
  183. package/lib/typescript/module/src/services/PushTokenService.d.ts.map +1 -0
  184. package/lib/typescript/module/src/state/AuthStateMachine.d.ts +61 -0
  185. package/lib/typescript/module/src/state/AuthStateMachine.d.ts.map +1 -0
  186. package/lib/typescript/module/src/state/DeviceStateMachine.d.ts +51 -0
  187. package/lib/typescript/module/src/state/DeviceStateMachine.d.ts.map +1 -0
  188. package/lib/typescript/module/src/state/PushStateMachine.d.ts +61 -0
  189. package/lib/typescript/module/src/state/PushStateMachine.d.ts.map +1 -0
  190. package/lib/typescript/module/src/types/EventQueue.d.ts +85 -0
  191. package/lib/typescript/module/src/types/EventQueue.d.ts.map +1 -0
  192. package/lib/typescript/module/src/types/SDK.d.ts +54 -0
  193. package/lib/typescript/module/src/types/SDK.d.ts.map +1 -0
  194. package/lib/typescript/module/src/utils/FirebaseNotificationManager.d.ts +169 -0
  195. package/lib/typescript/module/src/utils/FirebaseNotificationManager.d.ts.map +1 -0
  196. package/lib/typescript/module/src/utils/Logger.d.ts +32 -0
  197. package/lib/typescript/module/src/utils/Logger.d.ts.map +1 -0
  198. package/lib/typescript/module/src/utils/SharedCredentialsManager.d.ts +54 -0
  199. package/lib/typescript/module/src/utils/SharedCredentialsManager.d.ts.map +1 -0
  200. package/lib/typescript/module/src/version.d.ts +2 -0
  201. package/lib/typescript/module/src/version.d.ts.map +1 -0
  202. package/package.json +230 -0
  203. package/scripts/generate-version.js +25 -0
  204. package/scripts/setup-ios-extension.js +275 -0
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * FirebaseNotificationManager
5
+ * Handles all Firebase Cloud Messaging operations for Swan SDK
6
+ *
7
+ * Features:
8
+ * - Automatic FCM token generation and refresh
9
+ * - Notification handling (foreground, background, quit state)
10
+ * - Event system for notification lifecycle
11
+ * - Permission management
12
+ * - Notification Channel Management (Android)
13
+ */
14
+
15
+ // Define types for Firebase Messaging to avoid direct dependency
16
+ import Logger from "./Logger.js";
17
+ import { Platform } from 'react-native';
18
+ export const SWAN_NOTIFICATION_EVENTS = {
19
+ PUSH_NOTIFICATION_RECEIVED: 'swnPushNotificationReceived',
20
+ NOTIFICATION_OPENED: 'swanTapPushNotifiactioncallback',
21
+ TOKEN_RECEIVED: 'swnTokenReceived',
22
+ TOKEN_REFRESH: 'swnTokenRefresh',
23
+ PERMISSION_CHANGED: 'swnPermissionChanged'
24
+ };
25
+ class FirebaseNotificationManager {
26
+ // Firebase Messaging instance
27
+ messaging = null;
28
+
29
+ // Internal reference to notifee for channel management
30
+ notifee = null;
31
+
32
+ // Current FCM token
33
+ fcmToken = null;
34
+
35
+ // Event listeners
36
+ eventListeners = {
37
+ [SWAN_NOTIFICATION_EVENTS.TOKEN_RECEIVED]: [],
38
+ [SWAN_NOTIFICATION_EVENTS.TOKEN_REFRESH]: [],
39
+ [SWAN_NOTIFICATION_EVENTS.PUSH_NOTIFICATION_RECEIVED]: [],
40
+ [SWAN_NOTIFICATION_EVENTS.NOTIFICATION_OPENED]: [],
41
+ [SWAN_NOTIFICATION_EVENTS.PERMISSION_CHANGED]: []
42
+ };
43
+
44
+ // Notification handlers
45
+ unsubscribeTokenRefresh = null;
46
+ unsubscribeOnMessage = null;
47
+ unsubscribeOnNotificationOpenedApp = null;
48
+ backgroundMessageHandler = null;
49
+
50
+ // Singleton instance
51
+ static instance = null;
52
+ constructor() {
53
+ if (FirebaseNotificationManager.instance) {
54
+ return FirebaseNotificationManager.instance;
55
+ }
56
+ FirebaseNotificationManager.instance = this;
57
+ }
58
+
59
+ /**
60
+ * Get singleton instance
61
+ */
62
+ static getInstance() {
63
+ if (!FirebaseNotificationManager.instance) {
64
+ FirebaseNotificationManager.instance = new FirebaseNotificationManager();
65
+ }
66
+ return FirebaseNotificationManager.instance;
67
+ }
68
+
69
+ /**
70
+ * Initialize Firebase Messaging and Notifee (if available)
71
+ * This should be called when SDK is initialized
72
+ */
73
+ async initialize() {
74
+ try {
75
+ // Dynamically import Firebase Messaging
76
+ const messaging = await this.getMessagingModule();
77
+ if (!messaging) {
78
+ Logger.warn('Firebase Messaging not available. Please install @react-native-firebase/messaging');
79
+ return false;
80
+ }
81
+ this.messaging = messaging;
82
+
83
+ // Try to load Notifee for channel management
84
+ await this.loadNotifee();
85
+
86
+ // Setup notification handlers
87
+ await this.setupNotificationHandlers();
88
+
89
+ // Request permission and get token
90
+ await this.requestPermissionAndGetToken();
91
+ Logger.log('Firebase Notification Manager initialized successfully');
92
+ return true;
93
+ } catch (error) {
94
+ Logger.error('Error initializing Firebase Notification Manager:', error);
95
+ return false;
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Dynamically import Firebase Messaging module
101
+ */
102
+ async getMessagingModule() {
103
+ try {
104
+ const firebaseMessaging = require('@react-native-firebase/messaging');
105
+ return firebaseMessaging.default;
106
+ } catch (error) {
107
+ Logger.warn('Firebase Messaging module not found:', error.message);
108
+ return null;
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Dynamically load Notifee
114
+ */
115
+ async loadNotifee() {
116
+ try {
117
+ this.notifee = require('@notifee/react-native').default;
118
+ } catch (error) {
119
+ Logger.log('Notifee not found. Notification channels will not be available.');
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Setup all notification handlers
125
+ */
126
+ async setupNotificationHandlers() {
127
+ if (!this.messaging) {
128
+ Logger.warn('Messaging instance not available, cannot setup notification handlers');
129
+ return;
130
+ }
131
+ try {
132
+ Logger.log('Setting up Firebase notification handlers...');
133
+
134
+ // Handle token refresh
135
+ this.unsubscribeTokenRefresh = this.messaging().onTokenRefresh(async token => {
136
+ Logger.log('FCM Token refreshed:', token);
137
+ this.fcmToken = token;
138
+ this.emitEvent(SWAN_NOTIFICATION_EVENTS.TOKEN_REFRESH, token);
139
+ });
140
+ Logger.log('✓ Token refresh handler registered');
141
+
142
+ // NOTE: Foreground notification handler (onMessage) is registered at module level
143
+ // in index.js using createForegroundMessageHandler(). This is required by Firebase.
144
+ Logger.log('✓ Foreground notification handler (handled via index.js)');
145
+
146
+ // NOTE: Background notification handler (setBackgroundMessageHandler) is registered at module level
147
+ // in index.js using createBackgroundMessageHandler(). This is required by Firebase.
148
+ Logger.log('✓ Background notification handler (handled via index.js)');
149
+
150
+ // NOTE: With data-only FCM messages, Firebase's onNotificationOpenedApp and getInitialNotification
151
+ // are NOT triggered because Firebase only auto-displays messages with "notification" payload.
152
+ // All click tracking is handled via Notifee event handlers (createNotifeeForegroundHandler/createNotifeeBackgroundHandler).
153
+
154
+ // Auto-create predefined notification channels for Android
155
+ if (Platform.OS === 'android') {
156
+ Logger.log('[SwanSDK] Creating predefined notification channels...');
157
+
158
+ // Create all predefined channels
159
+ const channels = [{
160
+ id: 'swan_transactional',
161
+ name: 'Transactional',
162
+ importance: 4,
163
+ // HIGH
164
+ description: 'Important updates like orders, OTPs, and urgent notifications'
165
+ }, {
166
+ id: 'swan_alerts',
167
+ name: 'Alerts',
168
+ importance: 4,
169
+ // HIGH
170
+ description: 'Critical alerts and time-sensitive information'
171
+ }, {
172
+ id: 'swan_promotional',
173
+ name: 'Promotional',
174
+ importance: 3,
175
+ // DEFAULT
176
+ description: 'Marketing messages, offers, and deals'
177
+ }, {
178
+ id: 'swan_general',
179
+ name: 'General',
180
+ importance: 3,
181
+ // DEFAULT
182
+ description: 'General updates and informational messages'
183
+ }, {
184
+ id: 'swan_notifications',
185
+ name: 'Swan Notifications',
186
+ importance: 4,
187
+ // HIGH - Default/backward compatibility
188
+ description: 'Notifications from Swan SDK'
189
+ }];
190
+ for (const channel of channels) {
191
+ await this.createNotificationChannel(channel.id, channel.name, channel.importance, channel.description);
192
+ Logger.log(`[SwanSDK] ✓ Created channel: ${channel.name} (${channel.id})`);
193
+ }
194
+ Logger.log('[SwanSDK] ✓ All notification channels created');
195
+ }
196
+ } catch (error) {
197
+ Logger.error('Error setting up notification handlers:', error);
198
+ }
199
+ }
200
+
201
+ /**
202
+ * Request notification permission and get FCM token
203
+ */
204
+ async requestPermissionAndGetToken() {
205
+ if (!this.messaging) return null;
206
+ try {
207
+ // Check if permission is already granted
208
+ const authStatus = await this.messaging().hasPermission();
209
+ const enabled = authStatus === this.messaging.AuthorizationStatus.AUTHORIZED || authStatus === this.messaging.AuthorizationStatus.PROVISIONAL;
210
+ if (!enabled) {
211
+ // Request permission
212
+ const newAuthStatus = await this.messaging().requestPermission();
213
+ const newEnabled = newAuthStatus === this.messaging.AuthorizationStatus.AUTHORIZED || newAuthStatus === this.messaging.AuthorizationStatus.PROVISIONAL;
214
+ this.emitEvent(SWAN_NOTIFICATION_EVENTS.PERMISSION_CHANGED, {
215
+ granted: newEnabled,
216
+ status: newAuthStatus
217
+ });
218
+ if (!newEnabled) {
219
+ Logger.log('Notification permission not granted');
220
+ return null;
221
+ }
222
+ }
223
+
224
+ // Get existing token or generate new one if none exists
225
+ // DO NOT use refreshToken() here - it deletes the old token which causes
226
+ // "NotRegistered" errors if push is sent before new token syncs to backend
227
+ Logger.log('[SwanSDK] Getting FCM token...');
228
+ const token = await this.messaging().getToken();
229
+ this.fcmToken = token;
230
+ if (!token) {
231
+ Logger.error('[SwanSDK] Failed to get FCM token');
232
+ return null;
233
+ }
234
+ Logger.log('[SwanSDK] ✅ FCM token obtained:', token);
235
+ return token;
236
+ } catch (error) {
237
+ Logger.error('Error requesting permission and getting token:', error);
238
+ return null;
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Get current FCM token
244
+ * @returns {Promise<string|null>} FCM token or null
245
+ */
246
+ async getToken() {
247
+ if (this.fcmToken) {
248
+ return this.fcmToken;
249
+ }
250
+ if (!this.messaging) {
251
+ Logger.warn('Firebase Messaging not initialized');
252
+ return null;
253
+ }
254
+ try {
255
+ // iOS: Register device for remote notifications before getting token
256
+ if (Platform.OS === 'ios') {
257
+ const isRegistered = this.messaging().isDeviceRegisteredForRemoteMessages;
258
+ if (!isRegistered) {
259
+ try {
260
+ Logger.log('[FirebaseNotificationManager] Registering iOS device for remote notifications...');
261
+ await this.messaging().registerDeviceForRemoteMessages();
262
+ Logger.log('[FirebaseNotificationManager] ✅ iOS device registered for remote notifications');
263
+ } catch (error) {
264
+ Logger.warn('[FirebaseNotificationManager] iOS registerDeviceForRemoteMessages error:', error);
265
+ // Continue anyway - might already be registered
266
+ }
267
+ } else {
268
+ Logger.log('[FirebaseNotificationManager] iOS device already registered for remote notifications');
269
+ }
270
+ }
271
+ const token = await this.messaging().getToken();
272
+ this.fcmToken = token;
273
+ return token;
274
+ } catch (error) {
275
+ Logger.error('Error getting FCM token:', error);
276
+ return null;
277
+ }
278
+ }
279
+
280
+ /**
281
+ * Delete FCM token
282
+ */
283
+ async deleteToken() {
284
+ if (!this.messaging) return false;
285
+ try {
286
+ await this.messaging().deleteToken();
287
+ this.fcmToken = null;
288
+ Logger.log('FCM Token deleted');
289
+ return true;
290
+ } catch (error) {
291
+ Logger.error('Error deleting FCM token:', error);
292
+ return false;
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Check if notifications are enabled
298
+ */
299
+ async hasPermission() {
300
+ if (!this.messaging) return false;
301
+ try {
302
+ const authStatus = await this.messaging().hasPermission();
303
+ return authStatus === this.messaging.AuthorizationStatus.AUTHORIZED || authStatus === this.messaging.AuthorizationStatus.PROVISIONAL;
304
+ } catch (error) {
305
+ Logger.error('Error checking permission:', error);
306
+ return false;
307
+ }
308
+ }
309
+
310
+ /**
311
+ * Request notification permission
312
+ */
313
+ async requestPermission() {
314
+ if (!this.messaging) return false;
315
+ try {
316
+ const authStatus = await this.messaging().requestPermission();
317
+ const granted = authStatus === this.messaging.AuthorizationStatus.AUTHORIZED || authStatus === this.messaging.AuthorizationStatus.PROVISIONAL;
318
+ this.emitEvent(SWAN_NOTIFICATION_EVENTS.PERMISSION_CHANGED, {
319
+ granted,
320
+ status: authStatus
321
+ });
322
+ if (granted) {
323
+ // Get token after permission granted
324
+ await this.requestPermissionAndGetToken();
325
+ }
326
+ return granted;
327
+ } catch (error) {
328
+ Logger.error('Error requesting permission:', error);
329
+ return false;
330
+ }
331
+ }
332
+
333
+ /**
334
+ * Create a notification channel
335
+ * @param channelId - Unique channel ID
336
+ * @param channelName - User visible channel name
337
+ * @param importance - Importance level (default: 4 - High)
338
+ * @param description - User visible description
339
+ */
340
+ async createNotificationChannel(channelId, channelName, importance = 4, description) {
341
+ if (Platform.OS !== 'android') return null;
342
+ if (!this.notifee) {
343
+ Logger.warn('Notifee not found. Cannot create notification channel.');
344
+ return null;
345
+ }
346
+ try {
347
+ await this.notifee.createChannel({
348
+ id: channelId,
349
+ name: channelName,
350
+ // Add commonly used settings, could be parameterized if needed
351
+ importance: importance,
352
+ visibility: 1,
353
+ // AndroidVisibility.PUBLIC
354
+ vibration: true,
355
+ description: description
356
+ });
357
+ Logger.log(`Notification channel created: ${channelId}`);
358
+ return channelId;
359
+ } catch (error) {
360
+ Logger.error('Error creating notification channel:', error);
361
+ return null;
362
+ }
363
+ }
364
+
365
+ /**
366
+ * Delete a notification channel
367
+ */
368
+ async deleteNotificationChannel(channelId) {
369
+ if (Platform.OS !== 'android') return false;
370
+ if (!this.notifee) {
371
+ Logger.warn('Notifee not found. Cannot delete notification channel.');
372
+ return false;
373
+ }
374
+ try {
375
+ await this.notifee.deleteChannel(channelId);
376
+ Logger.log(`Notification channel deleted: ${channelId}`);
377
+ return true;
378
+ } catch (error) {
379
+ Logger.error('Error deleting notification channel:', error);
380
+ return false;
381
+ }
382
+ }
383
+
384
+ /**
385
+ * Subscribe to badge count (iOS only)
386
+ */
387
+ async getBadgeCount() {
388
+ if (!this.messaging) return 0;
389
+ try {
390
+ const badge = await this.messaging().getBadge();
391
+ return badge;
392
+ } catch (error) {
393
+ Logger.error('Error getting badge count:', error);
394
+ return 0;
395
+ }
396
+ }
397
+
398
+ /**
399
+ * Set badge count (iOS only)
400
+ */
401
+ async setBadgeCount(count) {
402
+ if (!this.messaging) return false;
403
+ try {
404
+ await this.messaging().setBadge(count);
405
+ return true;
406
+ } catch (error) {
407
+ Logger.error('Error setting badge count:', error);
408
+ return false;
409
+ }
410
+ }
411
+
412
+ /**
413
+ * Register event listener
414
+ * @param {string} eventName - Event name
415
+ * @param {Function} callback - Callback function
416
+ */
417
+ addEventListener(eventName, callback) {
418
+ if (!this.eventListeners[eventName]) {
419
+ // Auto-initialize array if not exists (allows for custom events if needed, though we prefer enum)
420
+ this.eventListeners[eventName] = [];
421
+ }
422
+ this.eventListeners[eventName].push(callback);
423
+ }
424
+
425
+ /**
426
+ * Remove event listener
427
+ * @param {string} eventName - Event name
428
+ * @param {Function} callback - Callback function to remove
429
+ */
430
+ removeEventListener(eventName, callback) {
431
+ if (!this.eventListeners[eventName]) {
432
+ return;
433
+ }
434
+ const index = this.eventListeners[eventName].indexOf(callback);
435
+ if (index > -1) {
436
+ this.eventListeners[eventName].splice(index, 1);
437
+ }
438
+ }
439
+
440
+ /**
441
+ * Emit event to all registered listeners
442
+ * @param {string} eventName - Event name
443
+ * @param {any} data - Event data
444
+ */
445
+ emitEvent(eventName, data) {
446
+ if (!this.eventListeners[eventName]) {
447
+ return;
448
+ }
449
+ this.eventListeners[eventName].forEach(callback => {
450
+ try {
451
+ callback(data);
452
+ } catch (error) {
453
+ Logger.error(`Error in ${eventName} listener:`, error);
454
+ }
455
+ });
456
+ }
457
+
458
+ /**
459
+ * Cleanup all listeners and handlers
460
+ */
461
+ cleanup() {
462
+ // Unsubscribe from all Firebase listeners
463
+ if (this.unsubscribeTokenRefresh) {
464
+ this.unsubscribeTokenRefresh();
465
+ this.unsubscribeTokenRefresh = null;
466
+ }
467
+ if (this.unsubscribeOnMessage) {
468
+ this.unsubscribeOnMessage();
469
+ this.unsubscribeOnMessage = null;
470
+ }
471
+ if (this.unsubscribeOnNotificationOpenedApp) {
472
+ this.unsubscribeOnNotificationOpenedApp();
473
+ this.unsubscribeOnNotificationOpenedApp = null;
474
+ }
475
+
476
+ // Clear all event listeners
477
+ Object.keys(this.eventListeners).forEach(key => {
478
+ this.eventListeners[key] = [];
479
+ });
480
+ this.fcmToken = null;
481
+ this.messaging = null;
482
+ Logger.log('Firebase Notification Manager cleaned up');
483
+ }
484
+ }
485
+ export default FirebaseNotificationManager;
486
+ //# sourceMappingURL=FirebaseNotificationManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Logger","Platform","SWAN_NOTIFICATION_EVENTS","PUSH_NOTIFICATION_RECEIVED","NOTIFICATION_OPENED","TOKEN_RECEIVED","TOKEN_REFRESH","PERMISSION_CHANGED","FirebaseNotificationManager","messaging","notifee","fcmToken","eventListeners","unsubscribeTokenRefresh","unsubscribeOnMessage","unsubscribeOnNotificationOpenedApp","backgroundMessageHandler","instance","constructor","getInstance","initialize","getMessagingModule","warn","loadNotifee","setupNotificationHandlers","requestPermissionAndGetToken","log","error","firebaseMessaging","require","default","message","onTokenRefresh","token","emitEvent","OS","channels","id","name","importance","description","channel","createNotificationChannel","authStatus","hasPermission","enabled","AuthorizationStatus","AUTHORIZED","PROVISIONAL","newAuthStatus","requestPermission","newEnabled","granted","status","getToken","isRegistered","isDeviceRegisteredForRemoteMessages","registerDeviceForRemoteMessages","deleteToken","channelId","channelName","createChannel","visibility","vibration","deleteNotificationChannel","deleteChannel","getBadgeCount","badge","getBadge","setBadgeCount","count","setBadge","addEventListener","eventName","callback","push","removeEventListener","index","indexOf","splice","data","forEach","cleanup","Object","keys","key"],"sourceRoot":"../../../src","sources":["utils/FirebaseNotificationManager.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Logger utility for Swan SDK
5
+ * Allows enabling/disabling internal SDK logs
6
+ */
7
+ class Logger {
8
+ static enabled = false;
9
+
10
+ /**
11
+ * Enable or disable logs
12
+ * @param enabled - boolean to enable/disable logs
13
+ */
14
+ static enableLogs(enabled) {
15
+ Logger.enabled = enabled;
16
+ }
17
+
18
+ /**
19
+ * Log message to console
20
+ * @param message - Message to log
21
+ * @param args - Additional arguments
22
+ */
23
+ static log(message, ...args) {
24
+ if (Logger.enabled) {
25
+ console.log(`[SwanSDK] ${message}`, ...args);
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Log warning to console
31
+ * @param message - Warning message
32
+ * @param args - Additional arguments
33
+ */
34
+ static warn(message, ...args) {
35
+ if (Logger.enabled) {
36
+ console.warn(`[SwanSDK] ${message}`, ...args);
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Log error to console
42
+ * @param message - Error message
43
+ * @param args - Additional arguments
44
+ */
45
+ static error(message, ...args) {
46
+ if (Logger.enabled) {
47
+ console.error(`[SwanSDK] ${message}`, ...args);
48
+ }
49
+ }
50
+ }
51
+ export default Logger;
52
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Logger","enabled","enableLogs","log","message","args","console","warn","error"],"sourceRoot":"../../../src","sources":["utils/Logger.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA,MAAMA,MAAM,CAAC;EACT,OAAeC,OAAO,GAAG,KAAK;;EAE9B;AACJ;AACA;AACA;EACI,OAAOC,UAAUA,CAACD,OAAgB,EAAE;IAChCD,MAAM,CAACC,OAAO,GAAGA,OAAO;EAC5B;;EAEA;AACJ;AACA;AACA;AACA;EACI,OAAOE,GAAGA,CAACC,OAAe,EAAE,GAAGC,IAAW,EAAE;IACxC,IAAIL,MAAM,CAACC,OAAO,EAAE;MAChBK,OAAO,CAACH,GAAG,CAAC,aAAaC,OAAO,EAAE,EAAE,GAAGC,IAAI,CAAC;IAChD;EACJ;;EAEA;AACJ;AACA;AACA;AACA;EACI,OAAOE,IAAIA,CAACH,OAAe,EAAE,GAAGC,IAAW,EAAE;IACzC,IAAIL,MAAM,CAACC,OAAO,EAAE;MAChBK,OAAO,CAACC,IAAI,CAAC,aAAaH,OAAO,EAAE,EAAE,GAAGC,IAAI,CAAC;IACjD;EACJ;;EAEA;AACJ;AACA;AACA;AACA;EACI,OAAOG,KAAKA,CAACJ,OAAe,EAAE,GAAGC,IAAW,EAAE;IAC1C,IAAIL,MAAM,CAACC,OAAO,EAAE;MAChBK,OAAO,CAACE,KAAK,CAAC,aAAaJ,OAAO,EAAE,EAAE,GAAGC,IAAI,CAAC;IAClD;EACJ;AACJ;AAEA,eAAeL,MAAM","ignoreList":[]}