@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.
- 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/OnairosSignInButton.js +32 -74
- 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 +5 -12
- 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/OnairosSignInButton.js +32 -74
- 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 +5 -6
- 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/OnairosSignInButton.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +0 -1
- 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 -339
- package/src/components/OnairosSignInButton.tsx +130 -166
- 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 -14
- package/src/index.ts +94 -95
- 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
|
@@ -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 {
|