@onairos/react-native 3.1.16 → 3.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/README.md +404 -0
  2. package/lib/commonjs/assets/images/Checkbox.svg +3 -3
  3. package/lib/commonjs/assets/images/EnochE.svg +19 -19
  4. package/lib/commonjs/assets/images/Personalityprofile.svg +3 -3
  5. package/lib/commonjs/assets/images/Personalitytraits.svg +3 -3
  6. package/lib/commonjs/assets/images/Userpreferences.svg +3 -3
  7. package/lib/commonjs/assets/images/arrow.svg +20 -20
  8. package/lib/commonjs/assets/images/basicproficon.svg +43 -43
  9. package/lib/commonjs/assets/images/basicprofile.svg +3 -3
  10. package/lib/commonjs/assets/images/checkmark.svg +4 -4
  11. package/lib/commonjs/assets/images/contentanalysis.svg +3 -3
  12. package/lib/commonjs/assets/images/contenticon.svg +23 -23
  13. package/lib/commonjs/assets/images/personalityicon.svg +18 -18
  14. package/lib/commonjs/assets/images/x-close.svg +3 -3
  15. package/lib/commonjs/components/ModalSheet.js +8 -2
  16. package/lib/commonjs/components/ModalSheet.js.map +1 -1
  17. package/lib/commonjs/components/OnairosButton.js +290 -0
  18. package/lib/commonjs/components/OnairosButton.js.map +1 -0
  19. package/lib/commonjs/components/OnairosSignInButton.js +32 -8
  20. package/lib/commonjs/components/OnairosSignInButton.js.map +1 -1
  21. package/lib/commonjs/components/UniversalOnboarding.js +4 -4
  22. package/lib/commonjs/components/WelcomeScreen.js +29 -13
  23. package/lib/commonjs/components/WelcomeScreen.js.map +1 -1
  24. package/lib/commonjs/config/api.js +2 -2
  25. package/lib/commonjs/hooks/useConnections.js +6 -6
  26. package/lib/commonjs/hooks/useUserConnections.js +10 -10
  27. package/lib/commonjs/index.js +13 -6
  28. package/lib/commonjs/index.js.map +1 -1
  29. package/lib/commonjs/services/apiClient.js +35 -35
  30. package/lib/commonjs/services/apiKeyService.js +99 -99
  31. package/lib/commonjs/services/authService.js +82 -82
  32. package/lib/commonjs/services/biometricPinService.js +10 -10
  33. package/lib/commonjs/services/connectedAccountsService.js +32 -32
  34. package/lib/commonjs/services/googleAuthService.js +15 -15
  35. package/lib/commonjs/services/imageCompressionService.js +15 -15
  36. package/lib/commonjs/services/jwtStorageService.js +59 -59
  37. package/lib/commonjs/services/mobileTrainingService.js +14 -14
  38. package/lib/commonjs/services/pinEncryptionService.js +10 -10
  39. package/lib/commonjs/services/pinStorageUtils.js +15 -15
  40. package/lib/commonjs/services/platformAuthService.js +47 -47
  41. package/lib/commonjs/services/storageService.js +31 -31
  42. package/lib/commonjs/services/trainingApiHelpers.js +33 -33
  43. package/lib/commonjs/services/userConnectionsService.js +24 -24
  44. package/lib/commonjs/utils/Portal.js +4 -4
  45. package/lib/commonjs/utils/api.js +24 -24
  46. package/lib/commonjs/utils/auth.js +18 -18
  47. package/lib/commonjs/utils/crypto.js +13 -13
  48. package/lib/commonjs/utils/encryption.js +12 -12
  49. package/lib/commonjs/utils/eventUtils.js +52 -52
  50. package/lib/commonjs/utils/programmaticFlow.js +16 -16
  51. package/lib/commonjs/utils/retryHelper.js +27 -27
  52. package/lib/module/assets/images/Checkbox.svg +3 -3
  53. package/lib/module/assets/images/EnochE.svg +19 -19
  54. package/lib/module/assets/images/Personalityprofile.svg +3 -3
  55. package/lib/module/assets/images/Personalitytraits.svg +3 -3
  56. package/lib/module/assets/images/Userpreferences.svg +3 -3
  57. package/lib/module/assets/images/arrow.svg +20 -20
  58. package/lib/module/assets/images/basicproficon.svg +43 -43
  59. package/lib/module/assets/images/basicprofile.svg +3 -3
  60. package/lib/module/assets/images/checkmark.svg +4 -4
  61. package/lib/module/assets/images/contentanalysis.svg +3 -3
  62. package/lib/module/assets/images/contenticon.svg +23 -23
  63. package/lib/module/assets/images/personalityicon.svg +18 -18
  64. package/lib/module/assets/images/x-close.svg +3 -3
  65. package/lib/module/components/ModalSheet.js +7 -2
  66. package/lib/module/components/ModalSheet.js.map +1 -1
  67. package/lib/module/components/OnairosButton.js +282 -0
  68. package/lib/module/components/OnairosButton.js.map +1 -0
  69. package/lib/module/components/OnairosSignInButton.js +32 -8
  70. package/lib/module/components/OnairosSignInButton.js.map +1 -1
  71. package/lib/module/components/UniversalOnboarding.js +4 -4
  72. package/lib/module/components/WelcomeScreen.js +25 -10
  73. package/lib/module/components/WelcomeScreen.js.map +1 -1
  74. package/lib/module/config/api.js +2 -2
  75. package/lib/module/hooks/useConnections.js +6 -6
  76. package/lib/module/hooks/useUserConnections.js +10 -10
  77. package/lib/module/index.js +11 -11
  78. package/lib/module/index.js.map +1 -1
  79. package/lib/module/services/apiClient.js +35 -35
  80. package/lib/module/services/apiKeyService.js +99 -99
  81. package/lib/module/services/authService.js +82 -82
  82. package/lib/module/services/biometricPinService.js +10 -10
  83. package/lib/module/services/connectedAccountsService.js +32 -32
  84. package/lib/module/services/googleAuthService.js +15 -15
  85. package/lib/module/services/imageCompressionService.js +15 -15
  86. package/lib/module/services/jwtStorageService.js +59 -59
  87. package/lib/module/services/mobileTrainingService.js +14 -14
  88. package/lib/module/services/pinEncryptionService.js +10 -10
  89. package/lib/module/services/pinStorageUtils.js +15 -15
  90. package/lib/module/services/platformAuthService.js +47 -47
  91. package/lib/module/services/storageService.js +31 -31
  92. package/lib/module/services/trainingApiHelpers.js +33 -33
  93. package/lib/module/services/userConnectionsService.js +24 -24
  94. package/lib/module/utils/Portal.js +4 -4
  95. package/lib/module/utils/api.js +24 -24
  96. package/lib/module/utils/auth.js +18 -18
  97. package/lib/module/utils/crypto.js +13 -13
  98. package/lib/module/utils/encryption.js +12 -12
  99. package/lib/module/utils/eventUtils.js +52 -52
  100. package/lib/module/utils/programmaticFlow.js +16 -16
  101. package/lib/module/utils/retryHelper.js +27 -27
  102. package/lib/typescript/components/ModalSheet.d.ts.map +1 -1
  103. package/lib/typescript/components/OnairosButton.d.ts +37 -0
  104. package/lib/typescript/components/OnairosButton.d.ts.map +1 -0
  105. package/lib/typescript/components/OnairosSignInButton.d.ts.map +1 -1
  106. package/lib/typescript/components/WelcomeScreen.d.ts.map +1 -1
  107. package/lib/typescript/index.d.ts +3 -1
  108. package/lib/typescript/index.d.ts.map +1 -1
  109. package/package.json +145 -163
  110. package/src/api/index.ts +151 -151
  111. package/src/assets/images/Checkbox.svg +3 -3
  112. package/src/assets/images/EnochE.svg +19 -19
  113. package/src/assets/images/Personalityprofile.svg +3 -3
  114. package/src/assets/images/Personalitytraits.svg +3 -3
  115. package/src/assets/images/Userpreferences.svg +3 -3
  116. package/src/assets/images/arrow.svg +20 -20
  117. package/src/assets/images/basicproficon.svg +43 -43
  118. package/src/assets/images/basicprofile.svg +3 -3
  119. package/src/assets/images/checkmark.svg +4 -4
  120. package/src/assets/images/contentanalysis.svg +3 -3
  121. package/src/assets/images/contenticon.svg +23 -23
  122. package/src/assets/images/personalityicon.svg +18 -18
  123. package/src/assets/images/x-close.svg +3 -3
  124. package/src/components/BodyText.tsx +33 -33
  125. package/src/components/BrandMark.tsx +62 -62
  126. package/src/components/CodeInput.tsx +32 -32
  127. package/src/components/DataRequestScreen.tsx +355 -355
  128. package/src/components/EmailInput.tsx +31 -31
  129. package/src/components/EmailVerificationModal.tsx +363 -363
  130. package/src/components/ExistingUserDataConfirmation.tsx +506 -506
  131. package/src/components/GoogleButton.tsx +55 -55
  132. package/src/components/HeadingGroup.tsx +49 -49
  133. package/src/components/ModalHeader.tsx +125 -125
  134. package/src/components/ModalSheet.tsx +59 -57
  135. package/src/components/Onairos.tsx +422 -422
  136. package/src/components/OnairosButton.tsx +339 -0
  137. package/src/components/OnairosSignInButton.tsx +31 -9
  138. package/src/components/Overlay.tsx +506 -506
  139. package/src/components/PersonaImage.tsx +79 -79
  140. package/src/components/PersonaLoadingScreen.tsx +201 -201
  141. package/src/components/PersonalizationConsentScreen.tsx +410 -410
  142. package/src/components/PinCreationScreen.tsx +492 -492
  143. package/src/components/PinInput.tsx +555 -555
  144. package/src/components/PlatformConnectorsStep.tsx +891 -891
  145. package/src/components/PlatformList.tsx +144 -144
  146. package/src/components/PlatformToggle.tsx +226 -226
  147. package/src/components/PrimaryButton.tsx +213 -213
  148. package/src/components/SignInMatchAnimation.tsx +225 -225
  149. package/src/components/SignInStep.tsx +217 -217
  150. package/src/components/TrainingModal.tsx +1047 -1047
  151. package/src/components/UniversalOnboarding.tsx +2887 -2887
  152. package/src/components/VerificationStep.tsx +198 -198
  153. package/src/components/WelcomeScreen.tsx +490 -473
  154. package/src/components/icons/Basicproficon.tsx +30 -30
  155. package/src/components/icons/Basicprofile.tsx +17 -17
  156. package/src/components/icons/Checkbox.tsx +17 -17
  157. package/src/components/icons/Checkmark.tsx +24 -24
  158. package/src/components/icons/Contentanalysis.tsx +17 -17
  159. package/src/components/icons/Contenticon.tsx +30 -30
  160. package/src/components/icons/EnochE.tsx +39 -39
  161. package/src/components/icons/Personalityicon.tsx +22 -22
  162. package/src/components/icons/Personalityprofile.tsx +17 -17
  163. package/src/components/icons/Personalitytraits.tsx +17 -17
  164. package/src/components/icons/Userpreferences.tsx +17 -17
  165. package/src/components/icons/index.ts +12 -12
  166. package/src/components/onboarding/OAuthWebView.tsx +232 -232
  167. package/src/config/api.ts +25 -25
  168. package/src/context/AuthContext.tsx +393 -393
  169. package/src/hooks/useConnectedAccounts.ts +138 -138
  170. package/src/hooks/useConnections.ts +161 -161
  171. package/src/hooks/useCredentials.ts +174 -174
  172. package/src/hooks/useUserConnections.ts +165 -165
  173. package/src/index.js +14 -0
  174. package/src/index.ts +99 -96
  175. package/src/services/apiClient.ts +336 -336
  176. package/src/services/apiKeyService.ts +919 -919
  177. package/src/services/authService.ts +1008 -1008
  178. package/src/services/biometricPinService.ts +192 -192
  179. package/src/services/connectedAccountsService.ts +289 -289
  180. package/src/services/googleAuthService.ts +279 -279
  181. package/src/services/imageCompressionService.ts +302 -302
  182. package/src/services/jwtStorageService.ts +256 -256
  183. package/src/services/mobileTrainingService.ts +203 -203
  184. package/src/services/pinEncryptionService.ts +75 -75
  185. package/src/services/pinStorageUtils.ts +96 -96
  186. package/src/services/platformAuthService.ts +1346 -1346
  187. package/src/services/storageService.ts +451 -451
  188. package/src/services/trainingApiHelpers.ts +66 -66
  189. package/src/services/userConnectionsService.ts +556 -556
  190. package/src/services/youtubeMigrationService.ts +453 -453
  191. package/src/theme/index.ts +239 -239
  192. package/src/types/ambient.d.ts +28 -28
  193. package/src/types/index.ts +265 -265
  194. package/src/types/node-fix.d.ts +18 -18
  195. package/src/types/node-override.d.ts +23 -23
  196. package/src/types/opacity.d.ts +15 -15
  197. package/src/types/types.d.ts +17 -17
  198. package/src/utils/Portal.tsx +82 -82
  199. package/src/utils/api.js +111 -111
  200. package/src/utils/auth.js +103 -103
  201. package/src/utils/crypto.js +59 -59
  202. package/src/utils/encryption.ts +68 -68
  203. package/src/utils/eventUtils.ts +302 -302
  204. package/src/utils/haptics.ts +58 -58
  205. package/src/utils/imagePreloader.ts +2 -2
  206. package/src/utils/programmaticFlow.ts +112 -112
  207. 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,100 @@
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
- OnairosProps,
11
- DataTier,
12
- OnairosConfig,
13
- TestModeOptions,
14
- UniversalOnboardingProps,
15
- ConnectionStatus,
16
- PlatformConfig,
17
- } from './types';
18
-
19
- // Export OnairosSignInButtonProps from component
20
- export type { OnairosSignInButtonProps } from './components/OnairosSignInButton';
21
-
22
- // Core Components - Redesigned UI
23
- export { OnairosSignInButton } from './components/OnairosSignInButton';
24
- export { Onairos } from './components/Onairos';
25
- export { UniversalOnboarding } from './components/UniversalOnboarding';
26
-
27
- // New UI Components - Complete Welcome Flow
28
- export { default as WelcomeScreen } from './components/WelcomeScreen';
29
- export { PrimaryButton } from './components/PrimaryButton';
30
- export { ModalSheet } from './components/ModalSheet';
31
- export { ModalHeader } from './components/ModalHeader';
32
- export { BrandMark } from './components/BrandMark';
33
- export { HeadingGroup } from './components/HeadingGroup';
34
- export { BodyText } from './components/BodyText';
35
- export { SignInStep } from './components/SignInStep';
36
- export { VerificationStep } from './components/VerificationStep';
37
- export { default as PlatformConnectorsStep } from './components/PlatformConnectorsStep';
38
- export { PersonalizationConsentScreen } from './components/PersonalizationConsentScreen';
39
- export { PinCreationScreen } from './components/PinCreationScreen';
40
-
41
- // Enhanced Hooks - Temporarily commented out for build
42
- // export { useConnections } from './hooks/useConnections';
43
- // export { useUserConnections } from './hooks/useUserConnections';
44
- // export { useConnectedAccounts } from './hooks/useConnectedAccounts';
45
- // export { useAuth } from './context/AuthContext';
46
-
47
- // Temporarily commented out components with missing dependencies
48
- export { default as PersonaImage } from './components/PersonaImage';
49
- // export { default as PlatformToggle } from './components/PlatformToggle';
50
- // export { default as PersonaLoadingScreen } from './components/PersonaLoadingScreen';
51
-
52
- // SDK Initialization & Services
53
- export {
54
- initializeApiKey,
55
- ADMIN_API_KEY,
56
- extractUsernameFromJWT,
57
- extractUserDataFromJWT,
58
- decodeJWTPayload,
59
- } from './services/apiKeyService';
60
-
61
- // Authentication & Enhanced Services - Temporarily limited for build
62
- export {
63
- getOnairosUsername,
64
- } from './services/authService';
65
-
66
- export {
67
- initiateOAuth,
68
- initiateNativeAuth,
69
- hasNativeSDK,
70
- isOAuthCallback,
71
- } from './services/platformAuthService';
72
-
73
- export {
74
- updateGoogleClientIds,
75
- } from './services/googleAuthService';
76
-
77
- // Enhanced API Client
78
- export { ApiClient } from './services/apiClient';
79
-
80
- // Programmatic Function (for custom buttons) - Temporarily commented out
81
- // export { executeOnairosFlow } from './utils/programmaticFlow';
82
-
83
- // Context Provider - Temporarily commented out for build
84
- // export { AuthProvider } from './context/AuthContext';
85
-
86
- // Default export for convenience
87
- import { OnairosSignInButton } from './components/OnairosSignInButton';
88
- import { Onairos } from './components/Onairos';
89
- import { UniversalOnboarding } from './components/UniversalOnboarding';
90
- import WelcomeScreen from './components/WelcomeScreen';
91
-
92
- export default {
93
- OnairosSignInButton,
94
- Onairos,
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
+ export type { OnairosSignInButtonProps } from './components/OnairosSignInButton';
21
+
22
+ // Core Components - Redesigned UI
23
+ export { OnairosButton } from './components/OnairosButton';
24
+ export { OnairosSignInButton } from './components/OnairosSignInButton';
25
+ export { Onairos } from './components/Onairos';
26
+ export { UniversalOnboarding } from './components/UniversalOnboarding';
27
+
28
+ // New UI Components - Complete Welcome Flow
29
+ export { default as WelcomeScreen } from './components/WelcomeScreen';
30
+ export { PrimaryButton } from './components/PrimaryButton';
31
+ export { ModalSheet } from './components/ModalSheet';
32
+ export { ModalHeader } from './components/ModalHeader';
33
+ export { BrandMark } from './components/BrandMark';
34
+ export { HeadingGroup } from './components/HeadingGroup';
35
+ export { BodyText } from './components/BodyText';
36
+ export { SignInStep } from './components/SignInStep';
37
+ export { VerificationStep } from './components/VerificationStep';
38
+ export { default as PlatformConnectorsStep } from './components/PlatformConnectorsStep';
39
+ export { PersonalizationConsentScreen } from './components/PersonalizationConsentScreen';
40
+ export { PinCreationScreen } from './components/PinCreationScreen';
41
+
42
+ // Enhanced Hooks - Temporarily commented out for build
43
+ // export { useConnections } from './hooks/useConnections';
44
+ // export { useUserConnections } from './hooks/useUserConnections';
45
+ // export { useConnectedAccounts } from './hooks/useConnectedAccounts';
46
+ // export { useAuth } from './context/AuthContext';
47
+
48
+ // Temporarily commented out components with missing dependencies
49
+ export { default as PersonaImage } from './components/PersonaImage';
50
+ // export { default as PlatformToggle } from './components/PlatformToggle';
51
+ // export { default as PersonaLoadingScreen } from './components/PersonaLoadingScreen';
52
+
53
+ // SDK Initialization & Services
54
+ export {
55
+ initializeApiKey,
56
+ ADMIN_API_KEY,
57
+ extractUsernameFromJWT,
58
+ extractUserDataFromJWT,
59
+ decodeJWTPayload,
60
+ } from './services/apiKeyService';
61
+
62
+ // Authentication & Enhanced Services - Temporarily limited for build
63
+ export {
64
+ getOnairosUsername,
65
+ } from './services/authService';
66
+
67
+ export {
68
+ initiateOAuth,
69
+ initiateNativeAuth,
70
+ hasNativeSDK,
71
+ isOAuthCallback,
72
+ } from './services/platformAuthService';
73
+
74
+ export {
75
+ updateGoogleClientIds,
76
+ } from './services/googleAuthService';
77
+
78
+ // Enhanced API Client
79
+ export { ApiClient } from './services/apiClient';
80
+
81
+ // Programmatic Function (for custom buttons) - Temporarily commented out
82
+ // export { executeOnairosFlow } from './utils/programmaticFlow';
83
+
84
+ // Context Provider - Temporarily commented out for build
85
+ // export { AuthProvider } from './context/AuthContext';
86
+
87
+ // Default export for convenience
88
+ import { OnairosButton } from './components/OnairosButton';
89
+ import { OnairosSignInButton } from './components/OnairosSignInButton';
90
+ import { Onairos } from './components/Onairos';
91
+ import { UniversalOnboarding } from './components/UniversalOnboarding';
92
+ import WelcomeScreen from './components/WelcomeScreen';
93
+
94
+ export default {
95
+ OnairosButton,
96
+ OnairosSignInButton,
97
+ Onairos,
98
+ UniversalOnboarding,
99
+ WelcomeScreen,
97
100
  };