@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,248 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DeviceRegistrationService = void 0;
7
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
8
+ var _reactNativeBase = _interopRequireDefault(require("react-native-base64"));
9
+ var _reactNative = require("react-native");
10
+ var _Logger = _interopRequireDefault(require("../utils/Logger.js"));
11
+ var _SharedCredentialsManager = require("../utils/SharedCredentialsManager.js");
12
+ var _ApiUrls = _interopRequireDefault(require("../constants/ApiUrls.js"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ /**
15
+ * DeviceRegistrationService
16
+ *
17
+ * Handles device registration WITHOUT push token logic.
18
+ * This service is responsible for:
19
+ * - Creating/retrieving device IDs
20
+ * - Managing anonymous profiles (generatedCDID)
21
+ * - Registering devices with the backend
22
+ * - Storing device credentials
23
+ *
24
+ * KEY: This service does NOT handle push tokens.
25
+ * Push token management is handled separately by PushTokenService.
26
+ */
27
+ class DeviceRegistrationService {
28
+ deviceId = null;
29
+ isProduction = 'STAGE';
30
+
31
+ // Injectable dependencies (passed from SDK)
32
+
33
+ constructor(appId, isProduction, sendToSwanFn, getDeviceLocationFn) {
34
+ this.appId = appId;
35
+ this.isProduction = isProduction;
36
+ this.sendToSwanFn = sendToSwanFn;
37
+ this.getDeviceLocationFn = getDeviceLocationFn;
38
+ }
39
+
40
+ /**
41
+ * Register device with backend.
42
+ * If device already registered, returns cached credentials.
43
+ * Otherwise, creates new device registration.
44
+ *
45
+ * NO PUSH TOKEN LOGIC - device registration is independent of push tokens.
46
+ */
47
+ async registerDevice() {
48
+ _Logger.default.log('[DeviceRegistrationService] Starting device registration...');
49
+
50
+ // Check if device already registered
51
+ const storedCredentials = await this.getStoredCredentials();
52
+ if (storedCredentials?.deviceId && storedCredentials?.generatedCDID) {
53
+ _Logger.default.log(`[DeviceRegistrationService] Device already registered: ${storedCredentials.deviceId}`);
54
+ this.deviceId = storedCredentials.deviceId;
55
+
56
+ // Ensure appId is in credentials (for existing devices that were registered before this fix)
57
+ if (!storedCredentials.appId) {
58
+ _Logger.default.log('[DeviceRegistrationService] Adding missing appId to stored credentials');
59
+ storedCredentials.appId = this.appId;
60
+ await this.saveCredentials(storedCredentials);
61
+ }
62
+ return storedCredentials;
63
+ }
64
+
65
+ // Device not registered - perform fresh registration
66
+ _Logger.default.log('[DeviceRegistrationService] Device not found, registering new device...');
67
+ try {
68
+ const response = await this.registerNewDevice();
69
+ const credentials = {
70
+ appId: this.appId,
71
+ // Store appId for headless context (delivery ACK when app killed)
72
+ deviceActivatedAt: new Date().toISOString(),
73
+ deviceId: response.deviceId,
74
+ generatedCDID: response.generatedCDID,
75
+ currentCDID: null,
76
+ first_seen_at: response.first_seen_at,
77
+ isProduction: this.isProduction
78
+ // NO pushNotificationToken here - that's handled separately
79
+ };
80
+ await this.saveCredentials(credentials);
81
+ this.deviceId = response.deviceId;
82
+ _Logger.default.log(`[DeviceRegistrationService] Device registered successfully: ${response.deviceId}`);
83
+ return credentials;
84
+ } catch (error) {
85
+ _Logger.default.error('[DeviceRegistrationService] Device registration failed:', error);
86
+ throw error;
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Get stored device credentials
92
+ */
93
+ async getStoredCredentials(key = 'swanCredentials') {
94
+ try {
95
+ const encoded = await _asyncStorage.default.getItem(key);
96
+ if (!encoded) {
97
+ return null;
98
+ }
99
+ return JSON.parse(_reactNativeBase.default.decode(encoded));
100
+ } catch (error) {
101
+ _Logger.default.error('[DeviceRegistrationService] Error getting stored credentials:', error);
102
+ return null;
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Save device credentials
108
+ */
109
+ async saveCredentials(data, key = 'swanCredentials') {
110
+ try {
111
+ const encoded = _reactNativeBase.default.encode(JSON.stringify({
112
+ ...data,
113
+ isProduction: this.isProduction
114
+ }));
115
+ await _asyncStorage.default.setItem(key, encoded);
116
+ _Logger.default.log('[DeviceRegistrationService] Credentials saved');
117
+
118
+ // Save to iOS App Group for Notification Service Extension (iOS only)
119
+ if (key === 'swanCredentials' && _reactNative.Platform.OS === 'ios') {
120
+ await _SharedCredentialsManager.SharedCredentialsManager.saveToAppGroup({
121
+ appId: this.appId,
122
+ deviceId: data.deviceId,
123
+ cdid: data.currentCDID || data.generatedCDID,
124
+ isProduction: this.isProduction,
125
+ ackUrl: _ApiUrls.default.WEBHOOK_MOBILE_PUSH_URL[this.isProduction]
126
+ });
127
+ }
128
+ } catch (error) {
129
+ _Logger.default.error('[DeviceRegistrationService] Error saving credentials:', error);
130
+ throw error;
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Update stored credentials (partial update)
136
+ */
137
+ async updateStoredCredentials(updates) {
138
+ const existing = await this.getStoredCredentials();
139
+ if (!existing) {
140
+ throw new Error('No existing credentials to update');
141
+ }
142
+ const updated = {
143
+ ...existing,
144
+ ...updates
145
+ };
146
+ await this.saveCredentials(updated);
147
+ }
148
+
149
+ /**
150
+ * Register new device with backend
151
+ * NO PUSH TOKEN PARAMETER - device registration is independent
152
+ */
153
+ async registerNewDevice() {
154
+ _Logger.default.log('[DeviceRegistrationService] Step 1: Getting device details...');
155
+ const deviceDetails = await this.getStoredCredentials('swanDeviceDetails');
156
+ _Logger.default.log('[DeviceRegistrationService] Step 2: Getting location...');
157
+ const location = await this.getDeviceLocationFn().catch(() => null);
158
+ _Logger.default.log('[DeviceRegistrationService] Step 3: Building request body...');
159
+ const requestBody = {
160
+ deviceDetails: {
161
+ ...deviceDetails,
162
+ location: location || deviceDetails?.location || {}
163
+ },
164
+ platform: _reactNative.Platform.OS,
165
+ // NO pushNotificationToken field
166
+ // NO pushPermissionPreference field
167
+ purpose: Object.keys(deviceDetails || {}).length ? 'update_device' : 'register_device'
168
+ };
169
+ const url = `${_ApiUrls.default.ECOM_DEVICE_REGISTER_URL[this.isProduction]}?appId=${this.appId}`;
170
+ _Logger.default.log('[DeviceRegistrationService] Step 4: Making API call to:', url);
171
+ const response = await this.sendToSwanFn(url, requestBody, true);
172
+ _Logger.default.log('[DeviceRegistrationService] Step 5: Got response:', !!response);
173
+ if (!response || !response.deviceId) {
174
+ throw new Error('Failed to register device - no deviceId in response');
175
+ }
176
+
177
+ // Save device details
178
+ if (response.deviceDoc) {
179
+ const encoded = _reactNativeBase.default.encode(JSON.stringify(response.deviceDoc));
180
+ await _asyncStorage.default.setItem('swanDeviceDetails', encoded);
181
+ }
182
+ return {
183
+ deviceId: response.deviceId,
184
+ generatedCDID: response.generatedCDID,
185
+ first_seen_at: new Date().toISOString()
186
+ };
187
+ }
188
+
189
+ /**
190
+ * Update device location on backend
191
+ */
192
+ async updateLocation() {
193
+ _Logger.default.log('[DeviceRegistrationService] Updating device location...');
194
+ const credentials = await this.getStoredCredentials();
195
+ if (!credentials?.deviceId) {
196
+ _Logger.default.warn('[DeviceRegistrationService] Device not registered yet, cannot update location');
197
+ return;
198
+ }
199
+ const deviceDetails = await this.getStoredCredentials('swanDeviceDetails');
200
+
201
+ // Check if location already shared
202
+ if (deviceDetails?.location && Object.keys(deviceDetails.location).length) {
203
+ _Logger.default.log('[DeviceRegistrationService] Location already shared, not sharing again');
204
+ return;
205
+ }
206
+ try {
207
+ await this.updateDeviceOnBackend({});
208
+ _Logger.default.log('[DeviceRegistrationService] Location updated successfully');
209
+ } catch (error) {
210
+ _Logger.default.error('[DeviceRegistrationService] Failed to update location:', error);
211
+ throw error;
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Update device on backend (for push token updates and location updates)
217
+ */
218
+ async updateDeviceOnBackend(data) {
219
+ const deviceDetails = await this.getStoredCredentials('swanDeviceDetails');
220
+ const location = await this.getDeviceLocationFn().catch(() => null);
221
+ const requestBody = {
222
+ deviceDetails: {
223
+ ...deviceDetails,
224
+ location: location || deviceDetails?.location || {}
225
+ },
226
+ platform: _reactNative.Platform.OS,
227
+ pushNotificationToken: data.pushNotificationToken,
228
+ purpose: 'update_device'
229
+ };
230
+ const url = `${_ApiUrls.default.ECOM_DEVICE_REGISTER_URL[this.isProduction]}?appId=${this.appId}`;
231
+ const response = await this.sendToSwanFn(url, requestBody, true);
232
+
233
+ // Update stored device details if response contains deviceDoc
234
+ if (response?.deviceDoc) {
235
+ const encoded = _reactNativeBase.default.encode(JSON.stringify(response.deviceDoc));
236
+ await _asyncStorage.default.setItem('swanDeviceDetails', encoded);
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Get device ID
242
+ */
243
+ getDeviceId() {
244
+ return this.deviceId;
245
+ }
246
+ }
247
+ exports.DeviceRegistrationService = DeviceRegistrationService;
248
+ //# sourceMappingURL=DeviceRegistrationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_asyncStorage","_interopRequireDefault","require","_reactNativeBase","_reactNative","_Logger","_SharedCredentialsManager","_ApiUrls","e","__esModule","default","DeviceRegistrationService","deviceId","isProduction","constructor","appId","sendToSwanFn","getDeviceLocationFn","registerDevice","Logger","log","storedCredentials","getStoredCredentials","generatedCDID","saveCredentials","response","registerNewDevice","credentials","deviceActivatedAt","Date","toISOString","currentCDID","first_seen_at","error","key","encoded","AsyncStorage","getItem","JSON","parse","Base64","decode","data","encode","stringify","setItem","Platform","OS","SharedCredentialsManager","saveToAppGroup","cdid","ackUrl","URLS","WEBHOOK_MOBILE_PUSH_URL","updateStoredCredentials","updates","existing","Error","updated","deviceDetails","location","catch","requestBody","platform","purpose","Object","keys","length","url","ECOM_DEVICE_REGISTER_URL","deviceDoc","updateLocation","warn","updateDeviceOnBackend","pushNotificationToken","getDeviceId","exports"],"sourceRoot":"../../../src","sources":["services/DeviceRegistrationService.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PushTokenService = void 0;
7
+ var _Logger = _interopRequireDefault(require("../utils/Logger.js"));
8
+ var _PushNotificationProvider = require("../providers/PushNotificationProvider.js");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * PushTokenService
12
+ *
13
+ * Manages push token lifecycle:
14
+ * - Initializes push provider (Firebase, etc.)
15
+ * - Handles token generation and refresh
16
+ * - Updates device with token when available
17
+ * - Manages permission requests
18
+ *
19
+ * This service is INDEPENDENT of device registration.
20
+ * Tokens are managed separately and can arrive at any time.
21
+ */
22
+ class PushTokenService {
23
+ eventListeners = {};
24
+ constructor(provider, _deviceService) {
25
+ this.provider = provider;
26
+ // deviceService kept as parameter for future use
27
+ }
28
+
29
+ /**
30
+ * Initialize push notification provider
31
+ */
32
+ async initialize() {
33
+ try {
34
+ _Logger.default.log('[PushTokenService] Initializing push notification provider...');
35
+ const initialized = await this.provider.initialize();
36
+ if (!initialized) {
37
+ _Logger.default.error('[PushTokenService] Provider initialization failed');
38
+ return false;
39
+ }
40
+
41
+ // Setup provider event listeners
42
+ this.setupProviderListeners();
43
+
44
+ // Try to get existing token
45
+ const token = await this.provider.getToken();
46
+ if (token) {
47
+ _Logger.default.log('[PushTokenService] Existing token found:', token);
48
+ this.emit('tokenReceived', token);
49
+ } else {
50
+ _Logger.default.log('[PushTokenService] No existing token found');
51
+ }
52
+ _Logger.default.log('[PushTokenService] Push notification provider initialized successfully');
53
+ return true;
54
+ } catch (error) {
55
+ _Logger.default.error('[PushTokenService] Error during initialization:', error);
56
+ return false;
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Request push notification permission
62
+ */
63
+ async requestPermission() {
64
+ try {
65
+ _Logger.default.log('[PushTokenService] Requesting push notification permission...');
66
+ const granted = await this.provider.requestPermission();
67
+ if (granted) {
68
+ _Logger.default.log('[PushTokenService] Permission granted');
69
+ this.emit('permissionGranted', {
70
+ granted: true
71
+ });
72
+
73
+ // Token should arrive via provider event listener
74
+ // But we can also check immediately
75
+ const token = await this.provider.getToken();
76
+ if (token) {
77
+ this.emit('tokenReceived', token);
78
+ }
79
+ } else {
80
+ _Logger.default.warn('[PushTokenService] Permission denied');
81
+ this.emit('permissionDenied', {
82
+ granted: false
83
+ });
84
+ }
85
+ return granted;
86
+ } catch (error) {
87
+ _Logger.default.error('[PushTokenService] Error requesting permission:', error);
88
+ return false;
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Check if permission is granted
94
+ */
95
+ async hasPermission() {
96
+ try {
97
+ return await this.provider.hasPermission();
98
+ } catch (error) {
99
+ _Logger.default.error('[PushTokenService] Error checking permission:', error);
100
+ return false;
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Get current push token
106
+ */
107
+ async getToken() {
108
+ try {
109
+ return await this.provider.getToken();
110
+ } catch (error) {
111
+ _Logger.default.error('[PushTokenService] Error getting token:', error);
112
+ return null;
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Delete push token (when user revokes permission)
118
+ */
119
+ async deleteToken() {
120
+ try {
121
+ if (this.provider.deleteToken) {
122
+ return await this.provider.deleteToken();
123
+ }
124
+ return false;
125
+ } catch (error) {
126
+ _Logger.default.error('[PushTokenService] Error deleting token:', error);
127
+ return false;
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Get badge count
133
+ */
134
+ async getBadgeCount() {
135
+ try {
136
+ if (this.provider.getBadgeCount) {
137
+ return await this.provider.getBadgeCount();
138
+ }
139
+ return 0;
140
+ } catch (error) {
141
+ _Logger.default.error('[PushTokenService] Error getting badge count:', error);
142
+ return 0;
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Set badge count
148
+ */
149
+ async setBadgeCount(count) {
150
+ try {
151
+ if (this.provider.setBadgeCount) {
152
+ return await this.provider.setBadgeCount(count);
153
+ }
154
+ return false;
155
+ } catch (error) {
156
+ _Logger.default.error('[PushTokenService] Error setting badge count:', error);
157
+ return false;
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Create notification channel (Android)
163
+ */
164
+ async createNotificationChannel(channelId, channelName, importance, description) {
165
+ try {
166
+ if (this.provider.createNotificationChannel) {
167
+ return await this.provider.createNotificationChannel(channelId, channelName, importance, description);
168
+ }
169
+ return null;
170
+ } catch (error) {
171
+ _Logger.default.error('[PushTokenService] Error creating notification channel:', error);
172
+ return null;
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Delete notification channel (Android only)
178
+ */
179
+ async deleteNotificationChannel(channelId) {
180
+ try {
181
+ if (this.provider.deleteNotificationChannel) {
182
+ return await this.provider.deleteNotificationChannel(channelId);
183
+ }
184
+ return false;
185
+ } catch (error) {
186
+ _Logger.default.error('[PushTokenService] Error deleting notification channel:', error);
187
+ return false;
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Add event listener (delegates to provider)
193
+ */
194
+ addEventListener(eventName, callback) {
195
+ this.provider.addEventListener(eventName, callback);
196
+ }
197
+
198
+ /**
199
+ * Remove event listener (delegates to provider)
200
+ */
201
+ removeEventListener(eventName, callback) {
202
+ this.provider.removeEventListener(eventName, callback);
203
+ }
204
+
205
+ /**
206
+ * Setup listeners for provider events (token refresh, notifications)
207
+ */
208
+ setupProviderListeners() {
209
+ // Listen for token refresh
210
+ this.provider.addEventListener(_PushNotificationProvider.PUSH_NOTIFICATION_EVENTS.TOKEN_REFRESH, token => {
211
+ _Logger.default.log('[PushTokenService] Token refreshed:', token);
212
+ this.emit('tokenReceived', token);
213
+ });
214
+
215
+ // Listen for token received (first time)
216
+ this.provider.addEventListener(_PushNotificationProvider.PUSH_NOTIFICATION_EVENTS.TOKEN_RECEIVED, token => {
217
+ _Logger.default.log('[PushTokenService] Token received:', token);
218
+ this.emit('tokenReceived', token);
219
+ });
220
+
221
+ // Listen for notifications received
222
+ this.provider.addEventListener(_PushNotificationProvider.PUSH_NOTIFICATION_EVENTS.NOTIFICATION_RECEIVED, notification => {
223
+ _Logger.default.log('[PushTokenService] Notification received:', notification);
224
+ this.emit('notificationReceived', notification);
225
+ });
226
+
227
+ // Listen for notification opened
228
+ this.provider.addEventListener(_PushNotificationProvider.PUSH_NOTIFICATION_EVENTS.NOTIFICATION_OPENED, notification => {
229
+ _Logger.default.log('[PushTokenService] Notification opened:', notification);
230
+ this.emit('notificationOpened', notification);
231
+ });
232
+
233
+ // Listen for permission changes
234
+ this.provider.addEventListener(_PushNotificationProvider.PUSH_NOTIFICATION_EVENTS.PERMISSION_CHANGED, permissionData => {
235
+ _Logger.default.log('[PushTokenService] Permission changed:', permissionData);
236
+ this.emit('permissionChanged', permissionData);
237
+ });
238
+ }
239
+
240
+ /**
241
+ * Add event listener
242
+ */
243
+ on(eventName, callback) {
244
+ if (!this.eventListeners[eventName]) {
245
+ this.eventListeners[eventName] = [];
246
+ }
247
+ this.eventListeners[eventName].push(callback);
248
+
249
+ // Return unsubscribe function
250
+ return () => {
251
+ if (this.eventListeners[eventName]) {
252
+ this.eventListeners[eventName] = this.eventListeners[eventName].filter(cb => cb !== callback);
253
+ }
254
+ };
255
+ }
256
+
257
+ /**
258
+ * Emit event to listeners
259
+ */
260
+ emit(eventName, data) {
261
+ const listeners = this.eventListeners[eventName];
262
+ if (listeners) {
263
+ listeners.forEach(callback => {
264
+ try {
265
+ callback(data);
266
+ } catch (error) {
267
+ _Logger.default.error(`[PushTokenService] Error in event listener for ${eventName}:`, error);
268
+ }
269
+ });
270
+ }
271
+ }
272
+
273
+ /**
274
+ * Cleanup
275
+ */
276
+ cleanup() {
277
+ if (this.provider?.cleanup) {
278
+ this.provider.cleanup();
279
+ }
280
+ this.eventListeners = {};
281
+ }
282
+ }
283
+ exports.PushTokenService = PushTokenService;
284
+ //# sourceMappingURL=PushTokenService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_Logger","_interopRequireDefault","require","_PushNotificationProvider","e","__esModule","default","PushTokenService","eventListeners","constructor","provider","_deviceService","initialize","Logger","log","initialized","error","setupProviderListeners","token","getToken","emit","requestPermission","granted","warn","hasPermission","deleteToken","getBadgeCount","setBadgeCount","count","createNotificationChannel","channelId","channelName","importance","description","deleteNotificationChannel","addEventListener","eventName","callback","removeEventListener","PUSH_NOTIFICATION_EVENTS","TOKEN_REFRESH","TOKEN_RECEIVED","NOTIFICATION_RECEIVED","notification","NOTIFICATION_OPENED","PERMISSION_CHANGED","permissionData","on","push","filter","cb","data","listeners","forEach","cleanup","exports"],"sourceRoot":"../../../src","sources":["services/PushTokenService.ts"],"mappings":"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","ignoreList":[]}