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