@onairos/react-native 3.4.1 โ 3.6.0
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 +423 -374
- package/lib/commonjs/api/index.js +9 -145
- package/lib/commonjs/assets/animations/loaderani.json +1 -0
- package/lib/commonjs/assets/animations/persona-animation.json +1 -0
- package/lib/commonjs/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
- package/lib/commonjs/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
- package/lib/commonjs/assets/icons/Facebookicon.png +0 -0
- package/lib/commonjs/assets/icons/Gmail.png +0 -0
- package/lib/commonjs/assets/icons/Linkedinicon.png +0 -0
- package/lib/commonjs/assets/icons/Redditicon.png +0 -0
- package/lib/commonjs/assets/icons/YouTubeicon2.png +0 -0
- package/lib/commonjs/assets/icons/YouTubeicon3.png +0 -0
- package/lib/commonjs/assets/icons/chatgpt.png +0 -0
- package/lib/commonjs/assets/icons/claude.png +0 -0
- package/lib/commonjs/assets/icons/gemini.png +0 -0
- package/lib/commonjs/assets/icons/grok.png +0 -0
- package/lib/commonjs/assets/images/Checkbox.svg +3 -0
- package/lib/commonjs/assets/images/EnochE.svg +19 -0
- package/lib/commonjs/assets/images/Enochicon1.png +0 -0
- package/lib/commonjs/assets/images/Face_ID_logo.png +0 -0
- package/lib/commonjs/assets/images/Facebookicon.png +0 -0
- package/lib/commonjs/assets/images/Gmail.png +0 -0
- package/lib/commonjs/assets/images/Googlelogo.png +0 -0
- package/lib/commonjs/assets/images/Linkedinicon.png +0 -0
- package/lib/commonjs/assets/images/OnairosNewLogo.png +0 -0
- package/lib/commonjs/assets/images/Onairoslogo.png +0 -0
- package/lib/commonjs/assets/images/Personalityprofile.svg +3 -0
- package/lib/commonjs/assets/images/Personalitytraits.svg +3 -0
- package/lib/commonjs/assets/images/Redditicon.png +0 -0
- package/lib/commonjs/assets/images/Userpreferences.svg +3 -0
- package/lib/commonjs/assets/images/YouTubeicon3.png +0 -0
- package/lib/commonjs/assets/images/arrow.svg +20 -0
- package/lib/commonjs/assets/images/basicproficon.svg +43 -0
- package/lib/commonjs/assets/images/basicprofile.svg +3 -0
- package/lib/commonjs/assets/images/chatgpt.png +0 -0
- package/lib/commonjs/assets/images/checkmark.svg +4 -0
- package/lib/commonjs/assets/images/claude.png +0 -0
- package/lib/commonjs/assets/images/contentanalysis.svg +3 -0
- package/lib/commonjs/assets/images/contenticon.svg +23 -0
- package/lib/commonjs/assets/images/gemini.png +0 -0
- package/lib/commonjs/assets/images/grok.png +0 -0
- package/lib/commonjs/assets/images/persona1.png +0 -0
- package/lib/commonjs/assets/images/persona2.png +0 -0
- package/lib/commonjs/assets/images/persona3.png +0 -0
- package/lib/commonjs/assets/images/persona4.png +0 -0
- package/lib/commonjs/assets/images/persona5.png +0 -0
- package/lib/commonjs/assets/images/personalityicon.svg +18 -0
- package/lib/commonjs/assets/images/x-close.svg +3 -0
- package/lib/commonjs/components/BodyText.js +9 -0
- package/lib/commonjs/components/BrandMark.js +10 -0
- package/lib/commonjs/components/CodeInput.js +9 -0
- package/lib/commonjs/components/EmailInput.js +8 -0
- package/lib/commonjs/components/GoogleButton.js +9 -0
- package/lib/commonjs/components/HeadingGroup.js +9 -0
- package/lib/commonjs/components/LLMDataInputModal.js +14 -0
- package/lib/commonjs/components/ModalHeader.js +9 -0
- package/lib/commonjs/components/ModalSheet.js +9 -0
- package/lib/commonjs/components/Onairos.js +14 -374
- package/lib/commonjs/components/OnairosButton.js +13 -309
- package/lib/commonjs/components/OnairosSignInButton.js +12 -0
- package/lib/commonjs/components/Overlay.js +13 -483
- package/lib/commonjs/components/PersonaImage.js +10 -0
- package/lib/commonjs/components/PersonaLoadingScreen.js +12 -0
- package/lib/commonjs/components/PersonalizationConsentScreen.js +13 -0
- package/lib/commonjs/components/PinCreationScreen.js +12 -0
- package/lib/commonjs/components/PinInput.js +9 -302
- package/lib/commonjs/components/PlatformConnectorsStep.js +23 -0
- package/lib/commonjs/components/PlatformList.js +10 -137
- package/lib/commonjs/components/PlatformToggle.js +9 -0
- package/lib/commonjs/components/PrimaryButton.js +10 -0
- package/lib/commonjs/components/SignInMatchAnimation.js +9 -0
- package/lib/commonjs/components/SignInStep.js +12 -0
- package/lib/commonjs/components/UniversalOnboarding.js +30 -1702
- package/lib/commonjs/components/VerificationStep.js +11 -0
- package/lib/commonjs/components/WelcomeScreen.js +22 -0
- package/lib/commonjs/components/icons/Basicproficon.js +8 -0
- package/lib/commonjs/components/icons/Basicprofile.js +8 -0
- package/lib/commonjs/components/icons/Checkbox.js +8 -0
- package/lib/commonjs/components/icons/Checkmark.js +8 -0
- package/lib/commonjs/components/icons/Contentanalysis.js +8 -0
- package/lib/commonjs/components/icons/Contenticon.js +8 -0
- package/lib/commonjs/components/icons/EnochE.js +8 -0
- package/lib/commonjs/components/icons/Personalityicon.js +8 -0
- package/lib/commonjs/components/icons/Personalityprofile.js +8 -0
- package/lib/commonjs/components/icons/Personalitytraits.js +8 -0
- package/lib/commonjs/components/icons/Userpreferences.js +8 -0
- package/lib/commonjs/components/icons/index.js +17 -0
- package/lib/commonjs/components/onboarding/OAuthWebView.js +18 -827
- package/lib/commonjs/components/onboarding/OnboardingHeader.js +10 -74
- package/lib/commonjs/components/onboarding/PinInput.js +10 -283
- package/lib/commonjs/components/onboarding/PlatformConnector.js +11 -249
- package/lib/commonjs/config/api.js +7 -0
- package/lib/commonjs/constants/index.js +7 -83
- package/lib/commonjs/context/AuthContext.js +10 -0
- package/lib/commonjs/hooks/useConnectedAccounts.js +9 -0
- package/lib/commonjs/hooks/useConnections.js +8 -159
- package/lib/commonjs/hooks/useCredentials.js +10 -177
- package/lib/commonjs/hooks/useUserConnections.js +10 -0
- package/lib/commonjs/index.js +34 -106
- package/lib/commonjs/services/SDK_API_KEY_VALIDATION.md +421 -421
- package/lib/commonjs/services/apiClient.js +8 -0
- package/lib/commonjs/services/apiKeyService.js +9 -952
- package/lib/commonjs/services/authService.js +10 -0
- package/lib/commonjs/services/biometricPinService.js +8 -0
- package/lib/commonjs/services/chatGPTConversationExtractor.js +8 -0
- package/lib/commonjs/services/chatGPTConversationService.js +9 -0
- package/lib/commonjs/services/claudeConversationExtractor.js +8 -0
- package/lib/commonjs/services/claudeConversationService.js +9 -0
- package/lib/commonjs/services/connectedAccountsService.js +10 -0
- package/lib/commonjs/services/googleAuthService.js +11 -0
- package/lib/commonjs/services/hingeDataExtractor.js +8 -0
- package/lib/commonjs/services/hingeDataService.js +9 -0
- package/lib/commonjs/services/imageCompressionService.js +7 -0
- package/lib/commonjs/services/instagramDataExtractor.js +8 -0
- package/lib/commonjs/services/instagramDataService.js +9 -0
- package/lib/commonjs/services/jwtStorageService.js +7 -0
- package/lib/commonjs/services/linkedinDOMExtractor.js +7 -0
- package/lib/commonjs/services/linkedinProfileService.js +9 -0
- package/lib/commonjs/services/linkedinScrapingService.js +8 -0
- package/lib/commonjs/services/llmDataStorage.js +8 -0
- package/lib/commonjs/services/mobileTrainingService.js +8 -0
- package/lib/commonjs/services/oauthService.js +11 -390
- package/lib/commonjs/services/pinEncryptionService.js +8 -0
- package/lib/commonjs/services/pinStorageUtils.js +7 -0
- package/lib/commonjs/services/platformAuthService.js +12 -1067
- package/lib/commonjs/services/sephoraDataExtractor.js +8 -0
- package/lib/commonjs/services/sephoraDataService.js +9 -0
- package/lib/commonjs/services/storageService.js +8 -0
- package/lib/commonjs/services/telegramDataExtractor.js +8 -0
- package/lib/commonjs/services/telegramDataService.js +11 -0
- package/lib/commonjs/services/trainingApiHelpers.js +7 -0
- package/lib/commonjs/services/userConnectionsService.js +10 -0
- package/lib/commonjs/services/youtubeMigrationService.js +10 -0
- package/lib/commonjs/theme/index.js +7 -0
- package/lib/commonjs/types/ambient.d.js +1 -2
- package/lib/commonjs/types/declarations.d.js +1 -2
- package/lib/commonjs/types/index.js +1 -6
- package/lib/commonjs/types/node-fix.d.js +1 -2
- package/lib/commonjs/types/node-override.d.js +1 -2
- package/lib/commonjs/types/opacity.d.js +1 -2
- package/lib/commonjs/types.js +1 -14
- package/lib/commonjs/utils/Portal.js +8 -98
- package/lib/commonjs/utils/api.js +9 -129
- package/lib/commonjs/utils/assetRegistry.js +33 -0
- package/lib/commonjs/utils/auth.js +9 -111
- package/lib/commonjs/utils/connectorTests.js +29 -0
- package/lib/commonjs/utils/crypto.js +8 -62
- package/lib/commonjs/utils/debugHelper.js +1 -64
- package/lib/commonjs/utils/encryption.js +7 -76
- package/lib/commonjs/utils/eventUtils.js +1 -0
- package/lib/commonjs/utils/haptics.js +9 -0
- package/lib/commonjs/utils/imagePreloader.js +1 -0
- package/lib/commonjs/utils/networkDiagnostics.js +8 -0
- package/lib/commonjs/utils/onairosApi.js +9 -350
- package/lib/commonjs/utils/programmaticFlow.js +9 -117
- package/lib/commonjs/utils/retryHelper.js +1 -220
- package/lib/commonjs/utils/secureStorage.js +10 -349
- package/lib/commonjs/utils/webviewScripts/chatgpt.js +1 -0
- package/lib/commonjs/utils/webviewScripts/claude.js +1 -0
- package/lib/commonjs/utils/webviewScripts/hinge.js +1 -0
- package/lib/commonjs/utils/webviewScripts/index.js +13 -0
- package/lib/commonjs/utils/webviewScripts/instagram.js +1 -0
- package/lib/commonjs/utils/webviewScripts/linkedin.js +1 -0
- package/lib/commonjs/utils/webviewScripts/sephora.js +1 -0
- package/lib/commonjs/utils/webviewScripts/telegram.js +1 -0
- package/lib/module/api/index.js +1 -139
- package/lib/module/assets/animations/loaderani.json +1 -0
- package/lib/module/assets/animations/persona-animation.json +1 -0
- package/lib/module/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
- package/lib/module/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
- package/lib/module/assets/icons/Facebookicon.png +0 -0
- package/lib/module/assets/icons/Gmail.png +0 -0
- package/lib/module/assets/icons/Linkedinicon.png +0 -0
- package/lib/module/assets/icons/Redditicon.png +0 -0
- package/lib/module/assets/icons/YouTubeicon2.png +0 -0
- package/lib/module/assets/icons/YouTubeicon3.png +0 -0
- package/lib/module/assets/icons/chatgpt.png +0 -0
- package/lib/module/assets/icons/claude.png +0 -0
- package/lib/module/assets/icons/farcaster.png +0 -0
- package/lib/module/assets/icons/gemini.png +0 -0
- package/lib/module/assets/icons/grok.png +0 -0
- package/lib/module/assets/icons/instagram.png +0 -0
- package/lib/module/assets/icons/pinterest.png +0 -0
- package/lib/module/assets/icons/swerv_logo.png +0 -0
- package/lib/module/assets/icons/twitter.jpg +0 -0
- package/lib/module/assets/images/Checkbox.svg +3 -0
- package/lib/module/assets/images/EnochE.svg +19 -0
- package/lib/module/assets/images/Enochicon1.png +0 -0
- package/lib/module/assets/images/Face_ID_logo.png +0 -0
- package/lib/module/assets/images/Facebookicon.png +0 -0
- package/lib/module/assets/images/Gmail.png +0 -0
- package/lib/module/assets/images/Googlelogo.png +0 -0
- package/lib/module/assets/images/Linkedinicon.png +0 -0
- package/lib/module/assets/images/OnairosNewLogo.png +0 -0
- package/lib/module/assets/images/Onairoslogo.png +0 -0
- package/lib/module/assets/images/Personalityprofile.svg +3 -0
- package/lib/module/assets/images/Personalitytraits.svg +3 -0
- package/lib/module/assets/images/Redditicon.png +0 -0
- package/lib/module/assets/images/Userpreferences.svg +3 -0
- package/lib/module/assets/images/YouTubeicon3.png +0 -0
- package/lib/module/assets/images/arrow.svg +20 -0
- package/lib/module/assets/images/basicproficon.svg +43 -0
- package/lib/module/assets/images/basicprofile.svg +3 -0
- package/lib/module/assets/images/chatgpt.png +0 -0
- package/lib/module/assets/images/checkmark.svg +4 -0
- package/lib/module/assets/images/claude.png +0 -0
- package/lib/module/assets/images/contentanalysis.svg +3 -0
- package/lib/module/assets/images/contenticon.svg +23 -0
- package/lib/module/assets/images/gemini.png +0 -0
- package/lib/module/assets/images/grok.png +0 -0
- package/lib/module/assets/images/persona1.png +0 -0
- package/lib/module/assets/images/persona2.png +0 -0
- package/lib/module/assets/images/persona3.png +0 -0
- package/lib/module/assets/images/persona4.png +0 -0
- package/lib/module/assets/images/persona5.png +0 -0
- package/lib/module/assets/images/personalityicon.svg +18 -0
- package/lib/module/assets/images/x-close.svg +3 -0
- package/lib/module/components/BodyText.js +1 -0
- package/lib/module/components/BrandMark.js +1 -0
- package/lib/module/components/CodeInput.js +1 -0
- package/lib/module/components/EmailInput.js +1 -0
- package/lib/module/components/GoogleButton.js +1 -0
- package/lib/module/components/HeadingGroup.js +1 -0
- package/lib/module/components/LLMDataInputModal.js +8 -0
- package/lib/module/components/ModalHeader.js +1 -0
- package/lib/module/components/ModalSheet.js +1 -0
- package/lib/module/components/Onairos.js +1 -367
- package/lib/module/components/OnairosButton.js +1 -302
- package/lib/module/components/OnairosSignInButton.js +1 -0
- package/lib/module/components/Overlay.js +1 -474
- package/lib/module/components/PersonaImage.js +1 -0
- package/lib/module/components/PersonaLoadingScreen.js +1 -0
- package/lib/module/components/PersonalizationConsentScreen.js +1 -0
- package/lib/module/components/PinCreationScreen.js +1 -0
- package/lib/module/components/PinInput.js +1 -293
- package/lib/module/components/PlatformConnectorsStep.js +7 -0
- package/lib/module/components/PlatformList.js +1 -129
- package/lib/module/components/PlatformToggle.js +1 -0
- package/lib/module/components/PrimaryButton.js +1 -0
- package/lib/module/components/SignInMatchAnimation.js +1 -0
- package/lib/module/components/SignInStep.js +1 -0
- package/lib/module/components/UniversalOnboarding.js +1 -1693
- package/lib/module/components/VerificationStep.js +1 -0
- package/lib/module/components/WelcomeScreen.js +1 -0
- package/lib/module/components/icons/Basicproficon.js +1 -0
- package/lib/module/components/icons/Basicprofile.js +1 -0
- package/lib/module/components/icons/Checkbox.js +1 -0
- package/lib/module/components/icons/Checkmark.js +1 -0
- package/lib/module/components/icons/Contentanalysis.js +1 -0
- package/lib/module/components/icons/Contenticon.js +1 -0
- package/lib/module/components/icons/EnochE.js +1 -0
- package/lib/module/components/icons/Personalityicon.js +1 -0
- package/lib/module/components/icons/Personalityprofile.js +1 -0
- package/lib/module/components/icons/Personalitytraits.js +1 -0
- package/lib/module/components/icons/Userpreferences.js +1 -0
- package/lib/module/components/icons/index.js +1 -0
- package/lib/module/components/onboarding/OAuthWebView.js +1 -818
- package/lib/module/components/onboarding/OnboardingHeader.js +1 -66
- package/lib/module/components/onboarding/PinInput.js +1 -274
- package/lib/module/components/onboarding/PlatformConnector.js +1 -240
- package/lib/module/config/api.js +1 -0
- package/lib/module/constants/index.js +1 -77
- package/lib/module/context/AuthContext.js +1 -0
- package/lib/module/hooks/useConnectedAccounts.js +1 -0
- package/lib/module/hooks/useConnections.js +1 -152
- package/lib/module/hooks/useCredentials.js +6 -169
- package/lib/module/hooks/useUserConnections.js +1 -0
- package/lib/module/index.js +1 -32
- package/lib/module/services/SDK_API_KEY_VALIDATION.md +421 -421
- package/lib/module/services/apiClient.js +1 -0
- package/lib/module/services/apiKeyService.js +1 -925
- package/lib/module/services/authService.js +1 -0
- package/lib/module/services/biometricPinService.js +1 -0
- package/lib/module/services/chatGPTConversationExtractor.js +1 -0
- package/lib/module/services/chatGPTConversationService.js +1 -0
- package/lib/module/services/claudeConversationExtractor.js +1 -0
- package/lib/module/services/claudeConversationService.js +1 -0
- package/lib/module/services/connectedAccountsService.js +1 -0
- package/lib/module/services/googleAuthService.js +1 -0
- package/lib/module/services/hingeDataExtractor.js +1 -0
- package/lib/module/services/hingeDataService.js +1 -0
- package/lib/module/services/imageCompressionService.js +1 -0
- package/lib/module/services/instagramDataExtractor.js +1 -0
- package/lib/module/services/instagramDataService.js +1 -0
- package/lib/module/services/jwtStorageService.js +1 -0
- package/lib/module/services/linkedinDOMExtractor.js +1 -0
- package/lib/module/services/linkedinProfileService.js +1 -0
- package/lib/module/services/linkedinScrapingService.js +1 -0
- package/lib/module/services/llmDataStorage.js +1 -0
- package/lib/module/services/mobileTrainingService.js +1 -0
- package/lib/module/services/oauthService.js +1 -380
- package/lib/module/services/pinEncryptionService.js +7 -0
- package/lib/module/services/pinStorageUtils.js +1 -0
- package/lib/module/services/platformAuthService.js +1 -1041
- package/lib/module/services/sephoraDataExtractor.js +1 -0
- package/lib/module/services/sephoraDataService.js +1 -0
- package/lib/module/services/storageService.js +1 -0
- package/lib/module/services/telegramDataExtractor.js +1 -0
- package/lib/module/services/telegramDataService.js +8 -0
- package/lib/module/services/trainingApiHelpers.js +1 -0
- package/lib/module/services/userConnectionsService.js +1 -0
- package/lib/module/services/youtubeMigrationService.js +1 -0
- package/lib/module/theme/index.js +1 -0
- package/lib/module/types.js +1 -10
- package/lib/module/utils/Portal.js +1 -90
- package/lib/module/utils/api.js +1 -117
- package/lib/module/utils/assetRegistry.js +33 -0
- package/lib/module/utils/auth.js +1 -99
- package/lib/module/utils/connectorTests.js +28 -0
- package/lib/module/utils/crypto.js +1 -54
- package/lib/module/utils/debugHelper.js +1 -54
- package/lib/module/utils/encryption.js +1 -67
- package/lib/module/utils/eventUtils.js +1 -0
- package/lib/module/utils/haptics.js +8 -0
- package/lib/module/utils/imagePreloader.js +1 -0
- package/lib/module/utils/networkDiagnostics.js +1 -0
- package/lib/module/utils/onairosApi.js +1 -333
- package/lib/module/utils/programmaticFlow.js +1 -111
- package/lib/module/utils/retryHelper.js +1 -211
- package/lib/module/utils/secureStorage.js +6 -330
- package/lib/module/utils/webviewScripts/chatgpt.js +1 -0
- package/lib/module/utils/webviewScripts/claude.js +1 -0
- package/lib/module/utils/webviewScripts/hinge.js +1 -0
- package/lib/module/utils/webviewScripts/index.js +1 -0
- package/lib/module/utils/webviewScripts/instagram.js +1 -0
- package/lib/module/utils/webviewScripts/linkedin.js +1 -0
- package/lib/module/utils/webviewScripts/sephora.js +1 -0
- package/lib/module/utils/webviewScripts/telegram.js +1 -0
- package/package.json +62 -39
- package/lib/commonjs/api/index.js.map +0 -1
- package/lib/commonjs/assets/images/email.png +0 -0
- package/lib/commonjs/assets/images/linkedin.png +0 -0
- package/lib/commonjs/assets/images/reddit.png +0 -0
- package/lib/commonjs/assets/images/youtube.png +0 -0
- package/lib/commonjs/components/DataRequestModal.js +0 -228
- package/lib/commonjs/components/DataRequestModal.js.map +0 -1
- package/lib/commonjs/components/DataRequestScreen.js +0 -329
- package/lib/commonjs/components/DataRequestScreen.js.map +0 -1
- package/lib/commonjs/components/EmailVerificationModal.js +0 -320
- package/lib/commonjs/components/EmailVerificationModal.js.map +0 -1
- package/lib/commonjs/components/Onairos.js.map +0 -1
- package/lib/commonjs/components/OnairosButton.js.map +0 -1
- package/lib/commonjs/components/Overlay.js.map +0 -1
- package/lib/commonjs/components/PinInput.js.map +0 -1
- package/lib/commonjs/components/PlatformList.js.map +0 -1
- package/lib/commonjs/components/TrainingModal.js +0 -717
- package/lib/commonjs/components/TrainingModal.js.map +0 -1
- package/lib/commonjs/components/UniversalOnboarding.js.map +0 -1
- package/lib/commonjs/components/UniversalOnboarding.tsx.new +0 -455
- package/lib/commonjs/components/onboarding/OAuthWebView.js.map +0 -1
- package/lib/commonjs/components/onboarding/OnboardingHeader.js.map +0 -1
- package/lib/commonjs/components/onboarding/PinInput.js.map +0 -1
- package/lib/commonjs/components/onboarding/PlatformConnector.js.map +0 -1
- package/lib/commonjs/components/screens/ConnectorScreen.js +0 -146
- package/lib/commonjs/components/screens/ConnectorScreen.js.map +0 -1
- package/lib/commonjs/components/screens/LoadingScreen.js +0 -91
- package/lib/commonjs/components/screens/LoadingScreen.js.map +0 -1
- package/lib/commonjs/components/screens/PinCreationScreen.js +0 -61
- package/lib/commonjs/components/screens/PinCreationScreen.js.map +0 -1
- package/lib/commonjs/constants/index.js.map +0 -1
- package/lib/commonjs/hooks/useConnections.js.map +0 -1
- package/lib/commonjs/hooks/useCredentials.js.map +0 -1
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/services/apiKeyService.js.map +0 -1
- package/lib/commonjs/services/oauthService.js.map +0 -1
- package/lib/commonjs/services/platformAuthService.js.map +0 -1
- package/lib/commonjs/types/ambient.d.js.map +0 -1
- package/lib/commonjs/types/declarations.d.js.map +0 -1
- package/lib/commonjs/types/index.d.js.map +0 -1
- package/lib/commonjs/types/index.js.map +0 -1
- package/lib/commonjs/types/node-fix.d.js.map +0 -1
- package/lib/commonjs/types/node-override.d.js.map +0 -1
- package/lib/commonjs/types/opacity.d.js.map +0 -1
- package/lib/commonjs/types/types.d.js.map +0 -1
- package/lib/commonjs/types.js.map +0 -1
- package/lib/commonjs/utils/Portal.js.map +0 -1
- package/lib/commonjs/utils/api.js.map +0 -1
- package/lib/commonjs/utils/auth.js.map +0 -1
- package/lib/commonjs/utils/crypto.js.map +0 -1
- package/lib/commonjs/utils/debugHelper.js.map +0 -1
- package/lib/commonjs/utils/encryption.js.map +0 -1
- package/lib/commonjs/utils/onairosApi.js.map +0 -1
- package/lib/commonjs/utils/programmaticFlow.js.map +0 -1
- package/lib/commonjs/utils/retryHelper.js.map +0 -1
- package/lib/commonjs/utils/secureStorage.js.map +0 -1
- package/lib/module/api/index.js.map +0 -1
- package/lib/module/assets/images/email.png +0 -0
- package/lib/module/assets/images/linkedin.png +0 -0
- package/lib/module/assets/images/reddit.png +0 -0
- package/lib/module/assets/images/youtube.png +0 -0
- package/lib/module/components/DataRequestModal.js +0 -220
- package/lib/module/components/DataRequestModal.js.map +0 -1
- package/lib/module/components/DataRequestScreen.js +0 -321
- package/lib/module/components/DataRequestScreen.js.map +0 -1
- package/lib/module/components/EmailVerificationModal.js +0 -311
- package/lib/module/components/EmailVerificationModal.js.map +0 -1
- package/lib/module/components/Onairos.js.map +0 -1
- package/lib/module/components/OnairosButton.js.map +0 -1
- package/lib/module/components/Overlay.js.map +0 -1
- package/lib/module/components/PinInput.js.map +0 -1
- package/lib/module/components/PlatformList.js.map +0 -1
- package/lib/module/components/TrainingModal.js +0 -708
- package/lib/module/components/TrainingModal.js.map +0 -1
- package/lib/module/components/UniversalOnboarding.js.map +0 -1
- package/lib/module/components/UniversalOnboarding.tsx.new +0 -455
- package/lib/module/components/onboarding/OAuthWebView.js.map +0 -1
- package/lib/module/components/onboarding/OnboardingHeader.js.map +0 -1
- package/lib/module/components/onboarding/PinInput.js.map +0 -1
- package/lib/module/components/onboarding/PlatformConnector.js.map +0 -1
- package/lib/module/components/screens/ConnectorScreen.js +0 -138
- package/lib/module/components/screens/ConnectorScreen.js.map +0 -1
- package/lib/module/components/screens/LoadingScreen.js +0 -83
- package/lib/module/components/screens/LoadingScreen.js.map +0 -1
- package/lib/module/components/screens/PinCreationScreen.js +0 -53
- package/lib/module/components/screens/PinCreationScreen.js.map +0 -1
- package/lib/module/constants/index.js.map +0 -1
- package/lib/module/hooks/useConnections.js.map +0 -1
- package/lib/module/hooks/useCredentials.js.map +0 -1
- package/lib/module/index.js.map +0 -1
- package/lib/module/services/apiKeyService.js.map +0 -1
- package/lib/module/services/oauthService.js.map +0 -1
- package/lib/module/services/platformAuthService.js.map +0 -1
- package/lib/module/types/ambient.d.js.map +0 -1
- package/lib/module/types/declarations.d.js.map +0 -1
- package/lib/module/types/index.d.js.map +0 -1
- package/lib/module/types/index.js.map +0 -1
- package/lib/module/types/node-fix.d.js.map +0 -1
- package/lib/module/types/node-override.d.js.map +0 -1
- package/lib/module/types/opacity.d.js.map +0 -1
- package/lib/module/types/types.d.js.map +0 -1
- package/lib/module/types.js.map +0 -1
- package/lib/module/utils/Portal.js.map +0 -1
- package/lib/module/utils/api.js.map +0 -1
- package/lib/module/utils/auth.js.map +0 -1
- package/lib/module/utils/crypto.js.map +0 -1
- package/lib/module/utils/debugHelper.js.map +0 -1
- package/lib/module/utils/encryption.js.map +0 -1
- package/lib/module/utils/onairosApi.js.map +0 -1
- package/lib/module/utils/programmaticFlow.js.map +0 -1
- package/lib/module/utils/retryHelper.js.map +0 -1
- package/lib/module/utils/secureStorage.js.map +0 -1
- package/lib/typescript/api/index.d.ts +0 -8
- package/lib/typescript/api/index.d.ts.map +0 -1
- package/lib/typescript/components/DataRequestModal.d.ts +0 -11
- package/lib/typescript/components/DataRequestModal.d.ts.map +0 -1
- package/lib/typescript/components/DataRequestScreen.d.ts +0 -11
- package/lib/typescript/components/DataRequestScreen.d.ts.map +0 -1
- package/lib/typescript/components/EmailVerificationModal.d.ts +0 -11
- package/lib/typescript/components/EmailVerificationModal.d.ts.map +0 -1
- package/lib/typescript/components/Onairos.d.ts +0 -4
- package/lib/typescript/components/Onairos.d.ts.map +0 -1
- package/lib/typescript/components/OnairosButton.d.ts +0 -12
- package/lib/typescript/components/OnairosButton.d.ts.map +0 -1
- package/lib/typescript/components/Overlay.d.ts +0 -4
- package/lib/typescript/components/Overlay.d.ts.map +0 -1
- package/lib/typescript/components/PinInput.d.ts +0 -4
- package/lib/typescript/components/PinInput.d.ts.map +0 -1
- package/lib/typescript/components/PlatformList.d.ts +0 -4
- package/lib/typescript/components/PlatformList.d.ts.map +0 -1
- package/lib/typescript/components/TrainingModal.d.ts +0 -4
- package/lib/typescript/components/TrainingModal.d.ts.map +0 -1
- package/lib/typescript/components/UniversalOnboarding.d.ts +0 -4
- package/lib/typescript/components/UniversalOnboarding.d.ts.map +0 -1
- package/lib/typescript/components/onboarding/OAuthWebView.d.ts +0 -10
- package/lib/typescript/components/onboarding/OAuthWebView.d.ts.map +0 -1
- package/lib/typescript/components/onboarding/OnboardingHeader.d.ts +0 -11
- package/lib/typescript/components/onboarding/OnboardingHeader.d.ts.map +0 -1
- package/lib/typescript/components/onboarding/PinInput.d.ts +0 -4
- package/lib/typescript/components/onboarding/PinInput.d.ts.map +0 -1
- package/lib/typescript/components/onboarding/PlatformConnector.d.ts +0 -13
- package/lib/typescript/components/onboarding/PlatformConnector.d.ts.map +0 -1
- package/lib/typescript/components/screens/ConnectorScreen.d.ts +0 -9
- package/lib/typescript/components/screens/ConnectorScreen.d.ts.map +0 -1
- package/lib/typescript/components/screens/LoadingScreen.d.ts +0 -9
- package/lib/typescript/components/screens/LoadingScreen.d.ts.map +0 -1
- package/lib/typescript/components/screens/PinCreationScreen.d.ts +0 -10
- package/lib/typescript/components/screens/PinCreationScreen.d.ts.map +0 -1
- package/lib/typescript/constants/index.d.ts +0 -53
- package/lib/typescript/constants/index.d.ts.map +0 -1
- package/lib/typescript/hooks/useConnections.d.ts +0 -9
- package/lib/typescript/hooks/useConnections.d.ts.map +0 -1
- package/lib/typescript/hooks/useCredentials.d.ts +0 -9
- package/lib/typescript/hooks/useCredentials.d.ts.map +0 -1
- package/lib/typescript/index.d.ts +0 -18
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/services/apiKeyService.d.ts +0 -132
- package/lib/typescript/services/apiKeyService.d.ts.map +0 -1
- package/lib/typescript/services/oauthService.d.ts +0 -50
- package/lib/typescript/services/oauthService.d.ts.map +0 -1
- package/lib/typescript/services/platformAuthService.d.ts +0 -144
- package/lib/typescript/services/platformAuthService.d.ts.map +0 -1
- package/lib/typescript/types/index.d.ts +0 -231
- package/lib/typescript/types/index.d.ts.map +0 -1
- package/lib/typescript/types.d.ts +0 -270
- package/lib/typescript/types.d.ts.map +0 -1
- package/lib/typescript/utils/Portal.d.ts +0 -14
- package/lib/typescript/utils/Portal.d.ts.map +0 -1
- package/lib/typescript/utils/api.d.ts +0 -6
- package/lib/typescript/utils/api.d.ts.map +0 -1
- package/lib/typescript/utils/auth.d.ts +0 -6
- package/lib/typescript/utils/auth.d.ts.map +0 -1
- package/lib/typescript/utils/crypto.d.ts +0 -4
- package/lib/typescript/utils/crypto.d.ts.map +0 -1
- package/lib/typescript/utils/debugHelper.d.ts +0 -29
- package/lib/typescript/utils/debugHelper.d.ts.map +0 -1
- package/lib/typescript/utils/encryption.d.ts +0 -19
- package/lib/typescript/utils/encryption.d.ts.map +0 -1
- package/lib/typescript/utils/onairosApi.d.ts +0 -87
- package/lib/typescript/utils/onairosApi.d.ts.map +0 -1
- package/lib/typescript/utils/programmaticFlow.d.ts +0 -23
- package/lib/typescript/utils/programmaticFlow.d.ts.map +0 -1
- package/lib/typescript/utils/retryHelper.d.ts +0 -69
- package/lib/typescript/utils/retryHelper.d.ts.map +0 -1
- package/lib/typescript/utils/secureStorage.d.ts +0 -94
- package/lib/typescript/utils/secureStorage.d.ts.map +0 -1
- package/src/api/index.ts +0 -111
- package/src/assets/images/email.png +0 -0
- package/src/assets/images/linkedin.png +0 -0
- package/src/assets/images/onairos_logo.png +0 -0
- package/src/assets/images/reddit.png +0 -0
- package/src/assets/images/youtube.png +0 -0
- package/src/components/DataRequestModal.tsx +0 -227
- package/src/components/DataRequestScreen.tsx +0 -356
- package/src/components/EmailVerificationModal.tsx +0 -364
- package/src/components/Onairos.tsx +0 -425
- package/src/components/OnairosButton.tsx +0 -359
- package/src/components/Overlay.tsx +0 -506
- package/src/components/PinInput.tsx +0 -343
- package/src/components/PlatformList.tsx +0 -145
- package/src/components/TrainingModal.tsx +0 -737
- package/src/components/UniversalOnboarding.tsx +0 -1839
- package/src/components/UniversalOnboarding.tsx.new +0 -455
- package/src/components/onboarding/OAuthWebView.tsx +0 -838
- package/src/components/onboarding/OnboardingHeader.tsx +0 -70
- package/src/components/onboarding/PinInput.tsx +0 -356
- package/src/components/onboarding/PlatformConnector.tsx +0 -302
- package/src/components/screens/ConnectorScreen.tsx +0 -153
- package/src/components/screens/LoadingScreen.tsx +0 -100
- package/src/components/screens/PinCreationScreen.tsx +0 -67
- package/src/constants/index.ts +0 -83
- package/src/hooks/useConnections.ts +0 -163
- package/src/hooks/useCredentials.ts +0 -175
- package/src/index.js +0 -14
- package/src/index.ts +0 -50
- package/src/services/SDK_API_KEY_VALIDATION.md +0 -421
- package/src/services/apiKeyService.ts +0 -984
- package/src/services/oauthService.ts +0 -412
- package/src/services/platformAuthService.ts +0 -1113
- package/src/types/ambient.d.ts +0 -29
- package/src/types/declarations.d.ts +0 -26
- package/src/types/index.d.ts +0 -274
- package/src/types/index.ts +0 -244
- package/src/types/node-fix.d.ts +0 -19
- package/src/types/node-override.d.ts +0 -24
- package/src/types/opacity.d.ts +0 -16
- package/src/types/types.d.ts +0 -18
- package/src/types.ts +0 -298
- package/src/utils/Portal.tsx +0 -83
- package/src/utils/api.js +0 -112
- package/src/utils/auth.js +0 -104
- package/src/utils/crypto.js +0 -60
- package/src/utils/debugHelper.ts +0 -53
- package/src/utils/encryption.ts +0 -69
- package/src/utils/onairosApi.ts +0 -391
- package/src/utils/programmaticFlow.ts +0 -113
- package/src/utils/retryHelper.ts +0 -275
- package/src/utils/secureStorage.ts +0 -361
- package/types/index.d.ts +0 -218
- package/types/node-env.d.ts +0 -15
- /package/{src/assets/images โ lib/commonjs/assets/icons}/farcaster.png +0 -0
- /package/{src/assets/images โ lib/commonjs/assets/icons}/instagram.png +0 -0
- /package/{src/assets/images โ lib/commonjs/assets/icons}/pinterest.png +0 -0
- /package/{src/assets/images โ lib/commonjs/assets/icons}/swerv_logo.png +0 -0
- /package/{src/assets/images โ lib/commonjs/assets/icons}/twitter.jpg +0 -0
|
@@ -1,1041 +1 @@
|
|
|
1
|
-
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
2
|
-
import { makeDeveloperRequest, getApiConfig, storeJWT, extractUsernameFromJWT } from './apiKeyService';
|
|
3
|
-
|
|
4
|
-
// ๐ CRITICAL: Use two-tier authentication system
|
|
5
|
-
// - Developer API key for email verification requests
|
|
6
|
-
// - JWT tokens for user-authenticated requests after email verification
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Initialize the platform auth service
|
|
10
|
-
* This service now uses the two-tier authentication system
|
|
11
|
-
*/
|
|
12
|
-
export const initializePlatformAuthService = async () => {
|
|
13
|
-
try {
|
|
14
|
-
// Check if app is already initialized with API key
|
|
15
|
-
const existingConfig = getApiConfig();
|
|
16
|
-
if (existingConfig && existingConfig.apiKey) {
|
|
17
|
-
console.log('๐ Platform auth service using existing app configuration');
|
|
18
|
-
console.log(`โ
Environment: ${existingConfig.environment}`);
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// If no app initialization, we can't proceed
|
|
23
|
-
console.error('โ Platform auth service requires app-level API key initialization');
|
|
24
|
-
throw new Error('Platform auth service requires app-level API key initialization. Please call initializeApiKey() first.');
|
|
25
|
-
} catch (error) {
|
|
26
|
-
console.error('โ Failed to initialize platform auth service:', error);
|
|
27
|
-
throw error;
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
// Configuration for each platform's authentication
|
|
32
|
-
let PLATFORM_AUTH_CONFIG = {
|
|
33
|
-
instagram: {
|
|
34
|
-
hasNativeSDK: false,
|
|
35
|
-
// Instagram uses OAuth WebView flow
|
|
36
|
-
authEndpoint: '/instagram/authorize',
|
|
37
|
-
color: '#E1306C'
|
|
38
|
-
},
|
|
39
|
-
youtube: {
|
|
40
|
-
hasNativeSDK: true,
|
|
41
|
-
// Native Google Sign-In SDK enabled
|
|
42
|
-
nativeSDKPackage: '@react-native-google-signin/google-signin',
|
|
43
|
-
authEndpoint: '/youtube/authorize',
|
|
44
|
-
color: '#FF0000',
|
|
45
|
-
clientId: '1030678346906-lovkuds2ouqmoc8eu5qpo98spa6edv4o.apps.googleusercontent.com',
|
|
46
|
-
redirectUri: 'onairosevents://auth/callback',
|
|
47
|
-
scope: 'https://www.googleapis.com/auth/youtube.readonly',
|
|
48
|
-
responseType: 'code'
|
|
49
|
-
},
|
|
50
|
-
reddit: {
|
|
51
|
-
hasNativeSDK: false,
|
|
52
|
-
authEndpoint: '/reddit/authorize',
|
|
53
|
-
color: '#FF4500'
|
|
54
|
-
},
|
|
55
|
-
pinterest: {
|
|
56
|
-
hasNativeSDK: false,
|
|
57
|
-
authEndpoint: '/pinterest/authorize',
|
|
58
|
-
color: '#E60023'
|
|
59
|
-
},
|
|
60
|
-
email: {
|
|
61
|
-
hasNativeSDK: false,
|
|
62
|
-
authEndpoint: '/gmail/authorize',
|
|
63
|
-
color: '#4285F4'
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Checks if a native SDK is available for the given platform
|
|
69
|
-
*/
|
|
70
|
-
export const hasNativeSDK = platform => {
|
|
71
|
-
const config = PLATFORM_AUTH_CONFIG[platform];
|
|
72
|
-
return (config === null || config === void 0 ? void 0 : config.hasNativeSDK) || false;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Gets the auth endpoint URL for a platform
|
|
77
|
-
*/
|
|
78
|
-
export const getAuthEndpoint = platform => {
|
|
79
|
-
const config = PLATFORM_AUTH_CONFIG[platform];
|
|
80
|
-
return (config === null || config === void 0 ? void 0 : config.authEndpoint) || '';
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Gets the color associated with a platform
|
|
85
|
-
*/
|
|
86
|
-
export const getPlatformColor = platform => {
|
|
87
|
-
const config = PLATFORM_AUTH_CONFIG[platform];
|
|
88
|
-
return (config === null || config === void 0 ? void 0 : config.color) || '#000000';
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Initiates the OAuth flow for a platform
|
|
93
|
-
* @param platform The platform to authenticate with
|
|
94
|
-
* @param username The username to associate with the authentication
|
|
95
|
-
* @param appName The app name to use for the OAuth session (optional)
|
|
96
|
-
* @returns A Promise that resolves to the OAuth URL to open in a WebView or null if using native SDK
|
|
97
|
-
*/
|
|
98
|
-
export const initiateOAuth = async (platform, username, appName) => {
|
|
99
|
-
try {
|
|
100
|
-
console.log('๐ Initiating OAuth for platform:', platform);
|
|
101
|
-
console.log('๐ค Username:', username);
|
|
102
|
-
console.log('๐ฑ App name:', appName);
|
|
103
|
-
|
|
104
|
-
// Check if the platform is supported
|
|
105
|
-
if (!PLATFORM_AUTH_CONFIG[platform]) {
|
|
106
|
-
console.error('โ Unsupported platform:', platform);
|
|
107
|
-
throw new Error(`Unsupported platform: ${platform}`);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Check if platform has a native SDK
|
|
111
|
-
if (PLATFORM_AUTH_CONFIG[platform].hasNativeSDK) {
|
|
112
|
-
console.log('๐ฑ Platform uses native SDK, returning null');
|
|
113
|
-
// Return null to indicate that we should use the native SDK
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
console.log('๐ Platform uses OAuth WebView flow');
|
|
117
|
-
console.log('๐ Auth endpoint:', PLATFORM_AUTH_CONFIG[platform].authEndpoint);
|
|
118
|
-
|
|
119
|
-
// Pre-flight connectivity check
|
|
120
|
-
console.log('๐ Performing pre-flight connectivity check...');
|
|
121
|
-
const connectivityResult = await testApiConnectivity();
|
|
122
|
-
if (!connectivityResult.success) {
|
|
123
|
-
console.error('โ Pre-flight connectivity check failed:', connectivityResult.error);
|
|
124
|
-
throw new Error(`Cannot reach authentication server: ${connectivityResult.error}`);
|
|
125
|
-
}
|
|
126
|
-
console.log('โ
Pre-flight connectivity check passed');
|
|
127
|
-
|
|
128
|
-
// Handle Instagram with specific API format
|
|
129
|
-
if (platform === 'instagram') {
|
|
130
|
-
const state = 'djksbfds';
|
|
131
|
-
const jsonData = {
|
|
132
|
-
session: {
|
|
133
|
-
oauthState: state,
|
|
134
|
-
username: username || 'Avatar'
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
console.log('๐ค Sending Instagram OAuth request:', jsonData);
|
|
138
|
-
const response = await makeDeveloperRequest(PLATFORM_AUTH_CONFIG[platform].authEndpoint, {
|
|
139
|
-
method: 'POST',
|
|
140
|
-
body: JSON.stringify(jsonData)
|
|
141
|
-
});
|
|
142
|
-
console.log('๐ก Instagram OAuth response status:', response.status);
|
|
143
|
-
if (!response.ok) {
|
|
144
|
-
const errorText = await response.text();
|
|
145
|
-
console.error('โ Instagram OAuth API error:', errorText);
|
|
146
|
-
throw new Error(`Instagram OAuth API error: ${response.status} - ${errorText}`);
|
|
147
|
-
}
|
|
148
|
-
const responseData = await response.json();
|
|
149
|
-
console.log('๐ฅ Instagram OAuth response data:', responseData);
|
|
150
|
-
if (responseData.instagramURL) {
|
|
151
|
-
console.log('โ
Instagram OAuth URL received:', responseData.instagramURL);
|
|
152
|
-
|
|
153
|
-
// Validate the URL before returning
|
|
154
|
-
if (await validateOAuthUrl(responseData.instagramURL)) {
|
|
155
|
-
return responseData.instagramURL;
|
|
156
|
-
} else {
|
|
157
|
-
throw new Error('Received invalid Instagram OAuth URL');
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
console.error('โ No Instagram URL found in response');
|
|
161
|
-
throw new Error('No Instagram URL found in response');
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// Prepare the request body for other platforms
|
|
165
|
-
const jsonData = {
|
|
166
|
-
session: {
|
|
167
|
-
oauthState: 'djksbfds',
|
|
168
|
-
// Use same state for all platforms
|
|
169
|
-
username: username || 'Avatar',
|
|
170
|
-
appName: appName || 'DefaultApp'
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
console.log(`๐ค Sending ${platform} OAuth request:`, jsonData);
|
|
174
|
-
|
|
175
|
-
// Make the authenticated request to get the OAuth URL
|
|
176
|
-
const response = await makeDeveloperRequest(PLATFORM_AUTH_CONFIG[platform].authEndpoint, {
|
|
177
|
-
method: 'POST',
|
|
178
|
-
body: JSON.stringify(jsonData)
|
|
179
|
-
});
|
|
180
|
-
console.log(`๐ก ${platform} OAuth response status:`, response.status);
|
|
181
|
-
if (!response.ok) {
|
|
182
|
-
const errorText = await response.text();
|
|
183
|
-
console.error(`โ ${platform} OAuth API error:`, errorText);
|
|
184
|
-
throw new Error(`${platform} OAuth API error: ${response.status} - ${errorText}`);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Parse the response
|
|
188
|
-
const data = await response.json();
|
|
189
|
-
console.log(`๐ฅ ${platform} OAuth response data:`, data);
|
|
190
|
-
|
|
191
|
-
// Extra logging for Gmail to help debug
|
|
192
|
-
if (platform === 'email') {
|
|
193
|
-
console.log('๐ Gmail OAuth response keys:', Object.keys(data));
|
|
194
|
-
console.log('๐ Gmail OAuth full response:', JSON.stringify(data, null, 2));
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// Check if the response contains the OAuth URL based on platform
|
|
198
|
-
let oauthUrl = null;
|
|
199
|
-
switch (platform) {
|
|
200
|
-
case 'reddit':
|
|
201
|
-
oauthUrl = data.redditURL;
|
|
202
|
-
break;
|
|
203
|
-
case 'pinterest':
|
|
204
|
-
oauthUrl = data.pinterestURL;
|
|
205
|
-
break;
|
|
206
|
-
case 'youtube':
|
|
207
|
-
oauthUrl = data.youtubeURL;
|
|
208
|
-
break;
|
|
209
|
-
case 'email':
|
|
210
|
-
// Gmail might return under different field names
|
|
211
|
-
oauthUrl = data.emailURL || data.gmailURL || data.authUrl || data.url;
|
|
212
|
-
break;
|
|
213
|
-
default:
|
|
214
|
-
oauthUrl = data.url;
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
if (!oauthUrl) {
|
|
218
|
-
console.error(`โ No OAuth URL found in response for ${platform}. Response:`, data);
|
|
219
|
-
throw new Error(`No OAuth URL found in response for ${platform}`);
|
|
220
|
-
}
|
|
221
|
-
console.log(`โ
${platform} OAuth URL received:`, oauthUrl);
|
|
222
|
-
|
|
223
|
-
// Validate the URL before returning
|
|
224
|
-
if (await validateOAuthUrl(oauthUrl)) {
|
|
225
|
-
return oauthUrl;
|
|
226
|
-
} else {
|
|
227
|
-
throw new Error(`Received invalid ${platform} OAuth URL`);
|
|
228
|
-
}
|
|
229
|
-
} catch (error) {
|
|
230
|
-
console.error(`Error initiating OAuth for ${platform}:`, error);
|
|
231
|
-
throw error;
|
|
232
|
-
}
|
|
233
|
-
};
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Validates an OAuth URL to ensure it's reachable
|
|
237
|
-
* @param url The OAuth URL to validate
|
|
238
|
-
* @returns Promise<boolean> indicating if the URL is valid and reachable
|
|
239
|
-
*/
|
|
240
|
-
const validateOAuthUrl = async url => {
|
|
241
|
-
try {
|
|
242
|
-
console.log('๐ Validating OAuth URL:', url);
|
|
243
|
-
|
|
244
|
-
// Basic URL format validation
|
|
245
|
-
if (!url || typeof url !== 'string') {
|
|
246
|
-
console.error('โ Invalid URL format:', url);
|
|
247
|
-
return false;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// Check if URL starts with https
|
|
251
|
-
if (!url.startsWith('https://')) {
|
|
252
|
-
console.error('โ URL must use HTTPS:', url);
|
|
253
|
-
return false;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// Try to parse the URL
|
|
257
|
-
try {
|
|
258
|
-
new URL(url);
|
|
259
|
-
} catch (parseError) {
|
|
260
|
-
console.error('โ URL parsing failed:', parseError);
|
|
261
|
-
return false;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Make a HEAD request to check if the URL is reachable
|
|
265
|
-
const controller = new AbortController();
|
|
266
|
-
const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 second timeout
|
|
267
|
-
|
|
268
|
-
try {
|
|
269
|
-
const response = await fetch(url, {
|
|
270
|
-
method: 'HEAD',
|
|
271
|
-
signal: controller.signal
|
|
272
|
-
});
|
|
273
|
-
clearTimeout(timeoutId);
|
|
274
|
-
|
|
275
|
-
// Accept any response that's not a network error
|
|
276
|
-
// OAuth pages might return various status codes
|
|
277
|
-
console.log('โ
OAuth URL validation successful, status:', response.status);
|
|
278
|
-
return true;
|
|
279
|
-
} catch (fetchError) {
|
|
280
|
-
clearTimeout(timeoutId);
|
|
281
|
-
if (fetchError.name === 'AbortError') {
|
|
282
|
-
console.warn('โ ๏ธ OAuth URL validation timeout, but proceeding anyway');
|
|
283
|
-
return true; // Allow timeout as URLs might be slow to respond
|
|
284
|
-
}
|
|
285
|
-
console.warn('โ ๏ธ OAuth URL validation failed, but proceeding anyway:', fetchError.message);
|
|
286
|
-
return true; // Allow network errors as they might be temporary
|
|
287
|
-
}
|
|
288
|
-
} catch (error) {
|
|
289
|
-
console.warn('โ ๏ธ OAuth URL validation error, but proceeding anyway:', error);
|
|
290
|
-
return true; // Allow validation errors to not block the flow
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Initiates the native SDK authentication flow for a platform
|
|
296
|
-
* @param platform The platform to authenticate with
|
|
297
|
-
* @returns A Promise that resolves to the authentication result
|
|
298
|
-
*/
|
|
299
|
-
export const initiateNativeAuth = async (platform, username) => {
|
|
300
|
-
if (platform === 'youtube') {
|
|
301
|
-
console.log('๐ Initiating native Google Sign-In for YouTube');
|
|
302
|
-
try {
|
|
303
|
-
var _currentUser$user, _userInfo$user4, _userInfo$user6, _userInfo$user7, _userInfo$user8;
|
|
304
|
-
// Check if Google Sign-In package is available
|
|
305
|
-
let GoogleSignin, statusCodes;
|
|
306
|
-
try {
|
|
307
|
-
const googleSignInModule = require('@react-native-google-signin/google-signin');
|
|
308
|
-
GoogleSignin = googleSignInModule.GoogleSignin;
|
|
309
|
-
statusCodes = googleSignInModule.statusCodes;
|
|
310
|
-
} catch (importError) {
|
|
311
|
-
console.error('โ Google Sign-In package not available:', importError);
|
|
312
|
-
throw new Error('Google Sign-In SDK not installed. Please install @react-native-google-signin/google-signin');
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// Configure Google Sign-In with better error handling
|
|
316
|
-
try {
|
|
317
|
-
const youtubeConfig = PLATFORM_AUTH_CONFIG.youtube;
|
|
318
|
-
const webClientId = youtubeConfig.clientId || '1030678346906-lovkuds2ouqmoc8eu5qpo98spa6edv4o.apps.googleusercontent.com';
|
|
319
|
-
const iosClientId = youtubeConfig.iosClientId || webClientId;
|
|
320
|
-
await GoogleSignin.configure({
|
|
321
|
-
webClientId: webClientId,
|
|
322
|
-
iosClientId: iosClientId,
|
|
323
|
-
scopes: ['https://www.googleapis.com/auth/youtube.readonly'],
|
|
324
|
-
offlineAccess: true,
|
|
325
|
-
hostedDomain: '',
|
|
326
|
-
forceCodeForRefreshToken: true,
|
|
327
|
-
accountName: ''
|
|
328
|
-
});
|
|
329
|
-
console.log('โ
Google Sign-In configured successfully with client ID:', webClientId.substring(0, 20) + '...');
|
|
330
|
-
} catch (configError) {
|
|
331
|
-
console.error('โ Google Sign-In configuration failed:', configError);
|
|
332
|
-
throw new Error(`Google Sign-In configuration failed: ${configError.message || configError}`);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
// Check if Google Play Services are available (Android only)
|
|
336
|
-
try {
|
|
337
|
-
await GoogleSignin.hasPlayServices({
|
|
338
|
-
showPlayServicesUpdateDialog: true
|
|
339
|
-
});
|
|
340
|
-
console.log('โ
Google Play Services available');
|
|
341
|
-
} catch (playServicesError) {
|
|
342
|
-
console.error('โ Google Play Services error:', playServicesError);
|
|
343
|
-
throw new Error(`Google Play Services not available: ${playServicesError.message || playServicesError}`);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// Sign in with Google
|
|
347
|
-
let userInfo;
|
|
348
|
-
try {
|
|
349
|
-
var _userInfo$user;
|
|
350
|
-
userInfo = await GoogleSignin.signIn();
|
|
351
|
-
console.log('โ
Google Sign-In successful:', (_userInfo$user = userInfo.user) === null || _userInfo$user === void 0 ? void 0 : _userInfo$user.email);
|
|
352
|
-
} catch (signInError) {
|
|
353
|
-
console.error('โ Google Sign-In failed:', signInError);
|
|
354
|
-
|
|
355
|
-
// Handle specific error codes
|
|
356
|
-
if (signInError.code === statusCodes.SIGN_IN_CANCELLED) {
|
|
357
|
-
throw new Error('Google Sign-In was cancelled by user');
|
|
358
|
-
} else if (signInError.code === statusCodes.IN_PROGRESS) {
|
|
359
|
-
throw new Error('Google Sign-In already in progress');
|
|
360
|
-
} else if (signInError.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
|
|
361
|
-
throw new Error('Google Play Services not available or outdated');
|
|
362
|
-
} else {
|
|
363
|
-
throw new Error(`Google Sign-In failed: ${signInError.message || signInError}`);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// Get access token for API calls
|
|
368
|
-
const tokens = await GoogleSignin.getTokens();
|
|
369
|
-
console.log('๐ Got Google tokens');
|
|
370
|
-
|
|
371
|
-
// Get current user info with refresh token
|
|
372
|
-
const currentUser = await GoogleSignin.getCurrentUser();
|
|
373
|
-
console.log('๐ค Current user info:', currentUser === null || currentUser === void 0 || (_currentUser$user = currentUser.user) === null || _currentUser$user === void 0 ? void 0 : _currentUser$user.email);
|
|
374
|
-
|
|
375
|
-
// Extract refresh token from server auth code
|
|
376
|
-
let refreshToken = null;
|
|
377
|
-
if (currentUser !== null && currentUser !== void 0 && currentUser.serverAuthCode) {
|
|
378
|
-
console.log('๐ Server auth code available for refresh token');
|
|
379
|
-
refreshToken = currentUser.serverAuthCode;
|
|
380
|
-
}
|
|
381
|
-
if (!refreshToken) {
|
|
382
|
-
console.warn('โ ๏ธ No refresh token available - token refresh may fail later');
|
|
383
|
-
} else {
|
|
384
|
-
console.log('โ
Refresh token available for YouTube connection');
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
// Fetch YouTube channel information
|
|
388
|
-
let channelName = 'Unknown Channel';
|
|
389
|
-
let channelId = null;
|
|
390
|
-
try {
|
|
391
|
-
console.log('๐บ Fetching YouTube channel information...');
|
|
392
|
-
const channelResponse = await fetch('https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true', {
|
|
393
|
-
headers: {
|
|
394
|
-
'Authorization': `Bearer ${tokens.accessToken}`,
|
|
395
|
-
'Accept': 'application/json'
|
|
396
|
-
}
|
|
397
|
-
});
|
|
398
|
-
if (channelResponse.ok) {
|
|
399
|
-
const channelData = await channelResponse.json();
|
|
400
|
-
if (channelData.items && channelData.items.length > 0) {
|
|
401
|
-
channelName = channelData.items[0].snippet.title;
|
|
402
|
-
channelId = channelData.items[0].id;
|
|
403
|
-
console.log('โ
YouTube channel found:', channelName);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
} catch (channelError) {
|
|
407
|
-
var _userInfo$user2, _userInfo$user3;
|
|
408
|
-
console.log('โ ๏ธ Error fetching YouTube channel info:', channelError);
|
|
409
|
-
channelName = ((_userInfo$user2 = userInfo.user) === null || _userInfo$user2 === void 0 ? void 0 : _userInfo$user2.name) || ((_userInfo$user3 = userInfo.user) === null || _userInfo$user3 === void 0 ? void 0 : _userInfo$user3.email) || 'Unknown Channel';
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
// Get authentication info
|
|
413
|
-
let authToken = (await AsyncStorage.getItem('onairos_jwt_token')) || (await AsyncStorage.getItem('enoch_token')) || (await AsyncStorage.getItem('auth_token'));
|
|
414
|
-
const storedUsername = await AsyncStorage.getItem('onairos_username');
|
|
415
|
-
const finalUsername = storedUsername || username || ((_userInfo$user4 = userInfo.user) === null || _userInfo$user4 === void 0 ? void 0 : _userInfo$user4.email) || 'youtube_user';
|
|
416
|
-
|
|
417
|
-
// Create auth token if needed
|
|
418
|
-
if (!authToken || authToken.trim().length < 20) {
|
|
419
|
-
console.log('๐ Creating authentication token for YouTube...');
|
|
420
|
-
try {
|
|
421
|
-
var _userInfo$user5;
|
|
422
|
-
const fallbackEmail = ((_userInfo$user5 = userInfo.user) === null || _userInfo$user5 === void 0 ? void 0 : _userInfo$user5.email) || `${finalUsername}@youtube.temp`;
|
|
423
|
-
|
|
424
|
-
// Create user accounts and get JWT token
|
|
425
|
-
const onairosSignupResponse = await fetch('https://api2.onairos.uk/register/enoch', {
|
|
426
|
-
method: 'POST',
|
|
427
|
-
headers: {
|
|
428
|
-
'Content-Type': 'application/json'
|
|
429
|
-
},
|
|
430
|
-
body: JSON.stringify({
|
|
431
|
-
email: fallbackEmail,
|
|
432
|
-
username: finalUsername,
|
|
433
|
-
name: finalUsername
|
|
434
|
-
})
|
|
435
|
-
});
|
|
436
|
-
if (onairosSignupResponse.ok) {
|
|
437
|
-
var _onairosResponseData$;
|
|
438
|
-
const onairosResponseData = await onairosSignupResponse.json();
|
|
439
|
-
|
|
440
|
-
// Extract token from response
|
|
441
|
-
authToken = onairosResponseData.token || ((_onairosResponseData$ = onairosResponseData.data) === null || _onairosResponseData$ === void 0 ? void 0 : _onairosResponseData$.token) || onairosResponseData.jwt;
|
|
442
|
-
if (authToken) {
|
|
443
|
-
// Store tokens
|
|
444
|
-
await AsyncStorage.setItem('onairos_jwt_token', authToken);
|
|
445
|
-
await AsyncStorage.setItem('enoch_token', authToken);
|
|
446
|
-
await AsyncStorage.setItem('auth_token', authToken);
|
|
447
|
-
await AsyncStorage.setItem('onairos_username', onairosResponseData.username || finalUsername);
|
|
448
|
-
console.log('โ
Successfully created and stored authentication token');
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
} catch (tokenError) {
|
|
452
|
-
console.warn('โ ๏ธ Error creating auth token:', tokenError);
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
console.log('๐ Linking YouTube data to user:', finalUsername);
|
|
456
|
-
console.log('๐บ YouTube channel name:', channelName);
|
|
457
|
-
|
|
458
|
-
// Send tokens to backend for YouTube data processing
|
|
459
|
-
const backendResponse = await fetch('https://api2.onairos.uk/youtube/native-auth', {
|
|
460
|
-
method: 'POST',
|
|
461
|
-
headers: {
|
|
462
|
-
'Content-Type': 'application/json',
|
|
463
|
-
...(authToken && {
|
|
464
|
-
'Authorization': `Bearer ${authToken}`
|
|
465
|
-
})
|
|
466
|
-
},
|
|
467
|
-
body: JSON.stringify({
|
|
468
|
-
session: {
|
|
469
|
-
username: finalUsername,
|
|
470
|
-
platform: 'youtube',
|
|
471
|
-
timestamp: new Date().toISOString(),
|
|
472
|
-
channelName: channelName,
|
|
473
|
-
channelId: channelId
|
|
474
|
-
},
|
|
475
|
-
googleUser: userInfo.user,
|
|
476
|
-
accessToken: tokens.accessToken,
|
|
477
|
-
idToken: tokens.idToken,
|
|
478
|
-
refreshToken: refreshToken,
|
|
479
|
-
// CRITICAL: Include refresh token
|
|
480
|
-
serverAuthCode: currentUser === null || currentUser === void 0 ? void 0 : currentUser.serverAuthCode,
|
|
481
|
-
userAccountInfo: {
|
|
482
|
-
username: finalUsername,
|
|
483
|
-
email: (_userInfo$user6 = userInfo.user) === null || _userInfo$user6 === void 0 ? void 0 : _userInfo$user6.email,
|
|
484
|
-
authToken: authToken,
|
|
485
|
-
channelName: channelName,
|
|
486
|
-
channelId: channelId,
|
|
487
|
-
userIdentifier: authToken ? `user-${authToken.substring(0, 10)}` : `youtube-${(_userInfo$user7 = userInfo.user) === null || _userInfo$user7 === void 0 ? void 0 : _userInfo$user7.email}`,
|
|
488
|
-
googleId: (_userInfo$user8 = userInfo.user) === null || _userInfo$user8 === void 0 ? void 0 : _userInfo$user8.id
|
|
489
|
-
},
|
|
490
|
-
tokenExpiry: new Date(Date.now() + 3600 * 1000).toISOString(),
|
|
491
|
-
// 1 hour from now
|
|
492
|
-
requestRefreshToken: true
|
|
493
|
-
})
|
|
494
|
-
});
|
|
495
|
-
if (backendResponse.ok) {
|
|
496
|
-
const responseData = await backendResponse.json();
|
|
497
|
-
console.log('โ
YouTube connection processed by backend:', responseData);
|
|
498
|
-
return true;
|
|
499
|
-
} else {
|
|
500
|
-
const errorData = await backendResponse.text();
|
|
501
|
-
console.error('โ Backend processing failed:', backendResponse.status, errorData);
|
|
502
|
-
return false;
|
|
503
|
-
}
|
|
504
|
-
} catch (error) {
|
|
505
|
-
console.error('โ Google Sign-In error:', error);
|
|
506
|
-
const {
|
|
507
|
-
statusCodes: StatusCodes
|
|
508
|
-
} = require('@react-native-google-signin/google-signin');
|
|
509
|
-
if (error.code === StatusCodes.SIGN_IN_CANCELLED) {
|
|
510
|
-
console.log('User cancelled Google Sign-In');
|
|
511
|
-
} else if (error.code === StatusCodes.IN_PROGRESS) {
|
|
512
|
-
console.log('Google Sign-In already in progress');
|
|
513
|
-
} else if (error.code === StatusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
|
|
514
|
-
console.log('Google Play Services not available');
|
|
515
|
-
}
|
|
516
|
-
return false;
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
return false;
|
|
520
|
-
};
|
|
521
|
-
|
|
522
|
-
/**
|
|
523
|
-
* Handles the OAuth callback
|
|
524
|
-
* @param url The callback URL
|
|
525
|
-
* @returns The authorization code extracted from the URL
|
|
526
|
-
*/
|
|
527
|
-
export const handleOAuthCallback = url => {
|
|
528
|
-
try {
|
|
529
|
-
// Parse the URL
|
|
530
|
-
const parsedUrl = new URL(url);
|
|
531
|
-
|
|
532
|
-
// Extract the authorization code
|
|
533
|
-
return parsedUrl.searchParams.get('code');
|
|
534
|
-
} catch (error) {
|
|
535
|
-
console.error('Error handling OAuth callback:', error);
|
|
536
|
-
return null;
|
|
537
|
-
}
|
|
538
|
-
};
|
|
539
|
-
|
|
540
|
-
/**
|
|
541
|
-
* Checks if a URL is an OAuth callback
|
|
542
|
-
* @param url The URL to check
|
|
543
|
-
* @returns True if the URL is an OAuth callback
|
|
544
|
-
*/
|
|
545
|
-
export const isOAuthCallback = url => {
|
|
546
|
-
// Check if the URL starts with our redirect URI
|
|
547
|
-
return url.startsWith('onairosanime://auth/');
|
|
548
|
-
};
|
|
549
|
-
|
|
550
|
-
/**
|
|
551
|
-
* Test connectivity to the Onairos API server
|
|
552
|
-
*/
|
|
553
|
-
export const testApiConnectivity = async () => {
|
|
554
|
-
try {
|
|
555
|
-
console.log('๐ Testing connectivity to Onairos API...');
|
|
556
|
-
|
|
557
|
-
// Test multiple endpoints for better reliability
|
|
558
|
-
const testEndpoints = ['https://api2.onairos.uk/health', 'https://api2.onairos.uk' // Base URL
|
|
559
|
-
];
|
|
560
|
-
let lastError = null;
|
|
561
|
-
for (const endpoint of testEndpoints) {
|
|
562
|
-
try {
|
|
563
|
-
console.log(`๐ Testing endpoint: ${endpoint}`);
|
|
564
|
-
const controller = new AbortController();
|
|
565
|
-
const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 second timeout
|
|
566
|
-
|
|
567
|
-
const response = await fetch(endpoint, {
|
|
568
|
-
method: 'GET',
|
|
569
|
-
headers: {
|
|
570
|
-
'Content-Type': 'application/json',
|
|
571
|
-
'User-Agent': 'OnairosReactNative/1.0'
|
|
572
|
-
},
|
|
573
|
-
signal: controller.signal
|
|
574
|
-
});
|
|
575
|
-
clearTimeout(timeoutId);
|
|
576
|
-
console.log(`๐ API connectivity test response for ${endpoint}:`, response.status);
|
|
577
|
-
if (response.ok || response.status === 404) {
|
|
578
|
-
// Accept 404 as it means the server is reachable
|
|
579
|
-
console.log('โ
API server is reachable');
|
|
580
|
-
return {
|
|
581
|
-
success: true
|
|
582
|
-
};
|
|
583
|
-
} else {
|
|
584
|
-
console.log(`โ ๏ธ API server responded with status ${response.status} for ${endpoint}`);
|
|
585
|
-
lastError = `API server error: ${response.status}`;
|
|
586
|
-
// Continue to next endpoint
|
|
587
|
-
}
|
|
588
|
-
} catch (fetchError) {
|
|
589
|
-
console.log(`โ Failed to reach ${endpoint}:`, fetchError);
|
|
590
|
-
if (fetchError.name === 'AbortError') {
|
|
591
|
-
lastError = 'Connection timeout - API server took too long to respond';
|
|
592
|
-
} else if (fetchError.message.includes('Network request failed')) {
|
|
593
|
-
lastError = 'Network error - check your internet connection';
|
|
594
|
-
} else if (fetchError.message.includes('not connected to the internet')) {
|
|
595
|
-
lastError = 'No internet connection';
|
|
596
|
-
} else {
|
|
597
|
-
lastError = `Network error: ${fetchError.message}`;
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
// Continue to next endpoint
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
console.error('โ All API connectivity tests failed');
|
|
604
|
-
return {
|
|
605
|
-
success: false,
|
|
606
|
-
error: lastError || 'Cannot reach API server'
|
|
607
|
-
};
|
|
608
|
-
} catch (error) {
|
|
609
|
-
console.error('โ API connectivity test failed:', error);
|
|
610
|
-
return {
|
|
611
|
-
success: false,
|
|
612
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
613
|
-
};
|
|
614
|
-
}
|
|
615
|
-
};
|
|
616
|
-
|
|
617
|
-
/**
|
|
618
|
-
* ๐ REFRESH GOOGLE TOKENS
|
|
619
|
-
*/
|
|
620
|
-
export const refreshGoogleTokens = async () => {
|
|
621
|
-
try {
|
|
622
|
-
console.log('๐ Attempting to refresh Google tokens...');
|
|
623
|
-
const {
|
|
624
|
-
GoogleSignin
|
|
625
|
-
} = require('@react-native-google-signin/google-signin');
|
|
626
|
-
const currentUser = await GoogleSignin.getCurrentUser();
|
|
627
|
-
if (!currentUser) {
|
|
628
|
-
console.log('โ User not signed in to Google, cannot refresh tokens');
|
|
629
|
-
return null;
|
|
630
|
-
}
|
|
631
|
-
const tokens = await GoogleSignin.getTokens();
|
|
632
|
-
console.log('โ
Successfully refreshed Google tokens');
|
|
633
|
-
return {
|
|
634
|
-
accessToken: tokens.accessToken,
|
|
635
|
-
idToken: tokens.idToken
|
|
636
|
-
};
|
|
637
|
-
} catch (error) {
|
|
638
|
-
console.error('โ Failed to refresh Google tokens:', error);
|
|
639
|
-
|
|
640
|
-
// If refresh fails, try to sign in again
|
|
641
|
-
try {
|
|
642
|
-
console.log('๐ Refresh failed, attempting re-authentication...');
|
|
643
|
-
const {
|
|
644
|
-
GoogleSignin
|
|
645
|
-
} = require('@react-native-google-signin/google-signin');
|
|
646
|
-
const userInfo = await GoogleSignin.signIn();
|
|
647
|
-
const tokens = await GoogleSignin.getTokens();
|
|
648
|
-
console.log('โ
Re-authentication successful');
|
|
649
|
-
return {
|
|
650
|
-
accessToken: tokens.accessToken,
|
|
651
|
-
idToken: tokens.idToken
|
|
652
|
-
};
|
|
653
|
-
} catch (signInError) {
|
|
654
|
-
console.error('โ Re-authentication also failed:', signInError);
|
|
655
|
-
return null;
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
};
|
|
659
|
-
|
|
660
|
-
/**
|
|
661
|
-
* ๐ REFRESH YOUTUBE TOKENS
|
|
662
|
-
*/
|
|
663
|
-
export const refreshYouTubeTokens = async () => {
|
|
664
|
-
try {
|
|
665
|
-
var _currentUser$user2;
|
|
666
|
-
console.log('๐ Refreshing YouTube tokens...');
|
|
667
|
-
|
|
668
|
-
// Get fresh tokens from Google SDK
|
|
669
|
-
const freshTokens = await refreshGoogleTokens();
|
|
670
|
-
if (!freshTokens) {
|
|
671
|
-
console.error('โ Failed to get fresh tokens from Google SDK');
|
|
672
|
-
return false;
|
|
673
|
-
}
|
|
674
|
-
|
|
675
|
-
// Get current user info
|
|
676
|
-
const {
|
|
677
|
-
GoogleSignin
|
|
678
|
-
} = require('@react-native-google-signin/google-signin');
|
|
679
|
-
const currentUser = await GoogleSignin.getCurrentUser();
|
|
680
|
-
if (!currentUser) {
|
|
681
|
-
console.error('โ No current Google user found');
|
|
682
|
-
return false;
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
// Get stored auth token
|
|
686
|
-
const authToken = (await AsyncStorage.getItem('onairos_jwt_token')) || (await AsyncStorage.getItem('enoch_token')) || (await AsyncStorage.getItem('auth_token'));
|
|
687
|
-
if (!authToken) {
|
|
688
|
-
console.error('โ No auth token found for YouTube refresh');
|
|
689
|
-
return false;
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
// Send refreshed tokens to backend
|
|
693
|
-
const refreshResponse = await fetch('https://api2.onairos.uk/youtube/refresh-token', {
|
|
694
|
-
method: 'POST',
|
|
695
|
-
headers: {
|
|
696
|
-
'Content-Type': 'application/json',
|
|
697
|
-
'Authorization': `Bearer ${authToken}`
|
|
698
|
-
},
|
|
699
|
-
body: JSON.stringify({
|
|
700
|
-
accessToken: freshTokens.accessToken,
|
|
701
|
-
idToken: freshTokens.idToken,
|
|
702
|
-
refreshToken: currentUser.serverAuthCode,
|
|
703
|
-
userEmail: (_currentUser$user2 = currentUser.user) === null || _currentUser$user2 === void 0 ? void 0 : _currentUser$user2.email,
|
|
704
|
-
tokenExpiry: new Date(Date.now() + 3600 * 1000).toISOString(),
|
|
705
|
-
timestamp: new Date().toISOString()
|
|
706
|
-
})
|
|
707
|
-
});
|
|
708
|
-
if (refreshResponse.ok) {
|
|
709
|
-
const responseData = await refreshResponse.json();
|
|
710
|
-
console.log('โ
YouTube tokens refreshed successfully:', responseData);
|
|
711
|
-
return true;
|
|
712
|
-
} else {
|
|
713
|
-
const errorData = await refreshResponse.text();
|
|
714
|
-
console.error('โ YouTube token refresh failed:', refreshResponse.status, errorData);
|
|
715
|
-
return false;
|
|
716
|
-
}
|
|
717
|
-
} catch (error) {
|
|
718
|
-
console.error('โ Error refreshing YouTube tokens:', error);
|
|
719
|
-
return false;
|
|
720
|
-
}
|
|
721
|
-
};
|
|
722
|
-
|
|
723
|
-
/**
|
|
724
|
-
* ๐ฏ ENHANCED OAUTH CALLBACK HANDLER
|
|
725
|
-
*/
|
|
726
|
-
export const handleOAuthCallbackUrl = url => {
|
|
727
|
-
try {
|
|
728
|
-
console.log('๐ Processing OAuth callback URL:', url);
|
|
729
|
-
|
|
730
|
-
// Parse the URL
|
|
731
|
-
const parsedUrl = new URL(url);
|
|
732
|
-
|
|
733
|
-
// Extract platform and code
|
|
734
|
-
const platform = parsedUrl.searchParams.get('platform') || parsedUrl.pathname.split('/').find(segment => ['instagram', 'youtube', 'reddit', 'pinterest', 'email'].includes(segment));
|
|
735
|
-
const code = parsedUrl.searchParams.get('code');
|
|
736
|
-
const error = parsedUrl.searchParams.get('error');
|
|
737
|
-
if (error) {
|
|
738
|
-
console.error('โ OAuth error in callback:', error);
|
|
739
|
-
return {
|
|
740
|
-
success: false
|
|
741
|
-
};
|
|
742
|
-
}
|
|
743
|
-
if (code && platform) {
|
|
744
|
-
console.log(`โ
OAuth callback processed: ${platform} with code: ${code.substring(0, 10)}...`);
|
|
745
|
-
return {
|
|
746
|
-
platform,
|
|
747
|
-
code,
|
|
748
|
-
success: true
|
|
749
|
-
};
|
|
750
|
-
}
|
|
751
|
-
console.warn('โ ๏ธ OAuth callback missing platform or code');
|
|
752
|
-
return {
|
|
753
|
-
success: false
|
|
754
|
-
};
|
|
755
|
-
} catch (error) {
|
|
756
|
-
console.error('โ Error processing OAuth callback:', error);
|
|
757
|
-
return {
|
|
758
|
-
success: false
|
|
759
|
-
};
|
|
760
|
-
}
|
|
761
|
-
};
|
|
762
|
-
|
|
763
|
-
/**
|
|
764
|
-
* ๐ง UPDATE GOOGLE CLIENT IDS
|
|
765
|
-
* Allows apps to configure their own Google client IDs
|
|
766
|
-
*/
|
|
767
|
-
export const updateGoogleClientIds = config => {
|
|
768
|
-
console.log('๐ง Updating Google client IDs configuration');
|
|
769
|
-
if (config.webClientId || config.iosClientId) {
|
|
770
|
-
// Update the YouTube configuration
|
|
771
|
-
PLATFORM_AUTH_CONFIG.youtube = {
|
|
772
|
-
...PLATFORM_AUTH_CONFIG.youtube,
|
|
773
|
-
clientId: config.webClientId || PLATFORM_AUTH_CONFIG.youtube.clientId,
|
|
774
|
-
iosClientId: config.iosClientId || PLATFORM_AUTH_CONFIG.youtube.iosClientId
|
|
775
|
-
};
|
|
776
|
-
console.log('โ
Google client IDs updated successfully');
|
|
777
|
-
console.log(' - Web Client ID:', config.webClientId ? config.webClientId.substring(0, 20) + '...' : 'not provided');
|
|
778
|
-
console.log(' - iOS Client ID:', config.iosClientId ? config.iosClientId.substring(0, 20) + '...' : 'not provided');
|
|
779
|
-
}
|
|
780
|
-
};
|
|
781
|
-
|
|
782
|
-
/**
|
|
783
|
-
* Request email verification using developer API key
|
|
784
|
-
* @param email Email address to verify
|
|
785
|
-
* @param testMode Whether to use test mode
|
|
786
|
-
* @returns Promise with verification result
|
|
787
|
-
*/
|
|
788
|
-
export const requestEmailVerification = async (email, testMode = false) => {
|
|
789
|
-
try {
|
|
790
|
-
console.log('๐ง Requesting email verification for:', email);
|
|
791
|
-
const response = await makeDeveloperRequest('/email/verification', {
|
|
792
|
-
method: 'POST',
|
|
793
|
-
body: JSON.stringify({
|
|
794
|
-
email,
|
|
795
|
-
action: 'request',
|
|
796
|
-
testMode
|
|
797
|
-
})
|
|
798
|
-
});
|
|
799
|
-
const data = await response.json();
|
|
800
|
-
if (response.ok && data.success) {
|
|
801
|
-
console.log('โ
Email verification requested successfully');
|
|
802
|
-
return {
|
|
803
|
-
success: true,
|
|
804
|
-
message: data.message || 'Verification code sent to your email'
|
|
805
|
-
};
|
|
806
|
-
} else {
|
|
807
|
-
console.error('โ Email verification request failed:', data.error);
|
|
808
|
-
return {
|
|
809
|
-
success: false,
|
|
810
|
-
error: data.error || 'Failed to send verification code'
|
|
811
|
-
};
|
|
812
|
-
}
|
|
813
|
-
} catch (error) {
|
|
814
|
-
console.error('โ Error requesting email verification:', error);
|
|
815
|
-
return {
|
|
816
|
-
success: false,
|
|
817
|
-
error: error instanceof Error ? error.message : 'Network error'
|
|
818
|
-
};
|
|
819
|
-
}
|
|
820
|
-
};
|
|
821
|
-
|
|
822
|
-
/**
|
|
823
|
-
* Verify email code and store JWT token
|
|
824
|
-
* @param email Email address
|
|
825
|
-
* @param code Verification code
|
|
826
|
-
* @param testMode Whether to use test mode
|
|
827
|
-
* @returns Promise with verification result and JWT token
|
|
828
|
-
*/
|
|
829
|
-
export const verifyEmailCode = async (email, code, testMode = false) => {
|
|
830
|
-
try {
|
|
831
|
-
console.log('๐ Verifying email code for:', email);
|
|
832
|
-
const response = await makeDeveloperRequest('/email/verification', {
|
|
833
|
-
method: 'POST',
|
|
834
|
-
body: JSON.stringify({
|
|
835
|
-
email,
|
|
836
|
-
action: 'verify',
|
|
837
|
-
code,
|
|
838
|
-
testMode
|
|
839
|
-
})
|
|
840
|
-
});
|
|
841
|
-
const data = await response.json();
|
|
842
|
-
if (response.ok && data.success) {
|
|
843
|
-
console.log('โ
Email verification successful');
|
|
844
|
-
|
|
845
|
-
// Store JWT token if received
|
|
846
|
-
if (data.token || data.jwtToken) {
|
|
847
|
-
const jwtToken = data.token || data.jwtToken;
|
|
848
|
-
await storeJWT(jwtToken);
|
|
849
|
-
console.log('๐ซ JWT token stored successfully');
|
|
850
|
-
}
|
|
851
|
-
return {
|
|
852
|
-
success: true,
|
|
853
|
-
message: data.message || 'Email verified successfully',
|
|
854
|
-
existingUser: data.existingUser || false,
|
|
855
|
-
token: data.token || data.jwtToken
|
|
856
|
-
};
|
|
857
|
-
} else {
|
|
858
|
-
console.error('โ Email verification failed:', data.error);
|
|
859
|
-
return {
|
|
860
|
-
success: false,
|
|
861
|
-
error: data.error || 'Invalid verification code'
|
|
862
|
-
};
|
|
863
|
-
}
|
|
864
|
-
} catch (error) {
|
|
865
|
-
console.error('โ Error verifying email code:', error);
|
|
866
|
-
return {
|
|
867
|
-
success: false,
|
|
868
|
-
error: error instanceof Error ? error.message : 'Network error'
|
|
869
|
-
};
|
|
870
|
-
}
|
|
871
|
-
};
|
|
872
|
-
|
|
873
|
-
/**
|
|
874
|
-
* Check email verification status
|
|
875
|
-
* @param email Email address
|
|
876
|
-
* @param testMode Whether to use test mode
|
|
877
|
-
* @returns Promise with status result
|
|
878
|
-
*/
|
|
879
|
-
export const checkEmailVerificationStatus = async (email, testMode = false) => {
|
|
880
|
-
try {
|
|
881
|
-
console.log('๐ Checking email verification status for:', email);
|
|
882
|
-
const response = await makeDeveloperRequest('/email/verification/status', {
|
|
883
|
-
method: 'POST',
|
|
884
|
-
body: JSON.stringify({
|
|
885
|
-
email,
|
|
886
|
-
testMode
|
|
887
|
-
})
|
|
888
|
-
});
|
|
889
|
-
const data = await response.json();
|
|
890
|
-
if (response.ok && data.success) {
|
|
891
|
-
return {
|
|
892
|
-
success: true,
|
|
893
|
-
isPending: data.isPending || false
|
|
894
|
-
};
|
|
895
|
-
} else {
|
|
896
|
-
return {
|
|
897
|
-
success: false,
|
|
898
|
-
error: data.error || 'Failed to check verification status'
|
|
899
|
-
};
|
|
900
|
-
}
|
|
901
|
-
} catch (error) {
|
|
902
|
-
console.error('โ Error checking email verification status:', error);
|
|
903
|
-
return {
|
|
904
|
-
success: false,
|
|
905
|
-
error: error instanceof Error ? error.message : 'Network error'
|
|
906
|
-
};
|
|
907
|
-
}
|
|
908
|
-
};
|
|
909
|
-
|
|
910
|
-
/**
|
|
911
|
-
* Disconnect a platform (uses developer API key)
|
|
912
|
-
* @param platform Platform to disconnect
|
|
913
|
-
* @param username Username associated with the platform
|
|
914
|
-
* @returns Promise with disconnect result
|
|
915
|
-
*/
|
|
916
|
-
export const disconnectPlatform = async (platform, username) => {
|
|
917
|
-
try {
|
|
918
|
-
console.log('๐ Disconnecting platform:', platform, 'for user:', username);
|
|
919
|
-
|
|
920
|
-
// Make authenticated API call to disconnect platform
|
|
921
|
-
const response = await makeDeveloperRequest('/revoke', {
|
|
922
|
-
method: 'POST',
|
|
923
|
-
body: JSON.stringify({
|
|
924
|
-
platform,
|
|
925
|
-
username
|
|
926
|
-
})
|
|
927
|
-
});
|
|
928
|
-
const data = await response.json();
|
|
929
|
-
if (response.ok && data.success) {
|
|
930
|
-
console.log(`โ
${platform} disconnected successfully`);
|
|
931
|
-
return {
|
|
932
|
-
success: true
|
|
933
|
-
};
|
|
934
|
-
} else {
|
|
935
|
-
console.error(`โ Failed to disconnect ${platform}:`, data.error);
|
|
936
|
-
return {
|
|
937
|
-
success: false,
|
|
938
|
-
error: data.error || 'Failed to disconnect platform'
|
|
939
|
-
};
|
|
940
|
-
}
|
|
941
|
-
} catch (error) {
|
|
942
|
-
console.error(`โ Error disconnecting ${platform}:`, error);
|
|
943
|
-
return {
|
|
944
|
-
success: false,
|
|
945
|
-
error: error instanceof Error ? error.message : 'Network error'
|
|
946
|
-
};
|
|
947
|
-
}
|
|
948
|
-
};
|
|
949
|
-
|
|
950
|
-
/**
|
|
951
|
-
* Store PIN for user (uses JWT authentication and extracts username from JWT)
|
|
952
|
-
* @param pin User PIN
|
|
953
|
-
* @param username Optional username (if not provided, extracts from JWT)
|
|
954
|
-
* @returns Promise with result
|
|
955
|
-
*/
|
|
956
|
-
export const storePIN = async (pin, username) => {
|
|
957
|
-
try {
|
|
958
|
-
// Extract username from JWT if not provided
|
|
959
|
-
const userToStore = username || extractUsernameFromJWT();
|
|
960
|
-
if (!userToStore) {
|
|
961
|
-
console.error('โ No username available - either provide username or ensure JWT token is valid');
|
|
962
|
-
return {
|
|
963
|
-
success: false,
|
|
964
|
-
error: 'No username available for PIN storage'
|
|
965
|
-
};
|
|
966
|
-
}
|
|
967
|
-
console.log('๐ Storing PIN for user:', userToStore);
|
|
968
|
-
|
|
969
|
-
// Make authenticated request to store PIN (using developer API key for now)
|
|
970
|
-
const response = await makeDeveloperRequest('/store-pin/web', {
|
|
971
|
-
method: 'POST',
|
|
972
|
-
headers: {
|
|
973
|
-
'Content-Type': 'application/json'
|
|
974
|
-
},
|
|
975
|
-
body: JSON.stringify({
|
|
976
|
-
username: userToStore,
|
|
977
|
-
pin
|
|
978
|
-
})
|
|
979
|
-
});
|
|
980
|
-
const data = await response.json();
|
|
981
|
-
if (response.ok && data.success) {
|
|
982
|
-
console.log('โ
PIN stored successfully for user:', userToStore);
|
|
983
|
-
return {
|
|
984
|
-
success: true
|
|
985
|
-
};
|
|
986
|
-
} else {
|
|
987
|
-
console.error('โ Failed to store PIN:', data.error);
|
|
988
|
-
return {
|
|
989
|
-
success: false,
|
|
990
|
-
error: data.error || 'Failed to store PIN'
|
|
991
|
-
};
|
|
992
|
-
}
|
|
993
|
-
} catch (error) {
|
|
994
|
-
console.error('โ Error storing PIN:', error);
|
|
995
|
-
return {
|
|
996
|
-
success: false,
|
|
997
|
-
error: error instanceof Error ? error.message : 'Network error'
|
|
998
|
-
};
|
|
999
|
-
}
|
|
1000
|
-
};
|
|
1001
|
-
|
|
1002
|
-
/**
|
|
1003
|
-
* ๐ซ GET STORED JWT TOKEN
|
|
1004
|
-
* Helper function to retrieve stored JWT token from email verification or other sources
|
|
1005
|
-
*/
|
|
1006
|
-
export const getStoredJwtToken = async () => {
|
|
1007
|
-
try {
|
|
1008
|
-
console.log('๐ซ Retrieving stored JWT token...');
|
|
1009
|
-
|
|
1010
|
-
// Try different storage keys in order of preference
|
|
1011
|
-
const tokenSources = ['email_verification_token', 'onairos_jwt_token', 'enoch_token', 'auth_token'];
|
|
1012
|
-
for (const source of tokenSources) {
|
|
1013
|
-
const token = await AsyncStorage.getItem(source);
|
|
1014
|
-
if (token && token.length > 20) {
|
|
1015
|
-
console.log(`โ
JWT token found in ${source}:`, token.substring(0, 20) + '...');
|
|
1016
|
-
return token;
|
|
1017
|
-
}
|
|
1018
|
-
}
|
|
1019
|
-
console.warn('โ ๏ธ No JWT token found in storage');
|
|
1020
|
-
return null;
|
|
1021
|
-
} catch (error) {
|
|
1022
|
-
console.error('โ Error retrieving JWT token:', error);
|
|
1023
|
-
return null;
|
|
1024
|
-
}
|
|
1025
|
-
};
|
|
1026
|
-
|
|
1027
|
-
/**
|
|
1028
|
-
* ๐ซ CLEAR STORED TOKENS
|
|
1029
|
-
* Helper function to clear all stored tokens (useful for logout)
|
|
1030
|
-
*/
|
|
1031
|
-
export const clearStoredTokens = async () => {
|
|
1032
|
-
try {
|
|
1033
|
-
console.log('๐งน Clearing all stored tokens...');
|
|
1034
|
-
const tokenKeys = ['email_verification_token', 'onairos_jwt_token', 'enoch_token', 'auth_token', 'email_verification_email', 'email_verification_request_id', 'email_verification_request_email', 'token_timestamp', 'user_pin_stored', 'pin_storage_timestamp'];
|
|
1035
|
-
await Promise.all(tokenKeys.map(key => AsyncStorage.removeItem(key)));
|
|
1036
|
-
console.log('โ
All tokens cleared successfully');
|
|
1037
|
-
} catch (error) {
|
|
1038
|
-
console.error('โ Error clearing tokens:', error);
|
|
1039
|
-
}
|
|
1040
|
-
};
|
|
1041
|
-
//# sourceMappingURL=platformAuthService.js.map
|
|
1
|
+
import{Platform}from'react-native';import{GoogleSignin,statusCodes}from'@react-native-google-signin/google-signin';import AsyncStorage from'@react-native-async-storage/async-storage';import{API_CONFIG,getApiHeaders,getUserAuthHeaders}from'../config/api';import{getApiConfig,isApiKeyInitialized}from'./apiKeyService';import{getJWT}from'./jwtStorageService';const getDeveloperAuthHeaders=()=>{const _0x5d7322={'RBAln':function(_0x175129){return _0x175129();},'zrLTe':_0x4a83(0x0),'OhpfO':function(_0x1c0cdd,_0x45fcf8){return _0x1c0cdd!==_0x45fcf8;},'pTOMS':'No\x20API\x20key\x20configured.\x20Please\x20initialize\x20the\x20SDK\x20with\x20a\x20valid\x20developer\x20API\x20key.','VpAfv':function(_0x54fd20){return _0x54fd20();},'IqJru':'3.0.72'};if(!_0x5d7322['RBAln'](isApiKeyInitialized))throw new Error(_0x5d7322[_0x4a83(0x1)]);const _0x31880d=_0x5d7322[_0x4a83(0x2)](getApiConfig);if(!(_0x5d7322['OhpfO'](_0x31880d,null)&&_0x31880d!==void 0x0&&_0x31880d[_0x4a83(0x3)]))throw new Error(_0x5d7322[_0x4a83(0x4)]);return{..._0x5d7322[_0x4a83(0x5)](getApiHeaders),'Authorization':_0x4a83(0x6)+_0x31880d[_0x4a83(0x3)],'X-SDK-Version':_0x5d7322['IqJru'],'X-SDK-Platform':'react-native'};},WEB_CLIENT_ID=_0x4a83(0x7),IOS_CLIENT_ID='1030678346906-lovkuds2ouqmoc8eu5qpo98spa6edv4o.apps.googleusercontent.com',OAUTH_CONFIG={'instagram':{'authUrl':'https://api.instagram.com/oauth/authorize','clientId':_0x4a83(0x8),'redirectUri':_0x4a83(0x9),'scope':_0x4a83(0xa),'responseType':_0x4a83(0xb),'hasNativeSDK':![]},'youtube':{'authUrl':API_CONFIG[_0x4a83(0xc)]+_0x4a83(0xd),'clientId':_0x4a83(0x7),'redirectUri':_0x4a83(0x9),'scope':_0x4a83(0xe),'responseType':_0x4a83(0xb),'hasNativeSDK':!![]},'reddit':{'authUrl':API_CONFIG[_0x4a83(0xc)]+_0x4a83(0xf),'clientId':'demo_reddit_client_id','redirectUri':'onairosevents://auth/callback','scope':'identity,read','responseType':'code','hasNativeSDK':![]},'pinterest':{'authUrl':API_CONFIG['BASE_URL']+_0x4a83(0x10),'clientId':'demo_pinterest_client_id','redirectUri':_0x4a83(0x9),'scope':_0x4a83(0x11),'responseType':_0x4a83(0xb),'hasNativeSDK':![]},'facebook':{'authUrl':_0x4a83(0x12),'clientId':_0x4a83(0x13),'redirectUri':_0x4a83(0x9),'scope':'public_profile,email','responseType':_0x4a83(0xb),'hasNativeSDK':![]},'linkedin':{'authUrl':API_CONFIG[_0x4a83(0xc)]+'/linkedin/authorize','clientId':'','redirectUri':_0x4a83(0x9),'scope':_0x4a83(0x14),'responseType':_0x4a83(0xb),'hasNativeSDK':![]},'gmail':{'authUrl':API_CONFIG[_0x4a83(0xc)]+_0x4a83(0x15),'clientId':_0x4a83(0x16),'redirectUri':_0x4a83(0x9),'scope':_0x4a83(0x17),'responseType':_0x4a83(0xb),'hasNativeSDK':![]},'email':{'hasNativeSDK':![],'authUrl':API_CONFIG['BASE_URL']+'/email/authorize'},'chatgpt':{'authUrl':_0x4a83(0x18),'clientId':'','redirectUri':'','scope':'','responseType':'','hasNativeSDK':![]},'claude':{'authUrl':_0x4a83(0x19),'clientId':'','redirectUri':'','scope':'','responseType':'','hasNativeSDK':![]},'gemini':{'authUrl':_0x4a83(0x1a),'clientId':'','redirectUri':'','scope':'','responseType':'','hasNativeSDK':![]},'grok':{'authUrl':'https://x.com/i/grok','clientId':'','redirectUri':'','scope':'','responseType':'','hasNativeSDK':![]},'hinge':{'authUrl':_0x4a83(0x1b),'clientId':'','redirectUri':'','scope':'','responseType':'','hasNativeSDK':![]},'instagram_webview':{'authUrl':_0x4a83(0x1c),'clientId':'','redirectUri':'','scope':'','responseType':'','hasNativeSDK':![]},'sephora':{'authUrl':'https://www.sephora.com','clientId':'','redirectUri':'','scope':'','responseType':'','hasNativeSDK':![]},'telegram':{'authUrl':_0x4a83(0x1d),'clientId':'','redirectUri':'','scope':'','responseType':'','hasNativeSDK':![]}};export const hasNativeSDK=_0x2b3f86=>{const _0x355a54={'KXDDC':function(_0x290183,_0x25ab41){return _0x290183===_0x25ab41;}};var _0x2c1e64;return(_0x355a54[_0x4a83(0x1e)](_0x2c1e64=OAUTH_CONFIG[_0x2b3f86],null)||_0x355a54['KXDDC'](_0x2c1e64,void 0x0)?void 0x0:_0x2c1e64[_0x4a83(0x1f)])||![];};export const testApiConnectivity=async()=>{const _0x346cbb={'ddgmd':_0x4a83(0x20),'BrKqz':function(_0x3b1139,_0x1c7f84,_0x2f5aae){return _0x3b1139(_0x1c7f84,_0x2f5aae);},'tLTbh':function(_0x40c78b,_0x1bde84){return _0x40c78b(_0x1bde84);},'UwcYN':_0x4a83(0x21),'iPsOB':_0x4a83(0x22),'MQMMJ':_0x4a83(0x23),'kwKaU':_0x4a83(0x24),'rXcou':'HEAD','DyphP':_0x4a83(0x25),'LvQKp':_0x4a83(0x26),'ILpjV':function(_0x2191d1,_0xab7af1){return _0x2191d1===_0xab7af1;},'JYzpA':_0x4a83(0x27),'DEPzV':_0x4a83(0x28),'NKzAO':_0x4a83(0x29),'lpMAu':function(_0x1c132c,_0x391b92,_0x59d1de){return _0x1c132c(_0x391b92,_0x59d1de);},'OIqUr':function(_0x72ced3,_0x2c0805,_0x186b67){return _0x72ced3(_0x2c0805,_0x186b67);},'Stddv':_0x4a83(0x2a),'glttp':_0x4a83(0x2b),'PbDpU':function(_0x531fb3,_0x4dbaad){return _0x531fb3!==_0x4dbaad;},'YhsNF':'API\x20is\x20reachable','Vablg':function(_0x2c1010,_0x184a50){return _0x2c1010!==_0x184a50;},'sVCos':_0x4a83(0x2c),'GJJnM':_0x4a83(0x2d),'jTfzZ':_0x4a83(0x2e)},_0x2bd5f1={'googleTest':null,'api2Test':null};try{var _0x3ae791,_0x40e1e7;console[_0x4a83(0x2f)](_0x346cbb[_0x4a83(0x30)]),console[_0x4a83(0x2f)](_0x346cbb['MQMMJ']);try{const _0x585fa9=await _0x346cbb[_0x4a83(0x31)](fetch,_0x346cbb[_0x4a83(0x32)],{'method':_0x346cbb['rXcou'],'mode':_0x346cbb[_0x4a83(0x33)]});_0x2bd5f1[_0x4a83(0x34)]={'success':!![],'status':_0x346cbb['LvQKp']},console[_0x4a83(0x2f)](_0x4a83(0x35));}catch(_0x138a25){if(_0x346cbb[_0x4a83(0x36)](_0x346cbb[_0x4a83(0x37)],_0x4a83(0x27)))_0x2bd5f1[_0x4a83(0x34)]={'success':![],'error':_0x138a25['message']},console['error'](_0x346cbb[_0x4a83(0x38)],_0x138a25[_0x4a83(0x39)]);else return _0x25e923[_0x4a83(0x2f)](_0x4a83(0x3a)),new _0x3bfb29(_0x984e98=>{const _0x16333a={'litWf':_0x346cbb[_0x4a83(0x3b)]};_0x346cbb['BrKqz'](_0x2b15a9,()=>{_0x3209f1['log'](_0x16333a[_0x4a83(0x3c)]),_0x984e98(!![]);},0x3e8);});}console[_0x4a83(0x2f)](_0x346cbb[_0x4a83(0x3d)]);try{const _0x320c19=new AbortController(),_0x372111=_0x346cbb[_0x4a83(0x3e)](setTimeout,()=>_0x320c19[_0x4a83(0x3f)](),0x7530),_0x31ed43=await _0x346cbb[_0x4a83(0x40)](fetch,API_CONFIG[_0x4a83(0xc)]+_0x4a83(0x41),{'method':'GET','signal':_0x320c19['signal']});_0x346cbb[_0x4a83(0x42)](clearTimeout,_0x372111);const _0x3e443a=await _0x31ed43[_0x4a83(0x43)]()[_0x4a83(0x44)](()=>_0x4a83(0x45));_0x2bd5f1['api2Test']={'success':_0x31ed43['ok'],'status':_0x31ed43[_0x4a83(0x46)],'statusText':_0x31ed43[_0x4a83(0x47)],'response':_0x3e443a['substring'](0x0,0xc8)},_0x31ed43['ok']?_0x346cbb[_0x4a83(0x36)](_0x4a83(0x48),_0x4a83(0x49))?(_0x453cfa[_0x4a83(0x2f)](_0x346cbb[_0x4a83(0x3b)]),_0x346cbb['tLTbh'](_0xfa9659,!![])):console['log'](_0x346cbb[_0x4a83(0x4a)]):console[_0x4a83(0x2f)](_0x4a83(0x4b)+_0x31ed43['status']);}catch(_0xfc7666){_0x2bd5f1['api2Test']={'success':![],'error':_0xfc7666[_0x4a83(0x39)],'name':_0xfc7666['name']},console['error'](_0x346cbb['glttp'],_0xfc7666['message']);}if(_0x346cbb[_0x4a83(0x4c)](_0x3ae791=_0x2bd5f1[_0x4a83(0x4d)],null)&&_0x3ae791!==void 0x0&&_0x3ae791[_0x4a83(0x4e)])return{'success':!![],'message':_0x346cbb[_0x4a83(0x4f)],'details':_0x2bd5f1};else return _0x346cbb[_0x4a83(0x50)](_0x40e1e7=_0x2bd5f1[_0x4a83(0x34)],null)&&_0x346cbb[_0x4a83(0x4c)](_0x40e1e7,void 0x0)&&_0x40e1e7[_0x4a83(0x4e)]?{'success':![],'message':_0x4a83(0x51),'details':_0x2bd5f1}:{'success':![],'message':_0x346cbb[_0x4a83(0x52)],'details':_0x2bd5f1};}catch(_0x3e0e09){return _0x346cbb[_0x4a83(0x36)](_0x346cbb[_0x4a83(0x53)],_0x346cbb['GJJnM'])?(console['error'](_0x346cbb[_0x4a83(0x54)],_0x3e0e09[_0x4a83(0x39)]),{'success':![],'message':_0x4a83(0x55)+_0x3e0e09['message'],'details':{'error':_0x3e0e09[_0x4a83(0x39)],'results':_0x2bd5f1}}):{'success':![],'error':_0x54df37[_0x4a83(0x39)]||_0x346cbb['UwcYN']};}};export const initiateOAuth=async(_0x2b4afa,_0x2c23b0)=>{const _0x4fb9da={'QInbF':_0x4a83(0x56),'aUyeQ':'๐ง\x20Platform\x20auth\x20service\x20initialized','gMyFc':function(_0x543c56){return _0x543c56();},'KPOQd':_0x4a83(0x57),'PsQLv':'elQCB','adlaf':'โน๏ธ\x20No\x20valid\x20authentication\x20token\x20found\x20for\x20YouTube\x20connection','vrpkz':'โน๏ธ\x20NOTE:\x20SDK\x20does\x20not\x20create\x20users\x20during\x20YouTube\x20connection','ySKzR':_0x4a83(0x58),'lakKh':'email','aWAcu':_0x4a83(0x59),'dJDjr':function(_0x445385){return _0x445385();},'QKGIJ':function(_0x34a349,_0x5bfb21,_0xb59e27){return _0x34a349(_0x5bfb21,_0xb59e27);},'RdRPq':function(_0x5b7530,_0x5d99f8,_0x5b9d98){return _0x5b7530(_0x5d99f8,_0x5b9d98);},'lkBGp':_0x4a83(0x5a),'VzNgb':function(_0x3b1e2d,_0x2cd01e){return _0x3b1e2d!==_0x2cd01e;},'GtgZY':_0x4a83(0x5b),'dQghj':_0x4a83(0x5c),'kuBPR':'\x20\x20\x201.\x20No\x20internet\x20connection\x20on\x20device/simulator','zzLyV':_0x4a83(0x5d),'TuqcT':_0x4a83(0x5e),'jeDKz':_0x4a83(0x5f),'UVyzn':function(_0x494cd9,_0x308a32){return _0x494cd9!==_0x308a32;},'RjqIb':_0x4a83(0x60)};try{console[_0x4a83(0x2f)](_0x4a83(0x61)+_0x2b4afa),console[_0x4a83(0x2f)](_0x4a83(0x62)+Platform['OS']+_0x4a83(0x63)+Platform[_0x4a83(0x64)]);if(_0x2b4afa===_0x4fb9da['lakKh']){if(_0x4a83(0x59)!==_0x4fb9da[_0x4a83(0x65)])_0x4593af[_0x4a83(0x66)](_0x4fb9da['QInbF'],_0x2399f8);else return console['log'](_0x4a83(0x67)),API_CONFIG[_0x4a83(0xc)]+_0x4a83(0x68);}let _0x2c48b7;try{_0x2c48b7=await _0x4fb9da['dJDjr'](getUserAuthHeaders),console['log']('๐\x20[OAUTH]\x20Using\x20User\x20JWT\x20for\x20authentication');}catch(_0x785761){return console['error']('โ\x20[OAUTH]\x20User\x20not\x20authenticated\x20-\x20cannot\x20initiate\x20'+_0x2b4afa+_0x4a83(0x69)),console[_0x4a83(0x66)](_0x4a83(0x6a)),null;}const _0x34bace=API_CONFIG[_0x4a83(0xc)]+'/'+_0x2b4afa+_0x4a83(0x6b);console[_0x4a83(0x2f)](_0x4a83(0x6c)+_0x34bace),console[_0x4a83(0x2f)](_0x4a83(0x6d));const _0x3bd289={'platform':_0x2b4afa,'timestamp':new Date()['toISOString']()};console[_0x4a83(0x2f)]('๐ค\x20[OAUTH]\x20Request\x20body:',_0x3bd289);const _0x45bbc3=new AbortController(),_0x30c737=_0x4fb9da['QKGIJ'](setTimeout,()=>{const _0x46ad8d={'rJcgB':_0x4fb9da['aUyeQ'],'rPAOI':function(_0x575101){return _0x4fb9da[_0x4a83(0x6e)](_0x575101);}};_0x4fb9da[_0x4a83(0x6f)]!==_0x4fb9da['PsQLv']?(console['log'](_0x4a83(0x70)+_0x2b4afa+_0x4a83(0x71)),_0x45bbc3[_0x4a83(0x3f)]()):(_0x1ed356['log'](_0x46ad8d[_0x4a83(0x72)]),_0x46ad8d[_0x4a83(0x73)](_0x40966f));},0x7530),_0x5d496a=await _0x4fb9da[_0x4a83(0x74)](fetch,_0x34bace,{'method':'POST','headers':_0x2c48b7,'body':JSON[_0x4a83(0x75)](_0x3bd289),'signal':_0x45bbc3[_0x4a83(0x76)]});clearTimeout(_0x30c737),console['log'](_0x4a83(0x77)+_0x5d496a[_0x4a83(0x46)]+'\x20'+_0x5d496a[_0x4a83(0x47)]);if(!_0x5d496a['ok']){const _0x31528d=await _0x5d496a['text']();return console[_0x4a83(0x66)](_0x4a83(0x78)+_0x2b4afa+':\x20'+_0x5d496a[_0x4a83(0x46)]+_0x4a83(0x79)+_0x31528d),null;}const _0x3073f0=await _0x5d496a['json']();console['log'](_0x4a83(0x7a)+_0x2b4afa+':',_0x3073f0);const _0x15d296=_0x2b4afa+_0x4a83(0x7b),_0xd36665=_0x3073f0[_0x15d296]||_0x3073f0[_0x4a83(0x7c)]||null;return console[_0x4a83(0x2f)]('๐\x20[OAUTH]\x20Auth\x20URL\x20for\x20'+_0x2b4afa+'\x20(key:\x20'+_0x15d296+'):',_0xd36665),_0xd36665;}catch(_0x1e2c09){var _0x20e51b;if(_0x1e2c09[_0x4a83(0x7d)]===_0x4fb9da[_0x4a83(0x7e)])console[_0x4a83(0x66)](_0x4a83(0x7f)+_0x2b4afa+_0x4a83(0x80));else{if(_0x4fb9da[_0x4a83(0x81)](_0x20e51b=_0x1e2c09[_0x4a83(0x39)],null)&&_0x20e51b!==void 0x0&&_0x20e51b[_0x4a83(0x82)](_0x4fb9da[_0x4a83(0x83)])){const _0x30c1fc=_0x4fb9da[_0x4a83(0x84)]['split']('|');let _0x291380=0x0;while(!![]){switch(_0x30c1fc[_0x291380++]){case'0':console['error'](_0x4a83(0x85)+_0x2b4afa+_0x4a83(0x86));continue;case'1':console[_0x4a83(0x66)](_0x4fb9da['kuBPR']);continue;case'2':console[_0x4a83(0x66)](_0x4fb9da[_0x4a83(0x87)]);continue;case'3':console[_0x4a83(0x66)](_0x4fb9da[_0x4a83(0x88)]);continue;case'4':console[_0x4a83(0x66)](_0x4fb9da[_0x4a83(0x89)]);continue;case'5':console[_0x4a83(0x66)](_0x4a83(0x8a));continue;}break;}}else _0x4fb9da[_0x4a83(0x8b)](_0x4fb9da['RjqIb'],_0x4fb9da[_0x4a83(0x8c)])?(_0x2c1bff[_0x4a83(0x2f)](_0x4fb9da[_0x4a83(0x8d)]),_0x3da455[_0x4a83(0x2f)](_0x4fb9da[_0x4a83(0x8e)]),_0x1e321c['log'](_0x4fb9da[_0x4a83(0x8f)])):console[_0x4a83(0x66)](_0x4a83(0x78)+_0x2b4afa+':',_0x1e2c09);}return null;}};const initializeGoogleSignIn=()=>{const _0x35068d={'PkxJr':'https://www.googleapis.com/auth/youtube.readonly','uohIY':_0x4a83(0x90),'zhIFG':_0x4a83(0x91),'gpVvx':_0x4a83(0x92)};GoogleSignin[_0x4a83(0x93)]({'webClientId':WEB_CLIENT_ID,'iosClientId':IOS_CLIENT_ID,'offlineAccess':!![],'forceCodeForRefreshToken':!![],'scopes':[_0x35068d[_0x4a83(0x94)],_0x35068d[_0x4a83(0x95)],_0x35068d[_0x4a83(0x96)],_0x35068d[_0x4a83(0x97)]],'hostedDomain':'','accountName':''});};export const forceYouTubeReconnectionWithConsent=async _0x5b71f8=>{const _0x51fac9={'pFnDJ':_0x4a83(0x28),'jqIsq':_0x4a83(0x98),'tSfyz':'โ\x20Sign-in\x20already\x20in\x20progress','tsUKS':_0x4a83(0x99),'xGkxI':_0x4a83(0x9a),'aPcHY':'โ ๏ธ\x20Continuing\x20without\x20refresh\x20token\x20-\x20connection\x20may\x20fail\x20later','Glajm':_0x4a83(0x9b),'Vfqyr':function(_0x459708,_0x5cb00e){return _0x459708===_0x5cb00e;},'YeOvB':function(_0x478bc3,_0x1afca1){return _0x478bc3===_0x1afca1;},'eaulQ':_0x4a83(0x9c),'qtGbz':function(_0x55ca33,_0x1d582f){return _0x55ca33===_0x1d582f;},'HKBlY':function(_0x2ef165,_0x3ee4f7){return _0x2ef165===_0x3ee4f7;},'kykOO':_0x4a83(0x9d),'mmgAq':_0x4a83(0x2b),'hjVmh':_0x4a83(0x9e),'tugnh':_0x4a83(0x9f),'pNLkW':_0x4a83(0xa0),'CWLzL':'JxFFA','vJCxO':_0x4a83(0xa1),'GICrV':_0x4a83(0xa2),'gTjvx':function(_0x3432d0,_0xe9649c){return _0x3432d0!==_0xe9649c;},'EkpBK':_0x4a83(0xa3),'jEGpC':_0x4a83(0xa4),'UkUem':_0x4a83(0xa5),'RmdlZ':function(_0x21511d,_0x5a715b){return _0x21511d!==_0x5a715b;},'yaSEZ':_0x4a83(0xa6),'wrLwc':_0x4a83(0xe),'CKAnD':'openid','VKHtP':_0x4a83(0x91),'XlGdh':_0x4a83(0x92),'Wxfdg':_0x4a83(0xa7),'dMdCb':_0x4a83(0xa8),'whfZB':_0x4a83(0xa9),'NmVPO':_0x4a83(0xaa),'MccKQ':function(_0x3dda97,_0x484298){return _0x3dda97===_0x484298;},'LlrGp':function(_0x32958a,_0x5686f2){return _0x32958a===_0x5686f2;},'BUoiK':_0x4a83(0xab),'rfRiV':_0x4a83(0xac),'ZvOQO':_0x4a83(0xad),'lHPUH':'Missing','usAgd':_0x4a83(0xae),'lboXz':_0x4a83(0xaf),'zwVzG':function(_0xf83487,_0x49b307){return _0xf83487===_0x49b307;},'UsoQx':'โ
\x20SUCCESS:\x20Got\x20refresh\x20token\x20after\x20consent!','GkxCM':_0x4a83(0xb0),'QJsqU':_0x4a83(0xb1),'MYPHX':_0x4a83(0xb2),'hofLY':_0x4a83(0xb3),'wexec':function(_0x37bb14,_0x3c99e8,_0x15ec82){return _0x37bb14(_0x3c99e8,_0x15ec82);},'tlbHt':function(_0x1e0357,_0x5857c0){return _0x1e0357===_0x5857c0;},'GXkEY':_0x4a83(0xb4),'AEbix':function(_0x533cdc,_0x15844a){return _0x533cdc>_0x15844a;},'UzBMl':'kXSLO','KkTEs':_0x4a83(0xb5),'FDDDB':'โ
\x20YouTube\x20channel\x20found:','vCUlL':_0x4a83(0xb6),'VJhvL':_0x4a83(0xb7),'nCYgO':_0x4a83(0xb8),'uhOdK':function(_0x59642c,_0x409be7){return _0x59642c===_0x409be7;},'qTYzT':function(_0x36964d,_0x1387dc){return _0x36964d===_0x1387dc;},'pFlhn':_0x4a83(0xb9),'YhmPl':'โ ๏ธ\x20Failed\x20to\x20fetch\x20YouTube\x20channel\x20info:','zdrMl':function(_0x1f93af,_0x378124){return _0x1f93af===_0x378124;},'GkfFs':function(_0x2e97ca,_0x20e73b){return _0x2e97ca===_0x20e73b;},'yGGHX':function(_0x2c0203,_0x539012){return _0x2c0203===_0x539012;},'Rdjvd':_0x4a83(0xba),'FetmB':function(_0x15701a,_0x382c93){return _0x15701a===_0x382c93;},'ymhZx':function(_0x129654,_0x378b31){return _0x129654===_0x378b31;},'BWnTF':function(_0x5e90c4,_0x5a9b5e){return _0x5e90c4===_0x5a9b5e;},'SghoQ':function(_0x21fbd9,_0x263e5b){return _0x21fbd9===_0x263e5b;},'ToBix':'sIEOB','RGerh':_0x4a83(0xbb),'tyHHB':_0x4a83(0xbc),'QsdkA':function(_0xaaefad,_0x5a3510){return _0xaaefad===_0x5a3510;},'mmqhO':function(_0x517744,_0x25e2d4){return _0x517744===_0x25e2d4;},'oYjsZ':function(_0x1a3af1,_0x27c28f){return _0x1a3af1===_0x27c28f;},'UGbRU':function(_0x1c202d,_0x33ec14){return _0x1c202d===_0x33ec14;},'BbwbB':function(_0x538eb9,_0x3dbf69){return _0x538eb9===_0x3dbf69;},'mWXhD':function(_0x4a5f39,_0x3705c9){return _0x4a5f39*_0x3705c9;},'OXdwU':_0x4a83(0xbd),'rgxkp':_0x4a83(0xbe),'URVCb':function(_0xfcce62,_0x183dca){return _0xfcce62===_0x183dca;},'wjaNO':function(_0x14ecd7,_0x676544){return _0x14ecd7===_0x676544;},'XGXKa':function(_0x92baae,_0x1c46ef){return _0x92baae===_0x1c46ef;},'RVGdv':function(_0x4d2557,_0x52762c){return _0x4d2557===_0x52762c;},'waBjs':_0x4a83(0xbf),'MlxJO':_0x4a83(0xc0),'qkWpq':_0x4a83(0xc1),'Fjryi':_0x4a83(0xc2),'VsmQk':_0x4a83(0xc3),'AOZPn':_0x4a83(0xc4),'BihSd':function(_0x402cba,_0x10b522,_0x3c5537){return _0x402cba(_0x10b522,_0x3c5537);},'ctMWg':_0x4a83(0xc5),'YAbhv':function(_0x39097b,_0x55f17c){return _0x39097b===_0x55f17c;},'crDQC':function(_0x541940,_0x171ee4){return _0x541940===_0x171ee4;},'kKLAq':'temporary\x20access\x20token\x20mode','BYNsi':_0x4a83(0xc6),'rCLEJ':_0x4a83(0xc7),'fEBTj':_0x4a83(0xc8),'iHrAF':'๐\x20[YOUTUBE\x20REAUTH]\x20Refresh\x20token\x20sent:','sMfNL':_0x4a83(0xc9),'znYzH':_0x4a83(0xca),'FDFix':_0x4a83(0xcb),'Rqwfd':'๐\x20[YOUTUBE\x20REAUTH]\x20Refresh\x20token\x20type:','UefaV':_0x4a83(0xcc),'sjdmq':_0x4a83(0xcd),'SuEdN':_0x4a83(0xce),'inxAt':function(_0x3ee2f3,_0x5cfa8c,_0x216e0c){return _0x3ee2f3(_0x5cfa8c,_0x216e0c);},'hYutj':function(_0x2f7f94,_0x5e2c41){return _0x2f7f94===_0x5e2c41;},'AxryC':_0x4a83(0xcf),'gZddz':_0x4a83(0xd0),'NEtik':_0x4a83(0xd1),'GUhED':_0x4a83(0xd2),'iorVW':function(_0x4aff78,_0x5a7770){return _0x4aff78!==_0x5a7770;},'oKfFQ':'ZbiOk','wipRu':'xPgNJ','skovT':_0x4a83(0xd3),'uhLFC':function(_0x66b741,_0x3b57b4){return _0x66b741===_0x3b57b4;},'ZIHrj':_0x4a83(0xd4),'buKoa':'4|2|3|6|0|5|1','KkAmw':_0x4a83(0xd5),'xmrFx':_0x4a83(0xd6),'wgtOa':_0x4a83(0xd7),'Pyvcq':_0x4a83(0xd8),'vzctx':_0x4a83(0xd9),'vrhXF':_0x4a83(0xda),'DPUbo':_0x4a83(0xdb),'xJrFM':_0x4a83(0xdc),'yRrBf':_0x4a83(0xdd),'lGhKQ':function(_0x5cfb5f,_0x55fe52){return _0x5cfb5f===_0x55fe52;},'MqZWb':_0x4a83(0xde),'JTOjc':'ZxLfn'};try{var _0x5c6512,_0x46516e,_0x5d1155;console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0xdf)]),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0xe0)],_0x5b71f8);try{_0x51fac9['YeOvB'](_0x51fac9[_0x4a83(0xe1)],_0x51fac9[_0x4a83(0xe1)])?(await GoogleSignin[_0x4a83(0xe2)](),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0xe3)])):(_0x5364ca[_0x4a83(0x34)]={'success':![],'error':_0x31457d['message']},_0x3e0b57[_0x4a83(0x66)](_0x51fac9[_0x4a83(0xe4)],_0x46042d['message']));}catch(_0x4faa4b){console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0xe5)],_0x4faa4b);}try{const _0x37eb83=await GoogleSignin[_0x4a83(0xe6)]();if(_0x37eb83[_0x4a83(0xe7)]){if(_0x51fac9[_0x4a83(0xe8)](_0x51fac9['EkpBK'],_0x51fac9[_0x4a83(0xe9)]))await GoogleSignin[_0x4a83(0xea)](_0x37eb83[_0x4a83(0xe7)]),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0xeb)]);else return _0x37b421[_0x4a83(0xec)](_0x51fac9['jqIsq']),_0x3e74c0['warn']('โ ๏ธ\x20[YOUTUBE\x20REAUTH]\x20Response\x20data:',_0x121366),_0x3ba268[_0x4a83(0xec)](_0x4a83(0xed)),![];}}catch(_0x5bc056){if(_0x51fac9['RmdlZ'](_0x4a83(0xee),_0x4a83(0xee)))return _0x55dc38[_0x4a83(0x66)](_0x4a83(0xef)),![];else console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0xf0)]);}console[_0x4a83(0x2f)](_0x51fac9['yaSEZ']),GoogleSignin[_0x4a83(0x93)]({'webClientId':WEB_CLIENT_ID,'iosClientId':IOS_CLIENT_ID,'offlineAccess':!![],'forceCodeForRefreshToken':!![],'scopes':[_0x51fac9[_0x4a83(0xf1)],_0x51fac9[_0x4a83(0xf2)],_0x51fac9[_0x4a83(0xf3)],_0x51fac9['XlGdh']],'hostedDomain':'','accountName':''}),await GoogleSignin[_0x4a83(0xf4)](),console['log'](_0x4a83(0xf5)),console[_0x4a83(0x2f)](_0x51fac9['Wxfdg']),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0xf6)]);const _0xaeb65b=await GoogleSignin[_0x4a83(0xf7)]();console['log'](_0x51fac9[_0x4a83(0xf8)]),console['log'](_0x51fac9['NmVPO'],_0x51fac9[_0x4a83(0xf9)](_0x5c6512=_0xaeb65b[_0x4a83(0xfa)],null)||_0x51fac9[_0x4a83(0xfb)](_0x5c6512,void 0x0)||_0x51fac9['Vfqyr'](_0x5c6512=_0x5c6512[_0x4a83(0xfc)],null)||_0x51fac9[_0x4a83(0xfd)](_0x5c6512,void 0x0)?void 0x0:_0x5c6512[_0x4a83(0x92)]);const _0x104874=await GoogleSignin['getTokens'](),_0x54cb87=await GoogleSignin['getCurrentUser']();console['log'](_0x51fac9['BUoiK']),console['log'](JSON['stringify'](_0xaeb65b,null,0x2)),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0xfe)]),console[_0x4a83(0x2f)](JSON[_0x4a83(0x75)](_0x104874,null,0x2)),console[_0x4a83(0x2f)](_0x4a83(0xff)),console[_0x4a83(0x2f)](JSON[_0x4a83(0x75)](_0x54cb87,null,0x2)),console[_0x4a83(0x2f)](_0x4a83(0x100)),console['log'](_0x51fac9['ZvOQO'],_0x104874[_0x4a83(0xe7)]?_0x104874[_0x4a83(0xe7)][_0x4a83(0x101)](0x0,0x14)+_0x4a83(0x102):_0x51fac9[_0x4a83(0x103)]),console[_0x4a83(0x2f)](_0x4a83(0x104),_0x104874[_0x4a83(0x105)]?_0x51fac9[_0x4a83(0x106)]:_0x51fac9[_0x4a83(0x103)]),console[_0x4a83(0x2f)](_0x4a83(0x107),_0x51fac9['RmdlZ'](_0x46516e=_0xaeb65b[_0x4a83(0xfa)],null)&&_0x51fac9[_0x4a83(0xe8)](_0x46516e,void 0x0)&&_0x46516e[_0x4a83(0xb1)]?_0xaeb65b[_0x4a83(0xfa)][_0x4a83(0xb1)]['substring'](0x0,0x14)+_0x4a83(0x102):_0x51fac9['lHPUH']),console[_0x4a83(0x2f)](_0x51fac9['lboXz'],_0x51fac9['gTjvx'](_0x54cb87,null)&&_0x51fac9[_0x4a83(0xe8)](_0x54cb87,void 0x0)&&_0x54cb87[_0x4a83(0xb1)]?_0x54cb87[_0x4a83(0xb1)][_0x4a83(0x101)](0x0,0x14)+_0x4a83(0x102):_0x51fac9[_0x4a83(0x103)]);const _0x57e35b=((_0x5d1155=_0xaeb65b[_0x4a83(0xfa)])===null||_0x5d1155===void 0x0?void 0x0:_0x5d1155[_0x4a83(0xb1)])||(_0x54cb87===null||_0x51fac9[_0x4a83(0x108)](_0x54cb87,void 0x0)?void 0x0:_0x54cb87[_0x4a83(0xb1)]);if(_0x57e35b){var _0x37de4d,_0x3bbb3d,_0x362ba2,_0x53e542,_0x1af7e,_0x217e10;console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x109)]),console['log'](_0x51fac9[_0x4a83(0x10a)],_0x57e35b[_0x4a83(0x10b)]('4/')?_0x51fac9[_0x4a83(0x10c)]:_0x51fac9[_0x4a83(0x10d)]),console[_0x4a83(0x2f)]('๐\x20Refresh\x20token\x20preview:',_0x57e35b[_0x4a83(0x101)](0x0,0x14)+'...');let _0x27b5db=_0x51fac9['hofLY'],_0x5b8d9b=null;try{console['log'](_0x4a83(0x10e));const _0x4a14c0=await _0x51fac9[_0x4a83(0x10f)](fetch,_0x4a83(0x110),{'headers':{'Authorization':_0x4a83(0x6)+_0x104874['accessToken'],'Accept':'application/json'}});if(_0x4a14c0['ok']){if(_0x51fac9[_0x4a83(0x111)](_0x51fac9[_0x4a83(0x112)],_0x4a83(0xb4))){const _0x2d979f=await _0x4a14c0[_0x4a83(0x113)]();if(_0x2d979f['items']&&_0x51fac9[_0x4a83(0x114)](_0x2d979f[_0x4a83(0x115)][_0x4a83(0x116)],0x0)){if(_0x51fac9[_0x4a83(0x108)](_0x51fac9[_0x4a83(0x117)],_0x51fac9[_0x4a83(0x118)])){_0x3590c4[_0x4a83(0x66)](_0x4a83(0x119)+_0x52f013[_0x4a83(0x46)]);throw new _0x490df8(_0x4a83(0x11a)+_0x2e3ddf[_0x4a83(0x46)]);}else _0x27b5db=_0x2d979f[_0x4a83(0x115)][0x0][_0x4a83(0x11b)][_0x4a83(0x11c)],_0x5b8d9b=_0x2d979f[_0x4a83(0x115)][0x0]['id'],console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x11d)],_0x27b5db,_0x51fac9[_0x4a83(0x11e)],_0x5b8d9b);}else{if(_0x51fac9[_0x4a83(0x11f)](_0x51fac9[_0x4a83(0x120)],_0x51fac9[_0x4a83(0x121)]))return _0x5071e7[_0x4a83(0x66)](_0x4a83(0x122)),![];else{var _0x2ebba6,_0xbdf3ae;console[_0x4a83(0x2f)](_0x4a83(0x123)),_0x27b5db=((_0x2ebba6=_0xaeb65b[_0x4a83(0xfa)])===null||_0x51fac9[_0x4a83(0xfb)](_0x2ebba6,void 0x0)||(_0x2ebba6=_0x2ebba6[_0x4a83(0xfc)])===null||_0x51fac9[_0x4a83(0xf9)](_0x2ebba6,void 0x0)?void 0x0:_0x2ebba6[_0x4a83(0x7d)])||((_0xbdf3ae=_0xaeb65b[_0x4a83(0xfa)])===null||_0xbdf3ae===void 0x0||_0x51fac9[_0x4a83(0x124)](_0xbdf3ae=_0xbdf3ae[_0x4a83(0xfc)],null)||_0x51fac9[_0x4a83(0x125)](_0xbdf3ae,void 0x0)?void 0x0:_0xbdf3ae['email'])||_0x51fac9['kykOO'];}}}else _0x4bc585[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x126)]);}else{if(_0x51fac9[_0x4a83(0x127)](_0x51fac9[_0x4a83(0x128)],_0x51fac9['pFlhn'])){var _0x5dc87a,_0x59a159;console[_0x4a83(0x2f)](_0x51fac9['YhmPl'],_0x4a14c0[_0x4a83(0x46)]),_0x27b5db=(_0x51fac9[_0x4a83(0xf9)](_0x5dc87a=_0xaeb65b['data'],null)||_0x51fac9[_0x4a83(0x129)](_0x5dc87a,void 0x0)||_0x51fac9['GkfFs'](_0x5dc87a=_0x5dc87a['user'],null)||_0x51fac9[_0x4a83(0x111)](_0x5dc87a,void 0x0)?void 0x0:_0x5dc87a[_0x4a83(0x7d)])||(_0x51fac9['yGGHX'](_0x59a159=_0xaeb65b[_0x4a83(0xfa)],null)||_0x59a159===void 0x0||(_0x59a159=_0x59a159['user'])===null||_0x51fac9[_0x4a83(0x124)](_0x59a159,void 0x0)?void 0x0:_0x59a159[_0x4a83(0x92)])||_0x4a83(0xb3);}else _0xa041c6[_0x4a83(0x66)](_0x4a83(0x12a)),_0x298b06[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x12b)]),_0x28cb66[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x12c)]),_0x5cba20[_0x4a83(0xec)](_0x51fac9[_0x4a83(0x12d)]);}}catch(_0x31a5f1){var _0x5f27e4,_0x544a3a;console[_0x4a83(0x2f)](_0x51fac9['Rdjvd'],_0x31a5f1),_0x27b5db=(_0x51fac9[_0x4a83(0x12e)](_0x5f27e4=_0xaeb65b[_0x4a83(0xfa)],null)||_0x51fac9['FetmB'](_0x5f27e4,void 0x0)||_0x51fac9['ymhZx'](_0x5f27e4=_0x5f27e4[_0x4a83(0xfc)],null)||_0x51fac9[_0x4a83(0x12f)](_0x5f27e4,void 0x0)?void 0x0:_0x5f27e4[_0x4a83(0x7d)])||((_0x544a3a=_0xaeb65b[_0x4a83(0xfa)])===null||_0x51fac9[_0x4a83(0x130)](_0x544a3a,void 0x0)||_0x51fac9[_0x4a83(0x11f)](_0x544a3a=_0x544a3a[_0x4a83(0xfc)],null)||_0x51fac9[_0x4a83(0x131)](_0x544a3a,void 0x0)?void 0x0:_0x544a3a[_0x4a83(0x92)])||_0x4a83(0xb3);}let _0x245efb=await getJWT();(!_0x245efb||_0x245efb[_0x4a83(0x132)]()[_0x4a83(0x116)]<0x14)&&(_0x51fac9[_0x4a83(0x133)]!==_0x51fac9[_0x4a83(0x133)]?(_0x4b98ff['log'](_0x4a83(0x70)+_0x4fb64f+'\x20-\x20aborting'),_0x509323[_0x4a83(0x3f)]()):(console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x134)]),_0x245efb=_0x4a83(0x135)));const _0x216451={'session':{'username':_0x5b71f8,'platform':_0x51fac9[_0x4a83(0x136)],'timestamp':new Date()[_0x4a83(0x137)](),'channelName':_0x27b5db,'channelId':_0x5b8d9b,'forceConsent':!![]},'googleUser':_0x51fac9['BWnTF'](_0x37de4d=_0xaeb65b['data'],null)||_0x51fac9[_0x4a83(0x138)](_0x37de4d,void 0x0)?void 0x0:_0x37de4d[_0x4a83(0xfc)],'accessToken':_0x104874['accessToken'],'idToken':_0x104874[_0x4a83(0x105)],'refreshToken':_0x57e35b,'serverAuthCode':_0x57e35b,'refresh_token':_0x57e35b,'server_auth_code':_0x57e35b,'authCode':_0x57e35b,'userAccountInfo':{'username':_0x5b71f8,'email':_0x51fac9[_0x4a83(0x124)](_0x3bbb3d=_0xaeb65b[_0x4a83(0xfa)],null)||_0x51fac9[_0x4a83(0x12f)](_0x3bbb3d,void 0x0)||_0x51fac9[_0x4a83(0x139)](_0x3bbb3d=_0x3bbb3d[_0x4a83(0xfc)],null)||_0x3bbb3d===void 0x0?void 0x0:_0x3bbb3d[_0x4a83(0x92)],'authToken':_0x245efb,'channelName':_0x27b5db,'channelId':_0x5b8d9b,'userIdentifier':_0x245efb?'user-'+_0x245efb[_0x4a83(0x101)](0x0,0xa):'youtube-'+((_0x362ba2=_0xaeb65b[_0x4a83(0xfa)])===null||_0x51fac9['oYjsZ'](_0x362ba2,void 0x0)||(_0x362ba2=_0x362ba2[_0x4a83(0xfc)])===null||_0x51fac9[_0x4a83(0x13a)](_0x362ba2,void 0x0)?void 0x0:_0x362ba2[_0x4a83(0x92)]),'googleId':(_0x53e542=_0xaeb65b[_0x4a83(0xfa)])===null||_0x53e542===void 0x0||_0x51fac9[_0x4a83(0x13b)](_0x53e542=_0x53e542[_0x4a83(0xfc)],null)||_0x51fac9['BbwbB'](_0x53e542,void 0x0)?void 0x0:_0x53e542['id'],'refreshToken':_0x57e35b,'serverAuthCode':_0x57e35b},'tokenExpiry':new Date(Date[_0x4a83(0x13c)]()+_0x51fac9[_0x4a83(0x13d)](0xe10,0x3e8))['toISOString'](),'requestRefreshToken':!![],'debugInfo':{'hasRefreshToken':!![],'refreshTokenType':_0x57e35b[_0x4a83(0x10b)]('4/')?'serverAuthCode':_0x51fac9['MYPHX'],'configuredForRefresh':!![],'forcedConsent':!![],'consentMethod':_0x51fac9[_0x4a83(0x13e)],'refreshTokenValue':_0x57e35b}};console['log'](_0x51fac9['rgxkp'],{'hasAccessToken':!!_0x216451[_0x4a83(0xe7)],'hasRefreshToken':!!_0x216451[_0x4a83(0xb2)],'hasServerAuthCode':!!_0x216451[_0x4a83(0xb1)],'refreshTokenType':_0x216451[_0x4a83(0x13f)][_0x4a83(0x140)],'userEmail':_0x51fac9[_0x4a83(0x141)](_0x1af7e=_0xaeb65b['data'],null)||_0x51fac9[_0x4a83(0x142)](_0x1af7e,void 0x0)||_0x51fac9[_0x4a83(0x143)](_0x1af7e=_0x1af7e[_0x4a83(0xfc)],null)||_0x51fac9['RVGdv'](_0x1af7e,void 0x0)?void 0x0:_0x1af7e['email'],'forcedConsent':!![]}),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x144)]),console[_0x4a83(0x2f)](_0x51fac9['MlxJO']),console[_0x4a83(0x2f)]('\uD83D\uDE80 [YOUTUBE REAUTH] Method: POST'),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x145)],{'Content-Type':'application/json','Authorization':_0x245efb?_0x245efb[_0x4a83(0x101)](0x0,0x14)+_0x4a83(0x102):_0x51fac9['Fjryi']}),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x146)],{'hasAccessToken':!!_0x216451[_0x4a83(0xe7)],'hasRefreshToken':!!_0x216451[_0x4a83(0xb2)],'hasServerAuthCode':!!_0x216451[_0x4a83(0xb1)],'refreshTokenType':_0x216451['debugInfo'][_0x4a83(0x140)],'userEmail':_0x51fac9[_0x4a83(0x111)](_0x217e10=_0xaeb65b[_0x4a83(0xfa)],null)||_0x217e10===void 0x0||_0x51fac9[_0x4a83(0x142)](_0x217e10=_0x217e10['user'],null)||_0x51fac9[_0x4a83(0x142)](_0x217e10,void 0x0)?void 0x0:_0x217e10[_0x4a83(0x92)],'channelName':_0x27b5db,'forcedConsent':!![],'requestRefreshToken':!![]}),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x147)],JSON[_0x4a83(0x75)](_0x216451,null,0x2));const _0x1badf6=await _0x51fac9['BihSd'](fetch,API_CONFIG[_0x4a83(0xc)]+_0x4a83(0x148),{'method':'POST','headers':{'Content-Type':'application/json',..._0x245efb&&{'Authorization':_0x245efb}},'body':JSON[_0x4a83(0x75)](_0x216451)});console[_0x4a83(0x2f)](_0x4a83(0x149),_0x1badf6[_0x4a83(0x46)]),console[_0x4a83(0x2f)](_0x51fac9['ctMWg'],_0x1badf6[_0x4a83(0x47)]),console[_0x4a83(0x2f)](_0x4a83(0x14a),_0x1badf6[_0x4a83(0x14b)]);if(_0x1badf6['ok']){var _0x163e50,_0x1b35ea;const _0xd0fa5e=await _0x1badf6[_0x4a83(0x113)]();console[_0x4a83(0x2f)]('โ
\x20[YOUTUBE\x20REAUTH]\x20Backend\x20Response\x20SUCCESS:',JSON[_0x4a83(0x75)](_0xd0fa5e,null,0x2));const _0x1eca71=_0x51fac9['MccKQ'](_0x51fac9[_0x4a83(0xfd)](_0x163e50=_0xd0fa5e[_0x4a83(0x14c)],null)||_0x51fac9[_0x4a83(0x13a)](_0x163e50,void 0x0)?void 0x0:_0x163e50[_0x4a83(0x14d)],!![])||(_0x51fac9[_0x4a83(0x14e)](_0x1b35ea=_0xd0fa5e['temporaryMode'],null)||_0x51fac9[_0x4a83(0x14f)](_0x1b35ea,void 0x0)?void 0x0:_0x1b35ea['enabled'])===!![]||_0x51fac9['qtGbz'](_0xd0fa5e['isTemporaryMode'],!![])||_0xd0fa5e[_0x4a83(0x39)]&&_0xd0fa5e[_0x4a83(0x39)][_0x4a83(0x82)](_0x51fac9[_0x4a83(0x150)]);if(_0x1eca71)console[_0x4a83(0x2f)]('๐\x20[YOUTUBE\x20REAUTH]\x20YouTube\x20connected\x20in\x20temporary\x20mode'),console['log'](_0x51fac9[_0x4a83(0x151)]),console['log'](_0x4a83(0x152)),console[_0x4a83(0x2f)](_0x4a83(0x153)),console[_0x4a83(0x2f)](_0x51fac9['rCLEJ']),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x154)]),console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x155)],_0x57e35b?_0x4a83(0x156):'No');else{if(_0xd0fa5e[_0x4a83(0x157)]||_0xd0fa5e[_0x4a83(0x158)]){if(_0x51fac9[_0x4a83(0x159)](_0x51fac9[_0x4a83(0x15a)],_0x4a83(0xc9)))return _0x4c6bbc[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x15b)]),![];else{const _0x4848cc=_0x4a83(0x15c)[_0x4a83(0x15d)]('|');let _0x556ba3=0x0;while(!![]){switch(_0x4848cc[_0x556ba3++]){case'0':console[_0x4a83(0x2f)](_0x4a83(0x15e));continue;case'1':console[_0x4a83(0x2f)]('๐\x20[YOUTUBE\x20REAUTH]\x20SUCCESS:\x20Full\x20YouTube\x20connection\x20with\x20refresh\x20tokens!');continue;case'2':console['log'](_0x51fac9[_0x4a83(0x15f)],_0xd0fa5e[_0x4a83(0x157)]);continue;case'3':console[_0x4a83(0x2f)]('๐\x20[YOUTUBE\x20REAUTH]\x20Refresh\x20token\x20length:',_0x57e35b[_0x4a83(0x116)]);continue;case'4':console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x160)],_0x57e35b);continue;case'5':console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x161)],_0x57e35b['startsWith']('4/')?_0x51fac9['QJsqU']:'refreshToken');continue;case'6':console[_0x4a83(0x2f)](_0x51fac9[_0x4a83(0x162)]);continue;}break;}}}else return console['warn'](_0x51fac9[_0x4a83(0x163)]),console[_0x4a83(0xec)](_0x51fac9[_0x4a83(0x164)],_0xd0fa5e),console['warn'](_0x4a83(0xed)),![];}console['log'](_0x51fac9[_0x4a83(0x165)]);try{await _0x51fac9[_0x4a83(0x166)](triggerTrainingRestart,_0x5b71f8,_0x245efb),console['log'](_0x4a83(0x167));}catch(_0x7cf542){if(_0x51fac9['hYutj'](_0x51fac9['AxryC'],_0x51fac9[_0x4a83(0x168)])){var _0x308971;return(_0x51fac9[_0x4a83(0x11f)](_0x308971=_0x31cd11[_0x44664c],null)||_0x51fac9[_0x4a83(0xfb)](_0x308971,void 0x0)?void 0x0:_0x308971[_0x4a83(0x1f)])||![];}else console[_0x4a83(0xec)](_0x51fac9['NEtik'],_0x7cf542),console[_0x4a83(0xec)](_0x51fac9[_0x4a83(0x169)]);}return!![];}else{if(_0x51fac9[_0x4a83(0x16a)](_0x51fac9[_0x4a83(0x16b)],_0x51fac9[_0x4a83(0x16c)])){const _0x5858c6=await _0x1badf6['text']();return console[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x16d)],_0x1badf6['status'],_0x5858c6),console[_0x4a83(0x66)](_0x4a83(0x16e)),![];}else _0x56c4b1['log'](_0x51fac9['eaulQ']);}}else{if(_0x51fac9[_0x4a83(0x16f)](_0x51fac9['ZIHrj'],_0x51fac9[_0x4a83(0x170)])){const _0x3b142a=_0x51fac9['buKoa'][_0x4a83(0x15d)]('|');let _0x1f4ea4=0x0;while(!![]){switch(_0x3b142a[_0x1f4ea4++]){case'0':console[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x171)]);continue;case'1':return![];case'2':console[_0x4a83(0x66)](_0x51fac9['xmrFx']);continue;case'3':console[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x172)]);continue;case'4':console[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x173)]);continue;case'5':console['error'](_0x51fac9['vzctx']);continue;case'6':console[_0x4a83(0x66)](_0x51fac9['vrhXF']);continue;}break;}}else{var _0x22a172,_0x1565bb;_0x173c27[_0x4a83(0x2f)](_0x4a83(0x123)),_0x322014=(_0x51fac9[_0x4a83(0x12e)](_0x22a172=_0x4a2fe5[_0x4a83(0xfa)],null)||_0x51fac9[_0x4a83(0x12e)](_0x22a172,void 0x0)||(_0x22a172=_0x22a172['user'])===null||_0x51fac9[_0x4a83(0x11f)](_0x22a172,void 0x0)?void 0x0:_0x22a172['name'])||((_0x1565bb=_0x391b4e[_0x4a83(0xfa)])===null||_0x51fac9['YeOvB'](_0x1565bb,void 0x0)||_0x51fac9[_0x4a83(0x125)](_0x1565bb=_0x1565bb['user'],null)||_0x1565bb===void 0x0?void 0x0:_0x1565bb[_0x4a83(0x92)])||_0x51fac9[_0x4a83(0x174)];}}}catch(_0x257168){if(_0x51fac9[_0x4a83(0x16a)](_0x51fac9[_0x4a83(0x175)],_0x4a83(0xdb)))_0x2a591d[_0x4a83(0x4d)]={'success':![],'error':_0x541afc[_0x4a83(0x39)],'name':_0x225128['name']},_0x5b3b90[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x176)],_0x4ce2a4[_0x4a83(0x39)]);else{console[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x177)],_0x257168);if(_0x257168['code']===statusCodes['SIGN_IN_CANCELLED'])console[_0x4a83(0x66)](_0x4a83(0x178)),console[_0x4a83(0x66)](_0x51fac9['yRrBf']);else{if(_0x257168[_0x4a83(0xb)]===statusCodes['IN_PROGRESS'])console[_0x4a83(0x66)](_0x51fac9[_0x4a83(0x126)]);else{if(_0x51fac9[_0x4a83(0x179)](_0x257168[_0x4a83(0xb)],statusCodes[_0x4a83(0x17a)])){if(_0x51fac9['iorVW'](_0x51fac9[_0x4a83(0x17b)],_0x51fac9[_0x4a83(0x17c)]))console[_0x4a83(0x66)](_0x4a83(0x17d));else return _0x76f97['error']('โ\x20Error\x20verifying\x20email\x20code:',_0x365113),{'success':![],'error':_0x51fac9['hjVmh']};}}}return![];}}};export const forceYouTubeReconnectionWithRevoke=async _0x37041a=>{const _0x30378e={'iVAPU':_0x4a83(0x17e),'jWmiw':function(_0x415487,_0x1a5a46){return _0x415487===_0x1a5a46;},'pcZPi':_0x4a83(0x17f),'myGTb':_0x4a83(0x180),'CafdO':function(_0x91ada7){return _0x91ada7();},'vDiWM':function(_0x274aea,_0x1140df){return _0x274aea!==_0x1140df;},'fuyJT':'tipph','QgmBy':_0x4a83(0x181),'RzwqH':_0x4a83(0x182),'qxqLI':_0x4a83(0x183),'bffcK':function(_0x2ddb56,_0x381462){return _0x2ddb56===_0x381462;},'emPIv':_0x4a83(0x184),'MRvmo':_0x4a83(0xef),'QPfNS':_0x4a83(0x185)};try{if(_0x30378e[_0x4a83(0x186)](_0x4a83(0x187),_0x30378e[_0x4a83(0x188)]))return _0x1af90c[_0x4a83(0x66)](_0x30378e[_0x4a83(0x189)]),![];else{var _0x41d2d3;console['log'](_0x30378e['myGTb']),console[_0x4a83(0x2f)](_0x4a83(0xa0),_0x37041a),_0x30378e[_0x4a83(0x18a)](initializeGoogleSignIn),await GoogleSignin[_0x4a83(0xf4)]();try{_0x30378e[_0x4a83(0x18b)](_0x30378e[_0x4a83(0x18c)],_0x30378e['fuyJT'])?_0x110030[_0x4a83(0x2f)]('โน๏ธ\x20No\x20existing\x20permissions\x20to\x20revoke:',_0x56943a):(await GoogleSignin['revokeAccess'](),console[_0x4a83(0x2f)](_0x30378e[_0x4a83(0x18d)]));}catch(_0xbe5f6){if(_0x30378e[_0x4a83(0x186)](_0x4a83(0x18e),'oYxSj'))return{'success':![],'message':_0x4a83(0x2c),'details':_0x136944};else console[_0x4a83(0x2f)](_0x30378e[_0x4a83(0x18f)],_0xbe5f6);}await GoogleSignin['signOut'](),console[_0x4a83(0x2f)](_0x4a83(0x190)),console['log'](_0x30378e[_0x4a83(0x191)]);const _0xf2ce1e=await GoogleSignin[_0x4a83(0xf7)](),_0x3378ba=await GoogleSignin['getTokens'](),_0x3159d3=await GoogleSignin[_0x4a83(0x192)](),_0x1830ae=(_0x30378e[_0x4a83(0x193)](_0x41d2d3=_0xf2ce1e[_0x4a83(0xfa)],null)||_0x41d2d3===void 0x0?void 0x0:_0x41d2d3[_0x4a83(0xb1)])||(_0x30378e[_0x4a83(0x193)](_0x3159d3,null)||_0x3159d3===void 0x0?void 0x0:_0x3159d3[_0x4a83(0xb1)]);return _0x1830ae?(console[_0x4a83(0x2f)](_0x4a83(0x194)),console[_0x4a83(0x2f)](_0x30378e[_0x4a83(0x195)],_0x1830ae['substring'](0x0,0x14)+_0x4a83(0x102)),!![]):(console[_0x4a83(0x66)](_0x30378e['MRvmo']),![]);}}catch(_0x482b2c){return console[_0x4a83(0x66)](_0x30378e['QPfNS'],_0x482b2c),![];}};export const fixUserYouTubeConnection=async _0x56f7f1=>{const _0x553b7f={'Rswua':_0x4a83(0x196),'cWmYc':function(_0x42b532,_0x58f75d){return _0x42b532(_0x58f75d);},'etmZZ':_0x4a83(0x197)};console[_0x4a83(0x2f)](_0x4a83(0x198)+_0x56f7f1),console[_0x4a83(0x2f)](_0x553b7f['Rswua']);let _0x154ee4=await _0x553b7f[_0x4a83(0x199)](forceYouTubeReconnectionWithConsent,_0x56f7f1);if(_0x154ee4)return console[_0x4a83(0x2f)]('โ
\x20'+_0x56f7f1+_0x4a83(0x19a)),!![];console[_0x4a83(0x2f)](_0x553b7f['etmZZ']),_0x154ee4=await _0x553b7f['cWmYc'](forceYouTubeReconnectionWithRevoke,_0x56f7f1);if(_0x154ee4)return console['log']('โ
\x20'+_0x56f7f1+'\x20YouTube\x20connection\x20fixed\x20via\x20Method\x202!'),!![];return console[_0x4a83(0x66)](_0x4a83(0x19b)+_0x56f7f1+_0x4a83(0x19c)),![];};const refreshGoogleTokens=async()=>{const _0x5dfb05={'bdYww':_0x4a83(0x19d),'PpFfN':_0x4a83(0x19e)};try{console[_0x4a83(0x2f)](_0x4a83(0x19f));const _0x336f6f=await GoogleSignin['getCurrentUser']();if(!_0x336f6f)return console[_0x4a83(0x2f)](_0x4a83(0x1a0)),null;const _0x4b9fed=await GoogleSignin[_0x4a83(0xe6)]();return console['log'](_0x4a83(0x1a1)),{'accessToken':_0x4b9fed[_0x4a83(0xe7)],'idToken':_0x4b9fed[_0x4a83(0x105)]};}catch(_0x8f009a){console[_0x4a83(0x66)](_0x4a83(0x1a2),_0x8f009a);try{console[_0x4a83(0x2f)](_0x4a83(0x1a3));const _0x3e7450=await GoogleSignin[_0x4a83(0xf7)](),_0x5e3a0f=await GoogleSignin['getTokens']();return console[_0x4a83(0x2f)](_0x5dfb05[_0x4a83(0x1a4)]),{'accessToken':_0x5e3a0f['accessToken'],'idToken':_0x5e3a0f[_0x4a83(0x105)]};}catch(_0x39610a){return console[_0x4a83(0x66)](_0x5dfb05[_0x4a83(0x1a5)],_0x39610a),null;}}},debugYouTubeTokens=async()=>{const _0x4c060a={'gpyOO':'โ\x20User\x20cancelled\x20sign-in\x20-\x20no\x20refresh\x20token\x20obtained','gsJgR':_0x4a83(0xdd),'HdixL':function(_0x18c878,_0x5ec04b){return _0x18c878!==_0x5ec04b;},'NdCoD':_0x4a83(0x1a6),'voRaf':_0x4a83(0x1a7),'rALBl':_0x4a83(0x1a8),'ewNsL':function(_0x1a0678,_0x2b66ba){return _0x1a0678===_0x2b66ba;},'NZPJA':_0x4a83(0x1a9),'nakFu':_0x4a83(0x1aa),'OKMFE':_0x4a83(0x1ab),'pJpZD':'error'};try{if(_0x4c060a['HdixL'](_0x4c060a[_0x4a83(0x1ac)],_0x4c060a[_0x4a83(0x1ac)]))_0x2fa438[_0x4a83(0x66)](_0x4c060a['gpyOO']),_0x115c35[_0x4a83(0x66)](_0x4c060a[_0x4a83(0x1ad)]);else{var _0x4ad058;const _0x1a022f=await GoogleSignin[_0x4a83(0xe6)](),_0x39354f=await GoogleSignin[_0x4a83(0x192)]();return console[_0x4a83(0x2f)](_0x4c060a[_0x4a83(0x1ae)],{'accessToken':_0x1a022f['accessToken']?_0x1a022f[_0x4a83(0xe7)][_0x4a83(0x101)](0x0,0x14)+'...':_0x4c060a[_0x4a83(0x1af)],'idToken':_0x1a022f[_0x4a83(0x105)]?_0x4a83(0xae):_0x4c060a['rALBl'],'serverAuthCode':_0x39354f!==null&&_0x4c060a[_0x4a83(0x1b0)](_0x39354f,void 0x0)&&_0x39354f[_0x4a83(0xb1)]?_0x39354f['serverAuthCode'][_0x4a83(0x101)](0x0,0x14)+'...':_0x4c060a['rALBl'],'userEmail':(_0x4c060a[_0x4a83(0x1b1)](_0x39354f,null)||_0x39354f===void 0x0||(_0x4ad058=_0x39354f[_0x4a83(0xfc)])===null||_0x4c060a[_0x4a83(0x1b1)](_0x4ad058,void 0x0)?void 0x0:_0x4ad058[_0x4a83(0x92)])||_0x4c060a[_0x4a83(0x1af)]}),{'hasRefreshToken':!!(_0x4c060a[_0x4a83(0x1b0)](_0x39354f,null)&&_0x39354f!==void 0x0&&_0x39354f[_0x4a83(0xb1)]),'refreshTokenType':_0x4c060a[_0x4a83(0x1b0)](_0x39354f,null)&&_0x4c060a[_0x4a83(0x1b0)](_0x39354f,void 0x0)&&_0x39354f[_0x4a83(0xb1)]?_0x4a83(0xb1):_0x4c060a[_0x4a83(0x1b2)]};}}catch(_0x566235){return _0x4c060a['nakFu']===_0x4c060a[_0x4a83(0x1b3)]?(console[_0x4a83(0x66)](_0x4c060a[_0x4a83(0x1b4)],_0x566235),{'hasRefreshToken':![],'refreshTokenType':_0x4c060a[_0x4a83(0x1b5)]}):(_0x364fb9['error'](_0x4a83(0x1b6)+_0x3e5956+_0x4a83(0x69)),_0x3bb421[_0x4a83(0x66)]('โ\x20[OAUTH]\x20Please\x20log\x20in\x20first\x20before\x20connecting\x20platforms'),null);}};export const reconnectYouTube=async _0x3aa6f7=>{const _0x10155a={'lktDP':'โ\x20Error\x20refreshing\x20YouTube\x20tokens:','YZhMa':function(_0x42c8eb,_0x1f0588){return _0x42c8eb===_0x1f0588;},'MwxtE':_0x4a83(0x1b7),'ufjNt':_0x4a83(0x1b8),'BTzvr':function(_0x42d57a,_0x2480a0){return _0x42d57a===_0x2480a0;},'RrcMh':_0x4a83(0x1b9),'zkDzb':_0x4a83(0x1ba),'dMWRX':function(_0x2182c4){return _0x2182c4();},'UosTI':_0x4a83(0x1bb),'RVhBf':_0x4a83(0x1bc),'XvsoA':_0x4a83(0x1bd),'RsRzQ':_0x4a83(0x17e),'oTCcC':'โ\x20YouTube\x20reconnection\x20error:'};try{console['log']('๐\x20Forcing\x20fresh\x20YouTube\x20reconnection\x20for\x20refresh\x20token...');try{_0x10155a[_0x4a83(0x1be)](_0x4a83(0x1bf),_0x10155a['MwxtE'])?_0x3a2faf['log'](_0x4a83(0x1c0)):(await GoogleSignin[_0x4a83(0xe2)](),console[_0x4a83(0x2f)](_0x10155a[_0x4a83(0x1c1)]));}catch(_0x2334fc){console[_0x4a83(0x2f)](_0x4a83(0x1c2),_0x2334fc);}try{const _0x584c23=await GoogleSignin['getTokens']();_0x584c23['accessToken']&&(await GoogleSignin[_0x4a83(0xea)](_0x584c23[_0x4a83(0xe7)]),console[_0x4a83(0x2f)](_0x4a83(0x1c3)));}catch(_0x2d380e){_0x10155a[_0x4a83(0x1c4)](_0x10155a[_0x4a83(0x1c5)],'fItIF')?_0x4fdf33[_0x4a83(0x66)](_0x4a83(0x7f)+_0x5c4325+'\x20-\x20the\x20server\x20took\x20too\x20long\x20to\x20respond'):console[_0x4a83(0x2f)](_0x10155a[_0x4a83(0x1c6)],_0x2d380e);}const _0x13a417=await initiateNativeAuth('youtube',_0x3aa6f7);if(_0x13a417){console[_0x4a83(0x2f)](_0x4a83(0x1c7));const _0x3b4f2f=await _0x10155a[_0x4a83(0x1c8)](debugYouTubeTokens);return _0x3b4f2f[_0x4a83(0x157)]?console[_0x4a83(0x2f)](_0x10155a[_0x4a83(0x1c9)],_0x3b4f2f[_0x4a83(0x140)]):console[_0x4a83(0xec)](_0x10155a[_0x4a83(0x1ca)]),!![];}else return _0x4a83(0x1bd)!==_0x10155a['XvsoA']?(_0x38f255[_0x4a83(0x66)](_0x10155a['lktDP'],_0x13a5a2),![]):(console['error'](_0x10155a[_0x4a83(0x1cb)]),![]);}catch(_0x53c523){return console['error'](_0x10155a[_0x4a83(0x1cc)],_0x53c523),![];}};export const initiateNativeAuth=async(_0x5ebe7b,_0x54ad25)=>{const _0xcdda69={'CFLfB':_0x4a83(0x1cd),'nxYmE':_0x4a83(0x1ce),'dsdQc':_0x4a83(0x1cf),'tMSSh':'โ
\x20YouTube\x20channel\x20found:','kERLg':_0x4a83(0x1d0),'AlPNX':_0x4a83(0x1d1),'QyTSz':_0x4a83(0x184),'fKQjX':_0x4a83(0x0),'nMcLr':function(_0x1f285c){return _0x1f285c();},'RWAUb':function(_0x4b7ae7,_0x4d312f){return _0x4b7ae7!==_0x4d312f;},'bQZJQ':function(_0x4566ba){return _0x4566ba();},'DkpUE':'3.0.72','ccXkY':'โ
\x20Refresh\x20token\x20confirmed:','oAmBM':_0x4a83(0x15e),'xOJWf':'โ
\x20[YOUTUBE\x20REAUTH]\x20Response\x20hasRefreshToken:','tvauj':_0x4a83(0xcc),'rpXJD':_0x4a83(0xcb),'AXyqp':_0x4a83(0x1d2),'vumPj':_0x4a83(0xb1),'zSgEl':_0x4a83(0xb2),'UVIYh':_0x4a83(0x1d3),'NCyII':_0x4a83(0x1d4),'yzaiO':_0x4a83(0x20),'qDWBk':function(_0x1fc74d,_0x164d1f){return _0x1fc74d(_0x164d1f);},'lTkOk':_0x4a83(0x67),'YshkU':_0x4a83(0xbc),'Axohz':function(_0x15d32d,_0x350b33){return _0x15d32d===_0x350b33;},'ROZDj':function(_0x10d2ed,_0x12e846){return _0x10d2ed===_0x12e846;},'MxlJQ':_0x4a83(0x1d5),'byqZC':_0x4a83(0x1d6),'bvFqG':_0x4a83(0x1d7),'rXEyB':function(_0x27d6e0,_0x1cfb32){return _0x27d6e0===_0x1cfb32;},'ZiXyt':_0x4a83(0x1d8),'eqwIL':_0x4a83(0x1d9),'wvdKi':_0x4a83(0x1da),'tDyaY':function(_0x2e9c64,_0x33b492){return _0x2e9c64===_0x33b492;},'osPPO':_0x4a83(0x1db),'stiza':'๐\x20FULL\x20tokens\x20object:','iYrMY':function(_0xe83d6c,_0x76d3a4){return _0xe83d6c===_0x76d3a4;},'rElnZ':_0x4a83(0x1dc),'Bluon':_0x4a83(0x1dd),'eoBnY':_0x4a83(0x1de),'TIfKv':function(_0x4160cb,_0x2aa79d){return _0x4160cb!==_0x2aa79d;},'iOTyd':_0x4a83(0x1a8),'Dkdfn':'-\x20currentUser?.serverAuthCode:','EbdRI':function(_0x37b491,_0x2e94ea){return _0x37b491!==_0x2e94ea;},'bVORM':function(_0x5cbca7,_0x7ca3cb){return _0x5cbca7!==_0x7ca3cb;},'ItOsl':function(_0x4ec278,_0x96072){return _0x4ec278!==_0x96072;},'NjjBY':function(_0x259496,_0xfbf417){return _0x259496!==_0xfbf417;},'NUFcy':_0x4a83(0x1df),'iakuu':_0x4a83(0x1e0),'TJcuC':function(_0x354a8a,_0x40ee26){return _0x354a8a!==_0x40ee26;},'EgKrp':'jQGNT','DNGSi':'โ\x20CRITICAL:\x20No\x20refresh\x20token\x20available\x20-\x20YouTube\x20connection\x20will\x20fail\x20when\x20token\x20expires','JHXTw':_0x4a83(0x99),'NblKX':_0x4a83(0x1e1),'tAkLH':function(_0x3c6850,_0x9a6f58){return _0x3c6850===_0x9a6f58;},'ktMlX':'tAoUo','SpDHW':_0x4a83(0x1e2),'oJSEl':_0x4a83(0xb0),'zUywH':_0x4a83(0xb3),'VfYwv':_0x4a83(0x10e),'jMhgB':_0x4a83(0x110),'DpQJn':_0x4a83(0xb6),'kNnCz':_0x4a83(0x123),'vAdoX':function(_0x19b70f,_0x2c4512){return _0x19b70f===_0x2c4512;},'aIwjp':function(_0x33aaa9,_0x4797fa){return _0x33aaa9===_0x4797fa;},'wBbFZ':function(_0xe830dd,_0xc63e7c){return _0xe830dd===_0xc63e7c;},'BIryE':_0x4a83(0x9d),'oMBBT':'sjxjz','VENTJ':_0x4a83(0x1e3),'xpcbB':function(_0x41e049,_0x2dbfd7){return _0x41e049===_0x2dbfd7;},'rFKef':function(_0x167f0d,_0x3b4b39){return _0x167f0d===_0x3b4b39;},'AggOg':_0x4a83(0x1e4),'URKYy':_0x4a83(0xba),'HQhJV':function(_0x2e0eed,_0x4ca06d){return _0x2e0eed===_0x4ca06d;},'jVFiB':function(_0x3d7d7c,_0x4cfa8c){return _0x3d7d7c===_0x4cfa8c;},'dDRbL':function(_0x5bbbe8,_0x4b02de){return _0x5bbbe8||_0x4b02de;},'xCxfe':_0x4a83(0x1e5),'DaUcT':_0x4a83(0x58),'FjYmQ':'โ
\x20Found\x20existing\x20authentication\x20token\x20for\x20YouTube\x20auth','evzBj':'๐\x20Token\x20preview:','FefEx':_0x4a83(0x1e6),'zqByC':_0x4a83(0x1e7),'UwKPi':function(_0x264707,_0x5e8d47){return _0x264707===_0x5e8d47;},'LRsvw':function(_0x949152,_0x238dd9){return _0x949152===_0x238dd9;},'SJMQk':function(_0x50a06b,_0x1262a4){return _0x50a06b===_0x1262a4;},'ACsQn':function(_0x45f3ef,_0x2ed311){return _0x45f3ef!==_0x2ed311;},'zMVxh':function(_0x40c62b,_0x4172ee){return _0x40c62b+_0x4172ee;},'nsNke':function(_0x167769,_0x49b4c9){return _0x167769*_0x49b4c9;},'zFyYh':_0x4a83(0x1e8),'KDMUg':_0x4a83(0x1e9),'UZhwM':_0x4a83(0x1ea),'hbtii':_0x4a83(0x1eb),'lptYp':_0x4a83(0x1ec),'hQnJz':function(_0x30932f,_0x407a40){return _0x30932f===_0x407a40;},'VhBWN':function(_0x4851e8,_0x231b5b){return _0x4851e8===_0x231b5b;},'CmcXt':function(_0x1f0804,_0x106569){return _0x1f0804===_0x106569;},'GUIGU':_0x4a83(0x1ed),'FPTcM':_0x4a83(0x1ee),'dTDUb':function(_0x5dfa7f,_0x2e818d,_0x58aed6){return _0x5dfa7f(_0x2e818d,_0x58aed6);},'EEuXz':function(_0x44b2eb,_0x5ec910){return _0x44b2eb&&_0x5ec910;},'WdSwG':_0x4a83(0x1ef),'IAFgh':function(_0x3de2b0,_0x144e4f){return _0x3de2b0===_0x144e4f;},'Pyrds':'SgVuh','KqULe':'โ
\x20YouTube\x20connection\x20successful','BLivq':'๐\x20COMPLETE\x20BACKEND\x20RESPONSE:','xXksb':function(_0x4dee2b,_0x2a1d68){return _0x4dee2b===_0x2a1d68;},'fgRHR':function(_0x2153c5,_0xd867be){return _0x2153c5===_0xd867be;},'XjWOq':function(_0x249634,_0x27d55){return _0x249634===_0x27d55;},'LAwVr':'โ
\x20[YOUTUBE\x20AUTH]\x20Training\x20will\x20work,\x20but\x20connection\x20expires\x20in\x20~1\x20hour','AYEFT':function(_0x32680d,_0x30c1df){return _0x32680d!==_0x30c1df;},'fMMfX':_0x4a83(0x1f0),'XeMkD':_0x4a83(0x1f1),'HhmbH':_0x4a83(0x1f2),'sOQTl':'โ ๏ธ\x20[YOUTUBE\x20AUTH]\x20Backend\x20did\x20not\x20confirm\x20refresh\x20token','sxGIf':_0x4a83(0x1f3),'IMgVa':_0x4a83(0x1f4),'mBTYe':'QrvBC','wjOwy':_0x4a83(0x1f5),'oaMKt':_0x4a83(0x1f6),'rKwtM':_0x4a83(0x1f7),'WtciT':function(_0x565661,_0x529d0c){return _0x565661===_0x529d0c;},'UEXgU':_0x4a83(0x1f8),'XYZQq':_0x4a83(0x1c0),'dEiUj':function(_0x37d4f9,_0x5ec08d){return _0x37d4f9===_0x5ec08d;},'nSZhl':function(_0x279185,_0x230563){return _0x279185===_0x230563;},'lWhnd':_0x4a83(0x1f9),'BBrZJ':_0x4a83(0x1fa),'xEjhQ':_0x4a83(0x1fb)};if(_0x5ebe7b===_0xcdda69[_0x4a83(0x1fc)]){console[_0x4a83(0x2f)](_0x4a83(0x1fd));if(!_0x54ad25||_0xcdda69['Axohz'](_0x54ad25[_0x4a83(0x132)](),''))return _0xcdda69['ROZDj']('pECko',_0xcdda69['MxlJQ'])?_0x347f73[_0x4a83(0x82)](_0xcdda69['CFLfB'])||_0x77081a[_0x4a83(0x82)](_0xcdda69[_0x4a83(0x1fe)]):(console['error'](_0xcdda69[_0x4a83(0x1ff)]),![]);try{if(_0xcdda69[_0x4a83(0x200)](_0x4a83(0x1d7),_0xcdda69[_0x4a83(0x201)])){var _0xddfbd2,_0x2b7be6,_0x3b9ea6,_0x2d574b,_0x33a8e9,_0x120ec8,_0x1773dc,_0x25f1fa,_0x30ca62,_0x2b2f81;_0xcdda69[_0x4a83(0x202)](initializeGoogleSignIn),await GoogleSignin[_0x4a83(0xf4)]();try{if(_0xcdda69[_0x4a83(0x203)](_0xcdda69[_0x4a83(0x204)],_0xcdda69[_0x4a83(0x204)]))await GoogleSignin[_0x4a83(0xe2)](),console['log'](_0xcdda69[_0x4a83(0x205)]);else return _0x76f6b0[_0x4a83(0x66)](_0xcdda69['dsdQc']),![];}catch(_0x31ebcf){console[_0x4a83(0x2f)](_0x4a83(0x206),_0x31ebcf);}const _0x4ae0f3=await GoogleSignin[_0x4a83(0xf7)]();console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x207)],_0xcdda69['Axohz'](_0xddfbd2=_0x4ae0f3[_0x4a83(0xfa)],null)||_0xddfbd2===void 0x0||_0xcdda69[_0x4a83(0x208)](_0xddfbd2=_0xddfbd2[_0x4a83(0xfc)],null)||_0xddfbd2===void 0x0?void 0x0:_0xddfbd2[_0x4a83(0x92)]),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x209)]),console[_0x4a83(0x2f)](JSON[_0x4a83(0x75)](_0x4ae0f3,null,0x2));const _0x122333=await GoogleSignin['getTokens']();console[_0x4a83(0x2f)](_0x4a83(0x20a)),console['log'](_0xcdda69[_0x4a83(0x20b)]),console[_0x4a83(0x2f)](JSON[_0x4a83(0x75)](_0x122333,null,0x2));const _0x405765=await GoogleSignin[_0x4a83(0x192)]();console['log']('๐ค\x20Current\x20user\x20info:',_0xcdda69[_0x4a83(0x20c)](_0x405765,null)||_0xcdda69[_0x4a83(0x20d)](_0x405765,void 0x0)||_0xcdda69[_0x4a83(0x200)](_0x2b7be6=_0x405765[_0x4a83(0xfc)],null)||_0x2b7be6===void 0x0?void 0x0:_0x2b7be6[_0x4a83(0x92)]),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x20e)]),console[_0x4a83(0x2f)](JSON[_0x4a83(0x75)](_0x405765,null,0x2));let _0x1e21ee=null;console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x20f)]),console['log'](_0xcdda69['eoBnY'],_0xcdda69[_0x4a83(0x210)](_0x3b9ea6=_0x4ae0f3['data'],null)&&_0xcdda69[_0x4a83(0x210)](_0x3b9ea6,void 0x0)&&_0x3b9ea6[_0x4a83(0xb1)]?_0x4a83(0x211)+_0x4ae0f3['data'][_0x4a83(0xb1)]['substring'](0x0,0x14)+'...':_0xcdda69[_0x4a83(0x212)]),console['log'](_0xcdda69[_0x4a83(0x213)],_0xcdda69[_0x4a83(0x214)](_0x405765,null)&&_0xcdda69['bVORM'](_0x405765,void 0x0)&&_0x405765['serverAuthCode']?_0x4a83(0x211)+_0x405765[_0x4a83(0xb1)][_0x4a83(0x101)](0x0,0x14)+_0x4a83(0x102):_0xcdda69[_0x4a83(0x212)]),console['log']('-\x20tokens.idToken:',_0x122333[_0x4a83(0x105)]?_0x4a83(0x211)+_0x122333['idToken'][_0x4a83(0x101)](0x0,0x14)+'...':_0xcdda69[_0x4a83(0x212)]),console[_0x4a83(0x2f)](_0x4a83(0x215),_0x122333['accessToken']?_0x4a83(0x211)+_0x122333[_0x4a83(0xe7)][_0x4a83(0x101)](0x0,0x14)+_0x4a83(0x102):_0xcdda69['iOTyd']);if(_0xcdda69[_0x4a83(0x216)](_0x405765,null)&&_0xcdda69[_0x4a83(0x217)](_0x405765,void 0x0)&&_0x405765[_0x4a83(0xb1)])_0xcdda69[_0x4a83(0x210)](_0xcdda69[_0x4a83(0x218)],_0xcdda69[_0x4a83(0x218)])?(_0x4d81ec=_0x4c36cd[_0x4a83(0x115)][0x0][_0x4a83(0x11b)]['title'],_0xb318ab=_0x10dca4[_0x4a83(0x115)][0x0]['id'],_0x4279fc[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x219)],_0x11d45a,_0x4a83(0xb6),_0x2c8e93)):(_0x1e21ee=_0x405765[_0x4a83(0xb1)],console[_0x4a83(0x2f)](_0xcdda69['AlPNX']),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x21a)],_0x1e21ee['substring'](0x0,0x14)+_0x4a83(0x102)));else(_0x2d574b=_0x4ae0f3[_0x4a83(0xfa)])!==null&&_0x2d574b!==void 0x0&&_0x2d574b['serverAuthCode']&&(_0x1e21ee=_0x4ae0f3['data'][_0x4a83(0xb1)],console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x21b)]),console[_0x4a83(0x2f)](_0xcdda69['QyTSz'],_0x1e21ee[_0x4a83(0x101)](0x0,0x14)+'...'));!_0x1e21ee?_0xcdda69[_0x4a83(0x21c)](_0x4a83(0x21d),_0xcdda69[_0x4a83(0x21e)])?(console[_0x4a83(0x66)](_0xcdda69[_0x4a83(0x21f)]),console['error'](_0xcdda69[_0x4a83(0x220)]),console['error'](_0x4a83(0x9a)),console[_0x4a83(0xec)](_0xcdda69[_0x4a83(0x221)])):_0x4b9710[_0x4a83(0x2f)](_0x4a83(0xa2),_0x62069e):_0xcdda69[_0x4a83(0x222)](_0xcdda69[_0x4a83(0x223)],_0xcdda69[_0x4a83(0x224)])?_0x5673a5[_0x4a83(0x66)](_0xcdda69[_0x4a83(0x225)]):(console[_0x4a83(0x2f)](_0xcdda69['NCyII']),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x226)],_0x1e21ee[_0x4a83(0x10b)]('4/')?_0x4a83(0xb1):_0xcdda69['zSgEl']));let _0x270905=_0xcdda69[_0x4a83(0x227)],_0x18280c=null;try{console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x228)]);const _0x4bf610=await fetch(_0xcdda69[_0x4a83(0x229)],{'headers':{'Authorization':_0x4a83(0x6)+_0x122333['accessToken'],'Accept':'application/json'}});if(_0x4bf610['ok']){const _0x328a68=await _0x4bf610[_0x4a83(0x113)]();if(_0x328a68[_0x4a83(0x115)]&&_0x328a68[_0x4a83(0x115)]['length']>0x0)_0x270905=_0x328a68[_0x4a83(0x115)][0x0][_0x4a83(0x11b)][_0x4a83(0x11c)],_0x18280c=_0x328a68[_0x4a83(0x115)][0x0]['id'],console[_0x4a83(0x2f)](_0x4a83(0x22a),_0x270905,_0xcdda69['DpQJn'],_0x18280c);else{var _0x4e24a8,_0x5d71d4;console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x22b)]),_0x270905=((_0x4e24a8=_0x4ae0f3[_0x4a83(0xfa)])===null||_0xcdda69['vAdoX'](_0x4e24a8,void 0x0)||_0xcdda69[_0x4a83(0x22c)](_0x4e24a8=_0x4e24a8[_0x4a83(0xfc)],null)||_0xcdda69[_0x4a83(0x203)](_0x4e24a8,void 0x0)?void 0x0:_0x4e24a8[_0x4a83(0x7d)])||(_0xcdda69[_0x4a83(0x20c)](_0x5d71d4=_0x4ae0f3['data'],null)||_0xcdda69[_0x4a83(0x208)](_0x5d71d4,void 0x0)||_0xcdda69[_0x4a83(0x22d)](_0x5d71d4=_0x5d71d4['user'],null)||_0x5d71d4===void 0x0?void 0x0:_0x5d71d4[_0x4a83(0x92)])||_0xcdda69[_0x4a83(0x22e)];}}else{if(_0xcdda69[_0x4a83(0x22f)]===_0x4a83(0x230))_0x290684=_0x28c704[_0x4a83(0xb1)],_0x4f1016[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x231)]),_0x36d5bf[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x21a)],_0x393431[_0x4a83(0x101)](0x0,0x14)+_0x4a83(0x102));else{var _0x598c7b,_0xabc4e3;console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x232)],_0x4bf610['status']),_0x270905=(_0xcdda69['wBbFZ'](_0x598c7b=_0x4ae0f3['data'],null)||_0xcdda69[_0x4a83(0x203)](_0x598c7b,void 0x0)||(_0x598c7b=_0x598c7b[_0x4a83(0xfc)])===null||_0xcdda69[_0x4a83(0x203)](_0x598c7b,void 0x0)?void 0x0:_0x598c7b['name'])||(_0xcdda69['xpcbB'](_0xabc4e3=_0x4ae0f3[_0x4a83(0xfa)],null)||_0xcdda69[_0x4a83(0x200)](_0xabc4e3,void 0x0)||(_0xabc4e3=_0xabc4e3[_0x4a83(0xfc)])===null||_0xcdda69[_0x4a83(0x233)](_0xabc4e3,void 0x0)?void 0x0:_0xabc4e3[_0x4a83(0x92)])||_0x4a83(0xb3);}}}catch(_0x29d6ad){if(_0xcdda69[_0x4a83(0x22d)](_0xcdda69[_0x4a83(0x234)],'xxjEE')){if(!_0x359748())throw new _0xaaa909(_0xcdda69[_0x4a83(0x235)]);const _0x55c755=_0xcdda69[_0x4a83(0x202)](_0x167388);if(!(_0xcdda69[_0x4a83(0x236)](_0x55c755,null)&&_0x55c755!==void 0x0&&_0x55c755[_0x4a83(0x3)]))throw new _0x3563d8(_0x4a83(0x237));return{..._0xcdda69[_0x4a83(0x238)](_0x34978c),'Authorization':_0x4a83(0x6)+_0x55c755[_0x4a83(0x3)],'X-SDK-Version':_0xcdda69['DkpUE'],'X-SDK-Platform':'react-native'};}else{var _0x2b8407,_0x423dbe;console['log'](_0xcdda69[_0x4a83(0x239)],_0x29d6ad),_0x270905=((_0x2b8407=_0x4ae0f3[_0x4a83(0xfa)])===null||_0x2b8407===void 0x0||_0xcdda69[_0x4a83(0x23a)](_0x2b8407=_0x2b8407['user'],null)||_0xcdda69[_0x4a83(0x208)](_0x2b8407,void 0x0)?void 0x0:_0x2b8407[_0x4a83(0x7d)])||(_0xcdda69['vAdoX'](_0x423dbe=_0x4ae0f3[_0x4a83(0xfa)],null)||_0xcdda69['jVFiB'](_0x423dbe,void 0x0)||_0xcdda69[_0x4a83(0x22d)](_0x423dbe=_0x423dbe['user'],null)||_0x423dbe===void 0x0?void 0x0:_0x423dbe['email'])||_0xcdda69['zUywH'];}}let _0x375317=await getJWT();const _0x859306=await AsyncStorage[_0x4a83(0x23b)](_0x4a83(0x23c)),_0x25e7a9=_0xcdda69[_0x4a83(0x23d)](_0x859306,_0x54ad25)||(_0xcdda69[_0x4a83(0x22d)](_0x33a8e9=_0x4ae0f3[_0x4a83(0xfa)],null)||_0xcdda69['Axohz'](_0x33a8e9,void 0x0)||_0xcdda69[_0x4a83(0x22d)](_0x33a8e9=_0x33a8e9[_0x4a83(0xfc)],null)||_0x33a8e9===void 0x0?void 0x0:_0x33a8e9[_0x4a83(0x92)])||_0x4a83(0x23e);!_0x375317||_0x375317['trim']()[_0x4a83(0x116)]<0x14?_0xcdda69[_0x4a83(0x23f)](_0xcdda69[_0x4a83(0x240)],_0x4a83(0x1e5))?(console['log'](_0x4a83(0x241)),console[_0x4a83(0x2f)](_0x4a83(0x242)),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x243)])):_0x32a25c['log'](_0xcdda69[_0x4a83(0x244)],_0x412517[_0x4a83(0x140)]):(console['log'](_0xcdda69[_0x4a83(0x245)]),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x246)],_0x375317[_0x4a83(0x101)](0x0,0x14)+_0x4a83(0x102)));console['log'](_0xcdda69[_0x4a83(0x247)],_0x25e7a9),console['log'](_0xcdda69[_0x4a83(0x248)],_0x375317?_0x375317[_0x4a83(0x101)](0x0,0x14)+_0x4a83(0x102):_0x4a83(0x249)),console[_0x4a83(0x2f)](_0x4a83(0x24a),_0x270905);const _0x496fda={'session':{'username':_0x25e7a9,'platform':_0x4a83(0xbc),'timestamp':new Date()[_0x4a83(0x137)](),'channelName':_0x270905,'channelId':_0x18280c},'googleUser':(_0x120ec8=_0x4ae0f3[_0x4a83(0xfa)])===null||_0x120ec8===void 0x0?void 0x0:_0x120ec8[_0x4a83(0xfc)],'accessToken':_0x122333[_0x4a83(0xe7)],'idToken':_0x122333[_0x4a83(0x105)],'refreshToken':_0x1e21ee,'serverAuthCode':_0x1e21ee,'refresh_token':_0x1e21ee,'server_auth_code':_0x1e21ee,'authCode':_0x1e21ee,'userAccountInfo':{'username':_0x25e7a9,'email':_0xcdda69[_0x4a83(0x20c)](_0x1773dc=_0x4ae0f3[_0x4a83(0xfa)],null)||_0xcdda69[_0x4a83(0x208)](_0x1773dc,void 0x0)||_0xcdda69[_0x4a83(0x23f)](_0x1773dc=_0x1773dc[_0x4a83(0xfc)],null)||_0x1773dc===void 0x0?void 0x0:_0x1773dc[_0x4a83(0x92)],'authToken':_0x375317,'channelName':_0x270905,'channelId':_0x18280c,'userIdentifier':_0x375317?_0x4a83(0x24b)+_0x375317[_0x4a83(0x101)](0x0,0xa):_0x4a83(0x24c)+((_0x25f1fa=_0x4ae0f3[_0x4a83(0xfa)])===null||_0xcdda69['UwKPi'](_0x25f1fa,void 0x0)||_0xcdda69[_0x4a83(0x23f)](_0x25f1fa=_0x25f1fa[_0x4a83(0xfc)],null)||_0xcdda69[_0x4a83(0x20d)](_0x25f1fa,void 0x0)?void 0x0:_0x25f1fa[_0x4a83(0x92)]),'googleId':_0xcdda69[_0x4a83(0x24d)](_0x30ca62=_0x4ae0f3[_0x4a83(0xfa)],null)||_0x30ca62===void 0x0||_0xcdda69[_0x4a83(0x24e)](_0x30ca62=_0x30ca62[_0x4a83(0xfc)],null)||_0xcdda69['SJMQk'](_0x30ca62,void 0x0)?void 0x0:_0x30ca62['id'],'appleUserId':_0xcdda69[_0x4a83(0x236)](_0x375317,null)&&_0xcdda69[_0x4a83(0x24f)](_0x375317,void 0x0)&&_0x375317['includes'](_0x4a83(0x250))?_0x375317[_0x4a83(0x15d)]('.')[0x1]:null,'refreshToken':_0x1e21ee,'serverAuthCode':_0x1e21ee},'tokenExpiry':new Date(_0xcdda69[_0x4a83(0x251)](Date[_0x4a83(0x13c)](),_0xcdda69[_0x4a83(0x252)](0xe10,0x3e8)))[_0x4a83(0x137)](),'requestRefreshToken':!![],'debugInfo':{'hasRefreshToken':!!_0x1e21ee,'refreshTokenType':_0x1e21ee?_0x1e21ee['startsWith']('4/')?_0xcdda69[_0x4a83(0x253)]:_0xcdda69[_0x4a83(0x254)]:_0x4a83(0x1a9),'configuredForRefresh':!![],'forcedConsent':!![],'refreshTokenValue':_0x1e21ee}};console[_0x4a83(0x2f)](_0xcdda69['zFyYh']),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x255)],!!_0x496fda[_0x4a83(0xe7)]),console[_0x4a83(0x2f)]('-\x20hasRefreshToken:',!!_0x496fda['refreshToken']),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x256)],!!_0x496fda[_0x4a83(0xb1)]),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x257)],_0x496fda[_0x4a83(0x13f)][_0x4a83(0x140)]),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x258)],_0xcdda69[_0x4a83(0x259)](_0x2b2f81=_0x4ae0f3['data'],null)||_0xcdda69[_0x4a83(0x25a)](_0x2b2f81,void 0x0)||_0xcdda69[_0x4a83(0x200)](_0x2b2f81=_0x2b2f81[_0x4a83(0xfc)],null)||_0xcdda69['CmcXt'](_0x2b2f81,void 0x0)?void 0x0:_0x2b2f81[_0x4a83(0x92)]),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x25b)],_0x270905),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x25c)]),console[_0x4a83(0x2f)](JSON[_0x4a83(0x75)](_0x496fda,null,0x2)),console[_0x4a83(0x2f)]('๐ค\x20Sending\x20YouTube\x20auth\x20to\x20backend\x20with\x20refresh\x20token:',!!_0x1e21ee);const _0x3e0d99=await _0xcdda69[_0x4a83(0x25d)](fetch,API_CONFIG[_0x4a83(0xc)]+_0x4a83(0x148),{'method':'POST','headers':{'Content-Type':'application/json',..._0xcdda69[_0x4a83(0x25e)](_0x375317,{'Authorization':_0x375317})},'body':JSON[_0x4a83(0x75)](_0x496fda)});console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x25f)],_0x3e0d99['status']),console['log'](_0x4a83(0x260),_0x3e0d99[_0x4a83(0x14b)]);if(_0x3e0d99['ok']){if(_0xcdda69[_0x4a83(0x261)](_0x4a83(0x262),_0xcdda69[_0x4a83(0x263)])){var _0x555ac7,_0x4f1094;const _0x204d0e=await _0x3e0d99[_0x4a83(0x113)]();console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x264)]),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x265)]),console['log'](JSON[_0x4a83(0x75)](_0x204d0e,null,0x2));const _0x3397d2=(_0xcdda69[_0x4a83(0x266)](_0x555ac7=_0x204d0e[_0x4a83(0x14c)],null)||_0xcdda69[_0x4a83(0x267)](_0x555ac7,void 0x0)?void 0x0:_0x555ac7[_0x4a83(0x14d)])===!![]||(_0xcdda69['ROZDj'](_0x4f1094=_0x204d0e[_0x4a83(0x268)],null)||_0xcdda69[_0x4a83(0x269)](_0x4f1094,void 0x0)?void 0x0:_0x4f1094['enabled'])===!![]||_0x204d0e[_0x4a83(0x14d)]===!![]||_0x204d0e[_0x4a83(0x39)]&&_0x204d0e[_0x4a83(0x39)][_0x4a83(0x82)](_0x4a83(0x26a));if(_0x3397d2)console['log'](_0x4a83(0x26b)),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x26c)]),console[_0x4a83(0x2f)](_0x4a83(0x26d));else _0x204d0e['hasRefreshToken']||_0x204d0e['refreshTokenReceived']?_0xcdda69[_0x4a83(0x26e)](_0xcdda69[_0x4a83(0x26f)],_0xcdda69['fMMfX'])?_0x474717[_0x4a83(0x2f)](_0x4a83(0x4b)+_0x2d46d5[_0x4a83(0x46)]):(console[_0x4a83(0x2f)](_0xcdda69['XeMkD']),console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x270)])):(console[_0x4a83(0xec)](_0xcdda69[_0x4a83(0x271)]),console[_0x4a83(0xec)](_0xcdda69[_0x4a83(0x272)],Object[_0x4a83(0x273)](_0x204d0e)),console['warn'](_0xcdda69[_0x4a83(0x274)]));return!![];}else _0x24687f[_0x4a83(0x2f)](_0xcdda69['oAmBM']),_0x21cd38[_0x4a83(0x2f)](_0xcdda69['xOJWf'],_0xfd8680[_0x4a83(0x157)]),_0x59f242[_0x4a83(0x2f)](_0x4a83(0x275)),_0x4052a3[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x276)]),_0x3f8a54['log'](_0xcdda69['rpXJD'],_0x134727),_0x239f28[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x277)],_0x5072ce[_0x4a83(0x10b)]('4/')?_0xcdda69[_0x4a83(0x253)]:_0xcdda69['zSgEl']),_0x1dd0d3[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x278)],_0x8672b6[_0x4a83(0x116)]);}else{if(_0xcdda69[_0x4a83(0x279)]===_0x4a83(0x27a))throw new _0x1b2410(_0x4a83(0x237));else{const _0x3cc518=await _0x3e0d99[_0x4a83(0x43)]();return console[_0x4a83(0x66)](_0xcdda69[_0x4a83(0x27b)],_0x3e0d99['status']),console[_0x4a83(0x66)](_0xcdda69[_0x4a83(0x27c)]),console[_0x4a83(0x66)](_0x3cc518),![];}}}else _0x355454[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x27d)]),_0x1dead3[_0x4a83(0x2f)](_0x4a83(0xb0),_0x4c5aef[_0x4a83(0x10b)]('4/')?_0xcdda69[_0x4a83(0x253)]:_0xcdda69[_0x4a83(0x254)]);}catch(_0x4c7582){console[_0x4a83(0x66)](_0xcdda69['rKwtM'],_0x4c7582);if(_0xcdda69[_0x4a83(0x27e)](_0x4c7582[_0x4a83(0xb)],statusCodes[_0x4a83(0x27f)])){if(_0x4a83(0x1f8)===_0xcdda69[_0x4a83(0x280)])console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x281)]);else throw new _0x49c3ea(_0xcdda69[_0x4a83(0x235)]);}else{if(_0xcdda69[_0x4a83(0x282)](_0x4c7582[_0x4a83(0xb)],statusCodes[_0x4a83(0x283)]))console[_0x4a83(0x2f)](_0x4a83(0x284));else _0xcdda69[_0x4a83(0x285)](_0x4c7582[_0x4a83(0xb)],statusCodes[_0x4a83(0x17a)])&&console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x286)]);}return![];}}if(_0x5ebe7b===_0xcdda69['BBrZJ'])return _0xcdda69[_0x4a83(0x287)]===_0xcdda69[_0x4a83(0x287)]?(console[_0x4a83(0x2f)](_0x4a83(0x3a)),new Promise(_0x542862=>{setTimeout(()=>{console[_0x4a83(0x2f)](_0xcdda69[_0x4a83(0x288)]),_0xcdda69[_0x4a83(0x289)](_0x542862,!![]);},0x3e8);})):(_0x2fd523[_0x4a83(0x2f)](_0xcdda69['lTkOk']),_0x4b6705[_0x4a83(0xc)]+_0x4a83(0x68));return![];};export const isOAuthCallback=_0x1339ad=>{return _0x1339ad[_0x4a83(0x82)]('auth/callback')||_0x1339ad[_0x4a83(0x82)]('code=');};export const exchangeCodeForToken=async(_0x2d690f,_0x366b78)=>{const _0x2ff2e9={'iwIDQ':_0x4a83(0x1f7),'HyzfC':function(_0x59d03b,_0x52526f){return _0x59d03b===_0x52526f;},'AgVEH':'Google\x20Sign-In\x20already\x20in\x20progress','ymyyt':_0x4a83(0x1e3),'sHSlg':function(_0xae60da,_0x5003ed){return _0xae60da===_0x5003ed;},'OAUQK':function(_0x4fa43d,_0x430627){return _0x4fa43d===_0x430627;},'NxgUe':_0x4a83(0xb3),'ScGgo':function(_0x4b8842,_0x2ea050,_0x19e97c){return _0x4b8842(_0x2ea050,_0x19e97c);},'kXyNw':function(_0x41fa63,_0x36e618){return _0x41fa63===_0x36e618;},'XOQbl':'oTVFE','pGZpD':_0x4a83(0x28a),'uUiAN':_0x4a83(0x28b),'Svfcl':'Falling\x20back\x20to\x20simulated\x20token\x20response'};console[_0x4a83(0x2f)](_0x4a83(0x28c)+_0x366b78);try{const _0x268cde=API_CONFIG[_0x4a83(0xc)]+'/'+_0x366b78+_0x4a83(0x28d),_0x28f841=await _0x2ff2e9[_0x4a83(0x28e)](fetch,_0x268cde,{'method':'POST','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'code':_0x2d690f,'platform':_0x366b78})});if(!_0x28f841['ok']){if(_0x2ff2e9[_0x4a83(0x28f)](_0x2ff2e9[_0x4a83(0x290)],_0x2ff2e9[_0x4a83(0x291)])){_0x40fba4[_0x4a83(0x66)](_0x2ff2e9['iwIDQ'],_0xa7809a);if(_0x1ccf16[_0x4a83(0xb)]===_0x2c5ae6[_0x4a83(0x27f)])_0x34c5a5[_0x4a83(0x2f)](_0x4a83(0x1c0));else{if(_0x2ff2e9[_0x4a83(0x292)](_0x699763[_0x4a83(0xb)],_0x198f79['IN_PROGRESS']))_0xf43099[_0x4a83(0x2f)](_0x2ff2e9[_0x4a83(0x293)]);else _0x2ff2e9[_0x4a83(0x292)](_0x4e0788[_0x4a83(0xb)],_0xcf967d[_0x4a83(0x17a)])&&_0x47e509[_0x4a83(0x2f)](_0x4a83(0x1f9));}return![];}else{console[_0x4a83(0x66)](_0x4a83(0x119)+_0x28f841[_0x4a83(0x46)]);throw new Error(_0x4a83(0x11a)+_0x28f841['status']);}}const _0x35891d=await _0x28f841['json']();return console[_0x4a83(0x2f)](_0x4a83(0x294)+_0x366b78),_0x35891d;}catch(_0xc9ad23){if(_0x2ff2e9[_0x4a83(0x295)]===_0x2ff2e9['uUiAN'])return console['error']('Error\x20exchanging\x20code\x20for\x20token:',_0xc9ad23),console[_0x4a83(0x2f)](_0x2ff2e9[_0x4a83(0x296)]),{'access_token':_0x366b78+_0x4a83(0x297)+Math[_0x4a83(0x298)]()['toString'](0x24)['substring'](0x7),'refresh_token':_0x366b78+_0x4a83(0x299)+Math[_0x4a83(0x298)]()[_0x4a83(0x29a)](0x24)['substring'](0x7),'expires_in':0xe10};else{var _0x404d1a,_0x27c5ce;_0x4e5936[_0x4a83(0x2f)](_0x2ff2e9['ymyyt'],_0x37ee4b['status']),_0x21641e=((_0x404d1a=_0x2431ea[_0x4a83(0xfa)])===null||_0x2ff2e9[_0x4a83(0x29b)](_0x404d1a,void 0x0)||(_0x404d1a=_0x404d1a[_0x4a83(0xfc)])===null||_0x2ff2e9[_0x4a83(0x29c)](_0x404d1a,void 0x0)?void 0x0:_0x404d1a[_0x4a83(0x7d)])||(_0x2ff2e9[_0x4a83(0x29c)](_0x27c5ce=_0xa1b727[_0x4a83(0xfa)],null)||_0x27c5ce===void 0x0||(_0x27c5ce=_0x27c5ce[_0x4a83(0xfc)])===null||_0x27c5ce===void 0x0?void 0x0:_0x27c5ce[_0x4a83(0x92)])||_0x2ff2e9[_0x4a83(0x29d)];}}};export const refreshYouTubeTokens=async()=>{const _0x5e819c={'erLSS':_0x4a83(0x29e),'BpTgE':_0x4a83(0x1f1),'AasFZ':'โ\x20Failed\x20to\x20get\x20fresh\x20tokens\x20from\x20Google\x20SDK','oNzEe':function(_0x357619,_0x392766){return _0x357619!==_0x392766;},'SvKBH':_0x4a83(0x29f),'dFzeK':function(_0x5db893){return _0x5db893();},'vMkMV':_0x4a83(0x122),'dvGnr':function(_0x2ede3f,_0x392287,_0x35003a){return _0x2ede3f(_0x392287,_0x35003a);},'hXUcs':function(_0x312fde,_0xfcc6e8){return _0x312fde===_0xfcc6e8;},'IKpwK':function(_0x59e6f6,_0x46e4e6){return _0x59e6f6+_0x46e4e6;},'soEmY':function(_0xa46d76,_0x25289e){return _0xa46d76*_0x25289e;},'Cwwjd':function(_0x414469,_0x31defb){return _0x414469===_0x31defb;},'OEaXU':_0x4a83(0x2a0),'WqENe':_0x4a83(0x2a1),'ktCfa':_0x4a83(0x2a2),'NJlAd':_0x4a83(0x2a3)};try{var _0x52e789;console[_0x4a83(0x2f)](_0x4a83(0x2a4));const _0x497721=await GoogleSignin[_0x4a83(0xe6)]();if(!_0x497721)return console[_0x4a83(0x66)](_0x5e819c[_0x4a83(0x2a5)]),![];const _0x2075b9=await GoogleSignin[_0x4a83(0x192)]();if(!_0x2075b9)return _0x5e819c[_0x4a83(0x2a6)](_0x5e819c[_0x4a83(0x2a7)],_0x4a83(0x2a8))?(console[_0x4a83(0x66)](_0x4a83(0x9b)),![]):{'success':![],'error':_0x1df1de[_0x4a83(0x39)]||_0x5e819c[_0x4a83(0x2a9)]};const _0x5a9b97=await _0x5e819c[_0x4a83(0x2aa)](getJWT);if(!_0x5a9b97)return console['error'](_0x5e819c['vMkMV']),![];const _0x4ba16a=await _0x5e819c[_0x4a83(0x2ab)](fetch,API_CONFIG[_0x4a83(0xc)]+_0x4a83(0x2ac),{'method':'POST','headers':{'Content-Type':'application/json','Authorization':_0x5a9b97},'body':JSON[_0x4a83(0x75)]({'accessToken':_0x497721[_0x4a83(0xe7)],'idToken':_0x497721[_0x4a83(0x105)],'refreshToken':_0x2075b9[_0x4a83(0xb1)],'userEmail':_0x5e819c[_0x4a83(0x2ad)](_0x52e789=_0x2075b9[_0x4a83(0xfc)],null)||_0x5e819c[_0x4a83(0x2ad)](_0x52e789,void 0x0)?void 0x0:_0x52e789[_0x4a83(0x92)],'tokenExpiry':new Date(_0x5e819c['IKpwK'](Date[_0x4a83(0x13c)](),_0x5e819c[_0x4a83(0x2ae)](0xe10,0x3e8)))['toISOString'](),'timestamp':new Date()[_0x4a83(0x137)]()})});if(_0x4ba16a['ok']){if(_0x5e819c[_0x4a83(0x2af)](_0x5e819c[_0x4a83(0x2b0)],_0x5e819c[_0x4a83(0x2b0)])){const _0x3948b0=await _0x4ba16a[_0x4a83(0x113)]();return console['log'](_0x5e819c[_0x4a83(0x2b1)],_0x3948b0),!![];}else _0x37c9b0['log'](_0x5e819c[_0x4a83(0x2b2)]),_0x2a7b18[_0x4a83(0x2f)]('โ
\x20[YOUTUBE\x20AUTH]\x20Full\x20YouTube\x20connection\x20with\x20persistent\x20access');}else{const _0x34b5fb=await _0x4ba16a[_0x4a83(0x43)]();return console[_0x4a83(0x66)](_0x5e819c[_0x4a83(0x2b3)],_0x4ba16a[_0x4a83(0x46)],_0x34b5fb),![];}}catch(_0xa60698){return console[_0x4a83(0x66)](_0x5e819c[_0x4a83(0x2b4)],_0xa60698),![];}};const triggerTrainingRestart=async(_0xf162ef,_0x48a4e7)=>{const _0x4eb1c6={'PiMkU':'โ ๏ธ\x20Failed\x20to\x20fetch\x20YouTube\x20channel\x20info:','EVrxM':function(_0x4416a4,_0x5aa40d){return _0x4416a4===_0x5aa40d;},'tYUPk':function(_0x4ba2a0,_0x5027eb){return _0x4ba2a0===_0x5027eb;},'ZRpEp':function(_0x38ff16,_0x4cf363){return _0x38ff16===_0x4cf363;},'CWnpm':function(_0x49b462,_0x17baa4){return _0x49b462===_0x17baa4;},'DsXWw':function(_0x477572,_0x74b5e0){return _0x477572===_0x74b5e0;},'tRXrp':function(_0x475fa5,_0x339f88){return _0x475fa5===_0x339f88;},'NiKha':function(_0x1fcb06,_0x3be5b0){return _0x1fcb06===_0x3be5b0;},'NVLdA':_0x4a83(0xb3),'DZwru':_0x4a83(0x2b5),'exGId':_0x4a83(0x2b6),'HZJsu':_0x4a83(0x2b7),'sCXmk':_0x4a83(0x2b8),'fIxZt':function(_0x581564,_0x4d5e08,_0x5b7c39){return _0x581564(_0x4d5e08,_0x5b7c39);},'IbibM':_0x4a83(0x2b9),'dhBsB':_0x4a83(0xbc),'PITui':function(_0x3f9b1f,_0xa04db2){return _0x3f9b1f!==_0xa04db2;},'vpSvo':_0x4a83(0x2ba),'KVcCM':_0x4a83(0x2bb),'qGCAX':'โ\x20[TRAINING\x20RESTART]\x20Training\x20restart\x20failed:','wmiAv':_0x4a83(0x2bc)};try{if(_0x4eb1c6['exGId']===_0x4eb1c6[_0x4a83(0x2bd)]){var _0x5329bb,_0x43103b;_0x5cf4e2[_0x4a83(0x2f)](_0x4eb1c6[_0x4a83(0x2be)],_0x48b980['status']),_0x472117=(_0x4eb1c6[_0x4a83(0x2bf)](_0x5329bb=_0x37aa77[_0x4a83(0xfa)],null)||_0x4eb1c6[_0x4a83(0x2c0)](_0x5329bb,void 0x0)||_0x4eb1c6[_0x4a83(0x2bf)](_0x5329bb=_0x5329bb[_0x4a83(0xfc)],null)||_0x4eb1c6[_0x4a83(0x2c1)](_0x5329bb,void 0x0)?void 0x0:_0x5329bb[_0x4a83(0x7d)])||(_0x4eb1c6['CWnpm'](_0x43103b=_0x1104c9[_0x4a83(0xfa)],null)||_0x4eb1c6[_0x4a83(0x2c2)](_0x43103b,void 0x0)||_0x4eb1c6[_0x4a83(0x2c3)](_0x43103b=_0x43103b[_0x4a83(0xfc)],null)||_0x4eb1c6[_0x4a83(0x2c4)](_0x43103b,void 0x0)?void 0x0:_0x43103b[_0x4a83(0x92)])||_0x4eb1c6[_0x4a83(0x2c5)];}else{console[_0x4a83(0x2f)](_0x4eb1c6['sCXmk'],_0xf162ef);const _0x679550=await _0x4eb1c6[_0x4a83(0x2c6)](fetch,API_CONFIG[_0x4a83(0xc)]+'/mobile-training/restart',{'method':'POST','headers':{'Content-Type':'application/json','Authorization':_0x48a4e7},'body':JSON[_0x4a83(0x75)]({'username':_0xf162ef,'reason':_0x4eb1c6[_0x4a83(0x2c7)],'platform':_0x4eb1c6[_0x4a83(0x2c8)],'timestamp':new Date()[_0x4a83(0x137)](),'requestNewTraining':!![]})});if(_0x679550['ok']){const _0x502578=await _0x679550[_0x4a83(0x113)]();console[_0x4a83(0x2f)](_0x4a83(0x2c9),_0x502578);}else{if(_0x4eb1c6[_0x4a83(0x2ca)](_0x4eb1c6['vpSvo'],_0x4eb1c6['KVcCM'])){const _0x239d57=await _0x679550[_0x4a83(0x43)]();console['error'](_0x4eb1c6[_0x4a83(0x2cb)],_0x679550[_0x4a83(0x46)],_0x239d57);throw new Error(_0x4a83(0x2cc)+_0x679550[_0x4a83(0x46)]);}else return _0x3e22ff[_0x4a83(0x66)](_0x4eb1c6[_0x4a83(0x2cd)],_0x576cfe),{'success':![],'error':_0x4a83(0x9e)};}}}catch(_0x8963d0){console[_0x4a83(0x66)](_0x4eb1c6[_0x4a83(0x2ce)],_0x8963d0);throw _0x8963d0;}};export const testYouTubeRefreshToken=async _0x3f3628=>{const _0xc343e9={'TeWAx':_0x4a83(0xa0),'HLQBS':function(_0x323ec4){return _0x323ec4();},'dwfig':_0x4a83(0x2cf),'cnJvE':function(_0x36f10a,_0x1b6982){return _0x36f10a(_0x1b6982);},'gpdUh':_0x4a83(0x2d0),'EXpSZ':_0x4a83(0x2d1),'fuIMO':_0x4a83(0x1d0)};console[_0x4a83(0x2f)](_0x4a83(0x2d2)),console[_0x4a83(0x2f)](_0xc343e9[_0x4a83(0x2d3)],_0x3f3628);try{const _0x473f74=await _0xc343e9[_0x4a83(0x2d4)](debugYouTubeTokens);console[_0x4a83(0x2f)](_0x4a83(0x2d5),_0x473f74);if(!_0x473f74[_0x4a83(0x157)]){console['log'](_0xc343e9['dwfig']);const _0x5013d9=await _0xc343e9['cnJvE'](fixUserYouTubeConnection,_0x3f3628);if(_0x5013d9){console['log'](_0xc343e9[_0x4a83(0x2d6)]);const _0x206b8a=await _0xc343e9[_0x4a83(0x2d4)](debugYouTubeTokens);console[_0x4a83(0x2f)](_0xc343e9[_0x4a83(0x2d7)],_0x206b8a);}else console[_0x4a83(0x66)](_0xc343e9[_0x4a83(0x2d8)]);}else console['log'](_0x4a83(0x2d9));}catch(_0x3ad199){console[_0x4a83(0x66)]('โ\x20Error\x20testing\x20YouTube\x20refresh\x20token:',_0x3ad199);}};function _0x4a83(_0x577dcb,_0x4a83fb){_0x577dcb=_0x577dcb-0x0;const _0x300d22=_0x577d();let _0x938a18=_0x300d22[_0x577dcb];return _0x938a18;}export const requestEmailVerification=async(_0x4fc9be,_0x229c65=![])=>{const _0x10e0ae={'kHFyO':function(_0x5edba2){return _0x5edba2();},'qHucd':_0x4a83(0x2da),'ZoTmY':function(_0x2796eb,_0x551e2f){return _0x2796eb===_0x551e2f;},'DEDOw':_0x4a83(0x2db),'xUMJJ':_0x4a83(0x2dc),'fcjYS':'Failed\x20to\x20send\x20verification\x20code','iJBhr':'DXZcj','IvvFM':_0x4a83(0x2b5),'rdMtV':_0x4a83(0x9e)};try{console['log']('๐ง\x20Requesting\x20email\x20verification\x20for:',_0x4fc9be);const _0x28f97b=await fetch(API_CONFIG[_0x4a83(0xc)]+'/email/verification',{'method':'POST','headers':_0x10e0ae[_0x4a83(0x2dd)](getDeveloperAuthHeaders),'body':JSON[_0x4a83(0x75)]({'email':_0x4fc9be,'action':_0x10e0ae[_0x4a83(0x2de)],'testMode':_0x229c65})}),_0x3ce0ae=await _0x28f97b[_0x4a83(0x113)]();if(_0x28f97b['ok']){if(_0x10e0ae[_0x4a83(0x2df)](_0x10e0ae[_0x4a83(0x2e0)],_0x10e0ae[_0x4a83(0x2e0)]))return{'success':!![],'message':_0x3ce0ae['message']||_0x10e0ae[_0x4a83(0x2e1)]};else _0x1dacf3[_0x4a83(0xec)](_0x4a83(0x1bc));}else return{'success':![],'error':_0x3ce0ae[_0x4a83(0x39)]||_0x10e0ae[_0x4a83(0x2e2)]};}catch(_0x7975b3){return _0x10e0ae[_0x4a83(0x2e3)]!==_0x10e0ae['iJBhr']?(_0x174885['error'](_0x4a83(0x1ab),_0x89cf8a),{'hasRefreshToken':![],'refreshTokenType':'error'}):(console['error'](_0x10e0ae['IvvFM'],_0x7975b3),{'success':![],'error':_0x10e0ae[_0x4a83(0x2e4)]});}};export const verifyEmailCode=async(_0x467c31,_0x20e7d6,_0x367590=![])=>{const _0x54bb5c={'lwtra':function(_0x7c46e4,_0x327d2c,_0x2769c1){return _0x7c46e4(_0x327d2c,_0x2769c1);},'PFYDf':function(_0x499790){return _0x499790();},'wAYJo':'verify','cKVIg':function(_0x377bf1,_0x42505d){return _0x377bf1===_0x42505d;},'uxgxq':_0x4a83(0x2e5),'PWZjw':_0x4a83(0x2e6),'QaGvA':'Email\x20verified\x20successfully','CgGNP':'Invalid\x20verification\x20code','lfaiV':'โ\x20Error\x20verifying\x20email\x20code:','RrNUT':_0x4a83(0x9e)};try{console[_0x4a83(0x2f)](_0x4a83(0x2e7),_0x467c31);const _0x4835b1=await _0x54bb5c[_0x4a83(0x2e8)](fetch,API_CONFIG[_0x4a83(0xc)]+'/email/verification',{'method':'POST','headers':_0x54bb5c[_0x4a83(0x2e9)](getDeveloperAuthHeaders),'body':JSON[_0x4a83(0x75)]({'email':_0x467c31,'code':_0x20e7d6,'action':_0x54bb5c['wAYJo'],'testMode':_0x367590})}),_0x14efe4=await _0x4835b1['json']();return _0x4835b1['ok']?_0x54bb5c['cKVIg'](_0x54bb5c[_0x4a83(0x2ea)],_0x54bb5c[_0x4a83(0x2eb)])?(_0x558388[_0x4a83(0x2f)]('โ
\x20'+_0x499df6+'\x20YouTube\x20connection\x20fixed\x20via\x20Method\x202!'),!![]):{'success':!![],'message':_0x14efe4[_0x4a83(0x39)]||_0x54bb5c[_0x4a83(0x2ec)],'existingUser':_0x14efe4[_0x4a83(0x2ed)]||![],'token':_0x14efe4['token']}:{'success':![],'error':_0x14efe4['message']||_0x54bb5c[_0x4a83(0x2ee)]};}catch(_0x372bc0){return console['error'](_0x54bb5c[_0x4a83(0x2ef)],_0x372bc0),{'success':![],'error':_0x54bb5c[_0x4a83(0x2f0)]};}};export const checkEmailVerificationStatus=async(_0x3eaeff,_0x28128d=![])=>{const _0x5890b6={'uxuVD':_0x4a83(0x2f1),'hLVAu':_0x4a83(0xc6),'ZtLQl':_0x4a83(0x152),'dRqec':_0x4a83(0xc7),'zkrZu':_0x4a83(0xc8),'HLqQq':_0x4a83(0x2f2),'LLFCL':_0x4a83(0x156),'Kskrx':function(_0x16027e,_0x2456ea,_0x58b05d){return _0x16027e(_0x2456ea,_0x58b05d);},'ssqbl':function(_0x47c895){return _0x47c895();},'HwJoz':_0x4a83(0x2f3),'ohTnX':_0x4a83(0x2f4),'hylfI':_0x4a83(0x2f5)};try{const _0x2e60cf=await _0x5890b6[_0x4a83(0x2f6)](fetch,API_CONFIG[_0x4a83(0xc)]+'/email/verification/status',{'method':'POST','headers':_0x5890b6[_0x4a83(0x2f7)](getDeveloperAuthHeaders),'body':JSON[_0x4a83(0x75)]({'email':_0x3eaeff,'testMode':_0x28128d})}),_0x3564e7=await _0x2e60cf[_0x4a83(0x113)]();return{'success':_0x2e60cf['ok'],'isPending':_0x3564e7[_0x4a83(0x2f8)]||![],'message':_0x3564e7[_0x4a83(0x39)]};}catch(_0x277141){if(_0x5890b6[_0x4a83(0x2f9)]!==_0x5890b6[_0x4a83(0x2fa)])return console['error'](_0x5890b6[_0x4a83(0x2fb)],_0x277141),{'success':![],'isPending':![],'error':'Network\x20error'};else _0x36e2cb[_0x4a83(0x2f)](_0x5890b6['uxuVD']),_0x1e883c[_0x4a83(0x2f)](_0x5890b6[_0x4a83(0x2fc)]),_0x481803[_0x4a83(0x2f)](_0x5890b6[_0x4a83(0x2fd)]),_0x478781[_0x4a83(0x2f)](_0x4a83(0x153)),_0x2b28a1[_0x4a83(0x2f)](_0x5890b6['dRqec']),_0x45ff6b[_0x4a83(0x2f)](_0x5890b6[_0x4a83(0x2fe)]),_0x313c16[_0x4a83(0x2f)](_0x5890b6[_0x4a83(0x2ff)],_0x10bf83?_0x5890b6['LLFCL']:'No');}};function _0x577d(){const _0xaf68f2=['SDK\x20not\x20initialized.\x20Developers\x20must\x20call\x20initializeApiKey()\x20before\x20using\x20auth\x20features.','zrLTe','RBAln','apiKey','pTOMS','VpAfv','Bearer\x20','1030678346906-lovkuds2ouqmoc8eu5qpo98spa6edv4o.apps.googleusercontent.com','demo_instagram_client_id','onairosevents://auth/callback','user_profile,user_media','code','BASE_URL','/youtube/authorize','https://www.googleapis.com/auth/youtube.readonly','/reddit/authorize','/pinterest/authorize','boards:read,pins:read','https://www.facebook.com/v12.0/dialog/oauth','demo_facebook_client_id','openid\x20profile\x20email','/gmail/authorize','demo_gmail_client_id','https://www.googleapis.com/auth/gmail.readonly','https://chat.openai.com','https://claude.ai/login','https://gemini.google.com','https://hinge.co','https://www.instagram.com','https://web.telegram.org/k/','KXDDC','hasNativeSDK','Facebook\x20Login\x20completed\x20successfully','Failed\x20to\x20send\x20verification\x20code','๐\x20[CONNECTIVITY]\x20Running\x20comprehensive\x20network\x20diagnostics...','๐\x20[CONNECTIVITY]\x20Test\x201:\x20Checking\x20general\x20internet\x20(google.com)...','https://www.google.com','no-cors','reachable','APSQE','โ\x20[CONNECTIVITY]\x20Cannot\x20reach\x20Google\x20-\x20internet\x20may\x20be\x20down:','๐\x20[CONNECTIVITY]\x20Test\x202:\x20Checking\x20API\x20server...','โ
\x20[CONNECTIVITY]\x20API\x20server\x20is\x20reachable','โ\x20[CONNECTIVITY]\x20Cannot\x20reach\x20API\x20server:','No\x20internet\x20connectivity\x20detected.\x20Check\x20your\x20network\x20connection.','mnBPR','โ\x20[CONNECTIVITY]\x20Connectivity\x20test\x20failed:','log','iPsOB','BrKqz','kwKaU','DyphP','googleTest','โ
\x20[CONNECTIVITY]\x20Google\x20is\x20reachable\x20-\x20internet\x20is\x20working','ILpjV','JYzpA','DEPzV','message','Initiating\x20Facebook\x20Login\x20for\x20Instagram','ddgmd','litWf','NKzAO','lpMAu','abort','OIqUr','/health','tLTbh','text','catch','Unable\x20to\x20read\x20response','status','statusText','wVXIj','hqcmS','Stddv','โ ๏ธ\x20[CONNECTIVITY]\x20API\x20server\x20responded\x20with\x20status:\x20','PbDpU','api2Test','success','YhsNF','Vablg','Internet\x20works\x20but\x20API\x20server\x20is\x20unreachable.\x20The\x20server\x20may\x20be\x20blocking\x20requests\x20from\x20this\x20device/simulator.','sVCos','GJJnM','jTfzZ','Network\x20error:\x20','โ\x20Error\x20testing\x20YouTube\x20refresh\x20token:','fqnlR','โน๏ธ\x20User\x20should\x20authenticate\x20first\x20via\x20Google/Apple/Email\x20before\x20connecting\x20YouTube','qVShC','AbortError','Network\x20request\x20failed','0|1|5|2|3|4','\x20\x20\x203.\x20DNS\x20resolution\x20failed','\x20\x20\x204.\x20SSL/TLS\x20certificate\x20issue','\x20\x20\x205.\x20iOS\x20simulator\x20network\x20sandbox\x20issue\x20-\x20try\x20on\x20physical\x20device','oMYVF','๐\x20[OAUTH]\x20Starting\x20OAuth\x20for\x20platform:\x20','๐ฑ\x20[OAUTH]\x20Platform:\x20',',\x20Version:\x20','Version','aWAcu','error','๐ง\x20[OAUTH]\x20Email\x20platform\x20selected,\x20returning\x20mock\x20auth\x20URL','/email/authorize?action=verify','\x20OAuth','โ\x20[OAUTH]\x20Please\x20log\x20in\x20first\x20before\x20connecting\x20platforms','/authorize','๐\x20[OAUTH]\x20Proxy\x20URL:\x20','๐\x20[OAUTH]\x20About\x20to\x20make\x20fetch\x20request...','gMyFc','KPOQd','โฐ\x20[OAUTH]\x20Request\x20timeout\x20for\x20','\x20-\x20aborting','rJcgB','rPAOI','RdRPq','stringify','signal','๐ก\x20[OAUTH]\x20Response\x20status:\x20','โ\x20[OAUTH]\x20Error\x20initiating\x20OAuth\x20for\x20','\x20-\x20','๐\x20[OAUTH]\x20Response\x20data\x20for\x20','URL','url','name','lkBGp','โ\x20[OAUTH]\x20Request\x20timeout\x20for\x20','\x20-\x20the\x20server\x20took\x20too\x20long\x20to\x20respond','VzNgb','includes','GtgZY','dQghj','โ\x20[OAUTH]\x20Network\x20request\x20failed\x20for\x20','.\x20Possible\x20causes:','zzLyV','TuqcT','jeDKz','\x20\x20\x202.\x20API\x20server\x20(API\x20server)\x20is\x20unreachable','UVyzn','RjqIb','adlaf','vrpkz','ySKzR','openid','profile','email','configure','PkxJr','uohIY','zhIFG','gpVvx','โ ๏ธ\x20[YOUTUBE\x20REAUTH]\x20Backend\x20did\x20NOT\x20confirm\x20refresh\x20token\x20reception','๐ก\x20User\x20needs\x20to\x20reconnect\x20with\x20proper\x20consent\x20screen','๐ก\x20Check\x20Google\x20Sign-In\x20configuration:\x20offlineAccess,\x20forceCodeForRefreshToken','โ\x20No\x20current\x20Google\x20user\x20found','โน๏ธ\x20No\x20token\x20cache\x20to\x20clear','No\x20Channel','Network\x20error.\x20Please\x20check\x20your\x20connection\x20and\x20try\x20again.','๐\x20FORCING\x20fresh\x20YouTube\x20consent\x20for\x20refresh\x20token...','๐ค\x20User:','โ
\x20Signed\x20out\x20-\x20consent\x20cache\x20cleared','โน๏ธ\x20Sign\x20out\x20not\x20needed:','dsnuc','YRaIE','โ
\x20Token\x20cache\x20cleared','๐ง\x20Configuring\x20Google\x20Sign-In\x20for\x20forced\x20consent...','๐\x20Initiating\x20sign-in\x20-\x20consent\x20screen\x20should\x20appear...','๐ฑ\x20User\x20should\x20see:\x20\x22Allow\x20[App]\x20to\x20access\x20your\x20YouTube\x20account\x20when\x20you\x27re\x20not\x20using\x20the\x20app?\x22','โ
\x20Sign-in\x20completed\x20-\x20checking\x20for\x20refresh\x20token...','๐ค\x20User\x20email:','๐\x20FULL\x20userInfo\x20object\x20from\x20forceYouTubeReconnectionWithConsent:','๐\x20FULL\x20tokens\x20object\x20from\x20forceYouTubeReconnectionWithConsent:','-\x20Access\x20token:','Present','-\x20ServerAuthCode\x20(currentUser):','๐\x20Refresh\x20token\x20type:','serverAuthCode','refreshToken','Unknown\x20Channel','JIjfd','RnLTy','ID:','lTGuL','YQxkK','eecsH','โ ๏ธ\x20Error\x20fetching\x20YouTube\x20channel\x20info:','๐\x20Creating\x20authentication\x20token\x20for\x20YouTube\x20connection...','youtube','signOut_and_configure','๐ค\x20Sending\x20comprehensive\x20payload\x20with\x20REFRESH\x20TOKEN\x20to\x20backend:','๐\x20[YOUTUBE\x20REAUTH]\x20=====\x20SENDING\x20REAUTH\x20SIGNAL\x20TO\x20BACKEND\x20=====','๐\x20[YOUTUBE\x20REAUTH]\x20Endpoint:\x20https://API\x20server/youtube/native-auth','๐\x20[YOUTUBE\x20REAUTH]\x20Headers:','NO\x20AUTH\x20TOKEN','๐\x20[YOUTUBE\x20REAUTH]\x20Payload\x20Summary:','๐\x20[YOUTUBE\x20REAUTH]\x20FULL\x20PAYLOAD:','๐ก\x20[YOUTUBE\x20REAUTH]\x20Response\x20Status\x20Text:','โ
\x20[YOUTUBE\x20REAUTH]\x20Training\x20will\x20work,\x20but\x20connection\x20expires\x20in\x20~1\x20hour','๐\x20[YOUTUBE\x20REAUTH]\x20Mode:\x20Temporary\x20(expires\x20~1\x20hour)','๐\x20[YOUTUBE\x20REAUTH]\x20Training\x20Ready:\x20Yes','iFyit','โ
\x20[YOUTUBE\x20REAUTH]\x20Response\x20hasRefreshToken:','๐\x20[YOUTUBE\x20REAUTH]\x20Full\x20refresh\x20token:','๐\x20[YOUTUBE\x20REAUTH]\x20REFRESH\x20TOKEN\x20SENT\x20TO\x20BACKEND:','โ ๏ธ\x20[YOUTUBE\x20REAUTH]\x20Response\x20data:','๐\x20[YOUTUBE\x20REAUTH]\x20Signaling\x20training\x20system\x20to\x20restart...','RndmB','Gapfr','โ ๏ธ\x20[YOUTUBE\x20REAUTH]\x20Training\x20restart\x20signal\x20failed:','โ ๏ธ\x20[YOUTUBE\x20REAUTH]\x20User\x20may\x20need\x20to\x20manually\x20restart\x20training','โ\x20[YOUTUBE\x20REAUTH]\x20Backend\x20processing\x20FAILED:','ekYuI','\x20\x20\x202.\x20Check\x20Google\x20Console\x20OAuth\x20configuration','โ\x20This\x20means\x20consent\x20screen\x20did\x20not\x20appear\x20or\x20user\x20denied\x20permissions','๐ก\x20Solutions:','โ\x20CRITICAL:\x20No\x20refresh\x20token\x20even\x20after\x20consent\x20screen','\x20\x20\x203.\x20Ensure\x20user\x20clicks\x20\x22Allow\x22\x20on\x20consent\x20screen','\x20\x20\x201.\x20Try\x20the\x20revoke\x20method:\x20forceYouTubeReconnectionWithRevoke()','FlaBP','โ\x20Error\x20forcing\x20YouTube\x20consent:','๐ก\x20User\x20must\x20click\x20\x22Allow\x22\x20to\x20get\x20refresh\x20token','fXNNc','tugnh','pNLkW','CWLzL','signOut','vJCxO','pFnDJ','GICrV','getTokens','accessToken','gTjvx','jEGpC','clearCachedAccessToken','UkUem','warn','โ ๏ธ\x20[YOUTUBE\x20REAUTH]\x20Expected\x20hasRefreshToken\x20or\x20refreshTokenReceived\x20in\x20response','BWWFy','โ\x20Still\x20no\x20refresh\x20token\x20after\x20revoke\x20method','eaulQ','wrLwc','CKAnD','VKHtP','hasPlayServices','โ
\x20Play\x20Services\x20available','dMdCb','signIn','whfZB','MccKQ','data','YeOvB','user','LlrGp','rfRiV','๐\x20FULL\x20currentUser\x20object\x20from\x20forceYouTubeReconnectionWithConsent:','๐\x20Token\x20analysis:','substring','...','lHPUH','-\x20ID\x20token:','idToken','usAgd','-\x20ServerAuthCode\x20(userInfo):','zwVzG','UsoQx','GkxCM','startsWith','QJsqU','MYPHX','๐บ\x20Fetching\x20YouTube\x20channel\x20information...','wexec','https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true','tlbHt','GXkEY','json','AEbix','items','length','UzBMl','KkTEs','Error\x20exchanging\x20code\x20for\x20token:\x20','Token\x20exchange\x20failed\x20with\x20status\x20','snippet','title','FDDDB','vCUlL','Vfqyr','VJhvL','nCYgO','โ\x20No\x20auth\x20token\x20found\x20for\x20YouTube\x20refresh','โ ๏ธ\x20No\x20YouTube\x20channel\x20found\x20for\x20user','uhOdK','HKBlY','tSfyz','qTYzT','pFlhn','zdrMl','โ\x20CRITICAL:\x20No\x20refresh\x20token\x20available\x20-\x20YouTube\x20connection\x20will\x20fail\x20when\x20token\x20expires','tsUKS','xGkxI','aPcHY','qtGbz','BWnTF','SghoQ','yGGHX','trim','ToBix','RGerh','temp_token_for_youtube_connection','tyHHB','toISOString','QsdkA','mmqhO','FetmB','UGbRU','now','mWXhD','OXdwU','debugInfo','refreshTokenType','URVCb','wjaNO','XGXKa','waBjs','qkWpq','VsmQk','AOZPn','/youtube/native-auth','๐ก\x20[YOUTUBE\x20REAUTH]\x20Response\x20Status:','๐ก\x20[YOUTUBE\x20REAUTH]\x20Response\x20Headers:','headers','validation','isTemporaryMode','YAbhv','crDQC','kKLAq','BYNsi','๐\x20[YOUTUBE\x20REAUTH]\x20SUCCESS:\x20Temporary\x20YouTube\x20connection\x20established!','๐\x20[YOUTUBE\x20REAUTH]\x20Connection\x20Details:','fEBTj','iHrAF','Yes','hasRefreshToken','refreshTokenReceived','RmdlZ','sMfNL','Glajm','0|2|1|6|4|5|3','split','โ
\x20[YOUTUBE\x20REAUTH]\x20Backend\x20CONFIRMED\x20refresh\x20token\x20received','znYzH','FDFix','Rqwfd','UefaV','jqIsq','sjdmq','SuEdN','inxAt','โ
\x20[YOUTUBE\x20REAUTH]\x20Training\x20restart\x20signal\x20sent\x20successfully','gZddz','GUhED','iorVW','oKfFQ','wipRu','skovT','โ\x20[YOUTUBE\x20REAUTH]\x20This\x20means\x20the\x20reauth\x20signal\x20was\x20not\x20processed','uhLFC','ZIHrj','KkAmw','wgtOa','Pyvcq','kykOO','DPUbo','mmgAq','xJrFM','โ\x20User\x20cancelled\x20sign-in\x20-\x20no\x20refresh\x20token\x20obtained','lGhKQ','PLAY_SERVICES_NOT_AVAILABLE','MqZWb','JTOjc','โ\x20Google\x20Play\x20Services\x20not\x20available','โ\x20YouTube\x20reconnection\x20failed','eUSpe','๐\x20FORCING\x20YouTube\x20consent\x20via\x20REVOKE\x20method...','โ
\x20Revoked\x20existing\x20permissions\x20-\x20fresh\x20consent\x20REQUIRED','โน๏ธ\x20No\x20existing\x20permissions\x20to\x20revoke:','๐\x20Signing\x20in\x20after\x20revoke\x20-\x20consent\x20screen\x20MUST\x20appear...','๐\x20Refresh\x20token\x20preview:','โ\x20Error\x20with\x20revoke\x20method:','jWmiw','ZRUgb','pcZPi','iVAPU','CafdO','vDiWM','fuyJT','QgmBy','nOeuS','RzwqH','โ
\x20Signed\x20out\x20completely','qxqLI','getCurrentUser','bffcK','โ
\x20SUCCESS:\x20Got\x20refresh\x20token\x20after\x20REVOKE\x20+\x20consent!','emPIv','๐\x20Method\x201:\x20Trying\x20forced\x20consent\x20via\x20configuration...','๐\x20Method\x202:\x20Trying\x20forced\x20consent\x20via\x20revoke...','๐ง\x20Fixing\x20YouTube\x20connection\x20for\x20user:\x20','cWmYc','\x20YouTube\x20connection\x20fixed\x20via\x20Method\x201!','โ\x20Failed\x20to\x20fix\x20','\x20YouTube\x20connection\x20with\x20both\x20methods','โ
\x20Re-authentication\x20successful','โ\x20Re-authentication\x20also\x20failed:','๐\x20Attempting\x20to\x20refresh\x20Google\x20tokens...','โ\x20User\x20not\x20signed\x20in\x20to\x20Google,\x20cannot\x20refresh\x20tokens','โ
\x20Successfully\x20refreshed\x20Google\x20tokens','โ\x20Failed\x20to\x20refresh\x20Google\x20tokens:','๐\x20Refresh\x20failed,\x20attempting\x20re-authentication...','bdYww','PpFfN','MOkuw','๐\x20YouTube\x20Token\x20Debug:','Missing','none','IuIkm','โ\x20Debug\x20tokens\x20failed:','NdCoD','gsJgR','voRaf','rALBl','HdixL','ewNsL','NZPJA','nakFu','OKMFE','pJpZD','โ\x20[OAUTH]\x20User\x20not\x20authenticated\x20-\x20cannot\x20initiate\x20','BocXF','โ
\x20Signed\x20out\x20from\x20Google','pRsSS','โน๏ธ\x20Token\x20clearing\x20failed\x20or\x20not\x20needed:','โ
\x20Refresh\x20token\x20confirmed:','โ ๏ธ\x20Still\x20no\x20refresh\x20token\x20after\x20reconnection','MAmwv','YZhMa','lIfvC','User\x20cancelled\x20Google\x20Sign-In','ufjNt','โน๏ธ\x20Already\x20signed\x20out\x20or\x20sign\x20out\x20failed:','โ
\x20Cleared\x20cached\x20access\x20token','BTzvr','RrcMh','zkDzb','โ
\x20YouTube\x20reconnected\x20successfully\x20with\x20refresh\x20token','dMWRX','UosTI','RVhBf','RsRzQ','oTCcC','auth/callback','code=','โ\x20Failed\x20to\x20get\x20fresh\x20tokens\x20from\x20Google\x20SDK','โ\x20Failed\x20to\x20fix\x20YouTube\x20connection','โ
\x20Got\x20serverAuthCode\x20(refresh\x20token\x20mechanism)','๐\x20[YOUTUBE\x20REAUTH]\x20Refresh\x20token\x20type:','๐\x20[YOUTUBE\x20REAUTH]\x20Refresh\x20token\x20length:','โ
\x20Refresh\x20token\x20available\x20for\x20YouTube\x20connection','tlquI','โ\x20[YOUTUBE\x20AUTH]\x20Username\x20is\x20required\x20for\x20YouTube\x20authentication','tlnsM','knvMi','๐\x20Signed\x20out\x20to\x20force\x20fresh\x20consent','โ
\x20Google\x20Sign-In\x20successful:','๐\x20FULL\x20userInfo\x20object:','๐\x20FULL\x20currentUser\x20object:','๐\x20REFRESH\x20TOKEN\x20EXTRACTION:','-\x20userInfo.data?.serverAuthCode:','mASEn','โ
\x20Got\x20serverAuthCode\x20from\x20sign-in\x20response','โ ๏ธ\x20Continuing\x20without\x20refresh\x20token\x20-\x20connection\x20may\x20fail\x20later','eCjhU','โ ๏ธ\x20Failed\x20to\x20fetch\x20YouTube\x20channel\x20info:','lAafG','fVxee','๐\x20Linking\x20YouTube\x20data\x20to\x20user:','๐\x20Using\x20auth\x20token\x20for\x20linking:','๐ค\x20BACKEND\x20PAYLOAD\x20SUMMARY:','-\x20hasAccessToken:','-\x20hasServerAuthCode:','-\x20refreshTokenType:','-\x20userEmail:','-\x20channelName:','๐\x20COMPLETE\x20BACKEND\x20PAYLOAD:','๐ก\x20Backend\x20response\x20status:','MJTGI','โ
\x20[YOUTUBE\x20AUTH]\x20Backend\x20confirmed\x20refresh\x20token\x20received','โ
\x20[YOUTUBE\x20AUTH]\x20Full\x20YouTube\x20connection\x20with\x20persistent\x20access','๐\x20[YOUTUBE\x20AUTH]\x20Response\x20data\x20keys:','โ ๏ธ\x20[YOUTUBE\x20AUTH]\x20Connection\x20may\x20fail\x20when\x20tokens\x20expire','โ\x20YouTube\x20auth\x20failed:','๐\x20BACKEND\x20ERROR\x20RESPONSE:','โ\x20Google\x20Sign-In\x20error:','PaWCX','Google\x20Play\x20Services\x20not\x20available','instagram','Ksyww','YshkU','๐\x20Initiating\x20native\x20Google\x20Sign-In\x20for\x20YouTube','nxYmE','byqZC','Axohz','bvFqG','nMcLr','rXEyB','ZiXyt','eqwIL','โน๏ธ\x20Sign\x20out\x20not\x20needed\x20or\x20failed:','wvdKi','tDyaY','osPPO','๐\x20Got\x20Google\x20tokens','stiza','iYrMY','ROZDj','rElnZ','Bluon','TIfKv','Present:\x20','iOTyd','Dkdfn','EbdRI','-\x20tokens.accessToken:','ItOsl','NjjBY','NUFcy','tMSSh','QyTSz','iakuu','TJcuC','SZHLg','EgKrp','DNGSi','JHXTw','NblKX','tAkLH','ktMlX','SpDHW','kERLg','oJSEl','zUywH','VfYwv','jMhgB','โ
\x20YouTube\x20channel\x20found:','kNnCz','aIwjp','wBbFZ','BIryE','oMBBT','NSBxF','AlPNX','VENTJ','rFKef','AggOg','fKQjX','RWAUb','No\x20API\x20key\x20configured.\x20Please\x20initialize\x20the\x20SDK\x20with\x20a\x20valid\x20developer\x20API\x20key.','bQZJQ','URKYy','HQhJV','getItem','onairos_username','dDRbL','youtube_user','vAdoX','xCxfe','โน๏ธ\x20No\x20valid\x20authentication\x20token\x20found\x20for\x20YouTube\x20connection','โน๏ธ\x20NOTE:\x20SDK\x20does\x20not\x20create\x20users\x20during\x20YouTube\x20connection','DaUcT','ccXkY','FjYmQ','evzBj','FefEx','zqByC','No\x20token','๐บ\x20YouTube\x20channel\x20name:','user-','youtube-','LRsvw','UwKPi','ACsQn','apple','zMVxh','nsNke','vumPj','zSgEl','KDMUg','UZhwM','hbtii','lptYp','hQnJz','VhBWN','GUIGU','FPTcM','dTDUb','EEuXz','WdSwG','๐ก\x20Backend\x20response\x20headers:','IAFgh','SgVuh','Pyrds','KqULe','BLivq','xXksb','fgRHR','temporaryMode','XjWOq','temporary\x20access\x20token\x20mode','๐\x20[YOUTUBE\x20AUTH]\x20YouTube\x20connected\x20in\x20temporary\x20mode','LAwVr','โน๏ธ\x20[YOUTUBE\x20AUTH]\x20User\x20can\x20reconnect\x20later\x20for\x20refresh\x20tokens\x20if\x20needed','AYEFT','fMMfX','HhmbH','sOQTl','sxGIf','keys','IMgVa','๐\x20[YOUTUBE\x20REAUTH]\x20SUCCESS:\x20Full\x20YouTube\x20connection\x20with\x20refresh\x20tokens!','tvauj','AXyqp','UVIYh','mBTYe','aGQpy','wjOwy','oaMKt','NCyII','WtciT','SIGN_IN_CANCELLED','UEXgU','XYZQq','dEiUj','IN_PROGRESS','Google\x20Sign-In\x20already\x20in\x20progress','nSZhl','lWhnd','xEjhQ','yzaiO','qDWBk','xGbnf','jEBxP','Exchanging\x20code\x20for\x20token\x20for\x20platform:\x20','/token','ScGgo','kXyNw','XOQbl','pGZpD','HyzfC','AgVEH','Token\x20exchange\x20successful\x20for\x20','uUiAN','Svfcl','_access_token_','random','_refresh_token_','toString','sHSlg','OAUQK','NxgUe','Invalid\x20verification\x20code','snilj','gsjWQ','โ
\x20YouTube\x20tokens\x20refreshed\x20successfully:','โ\x20YouTube\x20token\x20refresh\x20failed:','โ\x20Error\x20refreshing\x20YouTube\x20tokens:','๐\x20Refreshing\x20YouTube\x20tokens...','AasFZ','oNzEe','SvKBH','xBRll','erLSS','dFzeK','dvGnr','/youtube/refresh-token','hXUcs','soEmY','Cwwjd','OEaXU','WqENe','BpTgE','ktCfa','NJlAd','โ\x20Error\x20requesting\x20email\x20verification:','wQukP','ORvej','๐\x20[TRAINING\x20RESTART]\x20Triggering\x20training\x20restart\x20for\x20user:','youtube_reauth','JJual','VboJL','โ\x20[TRAINING\x20RESTART]\x20Error\x20triggering\x20training\x20restart:','HZJsu','PiMkU','EVrxM','tYUPk','ZRpEp','DsXWw','tRXrp','NiKha','NVLdA','fIxZt','IbibM','dhBsB','โ
\x20[TRAINING\x20RESTART]\x20Training\x20restart\x20successful:','PITui','qGCAX','Training\x20restart\x20failed:\x20','DZwru','wmiAv','โ ๏ธ\x20No\x20refresh\x20token\x20found\x20-\x20attempting\x20to\x20fix...','โ
\x20YouTube\x20connection\x20fixed!\x20Testing\x20again...','๐\x20New\x20token\x20status:','๐งช\x20Testing\x20YouTube\x20refresh\x20token\x20functionality...','TeWAx','HLQBS','๐\x20Current\x20token\x20status:','gpdUh','EXpSZ','fuIMO','โ
\x20Refresh\x20token\x20already\x20available','request','MUpoW','Verification\x20code\x20sent\x20to\x20your\x20email','kHFyO','qHucd','ZoTmY','DEDOw','xUMJJ','fcjYS','iJBhr','rdMtV','deThl','HMMth','๐\x20Verifying\x20email\x20code\x20for:','lwtra','PFYDf','uxgxq','PWZjw','QaGvA','existingUser','CgGNP','lfaiV','RrNUT','๐\x20[YOUTUBE\x20REAUTH]\x20YouTube\x20connected\x20in\x20temporary\x20mode','๐\x20[YOUTUBE\x20REAUTH]\x20Refresh\x20token\x20sent:','UrftP','BPFFF','โ\x20Error\x20checking\x20email\x20verification\x20status:','Kskrx','ssqbl','isPending','HwJoz','ohTnX','hylfI','hLVAu','ZtLQl','zkrZu','HLqQq','๐ง\x20Platform\x20auth\x20service\x20initialized','xDzdf','YqEkE'];_0x577d=function(){return _0xaf68f2;};return _0x577d();}export const initializePlatformAuthService=()=>{const _0x3d297d={'xDzdf':_0x4a83(0x300),'YqEkE':function(_0x39fbd7){return _0x39fbd7();}};console['log'](_0x3d297d[_0x4a83(0x301)]),_0x3d297d[_0x4a83(0x302)](initializeGoogleSignIn);};
|