@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.
- 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/ModalSheet.js +8 -2
- package/lib/commonjs/components/ModalSheet.js.map +1 -1
- package/lib/commonjs/components/OnairosButton.js +290 -0
- package/lib/commonjs/components/OnairosButton.js.map +1 -0
- package/lib/commonjs/components/OnairosSignInButton.js +32 -8
- package/lib/commonjs/components/OnairosSignInButton.js.map +1 -1
- package/lib/commonjs/components/UniversalOnboarding.js +4 -4
- package/lib/commonjs/components/WelcomeScreen.js +29 -13
- package/lib/commonjs/components/WelcomeScreen.js.map +1 -1
- 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 +13 -6
- 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/ModalSheet.js +7 -2
- package/lib/module/components/ModalSheet.js.map +1 -1
- package/lib/module/components/OnairosButton.js +282 -0
- package/lib/module/components/OnairosButton.js.map +1 -0
- package/lib/module/components/OnairosSignInButton.js +32 -8
- package/lib/module/components/OnairosSignInButton.js.map +1 -1
- package/lib/module/components/UniversalOnboarding.js +4 -4
- package/lib/module/components/WelcomeScreen.js +25 -10
- package/lib/module/components/WelcomeScreen.js.map +1 -1
- 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 +11 -11
- 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/ModalSheet.d.ts.map +1 -1
- package/lib/typescript/components/OnairosButton.d.ts +37 -0
- package/lib/typescript/components/OnairosButton.d.ts.map +1 -0
- package/lib/typescript/components/OnairosSignInButton.d.ts.map +1 -1
- package/lib/typescript/components/WelcomeScreen.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +3 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +145 -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 +59 -57
- package/src/components/Onairos.tsx +422 -422
- package/src/components/OnairosButton.tsx +339 -0
- package/src/components/OnairosSignInButton.tsx +31 -9
- 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 +490 -473
- package/src/components/icons/Basicproficon.tsx +30 -30
- package/src/components/icons/Basicprofile.tsx +17 -17
- package/src/components/icons/Checkbox.tsx +17 -17
- package/src/components/icons/Checkmark.tsx +24 -24
- package/src/components/icons/Contentanalysis.tsx +17 -17
- package/src/components/icons/Contenticon.tsx +30 -30
- package/src/components/icons/EnochE.tsx +39 -39
- package/src/components/icons/Personalityicon.tsx +22 -22
- package/src/components/icons/Personalityprofile.tsx +17 -17
- package/src/components/icons/Personalitytraits.tsx +17 -17
- package/src/components/icons/Userpreferences.tsx +17 -17
- package/src/components/icons/index.ts +12 -12
- package/src/components/onboarding/OAuthWebView.tsx +232 -232
- package/src/config/api.ts +25 -25
- package/src/context/AuthContext.tsx +393 -393
- package/src/hooks/useConnectedAccounts.ts +138 -138
- package/src/hooks/useConnections.ts +161 -161
- package/src/hooks/useCredentials.ts +174 -174
- package/src/hooks/useUserConnections.ts +165 -165
- package/src/index.js +14 -0
- package/src/index.ts +99 -96
- package/src/services/apiClient.ts +336 -336
- package/src/services/apiKeyService.ts +919 -919
- package/src/services/authService.ts +1008 -1008
- package/src/services/biometricPinService.ts +192 -192
- package/src/services/connectedAccountsService.ts +289 -289
- package/src/services/googleAuthService.ts +279 -279
- package/src/services/imageCompressionService.ts +302 -302
- package/src/services/jwtStorageService.ts +256 -256
- package/src/services/mobileTrainingService.ts +203 -203
- package/src/services/pinEncryptionService.ts +75 -75
- package/src/services/pinStorageUtils.ts +96 -96
- package/src/services/platformAuthService.ts +1346 -1346
- package/src/services/storageService.ts +451 -451
- package/src/services/trainingApiHelpers.ts +66 -66
- package/src/services/userConnectionsService.ts +556 -556
- package/src/services/youtubeMigrationService.ts +453 -453
- package/src/theme/index.ts +239 -239
- package/src/types/ambient.d.ts +28 -28
- package/src/types/index.ts +265 -265
- package/src/types/node-fix.d.ts +18 -18
- package/src/types/node-override.d.ts +23 -23
- package/src/types/opacity.d.ts +15 -15
- package/src/types/types.d.ts +17 -17
- package/src/utils/Portal.tsx +82 -82
- package/src/utils/api.js +111 -111
- package/src/utils/auth.js +103 -103
- package/src/utils/crypto.js +59 -59
- package/src/utils/encryption.ts +68 -68
- package/src/utils/eventUtils.ts +302 -302
- package/src/utils/haptics.ts +58 -58
- package/src/utils/imagePreloader.ts +2 -2
- package/src/utils/programmaticFlow.ts +112 -112
- package/src/utils/retryHelper.ts +274 -274
|
@@ -1,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 {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { biometricPinService } from './biometricPinService';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Utility functions for PIN storage management
|
|
3
|
+
/**
|
|
4
|
+
* Utility functions for PIN storage management
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Get the stored PIN for training/authentication purposes
|
|
9
|
-
* This will prompt for biometric authentication
|
|
7
|
+
/**
|
|
8
|
+
* Get the stored PIN for training/authentication purposes
|
|
9
|
+
* This will prompt for biometric authentication
|
|
10
10
|
*/
|
|
11
11
|
export const getStoredPinForTraining = async () => {
|
|
12
12
|
try {
|
|
@@ -34,8 +34,8 @@ export const getStoredPinForTraining = async () => {
|
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
/**
|
|
38
|
-
* Check if user has a PIN stored securely
|
|
37
|
+
/**
|
|
38
|
+
* Check if user has a PIN stored securely
|
|
39
39
|
*/
|
|
40
40
|
export const hasStoredPin = async () => {
|
|
41
41
|
try {
|
|
@@ -46,8 +46,8 @@ export const hasStoredPin = async () => {
|
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
-
/**
|
|
50
|
-
* Remove stored PIN (for logout/reset purposes)
|
|
49
|
+
/**
|
|
50
|
+
* Remove stored PIN (for logout/reset purposes)
|
|
51
51
|
*/
|
|
52
52
|
export const clearStoredPin = async () => {
|
|
53
53
|
try {
|
|
@@ -59,9 +59,9 @@ export const clearStoredPin = async () => {
|
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
-
/**
|
|
63
|
-
* Get PIN for passing to training component
|
|
64
|
-
* This function can be called from the onboarding flow
|
|
62
|
+
/**
|
|
63
|
+
* Get PIN for passing to training component
|
|
64
|
+
* This function can be called from the onboarding flow
|
|
65
65
|
*/
|
|
66
66
|
export const getPinForTraining = async tempPin => {
|
|
67
67
|
// If a temporary PIN is provided (from the PIN input), use it
|
|
@@ -74,9 +74,9 @@ export const getPinForTraining = async tempPin => {
|
|
|
74
74
|
return await getStoredPinForTraining();
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
-
/**
|
|
78
|
-
* Store PIN temporarily in memory for training component
|
|
79
|
-
* This is used when PIN is entered but not yet stored biometrically
|
|
77
|
+
/**
|
|
78
|
+
* Store PIN temporarily in memory for training component
|
|
79
|
+
* This is used when PIN is entered but not yet stored biometrically
|
|
80
80
|
*/
|
|
81
81
|
let temporaryPin = null;
|
|
82
82
|
export const setTemporaryPin = pin => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Platform Authentication Service
|
|
3
|
-
* Handles OAuth flows for different platforms
|
|
1
|
+
/**
|
|
2
|
+
* Platform Authentication Service
|
|
3
|
+
* Handles OAuth flows for different platforms
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { GoogleSignin, statusCodes } from '@react-native-google-signin/google-signin';
|
|
@@ -86,16 +86,16 @@ const OAUTH_CONFIG = {
|
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
|
|
89
|
-
/**
|
|
90
|
-
* Check if the platform has a native SDK
|
|
89
|
+
/**
|
|
90
|
+
* Check if the platform has a native SDK
|
|
91
91
|
*/
|
|
92
92
|
export const hasNativeSDK = platform => {
|
|
93
93
|
var _OAUTH_CONFIG$platfor;
|
|
94
94
|
return ((_OAUTH_CONFIG$platfor = OAUTH_CONFIG[platform]) === null || _OAUTH_CONFIG$platfor === void 0 ? void 0 : _OAUTH_CONFIG$platfor.hasNativeSDK) || false;
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
-
/**
|
|
98
|
-
* Initiate OAuth flow for a platform
|
|
97
|
+
/**
|
|
98
|
+
* Initiate OAuth flow for a platform
|
|
99
99
|
*/
|
|
100
100
|
export const initiateOAuth = async (platform, username) => {
|
|
101
101
|
try {
|
|
@@ -153,9 +153,9 @@ export const initiateOAuth = async (platform, username) => {
|
|
|
153
153
|
}
|
|
154
154
|
};
|
|
155
155
|
|
|
156
|
-
/**
|
|
157
|
-
* Initialize Google Sign-In configuration with enhanced refresh token support
|
|
158
|
-
* Updated with CRITICAL parameters for refresh token generation
|
|
156
|
+
/**
|
|
157
|
+
* Initialize Google Sign-In configuration with enhanced refresh token support
|
|
158
|
+
* Updated with CRITICAL parameters for refresh token generation
|
|
159
159
|
*/
|
|
160
160
|
const initializeGoogleSignIn = () => {
|
|
161
161
|
GoogleSignin.configure({
|
|
@@ -178,9 +178,9 @@ const initializeGoogleSignIn = () => {
|
|
|
178
178
|
});
|
|
179
179
|
};
|
|
180
180
|
|
|
181
|
-
/**
|
|
182
|
-
* Force YouTube reconnection with consent screen to get refresh tokens
|
|
183
|
-
* This is the key function to fix YouTube token expiry issues
|
|
181
|
+
/**
|
|
182
|
+
* Force YouTube reconnection with consent screen to get refresh tokens
|
|
183
|
+
* This is the key function to fix YouTube token expiry issues
|
|
184
184
|
*/
|
|
185
185
|
export const forceYouTubeReconnectionWithConsent = async username => {
|
|
186
186
|
try {
|
|
@@ -465,8 +465,8 @@ export const forceYouTubeReconnectionWithConsent = async username => {
|
|
|
465
465
|
}
|
|
466
466
|
};
|
|
467
467
|
|
|
468
|
-
/**
|
|
469
|
-
* Alternative method: Force consent by revoking existing permissions
|
|
468
|
+
/**
|
|
469
|
+
* Alternative method: Force consent by revoking existing permissions
|
|
470
470
|
*/
|
|
471
471
|
export const forceYouTubeReconnectionWithRevoke = async username => {
|
|
472
472
|
try {
|
|
@@ -516,8 +516,8 @@ export const forceYouTubeReconnectionWithRevoke = async username => {
|
|
|
516
516
|
}
|
|
517
517
|
};
|
|
518
518
|
|
|
519
|
-
/**
|
|
520
|
-
* Fix YouTube connection for a specific user (like nicholase50)
|
|
519
|
+
/**
|
|
520
|
+
* Fix YouTube connection for a specific user (like nicholase50)
|
|
521
521
|
*/
|
|
522
522
|
export const fixUserYouTubeConnection = async username => {
|
|
523
523
|
console.log(`๐ง Fixing YouTube connection for user: ${username}`);
|
|
@@ -541,8 +541,8 @@ export const fixUserYouTubeConnection = async username => {
|
|
|
541
541
|
return false;
|
|
542
542
|
};
|
|
543
543
|
|
|
544
|
-
/**
|
|
545
|
-
* Get fresh tokens using refresh token
|
|
544
|
+
/**
|
|
545
|
+
* Get fresh tokens using refresh token
|
|
546
546
|
*/
|
|
547
547
|
const refreshGoogleTokens = async () => {
|
|
548
548
|
try {
|
|
@@ -582,8 +582,8 @@ const refreshGoogleTokens = async () => {
|
|
|
582
582
|
}
|
|
583
583
|
};
|
|
584
584
|
|
|
585
|
-
/**
|
|
586
|
-
* Debug YouTube tokens to verify refresh token availability
|
|
585
|
+
/**
|
|
586
|
+
* Debug YouTube tokens to verify refresh token availability
|
|
587
587
|
*/
|
|
588
588
|
const debugYouTubeTokens = async () => {
|
|
589
589
|
try {
|
|
@@ -609,8 +609,8 @@ const debugYouTubeTokens = async () => {
|
|
|
609
609
|
}
|
|
610
610
|
};
|
|
611
611
|
|
|
612
|
-
/**
|
|
613
|
-
* Force fresh YouTube reconnection with proper refresh token
|
|
612
|
+
/**
|
|
613
|
+
* Force fresh YouTube reconnection with proper refresh token
|
|
614
614
|
*/
|
|
615
615
|
export const reconnectYouTube = async username => {
|
|
616
616
|
try {
|
|
@@ -658,8 +658,8 @@ export const reconnectYouTube = async username => {
|
|
|
658
658
|
}
|
|
659
659
|
};
|
|
660
660
|
|
|
661
|
-
/**
|
|
662
|
-
* Initiate native authentication for platforms with SDKs
|
|
661
|
+
/**
|
|
662
|
+
* Initiate native authentication for platforms with SDKs
|
|
663
663
|
*/
|
|
664
664
|
export const initiateNativeAuth = async (platform, username) => {
|
|
665
665
|
if (platform === 'youtube') {
|
|
@@ -991,16 +991,16 @@ export const initiateNativeAuth = async (platform, username) => {
|
|
|
991
991
|
return false;
|
|
992
992
|
};
|
|
993
993
|
|
|
994
|
-
/**
|
|
995
|
-
* Check if a URL is an OAuth callback
|
|
994
|
+
/**
|
|
995
|
+
* Check if a URL is an OAuth callback
|
|
996
996
|
*/
|
|
997
997
|
export const isOAuthCallback = url => {
|
|
998
998
|
return url.includes('auth/callback') || url.includes('code=');
|
|
999
999
|
};
|
|
1000
1000
|
|
|
1001
|
-
/**
|
|
1002
|
-
* Exchange authorization code for access token
|
|
1003
|
-
* This would typically be done on a server, but we're simulating it here
|
|
1001
|
+
/**
|
|
1002
|
+
* Exchange authorization code for access token
|
|
1003
|
+
* This would typically be done on a server, but we're simulating it here
|
|
1004
1004
|
*/
|
|
1005
1005
|
export const exchangeCodeForToken = async (code, platform) => {
|
|
1006
1006
|
console.log(`Exchanging code for token for platform: ${platform}`);
|
|
@@ -1039,9 +1039,9 @@ export const exchangeCodeForToken = async (code, platform) => {
|
|
|
1039
1039
|
}
|
|
1040
1040
|
};
|
|
1041
1041
|
|
|
1042
|
-
/**
|
|
1043
|
-
* Refresh YouTube tokens when they expire
|
|
1044
|
-
* This should be called when the backend reports token expiry
|
|
1042
|
+
/**
|
|
1043
|
+
* Refresh YouTube tokens when they expire
|
|
1044
|
+
* This should be called when the backend reports token expiry
|
|
1045
1045
|
*/
|
|
1046
1046
|
export const refreshYouTubeTokens = async () => {
|
|
1047
1047
|
try {
|
|
@@ -1101,9 +1101,9 @@ export const refreshYouTubeTokens = async () => {
|
|
|
1101
1101
|
}
|
|
1102
1102
|
};
|
|
1103
1103
|
|
|
1104
|
-
/**
|
|
1105
|
-
* Trigger training restart after YouTube re-authentication
|
|
1106
|
-
* This signals the backend to restart training with the new refresh token
|
|
1104
|
+
/**
|
|
1105
|
+
* Trigger training restart after YouTube re-authentication
|
|
1106
|
+
* This signals the backend to restart training with the new refresh token
|
|
1107
1107
|
*/
|
|
1108
1108
|
const triggerTrainingRestart = async (username, authToken) => {
|
|
1109
1109
|
try {
|
|
@@ -1136,9 +1136,9 @@ const triggerTrainingRestart = async (username, authToken) => {
|
|
|
1136
1136
|
}
|
|
1137
1137
|
};
|
|
1138
1138
|
|
|
1139
|
-
/**
|
|
1140
|
-
* Test function to verify YouTube refresh token functionality
|
|
1141
|
-
* Call this in your app to test the YouTube connection
|
|
1139
|
+
/**
|
|
1140
|
+
* Test function to verify YouTube refresh token functionality
|
|
1141
|
+
* Call this in your app to test the YouTube connection
|
|
1142
1142
|
*/
|
|
1143
1143
|
export const testYouTubeRefreshToken = async username => {
|
|
1144
1144
|
console.log('๐งช Testing YouTube refresh token functionality...');
|
|
@@ -1165,8 +1165,8 @@ export const testYouTubeRefreshToken = async username => {
|
|
|
1165
1165
|
}
|
|
1166
1166
|
};
|
|
1167
1167
|
|
|
1168
|
-
/**
|
|
1169
|
-
* Request email verification code
|
|
1168
|
+
/**
|
|
1169
|
+
* Request email verification code
|
|
1170
1170
|
*/
|
|
1171
1171
|
export const requestEmailVerification = async (email, testMode = false) => {
|
|
1172
1172
|
try {
|
|
@@ -1201,8 +1201,8 @@ export const requestEmailVerification = async (email, testMode = false) => {
|
|
|
1201
1201
|
}
|
|
1202
1202
|
};
|
|
1203
1203
|
|
|
1204
|
-
/**
|
|
1205
|
-
* Verify email code
|
|
1204
|
+
/**
|
|
1205
|
+
* Verify email code
|
|
1206
1206
|
*/
|
|
1207
1207
|
export const verifyEmailCode = async (email, code, testMode = false) => {
|
|
1208
1208
|
try {
|
|
@@ -1240,8 +1240,8 @@ export const verifyEmailCode = async (email, code, testMode = false) => {
|
|
|
1240
1240
|
}
|
|
1241
1241
|
};
|
|
1242
1242
|
|
|
1243
|
-
/**
|
|
1244
|
-
* Check email verification status
|
|
1243
|
+
/**
|
|
1244
|
+
* Check email verification status
|
|
1245
1245
|
*/
|
|
1246
1246
|
export const checkEmailVerificationStatus = async (email, testMode = false) => {
|
|
1247
1247
|
try {
|
|
@@ -1269,8 +1269,8 @@ export const checkEmailVerificationStatus = async (email, testMode = false) => {
|
|
|
1269
1269
|
}
|
|
1270
1270
|
};
|
|
1271
1271
|
|
|
1272
|
-
/**
|
|
1273
|
-
* Initialize platform auth service
|
|
1272
|
+
/**
|
|
1273
|
+
* Initialize platform auth service
|
|
1274
1274
|
*/
|
|
1275
1275
|
export const initializePlatformAuthService = () => {
|
|
1276
1276
|
console.log('๐ง Platform auth service initialized');
|