@onairos/react-native 3.1.16 → 3.1.17
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/README.md +404 -0
- package/lib/commonjs/assets/images/Checkbox.svg +3 -3
- package/lib/commonjs/assets/images/EnochE.svg +19 -19
- package/lib/commonjs/assets/images/Personalityprofile.svg +3 -3
- package/lib/commonjs/assets/images/Personalitytraits.svg +3 -3
- package/lib/commonjs/assets/images/Userpreferences.svg +3 -3
- package/lib/commonjs/assets/images/arrow.svg +20 -20
- package/lib/commonjs/assets/images/basicproficon.svg +43 -43
- package/lib/commonjs/assets/images/basicprofile.svg +3 -3
- package/lib/commonjs/assets/images/checkmark.svg +4 -4
- package/lib/commonjs/assets/images/contentanalysis.svg +3 -3
- package/lib/commonjs/assets/images/contenticon.svg +23 -23
- package/lib/commonjs/assets/images/personalityicon.svg +18 -18
- package/lib/commonjs/assets/images/x-close.svg +3 -3
- package/lib/commonjs/components/OnairosButton.js +290 -0
- package/lib/commonjs/components/OnairosButton.js.map +1 -0
- package/lib/commonjs/components/OnairosSignInButton.js +30 -8
- package/lib/commonjs/components/OnairosSignInButton.js.map +1 -1
- package/lib/commonjs/components/UniversalOnboarding.js +4 -4
- package/lib/commonjs/config/api.js +2 -2
- package/lib/commonjs/hooks/useConnections.js +6 -6
- package/lib/commonjs/hooks/useUserConnections.js +10 -10
- package/lib/commonjs/index.js +9 -10
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/services/apiClient.js +35 -35
- package/lib/commonjs/services/apiKeyService.js +99 -99
- package/lib/commonjs/services/authService.js +82 -82
- package/lib/commonjs/services/biometricPinService.js +10 -10
- package/lib/commonjs/services/connectedAccountsService.js +32 -32
- package/lib/commonjs/services/googleAuthService.js +15 -15
- package/lib/commonjs/services/imageCompressionService.js +15 -15
- package/lib/commonjs/services/jwtStorageService.js +59 -59
- package/lib/commonjs/services/mobileTrainingService.js +14 -14
- package/lib/commonjs/services/pinEncryptionService.js +10 -10
- package/lib/commonjs/services/pinStorageUtils.js +15 -15
- package/lib/commonjs/services/platformAuthService.js +47 -47
- package/lib/commonjs/services/storageService.js +31 -31
- package/lib/commonjs/services/trainingApiHelpers.js +33 -33
- package/lib/commonjs/services/userConnectionsService.js +24 -24
- package/lib/commonjs/utils/Portal.js +4 -4
- package/lib/commonjs/utils/api.js +24 -24
- package/lib/commonjs/utils/auth.js +18 -18
- package/lib/commonjs/utils/crypto.js +13 -13
- package/lib/commonjs/utils/encryption.js +12 -12
- package/lib/commonjs/utils/eventUtils.js +52 -52
- package/lib/commonjs/utils/programmaticFlow.js +16 -16
- package/lib/commonjs/utils/retryHelper.js +27 -27
- package/lib/module/assets/images/Checkbox.svg +3 -3
- package/lib/module/assets/images/EnochE.svg +19 -19
- package/lib/module/assets/images/Personalityprofile.svg +3 -3
- package/lib/module/assets/images/Personalitytraits.svg +3 -3
- package/lib/module/assets/images/Userpreferences.svg +3 -3
- package/lib/module/assets/images/arrow.svg +20 -20
- package/lib/module/assets/images/basicproficon.svg +43 -43
- package/lib/module/assets/images/basicprofile.svg +3 -3
- package/lib/module/assets/images/checkmark.svg +4 -4
- package/lib/module/assets/images/contentanalysis.svg +3 -3
- package/lib/module/assets/images/contenticon.svg +23 -23
- package/lib/module/assets/images/personalityicon.svg +18 -18
- package/lib/module/assets/images/x-close.svg +3 -3
- package/lib/module/components/OnairosButton.js +282 -0
- package/lib/module/components/OnairosButton.js.map +1 -0
- package/lib/module/components/OnairosSignInButton.js +30 -8
- package/lib/module/components/OnairosSignInButton.js.map +1 -1
- package/lib/module/components/UniversalOnboarding.js +4 -4
- package/lib/module/config/api.js +2 -2
- package/lib/module/hooks/useConnections.js +6 -6
- package/lib/module/hooks/useUserConnections.js +10 -10
- package/lib/module/index.js +8 -10
- package/lib/module/index.js.map +1 -1
- package/lib/module/services/apiClient.js +35 -35
- package/lib/module/services/apiKeyService.js +99 -99
- package/lib/module/services/authService.js +82 -82
- package/lib/module/services/biometricPinService.js +10 -10
- package/lib/module/services/connectedAccountsService.js +32 -32
- package/lib/module/services/googleAuthService.js +15 -15
- package/lib/module/services/imageCompressionService.js +15 -15
- package/lib/module/services/jwtStorageService.js +59 -59
- package/lib/module/services/mobileTrainingService.js +14 -14
- package/lib/module/services/pinEncryptionService.js +10 -10
- package/lib/module/services/pinStorageUtils.js +15 -15
- package/lib/module/services/platformAuthService.js +47 -47
- package/lib/module/services/storageService.js +31 -31
- package/lib/module/services/trainingApiHelpers.js +33 -33
- package/lib/module/services/userConnectionsService.js +24 -24
- package/lib/module/utils/Portal.js +4 -4
- package/lib/module/utils/api.js +24 -24
- package/lib/module/utils/auth.js +18 -18
- package/lib/module/utils/crypto.js +13 -13
- package/lib/module/utils/encryption.js +12 -12
- package/lib/module/utils/eventUtils.js +52 -52
- package/lib/module/utils/programmaticFlow.js +16 -16
- package/lib/module/utils/retryHelper.js +27 -27
- package/lib/typescript/components/OnairosButton.d.ts +37 -0
- package/lib/typescript/components/OnairosButton.d.ts.map +1 -0
- package/lib/typescript/components/OnairosSignInButton.d.ts +2 -1
- package/lib/typescript/components/OnairosSignInButton.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +3 -4
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +163 -163
- package/src/api/index.ts +151 -151
- package/src/assets/images/Checkbox.svg +3 -3
- package/src/assets/images/EnochE.svg +19 -19
- package/src/assets/images/Personalityprofile.svg +3 -3
- package/src/assets/images/Personalitytraits.svg +3 -3
- package/src/assets/images/Userpreferences.svg +3 -3
- package/src/assets/images/arrow.svg +20 -20
- package/src/assets/images/basicproficon.svg +43 -43
- package/src/assets/images/basicprofile.svg +3 -3
- package/src/assets/images/checkmark.svg +4 -4
- package/src/assets/images/contentanalysis.svg +3 -3
- package/src/assets/images/contenticon.svg +23 -23
- package/src/assets/images/personalityicon.svg +18 -18
- package/src/assets/images/x-close.svg +3 -3
- package/src/components/BodyText.tsx +33 -33
- package/src/components/BrandMark.tsx +62 -62
- package/src/components/CodeInput.tsx +32 -32
- package/src/components/DataRequestScreen.tsx +355 -355
- package/src/components/EmailInput.tsx +31 -31
- package/src/components/EmailVerificationModal.tsx +363 -363
- package/src/components/ExistingUserDataConfirmation.tsx +506 -506
- package/src/components/GoogleButton.tsx +55 -55
- package/src/components/HeadingGroup.tsx +49 -49
- package/src/components/ModalHeader.tsx +125 -125
- package/src/components/ModalSheet.tsx +57 -57
- package/src/components/Onairos.tsx +422 -422
- package/src/components/OnairosButton.tsx +339 -0
- package/src/components/OnairosSignInButton.tsx +30 -10
- package/src/components/Overlay.tsx +506 -506
- package/src/components/PersonaImage.tsx +79 -79
- package/src/components/PersonaLoadingScreen.tsx +201 -201
- package/src/components/PersonalizationConsentScreen.tsx +410 -410
- package/src/components/PinCreationScreen.tsx +492 -492
- package/src/components/PinInput.tsx +555 -555
- package/src/components/PlatformConnectorsStep.tsx +891 -891
- package/src/components/PlatformList.tsx +144 -144
- package/src/components/PlatformToggle.tsx +226 -226
- package/src/components/PrimaryButton.tsx +213 -213
- package/src/components/SignInMatchAnimation.tsx +225 -225
- package/src/components/SignInStep.tsx +217 -217
- package/src/components/TrainingModal.tsx +1047 -1047
- package/src/components/UniversalOnboarding.tsx +2887 -2887
- package/src/components/VerificationStep.tsx +198 -198
- package/src/components/WelcomeScreen.tsx +473 -473
- package/src/components/icons/Basicproficon.tsx +30 -30
- package/src/components/icons/Basicprofile.tsx +17 -17
- package/src/components/icons/Checkbox.tsx +17 -17
- package/src/components/icons/Checkmark.tsx +24 -24
- package/src/components/icons/Contentanalysis.tsx +17 -17
- package/src/components/icons/Contenticon.tsx +30 -30
- package/src/components/icons/EnochE.tsx +39 -39
- package/src/components/icons/Personalityicon.tsx +22 -22
- package/src/components/icons/Personalityprofile.tsx +17 -17
- package/src/components/icons/Personalitytraits.tsx +17 -17
- package/src/components/icons/Userpreferences.tsx +17 -17
- package/src/components/icons/index.ts +12 -12
- package/src/components/onboarding/OAuthWebView.tsx +232 -232
- package/src/config/api.ts +25 -25
- package/src/context/AuthContext.tsx +393 -393
- package/src/hooks/useConnectedAccounts.ts +138 -138
- package/src/hooks/useConnections.ts +161 -161
- package/src/hooks/useCredentials.ts +174 -174
- package/src/hooks/useUserConnections.ts +165 -165
- package/src/index.js +14 -0
- package/src/index.ts +94 -96
- package/src/services/apiClient.ts +336 -336
- package/src/services/apiKeyService.ts +919 -919
- package/src/services/authService.ts +1008 -1008
- package/src/services/biometricPinService.ts +192 -192
- package/src/services/connectedAccountsService.ts +289 -289
- package/src/services/googleAuthService.ts +279 -279
- package/src/services/imageCompressionService.ts +302 -302
- package/src/services/jwtStorageService.ts +256 -256
- package/src/services/mobileTrainingService.ts +203 -203
- package/src/services/pinEncryptionService.ts +75 -75
- package/src/services/pinStorageUtils.ts +96 -96
- package/src/services/platformAuthService.ts +1346 -1346
- package/src/services/storageService.ts +451 -451
- package/src/services/trainingApiHelpers.ts +66 -66
- package/src/services/userConnectionsService.ts +556 -556
- package/src/services/youtubeMigrationService.ts +453 -453
- package/src/theme/index.ts +239 -239
- package/src/types/ambient.d.ts +28 -28
- package/src/types/index.ts +265 -265
- package/src/types/node-fix.d.ts +18 -18
- package/src/types/node-override.d.ts +23 -23
- package/src/types/opacity.d.ts +15 -15
- package/src/types/types.d.ts +17 -17
- package/src/utils/Portal.tsx +82 -82
- package/src/utils/api.js +111 -111
- package/src/utils/auth.js +103 -103
- package/src/utils/crypto.js +59 -59
- package/src/utils/encryption.ts +68 -68
- package/src/utils/eventUtils.ts +302 -302
- package/src/utils/haptics.ts +58 -58
- package/src/utils/imagePreloader.ts +2 -2
- package/src/utils/programmaticFlow.ts +112 -112
- package/src/utils/retryHelper.ts +274 -274
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
getUserConnections,
|
|
4
|
-
getUserConnectionsByUsername,
|
|
5
|
-
getUserConnectionsByUserId,
|
|
6
|
-
uploadProfilePicture,
|
|
7
|
-
Connection
|
|
8
|
-
} from '../services/userConnectionsService';
|
|
9
|
-
import { getAuthToken } from '../services/authService';
|
|
10
|
-
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
11
|
-
|
|
12
|
-
export interface UseUserConnectionsResult {
|
|
13
|
-
connections: Connection[];
|
|
14
|
-
isLoading: boolean;
|
|
15
|
-
error: string | null;
|
|
16
|
-
refreshConnections: () => Promise<void>;
|
|
17
|
-
getConnectionsByUsername: (username: string) => Promise<Connection[]>;
|
|
18
|
-
getConnectionsByUserId: (userId: string) => Promise<Connection[]>;
|
|
19
|
-
uploadUserProfilePicture: (imageData: string, fileType?: string) => Promise<boolean>;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export const useUserConnections = (): UseUserConnectionsResult => {
|
|
23
|
-
const [connections, setConnections] = useState<Connection[]>([]);
|
|
24
|
-
const [isLoading, setIsLoading] = useState<boolean>(true);
|
|
25
|
-
const [error, setError] = useState<string | null>(null);
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Load connections from API with authentication validation
|
|
29
|
-
*/
|
|
30
|
-
const loadConnections = useCallback(async () => {
|
|
31
|
-
try {
|
|
32
|
-
setIsLoading(true);
|
|
33
|
-
setError(null);
|
|
34
|
-
|
|
35
|
-
// ✅ CRITICAL: Validate authentication before making API calls
|
|
36
|
-
const authToken = await getAuthToken();
|
|
37
|
-
|
|
38
|
-
// Check for demo mode (reviewer bypass)
|
|
39
|
-
const reviewerToken = await AsyncStorage.getItem('onairos_jwt_token');
|
|
40
|
-
const isDemoMode = reviewerToken === 'reviewer-bypass-token';
|
|
41
|
-
|
|
42
|
-
if (!authToken && !isDemoMode) {
|
|
43
|
-
console.warn('⚠️ [CONNECTIONS HOOK] No authentication token available for connections refresh');
|
|
44
|
-
console.warn('⚠️ [CONNECTIONS HOOK] Skipping API call to prevent unauthenticated requests');
|
|
45
|
-
setConnections([]);
|
|
46
|
-
setError('Authentication required for connections');
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (isDemoMode) {
|
|
51
|
-
console.log('🎯 [DEMO MODE] Reviewer bypass detected - skipping API call for demo');
|
|
52
|
-
// For demo mode, return empty connections - ResultsScreen will use fallback data
|
|
53
|
-
setConnections([]);
|
|
54
|
-
setError(null);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// At this point, authToken must be valid (not null) because we've checked both cases above
|
|
59
|
-
if (!authToken) {
|
|
60
|
-
console.error('❌ [CONNECTIONS HOOK] Unexpected null token after validation');
|
|
61
|
-
setConnections([]);
|
|
62
|
-
setError('Authentication error');
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
console.log('🔄 Loading user connections with authentication...');
|
|
67
|
-
console.log('🔑 [CONNECTIONS HOOK] Using auth token:', `${authToken.substring(0, 20)}...`);
|
|
68
|
-
|
|
69
|
-
const fetchedConnections = await getUserConnections();
|
|
70
|
-
|
|
71
|
-
setConnections(fetchedConnections);
|
|
72
|
-
console.log('✅ Connections loaded:', fetchedConnections.length);
|
|
73
|
-
|
|
74
|
-
} catch (err) {
|
|
75
|
-
const errorMessage = err instanceof Error ? err.message : 'Failed to load connections';
|
|
76
|
-
console.error('❌ Error loading connections:', errorMessage);
|
|
77
|
-
setError(errorMessage);
|
|
78
|
-
|
|
79
|
-
// Set empty array on error - screens will handle their own fallbacks
|
|
80
|
-
setConnections([]);
|
|
81
|
-
|
|
82
|
-
} finally {
|
|
83
|
-
setIsLoading(false);
|
|
84
|
-
}
|
|
85
|
-
}, []);
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Refresh connections with authentication validation
|
|
89
|
-
*/
|
|
90
|
-
const refreshConnections = useCallback(async () => {
|
|
91
|
-
console.log('🔄 [CONNECTIONS HOOK] Refreshing connections...');
|
|
92
|
-
await loadConnections();
|
|
93
|
-
console.log('✅ [CONNECTIONS HOOK] Connections refresh completed');
|
|
94
|
-
}, [loadConnections]);
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Get connections by username with authentication validation
|
|
98
|
-
*/
|
|
99
|
-
const getConnectionsByUsername = useCallback(async (username: string): Promise<Connection[]> => {
|
|
100
|
-
try {
|
|
101
|
-
// ✅ Validate authentication before making API calls
|
|
102
|
-
const authToken = await getAuthToken();
|
|
103
|
-
if (!authToken) {
|
|
104
|
-
console.warn('⚠️ [CONNECTIONS HOOK] No authentication token available for username connections');
|
|
105
|
-
return [];
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
console.log('🔍 Fetching connections by username:', username);
|
|
109
|
-
console.log('🔑 [CONNECTIONS HOOK] Using auth token:', `${authToken.substring(0, 20)}...`);
|
|
110
|
-
return await getUserConnectionsByUsername(username);
|
|
111
|
-
} catch (error) {
|
|
112
|
-
console.error('❌ Error fetching connections by username:', error);
|
|
113
|
-
return [];
|
|
114
|
-
}
|
|
115
|
-
}, []);
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Get connections by user ID with authentication validation
|
|
119
|
-
*/
|
|
120
|
-
const getConnectionsByUserId = useCallback(async (userId: string): Promise<Connection[]> => {
|
|
121
|
-
try {
|
|
122
|
-
// ✅ Validate authentication before making API calls
|
|
123
|
-
const authToken = await getAuthToken();
|
|
124
|
-
if (!authToken) {
|
|
125
|
-
console.warn('⚠️ [CONNECTIONS HOOK] No authentication token available for user ID connections');
|
|
126
|
-
return [];
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
console.log('🔍 Fetching connections by userId:', userId);
|
|
130
|
-
console.log('🔑 [CONNECTIONS HOOK] Using auth token:', `${authToken.substring(0, 20)}...`);
|
|
131
|
-
return await getUserConnectionsByUserId(userId);
|
|
132
|
-
} catch (error) {
|
|
133
|
-
console.error('❌ Error fetching connections by userId:', error);
|
|
134
|
-
return [];
|
|
135
|
-
}
|
|
136
|
-
}, []);
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Upload profile picture
|
|
140
|
-
*/
|
|
141
|
-
const uploadUserProfilePicture = useCallback(async (imageData: string, fileType: string = 'jpg'): Promise<boolean> => {
|
|
142
|
-
try {
|
|
143
|
-
console.log('📷 Uploading profile picture for user:');
|
|
144
|
-
const result = await uploadProfilePicture(imageData, fileType);
|
|
145
|
-
return result.success;
|
|
146
|
-
} catch (error) {
|
|
147
|
-
console.error('❌ Error uploading profile picture:', error);
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
}, []);
|
|
151
|
-
|
|
152
|
-
// Load connections on mount
|
|
153
|
-
useEffect(() => {
|
|
154
|
-
loadConnections();
|
|
155
|
-
}, [loadConnections]);
|
|
156
|
-
|
|
157
|
-
return {
|
|
158
|
-
connections,
|
|
159
|
-
isLoading,
|
|
160
|
-
error,
|
|
161
|
-
refreshConnections,
|
|
162
|
-
getConnectionsByUsername,
|
|
163
|
-
getConnectionsByUserId,
|
|
164
|
-
uploadUserProfilePicture
|
|
165
|
-
};
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
getUserConnections,
|
|
4
|
+
getUserConnectionsByUsername,
|
|
5
|
+
getUserConnectionsByUserId,
|
|
6
|
+
uploadProfilePicture,
|
|
7
|
+
Connection
|
|
8
|
+
} from '../services/userConnectionsService';
|
|
9
|
+
import { getAuthToken } from '../services/authService';
|
|
10
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
11
|
+
|
|
12
|
+
export interface UseUserConnectionsResult {
|
|
13
|
+
connections: Connection[];
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
error: string | null;
|
|
16
|
+
refreshConnections: () => Promise<void>;
|
|
17
|
+
getConnectionsByUsername: (username: string) => Promise<Connection[]>;
|
|
18
|
+
getConnectionsByUserId: (userId: string) => Promise<Connection[]>;
|
|
19
|
+
uploadUserProfilePicture: (imageData: string, fileType?: string) => Promise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const useUserConnections = (): UseUserConnectionsResult => {
|
|
23
|
+
const [connections, setConnections] = useState<Connection[]>([]);
|
|
24
|
+
const [isLoading, setIsLoading] = useState<boolean>(true);
|
|
25
|
+
const [error, setError] = useState<string | null>(null);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Load connections from API with authentication validation
|
|
29
|
+
*/
|
|
30
|
+
const loadConnections = useCallback(async () => {
|
|
31
|
+
try {
|
|
32
|
+
setIsLoading(true);
|
|
33
|
+
setError(null);
|
|
34
|
+
|
|
35
|
+
// ✅ CRITICAL: Validate authentication before making API calls
|
|
36
|
+
const authToken = await getAuthToken();
|
|
37
|
+
|
|
38
|
+
// Check for demo mode (reviewer bypass)
|
|
39
|
+
const reviewerToken = await AsyncStorage.getItem('onairos_jwt_token');
|
|
40
|
+
const isDemoMode = reviewerToken === 'reviewer-bypass-token';
|
|
41
|
+
|
|
42
|
+
if (!authToken && !isDemoMode) {
|
|
43
|
+
console.warn('⚠️ [CONNECTIONS HOOK] No authentication token available for connections refresh');
|
|
44
|
+
console.warn('⚠️ [CONNECTIONS HOOK] Skipping API call to prevent unauthenticated requests');
|
|
45
|
+
setConnections([]);
|
|
46
|
+
setError('Authentication required for connections');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (isDemoMode) {
|
|
51
|
+
console.log('🎯 [DEMO MODE] Reviewer bypass detected - skipping API call for demo');
|
|
52
|
+
// For demo mode, return empty connections - ResultsScreen will use fallback data
|
|
53
|
+
setConnections([]);
|
|
54
|
+
setError(null);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// At this point, authToken must be valid (not null) because we've checked both cases above
|
|
59
|
+
if (!authToken) {
|
|
60
|
+
console.error('❌ [CONNECTIONS HOOK] Unexpected null token after validation');
|
|
61
|
+
setConnections([]);
|
|
62
|
+
setError('Authentication error');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
console.log('🔄 Loading user connections with authentication...');
|
|
67
|
+
console.log('🔑 [CONNECTIONS HOOK] Using auth token:', `${authToken.substring(0, 20)}...`);
|
|
68
|
+
|
|
69
|
+
const fetchedConnections = await getUserConnections();
|
|
70
|
+
|
|
71
|
+
setConnections(fetchedConnections);
|
|
72
|
+
console.log('✅ Connections loaded:', fetchedConnections.length);
|
|
73
|
+
|
|
74
|
+
} catch (err) {
|
|
75
|
+
const errorMessage = err instanceof Error ? err.message : 'Failed to load connections';
|
|
76
|
+
console.error('❌ Error loading connections:', errorMessage);
|
|
77
|
+
setError(errorMessage);
|
|
78
|
+
|
|
79
|
+
// Set empty array on error - screens will handle their own fallbacks
|
|
80
|
+
setConnections([]);
|
|
81
|
+
|
|
82
|
+
} finally {
|
|
83
|
+
setIsLoading(false);
|
|
84
|
+
}
|
|
85
|
+
}, []);
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Refresh connections with authentication validation
|
|
89
|
+
*/
|
|
90
|
+
const refreshConnections = useCallback(async () => {
|
|
91
|
+
console.log('🔄 [CONNECTIONS HOOK] Refreshing connections...');
|
|
92
|
+
await loadConnections();
|
|
93
|
+
console.log('✅ [CONNECTIONS HOOK] Connections refresh completed');
|
|
94
|
+
}, [loadConnections]);
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Get connections by username with authentication validation
|
|
98
|
+
*/
|
|
99
|
+
const getConnectionsByUsername = useCallback(async (username: string): Promise<Connection[]> => {
|
|
100
|
+
try {
|
|
101
|
+
// ✅ Validate authentication before making API calls
|
|
102
|
+
const authToken = await getAuthToken();
|
|
103
|
+
if (!authToken) {
|
|
104
|
+
console.warn('⚠️ [CONNECTIONS HOOK] No authentication token available for username connections');
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
console.log('🔍 Fetching connections by username:', username);
|
|
109
|
+
console.log('🔑 [CONNECTIONS HOOK] Using auth token:', `${authToken.substring(0, 20)}...`);
|
|
110
|
+
return await getUserConnectionsByUsername(username);
|
|
111
|
+
} catch (error) {
|
|
112
|
+
console.error('❌ Error fetching connections by username:', error);
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
}, []);
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Get connections by user ID with authentication validation
|
|
119
|
+
*/
|
|
120
|
+
const getConnectionsByUserId = useCallback(async (userId: string): Promise<Connection[]> => {
|
|
121
|
+
try {
|
|
122
|
+
// ✅ Validate authentication before making API calls
|
|
123
|
+
const authToken = await getAuthToken();
|
|
124
|
+
if (!authToken) {
|
|
125
|
+
console.warn('⚠️ [CONNECTIONS HOOK] No authentication token available for user ID connections');
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
console.log('🔍 Fetching connections by userId:', userId);
|
|
130
|
+
console.log('🔑 [CONNECTIONS HOOK] Using auth token:', `${authToken.substring(0, 20)}...`);
|
|
131
|
+
return await getUserConnectionsByUserId(userId);
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.error('❌ Error fetching connections by userId:', error);
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
}, []);
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Upload profile picture
|
|
140
|
+
*/
|
|
141
|
+
const uploadUserProfilePicture = useCallback(async (imageData: string, fileType: string = 'jpg'): Promise<boolean> => {
|
|
142
|
+
try {
|
|
143
|
+
console.log('📷 Uploading profile picture for user:');
|
|
144
|
+
const result = await uploadProfilePicture(imageData, fileType);
|
|
145
|
+
return result.success;
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.error('❌ Error uploading profile picture:', error);
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}, []);
|
|
151
|
+
|
|
152
|
+
// Load connections on mount
|
|
153
|
+
useEffect(() => {
|
|
154
|
+
loadConnections();
|
|
155
|
+
}, [loadConnections]);
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
connections,
|
|
159
|
+
isLoading,
|
|
160
|
+
error,
|
|
161
|
+
refreshConnections,
|
|
162
|
+
getConnectionsByUsername,
|
|
163
|
+
getConnectionsByUserId,
|
|
164
|
+
uploadUserProfilePicture
|
|
165
|
+
};
|
|
166
166
|
};
|
package/src/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import OnairosButton from './components/OnairosButton';
|
|
2
|
+
import * as AuthUtils from './utils/auth';
|
|
3
|
+
import * as CryptoUtils from './utils/crypto';
|
|
4
|
+
import * as ApiUtils from './utils/api';
|
|
5
|
+
|
|
6
|
+
// Export the main component
|
|
7
|
+
export default OnairosButton;
|
|
8
|
+
|
|
9
|
+
// Export utilities for advanced usage
|
|
10
|
+
export {
|
|
11
|
+
AuthUtils,
|
|
12
|
+
CryptoUtils,
|
|
13
|
+
ApiUtils
|
|
14
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -1,97 +1,95 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Onairos React Native SDK v4.0.0
|
|
3
|
-
* A React Native implementation for Onairos personalized data integration
|
|
4
|
-
*
|
|
5
|
-
* PUBLIC API - Complete redesigned UI and enhanced functionality
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
// Essential Types
|
|
9
|
-
export type {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
export {
|
|
29
|
-
export {
|
|
30
|
-
export {
|
|
31
|
-
export {
|
|
32
|
-
export {
|
|
33
|
-
export {
|
|
34
|
-
export {
|
|
35
|
-
export {
|
|
36
|
-
export {
|
|
37
|
-
export {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
//
|
|
42
|
-
// export {
|
|
43
|
-
// export {
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
export { default as
|
|
49
|
-
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
//
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
// export
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
import {
|
|
88
|
-
import
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
UniversalOnboarding,
|
|
96
|
-
WelcomeScreen,
|
|
1
|
+
/**
|
|
2
|
+
* Onairos React Native SDK v4.0.0
|
|
3
|
+
* A React Native implementation for Onairos personalized data integration
|
|
4
|
+
*
|
|
5
|
+
* PUBLIC API - Complete redesigned UI and enhanced functionality
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Essential Types
|
|
9
|
+
export type {
|
|
10
|
+
OnairosButtonProps,
|
|
11
|
+
OnairosProps,
|
|
12
|
+
DataTier,
|
|
13
|
+
OnairosConfig,
|
|
14
|
+
TestModeOptions,
|
|
15
|
+
UniversalOnboardingProps,
|
|
16
|
+
ConnectionStatus,
|
|
17
|
+
PlatformConfig,
|
|
18
|
+
} from './types';
|
|
19
|
+
|
|
20
|
+
// Core Components - Redesigned UI
|
|
21
|
+
export { OnairosButton } from './components/OnairosButton';
|
|
22
|
+
export { Onairos } from './components/Onairos';
|
|
23
|
+
export { UniversalOnboarding } from './components/UniversalOnboarding';
|
|
24
|
+
|
|
25
|
+
// New UI Components - Complete Welcome Flow
|
|
26
|
+
export { default as WelcomeScreen } from './components/WelcomeScreen';
|
|
27
|
+
export { PrimaryButton } from './components/PrimaryButton';
|
|
28
|
+
export { ModalSheet } from './components/ModalSheet';
|
|
29
|
+
export { ModalHeader } from './components/ModalHeader';
|
|
30
|
+
export { BrandMark } from './components/BrandMark';
|
|
31
|
+
export { HeadingGroup } from './components/HeadingGroup';
|
|
32
|
+
export { BodyText } from './components/BodyText';
|
|
33
|
+
export { SignInStep } from './components/SignInStep';
|
|
34
|
+
export { VerificationStep } from './components/VerificationStep';
|
|
35
|
+
export { default as PlatformConnectorsStep } from './components/PlatformConnectorsStep';
|
|
36
|
+
export { PersonalizationConsentScreen } from './components/PersonalizationConsentScreen';
|
|
37
|
+
export { PinCreationScreen } from './components/PinCreationScreen';
|
|
38
|
+
|
|
39
|
+
// Enhanced Hooks - Temporarily commented out for build
|
|
40
|
+
// export { useConnections } from './hooks/useConnections';
|
|
41
|
+
// export { useUserConnections } from './hooks/useUserConnections';
|
|
42
|
+
// export { useConnectedAccounts } from './hooks/useConnectedAccounts';
|
|
43
|
+
// export { useAuth } from './context/AuthContext';
|
|
44
|
+
|
|
45
|
+
// Temporarily commented out components with missing dependencies
|
|
46
|
+
export { default as PersonaImage } from './components/PersonaImage';
|
|
47
|
+
// export { default as PlatformToggle } from './components/PlatformToggle';
|
|
48
|
+
// export { default as PersonaLoadingScreen } from './components/PersonaLoadingScreen';
|
|
49
|
+
|
|
50
|
+
// SDK Initialization & Services
|
|
51
|
+
export {
|
|
52
|
+
initializeApiKey,
|
|
53
|
+
ADMIN_API_KEY,
|
|
54
|
+
extractUsernameFromJWT,
|
|
55
|
+
extractUserDataFromJWT,
|
|
56
|
+
decodeJWTPayload,
|
|
57
|
+
} from './services/apiKeyService';
|
|
58
|
+
|
|
59
|
+
// Authentication & Enhanced Services - Temporarily limited for build
|
|
60
|
+
export {
|
|
61
|
+
getOnairosUsername,
|
|
62
|
+
} from './services/authService';
|
|
63
|
+
|
|
64
|
+
export {
|
|
65
|
+
initiateOAuth,
|
|
66
|
+
initiateNativeAuth,
|
|
67
|
+
hasNativeSDK,
|
|
68
|
+
isOAuthCallback,
|
|
69
|
+
} from './services/platformAuthService';
|
|
70
|
+
|
|
71
|
+
export {
|
|
72
|
+
updateGoogleClientIds,
|
|
73
|
+
} from './services/googleAuthService';
|
|
74
|
+
|
|
75
|
+
// Enhanced API Client
|
|
76
|
+
export { ApiClient } from './services/apiClient';
|
|
77
|
+
|
|
78
|
+
// Programmatic Function (for custom buttons) - Temporarily commented out
|
|
79
|
+
// export { executeOnairosFlow } from './utils/programmaticFlow';
|
|
80
|
+
|
|
81
|
+
// Context Provider - Temporarily commented out for build
|
|
82
|
+
// export { AuthProvider } from './context/AuthContext';
|
|
83
|
+
|
|
84
|
+
// Default export for convenience
|
|
85
|
+
import { OnairosButton } from './components/OnairosButton';
|
|
86
|
+
import { Onairos } from './components/Onairos';
|
|
87
|
+
import { UniversalOnboarding } from './components/UniversalOnboarding';
|
|
88
|
+
import WelcomeScreen from './components/WelcomeScreen';
|
|
89
|
+
|
|
90
|
+
export default {
|
|
91
|
+
OnairosButton,
|
|
92
|
+
Onairos,
|
|
93
|
+
UniversalOnboarding,
|
|
94
|
+
WelcomeScreen,
|
|
97
95
|
};
|