@onairos/react-native 3.1.15 → 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.
Files changed (191) 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/OnairosSignInButton.js +32 -74
  16. package/lib/commonjs/components/OnairosSignInButton.js.map +1 -1
  17. package/lib/commonjs/components/UniversalOnboarding.js +4 -4
  18. package/lib/commonjs/config/api.js +2 -2
  19. package/lib/commonjs/hooks/useConnections.js +6 -6
  20. package/lib/commonjs/hooks/useUserConnections.js +10 -10
  21. package/lib/commonjs/index.js +5 -12
  22. package/lib/commonjs/index.js.map +1 -1
  23. package/lib/commonjs/services/apiClient.js +35 -35
  24. package/lib/commonjs/services/apiKeyService.js +99 -99
  25. package/lib/commonjs/services/authService.js +82 -82
  26. package/lib/commonjs/services/biometricPinService.js +10 -10
  27. package/lib/commonjs/services/connectedAccountsService.js +32 -32
  28. package/lib/commonjs/services/googleAuthService.js +15 -15
  29. package/lib/commonjs/services/imageCompressionService.js +15 -15
  30. package/lib/commonjs/services/jwtStorageService.js +59 -59
  31. package/lib/commonjs/services/mobileTrainingService.js +14 -14
  32. package/lib/commonjs/services/pinEncryptionService.js +10 -10
  33. package/lib/commonjs/services/pinStorageUtils.js +15 -15
  34. package/lib/commonjs/services/platformAuthService.js +47 -47
  35. package/lib/commonjs/services/storageService.js +31 -31
  36. package/lib/commonjs/services/trainingApiHelpers.js +33 -33
  37. package/lib/commonjs/services/userConnectionsService.js +24 -24
  38. package/lib/commonjs/utils/Portal.js +4 -4
  39. package/lib/commonjs/utils/api.js +24 -24
  40. package/lib/commonjs/utils/auth.js +18 -18
  41. package/lib/commonjs/utils/crypto.js +13 -13
  42. package/lib/commonjs/utils/encryption.js +12 -12
  43. package/lib/commonjs/utils/eventUtils.js +52 -52
  44. package/lib/commonjs/utils/programmaticFlow.js +16 -16
  45. package/lib/commonjs/utils/retryHelper.js +27 -27
  46. package/lib/module/assets/images/Checkbox.svg +3 -3
  47. package/lib/module/assets/images/EnochE.svg +19 -19
  48. package/lib/module/assets/images/Personalityprofile.svg +3 -3
  49. package/lib/module/assets/images/Personalitytraits.svg +3 -3
  50. package/lib/module/assets/images/Userpreferences.svg +3 -3
  51. package/lib/module/assets/images/arrow.svg +20 -20
  52. package/lib/module/assets/images/basicproficon.svg +43 -43
  53. package/lib/module/assets/images/basicprofile.svg +3 -3
  54. package/lib/module/assets/images/checkmark.svg +4 -4
  55. package/lib/module/assets/images/contentanalysis.svg +3 -3
  56. package/lib/module/assets/images/contenticon.svg +23 -23
  57. package/lib/module/assets/images/personalityicon.svg +18 -18
  58. package/lib/module/assets/images/x-close.svg +3 -3
  59. package/lib/module/components/OnairosSignInButton.js +32 -74
  60. package/lib/module/components/OnairosSignInButton.js.map +1 -1
  61. package/lib/module/components/UniversalOnboarding.js +4 -4
  62. package/lib/module/config/api.js +2 -2
  63. package/lib/module/hooks/useConnections.js +6 -6
  64. package/lib/module/hooks/useUserConnections.js +10 -10
  65. package/lib/module/index.js +5 -6
  66. package/lib/module/index.js.map +1 -1
  67. package/lib/module/services/apiClient.js +35 -35
  68. package/lib/module/services/apiKeyService.js +99 -99
  69. package/lib/module/services/authService.js +82 -82
  70. package/lib/module/services/biometricPinService.js +10 -10
  71. package/lib/module/services/connectedAccountsService.js +32 -32
  72. package/lib/module/services/googleAuthService.js +15 -15
  73. package/lib/module/services/imageCompressionService.js +15 -15
  74. package/lib/module/services/jwtStorageService.js +59 -59
  75. package/lib/module/services/mobileTrainingService.js +14 -14
  76. package/lib/module/services/pinEncryptionService.js +10 -10
  77. package/lib/module/services/pinStorageUtils.js +15 -15
  78. package/lib/module/services/platformAuthService.js +47 -47
  79. package/lib/module/services/storageService.js +31 -31
  80. package/lib/module/services/trainingApiHelpers.js +33 -33
  81. package/lib/module/services/userConnectionsService.js +24 -24
  82. package/lib/module/utils/Portal.js +4 -4
  83. package/lib/module/utils/api.js +24 -24
  84. package/lib/module/utils/auth.js +18 -18
  85. package/lib/module/utils/crypto.js +13 -13
  86. package/lib/module/utils/encryption.js +12 -12
  87. package/lib/module/utils/eventUtils.js +52 -52
  88. package/lib/module/utils/programmaticFlow.js +16 -16
  89. package/lib/module/utils/retryHelper.js +27 -27
  90. package/lib/typescript/components/OnairosSignInButton.d.ts.map +1 -1
  91. package/lib/typescript/index.d.ts +0 -1
  92. package/lib/typescript/index.d.ts.map +1 -1
  93. package/package.json +163 -163
  94. package/src/api/index.ts +151 -151
  95. package/src/assets/images/Checkbox.svg +3 -3
  96. package/src/assets/images/EnochE.svg +19 -19
  97. package/src/assets/images/Personalityprofile.svg +3 -3
  98. package/src/assets/images/Personalitytraits.svg +3 -3
  99. package/src/assets/images/Userpreferences.svg +3 -3
  100. package/src/assets/images/arrow.svg +20 -20
  101. package/src/assets/images/basicproficon.svg +43 -43
  102. package/src/assets/images/basicprofile.svg +3 -3
  103. package/src/assets/images/checkmark.svg +4 -4
  104. package/src/assets/images/contentanalysis.svg +3 -3
  105. package/src/assets/images/contenticon.svg +23 -23
  106. package/src/assets/images/personalityicon.svg +18 -18
  107. package/src/assets/images/x-close.svg +3 -3
  108. package/src/components/BodyText.tsx +33 -33
  109. package/src/components/BrandMark.tsx +62 -62
  110. package/src/components/CodeInput.tsx +32 -32
  111. package/src/components/DataRequestScreen.tsx +355 -355
  112. package/src/components/EmailInput.tsx +31 -31
  113. package/src/components/EmailVerificationModal.tsx +363 -363
  114. package/src/components/ExistingUserDataConfirmation.tsx +506 -506
  115. package/src/components/GoogleButton.tsx +55 -55
  116. package/src/components/HeadingGroup.tsx +49 -49
  117. package/src/components/ModalHeader.tsx +125 -125
  118. package/src/components/ModalSheet.tsx +57 -57
  119. package/src/components/Onairos.tsx +422 -422
  120. package/src/components/OnairosButton.tsx +339 -339
  121. package/src/components/OnairosSignInButton.tsx +130 -166
  122. package/src/components/Overlay.tsx +506 -506
  123. package/src/components/PersonaImage.tsx +79 -79
  124. package/src/components/PersonaLoadingScreen.tsx +201 -201
  125. package/src/components/PersonalizationConsentScreen.tsx +410 -410
  126. package/src/components/PinCreationScreen.tsx +492 -492
  127. package/src/components/PinInput.tsx +555 -555
  128. package/src/components/PlatformConnectorsStep.tsx +891 -891
  129. package/src/components/PlatformList.tsx +144 -144
  130. package/src/components/PlatformToggle.tsx +226 -226
  131. package/src/components/PrimaryButton.tsx +213 -213
  132. package/src/components/SignInMatchAnimation.tsx +225 -225
  133. package/src/components/SignInStep.tsx +217 -217
  134. package/src/components/TrainingModal.tsx +1047 -1047
  135. package/src/components/UniversalOnboarding.tsx +2887 -2887
  136. package/src/components/VerificationStep.tsx +198 -198
  137. package/src/components/WelcomeScreen.tsx +473 -473
  138. package/src/components/icons/Basicproficon.tsx +30 -30
  139. package/src/components/icons/Basicprofile.tsx +17 -17
  140. package/src/components/icons/Checkbox.tsx +17 -17
  141. package/src/components/icons/Checkmark.tsx +24 -24
  142. package/src/components/icons/Contentanalysis.tsx +17 -17
  143. package/src/components/icons/Contenticon.tsx +30 -30
  144. package/src/components/icons/EnochE.tsx +39 -39
  145. package/src/components/icons/Personalityicon.tsx +22 -22
  146. package/src/components/icons/Personalityprofile.tsx +17 -17
  147. package/src/components/icons/Personalitytraits.tsx +17 -17
  148. package/src/components/icons/Userpreferences.tsx +17 -17
  149. package/src/components/icons/index.ts +12 -12
  150. package/src/components/onboarding/OAuthWebView.tsx +232 -232
  151. package/src/config/api.ts +25 -25
  152. package/src/context/AuthContext.tsx +393 -393
  153. package/src/hooks/useConnectedAccounts.ts +138 -138
  154. package/src/hooks/useConnections.ts +161 -161
  155. package/src/hooks/useCredentials.ts +174 -174
  156. package/src/hooks/useUserConnections.ts +165 -165
  157. package/src/index.js +14 -14
  158. package/src/index.ts +94 -95
  159. package/src/services/apiClient.ts +336 -336
  160. package/src/services/apiKeyService.ts +919 -919
  161. package/src/services/authService.ts +1008 -1008
  162. package/src/services/biometricPinService.ts +192 -192
  163. package/src/services/connectedAccountsService.ts +289 -289
  164. package/src/services/googleAuthService.ts +279 -279
  165. package/src/services/imageCompressionService.ts +302 -302
  166. package/src/services/jwtStorageService.ts +256 -256
  167. package/src/services/mobileTrainingService.ts +203 -203
  168. package/src/services/pinEncryptionService.ts +75 -75
  169. package/src/services/pinStorageUtils.ts +96 -96
  170. package/src/services/platformAuthService.ts +1346 -1346
  171. package/src/services/storageService.ts +451 -451
  172. package/src/services/trainingApiHelpers.ts +66 -66
  173. package/src/services/userConnectionsService.ts +556 -556
  174. package/src/services/youtubeMigrationService.ts +453 -453
  175. package/src/theme/index.ts +239 -239
  176. package/src/types/ambient.d.ts +28 -28
  177. package/src/types/index.ts +265 -265
  178. package/src/types/node-fix.d.ts +18 -18
  179. package/src/types/node-override.d.ts +23 -23
  180. package/src/types/opacity.d.ts +15 -15
  181. package/src/types/types.d.ts +17 -17
  182. package/src/utils/Portal.tsx +82 -82
  183. package/src/utils/api.js +111 -111
  184. package/src/utils/auth.js +103 -103
  185. package/src/utils/crypto.js +59 -59
  186. package/src/utils/encryption.ts +68 -68
  187. package/src/utils/eventUtils.ts +302 -302
  188. package/src/utils/haptics.ts +58 -58
  189. package/src/utils/imagePreloader.ts +2 -2
  190. package/src/utils/programmaticFlow.ts +112 -112
  191. package/src/utils/retryHelper.ts +274 -274
@@ -4,8 +4,8 @@ import { Platform } from 'react-native';
4
4
  // Service key for PIN storage
5
5
  const PIN_SERVICE_KEY = 'OnairosEventsPIN';
6
6
  const PIN_USERNAME = 'user_pin';
7
- /**
8
- * Check if biometric authentication is available on the device
7
+ /**
8
+ * Check if biometric authentication is available on the device
9
9
  */
10
10
  export const isBiometricAvailable = async () => {
11
11
  try {
@@ -20,8 +20,8 @@ export const isBiometricAvailable = async () => {
20
20
  }
21
21
  };
22
22
 
23
- /**
24
- * Store PIN with biometric authentication
23
+ /**
24
+ * Store PIN with biometric authentication
25
25
  */
26
26
  export const storePinWithBiometric = async pin => {
27
27
  try {
@@ -89,8 +89,8 @@ export const storePinWithBiometric = async pin => {
89
89
  }
90
90
  };
91
91
 
92
- /**
93
- * Retrieve PIN with biometric authentication
92
+ /**
93
+ * Retrieve PIN with biometric authentication
94
94
  */
95
95
  export const retrievePinWithBiometric = async () => {
96
96
  try {
@@ -121,8 +121,8 @@ export const retrievePinWithBiometric = async () => {
121
121
  }
122
122
  };
123
123
 
124
- /**
125
- * Check if PIN is stored in secure storage
124
+ /**
125
+ * Check if PIN is stored in secure storage
126
126
  */
127
127
  export const isPinStored = async () => {
128
128
  try {
@@ -134,8 +134,8 @@ export const isPinStored = async () => {
134
134
  }
135
135
  };
136
136
 
137
- /**
138
- * Remove PIN from secure storage
137
+ /**
138
+ * Remove PIN from secure storage
139
139
  */
140
140
  export const removePinFromStorage = async () => {
141
141
  try {
@@ -6,11 +6,11 @@ const API_BASE_URL = API_CONFIG.BASE_URL;
6
6
 
7
7
  // Interface for API response
8
8
 
9
- /**
10
- * NEW UNIFIED LOOKUP - Get connected accounts using the simplified lookup endpoint
11
- * This is the preferred method that makes only ONE request to the backend
12
- * @param userIdentifier - Can be email, username, userId, or any user identifier
13
- * @returns Promise<ConnectedAccount[]>
9
+ /**
10
+ * NEW UNIFIED LOOKUP - Get connected accounts using the simplified lookup endpoint
11
+ * This is the preferred method that makes only ONE request to the backend
12
+ * @param userIdentifier - Can be email, username, userId, or any user identifier
13
+ * @returns Promise<ConnectedAccount[]>
14
14
  */
15
15
  export const getConnectedAccountsLookup = async userIdentifier => {
16
16
  try {
@@ -42,13 +42,13 @@ export const getConnectedAccountsLookup = async userIdentifier => {
42
42
  }
43
43
  };
44
44
 
45
- /**
46
- * SMART CONNECTED ACCOUNTS FETCHER - Uses new API with old API fallback
47
- * This function tries the new unified lookup first, then falls back to old methods if needed
48
- * @param userEmail - User's email (primary identifier)
49
- * @param userId - User's ID (fallback)
50
- * @param username - User's username (fallback)
51
- * @returns Promise<ConnectedAccount[]>
45
+ /**
46
+ * SMART CONNECTED ACCOUNTS FETCHER - Uses new API with old API fallback
47
+ * This function tries the new unified lookup first, then falls back to old methods if needed
48
+ * @param userEmail - User's email (primary identifier)
49
+ * @param userId - User's ID (fallback)
50
+ * @param username - User's username (fallback)
51
+ * @returns Promise<ConnectedAccount[]>
52
52
  */
53
53
  export const getConnectedAccountsSmart = async (userEmail, userId, username) => {
54
54
  console.log('🧠 [SMART API] Starting smart connected accounts fetch...');
@@ -101,10 +101,10 @@ export const getConnectedAccountsSmart = async (userEmail, userId, username) =>
101
101
  // These will be used as fallbacks if the new unified lookup fails
102
102
  // =============================================================================
103
103
 
104
- /**
105
- * Get connected accounts by username
106
- * @param username - Username to fetch connected accounts for
107
- * @returns Promise<ConnectedAccount[]>
104
+ /**
105
+ * Get connected accounts by username
106
+ * @param username - Username to fetch connected accounts for
107
+ * @returns Promise<ConnectedAccount[]>
108
108
  */
109
109
  export const getConnectedAccountsByUsername = async username => {
110
110
  try {
@@ -129,10 +129,10 @@ export const getConnectedAccountsByUsername = async username => {
129
129
  }
130
130
  };
131
131
 
132
- /**
133
- * Get connected accounts by email
134
- * @param email - Email to fetch connected accounts for
135
- * @returns Promise<ConnectedAccount[]>
132
+ /**
133
+ * Get connected accounts by email
134
+ * @param email - Email to fetch connected accounts for
135
+ * @returns Promise<ConnectedAccount[]>
136
136
  */
137
137
  export const getConnectedAccountsByEmail = async email => {
138
138
  try {
@@ -157,10 +157,10 @@ export const getConnectedAccountsByEmail = async email => {
157
157
  }
158
158
  };
159
159
 
160
- /**
161
- * Get connected accounts by user ID
162
- * @param userId - User ID to fetch connected accounts for
163
- * @returns Promise<ConnectedAccount[]>
160
+ /**
161
+ * Get connected accounts by user ID
162
+ * @param userId - User ID to fetch connected accounts for
163
+ * @returns Promise<ConnectedAccount[]>
164
164
  */
165
165
  export const getConnectedAccountsByUserId = async userId => {
166
166
  try {
@@ -185,10 +185,10 @@ export const getConnectedAccountsByUserId = async userId => {
185
185
  }
186
186
  };
187
187
 
188
- /**
189
- * Get platform icon based on platform name
190
- * @param platform - Platform name (case insensitive)
191
- * @returns Image source for the platform icon
188
+ /**
189
+ * Get platform icon based on platform name
190
+ * @param platform - Platform name (case insensitive)
191
+ * @returns Image source for the platform icon
192
192
  */
193
193
  export const getPlatformIcon = platform => {
194
194
  const platformLower = platform.toLowerCase();
@@ -219,10 +219,10 @@ export const getPlatformIcon = platform => {
219
219
  }
220
220
  };
221
221
 
222
- /**
223
- * Get platform color based on platform name
224
- * @param platform - Platform name (case insensitive)
225
- * @returns Hex color code for the platform
222
+ /**
223
+ * Get platform color based on platform name
224
+ * @param platform - Platform name (case insensitive)
225
+ * @returns Hex color code for the platform
226
226
  */
227
227
  export const getPlatformColor = platform => {
228
228
  const platformLower = platform.toLowerCase();
@@ -1,6 +1,6 @@
1
- /**
2
- * Google Authentication Service
3
- * Handles Google Sign-In for user authentication and account creation
1
+ /**
2
+ * Google Authentication Service
3
+ * Handles Google Sign-In for user authentication and account creation
4
4
  */
5
5
 
6
6
  import { GoogleSignin, statusCodes } from '@react-native-google-signin/google-signin';
@@ -10,8 +10,8 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
10
10
  let WEB_CLIENT_ID = '1030678346906-lovkuds2ouqmoc8eu5qpo98spa6edv4o.apps.googleusercontent.com';
11
11
  let IOS_CLIENT_ID = '1030678346906-lovkuds2ouqmoc8eu5qpo98spa6edv4o.apps.googleusercontent.com';
12
12
 
13
- /**
14
- * Update Google OAuth client IDs for custom configurations
13
+ /**
14
+ * Update Google OAuth client IDs for custom configurations
15
15
  */
16
16
  export const updateGoogleClientIds = config => {
17
17
  if (config.webClientId) {
@@ -26,8 +26,8 @@ export const updateGoogleClientIds = config => {
26
26
  });
27
27
  };
28
28
 
29
- /**
30
- * Initialize Google Sign-In for user authentication
29
+ /**
30
+ * Initialize Google Sign-In for user authentication
31
31
  */
32
32
  const initializeGoogleAuth = () => {
33
33
  GoogleSignin.configure({
@@ -44,8 +44,8 @@ const initializeGoogleAuth = () => {
44
44
  });
45
45
  };
46
46
 
47
- /**
48
- * Sign in with Google and create/authenticate user account
47
+ /**
48
+ * Sign in with Google and create/authenticate user account
49
49
  */
50
50
  export const signInWithGoogle = async () => {
51
51
  try {
@@ -148,8 +148,8 @@ export const signInWithGoogle = async () => {
148
148
  }
149
149
  };
150
150
 
151
- /**
152
- * Create or authenticate user account on backend
151
+ /**
152
+ * Create or authenticate user account on backend
153
153
  */
154
154
  const createUserAccount = async userData => {
155
155
  try {
@@ -218,8 +218,8 @@ const createUserAccount = async userData => {
218
218
  }
219
219
  };
220
220
 
221
- /**
222
- * Check if user is already signed in with Google
221
+ /**
222
+ * Check if user is already signed in with Google
223
223
  */
224
224
  export const isGoogleSignedIn = async () => {
225
225
  try {
@@ -242,8 +242,8 @@ export const isGoogleSignedIn = async () => {
242
242
  }
243
243
  };
244
244
 
245
- /**
246
- * Sign out from Google
245
+ /**
246
+ * Sign out from Google
247
247
  */
248
248
  export const signOutFromGoogle = async () => {
249
249
  try {
@@ -1,12 +1,12 @@
1
1
  import ImageResizer from '@bam.tech/react-native-image-resizer';
2
2
 
3
- /**
4
- * Comprehensive image compression service for React Native
5
- * Supports iterative compression to meet specific size targets
3
+ /**
4
+ * Comprehensive image compression service for React Native
5
+ * Supports iterative compression to meet specific size targets
6
6
  */
7
7
 
8
- /**
9
- * Get file size from URI (React Native compatible)
8
+ /**
9
+ * Get file size from URI (React Native compatible)
10
10
  */
11
11
  const getFileSizeFromUri = async uri => {
12
12
  try {
@@ -19,8 +19,8 @@ const getFileSizeFromUri = async uri => {
19
19
  }
20
20
  };
21
21
 
22
- /**
23
- * Convert image to base64 string
22
+ /**
23
+ * Convert image to base64 string
24
24
  */
25
25
  const imageToBase64 = async uri => {
26
26
  try {
@@ -47,8 +47,8 @@ const imageToBase64 = async uri => {
47
47
  }
48
48
  };
49
49
 
50
- /**
51
- * Compress image with iterative quality reduction to meet size target
50
+ /**
51
+ * Compress image with iterative quality reduction to meet size target
52
52
  */
53
53
  export const compressImageToTarget = async (imageUri, options = {}) => {
54
54
  const {
@@ -210,8 +210,8 @@ export const compressImageToTarget = async (imageUri, options = {}) => {
210
210
  }
211
211
  };
212
212
 
213
- /**
214
- * Quick compression for profile pictures (300KB target)
213
+ /**
214
+ * Quick compression for profile pictures (300KB target)
215
215
  */
216
216
  export const compressProfilePicture = async imageUri => {
217
217
  return compressImageToTarget(imageUri, {
@@ -223,8 +223,8 @@ export const compressProfilePicture = async imageUri => {
223
223
  });
224
224
  };
225
225
 
226
- /**
227
- * Compress image for upload with custom settings
226
+ /**
227
+ * Compress image for upload with custom settings
228
228
  */
229
229
  export const compressForUpload = async (imageUri, maxSizeKB = 300) => {
230
230
  return compressImageToTarget(imageUri, {
@@ -236,8 +236,8 @@ export const compressForUpload = async (imageUri, maxSizeKB = 300) => {
236
236
  });
237
237
  };
238
238
 
239
- /**
240
- * Legacy function for backward compatibility
239
+ /**
240
+ * Legacy function for backward compatibility
241
241
  */
242
242
  export const convertImageToOptimizedBase64 = async (imageUri, quality = 0.8) => {
243
243
  const result = await compressImageToTarget(imageUri, {
@@ -1,12 +1,12 @@
1
1
  import AsyncStorage from '@react-native-async-storage/async-storage';
2
- /**
3
- * JWT Token Storage Service - CORRECTED APPROACH
4
- * Manages 3 DISTINCT JWT token types for different route families
5
- *
6
- * TOKEN TYPES:
7
- * 1. Enoch JWT (enoch_token) - For /enoch/*, /api/auth/*, /mobile-training/enoch
8
- * 2. Onairos JWT (onairos_jwt_token) - For /youtube/*, /gmail/*, social connections
9
- * 3. Auth Token (auth_token) - For context-specific auth flows
2
+ /**
3
+ * JWT Token Storage Service - CORRECTED APPROACH
4
+ * Manages 3 DISTINCT JWT token types for different route families
5
+ *
6
+ * TOKEN TYPES:
7
+ * 1. Enoch JWT (enoch_token) - For /enoch/*, /api/auth/*, /mobile-training/enoch
8
+ * 2. Onairos JWT (onairos_jwt_token) - For /youtube/*, /gmail/*, social connections
9
+ * 3. Auth Token (auth_token) - For context-specific auth flows
10
10
  */
11
11
 
12
12
  export let TokenType = /*#__PURE__*/function (TokenType) {
@@ -16,9 +16,9 @@ export let TokenType = /*#__PURE__*/function (TokenType) {
16
16
  return TokenType;
17
17
  }({});
18
18
 
19
- /**
20
- * Route-based token mapping
21
- * Determines which token type to use for which routes
19
+ /**
20
+ * Route-based token mapping
21
+ * Determines which token type to use for which routes
22
22
  */
23
23
  export const getTokenTypeForRoute = route => {
24
24
  const cleanRoute = route.toLowerCase();
@@ -37,11 +37,11 @@ export const getTokenTypeForRoute = route => {
37
37
  return TokenType.AUTH;
38
38
  };
39
39
 
40
- /**
41
- * Store JWT token of specific type
42
- * @param tokenType - Type of token to store
43
- * @param token - JWT token to store
44
- * @returns Promise<boolean> - Success status
40
+ /**
41
+ * Store JWT token of specific type
42
+ * @param tokenType - Type of token to store
43
+ * @param token - JWT token to store
44
+ * @returns Promise<boolean> - Success status
45
45
  */
46
46
  export const storeJWT = async (tokenType, token) => {
47
47
  try {
@@ -65,10 +65,10 @@ export const storeJWT = async (tokenType, token) => {
65
65
  }
66
66
  };
67
67
 
68
- /**
69
- * Retrieve JWT token of specific type
70
- * @param tokenType - Type of token to retrieve
71
- * @returns Promise<string | null> - JWT token or null if not found
68
+ /**
69
+ * Retrieve JWT token of specific type
70
+ * @param tokenType - Type of token to retrieve
71
+ * @returns Promise<string | null> - JWT token or null if not found
72
72
  */
73
73
  export const getJWT = async tokenType => {
74
74
  try {
@@ -92,10 +92,10 @@ export const getJWT = async tokenType => {
92
92
  }
93
93
  };
94
94
 
95
- /**
96
- * Get JWT token for specific route
97
- * @param route - API route to get token for
98
- * @returns Promise<string | null> - Appropriate JWT token or null
95
+ /**
96
+ * Get JWT token for specific route
97
+ * @param route - API route to get token for
98
+ * @returns Promise<string | null> - Appropriate JWT token or null
99
99
  */
100
100
  export const getJWTForRoute = async route => {
101
101
  const tokenType = getTokenTypeForRoute(route);
@@ -108,10 +108,10 @@ export const getJWTForRoute = async route => {
108
108
  return token;
109
109
  };
110
110
 
111
- /**
112
- * Clear JWT token of specific type
113
- * @param tokenType - Type of token to clear
114
- * @returns Promise<boolean> - Success status
111
+ /**
112
+ * Clear JWT token of specific type
113
+ * @param tokenType - Type of token to clear
114
+ * @returns Promise<boolean> - Success status
115
115
  */
116
116
  export const clearJWT = async tokenType => {
117
117
  try {
@@ -124,9 +124,9 @@ export const clearJWT = async tokenType => {
124
124
  }
125
125
  };
126
126
 
127
- /**
128
- * Clear all JWT tokens
129
- * @returns Promise<boolean> - Success status
127
+ /**
128
+ * Clear all JWT tokens
129
+ * @returns Promise<boolean> - Success status
130
130
  */
131
131
  export const clearAllJWT = async () => {
132
132
  try {
@@ -139,11 +139,11 @@ export const clearAllJWT = async () => {
139
139
  }
140
140
  };
141
141
 
142
- /**
143
- * Replace JWT token after verification - route-aware
144
- * @param tokenType - Type of token being replaced
145
- * @param newToken - New JWT token from verification response
146
- * @returns Promise<boolean> - Success status
142
+ /**
143
+ * Replace JWT token after verification - route-aware
144
+ * @param tokenType - Type of token being replaced
145
+ * @param newToken - New JWT token from verification response
146
+ * @returns Promise<boolean> - Success status
147
147
  */
148
148
  export const replaceJWTAfterVerification = async (tokenType, newToken) => {
149
149
  try {
@@ -166,37 +166,37 @@ export const replaceJWTAfterVerification = async (tokenType, newToken) => {
166
166
  }
167
167
  };
168
168
 
169
- /**
170
- * Store Enoch JWT token (from email verification)
171
- * @param token - Enoch JWT token
172
- * @returns Promise<boolean> - Success status
169
+ /**
170
+ * Store Enoch JWT token (from email verification)
171
+ * @param token - Enoch JWT token
172
+ * @returns Promise<boolean> - Success status
173
173
  */
174
174
  export const storeEnochJWT = async token => {
175
175
  return await storeJWT(TokenType.ENOCH, token);
176
176
  };
177
177
 
178
- /**
179
- * Store Onairos JWT token (from sign-in/registration)
180
- * @param token - Onairos JWT token
181
- * @returns Promise<boolean> - Success status
178
+ /**
179
+ * Store Onairos JWT token (from sign-in/registration)
180
+ * @param token - Onairos JWT token
181
+ * @returns Promise<boolean> - Success status
182
182
  */
183
183
  export const storeOnairosJWT = async token => {
184
184
  return await storeJWT(TokenType.ONAIROS, token);
185
185
  };
186
186
 
187
- /**
188
- * Store Auth token (for context-specific flows)
189
- * @param token - Auth token
190
- * @returns Promise<boolean> - Success status
187
+ /**
188
+ * Store Auth token (for context-specific flows)
189
+ * @param token - Auth token
190
+ * @returns Promise<boolean> - Success status
191
191
  */
192
192
  export const storeAuthToken = async token => {
193
193
  return await storeJWT(TokenType.AUTH, token);
194
194
  };
195
195
 
196
- /**
197
- * Validate JWT format
198
- * @param token - Token to validate
199
- * @returns boolean - True if valid JWT format
196
+ /**
197
+ * Validate JWT format
198
+ * @param token - Token to validate
199
+ * @returns boolean - True if valid JWT format
200
200
  */
201
201
  const isValidJWTFormat = token => {
202
202
  if (!token || token.length < 20) return false;
@@ -215,19 +215,19 @@ const isValidJWTFormat = token => {
215
215
  return true;
216
216
  };
217
217
 
218
- /**
219
- * Check if JWT token of specific type exists and is valid
220
- * @param tokenType - Type of token to check
221
- * @returns Promise<boolean> - True if valid token exists
218
+ /**
219
+ * Check if JWT token of specific type exists and is valid
220
+ * @param tokenType - Type of token to check
221
+ * @returns Promise<boolean> - True if valid token exists
222
222
  */
223
223
  export const hasValidJWT = async tokenType => {
224
224
  const token = await getJWT(tokenType);
225
225
  return token !== null;
226
226
  };
227
227
 
228
- /**
229
- * Get all available tokens (for debugging)
230
- * @returns Promise<Record<TokenType, string | null>> - All tokens
228
+ /**
229
+ * Get all available tokens (for debugging)
230
+ * @returns Promise<Record<TokenType, string | null>> - All tokens
231
231
  */
232
232
  export const getAllTokens = async () => {
233
233
  return {
@@ -4,9 +4,9 @@ import { getAuthToken } from './authService';
4
4
 
5
5
  const API_BASE_URL = 'https://api2.onairos.uk';
6
6
 
7
- /**
8
- * Mobile Training API Service
9
- * Implements the updated training spec routes
7
+ /**
8
+ * Mobile Training API Service
9
+ * Implements the updated training spec routes
10
10
  */
11
11
 
12
12
  // Training Status Route
@@ -79,10 +79,10 @@ export const getHealthCheck = async () => {
79
79
  }
80
80
  };
81
81
 
82
- /**
83
- * Start Enoch Training - Simplified Version
84
- * Backend now handles all YouTube connection cases automatically (temporary mode, refresh tokens, etc.)
85
- * No frontend migration checks needed anymore
82
+ /**
83
+ * Start Enoch Training - Simplified Version
84
+ * Backend now handles all YouTube connection cases automatically (temporary mode, refresh tokens, etc.)
85
+ * No frontend migration checks needed anymore
86
86
  */
87
87
  export const startEnochTrainingWithYouTubeCheck = async trainingData => {
88
88
  try {
@@ -103,9 +103,9 @@ export const startEnochTrainingWithYouTubeCheck = async trainingData => {
103
103
  }
104
104
  };
105
105
 
106
- /**
107
- * Start Enoch Training
108
- * Updated to use the new /mobile-training/enoch endpoint with proper error handling
106
+ /**
107
+ * Start Enoch Training
108
+ * Updated to use the new /mobile-training/enoch endpoint with proper error handling
109
109
  */
110
110
  export const startEnochTraining = async trainingData => {
111
111
  try {
@@ -144,8 +144,8 @@ export const startEnochTraining = async trainingData => {
144
144
  }
145
145
  };
146
146
 
147
- /**
148
- * Helper function to check if training is in progress
147
+ /**
148
+ * Helper function to check if training is in progress
149
149
  */
150
150
  export const isTrainingInProgress = async username => {
151
151
  try {
@@ -157,8 +157,8 @@ export const isTrainingInProgress = async username => {
157
157
  }
158
158
  };
159
159
 
160
- /**
161
- * Helper function to get training features info
160
+ /**
161
+ * Helper function to get training features info
162
162
  */
163
163
  export const getTrainingFeatures = async () => {
164
164
  try {
@@ -1,15 +1,15 @@
1
1
  const CryptoJS = require('react-native-crypto-js');
2
2
  import { getTemporaryPin } from './pinStorageUtils';
3
3
 
4
- /**
5
- * Service for encrypting PIN data before sending to APIs
4
+ /**
5
+ * Service for encrypting PIN data before sending to APIs
6
6
  */
7
7
 
8
8
  // Encryption key - in production, this should come from a secure source
9
9
  const ENCRYPTION_KEY = 'onairos-pin-encryption-key-2024';
10
10
 
11
- /**
12
- * Encrypt PIN using AES encryption
11
+ /**
12
+ * Encrypt PIN using AES encryption
13
13
  */
14
14
  export const encryptPin = pin => {
15
15
  try {
@@ -22,8 +22,8 @@ export const encryptPin = pin => {
22
22
  }
23
23
  };
24
24
 
25
- /**
26
- * Decrypt PIN (for verification purposes)
25
+ /**
26
+ * Decrypt PIN (for verification purposes)
27
27
  */
28
28
  export const decryptPin = encryptedPin => {
29
29
  try {
@@ -37,8 +37,8 @@ export const decryptPin = encryptedPin => {
37
37
  }
38
38
  };
39
39
 
40
- /**
41
- * Get encrypted PIN for API transmission
40
+ /**
41
+ * Get encrypted PIN for API transmission
42
42
  */
43
43
  export const getEncryptedPinForAPI = async () => {
44
44
  try {
@@ -59,8 +59,8 @@ export const getEncryptedPinForAPI = async () => {
59
59
  }
60
60
  };
61
61
 
62
- /**
63
- * Hash PIN for verification (one-way hash)
62
+ /**
63
+ * Hash PIN for verification (one-way hash)
64
64
  */
65
65
  export const hashPin = pin => {
66
66
  try {