@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,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Logger from "../utils/Logger.js";
|
|
4
|
+
export let AuthState = /*#__PURE__*/function (AuthState) {
|
|
5
|
+
AuthState["LOGGED_OUT"] = "logged_out";
|
|
6
|
+
AuthState["LOGGING_IN"] = "logging_in";
|
|
7
|
+
AuthState["LOGGED_IN"] = "logged_in";
|
|
8
|
+
AuthState["LOGGING_OUT"] = "logging_out";
|
|
9
|
+
AuthState["ERROR"] = "error";
|
|
10
|
+
return AuthState;
|
|
11
|
+
}({});
|
|
12
|
+
/**
|
|
13
|
+
* State machine for authentication flow (login/logout).
|
|
14
|
+
* Replaces isLoggingIn and isLoggingOut boolean flags.
|
|
15
|
+
*
|
|
16
|
+
* States:
|
|
17
|
+
* - LOGGED_OUT: No user logged in (anonymous profile)
|
|
18
|
+
* - LOGGING_IN: Login in progress
|
|
19
|
+
* - LOGGED_IN: User logged in (currentCDID set)
|
|
20
|
+
* - LOGGING_OUT: Logout in progress
|
|
21
|
+
* - ERROR: Login/logout failed
|
|
22
|
+
*/
|
|
23
|
+
export class AuthStateMachine {
|
|
24
|
+
state = AuthState.LOGGED_OUT;
|
|
25
|
+
listeners = [];
|
|
26
|
+
loginPromise = null;
|
|
27
|
+
logoutPromise = null;
|
|
28
|
+
getState() {
|
|
29
|
+
return this.state;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Subscribe to state changes
|
|
34
|
+
*/
|
|
35
|
+
on(listener) {
|
|
36
|
+
this.listeners.push(listener);
|
|
37
|
+
// Return unsubscribe function
|
|
38
|
+
return () => {
|
|
39
|
+
this.listeners = this.listeners.filter(l => l !== listener);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Execute login with duplicate call protection
|
|
45
|
+
*/
|
|
46
|
+
async login(loginFn) {
|
|
47
|
+
// Already logged in
|
|
48
|
+
if (this.state === AuthState.LOGGED_IN) {
|
|
49
|
+
Logger.warn('[AuthStateMachine] Already logged in');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Login in progress - wait for existing promise
|
|
54
|
+
if (this.state === AuthState.LOGGING_IN && this.loginPromise) {
|
|
55
|
+
Logger.warn('[AuthStateMachine] Login already in progress, ignoring duplicate call');
|
|
56
|
+
return this.loginPromise;
|
|
57
|
+
}
|
|
58
|
+
this.transition(AuthState.LOGGING_IN);
|
|
59
|
+
this.loginPromise = loginFn().then(result => {
|
|
60
|
+
this.transition(AuthState.LOGGED_IN);
|
|
61
|
+
return result;
|
|
62
|
+
}).catch(error => {
|
|
63
|
+
this.transition(AuthState.ERROR);
|
|
64
|
+
this.loginPromise = null;
|
|
65
|
+
throw error;
|
|
66
|
+
}).finally(() => {
|
|
67
|
+
this.loginPromise = null;
|
|
68
|
+
});
|
|
69
|
+
return this.loginPromise;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Execute logout with duplicate call protection
|
|
74
|
+
*/
|
|
75
|
+
async logout(logoutFn) {
|
|
76
|
+
// Already logged out
|
|
77
|
+
if (this.state === AuthState.LOGGED_OUT) {
|
|
78
|
+
Logger.warn('[AuthStateMachine] Already logged out');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Logout in progress - wait for existing promise
|
|
83
|
+
if (this.state === AuthState.LOGGING_OUT && this.logoutPromise) {
|
|
84
|
+
Logger.warn('[AuthStateMachine] Logout already in progress, ignoring duplicate call');
|
|
85
|
+
return this.logoutPromise;
|
|
86
|
+
}
|
|
87
|
+
this.transition(AuthState.LOGGING_OUT);
|
|
88
|
+
this.logoutPromise = logoutFn().then(result => {
|
|
89
|
+
this.transition(AuthState.LOGGED_OUT);
|
|
90
|
+
return result;
|
|
91
|
+
}).catch(error => {
|
|
92
|
+
this.transition(AuthState.ERROR);
|
|
93
|
+
this.logoutPromise = null;
|
|
94
|
+
throw error;
|
|
95
|
+
}).finally(() => {
|
|
96
|
+
this.logoutPromise = null;
|
|
97
|
+
});
|
|
98
|
+
return this.logoutPromise;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Check if user is logged in
|
|
103
|
+
*/
|
|
104
|
+
isLoggedIn() {
|
|
105
|
+
return this.state === AuthState.LOGGED_IN;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Check if login/logout operation is in progress
|
|
110
|
+
*/
|
|
111
|
+
isOperationInProgress() {
|
|
112
|
+
return this.state === AuthState.LOGGING_IN || this.state === AuthState.LOGGING_OUT;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Reset to logged out state
|
|
117
|
+
*/
|
|
118
|
+
reset() {
|
|
119
|
+
this.state = AuthState.LOGGED_OUT;
|
|
120
|
+
this.loginPromise = null;
|
|
121
|
+
this.logoutPromise = null;
|
|
122
|
+
Logger.log('[AuthStateMachine] State reset to LOGGED_OUT');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Restore state from stored credentials (used during SDK initialization)
|
|
127
|
+
* @param isLoggedIn Whether user has currentCDID in stored credentials
|
|
128
|
+
*/
|
|
129
|
+
restoreState(isLoggedIn) {
|
|
130
|
+
this.state = isLoggedIn ? AuthState.LOGGED_IN : AuthState.LOGGED_OUT;
|
|
131
|
+
Logger.log(`[AuthStateMachine] State restored: ${this.state} (from credentials)`);
|
|
132
|
+
}
|
|
133
|
+
transition(newState) {
|
|
134
|
+
const oldState = this.state;
|
|
135
|
+
if (oldState === newState) {
|
|
136
|
+
return; // No transition needed
|
|
137
|
+
}
|
|
138
|
+
this.state = newState;
|
|
139
|
+
Logger.log(`[AuthStateMachine] State transition: ${oldState} → ${newState}`);
|
|
140
|
+
|
|
141
|
+
// Notify listeners
|
|
142
|
+
const change = {
|
|
143
|
+
from: oldState,
|
|
144
|
+
to: newState
|
|
145
|
+
};
|
|
146
|
+
this.listeners.forEach(listener => {
|
|
147
|
+
try {
|
|
148
|
+
listener(change);
|
|
149
|
+
} catch (error) {
|
|
150
|
+
Logger.error('[AuthStateMachine] Error in state change listener:', error);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=AuthStateMachine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Logger","AuthState","AuthStateMachine","state","LOGGED_OUT","listeners","loginPromise","logoutPromise","getState","on","listener","push","filter","l","login","loginFn","LOGGED_IN","warn","LOGGING_IN","transition","then","result","catch","error","ERROR","finally","logout","logoutFn","LOGGING_OUT","isLoggedIn","isOperationInProgress","reset","log","restoreState","newState","oldState","change","from","to","forEach"],"sourceRoot":"../../../src","sources":["state/AuthStateMachine.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Logger from "../utils/Logger.js";
|
|
4
|
+
export let DeviceState = /*#__PURE__*/function (DeviceState) {
|
|
5
|
+
DeviceState["UNINITIALIZED"] = "uninitialized";
|
|
6
|
+
DeviceState["REGISTERING"] = "registering";
|
|
7
|
+
DeviceState["REGISTERED"] = "registered";
|
|
8
|
+
DeviceState["FAILED"] = "failed";
|
|
9
|
+
return DeviceState;
|
|
10
|
+
}({});
|
|
11
|
+
/**
|
|
12
|
+
* State machine for device registration flow.
|
|
13
|
+
* Eliminates race conditions from boolean flags.
|
|
14
|
+
*
|
|
15
|
+
* States: UNINITIALIZED → REGISTERING → REGISTERED → FAILED
|
|
16
|
+
*/
|
|
17
|
+
export class DeviceStateMachine {
|
|
18
|
+
state = DeviceState.UNINITIALIZED;
|
|
19
|
+
registrationPromise = null;
|
|
20
|
+
listeners = [];
|
|
21
|
+
getState() {
|
|
22
|
+
return this.state;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Subscribe to state changes
|
|
27
|
+
*/
|
|
28
|
+
on(listener) {
|
|
29
|
+
this.listeners.push(listener);
|
|
30
|
+
// Return unsubscribe function
|
|
31
|
+
return () => {
|
|
32
|
+
this.listeners = this.listeners.filter(l => l !== listener);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Register device with race condition protection.
|
|
38
|
+
* If already registered, returns cached credentials.
|
|
39
|
+
* If registration in progress, waits for existing promise.
|
|
40
|
+
* Otherwise, starts new registration.
|
|
41
|
+
*/
|
|
42
|
+
async register(registrationFn) {
|
|
43
|
+
// Already registered - return cached result
|
|
44
|
+
if (this.state === DeviceState.REGISTERED && this.registrationPromise) {
|
|
45
|
+
Logger.log('[DeviceStateMachine] Device already registered, returning cached credentials');
|
|
46
|
+
return this.registrationPromise;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Registration in progress - wait for it
|
|
50
|
+
if (this.state === DeviceState.REGISTERING && this.registrationPromise) {
|
|
51
|
+
Logger.log('[DeviceStateMachine] Device registration in progress, waiting...');
|
|
52
|
+
return this.registrationPromise;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Start new registration
|
|
56
|
+
this.transition(DeviceState.REGISTERING);
|
|
57
|
+
this.registrationPromise = registrationFn().then(credentials => {
|
|
58
|
+
this.transition(DeviceState.REGISTERED);
|
|
59
|
+
return credentials;
|
|
60
|
+
}).catch(error => {
|
|
61
|
+
this.transition(DeviceState.FAILED);
|
|
62
|
+
this.registrationPromise = null; // Allow retry on failure
|
|
63
|
+
throw error;
|
|
64
|
+
});
|
|
65
|
+
return this.registrationPromise;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Reset state machine (useful for testing or logout scenarios)
|
|
70
|
+
*/
|
|
71
|
+
reset() {
|
|
72
|
+
this.state = DeviceState.UNINITIALIZED;
|
|
73
|
+
this.registrationPromise = null;
|
|
74
|
+
Logger.log('[DeviceStateMachine] State reset to UNINITIALIZED');
|
|
75
|
+
}
|
|
76
|
+
transition(newState) {
|
|
77
|
+
const oldState = this.state;
|
|
78
|
+
if (oldState === newState) {
|
|
79
|
+
return; // No transition needed
|
|
80
|
+
}
|
|
81
|
+
this.state = newState;
|
|
82
|
+
Logger.log(`[DeviceStateMachine] State transition: ${oldState} → ${newState}`);
|
|
83
|
+
|
|
84
|
+
// Notify listeners
|
|
85
|
+
const change = {
|
|
86
|
+
from: oldState,
|
|
87
|
+
to: newState
|
|
88
|
+
};
|
|
89
|
+
this.listeners.forEach(listener => {
|
|
90
|
+
try {
|
|
91
|
+
listener(change);
|
|
92
|
+
} catch (error) {
|
|
93
|
+
Logger.error('[DeviceStateMachine] Error in state change listener:', error);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=DeviceStateMachine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Logger","DeviceState","DeviceStateMachine","state","UNINITIALIZED","registrationPromise","listeners","getState","on","listener","push","filter","l","register","registrationFn","REGISTERED","log","REGISTERING","transition","then","credentials","catch","error","FAILED","reset","newState","oldState","change","from","to","forEach"],"sourceRoot":"../../../src","sources":["state/DeviceStateMachine.ts"],"mappings":";;AAAA,OAAOA,MAAM,MAAM,oBAAiB;AAEpC,WAAYC,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAqBvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,CAAC;EACtBC,KAAK,GAAgBF,WAAW,CAACG,aAAa;EAC9CC,mBAAmB,GAAsC,IAAI;EAC7DC,SAAS,GAA0B,EAAE;EAE7CC,QAAQA,CAAA,EAAgB;IACtB,OAAO,IAAI,CAACJ,KAAK;EACnB;;EAEA;AACF;AACA;EACEK,EAAEA,CAACC,QAA6B,EAAc;IAC5C,IAAI,CAACH,SAAS,CAACI,IAAI,CAACD,QAAQ,CAAC;IAC7B;IACA,OAAO,MAAM;MACX,IAAI,CAACH,SAAS,GAAG,IAAI,CAACA,SAAS,CAACK,MAAM,CAACC,CAAC,IAAIA,CAAC,KAAKH,QAAQ,CAAC;IAC7D,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAMI,QAAQA,CACZC,cAAgD,EACpB;IAC5B;IACA,IAAI,IAAI,CAACX,KAAK,KAAKF,WAAW,CAACc,UAAU,IAAI,IAAI,CAACV,mBAAmB,EAAE;MACrEL,MAAM,CAACgB,GAAG,CAAC,8EAA8E,CAAC;MAC1F,OAAO,IAAI,CAACX,mBAAmB;IACjC;;IAEA;IACA,IAAI,IAAI,CAACF,KAAK,KAAKF,WAAW,CAACgB,WAAW,IAAI,IAAI,CAACZ,mBAAmB,EAAE;MACtEL,MAAM,CAACgB,GAAG,CAAC,kEAAkE,CAAC;MAC9E,OAAO,IAAI,CAACX,mBAAmB;IACjC;;IAEA;IACA,IAAI,CAACa,UAAU,CAACjB,WAAW,CAACgB,WAAW,CAAC;IAExC,IAAI,CAACZ,mBAAmB,GAAGS,cAAc,CAAC,CAAC,CACxCK,IAAI,CAACC,WAAW,IAAI;MACnB,IAAI,CAACF,UAAU,CAACjB,WAAW,CAACc,UAAU,CAAC;MACvC,OAAOK,WAAW;IACpB,CAAC,CAAC,CACDC,KAAK,CAACC,KAAK,IAAI;MACd,IAAI,CAACJ,UAAU,CAACjB,WAAW,CAACsB,MAAM,CAAC;MACnC,IAAI,CAAClB,mBAAmB,GAAG,IAAI,CAAC,CAAC;MACjC,MAAMiB,KAAK;IACb,CAAC,CAAC;IAEJ,OAAO,IAAI,CAACjB,mBAAmB;EACjC;;EAEA;AACF;AACA;EACEmB,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACrB,KAAK,GAAGF,WAAW,CAACG,aAAa;IACtC,IAAI,CAACC,mBAAmB,GAAG,IAAI;IAC/BL,MAAM,CAACgB,GAAG,CAAC,mDAAmD,CAAC;EACjE;EAEQE,UAAUA,CAACO,QAAqB,EAAQ;IAC9C,MAAMC,QAAQ,GAAG,IAAI,CAACvB,KAAK;IAE3B,IAAIuB,QAAQ,KAAKD,QAAQ,EAAE;MACzB,OAAO,CAAC;IACV;IAEA,IAAI,CAACtB,KAAK,GAAGsB,QAAQ;IACrBzB,MAAM,CAACgB,GAAG,CAAC,0CAA0CU,QAAQ,MAAMD,QAAQ,EAAE,CAAC;;IAE9E;IACA,MAAME,MAAM,GAAG;MAAEC,IAAI,EAAEF,QAAQ;MAAEG,EAAE,EAAEJ;IAAS,CAAC;IAC/C,IAAI,CAACnB,SAAS,CAACwB,OAAO,CAACrB,QAAQ,IAAI;MACjC,IAAI;QACFA,QAAQ,CAACkB,MAAM,CAAC;MAClB,CAAC,CAAC,OAAOL,KAAK,EAAE;QACdtB,MAAM,CAACsB,KAAK,CAAC,sDAAsD,EAAEA,KAAK,CAAC;MAC7E;IACF,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Logger from "../utils/Logger.js";
|
|
4
|
+
export let PushState = /*#__PURE__*/function (PushState) {
|
|
5
|
+
PushState["DISABLED"] = "disabled";
|
|
6
|
+
PushState["INITIALIZING"] = "initializing";
|
|
7
|
+
PushState["READY"] = "ready";
|
|
8
|
+
PushState["PERMISSION_DENIED"] = "permission_denied";
|
|
9
|
+
PushState["TOKEN_PENDING"] = "token_pending";
|
|
10
|
+
PushState["ACTIVE"] = "active";
|
|
11
|
+
PushState["ERROR"] = "error";
|
|
12
|
+
return PushState;
|
|
13
|
+
}({});
|
|
14
|
+
/**
|
|
15
|
+
* State machine for push notification lifecycle.
|
|
16
|
+
* Manages the complex flow of permission → token → active states.
|
|
17
|
+
*
|
|
18
|
+
* States:
|
|
19
|
+
* - DISABLED: Push notifications not enabled in config
|
|
20
|
+
* - INITIALIZING: Loading Firebase provider
|
|
21
|
+
* - READY: Provider initialized, ready to request permission
|
|
22
|
+
* - PERMISSION_DENIED: User denied permission
|
|
23
|
+
* - TOKEN_PENDING: Permission granted, waiting for FCM token
|
|
24
|
+
* - ACTIVE: Token received and registered with backend
|
|
25
|
+
* - ERROR: Push initialization failed
|
|
26
|
+
*/
|
|
27
|
+
export class PushStateMachine {
|
|
28
|
+
state = PushState.DISABLED;
|
|
29
|
+
listeners = [];
|
|
30
|
+
getState() {
|
|
31
|
+
return this.state;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Subscribe to state changes
|
|
36
|
+
*/
|
|
37
|
+
on(listener) {
|
|
38
|
+
this.listeners.push(listener);
|
|
39
|
+
// Return unsubscribe function
|
|
40
|
+
return () => {
|
|
41
|
+
this.listeners = this.listeners.filter(l => l !== listener);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Transition to a new state
|
|
47
|
+
*/
|
|
48
|
+
transition(newState) {
|
|
49
|
+
const oldState = this.state;
|
|
50
|
+
if (oldState === newState) {
|
|
51
|
+
return; // No transition needed
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Validate state transitions (optional - can be removed for flexibility)
|
|
55
|
+
if (!this.isValidTransition(oldState, newState)) {
|
|
56
|
+
Logger.warn(`[PushStateMachine] Unexpected state transition: ${oldState} → ${newState}`);
|
|
57
|
+
}
|
|
58
|
+
this.state = newState;
|
|
59
|
+
Logger.log(`[PushStateMachine] State transition: ${oldState} → ${newState}`);
|
|
60
|
+
|
|
61
|
+
// Notify listeners
|
|
62
|
+
const change = {
|
|
63
|
+
from: oldState,
|
|
64
|
+
to: newState
|
|
65
|
+
};
|
|
66
|
+
this.listeners.forEach(listener => {
|
|
67
|
+
try {
|
|
68
|
+
listener(change);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
Logger.error('[PushStateMachine] Error in state change listener:', error);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Reset to disabled state
|
|
77
|
+
*/
|
|
78
|
+
reset() {
|
|
79
|
+
this.state = PushState.DISABLED;
|
|
80
|
+
Logger.log('[PushStateMachine] State reset to DISABLED');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Check if push is active (token received and synced)
|
|
85
|
+
*/
|
|
86
|
+
isActive() {
|
|
87
|
+
return this.state === PushState.ACTIVE;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Check if push is in error state
|
|
92
|
+
*/
|
|
93
|
+
isError() {
|
|
94
|
+
return this.state === PushState.ERROR;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Check if push is disabled
|
|
99
|
+
*/
|
|
100
|
+
isDisabled() {
|
|
101
|
+
return this.state === PushState.DISABLED;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Validate state transitions (optional - for debugging)
|
|
106
|
+
*/
|
|
107
|
+
isValidTransition(from, to) {
|
|
108
|
+
const validTransitions = {
|
|
109
|
+
[PushState.DISABLED]: [PushState.INITIALIZING],
|
|
110
|
+
[PushState.INITIALIZING]: [PushState.READY, PushState.ERROR],
|
|
111
|
+
[PushState.READY]: [PushState.PERMISSION_DENIED, PushState.TOKEN_PENDING, PushState.ERROR],
|
|
112
|
+
[PushState.PERMISSION_DENIED]: [PushState.READY],
|
|
113
|
+
// Can retry permission
|
|
114
|
+
[PushState.TOKEN_PENDING]: [PushState.ACTIVE, PushState.ERROR],
|
|
115
|
+
[PushState.ACTIVE]: [PushState.TOKEN_PENDING],
|
|
116
|
+
// Token refresh
|
|
117
|
+
[PushState.ERROR]: [PushState.INITIALIZING] // Can retry initialization
|
|
118
|
+
};
|
|
119
|
+
const allowedTransitions = validTransitions[from];
|
|
120
|
+
return allowedTransitions ? allowedTransitions.includes(to) : false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=PushStateMachine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Logger","PushState","PushStateMachine","state","DISABLED","listeners","getState","on","listener","push","filter","l","transition","newState","oldState","isValidTransition","warn","log","change","from","to","forEach","error","reset","isActive","ACTIVE","isError","ERROR","isDisabled","validTransitions","INITIALIZING","READY","PERMISSION_DENIED","TOKEN_PENDING","allowedTransitions","includes"],"sourceRoot":"../../../src","sources":["state/PushStateMachine.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Type definitions for Event Batching System
|
|
5
|
+
* Supports offline queuing, batching, and fault-tolerant event delivery
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Event stored in the queue
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Configuration for batch processing
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Batch payload sent to backend
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Individual event within a batch
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Response from batch endpoint
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Result for individual event in batch
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Queue call type constants
|
|
34
|
+
* Used to distinguish different network call types in the queue
|
|
35
|
+
*/
|
|
36
|
+
export const QUEUE_CALL_TYPES = {
|
|
37
|
+
// Standard events use their actual event names (no prefix)
|
|
38
|
+
// e.g., 'productViewed', 'userLogin', etc.
|
|
39
|
+
|
|
40
|
+
// Special call types for non-event network operations
|
|
41
|
+
PUSH_SUBSCRIBE: 'PUSH_SUBSCRIBE',
|
|
42
|
+
PUSH_UNSUBSCRIBE: 'PUSH_UNSUBSCRIBE',
|
|
43
|
+
PROFILE_ENRICH: 'PROFILE_ENRICH',
|
|
44
|
+
NOTIFICATION_ACK: 'SWAN_NOTIFICATION_ACK' // Already exists
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=EventQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["QUEUE_CALL_TYPES","PUSH_SUBSCRIBE","PUSH_UNSUBSCRIBE","PROFILE_ENRICH","NOTIFICATION_ACK"],"sourceRoot":"../../../src","sources":["types/EventQueue.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAaA;AACA;AACA;;AAWA;AACA;AACA;;AAYA;AACA;AACA;;AAWA;AACA;AACA;;AAQA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA,OAAO,MAAMA,gBAAgB,GAAG;EAC9B;EACA;;EAEA;EACAC,cAAc,EAAE,gBAAgB;EAChCC,gBAAgB,EAAE,kBAAkB;EACpCC,cAAc,EAAE,gBAAgB;EAChCC,gBAAgB,EAAE,uBAAuB,CAAE;AAC7C,CAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/SDK.ts"],"mappings":"","ignoreList":[]}
|