@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,952 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
// Admin key for backend validation
|
|
11
|
-
const ADMIN_API_KEY = exports.ADMIN_API_KEY = 'OnairosIsAUnicorn2025';
|
|
12
|
-
|
|
13
|
-
// API key types
|
|
14
|
-
let ApiKeyType = exports.ApiKeyType = /*#__PURE__*/function (ApiKeyType) {
|
|
15
|
-
ApiKeyType["DEVELOPER"] = "developer";
|
|
16
|
-
ApiKeyType["ADMIN"] = "admin";
|
|
17
|
-
ApiKeyType["INVALID"] = "invalid";
|
|
18
|
-
return ApiKeyType;
|
|
19
|
-
}({}); // JWT token storage key
|
|
20
|
-
const JWT_TOKEN_KEY = 'onairos_jwt_token';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Two-Tier Authentication Service for Onairos React Native SDK
|
|
24
|
-
*
|
|
25
|
-
* This service implements the two-tier authentication system:
|
|
26
|
-
* 1. Developer API Keys: For app-level operations (email verification, app registration)
|
|
27
|
-
* 2. JWT User Tokens: For user-level operations (PIN storage, user profile)
|
|
28
|
-
*
|
|
29
|
-
* How it works:
|
|
30
|
-
* 1. Initialize with developer API key
|
|
31
|
-
* 2. Use API key for email verification requests
|
|
32
|
-
* 3. Store JWT token from email verification response
|
|
33
|
-
* 4. Use JWT token for user-authenticated requests
|
|
34
|
-
* 5. Handle token expiration gracefully
|
|
35
|
-
*
|
|
36
|
-
* Backend Integration:
|
|
37
|
-
* - Developer routes: Authorization: Bearer ${API_KEY}
|
|
38
|
-
* - User routes: Authorization: Bearer ${JWT_TOKEN}
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
// Global configuration state
|
|
42
|
-
let globalConfig = null;
|
|
43
|
-
let validationCache = new Map();
|
|
44
|
-
let isInitialized = false;
|
|
45
|
-
let userToken = null;
|
|
46
|
-
|
|
47
|
-
// Cache duration (5 minutes)
|
|
48
|
-
const CACHE_DURATION = 5 * 60 * 1000;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Check network connectivity
|
|
52
|
-
* @returns Promise<boolean> - true if connected, false otherwise
|
|
53
|
-
*/
|
|
54
|
-
const checkNetworkConnectivity = async () => {
|
|
55
|
-
try {
|
|
56
|
-
const netInfo = await _netinfo.default.fetch();
|
|
57
|
-
return netInfo.isConnected === true && netInfo.isInternetReachable !== false;
|
|
58
|
-
} catch (error) {
|
|
59
|
-
console.warn('⚠️ Failed to check network connectivity:', error);
|
|
60
|
-
// If we can't check connectivity, assume we're connected and let the request fail naturally
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
// API endpoints for different environments (updated to handle non-existent dev endpoint)
|
|
66
|
-
const API_ENDPOINTS = {
|
|
67
|
-
production: 'https://api2.onairos.uk',
|
|
68
|
-
staging: 'https://api2.onairos.uk',
|
|
69
|
-
// Fallback to production for staging
|
|
70
|
-
development: 'https://api2.onairos.uk' // Fallback to production since dev-api2.onairos.uk doesn't exist
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Initialize the SDK with developer API key
|
|
75
|
-
* @param config API configuration including developer API key
|
|
76
|
-
*/
|
|
77
|
-
const initializeApiKey = async config => {
|
|
78
|
-
try {
|
|
79
|
-
console.log('🔑 Initializing Onairos SDK with developer API key...');
|
|
80
|
-
if (!config.apiKey) {
|
|
81
|
-
throw new Error('Developer API key is required for SDK initialization');
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Check if it's admin key first (admin key is shorter than 32 chars)
|
|
85
|
-
if (!isAdminKey(config.apiKey) && config.apiKey.length < 32) {
|
|
86
|
-
throw new Error('Invalid API key format. Developer keys must be at least 32 characters long.');
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Set global configuration
|
|
90
|
-
globalConfig = {
|
|
91
|
-
apiKey: config.apiKey,
|
|
92
|
-
environment: config.environment || 'production',
|
|
93
|
-
enableLogging: config.enableLogging !== false,
|
|
94
|
-
// Default to true
|
|
95
|
-
timeout: config.timeout || 30000,
|
|
96
|
-
retryAttempts: config.retryAttempts || 3
|
|
97
|
-
};
|
|
98
|
-
if (globalConfig.enableLogging) {
|
|
99
|
-
console.log('📝 SDK Configuration:', {
|
|
100
|
-
environment: globalConfig.environment,
|
|
101
|
-
timeout: globalConfig.timeout,
|
|
102
|
-
retryAttempts: globalConfig.retryAttempts,
|
|
103
|
-
apiKeyPrefix: config.apiKey.substring(0, 8) + '...',
|
|
104
|
-
enableLogging: globalConfig.enableLogging
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Validate the API key (handles both admin and developer keys)
|
|
109
|
-
const validation = await validateApiKey(config.apiKey);
|
|
110
|
-
if (!validation.isValid) {
|
|
111
|
-
// Use defensive coding to handle cases where validation.error might be undefined
|
|
112
|
-
const errorMessage = validation.error || '';
|
|
113
|
-
|
|
114
|
-
// Check if it's a network/connectivity issue (either from error message or the flag)
|
|
115
|
-
const isNetworkError = validation.isNetworkError || errorMessage.includes('Network request failed') || errorMessage.includes('Network error') || errorMessage.includes('JSON Parse error') || errorMessage.includes('API validation endpoint returned') || errorMessage.includes('timeout') || errorMessage.includes('ENOTFOUND') || errorMessage.includes('fetch') || errorMessage.includes('No network connection');
|
|
116
|
-
if (isNetworkError) {
|
|
117
|
-
console.warn('⚠️ API key validation failed due to network/connectivity issues');
|
|
118
|
-
console.warn('🔄 Continuing in offline mode with basic validation');
|
|
119
|
-
console.warn('📝 SDK will function with limited validation. Network connectivity will be retried automatically.');
|
|
120
|
-
console.warn('🌐 Error details:', validation.error);
|
|
121
|
-
|
|
122
|
-
// Continue initialization in offline mode - don't throw error
|
|
123
|
-
console.log('📱 SDK initialized in offline mode - will retry validation when network is available');
|
|
124
|
-
} else {
|
|
125
|
-
// Only throw for actual API key validation errors (not network issues)
|
|
126
|
-
throw new Error(`API key validation failed: ${validation.error}`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Try to load existing JWT token
|
|
131
|
-
await loadJWT();
|
|
132
|
-
isInitialized = true;
|
|
133
|
-
if (globalConfig.enableLogging) {
|
|
134
|
-
console.log('✅ Onairos SDK initialized successfully');
|
|
135
|
-
if (isAdminKey(config.apiKey)) {
|
|
136
|
-
console.log('🔑 Admin API key ready with full permissions');
|
|
137
|
-
} else {
|
|
138
|
-
console.log('🔑 Developer API key ready for app-level operations');
|
|
139
|
-
}
|
|
140
|
-
if (userToken) {
|
|
141
|
-
console.log('🎫 User JWT token loaded from storage');
|
|
142
|
-
}
|
|
143
|
-
if (validation.permissions) {
|
|
144
|
-
console.log('🔐 API Key Permissions:', validation.permissions);
|
|
145
|
-
}
|
|
146
|
-
if (validation.rateLimits) {
|
|
147
|
-
console.log('⏱️ Rate Limits:', validation.rateLimits);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
} catch (error) {
|
|
151
|
-
console.error('❌ Failed to initialize Onairos SDK:', error);
|
|
152
|
-
isInitialized = false;
|
|
153
|
-
throw error;
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Determine API key type
|
|
159
|
-
* @param apiKey The API key to check
|
|
160
|
-
* @returns The type of API key
|
|
161
|
-
*/
|
|
162
|
-
exports.initializeApiKey = initializeApiKey;
|
|
163
|
-
const getApiKeyType = apiKey => {
|
|
164
|
-
if (apiKey === ADMIN_API_KEY) {
|
|
165
|
-
return ApiKeyType.ADMIN;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Developer keys should be at least 32 characters and start with specific prefix
|
|
169
|
-
if (apiKey.length >= 32 && (apiKey.startsWith('dev_') || apiKey.startsWith('pk_') || apiKey.startsWith('ona_'))) {
|
|
170
|
-
return ApiKeyType.DEVELOPER;
|
|
171
|
-
}
|
|
172
|
-
return ApiKeyType.INVALID;
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Check if API key is admin key
|
|
177
|
-
* @param apiKey The API key to check
|
|
178
|
-
* @returns True if admin key
|
|
179
|
-
*/
|
|
180
|
-
exports.getApiKeyType = getApiKeyType;
|
|
181
|
-
const isAdminKey = apiKey => {
|
|
182
|
-
return apiKey === ADMIN_API_KEY;
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Validate an API key with the Onairos backend
|
|
187
|
-
* @param apiKey The API key to validate
|
|
188
|
-
* @returns Validation result with permissions and rate limits
|
|
189
|
-
*/
|
|
190
|
-
exports.isAdminKey = isAdminKey;
|
|
191
|
-
const validateApiKey = async apiKey => {
|
|
192
|
-
try {
|
|
193
|
-
var _globalConfig2, _globalConfig3, _globalConfig4;
|
|
194
|
-
console.log('🔍 Validating API key...');
|
|
195
|
-
|
|
196
|
-
// Check if it's an admin key
|
|
197
|
-
if (isAdminKey(apiKey)) {
|
|
198
|
-
console.log('🔑 Admin key detected - granting full permissions');
|
|
199
|
-
return {
|
|
200
|
-
isValid: true,
|
|
201
|
-
permissions: ['*'],
|
|
202
|
-
// Full permissions for admin
|
|
203
|
-
rateLimits: {
|
|
204
|
-
remaining: 999999,
|
|
205
|
-
resetTime: Date.now() + 24 * 60 * 60 * 1000 // 24 hours
|
|
206
|
-
},
|
|
207
|
-
keyType: ApiKeyType.ADMIN
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Check basic format for developer keys
|
|
212
|
-
const keyType = getApiKeyType(apiKey);
|
|
213
|
-
if (keyType === ApiKeyType.INVALID) {
|
|
214
|
-
return {
|
|
215
|
-
isValid: false,
|
|
216
|
-
error: 'Invalid API key format. Developer keys must be at least 32 characters and start with "dev_", "pk_", or "ona_"',
|
|
217
|
-
keyType: ApiKeyType.INVALID
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// Check cache first
|
|
222
|
-
const cached = validationCache.get(apiKey);
|
|
223
|
-
if (cached && Date.now() - cached.timestamp < CACHE_DURATION) {
|
|
224
|
-
var _globalConfig;
|
|
225
|
-
if ((_globalConfig = globalConfig) !== null && _globalConfig !== void 0 && _globalConfig.enableLogging) {
|
|
226
|
-
console.log('📋 Using cached API key validation result');
|
|
227
|
-
}
|
|
228
|
-
return cached.result;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
// Check network connectivity before making API calls
|
|
232
|
-
const isConnected = await checkNetworkConnectivity();
|
|
233
|
-
if (!isConnected) {
|
|
234
|
-
console.warn('⚠️ No network connectivity detected');
|
|
235
|
-
return {
|
|
236
|
-
isValid: false,
|
|
237
|
-
error: 'No network connection available. Please check your internet connection and try again.',
|
|
238
|
-
keyType: keyType,
|
|
239
|
-
isNetworkError: true
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
const environment = ((_globalConfig2 = globalConfig) === null || _globalConfig2 === void 0 ? void 0 : _globalConfig2.environment) || 'production';
|
|
243
|
-
const baseUrl = API_ENDPOINTS[environment];
|
|
244
|
-
const timeout = ((_globalConfig3 = globalConfig) === null || _globalConfig3 === void 0 ? void 0 : _globalConfig3.timeout) || 30000;
|
|
245
|
-
const maxRetries = ((_globalConfig4 = globalConfig) === null || _globalConfig4 === void 0 ? void 0 : _globalConfig4.retryAttempts) || 3;
|
|
246
|
-
|
|
247
|
-
// Retry logic for network failures
|
|
248
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
249
|
-
// Create abort controller for timeout
|
|
250
|
-
const controller = new AbortController();
|
|
251
|
-
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
252
|
-
try {
|
|
253
|
-
var _globalConfig5;
|
|
254
|
-
if ((_globalConfig5 = globalConfig) !== null && _globalConfig5 !== void 0 && _globalConfig5.enableLogging && attempt > 1) {
|
|
255
|
-
console.log(`🔄 Retry attempt ${attempt}/${maxRetries} for API key validation`);
|
|
256
|
-
}
|
|
257
|
-
const response = await fetch(`${baseUrl}/dev/validate`, {
|
|
258
|
-
method: 'POST',
|
|
259
|
-
headers: {
|
|
260
|
-
'Content-Type': 'application/json',
|
|
261
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
262
|
-
'User-Agent': 'OnairosReactNative/3.3.1',
|
|
263
|
-
'X-API-Key-Type': keyType,
|
|
264
|
-
'X-SDK-Platform': 'react-native',
|
|
265
|
-
'X-Retry-Attempt': attempt.toString()
|
|
266
|
-
},
|
|
267
|
-
body: JSON.stringify({
|
|
268
|
-
environment,
|
|
269
|
-
sdk_version: '3.3.1',
|
|
270
|
-
platform: 'react-native',
|
|
271
|
-
keyType,
|
|
272
|
-
timestamp: new Date().toISOString(),
|
|
273
|
-
attempt
|
|
274
|
-
}),
|
|
275
|
-
signal: controller.signal
|
|
276
|
-
});
|
|
277
|
-
clearTimeout(timeoutId);
|
|
278
|
-
|
|
279
|
-
// First check if we got a valid response
|
|
280
|
-
if (!response) {
|
|
281
|
-
throw new Error('No response received from server');
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
// Handle common HTTP errors that indicate server issues
|
|
285
|
-
if (response.status === 502) {
|
|
286
|
-
throw new Error('Onairos API is temporarily unavailable (502 Bad Gateway). Please try again later.');
|
|
287
|
-
}
|
|
288
|
-
if (response.status === 503) {
|
|
289
|
-
throw new Error('Onairos API is under maintenance (503 Service Unavailable). Please try again later.');
|
|
290
|
-
}
|
|
291
|
-
if (response.status === 504) {
|
|
292
|
-
throw new Error('Onairos API request timed out (504 Gateway Timeout). Please try again.');
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Check if response is actually JSON before trying to parse
|
|
296
|
-
const contentType = response.headers.get('content-type');
|
|
297
|
-
const isJsonResponse = contentType && contentType.includes('application/json');
|
|
298
|
-
if (!isJsonResponse) {
|
|
299
|
-
const textContent = await response.text();
|
|
300
|
-
const previewText = textContent.substring(0, 200);
|
|
301
|
-
console.error('❌ API endpoint returned non-JSON response:', {
|
|
302
|
-
status: response.status,
|
|
303
|
-
statusText: response.statusText,
|
|
304
|
-
contentType: contentType || 'unknown',
|
|
305
|
-
preview: previewText,
|
|
306
|
-
url: `${baseUrl}/dev/validate`,
|
|
307
|
-
attempt: attempt
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
// Handle specific error cases
|
|
311
|
-
if (response.status === 404) {
|
|
312
|
-
throw new Error(`API validation endpoint not found (404). The endpoint ${baseUrl}/dev/validate may not exist or be configured correctly.`);
|
|
313
|
-
} else if (response.status === 500) {
|
|
314
|
-
throw new Error(`Server error (500). The Onairos backend is experiencing issues.`);
|
|
315
|
-
} else if (response.status === 502 || response.status === 503) {
|
|
316
|
-
throw new Error(`Service unavailable (${response.status}). The Onairos backend may be temporarily down.`);
|
|
317
|
-
} else if (textContent.includes('<html') || textContent.includes('<!DOCTYPE')) {
|
|
318
|
-
throw new Error(`Server returned HTML page instead of JSON API response. This often indicates a routing issue or server misconfiguration.`);
|
|
319
|
-
} else {
|
|
320
|
-
throw new Error(`API validation endpoint returned ${response.status} - ${response.statusText}. Expected JSON but got ${contentType || 'unknown content type'}.`);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Parse JSON response
|
|
325
|
-
let data;
|
|
326
|
-
try {
|
|
327
|
-
data = await response.json();
|
|
328
|
-
} catch (jsonError) {
|
|
329
|
-
console.error('❌ Failed to parse JSON response:', {
|
|
330
|
-
error: jsonError.message,
|
|
331
|
-
status: response.status,
|
|
332
|
-
contentType,
|
|
333
|
-
attempt: attempt
|
|
334
|
-
});
|
|
335
|
-
throw new Error(`Failed to parse server response as JSON: ${jsonError.message}`);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// Handle successful response
|
|
339
|
-
// Backend returns either {success: true} or {valid: true}
|
|
340
|
-
if (response.ok && (data.success || data.valid)) {
|
|
341
|
-
var _globalConfig6;
|
|
342
|
-
const result = {
|
|
343
|
-
isValid: true,
|
|
344
|
-
permissions: data.permissions || [],
|
|
345
|
-
rateLimits: data.rateLimits || null,
|
|
346
|
-
keyType: keyType
|
|
347
|
-
};
|
|
348
|
-
|
|
349
|
-
// Cache the successful result
|
|
350
|
-
validationCache.set(apiKey, {
|
|
351
|
-
result,
|
|
352
|
-
timestamp: Date.now()
|
|
353
|
-
});
|
|
354
|
-
if ((_globalConfig6 = globalConfig) !== null && _globalConfig6 !== void 0 && _globalConfig6.enableLogging) {
|
|
355
|
-
var _data$apiKey, _data$application, _data$apiKey2;
|
|
356
|
-
console.log('✅ API key validation successful', {
|
|
357
|
-
apiKeyId: (_data$apiKey = data.apiKey) === null || _data$apiKey === void 0 ? void 0 : _data$apiKey.id,
|
|
358
|
-
appName: (_data$application = data.application) === null || _data$application === void 0 ? void 0 : _data$application.name,
|
|
359
|
-
usageCount: (_data$apiKey2 = data.apiKey) === null || _data$apiKey2 === void 0 ? void 0 : _data$apiKey2.usageCount
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
return result;
|
|
363
|
-
} else {
|
|
364
|
-
// Handle API errors (invalid key, etc.)
|
|
365
|
-
const errorMessage = data.error || data.message || `HTTP ${response.status}: ${response.statusText}`;
|
|
366
|
-
const result = {
|
|
367
|
-
isValid: false,
|
|
368
|
-
error: errorMessage,
|
|
369
|
-
keyType: keyType
|
|
370
|
-
};
|
|
371
|
-
|
|
372
|
-
// For client errors (4xx), don't retry
|
|
373
|
-
if (response.status >= 400 && response.status < 500) {
|
|
374
|
-
var _globalConfig7;
|
|
375
|
-
if ((_globalConfig7 = globalConfig) !== null && _globalConfig7 !== void 0 && _globalConfig7.enableLogging) {
|
|
376
|
-
console.error('❌ API key validation failed (client error):', errorMessage);
|
|
377
|
-
}
|
|
378
|
-
return result;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
// For server errors (5xx), retry
|
|
382
|
-
throw new Error(errorMessage);
|
|
383
|
-
}
|
|
384
|
-
} catch (fetchError) {
|
|
385
|
-
var _globalConfig8;
|
|
386
|
-
clearTimeout(timeoutId);
|
|
387
|
-
if (fetchError.name === 'AbortError') {
|
|
388
|
-
const errorMessage = `API key validation timeout (${timeout}ms)`;
|
|
389
|
-
console.error('⏱️ API key validation timeout');
|
|
390
|
-
if (attempt === maxRetries) {
|
|
391
|
-
return {
|
|
392
|
-
isValid: false,
|
|
393
|
-
error: errorMessage,
|
|
394
|
-
keyType: keyType
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
continue; // Retry timeout errors
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
// Enhanced error message based on error type
|
|
401
|
-
let errorMessage = `Network error during API key validation: ${fetchError.message}`;
|
|
402
|
-
|
|
403
|
-
// Add specific guidance for common errors
|
|
404
|
-
if (fetchError.message.includes('JSON Parse error') || fetchError.message.includes('Unexpected character')) {
|
|
405
|
-
errorMessage = `Server returned invalid JSON response. This usually indicates the API endpoint returned HTML instead of JSON (often a 404 or server error page). ${fetchError.message}`;
|
|
406
|
-
} else if (fetchError.message.includes('Network request failed') || fetchError.message.includes('fetch')) {
|
|
407
|
-
errorMessage = `Network connectivity issue. Please check internet connection and verify the Onairos API is accessible. ${fetchError.message}`;
|
|
408
|
-
} else if (fetchError.message.includes('DNS') || fetchError.message.includes('ENOTFOUND')) {
|
|
409
|
-
errorMessage = `DNS resolution failed for ${baseUrl}. Please check network settings and domain accessibility. ${fetchError.message}`;
|
|
410
|
-
}
|
|
411
|
-
console.error('🌐 Network error during API key validation:', {
|
|
412
|
-
error: fetchError,
|
|
413
|
-
endpoint: `${baseUrl}/dev/validate`,
|
|
414
|
-
attempt: attempt,
|
|
415
|
-
maxRetries: maxRetries,
|
|
416
|
-
retryable: attempt < maxRetries
|
|
417
|
-
});
|
|
418
|
-
|
|
419
|
-
// If this is the last attempt, return the error
|
|
420
|
-
if (attempt === maxRetries) {
|
|
421
|
-
return {
|
|
422
|
-
isValid: false,
|
|
423
|
-
error: errorMessage,
|
|
424
|
-
keyType: keyType,
|
|
425
|
-
isNetworkError: true // Flag to indicate this is a network issue, not an API key issue
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// Wait before retrying (exponential backoff)
|
|
430
|
-
const backoffDelay = Math.min(1000 * Math.pow(2, attempt - 1), 5000);
|
|
431
|
-
if ((_globalConfig8 = globalConfig) !== null && _globalConfig8 !== void 0 && _globalConfig8.enableLogging) {
|
|
432
|
-
console.log(`⏳ Waiting ${backoffDelay}ms before retry...`);
|
|
433
|
-
}
|
|
434
|
-
await new Promise(resolve => setTimeout(() => resolve(), backoffDelay));
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
// This should never be reached, but just in case
|
|
439
|
-
return {
|
|
440
|
-
isValid: false,
|
|
441
|
-
error: 'All retry attempts exhausted',
|
|
442
|
-
keyType: keyType
|
|
443
|
-
};
|
|
444
|
-
} catch (error) {
|
|
445
|
-
const errorMessage = `API key validation error: ${error.message}`;
|
|
446
|
-
console.error('❌ API key validation error:', error);
|
|
447
|
-
return {
|
|
448
|
-
isValid: false,
|
|
449
|
-
error: errorMessage,
|
|
450
|
-
keyType: ApiKeyType.INVALID
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
};
|
|
454
|
-
|
|
455
|
-
/**
|
|
456
|
-
* Get the current API configuration
|
|
457
|
-
* @returns Current API configuration or null if not initialized
|
|
458
|
-
*/
|
|
459
|
-
exports.validateApiKey = validateApiKey;
|
|
460
|
-
const getApiConfig = () => {
|
|
461
|
-
return globalConfig;
|
|
462
|
-
};
|
|
463
|
-
|
|
464
|
-
/**
|
|
465
|
-
* Get the current API key
|
|
466
|
-
* @returns Current API key or null if not initialized
|
|
467
|
-
*/
|
|
468
|
-
exports.getApiConfig = getApiConfig;
|
|
469
|
-
const getApiKey = () => {
|
|
470
|
-
var _globalConfig9;
|
|
471
|
-
return ((_globalConfig9 = globalConfig) === null || _globalConfig9 === void 0 ? void 0 : _globalConfig9.apiKey) || null;
|
|
472
|
-
};
|
|
473
|
-
|
|
474
|
-
/**
|
|
475
|
-
* Check if the SDK is properly initialized
|
|
476
|
-
* @returns True if initialized with valid API key
|
|
477
|
-
*/
|
|
478
|
-
exports.getApiKey = getApiKey;
|
|
479
|
-
const isApiKeyInitialized = () => {
|
|
480
|
-
return isInitialized && globalConfig !== null;
|
|
481
|
-
};
|
|
482
|
-
|
|
483
|
-
/**
|
|
484
|
-
* Store JWT token securely after email verification
|
|
485
|
-
* @param token JWT token from email verification response
|
|
486
|
-
*/
|
|
487
|
-
exports.isApiKeyInitialized = isApiKeyInitialized;
|
|
488
|
-
const storeJWT = async token => {
|
|
489
|
-
try {
|
|
490
|
-
var _globalConfig0;
|
|
491
|
-
await _asyncStorage.default.setItem(JWT_TOKEN_KEY, token);
|
|
492
|
-
userToken = token;
|
|
493
|
-
if ((_globalConfig0 = globalConfig) !== null && _globalConfig0 !== void 0 && _globalConfig0.enableLogging) {
|
|
494
|
-
console.log('🎫 JWT token stored successfully');
|
|
495
|
-
}
|
|
496
|
-
} catch (error) {
|
|
497
|
-
console.error('❌ Failed to store JWT token:', error);
|
|
498
|
-
throw error;
|
|
499
|
-
}
|
|
500
|
-
};
|
|
501
|
-
|
|
502
|
-
/**
|
|
503
|
-
* Load JWT token from storage
|
|
504
|
-
* @returns JWT token or null if not found
|
|
505
|
-
*/
|
|
506
|
-
exports.storeJWT = storeJWT;
|
|
507
|
-
const loadJWT = async () => {
|
|
508
|
-
try {
|
|
509
|
-
const token = await _asyncStorage.default.getItem(JWT_TOKEN_KEY);
|
|
510
|
-
userToken = token;
|
|
511
|
-
return token;
|
|
512
|
-
} catch (error) {
|
|
513
|
-
console.error('❌ Failed to load JWT token:', error);
|
|
514
|
-
return null;
|
|
515
|
-
}
|
|
516
|
-
};
|
|
517
|
-
|
|
518
|
-
/**
|
|
519
|
-
* Get current JWT token
|
|
520
|
-
* @returns JWT token or null if not available
|
|
521
|
-
*/
|
|
522
|
-
exports.loadJWT = loadJWT;
|
|
523
|
-
const getJWT = () => {
|
|
524
|
-
return userToken;
|
|
525
|
-
};
|
|
526
|
-
|
|
527
|
-
/**
|
|
528
|
-
* Clear JWT token (on logout or token expiration)
|
|
529
|
-
*/
|
|
530
|
-
exports.getJWT = getJWT;
|
|
531
|
-
const clearJWT = async () => {
|
|
532
|
-
try {
|
|
533
|
-
var _globalConfig1;
|
|
534
|
-
await _asyncStorage.default.removeItem(JWT_TOKEN_KEY);
|
|
535
|
-
userToken = null;
|
|
536
|
-
if ((_globalConfig1 = globalConfig) !== null && _globalConfig1 !== void 0 && _globalConfig1.enableLogging) {
|
|
537
|
-
console.log('🗑️ JWT token cleared');
|
|
538
|
-
}
|
|
539
|
-
} catch (error) {
|
|
540
|
-
console.error('❌ Failed to clear JWT token:', error);
|
|
541
|
-
}
|
|
542
|
-
};
|
|
543
|
-
|
|
544
|
-
/**
|
|
545
|
-
* React Native compatible base64 decoder
|
|
546
|
-
* @param str Base64 encoded string
|
|
547
|
-
* @returns Decoded string
|
|
548
|
-
*/
|
|
549
|
-
exports.clearJWT = clearJWT;
|
|
550
|
-
const base64Decode = str => {
|
|
551
|
-
// Simple base64 decoding for React Native
|
|
552
|
-
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
553
|
-
let result = '';
|
|
554
|
-
let i = 0;
|
|
555
|
-
str = str.replace(/[^A-Za-z0-9+/]/g, '');
|
|
556
|
-
while (i < str.length) {
|
|
557
|
-
const a = chars.indexOf(str.charAt(i++));
|
|
558
|
-
const b = chars.indexOf(str.charAt(i++));
|
|
559
|
-
const c = chars.indexOf(str.charAt(i++));
|
|
560
|
-
const d = chars.indexOf(str.charAt(i++));
|
|
561
|
-
const bitmap = a << 18 | b << 12 | c << 6 | d;
|
|
562
|
-
result += String.fromCharCode(bitmap >> 16 & 255);
|
|
563
|
-
if (c !== 64) result += String.fromCharCode(bitmap >> 8 & 255);
|
|
564
|
-
if (d !== 64) result += String.fromCharCode(bitmap & 255);
|
|
565
|
-
}
|
|
566
|
-
return result;
|
|
567
|
-
};
|
|
568
|
-
|
|
569
|
-
/**
|
|
570
|
-
* Decode JWT token payload (React Native compatible)
|
|
571
|
-
* @param token JWT token string
|
|
572
|
-
* @returns Decoded payload or null if invalid
|
|
573
|
-
*/
|
|
574
|
-
const decodeJWTPayload = token => {
|
|
575
|
-
try {
|
|
576
|
-
// Split JWT token (header.payload.signature)
|
|
577
|
-
const parts = token.split('.');
|
|
578
|
-
if (parts.length !== 3) {
|
|
579
|
-
console.error('❌ Invalid JWT token format');
|
|
580
|
-
return null;
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
// Decode payload (base64url to base64)
|
|
584
|
-
const payload = parts[1];
|
|
585
|
-
const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');
|
|
586
|
-
|
|
587
|
-
// Add padding if needed
|
|
588
|
-
const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, '=');
|
|
589
|
-
|
|
590
|
-
// Decode base64 to JSON using React Native compatible decoder
|
|
591
|
-
const decoded = base64Decode(padded);
|
|
592
|
-
return JSON.parse(decoded);
|
|
593
|
-
} catch (error) {
|
|
594
|
-
console.error('❌ Failed to decode JWT token:', error);
|
|
595
|
-
return null;
|
|
596
|
-
}
|
|
597
|
-
};
|
|
598
|
-
|
|
599
|
-
/**
|
|
600
|
-
* Extract username from JWT token
|
|
601
|
-
* @param token JWT token (optional, uses stored token if not provided)
|
|
602
|
-
* @returns Username or null if not found
|
|
603
|
-
*/
|
|
604
|
-
exports.decodeJWTPayload = decodeJWTPayload;
|
|
605
|
-
const extractUsernameFromJWT = token => {
|
|
606
|
-
try {
|
|
607
|
-
var _globalConfig10;
|
|
608
|
-
const jwtToken = token || userToken;
|
|
609
|
-
if (!jwtToken) {
|
|
610
|
-
console.warn('⚠️ No JWT token available for username extraction');
|
|
611
|
-
return null;
|
|
612
|
-
}
|
|
613
|
-
const payload = decodeJWTPayload(jwtToken);
|
|
614
|
-
if (!payload) {
|
|
615
|
-
return null;
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
// Try different possible username fields in order of preference
|
|
619
|
-
const username = payload.userName || payload.username || payload.userId || payload.email;
|
|
620
|
-
if ((_globalConfig10 = globalConfig) !== null && _globalConfig10 !== void 0 && _globalConfig10.enableLogging) {
|
|
621
|
-
console.log('👤 Extracted username from JWT:', username);
|
|
622
|
-
}
|
|
623
|
-
return username || null;
|
|
624
|
-
} catch (error) {
|
|
625
|
-
console.error('❌ Failed to extract username from JWT:', error);
|
|
626
|
-
return null;
|
|
627
|
-
}
|
|
628
|
-
};
|
|
629
|
-
|
|
630
|
-
/**
|
|
631
|
-
* Extract user data from JWT token
|
|
632
|
-
* @param token JWT token (optional, uses stored token if not provided)
|
|
633
|
-
* @returns User data object or null if not found
|
|
634
|
-
*/
|
|
635
|
-
exports.extractUsernameFromJWT = extractUsernameFromJWT;
|
|
636
|
-
const extractUserDataFromJWT = token => {
|
|
637
|
-
try {
|
|
638
|
-
var _globalConfig11;
|
|
639
|
-
const jwtToken = token || userToken;
|
|
640
|
-
if (!jwtToken) {
|
|
641
|
-
console.warn('⚠️ No JWT token available for user data extraction');
|
|
642
|
-
return null;
|
|
643
|
-
}
|
|
644
|
-
const payload = decodeJWTPayload(jwtToken);
|
|
645
|
-
if (!payload) {
|
|
646
|
-
return null;
|
|
647
|
-
}
|
|
648
|
-
const userData = {
|
|
649
|
-
id: payload.id,
|
|
650
|
-
email: payload.email,
|
|
651
|
-
userId: payload.userId,
|
|
652
|
-
userName: payload.userName || payload.username,
|
|
653
|
-
verified: payload.verified,
|
|
654
|
-
iat: payload.iat,
|
|
655
|
-
exp: payload.exp
|
|
656
|
-
};
|
|
657
|
-
if ((_globalConfig11 = globalConfig) !== null && _globalConfig11 !== void 0 && _globalConfig11.enableLogging) {
|
|
658
|
-
console.log('👤 Extracted user data from JWT:', userData);
|
|
659
|
-
}
|
|
660
|
-
return userData;
|
|
661
|
-
} catch (error) {
|
|
662
|
-
console.error('❌ Failed to extract user data from JWT:', error);
|
|
663
|
-
return null;
|
|
664
|
-
}
|
|
665
|
-
};
|
|
666
|
-
|
|
667
|
-
/**
|
|
668
|
-
* Check if user is authenticated with JWT token
|
|
669
|
-
* @returns True if user has valid JWT token
|
|
670
|
-
*/
|
|
671
|
-
exports.extractUserDataFromJWT = extractUserDataFromJWT;
|
|
672
|
-
const isUserAuthenticated = () => {
|
|
673
|
-
return !!userToken;
|
|
674
|
-
};
|
|
675
|
-
|
|
676
|
-
/**
|
|
677
|
-
* Get authenticated headers for API requests
|
|
678
|
-
* @returns Headers object with Authorization and other required headers
|
|
679
|
-
*/
|
|
680
|
-
exports.isUserAuthenticated = isUserAuthenticated;
|
|
681
|
-
const getAuthHeaders = () => {
|
|
682
|
-
var _globalConfig12;
|
|
683
|
-
if (!((_globalConfig12 = globalConfig) !== null && _globalConfig12 !== void 0 && _globalConfig12.apiKey)) {
|
|
684
|
-
throw new Error('SDK not initialized. Call initializeApiKey() first.');
|
|
685
|
-
}
|
|
686
|
-
const keyType = getApiKeyType(globalConfig.apiKey);
|
|
687
|
-
return {
|
|
688
|
-
'Content-Type': 'application/json',
|
|
689
|
-
'Authorization': `Bearer ${globalConfig.apiKey}`,
|
|
690
|
-
'User-Agent': 'OnairosReactNative/3.0.72',
|
|
691
|
-
'X-SDK-Version': '3.0.72',
|
|
692
|
-
'X-SDK-Environment': globalConfig.environment || 'production',
|
|
693
|
-
'X-API-Key-Type': keyType,
|
|
694
|
-
'X-Timestamp': new Date().toISOString()
|
|
695
|
-
};
|
|
696
|
-
};
|
|
697
|
-
|
|
698
|
-
/**
|
|
699
|
-
* Get authentication headers for developer API requests
|
|
700
|
-
* @returns Headers with developer API key
|
|
701
|
-
*/
|
|
702
|
-
exports.getAuthHeaders = getAuthHeaders;
|
|
703
|
-
const getDeveloperAuthHeaders = () => {
|
|
704
|
-
var _globalConfig13;
|
|
705
|
-
if (!((_globalConfig13 = globalConfig) !== null && _globalConfig13 !== void 0 && _globalConfig13.apiKey)) {
|
|
706
|
-
throw new Error('SDK not initialized. Call initializeApiKey() first.');
|
|
707
|
-
}
|
|
708
|
-
const keyType = getApiKeyType(globalConfig.apiKey);
|
|
709
|
-
return {
|
|
710
|
-
'Content-Type': 'application/json',
|
|
711
|
-
'Authorization': `Bearer ${globalConfig.apiKey}`,
|
|
712
|
-
'User-Agent': 'OnairosSDK/1.0.0',
|
|
713
|
-
'X-SDK-Version': '3.0.72',
|
|
714
|
-
'X-SDK-Environment': globalConfig.environment || 'production',
|
|
715
|
-
'X-API-Key-Type': keyType,
|
|
716
|
-
'X-Timestamp': new Date().toISOString()
|
|
717
|
-
};
|
|
718
|
-
};
|
|
719
|
-
|
|
720
|
-
/**
|
|
721
|
-
* Get authentication headers for user JWT requests
|
|
722
|
-
* @returns Headers with user JWT token
|
|
723
|
-
*/
|
|
724
|
-
exports.getDeveloperAuthHeaders = getDeveloperAuthHeaders;
|
|
725
|
-
const getUserAuthHeaders = () => {
|
|
726
|
-
var _globalConfig14;
|
|
727
|
-
if (!userToken) {
|
|
728
|
-
throw new Error('User not authenticated. Please verify email first.');
|
|
729
|
-
}
|
|
730
|
-
return {
|
|
731
|
-
'Content-Type': 'application/json',
|
|
732
|
-
'Authorization': `Bearer ${userToken}`,
|
|
733
|
-
'User-Agent': 'OnairosSDK/1.0.0',
|
|
734
|
-
'X-SDK-Version': '3.0.72',
|
|
735
|
-
'X-SDK-Environment': ((_globalConfig14 = globalConfig) === null || _globalConfig14 === void 0 ? void 0 : _globalConfig14.environment) || 'production'
|
|
736
|
-
};
|
|
737
|
-
};
|
|
738
|
-
|
|
739
|
-
/**
|
|
740
|
-
* Make an authenticated API request
|
|
741
|
-
* @param endpoint The API endpoint (relative to base URL)
|
|
742
|
-
* @param options Fetch options
|
|
743
|
-
* @returns Response promise
|
|
744
|
-
*/
|
|
745
|
-
exports.getUserAuthHeaders = getUserAuthHeaders;
|
|
746
|
-
const makeAuthenticatedRequest = async (endpoint, options = {}) => {
|
|
747
|
-
if (!isApiKeyInitialized()) {
|
|
748
|
-
throw new Error('SDK not initialized. Call initializeApiKey() first.');
|
|
749
|
-
}
|
|
750
|
-
const config = getApiConfig();
|
|
751
|
-
const baseUrl = API_ENDPOINTS[config.environment || 'production'];
|
|
752
|
-
const url = `${baseUrl}${endpoint.startsWith('/') ? '' : '/'}${endpoint}`;
|
|
753
|
-
|
|
754
|
-
// Merge authentication headers
|
|
755
|
-
const headers = {
|
|
756
|
-
...getAuthHeaders(),
|
|
757
|
-
...(options.headers || {})
|
|
758
|
-
};
|
|
759
|
-
|
|
760
|
-
// Add timeout
|
|
761
|
-
const controller = new AbortController();
|
|
762
|
-
const timeoutId = setTimeout(() => controller.abort(), config.timeout || 30000);
|
|
763
|
-
try {
|
|
764
|
-
if (config.enableLogging) {
|
|
765
|
-
console.log(`🌐 Making authenticated request to: ${endpoint}`);
|
|
766
|
-
}
|
|
767
|
-
const response = await fetch(url, {
|
|
768
|
-
...options,
|
|
769
|
-
headers,
|
|
770
|
-
signal: controller.signal
|
|
771
|
-
});
|
|
772
|
-
clearTimeout(timeoutId);
|
|
773
|
-
if (config.enableLogging) {
|
|
774
|
-
console.log(`📡 Response status: ${response.status} for ${endpoint}`);
|
|
775
|
-
}
|
|
776
|
-
|
|
777
|
-
// Handle API key errors
|
|
778
|
-
if (response.status === 401) {
|
|
779
|
-
console.error('❌ API key authentication failed. Please check your API key.');
|
|
780
|
-
throw new Error('Invalid or expired API key');
|
|
781
|
-
}
|
|
782
|
-
if (response.status === 403) {
|
|
783
|
-
console.error('❌ API key permissions insufficient for this operation.');
|
|
784
|
-
throw new Error('Insufficient API key permissions');
|
|
785
|
-
}
|
|
786
|
-
if (response.status === 429) {
|
|
787
|
-
console.error('❌ API rate limit exceeded. Please try again later.');
|
|
788
|
-
throw new Error('Rate limit exceeded');
|
|
789
|
-
}
|
|
790
|
-
return response;
|
|
791
|
-
} catch (error) {
|
|
792
|
-
clearTimeout(timeoutId);
|
|
793
|
-
if (error.name === 'AbortError') {
|
|
794
|
-
console.error('⏱️ Request timeout for:', endpoint);
|
|
795
|
-
throw new Error('Request timeout');
|
|
796
|
-
}
|
|
797
|
-
throw error;
|
|
798
|
-
}
|
|
799
|
-
};
|
|
800
|
-
|
|
801
|
-
/**
|
|
802
|
-
* Make authenticated request with developer API key
|
|
803
|
-
* @param endpoint The API endpoint
|
|
804
|
-
* @param options Fetch options
|
|
805
|
-
* @returns Response promise
|
|
806
|
-
*/
|
|
807
|
-
exports.makeAuthenticatedRequest = makeAuthenticatedRequest;
|
|
808
|
-
const makeDeveloperRequest = async (endpoint, options = {}) => {
|
|
809
|
-
if (!isApiKeyInitialized()) {
|
|
810
|
-
throw new Error('SDK not initialized. Call initializeApiKey() first.');
|
|
811
|
-
}
|
|
812
|
-
const config = getApiConfig();
|
|
813
|
-
const baseUrl = API_ENDPOINTS[config.environment || 'production'];
|
|
814
|
-
const url = `${baseUrl}${endpoint.startsWith('/') ? '' : '/'}${endpoint}`;
|
|
815
|
-
|
|
816
|
-
// Merge developer authentication headers
|
|
817
|
-
const headers = {
|
|
818
|
-
...getDeveloperAuthHeaders(),
|
|
819
|
-
...(options.headers || {})
|
|
820
|
-
};
|
|
821
|
-
|
|
822
|
-
// Add timeout
|
|
823
|
-
const controller = new AbortController();
|
|
824
|
-
const timeoutId = setTimeout(() => controller.abort(), config.timeout || 30000);
|
|
825
|
-
try {
|
|
826
|
-
if (config.enableLogging) {
|
|
827
|
-
console.log(`🌐 Making developer request to: ${endpoint}`);
|
|
828
|
-
}
|
|
829
|
-
const response = await fetch(url, {
|
|
830
|
-
...options,
|
|
831
|
-
headers,
|
|
832
|
-
signal: controller.signal
|
|
833
|
-
});
|
|
834
|
-
clearTimeout(timeoutId);
|
|
835
|
-
if (config.enableLogging) {
|
|
836
|
-
console.log(`📡 Developer request response: ${response.status} for ${endpoint}`);
|
|
837
|
-
}
|
|
838
|
-
|
|
839
|
-
// Handle API key errors
|
|
840
|
-
if (response.status === 401) {
|
|
841
|
-
console.error('❌ Developer API key authentication failed');
|
|
842
|
-
throw new Error('Invalid or expired API key');
|
|
843
|
-
}
|
|
844
|
-
if (response.status === 403) {
|
|
845
|
-
console.error('❌ Developer API key permissions insufficient');
|
|
846
|
-
throw new Error('Insufficient API key permissions');
|
|
847
|
-
}
|
|
848
|
-
if (response.status === 429) {
|
|
849
|
-
console.error('❌ API rate limit exceeded');
|
|
850
|
-
throw new Error('Rate limit exceeded');
|
|
851
|
-
}
|
|
852
|
-
return response;
|
|
853
|
-
} catch (error) {
|
|
854
|
-
clearTimeout(timeoutId);
|
|
855
|
-
if (error.name === 'AbortError') {
|
|
856
|
-
console.error('⏱️ Request timeout for:', endpoint);
|
|
857
|
-
throw new Error('Request timeout');
|
|
858
|
-
}
|
|
859
|
-
throw error;
|
|
860
|
-
}
|
|
861
|
-
};
|
|
862
|
-
|
|
863
|
-
/**
|
|
864
|
-
* Make authenticated request with user JWT token
|
|
865
|
-
* @param endpoint The API endpoint
|
|
866
|
-
* @param options Fetch options
|
|
867
|
-
* @returns Response promise
|
|
868
|
-
*/
|
|
869
|
-
exports.makeDeveloperRequest = makeDeveloperRequest;
|
|
870
|
-
const makeUserRequest = async (endpoint, options = {}) => {
|
|
871
|
-
if (!isUserAuthenticated()) {
|
|
872
|
-
await loadJWT(); // Try to load from storage
|
|
873
|
-
}
|
|
874
|
-
if (!isUserAuthenticated()) {
|
|
875
|
-
throw new Error('User not authenticated. Please verify email first.');
|
|
876
|
-
}
|
|
877
|
-
const config = getApiConfig() || {
|
|
878
|
-
environment: 'production',
|
|
879
|
-
timeout: 30000,
|
|
880
|
-
enableLogging: false
|
|
881
|
-
};
|
|
882
|
-
const baseUrl = API_ENDPOINTS[config.environment || 'production'];
|
|
883
|
-
const url = `${baseUrl}${endpoint.startsWith('/') ? '' : '/'}${endpoint}`;
|
|
884
|
-
|
|
885
|
-
// Merge user authentication headers
|
|
886
|
-
const headers = {
|
|
887
|
-
...getUserAuthHeaders(),
|
|
888
|
-
...(options.headers || {})
|
|
889
|
-
};
|
|
890
|
-
|
|
891
|
-
// Add timeout
|
|
892
|
-
const controller = new AbortController();
|
|
893
|
-
const timeoutId = setTimeout(() => controller.abort(), config.timeout || 30000);
|
|
894
|
-
try {
|
|
895
|
-
if (config.enableLogging) {
|
|
896
|
-
console.log(`🌐 Making user request to: ${endpoint}`);
|
|
897
|
-
}
|
|
898
|
-
const response = await fetch(url, {
|
|
899
|
-
...options,
|
|
900
|
-
headers,
|
|
901
|
-
signal: controller.signal
|
|
902
|
-
});
|
|
903
|
-
clearTimeout(timeoutId);
|
|
904
|
-
if (config.enableLogging) {
|
|
905
|
-
console.log(`📡 User request response: ${response.status} for ${endpoint}`);
|
|
906
|
-
}
|
|
907
|
-
|
|
908
|
-
// Handle JWT token errors
|
|
909
|
-
if (response.status === 401) {
|
|
910
|
-
console.error('❌ JWT token authentication failed - token may be expired');
|
|
911
|
-
await clearJWT(); // Clear expired token
|
|
912
|
-
throw new Error('Authentication expired. Please verify email again.');
|
|
913
|
-
}
|
|
914
|
-
if (response.status === 403) {
|
|
915
|
-
console.error('❌ JWT token permissions insufficient');
|
|
916
|
-
throw new Error('Insufficient permissions for this operation');
|
|
917
|
-
}
|
|
918
|
-
return response;
|
|
919
|
-
} catch (error) {
|
|
920
|
-
clearTimeout(timeoutId);
|
|
921
|
-
if (error.name === 'AbortError') {
|
|
922
|
-
console.error('⏱️ Request timeout for:', endpoint);
|
|
923
|
-
throw new Error('Request timeout');
|
|
924
|
-
}
|
|
925
|
-
throw error;
|
|
926
|
-
}
|
|
927
|
-
};
|
|
928
|
-
|
|
929
|
-
/**
|
|
930
|
-
* Clear the API key validation cache
|
|
931
|
-
*/
|
|
932
|
-
exports.makeUserRequest = makeUserRequest;
|
|
933
|
-
const clearValidationCache = () => {
|
|
934
|
-
var _globalConfig15;
|
|
935
|
-
validationCache.clear();
|
|
936
|
-
if ((_globalConfig15 = globalConfig) !== null && _globalConfig15 !== void 0 && _globalConfig15.enableLogging) {
|
|
937
|
-
console.log('🗑️ API key validation cache cleared');
|
|
938
|
-
}
|
|
939
|
-
};
|
|
940
|
-
|
|
941
|
-
/**
|
|
942
|
-
* Reset the SDK initialization state
|
|
943
|
-
*/
|
|
944
|
-
exports.clearValidationCache = clearValidationCache;
|
|
945
|
-
const resetApiKeyService = () => {
|
|
946
|
-
globalConfig = null;
|
|
947
|
-
isInitialized = false;
|
|
948
|
-
clearValidationCache();
|
|
949
|
-
console.log('🔄 API key service reset');
|
|
950
|
-
};
|
|
951
|
-
exports.resetApiKeyService = resetApiKeyService;
|
|
952
|
-
//# sourceMappingURL=apiKeyService.js.map
|
|
1
|
+
'use strict';
|
|
2
|
+
// Onairos SDK - Asset Registry (auto-generated)
|
|
3
|
+
var __ONAIROS_REQ_REGISTRY__ = [
|
|
4
|
+
require("@react-native-async-storage/async-storage"),
|
|
5
|
+
require("@react-native-community/netinfo"),
|
|
6
|
+
require("../config/api")
|
|
7
|
+
];
|
|
8
|
+
function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
|
|
9
|
+
Object[_0x1293(0x0)](exports,_0x1293(0x1),{'value':!![]}),exports[_0x1293(0x2)]=exports[_0x1293(0x3)]=exports['resetApiKeyService']=exports[_0x1293(0x4)]=exports[_0x1293(0x5)]=exports[_0x1293(0x6)]=exports[_0x1293(0x7)]=exports[_0x1293(0x8)]=exports[_0x1293(0x9)]=exports[_0x1293(0xa)]=exports[_0x1293(0xb)]=exports[_0x1293(0xc)]=exports[_0x1293(0xd)]=exports[_0x1293(0xe)]=exports[_0x1293(0xf)]=exports[_0x1293(0x10)]=exports['getApiConfig']=exports['extractUsernameFromJWT']=exports[_0x1293(0x11)]=exports[_0x1293(0x12)]=exports[_0x1293(0x13)]=exports[_0x1293(0x14)]=exports[_0x1293(0x15)]=void 0x0;var _asyncStorage=_interopRequireDefault(__ONAIROS_REQ_FUNC__(0x0)),_netinfo=_interopRequireDefault(__ONAIROS_REQ_FUNC__(0x1)),_api=__ONAIROS_REQ_FUNC__(0x2);function _interopRequireDefault(_0x3368bc){return _0x3368bc&&_0x3368bc[_0x1293(0x1)]?_0x3368bc:{'default':_0x3368bc};}let ApiKeyType=exports[_0x1293(0x15)]=function(_0x454085){const _0x5a18be={'qlWOb':'DEVELOPER','pfSLL':_0x1293(0x16),'OuqVy':_0x1293(0x17)};return _0x454085[_0x5a18be[_0x1293(0x18)]]=_0x5a18be['pfSLL'],_0x454085[_0x5a18be[_0x1293(0x19)]]=_0x1293(0x1a),_0x454085;}({});const JWT_TOKEN_KEY=_0x1293(0x1b);let globalConfig=null,validationCache=new Map(),isInitialized=![],userToken=null;const CACHE_DURATION=0x5*0x3c*0x3e8,checkNetworkConnectivity=async()=>{const _0x262d74={'vAilk':function(_0x5521db,_0x14fd5d){return _0x5521db===_0x14fd5d;},'cxGeE':_0x1293(0x1c)};try{const _0x5bf257=await _netinfo[_0x1293(0x1d)][_0x1293(0x1e)]();return _0x262d74[_0x1293(0x1f)](_0x5bf257[_0x1293(0x20)],!![])&&_0x5bf257[_0x1293(0x21)]!==![];}catch(_0x56a8af){return console[_0x1293(0x22)](_0x262d74[_0x1293(0x23)],_0x56a8af),!![];}},API_ENDPOINTS={'production':''+_api[_0x1293(0x24)][_0x1293(0x25)],'staging':''+_api[_0x1293(0x24)][_0x1293(0x25)],'development':''+_api[_0x1293(0x24)][_0x1293(0x25)]},initializeApiKey=async _0x505d94=>{const _0x58f59c={'NGImY':_0x1293(0x26),'BcYik':function(_0x1f86ab,_0x210e22){return _0x1f86ab!==_0x210e22;},'ISAdt':'SDK\x20not\x20initialized.\x20Call\x20initializeApiKey()\x20first.','CNyaB':function(_0x2eef13,_0x4465b4){return _0x2eef13(_0x4465b4);},'hnfrS':_0x1293(0x27),'DrpMh':_0x1293(0x28),'tYjhp':'User\x20not\x20authenticated.\x20Please\x20verify\x20email\x20first.','JAKKg':'🔑\x20Initializing\x20Onairos\x20SDK\x20with\x20developer\x20API\x20key...','ZJces':_0x1293(0x29),'CGKgx':function(_0x34d75b,_0x4b1a10){return _0x34d75b<_0x4b1a10;},'AQuqC':_0x1293(0x2a),'CtCbS':'ona_','eHNov':_0x1293(0x2b),'XhORP':function(_0x2acb59,_0x19cc7e){return _0x2acb59!==_0x19cc7e;},'TArBt':function(_0x2b0f79,_0x12e9e9){return _0x2b0f79===_0x12e9e9;},'oPMol':_0x1293(0x2c),'HjVzT':_0x1293(0x2d),'fIlzR':_0x1293(0x2e),'zpJqy':function(_0x4391f4,_0x263ae9){return _0x4391f4+_0x263ae9;},'poLmo':'...','rmEGP':function(_0x5e5c90,_0xe71d7f){return _0x5e5c90(_0xe71d7f);},'PcAFZ':'Network\x20request\x20failed','HfUJK':_0x1293(0x2f),'bZtSD':_0x1293(0x30),'KZQRl':_0x1293(0x31),'TeoTq':'ENOTFOUND','JBAQX':_0x1293(0x1e),'jpXZJ':'No\x20network\x20connection','MXiUp':function(_0x2940a6,_0x2280f2){return _0x2940a6===_0x2280f2;},'OsXFO':_0x1293(0x32),'KGmbr':_0x1293(0x33),'NBQfd':_0x1293(0x34),'oWgcy':_0x1293(0x35),'cOfpT':_0x1293(0x36),'AExwE':'RqvOq','OdwHr':function(_0x4017bd){return _0x4017bd();},'xbbxM':_0x1293(0x37),'mknAO':_0x1293(0x38),'FtaCJ':_0x1293(0x39),'Poauo':_0x1293(0x3a),'GaYcz':_0x1293(0x3b),'Rwpfw':_0x1293(0x3c),'SVYDt':_0x1293(0x3d)};try{console[_0x1293(0x3e)](_0x58f59c[_0x1293(0x3f)]);if(!_0x505d94['apiKey'])throw new Error(_0x58f59c[_0x1293(0x40)]);if(_0x58f59c[_0x1293(0x41)](_0x505d94['apiKey'][_0x1293(0x42)],0x20))throw new Error(_0x58f59c['AQuqC']);const _0x29829f=[_0x1293(0x43),_0x58f59c[_0x1293(0x44)],_0x58f59c[_0x1293(0x45)]],_0xb150b3=_0x29829f['some'](_0x15aead=>_0x505d94[_0x1293(0x46)][_0x1293(0x47)](_0x15aead));if(!_0xb150b3)throw new Error(_0x58f59c[_0x1293(0x48)]);globalConfig={'apiKey':_0x505d94['apiKey'],'environment':_0x505d94[_0x1293(0x49)]||'production','enableLogging':_0x58f59c['XhORP'](_0x505d94[_0x1293(0x4a)],![]),'timeout':_0x505d94[_0x1293(0x4b)]||0x7530,'retryAttempts':_0x505d94[_0x1293(0x4c)]||0x3};if(globalConfig[_0x1293(0x4a)]){if(_0x58f59c[_0x1293(0x4d)](_0x58f59c[_0x1293(0x4e)],_0x58f59c[_0x1293(0x4f)]))throw new _0x15d7be(_0x58f59c[_0x1293(0x48)]);else console[_0x1293(0x3e)](_0x58f59c['fIlzR'],{'environment':globalConfig['environment'],'timeout':globalConfig['timeout'],'retryAttempts':globalConfig[_0x1293(0x4c)],'apiKeyPrefix':_0x58f59c[_0x1293(0x50)](_0x505d94['apiKey'][_0x1293(0x51)](0x0,0x8),_0x58f59c[_0x1293(0x52)]),'enableLogging':globalConfig['enableLogging']});}const _0xfd3fa5=await _0x58f59c['rmEGP'](validateApiKey,_0x505d94[_0x1293(0x46)]);if(!_0xfd3fa5[_0x1293(0x53)]){const _0x34690e=_0xfd3fa5[_0x1293(0x54)]||'',_0x527699=_0xfd3fa5['isNetworkError']||_0x34690e[_0x1293(0x55)](_0x58f59c[_0x1293(0x56)])||_0x34690e[_0x1293(0x55)](_0x58f59c[_0x1293(0x57)])||_0x34690e[_0x1293(0x55)](_0x58f59c['bZtSD'])||_0x34690e[_0x1293(0x55)](_0x58f59c[_0x1293(0x58)])||_0x34690e[_0x1293(0x55)](_0x1293(0x4b))||_0x34690e[_0x1293(0x55)](_0x58f59c['TeoTq'])||_0x34690e[_0x1293(0x55)](_0x58f59c[_0x1293(0x59)])||_0x34690e[_0x1293(0x55)](_0x58f59c[_0x1293(0x5a)]);if(_0x527699){if(_0x58f59c[_0x1293(0x5b)](_0x58f59c[_0x1293(0x5c)],_0x1293(0x32))){const _0x4db955=_0x58f59c[_0x1293(0x5d)][_0x1293(0x5e)]('|');let _0x1d3cbd=0x0;while(!![]){switch(_0x4db955[_0x1d3cbd++]){case'0':console[_0x1293(0x22)]('🌐\x20Error\x20details:',_0xfd3fa5[_0x1293(0x54)]);continue;case'1':console[_0x1293(0x22)](_0x58f59c[_0x1293(0x5f)]);continue;case'2':console[_0x1293(0x22)](_0x1293(0x60));continue;case'3':console['warn'](_0x58f59c[_0x1293(0x61)]);continue;case'4':console[_0x1293(0x3e)](_0x58f59c[_0x1293(0x62)]);continue;}break;}}else{var _0x4ed3ae;if(!(_0x58f59c[_0x1293(0x63)](_0x4ed3ae=_0x1a23ac,null)&&_0x58f59c[_0x1293(0x63)](_0x4ed3ae,void 0x0)&&_0x4ed3ae[_0x1293(0x46)]))throw new _0x4d1002(_0x58f59c['ISAdt']);const _0x428398=_0x58f59c['CNyaB'](_0x394c6e,_0x2a33f1[_0x1293(0x46)]);return{'Content-Type':'application/json','Authorization':_0x1293(0x64)+_0x2ee0f6[_0x1293(0x46)],'User-Agent':_0x1293(0x65),'X-SDK-Version':_0x58f59c[_0x1293(0x66)],'X-SDK-Environment':_0x597ec1[_0x1293(0x49)]||_0x58f59c[_0x1293(0x67)],'X-API-Key-Type':_0x428398,'X-Timestamp':new _0x5a14f3()[_0x1293(0x68)]()};}}else{if(_0x58f59c[_0x1293(0x63)](_0x1293(0x69),_0x58f59c[_0x1293(0x6a)]))throw new _0x3877b3(_0x58f59c[_0x1293(0x6b)]);else throw new Error(_0x1293(0x6c)+_0xfd3fa5['error']);}}await _0x58f59c['OdwHr'](loadJWT),isInitialized=!![];if(globalConfig[_0x1293(0x4a)]){const _0x563643=_0x58f59c[_0x1293(0x6d)][_0x1293(0x5e)]('|');let _0x3bbebc=0x0;while(!![]){switch(_0x563643[_0x3bbebc++]){case'0':userToken&&console[_0x1293(0x3e)](_0x58f59c[_0x1293(0x6e)]);continue;case'1':console[_0x1293(0x3e)](_0x58f59c['FtaCJ']);continue;case'2':_0xfd3fa5[_0x1293(0x6f)]&&console['log'](_0x58f59c[_0x1293(0x70)],_0xfd3fa5[_0x1293(0x6f)]);continue;case'3':_0xfd3fa5['permissions']&&console[_0x1293(0x3e)](_0x58f59c[_0x1293(0x71)],_0xfd3fa5[_0x1293(0x72)]);continue;case'4':console[_0x1293(0x3e)](_0x58f59c['Rwpfw']);continue;}break;}}}catch(_0x3159e3){console[_0x1293(0x54)](_0x58f59c[_0x1293(0x73)],_0x3159e3),isInitialized=![];throw _0x3159e3;}};exports['initializeApiKey']=initializeApiKey;const getApiKeyType=_0x1f5e3d=>{const _0x97e63a={'CTVut':function(_0x132754,_0x224d7f){return _0x132754>=_0x224d7f;},'xEUUq':'dev_','RnChR':_0x1293(0x2b),'wwdEt':'ona_','weypu':function(_0x1d75d0,_0x18d74b){return _0x1d75d0===_0x18d74b;},'RDmbE':'HStbw'};if(_0x97e63a[_0x1293(0x74)](_0x1f5e3d['length'],0x20)&&(_0x1f5e3d[_0x1293(0x47)](_0x97e63a[_0x1293(0x75)])||_0x1f5e3d[_0x1293(0x47)](_0x97e63a[_0x1293(0x76)])||_0x1f5e3d[_0x1293(0x47)](_0x97e63a[_0x1293(0x77)]))){if(_0x97e63a['weypu']('HStbw',_0x97e63a[_0x1293(0x78)]))return ApiKeyType['DEVELOPER'];else _0x7b08d8[_0x1293(0x3e)](_0x1293(0x79)+_0x3e8fb3+'/'+_0x217cf2+_0x1293(0x7a));}return ApiKeyType[_0x1293(0x17)];};exports[_0x1293(0xf)]=getApiKeyType;const validateApiKey=async _0x41451e=>{const _0x3883ec={'MdFpV':function(_0x1ac5df,_0x2cffcd){return _0x1ac5df!==_0x2cffcd;},'nRbyq':_0x1293(0x29),'pNHmp':function(_0x3d83f7,_0x10a2ac){return _0x3d83f7!==_0x10a2ac;},'cYCnB':_0x1293(0x7b),'brUiS':_0x1293(0x1c),'szRTD':function(_0x4e6f0d,_0x3d195c){return _0x4e6f0d||_0x3d195c;},'UZisT':_0x1293(0x7c),'KvOJo':function(_0x2a0bf1,_0x5f5407){return _0x2a0bf1||_0x5f5407;},'hpxBj':_0x1293(0x7d),'mNghp':_0x1293(0x7e),'ZvRzq':_0x1293(0x2f),'vpBTv':'JSON\x20Parse\x20error','YlHfS':'API\x20validation\x20endpoint\x20returned','qRwry':_0x1293(0x4b),'SusLX':_0x1293(0x7f),'BmULT':_0x1293(0x1e),'PLZKU':_0x1293(0x80),'znska':_0x1293(0x81),'AdzGl':_0x1293(0x60),'afHaH':_0x1293(0x36),'jfPMK':_0x1293(0x34),'YmQjF':_0x1293(0x35),'vdTfA':function(_0x39c1f7,_0x2ae371){return _0x39c1f7===_0x2ae371;},'dNQNP':_0x1293(0x82),'mNHaE':_0x1293(0x83),'hSvUE':function(_0x41e08c,_0x496ca8){return _0x41e08c(_0x496ca8);},'sPaBa':function(_0x3823e3,_0xfb5145){return _0x3823e3===_0xfb5145;},'yeXie':function(_0x46aba6,_0xc45d4d){return _0x46aba6<_0xc45d4d;},'gHVJl':function(_0x41d016,_0x529fac){return _0x41d016-_0x529fac;},'QVcon':function(_0x87bdaa,_0x478d40){return _0x87bdaa!==_0x478d40;},'ehGvm':function(_0x1af168,_0xb7eb5d){return _0x1af168!==_0xb7eb5d;},'BnQzX':_0x1293(0x84),'zCvqM':function(_0x326843){return _0x326843();},'voOyC':function(_0x596ea9,_0x29837a){return _0x596ea9!==_0x29837a;},'xCwmM':_0x1293(0x85),'wjkaZ':_0x1293(0x86),'LMwUx':function(_0x54a22c,_0x2e68f6){return _0x54a22c===_0x2e68f6;},'DJyGa':function(_0x374a79,_0x3f136f){return _0x374a79===_0x3f136f;},'sGsIG':function(_0x259d29,_0x44db5b){return _0x259d29===_0x44db5b;},'CSVTt':function(_0xcc0e80,_0x249402){return _0xcc0e80<=_0x249402;},'sAGlm':function(_0x95b391,_0x34765f){return _0x95b391>_0x34765f;},'EthNL':function(_0x1c6f4f,_0x566937,_0x19b815){return _0x1c6f4f(_0x566937,_0x19b815);},'YqGqv':'3.3.1','dyURU':_0x1293(0x87),'qNwdX':'oCphy','rnclx':'Onairos\x20API\x20is\x20under\x20maintenance\x20(503\x20Service\x20Unavailable).\x20Please\x20try\x20again\x20later.','OFJvQ':_0x1293(0x88),'jjyGz':_0x1293(0x89),'KbMjv':'❌\x20API\x20endpoint\x20returned\x20non-JSON\x20response:','phAZD':function(_0x1debd5,_0x2db7b6){return _0x1debd5===_0x2db7b6;},'XmMzF':_0x1293(0x8a),'DgNsT':_0x1293(0x8b),'XZCDn':_0x1293(0x8c),'aggRV':'aPEEk','Camjq':function(_0x22d52e,_0x293451){return _0x22d52e||_0x293451;},'ULfKN':_0x1293(0x8d),'LKxQh':function(_0x4c3bdc,_0xcfeb6e){return _0x4c3bdc!==_0xcfeb6e;},'YkTpj':_0x1293(0x8e),'wCZQJ':function(_0x54d003,_0x1e3b14){return _0x54d003===_0x1e3b14;},'pnAaM':function(_0x776a40,_0x288778){return _0x776a40===_0x288778;},'sHIJB':_0x1293(0x8f),'QxSeZ':_0x1293(0x90),'tQfCT':function(_0x589fa7,_0x424e3e){return _0x589fa7!==_0x424e3e;},'OAYUD':function(_0x4eb99d,_0x3e5006){return _0x4eb99d===_0x3e5006;},'rhOvV':_0x1293(0x91),'nuQrS':_0x1293(0x92),'ePSGb':_0x1293(0x93),'TfAxH':_0x1293(0x94),'RrxTK':'ARjnR','CYptL':_0x1293(0x95),'iIVOw':_0x1293(0x96),'SyUTQ':function(_0x103524,_0x2eecb4){return _0x103524!==_0x2eecb4;},'JhrLn':function(_0x8fe375,_0x5d82fa){return _0x8fe375-_0x5d82fa;},'nELYF':function(_0xa92598,_0x1e0b9b){return _0xa92598!==_0x1e0b9b;},'CGivQ':_0x1293(0x97),'HxAGt':_0x1293(0x98)};try{if(_0x3883ec['vdTfA'](_0x3883ec[_0x1293(0x99)],_0x1293(0x9a))){var _0x1fea95;return _0x3883ec['MdFpV'](_0x1fea95=_0x1dd9c1,null)&&_0x3883ec[_0x1293(0x9b)](_0x1fea95,void 0x0)&&_0x1fea95[_0x1293(0x4a)]&&_0x350e1c[_0x1293(0x54)]('❌\x20API\x20key\x20validation\x20failed\x20(client\x20error):',_0x3ac761),_0x1c0970;}else{var _0x63299f,_0x2cfeb7,_0x427127;console['log'](_0x3883ec[_0x1293(0x9c)]);const _0x59254c=_0x3883ec[_0x1293(0x9d)](getApiKeyType,_0x41451e);if(_0x3883ec[_0x1293(0x9e)](_0x59254c,ApiKeyType[_0x1293(0x17)]))return{'isValid':![],'error':'Invalid\x20API\x20key\x20format.\x20Developer\x20keys\x20must\x20be\x20at\x20least\x2032\x20characters\x20and\x20start\x20with\x20\x22dev_\x22,\x20\x22pk_\x22,\x20or\x20\x22ona_\x22','keyType':ApiKeyType['INVALID']};const _0x2abe61=validationCache['get'](_0x41451e);if(_0x2abe61&&_0x3883ec['yeXie'](_0x3883ec[_0x1293(0x9f)](Date['now'](),_0x2abe61[_0x1293(0xa0)]),CACHE_DURATION)){var _0x125a52;if(_0x3883ec['QVcon'](_0x125a52=globalConfig,null)&&_0x3883ec[_0x1293(0xa1)](_0x125a52,void 0x0)&&_0x125a52['enableLogging']){if(_0x3883ec['BnQzX']===_0x1293(0xa2))return _0x528eab&&_0x278bc['__esModule']?_0x4f49c6:{'default':_0x280c67};else console[_0x1293(0x3e)](_0x3883ec[_0x1293(0xa3)]);}return _0x2abe61['result'];}const _0x2ccad4=await _0x3883ec[_0x1293(0xa4)](checkNetworkConnectivity);if(!_0x2ccad4){if(_0x3883ec['voOyC'](_0x3883ec[_0x1293(0xa5)],_0x3883ec[_0x1293(0xa6)]))return console[_0x1293(0x22)](_0x3883ec['hpxBj']),{'isValid':![],'error':_0x3883ec['mNghp'],'keyType':_0x59254c,'isNetworkError':!![]};else throw new _0x3016bf(_0x3883ec['nRbyq']);}const _0xf1325e=((_0x63299f=globalConfig)===null||_0x3883ec['vdTfA'](_0x63299f,void 0x0)?void 0x0:_0x63299f[_0x1293(0x49)])||'production',_0x38bc65=API_ENDPOINTS[_0xf1325e],_0x2de228=(_0x3883ec[_0x1293(0xa7)](_0x2cfeb7=globalConfig,null)||_0x3883ec[_0x1293(0xa8)](_0x2cfeb7,void 0x0)?void 0x0:_0x2cfeb7['timeout'])||0x7530,_0x56c066=(_0x3883ec[_0x1293(0xa9)](_0x427127=globalConfig,null)||_0x3883ec[_0x1293(0xa7)](_0x427127,void 0x0)?void 0x0:_0x427127[_0x1293(0x4c)])||0x3;for(let _0x16adfc=0x1;_0x3883ec[_0x1293(0xaa)](_0x16adfc,_0x56c066);_0x16adfc++){const _0x1f827b=new AbortController(),_0x382f5e=setTimeout(()=>_0x1f827b['abort'](),_0x2de228);try{var _0x294d4a;_0x3883ec[_0x1293(0x9b)](_0x294d4a=globalConfig,null)&&_0x3883ec[_0x1293(0xab)](_0x294d4a,void 0x0)&&_0x294d4a[_0x1293(0x4a)]&&_0x3883ec[_0x1293(0xac)](_0x16adfc,0x1)&&console['log'](_0x1293(0x79)+_0x16adfc+'/'+_0x56c066+'\x20for\x20API\x20key\x20validation');const _0x13b64e=await _0x3883ec[_0x1293(0xad)](fetch,_0x38bc65+'/dev/validate-apikey',{'method':'POST','headers':{'Content-Type':'application/json','Authorization':'Bearer\x20'+_0x41451e,'User-Agent':'OnairosReactNative/3.3.1','X-API-Key-Type':_0x59254c,'X-SDK-Platform':'react-native','X-Retry-Attempt':_0x16adfc['toString']()},'body':JSON[_0x1293(0xae)]({'environment':_0xf1325e,'sdk_version':_0x3883ec[_0x1293(0xaf)],'platform':'react-native','keyType':_0x59254c,'timestamp':new Date()[_0x1293(0x68)](),'attempt':_0x16adfc}),'signal':_0x1f827b['signal']});clearTimeout(_0x382f5e);if(!_0x13b64e)throw new Error(_0x1293(0xb0));if(_0x3883ec[_0x1293(0xa7)](_0x13b64e['status'],0x1f6))throw new Error(_0x1293(0xb1));if(_0x13b64e[_0x1293(0xb2)]===0x1f7){if(_0x3883ec[_0x1293(0xb3)]!==_0x3883ec[_0x1293(0xb4)])throw new Error(_0x3883ec[_0x1293(0xb5)]);else{var _0x95792b;return _0x3883ec[_0x1293(0xab)](_0x95792b=_0x1451ea,null)&&_0x95792b!==void 0x0&&_0x95792b[_0x1293(0x4a)]&&_0x2a927d[_0x1293(0x3e)](_0x3883ec[_0x1293(0xa3)]),_0x291756[_0x1293(0xb6)];}}if(_0x13b64e[_0x1293(0xb2)]===0x1f8)throw new Error(_0x3883ec[_0x1293(0xb7)]);const _0x1f8776=_0x13b64e[_0x1293(0xb8)]['get'](_0x3883ec[_0x1293(0xb9)]),_0x18a8af=_0x1f8776&&_0x1f8776[_0x1293(0x55)]('application/json');if(!_0x18a8af){const _0x17b51b=await _0x13b64e[_0x1293(0xba)](),_0x453249=_0x17b51b['substring'](0x0,0xc8);console[_0x1293(0x54)](_0x3883ec[_0x1293(0xbb)],{'status':_0x13b64e['status'],'statusText':_0x13b64e[_0x1293(0xbc)],'contentType':_0x3883ec[_0x1293(0xbd)](_0x1f8776,_0x1293(0xbe)),'preview':_0x453249,'url':_0x38bc65+_0x1293(0xbf),'attempt':_0x16adfc});if(_0x3883ec[_0x1293(0xa8)](_0x13b64e[_0x1293(0xb2)],0x194))throw new Error('API\x20validation\x20endpoint\x20not\x20found\x20(404).\x20The\x20endpoint\x20'+_0x38bc65+_0x1293(0xc0));else{if(_0x3883ec[_0x1293(0xa7)](_0x13b64e['status'],0x1f4))throw new Error(_0x1293(0xc1));else{if(_0x3883ec[_0x1293(0x9e)](_0x13b64e[_0x1293(0xb2)],0x1f6)||_0x3883ec[_0x1293(0xc2)](_0x13b64e[_0x1293(0xb2)],0x1f7)){if(_0x3883ec[_0x1293(0xc3)]===_0x3883ec[_0x1293(0xc3)])throw new Error(_0x1293(0xc4)+_0x13b64e[_0x1293(0xb2)]+_0x1293(0xc5));else return _0x480f5[_0x1293(0x22)](_0x3883ec[_0x1293(0xc6)],_0x20bc0b),!![];}else{if(_0x17b51b[_0x1293(0x55)](_0x3883ec[_0x1293(0xc7)])||_0x17b51b[_0x1293(0x55)](_0x3883ec[_0x1293(0xc8)])){if(_0x3883ec[_0x1293(0xc9)]===_0x3883ec[_0x1293(0xc9)])throw new Error(_0x1293(0xca));else return _0x4f85da;}else throw new Error(_0x1293(0xcb)+_0x13b64e[_0x1293(0xb2)]+'\x20-\x20'+_0x13b64e['statusText']+_0x1293(0xcc)+_0x3883ec[_0x1293(0xcd)](_0x1f8776,_0x3883ec[_0x1293(0xce)])+'.');}}}}let _0x67370f;try{_0x67370f=await _0x13b64e[_0x1293(0xcf)]();}catch(_0x15487c){console['error'](_0x1293(0xd0),{'error':_0x15487c[_0x1293(0xd1)],'status':_0x13b64e[_0x1293(0xb2)],'contentType':_0x1f8776,'attempt':_0x16adfc});throw new Error(_0x1293(0xd2)+_0x15487c[_0x1293(0xd1)]);}if(_0x13b64e['ok']&&(_0x67370f[_0x1293(0xd3)]||_0x67370f['valid'])){var _0x23a311;const _0x5354cc={'isValid':!![],'permissions':_0x67370f[_0x1293(0x72)]||[],'rateLimits':_0x67370f[_0x1293(0x6f)]||null,'keyType':_0x59254c};validationCache[_0x1293(0xd4)](_0x41451e,{'result':_0x5354cc,'timestamp':Date['now']()});if(_0x3883ec[_0x1293(0xd5)](_0x23a311=globalConfig,null)&&_0x23a311!==void 0x0&&_0x23a311[_0x1293(0x4a)]){var _0x2fb222,_0x2c11cb,_0x4dc6de;console[_0x1293(0x3e)](_0x3883ec['YkTpj'],{'apiKeyId':_0x3883ec[_0x1293(0xd6)](_0x2fb222=_0x67370f[_0x1293(0x46)],null)||_0x2fb222===void 0x0?void 0x0:_0x2fb222['id'],'appName':(_0x2c11cb=_0x67370f[_0x1293(0xd7)])===null||_0x3883ec[_0x1293(0xa9)](_0x2c11cb,void 0x0)?void 0x0:_0x2c11cb[_0x1293(0xd8)],'usageCount':_0x3883ec[_0x1293(0xd9)](_0x4dc6de=_0x67370f['apiKey'],null)||_0x4dc6de===void 0x0?void 0x0:_0x4dc6de['usageCount']});}return _0x5354cc;}else{if(_0x3883ec['sPaBa'](_0x3883ec[_0x1293(0xda)],_0x3883ec[_0x1293(0xdb)])){var _0x84d81e;const _0x2c3ad0=_0x3883ec[_0x1293(0xbd)](_0x3e9a1f,_0x372c3c);if(!_0x2c3ad0)return _0x4335f9[_0x1293(0x22)](_0x3883ec['UZisT']),null;const _0x491e95=_0xac08fa(_0x2c3ad0);if(!_0x491e95)return null;const _0x3127b5=_0x491e95['userName']||_0x491e95['username']||_0x491e95['userId']||_0x491e95[_0x1293(0xdc)];return _0x3883ec[_0x1293(0x9b)](_0x84d81e=_0x4ca20c,null)&&_0x3883ec[_0x1293(0x9b)](_0x84d81e,void 0x0)&&_0x84d81e['enableLogging']&&_0x1415cf['log'](_0x1293(0xdd),_0x3127b5),_0x3883ec[_0x1293(0xde)](_0x3127b5,null);}else{const _0x4e3a90=_0x67370f[_0x1293(0x54)]||_0x67370f['message']||_0x1293(0xdf)+_0x13b64e[_0x1293(0xb2)]+':\x20'+_0x13b64e[_0x1293(0xbc)],_0x3d9eb8={'isValid':![],'error':_0x4e3a90,'keyType':_0x59254c};if(_0x13b64e[_0x1293(0xb2)]>=0x190&&_0x3883ec['yeXie'](_0x13b64e[_0x1293(0xb2)],0x1f4)){var _0x58417b;return _0x3883ec[_0x1293(0xe0)](_0x58417b=globalConfig,null)&&_0x3883ec[_0x1293(0xe1)](_0x58417b,void 0x0)&&_0x58417b['enableLogging']&&console[_0x1293(0x54)](_0x1293(0xe2),_0x4e3a90),_0x3d9eb8;}throw new Error(_0x4e3a90);}}}catch(_0x44273c){var _0x32f0e9;_0x3883ec['hSvUE'](clearTimeout,_0x382f5e);if(_0x3883ec[_0x1293(0xe3)](_0x44273c['name'],_0x3883ec[_0x1293(0xe4)])){const _0x394eab=_0x1293(0xe5)+_0x2de228+_0x1293(0xe6);console[_0x1293(0x54)](_0x3883ec[_0x1293(0xe7)]);if(_0x16adfc===_0x56c066)return _0x3883ec[_0x1293(0xe1)](_0x3883ec[_0x1293(0xe8)],'PyhJB')?(_0x269f2e['warn'](_0x3883ec[_0x1293(0xe9)]),{'isValid':![],'error':_0x3883ec[_0x1293(0xea)],'keyType':_0x2bcf02,'isNetworkError':!![]}):{'isValid':![],'error':_0x394eab,'keyType':_0x59254c};continue;}let _0xb9cc2f=_0x1293(0xeb)+_0x44273c[_0x1293(0xd1)];if(_0x44273c['message'][_0x1293(0x55)](_0x3883ec[_0x1293(0xec)])||_0x44273c['message'][_0x1293(0x55)](_0x1293(0xed)))_0x3883ec[_0x1293(0xa9)](_0x3883ec[_0x1293(0xee)],_0x3883ec['RrxTK'])?_0x49ffa6=_0x1293(0xef)+_0x30b159['message']:_0xb9cc2f='Server\x20returned\x20invalid\x20JSON\x20response.\x20This\x20usually\x20indicates\x20the\x20API\x20endpoint\x20returned\x20HTML\x20instead\x20of\x20JSON\x20(often\x20a\x20404\x20or\x20server\x20error\x20page).\x20'+_0x44273c[_0x1293(0xd1)];else{if(_0x44273c['message'][_0x1293(0x55)](_0x3883ec['CYptL'])||_0x44273c[_0x1293(0xd1)][_0x1293(0x55)](_0x3883ec[_0x1293(0xf0)]))_0xb9cc2f='Network\x20connectivity\x20issue.\x20Please\x20check\x20internet\x20connection\x20and\x20verify\x20the\x20Onairos\x20API\x20is\x20accessible.\x20'+_0x44273c[_0x1293(0xd1)];else(_0x44273c[_0x1293(0xd1)][_0x1293(0x55)](_0x3883ec[_0x1293(0xf1)])||_0x44273c['message'][_0x1293(0x55)](_0x1293(0x7f)))&&(_0xb9cc2f=_0x1293(0xf2)+_0x38bc65+_0x1293(0xf3)+_0x44273c[_0x1293(0xd1)]);}console[_0x1293(0x54)](_0x1293(0xf4),{'error':_0x44273c,'endpoint':_0x38bc65+_0x1293(0xbf),'attempt':_0x16adfc,'maxRetries':_0x56c066,'retryable':_0x16adfc<_0x56c066});if(_0x3883ec[_0x1293(0xa9)](_0x16adfc,_0x56c066)){if(_0x3883ec[_0x1293(0xf5)]('UJuvV',_0x1293(0xf6)))return{'isValid':![],'error':_0xb9cc2f,'keyType':_0x59254c,'isNetworkError':!![]};else{const _0xb2d3ac=_0x50bf40['error']||'',_0x36d334=_0x2dc83a[_0x1293(0xf7)]||_0xb2d3ac['includes'](_0x1293(0x95))||_0xb2d3ac[_0x1293(0x55)](_0x3883ec[_0x1293(0xf8)])||_0xb2d3ac['includes'](_0x3883ec['vpBTv'])||_0xb2d3ac[_0x1293(0x55)](_0x3883ec[_0x1293(0xf9)])||_0xb2d3ac[_0x1293(0x55)](_0x3883ec['qRwry'])||_0xb2d3ac[_0x1293(0x55)](_0x3883ec[_0x1293(0xfa)])||_0xb2d3ac['includes'](_0x3883ec[_0x1293(0xf0)])||_0xb2d3ac[_0x1293(0x55)](_0x3883ec[_0x1293(0xfb)]);if(_0x36d334){const _0x151fc2=_0x3883ec[_0x1293(0xfc)]['split']('|');let _0x1a5ec0=0x0;while(!![]){switch(_0x151fc2[_0x1a5ec0++]){case'0':_0x388c24['warn'](_0x3883ec['AdzGl']);continue;case'1':_0x3601ec[_0x1293(0x3e)](_0x3883ec[_0x1293(0xfd)]);continue;case'2':_0x3dab88[_0x1293(0x22)](_0x3883ec[_0x1293(0xfe)]);continue;case'3':_0x34f012[_0x1293(0x22)](_0x3883ec[_0x1293(0xff)]);continue;case'4':_0x33640e[_0x1293(0x22)](_0x1293(0x100),_0x205569[_0x1293(0x54)]);continue;}break;}}else throw new _0x563397(_0x1293(0x6c)+_0x10bb4a[_0x1293(0x54)]);}}const _0x2307a7=Math[_0x1293(0x101)](0x3e8*Math[_0x1293(0x102)](0x2,_0x3883ec['JhrLn'](_0x16adfc,0x1)),0x1388);_0x3883ec[_0x1293(0xd5)](_0x32f0e9=globalConfig,null)&&_0x3883ec[_0x1293(0x103)](_0x32f0e9,void 0x0)&&_0x32f0e9[_0x1293(0x4a)]&&console[_0x1293(0x3e)]('⏳\x20Waiting\x20'+_0x2307a7+_0x1293(0x104)),await new Promise(_0x2fc5e9=>setTimeout(()=>_0x2fc5e9(),_0x2307a7));}}return{'isValid':![],'error':_0x3883ec[_0x1293(0x105)],'keyType':_0x59254c};}}catch(_0x28b3f7){const _0x469ae5='API\x20key\x20validation\x20error:\x20'+_0x28b3f7['message'];return console['error'](_0x3883ec[_0x1293(0x106)],_0x28b3f7),{'isValid':![],'error':_0x469ae5,'keyType':ApiKeyType[_0x1293(0x17)]};}};exports[_0x1293(0x2)]=validateApiKey;const getApiConfig=()=>{return globalConfig;};exports[_0x1293(0x107)]=getApiConfig;const getApiKey=()=>{const _0x7639f3={'kYcjM':function(_0x171f6b,_0x1e124a){return _0x171f6b===_0x1e124a;}};var _0x593931;return(_0x7639f3[_0x1293(0x108)](_0x593931=globalConfig,null)||_0x7639f3[_0x1293(0x108)](_0x593931,void 0x0)?void 0x0:_0x593931[_0x1293(0x46)])||null;};exports[_0x1293(0x10)]=getApiKey;const isApiKeyInitialized=()=>{return isInitialized&&globalConfig!==null;};exports[_0x1293(0x9)]=isApiKeyInitialized;const storeJWT=async _0x18c56b=>{const _0x4c8896={'esHBO':function(_0x44bf40,_0x4abdf0){return _0x44bf40!==_0x4abdf0;},'UxMMk':'🎫\x20JWT\x20token\x20stored\x20successfully','zVKPl':_0x1293(0x109)};try{var _0x1f67e9;await _asyncStorage[_0x1293(0x1d)][_0x1293(0x10a)](JWT_TOKEN_KEY,_0x18c56b),userToken=_0x18c56b,_0x4c8896['esHBO'](_0x1f67e9=globalConfig,null)&&_0x4c8896[_0x1293(0x10b)](_0x1f67e9,void 0x0)&&_0x1f67e9[_0x1293(0x4a)]&&console[_0x1293(0x3e)](_0x4c8896['UxMMk']);}catch(_0x3c00ed){console[_0x1293(0x54)](_0x4c8896['zVKPl'],_0x3c00ed);throw _0x3c00ed;}};exports[_0x1293(0x3)]=storeJWT;const loadJWT=async()=>{const _0xcb0f92={'qpZek':'❌\x20Failed\x20to\x20load\x20JWT\x20token:'};try{const _0x2a2ee4=await _asyncStorage[_0x1293(0x1d)]['getItem'](JWT_TOKEN_KEY);return userToken=_0x2a2ee4,_0x2a2ee4;}catch(_0x1e6afd){return console[_0x1293(0x54)](_0xcb0f92[_0x1293(0x10c)],_0x1e6afd),null;}};exports[_0x1293(0x7)]=loadJWT;const getJWT=()=>{return userToken;};exports['getJWT']=getJWT;const clearJWT=async()=>{const _0x50c0a4={'rWHHn':function(_0xfbb4f7,_0x44f94a){return _0xfbb4f7!==_0x44f94a;},'oQPga':function(_0x332593,_0x57a0e3){return _0x332593!==_0x57a0e3;},'KvvOx':_0x1293(0x10d)};try{var _0x3a142b;await _asyncStorage[_0x1293(0x1d)][_0x1293(0x10e)](JWT_TOKEN_KEY),userToken=null,_0x50c0a4[_0x1293(0x10f)](_0x3a142b=globalConfig,null)&&_0x50c0a4[_0x1293(0x110)](_0x3a142b,void 0x0)&&_0x3a142b[_0x1293(0x4a)]&&console[_0x1293(0x3e)](_0x1293(0x111));}catch(_0x530cc8){console[_0x1293(0x54)](_0x50c0a4[_0x1293(0x112)],_0x530cc8);}};exports[_0x1293(0x14)]=clearJWT;function _0x1293(_0x3fb17a,_0x1293a6){_0x3fb17a=_0x3fb17a-0x0;const _0x42907b=_0x3fb1();let _0x5670db=_0x42907b[_0x3fb17a];return _0x5670db;}const base64Decode=_0x1c0c6a=>{const _0x1deeb3={'hSdrR':function(_0x2c9809,_0x17624e){return _0x2c9809<_0x17624e;},'ZDNdZ':function(_0x1930b6,_0x59dd01){return _0x1930b6!==_0x59dd01;},'gNnNO':_0x1293(0x113),'ikJYN':'wFdJG','dHfeM':function(_0x23618d,_0x31e98f){return _0x23618d|_0x31e98f;},'CzpYV':function(_0x4d3539,_0x2d1882){return _0x4d3539<<_0x2d1882;},'Dsnyz':function(_0x5c912a,_0x3e99e2){return _0x5c912a>>_0x3e99e2;},'rHXzi':function(_0x5ad0e8,_0x126e9f){return _0x5ad0e8&_0x126e9f;}},_0x14e241=_0x1293(0x114);let _0x2b87d4='',_0x3d358a=0x0;_0x1c0c6a=_0x1c0c6a['replace'](/[^A-Za-z0-9+/]/g,'');while(_0x1deeb3[_0x1293(0x115)](_0x3d358a,_0x1c0c6a[_0x1293(0x42)])){if(_0x1deeb3['ZDNdZ'](_0x1deeb3[_0x1293(0x116)],_0x1deeb3[_0x1293(0x117)])){const _0x20a974=_0x14e241['indexOf'](_0x1c0c6a['charAt'](_0x3d358a++)),_0x526b33=_0x14e241['indexOf'](_0x1c0c6a[_0x1293(0x118)](_0x3d358a++)),_0x410ad1=_0x14e241['indexOf'](_0x1c0c6a[_0x1293(0x118)](_0x3d358a++)),_0x42f725=_0x14e241['indexOf'](_0x1c0c6a['charAt'](_0x3d358a++)),_0xbf189a=_0x1deeb3[_0x1293(0x119)](_0x1deeb3[_0x1293(0x119)](_0x1deeb3[_0x1293(0x11a)](_0x20a974,0x12)|_0x1deeb3[_0x1293(0x11a)](_0x526b33,0xc),_0x410ad1<<0x6),_0x42f725);_0x2b87d4+=String[_0x1293(0x11b)](_0x1deeb3[_0x1293(0x11c)](_0xbf189a,0x10)&0xff);if(_0x1deeb3[_0x1293(0x11d)](_0x410ad1,0x40))_0x2b87d4+=String[_0x1293(0x11b)](_0x1deeb3[_0x1293(0x11e)](_0x1deeb3['Dsnyz'](_0xbf189a,0x8),0xff));if(_0x1deeb3['ZDNdZ'](_0x42f725,0x40))_0x2b87d4+=String[_0x1293(0x11b)](_0x1deeb3[_0x1293(0x11e)](_0xbf189a,0xff));}else throw new _0x2396bc(_0x1293(0x11f));}return _0x2b87d4;},decodeJWTPayload=_0x3806de=>{const _0x5c504c={'cQHAz':_0x1293(0x120),'qDHiO':_0x1293(0x121),'tgIAI':function(_0x1d49c3,_0x2b27f4){return _0x1d49c3!==_0x2b27f4;},'JvNpP':_0x1293(0x122),'YyGrQ':function(_0x4fe7d3,_0x389b69){return _0x4fe7d3/_0x389b69;},'nyGbj':function(_0x46b4c3,_0x16a748){return _0x46b4c3(_0x16a748);},'BgpUd':function(_0x47dd0a,_0x4e2ed0){return _0x47dd0a===_0x4e2ed0;},'MPgbs':'ZvTWd','aHsiJ':_0x1293(0x123)};try{const _0x2cc529=_0x3806de[_0x1293(0x5e)]('.');if(_0x5c504c[_0x1293(0x124)](_0x2cc529[_0x1293(0x42)],0x3))return console[_0x1293(0x54)](_0x5c504c[_0x1293(0x125)]),null;const _0x236b50=_0x2cc529[0x1],_0x47f591=_0x236b50[_0x1293(0x126)](/-/g,'+')[_0x1293(0x126)](/_/g,'/'),_0x1e9725=_0x47f591[_0x1293(0x127)](Math['ceil'](_0x5c504c[_0x1293(0x128)](_0x47f591[_0x1293(0x42)],0x4))*0x4,'='),_0x2329be=_0x5c504c[_0x1293(0x129)](base64Decode,_0x1e9725);return JSON['parse'](_0x2329be);}catch(_0x4dbdb1){if(_0x5c504c[_0x1293(0x12a)](_0x5c504c[_0x1293(0x12b)],_0x5c504c[_0x1293(0x12c)])){_0x5db281[_0x1293(0x54)](_0x5c504c[_0x1293(0x12d)]);throw new _0x31498d(_0x5c504c['qDHiO']);}else return console['error'](_0x1293(0x12e),_0x4dbdb1),null;}};exports['decodeJWTPayload']=decodeJWTPayload;const extractUsernameFromJWT=_0x5b37aa=>{const _0x409099={'QAdMZ':function(_0x36c778,_0x3fb6b4){return _0x36c778||_0x3fb6b4;},'vLgLQ':_0x1293(0x7c),'KHomV':function(_0x4ed4df,_0x5eaa27){return _0x4ed4df(_0x5eaa27);},'cZgSa':function(_0x28509d,_0x27092a){return _0x28509d!==_0x27092a;},'TxPwT':_0x1293(0xdd),'gsQLC':function(_0x308b5d,_0x433b70){return _0x308b5d||_0x433b70;},'daldz':'TRdlp'};try{var _0x4dfa07;const _0x7df98d=_0x409099[_0x1293(0x12f)](_0x5b37aa,userToken);if(!_0x7df98d)return console[_0x1293(0x22)](_0x409099[_0x1293(0x130)]),null;const _0x2ebc12=_0x409099[_0x1293(0x131)](decodeJWTPayload,_0x7df98d);if(!_0x2ebc12)return null;const _0x590d69=_0x2ebc12[_0x1293(0x132)]||_0x2ebc12[_0x1293(0x133)]||_0x2ebc12[_0x1293(0x134)]||_0x2ebc12[_0x1293(0xdc)];return(_0x4dfa07=globalConfig)!==null&&_0x409099[_0x1293(0x135)](_0x4dfa07,void 0x0)&&_0x4dfa07[_0x1293(0x4a)]&&console[_0x1293(0x3e)](_0x409099[_0x1293(0x136)],_0x590d69),_0x409099[_0x1293(0x137)](_0x590d69,null);}catch(_0x1e3eb1){if(_0x409099[_0x1293(0x135)](_0x409099[_0x1293(0x138)],'uXoDW'))return console[_0x1293(0x54)]('❌\x20Failed\x20to\x20extract\x20username\x20from\x20JWT:',_0x1e3eb1),null;else _0x34fe6c[_0x1293(0x3e)]('👤\x20Extracted\x20username\x20from\x20JWT:',_0xdaddbc);}};exports[_0x1293(0x139)]=extractUsernameFromJWT;const extractUserDataFromJWT=_0x277ab5=>{const _0x519d78={'biUUn':_0x1293(0xb1),'iPCdP':_0x1293(0xe2),'wVIQl':function(_0x55633d,_0x8086cf){return _0x55633d<_0x8086cf;},'ciNSP':function(_0x3a38f9,_0x5eabee){return _0x3a38f9!==_0x5eabee;},'OgjmK':_0x1293(0x13a),'qedSQ':function(_0x479d60,_0x534ab1){return _0x479d60===_0x534ab1;},'IMOqj':_0x1293(0x13b),'pZTSm':_0x1293(0x13c),'LymyK':function(_0x12bc9d,_0x10b6dc){return _0x12bc9d!==_0x10b6dc;},'mxtwS':_0x1293(0x13d),'WGJja':_0x1293(0x13e),'sCMwL':function(_0x527d59,_0x3fe22c){return _0x527d59===_0x3fe22c;},'FCMZk':_0x1293(0x13f),'AjExh':'❌\x20Failed\x20to\x20extract\x20user\x20data\x20from\x20JWT:'};try{if(_0x519d78[_0x1293(0x140)](_0x519d78[_0x1293(0x141)],_0x519d78[_0x1293(0x141)]))throw new _0x571d9d(_0x519d78[_0x1293(0x142)]);else{var _0x52aaf1;const _0x5e40b6=_0x277ab5||userToken;if(!_0x5e40b6){if(_0x519d78[_0x1293(0x143)](_0x519d78[_0x1293(0x144)],_0x1293(0x145)))_0xdf390c['log'](_0x1293(0x146)+_0x3b008b[_0x1293(0xb2)]+_0x1293(0x147)+_0x18504d);else return console['warn'](_0x519d78[_0x1293(0x148)]),null;}const _0x497c6a=decodeJWTPayload(_0x5e40b6);if(!_0x497c6a){if(_0x519d78[_0x1293(0x149)](_0x519d78[_0x1293(0x14a)],_0x519d78[_0x1293(0x14a)]))_0x3bb7c2[_0x1293(0x54)](_0x519d78[_0x1293(0x14b)],_0x25b0ec);else return null;}const _0x4e18e4={'id':_0x497c6a['id'],'email':_0x497c6a[_0x1293(0xdc)],'userId':_0x497c6a['userId'],'userName':_0x497c6a[_0x1293(0x132)]||_0x497c6a[_0x1293(0x133)],'verified':_0x497c6a['verified'],'iat':_0x497c6a[_0x1293(0x14c)],'exp':_0x497c6a[_0x1293(0x14d)]};return _0x519d78[_0x1293(0x140)](_0x52aaf1=globalConfig,null)&&_0x52aaf1!==void 0x0&&_0x52aaf1[_0x1293(0x4a)]&&console[_0x1293(0x3e)](_0x519d78['WGJja'],_0x4e18e4),_0x4e18e4;}}catch(_0x157171){if(_0x519d78[_0x1293(0x14e)](_0x519d78[_0x1293(0x14f)],_0x519d78['FCMZk']))return console['error'](_0x519d78[_0x1293(0x150)],_0x157171),null;else{const _0x6ee3bf=_0x30a2c3[_0x1293(0x54)]||_0x2c4085[_0x1293(0xd1)]||'HTTP\x20'+_0x2064f4[_0x1293(0xb2)]+':\x20'+_0x5e22ee[_0x1293(0xbc)],_0x113fe9={'isValid':![],'error':_0x6ee3bf,'keyType':_0x26ce72};if(_0x53043b[_0x1293(0xb2)]>=0x190&&_0x519d78['wVIQl'](_0x2e3e9c[_0x1293(0xb2)],0x1f4)){var _0x43d18e;return _0x519d78[_0x1293(0x140)](_0x43d18e=_0x4e92c9,null)&&_0x519d78[_0x1293(0x140)](_0x43d18e,void 0x0)&&_0x43d18e[_0x1293(0x4a)]&&_0x5bf804[_0x1293(0x54)](_0x519d78[_0x1293(0x14b)],_0x6ee3bf),_0x113fe9;}throw new _0x5f08ba(_0x6ee3bf);}}};exports[_0x1293(0x11)]=extractUserDataFromJWT;const isUserAuthenticated=()=>{return!!userToken;};exports[_0x1293(0x8)]=isUserAuthenticated;const getAuthHeaders=()=>{const _0x223894={'YnpSq':_0x1293(0x43),'bidJN':_0x1293(0x2b),'UyuPH':'ona_','XDDzt':function(_0x32e77f,_0x1d8cc8){return _0x32e77f!==_0x1d8cc8;},'uGhOA':function(_0x24bee1,_0x2d6c8e){return _0x24bee1!==_0x2d6c8e;},'HWJNs':_0x1293(0x151),'KnkMm':_0x1293(0x11f),'GiZoD':function(_0x2e488b,_0x71c058){return _0x2e488b(_0x71c058);},'YxNFY':_0x1293(0x27),'pOQcq':'production'};var _0x3bcdf0;if(!(_0x223894['XDDzt'](_0x3bcdf0=globalConfig,null)&&_0x223894['XDDzt'](_0x3bcdf0,void 0x0)&&_0x3bcdf0[_0x1293(0x46)])){if(_0x223894[_0x1293(0x152)](_0x223894[_0x1293(0x153)],_0x223894[_0x1293(0x153)])){if(_0x1ff976['length']>=0x20&&(_0x1de8c0[_0x1293(0x47)](_0x223894[_0x1293(0x154)])||_0x548bf5[_0x1293(0x47)](_0x223894['bidJN'])||_0x950b73[_0x1293(0x47)](_0x223894[_0x1293(0x155)])))return _0x22b0db[_0x1293(0x156)];return _0x850005['INVALID'];}else throw new Error(_0x223894[_0x1293(0x157)]);}const _0x39e1bf=_0x223894[_0x1293(0x158)](getApiKeyType,globalConfig[_0x1293(0x46)]);return{'Content-Type':'application/json','Authorization':_0x1293(0x64)+globalConfig['apiKey'],'User-Agent':_0x1293(0x159),'X-SDK-Version':_0x223894['YxNFY'],'X-SDK-Environment':globalConfig[_0x1293(0x49)]||_0x223894[_0x1293(0x15a)],'X-API-Key-Type':_0x39e1bf,'X-Timestamp':new Date()[_0x1293(0x68)]()};};exports['getAuthHeaders']=getAuthHeaders;const getDeveloperAuthHeaders=()=>{const _0x3962b4={'GJRET':function(_0x15ee65,_0xee9380){return _0x15ee65!==_0xee9380;},'pWIas':function(_0x24d068,_0x2930af){return _0x24d068!==_0x2930af;},'aivUe':function(_0x59b3b1,_0x4d340e){return _0x59b3b1(_0x4d340e);},'VZloo':'OnairosSDK/1.0.0','zMGgq':_0x1293(0x28)};var _0x4a24c3;if(!(_0x3962b4[_0x1293(0x15b)](_0x4a24c3=globalConfig,null)&&_0x3962b4[_0x1293(0x15c)](_0x4a24c3,void 0x0)&&_0x4a24c3['apiKey']))throw new Error(_0x1293(0x11f));const _0xf06ca=_0x3962b4[_0x1293(0x15d)](getApiKeyType,globalConfig[_0x1293(0x46)]);return{'Content-Type':'application/json','Authorization':_0x1293(0x64)+globalConfig[_0x1293(0x46)],'User-Agent':_0x3962b4[_0x1293(0x15e)],'X-SDK-Version':_0x1293(0x27),'X-SDK-Environment':globalConfig['environment']||_0x3962b4[_0x1293(0x15f)],'X-API-Key-Type':_0xf06ca,'X-Timestamp':new Date()[_0x1293(0x68)]()};};exports[_0x1293(0xd)]=getDeveloperAuthHeaders;const getUserAuthHeaders=()=>{const _0x54294e={'bBFhH':'3.0.72','ASJSg':function(_0x58b542,_0x57a043){return _0x58b542===_0x57a043;},'nCJtY':_0x1293(0x28)};var _0x45f29a;if(!userToken)throw new Error(_0x1293(0x160));return{'Content-Type':'application/json','Authorization':'Bearer\x20'+userToken,'User-Agent':_0x1293(0x65),'X-SDK-Version':_0x54294e[_0x1293(0x161)],'X-SDK-Environment':((_0x45f29a=globalConfig)===null||_0x54294e[_0x1293(0x162)](_0x45f29a,void 0x0)?void 0x0:_0x45f29a['environment'])||_0x54294e['nCJtY']};};function _0x3fb1(){const _0x4a5be1=['defineProperty','__esModule','validateApiKey','storeJWT','makeUserRequest','makeDeveloperRequest','makeAuthenticatedRequest','loadJWT','isUserAuthenticated','isApiKeyInitialized','initializeApiKey','getUserAuthHeaders','getJWT','getDeveloperAuthHeaders','getAuthHeaders','getApiKeyType','getApiKey','extractUserDataFromJWT','decodeJWTPayload','clearValidationCache','clearJWT','ApiKeyType','developer','INVALID','qlWOb','OuqVy','invalid','onairos_jwt_token','⚠️\x20Failed\x20to\x20check\x20network\x20connectivity:','default','fetch','vAilk','isConnected','isInternetReachable','warn','cxGeE','API_CONFIG','BASE_URL','Invalid\x20API\x20key\x20format.\x20Developer\x20keys\x20must\x20start\x20with\x20dev_,\x20ona_,\x20or\x20pk_','3.0.72','production','Developer\x20API\x20key\x20is\x20required\x20for\x20SDK\x20initialization','Invalid\x20API\x20key\x20format.\x20Developer\x20keys\x20must\x20be\x20at\x20least\x2032\x20characters\x20long.','pk_','xqubq','rsYrV','📝\x20SDK\x20Configuration:','Network\x20error','JSON\x20Parse\x20error','API\x20validation\x20endpoint\x20returned','ZQmFv','3|1|2|0|4','🔄\x20Continuing\x20in\x20offline\x20mode\x20with\x20basic\x20validation','⚠️\x20API\x20key\x20validation\x20failed\x20due\x20to\x20network/connectivity\x20issues','📱\x20SDK\x20initialized\x20in\x20offline\x20mode\x20-\x20will\x20retry\x20validation\x20when\x20network\x20is\x20available','4|1|0|3|2','🎫\x20User\x20JWT\x20token\x20loaded\x20from\x20storage','🔑\x20Developer\x20API\x20key\x20ready\x20for\x20app-level\x20operations','⏱️\x20Rate\x20Limits:','🔐\x20API\x20Key\x20Permissions:','✅\x20Onairos\x20SDK\x20initialized\x20successfully','❌\x20Failed\x20to\x20initialize\x20Onairos\x20SDK:','log','JAKKg','ZJces','CGKgx','length','dev_','CtCbS','eHNov','apiKey','startsWith','NGImY','environment','enableLogging','timeout','retryAttempts','TArBt','oPMol','HjVzT','zpJqy','substring','poLmo','isValid','error','includes','PcAFZ','HfUJK','KZQRl','JBAQX','jpXZJ','MXiUp','OsXFO','KGmbr','split','NBQfd','📝\x20SDK\x20will\x20function\x20with\x20limited\x20validation.\x20Network\x20connectivity\x20will\x20be\x20retried\x20automatically.','oWgcy','cOfpT','BcYik','Bearer\x20','OnairosSDK/1.0.0','hnfrS','DrpMh','toISOString','RqvOq','AExwE','tYjhp','API\x20key\x20validation\x20failed:\x20','xbbxM','mknAO','rateLimits','Poauo','GaYcz','permissions','SVYDt','CTVut','xEUUq','RnChR','wwdEt','RDmbE','🔄\x20Retry\x20attempt\x20','\x20for\x20API\x20key\x20validation','📋\x20Using\x20cached\x20API\x20key\x20validation\x20result','⚠️\x20No\x20JWT\x20token\x20available\x20for\x20username\x20extraction','⚠️\x20No\x20network\x20connectivity\x20detected','No\x20network\x20connection\x20available.\x20Please\x20check\x20your\x20internet\x20connection\x20and\x20try\x20again.','ENOTFOUND','No\x20network\x20connection','3|2|0|4|1','lHkDf','🔍\x20Validating\x20developer\x20API\x20key\x20against\x20backend...','spuhw','DCZda','vAwqG','qJTEe','Onairos\x20API\x20request\x20timed\x20out\x20(504\x20Gateway\x20Timeout).\x20Please\x20try\x20again.','content-type','KUQZg','<html','<!DOCTYPE','unknown\x20content\x20type','✅\x20API\x20key\x20validation\x20successful','RzhrS','rwsCL','AbortError','⏱️\x20API\x20key\x20validation\x20timeout','PyhJB','uxJtv','Network\x20request\x20failed','DNS','All\x20retry\x20attempts\x20exhausted','❌\x20API\x20key\x20validation\x20error:','dNQNP','PqipR','MdFpV','mNHaE','hSvUE','sPaBa','gHVJl','timestamp','ehGvm','EtmRC','cYCnB','zCvqM','xCwmM','wjkaZ','LMwUx','DJyGa','sGsIG','CSVTt','pNHmp','sAGlm','EthNL','stringify','YqGqv','No\x20response\x20received\x20from\x20server','Onairos\x20API\x20is\x20temporarily\x20unavailable\x20(502\x20Bad\x20Gateway).\x20Please\x20try\x20again\x20later.','status','dyURU','qNwdX','rnclx','result','OFJvQ','headers','jjyGz','text','KbMjv','statusText','szRTD','unknown','/dev/validate-apikey','/dev/validate-apikey\x20may\x20not\x20exist\x20or\x20be\x20configured\x20correctly.','Server\x20error\x20(500).\x20The\x20Onairos\x20backend\x20is\x20experiencing\x20issues.','phAZD','XmMzF','Service\x20unavailable\x20(',').\x20The\x20Onairos\x20backend\x20may\x20be\x20temporarily\x20down.','brUiS','DgNsT','XZCDn','aggRV','Server\x20returned\x20HTML\x20page\x20instead\x20of\x20JSON\x20API\x20response.\x20This\x20often\x20indicates\x20a\x20routing\x20issue\x20or\x20server\x20misconfiguration.','API\x20validation\x20endpoint\x20returned\x20','.\x20Expected\x20JSON\x20but\x20got\x20','Camjq','ULfKN','json','❌\x20Failed\x20to\x20parse\x20JSON\x20response:','message','Failed\x20to\x20parse\x20server\x20response\x20as\x20JSON:\x20','success','set','LKxQh','wCZQJ','application','name','pnAaM','sHIJB','QxSeZ','email','👤\x20Extracted\x20username\x20from\x20JWT:','KvOJo','HTTP\x20','voOyC','tQfCT','❌\x20API\x20key\x20validation\x20failed\x20(client\x20error):','OAYUD','rhOvV','API\x20key\x20validation\x20timeout\x20(','ms)','nuQrS','ePSGb','hpxBj','mNghp','Network\x20error\x20during\x20API\x20key\x20validation:\x20','vpBTv','Unexpected\x20character','TfAxH','Network\x20connectivity\x20issue.\x20Please\x20check\x20internet\x20connection\x20and\x20verify\x20the\x20Onairos\x20API\x20is\x20accessible.\x20','BmULT','iIVOw','DNS\x20resolution\x20failed\x20for\x20','.\x20Please\x20check\x20network\x20settings\x20and\x20domain\x20accessibility.\x20','🌐\x20Network\x20error\x20during\x20API\x20key\x20validation:','SyUTQ','oULiG','isNetworkError','ZvRzq','YlHfS','SusLX','PLZKU','znska','afHaH','jfPMK','YmQjF','🌐\x20Error\x20details:','min','pow','nELYF','ms\x20before\x20retry...','CGivQ','HxAGt','getApiConfig','kYcjM','❌\x20Failed\x20to\x20store\x20JWT\x20token:','setItem','esHBO','qpZek','❌\x20Failed\x20to\x20clear\x20JWT\x20token:','removeItem','rWHHn','oQPga','🗑️\x20JWT\x20token\x20cleared','KvvOx','IRQNJ','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/','hSdrR','gNnNO','ikJYN','charAt','dHfeM','CzpYV','fromCharCode','Dsnyz','ZDNdZ','rHXzi','SDK\x20not\x20initialized.\x20Call\x20initializeApiKey()\x20first.','❌\x20Developer\x20API\x20key\x20permissions\x20insufficient','Insufficient\x20API\x20key\x20permissions','❌\x20Invalid\x20JWT\x20token\x20format','QXaad','tgIAI','JvNpP','replace','padEnd','YyGrQ','nyGbj','BgpUd','MPgbs','aHsiJ','cQHAz','❌\x20Failed\x20to\x20decode\x20JWT\x20token:','QAdMZ','vLgLQ','KHomV','userName','username','userId','cZgSa','TxPwT','gsQLC','daldz','extractUsernameFromJWT','bzwfQ','IxDdI','⚠️\x20No\x20JWT\x20token\x20available\x20for\x20user\x20data\x20extraction','coZoT','👤\x20Extracted\x20user\x20data\x20from\x20JWT:','WiaWC','ciNSP','OgjmK','biUUn','qedSQ','IMOqj','dgfpf','📡\x20Developer\x20request\x20response:\x20','\x20for\x20','pZTSm','LymyK','mxtwS','iPCdP','iat','exp','sCMwL','FCMZk','AjExh','sqYgS','uGhOA','HWJNs','YnpSq','UyuPH','DEVELOPER','KnkMm','GiZoD','OnairosReactNative/3.0.72','pOQcq','GJRET','pWIas','aivUe','VZloo','zMGgq','User\x20not\x20authenticated.\x20Please\x20verify\x20email\x20first.','bBFhH','ASJSg','❌\x20API\x20key\x20authentication\x20failed.\x20Please\x20check\x20your\x20API\x20key.','Invalid\x20or\x20expired\x20API\x20key','❌\x20API\x20key\x20permissions\x20insufficient\x20for\x20this\x20operation.','Ecydf','PiANF','⏱️\x20Request\x20timeout\x20for:','jGvgq','GBvtH','abort','gAfQr','NUzig','fxhFz','🌐\x20Making\x20authenticated\x20request\x20to:\x20','OlwGA','📡\x20Response\x20status:\x20','BALrT','jFgtB','utdUr','WdsGZ','zVFng','MaRrS','rJSgu','iKNAI','rIGOC','UpRsL','tKDFY','FTHQd','uUyam','qmkci','🌐\x20Making\x20user\x20request\x20to:\x20','Request\x20timeout','thySL','ROaOu','❌\x20Developer\x20API\x20key\x20authentication\x20failed','CyUuz','xNnPK','❌\x20API\x20rate\x20limit\x20exceeded','Nbqup','mHxUh','JxpNV','pSsmn','sHCYS','🌐\x20Making\x20developer\x20request\x20to:\x20','signal','clxji','tPcCg','xzjIy','evhba','ABGjK','hiDDa','SHgYA','fdXzi','QjQhz','NAfHv','uaFpK','Ayeql','ZckQN','dSCJF','GOrWY','bGboS','BiORt','MEUKO','KITzh','kprwI','nmnbQ','Insufficient\x20permissions\x20for\x20this\x20operation','OXuYC','VljyO','jjgLv','CtGBq','Server\x20returned\x20invalid\x20JSON\x20response.\x20This\x20usually\x20indicates\x20the\x20API\x20endpoint\x20returned\x20HTML\x20instead\x20of\x20JSON\x20(often\x20a\x20404\x20or\x20server\x20error\x20page).\x20','lwKdl','urFBk','VdzNO','bIunJ','📡\x20User\x20request\x20response:\x20','zPYXs','❌\x20JWT\x20token\x20authentication\x20failed\x20-\x20token\x20may\x20be\x20expired','TzmYk','gFHvW','WQLLm','❌\x20JWT\x20token\x20permissions\x20insufficient','vngNZ','psUQv','djlaN','dRDEV','clear','KSuPy','iVGHJ','wBNiv','qrWJM','🔄\x20API\x20key\x20service\x20reset','CiZmY','resetApiKeyService'];_0x3fb1=function(){return _0x4a5be1;};return _0x3fb1();}exports['getUserAuthHeaders']=getUserAuthHeaders;const makeAuthenticatedRequest=async(_0x366a95,_0x4d091b={})=>{const _0x56664c={'fxhFz':_0x1293(0x12e),'uUyam':function(_0x1f4015,_0x230d4d){return _0x1f4015!==_0x230d4d;},'EmBuD':_0x1293(0x11f),'qmkci':function(_0x90862e,_0x4019af){return _0x90862e(_0x4019af);},'NedUz':_0x1293(0x27),'GBvtH':'production','jGvgq':function(_0x300fbc){return _0x300fbc();},'utdUr':function(_0x402b43,_0x54597d){return _0x402b43===_0x54597d;},'gAfQr':'VLonM','OlwGA':function(_0x1d1a23,_0x40fb73,_0x5c0f9d){return _0x1d1a23(_0x40fb73,_0x5c0f9d);},'BALrT':function(_0x7c3ada,_0x17127e){return _0x7c3ada===_0x17127e;},'jFgtB':_0x1293(0x163),'zoZfg':_0x1293(0x164),'Sbzpb':function(_0x49ecc5,_0x458b63){return _0x49ecc5!==_0x458b63;},'WdsGZ':'igvQS','zVFng':_0x1293(0x165),'MaRrS':_0x1293(0x121),'rJSgu':'❌\x20API\x20rate\x20limit\x20exceeded.\x20Please\x20try\x20again\x20later.','iKNAI':'Rate\x20limit\x20exceeded','rIGOC':function(_0xb4791f,_0x7d8b7c){return _0xb4791f===_0x7d8b7c;},'stbAa':_0x1293(0x166),'QrWKH':function(_0x4b223c,_0xd43bf9){return _0x4b223c(_0xd43bf9);},'UpRsL':_0x1293(0x167),'tKDFY':_0x1293(0x168),'FTHQd':'Request\x20timeout'};if(!_0x56664c[_0x1293(0x169)](isApiKeyInitialized))throw new Error(_0x56664c['EmBuD']);const _0x32f7e0=_0x56664c['jGvgq'](getApiConfig),_0x5f2230=API_ENDPOINTS[_0x32f7e0[_0x1293(0x49)]||_0x56664c[_0x1293(0x16a)]],_0x1a53c1=''+_0x5f2230+(_0x366a95[_0x1293(0x47)]('/')?'':'/')+_0x366a95,_0x1b4433={..._0x56664c[_0x1293(0x169)](getAuthHeaders),..._0x4d091b[_0x1293(0xb8)]||{}},_0x209202=new AbortController(),_0xe04df3=setTimeout(()=>_0x209202[_0x1293(0x16b)](),_0x32f7e0[_0x1293(0x4b)]||0x7530);try{if(_0x56664c['utdUr'](_0x56664c[_0x1293(0x16c)],_0x1293(0x16d)))return _0x73f3d2[_0x1293(0x54)](_0x56664c[_0x1293(0x16e)],_0x473a4a),null;else{_0x32f7e0[_0x1293(0x4a)]&&console[_0x1293(0x3e)](_0x1293(0x16f)+_0x366a95);const _0x400ec9=await _0x56664c[_0x1293(0x170)](fetch,_0x1a53c1,{..._0x4d091b,'headers':_0x1b4433,'signal':_0x209202['signal']});_0x56664c['qmkci'](clearTimeout,_0xe04df3);_0x32f7e0['enableLogging']&&console[_0x1293(0x3e)](_0x1293(0x171)+_0x400ec9[_0x1293(0xb2)]+_0x1293(0x147)+_0x366a95);if(_0x56664c[_0x1293(0x172)](_0x400ec9[_0x1293(0xb2)],0x191)){console['error'](_0x56664c[_0x1293(0x173)]);throw new Error(_0x56664c['zoZfg']);}if(_0x56664c[_0x1293(0x174)](_0x400ec9[_0x1293(0xb2)],0x193)){if(_0x56664c['Sbzpb'](_0x56664c[_0x1293(0x175)],_0x56664c[_0x1293(0x175)]))throw new _0x309b7d(_0x1293(0x6c)+_0x3cbb5e[_0x1293(0x54)]);else{console[_0x1293(0x54)](_0x56664c[_0x1293(0x176)]);throw new Error(_0x56664c[_0x1293(0x177)]);}}if(_0x56664c[_0x1293(0x172)](_0x400ec9[_0x1293(0xb2)],0x1ad)){console[_0x1293(0x54)](_0x56664c[_0x1293(0x178)]);throw new Error(_0x56664c[_0x1293(0x179)]);}return _0x400ec9;}}catch(_0x4d93df){if(_0x56664c[_0x1293(0x17a)](_0x1293(0x166),_0x56664c['stbAa'])){_0x56664c['QrWKH'](clearTimeout,_0xe04df3);if(_0x4d93df[_0x1293(0xd8)]===_0x1293(0x91)){if(_0x56664c[_0x1293(0x17a)](_0x1293(0x167),_0x56664c[_0x1293(0x17b)])){console[_0x1293(0x54)](_0x56664c[_0x1293(0x17c)],_0x366a95);throw new Error(_0x56664c[_0x1293(0x17d)]);}else{var _0x4fd96a;if(!((_0x4fd96a=_0x23ab83)!==null&&_0x56664c[_0x1293(0x17e)](_0x4fd96a,void 0x0)&&_0x4fd96a['apiKey']))throw new _0x4d1eeb(_0x56664c['EmBuD']);const _0x2f6db1=_0x56664c[_0x1293(0x17f)](_0x506fef,_0x55621d[_0x1293(0x46)]);return{'Content-Type':'application/json','Authorization':_0x1293(0x64)+_0x103dfc[_0x1293(0x46)],'User-Agent':'OnairosReactNative/3.0.72','X-SDK-Version':_0x56664c['NedUz'],'X-SDK-Environment':_0x49f62f[_0x1293(0x49)]||_0x56664c[_0x1293(0x16a)],'X-API-Key-Type':_0x2f6db1,'X-Timestamp':new _0x44903a()[_0x1293(0x68)]()};}}throw _0x4d93df;}else _0x4a10b6[_0x1293(0x3e)](_0x1293(0x180)+_0x5dfaba);}};exports[_0x1293(0x6)]=makeAuthenticatedRequest;const makeDeveloperRequest=async(_0x198daf,_0xd55788={})=>{const _0x6351d1={'ooWGZ':function(_0x452698,_0x41c13b){return _0x452698(_0x41c13b);},'pSsmn':function(_0x2fb846,_0x4c81f2){return _0x2fb846===_0x4c81f2;},'tPcCg':_0x1293(0x168),'xzjIy':_0x1293(0x181),'dSCJF':_0x1293(0x11f),'BiORt':_0x1293(0x7c),'mHxUh':function(_0x3b0249){return _0x3b0249();},'JxpNV':function(_0x2d8e64,_0x358be1,_0x357bbb){return _0x2d8e64(_0x358be1,_0x357bbb);},'MzwGq':_0x1293(0x182),'sHCYS':'UftaL','clxji':function(_0x4c0fbd,_0x3e167b){return _0x4c0fbd===_0x3e167b;},'OIfBR':_0x1293(0x183),'evhba':function(_0x43b719,_0x5720fb){return _0x43b719===_0x5720fb;},'ABGjK':function(_0xf98230,_0x259a78){return _0xf98230===_0x259a78;},'hiDDa':'ThoQc','fdXzi':_0x1293(0x184),'kVbwC':_0x1293(0x120),'QjQhz':_0x1293(0x121),'NAfHv':function(_0xd786f8,_0x52439c){return _0xd786f8!==_0x52439c;},'uaFpK':_0x1293(0x185),'tuOwf':_0x1293(0x186),'Ayeql':_0x1293(0x187),'ZckQN':'Rate\x20limit\x20exceeded','GiDne':function(_0x1e1118,_0x24d2a7){return _0x1e1118(_0x24d2a7);},'aJqpz':function(_0x157ae9,_0x1b0ba7){return _0x157ae9===_0x1b0ba7;},'GOrWY':_0x1293(0x91),'bGboS':_0x1293(0x188)};if(!isApiKeyInitialized())throw new Error('SDK\x20not\x20initialized.\x20Call\x20initializeApiKey()\x20first.');const _0x3c49cb=_0x6351d1[_0x1293(0x189)](getApiConfig),_0x99bacb=API_ENDPOINTS[_0x3c49cb[_0x1293(0x49)]||_0x1293(0x28)],_0x5bb984=''+_0x99bacb+(_0x198daf[_0x1293(0x47)]('/')?'':'/')+_0x198daf,_0x152722={...getDeveloperAuthHeaders(),..._0xd55788[_0x1293(0xb8)]||{}},_0x1faf0a=new AbortController(),_0x293fbe=_0x6351d1[_0x1293(0x18a)](setTimeout,()=>_0x1faf0a[_0x1293(0x16b)](),_0x3c49cb[_0x1293(0x4b)]||0x7530);try{if(_0x3c49cb[_0x1293(0x4a)]){if(_0x6351d1[_0x1293(0x18b)](_0x6351d1['MzwGq'],_0x6351d1[_0x1293(0x18c)]))throw new _0x50bd04(_0x1293(0x11f));else console['log'](_0x1293(0x18d)+_0x198daf);}const _0xedf468=await fetch(_0x5bb984,{..._0xd55788,'headers':_0x152722,'signal':_0x1faf0a[_0x1293(0x18e)]});clearTimeout(_0x293fbe);if(_0x3c49cb[_0x1293(0x4a)]){if(_0x6351d1[_0x1293(0x18f)]('qfsxV',_0x6351d1['OIfBR'])){_0x6351d1['ooWGZ'](_0x58e3d0,_0x36236a);if(_0x6351d1[_0x1293(0x18b)](_0x369a89[_0x1293(0xd8)],_0x1293(0x91))){_0x167d11[_0x1293(0x54)](_0x6351d1[_0x1293(0x190)],_0x460461);throw new _0x1dab4e(_0x6351d1[_0x1293(0x191)]);}throw _0x290c5a;}else console[_0x1293(0x3e)]('📡\x20Developer\x20request\x20response:\x20'+_0xedf468[_0x1293(0xb2)]+_0x1293(0x147)+_0x198daf);}if(_0x6351d1[_0x1293(0x192)](_0xedf468[_0x1293(0xb2)],0x191)){if(_0x6351d1[_0x1293(0x193)](_0x6351d1[_0x1293(0x194)],_0x1293(0x195)))return!!_0x46773b;else{console[_0x1293(0x54)](_0x6351d1[_0x1293(0x196)]);throw new Error(_0x1293(0x164));}}if(_0xedf468[_0x1293(0xb2)]===0x193){console['error'](_0x6351d1['kVbwC']);throw new Error(_0x6351d1[_0x1293(0x197)]);}if(_0x6351d1['evhba'](_0xedf468[_0x1293(0xb2)],0x1ad)){if(_0x6351d1[_0x1293(0x198)](_0x6351d1[_0x1293(0x199)],_0x6351d1['tuOwf'])){console['error'](_0x6351d1[_0x1293(0x19a)]);throw new Error(_0x6351d1[_0x1293(0x19b)]);}else throw new _0x514ffa(_0x6351d1[_0x1293(0x19c)]);}return _0xedf468;}catch(_0x1d97a7){_0x6351d1['GiDne'](clearTimeout,_0x293fbe);if(_0x6351d1['aJqpz'](_0x1d97a7[_0x1293(0xd8)],_0x6351d1[_0x1293(0x19d)])){if(_0x6351d1[_0x1293(0x19e)]===_0x6351d1[_0x1293(0x19e)]){console[_0x1293(0x54)](_0x6351d1['tPcCg'],_0x198daf);throw new Error('Request\x20timeout');}else return _0x14601b[_0x1293(0x22)](_0x6351d1[_0x1293(0x19f)]),null;}throw _0x1d97a7;}};exports[_0x1293(0x5)]=makeDeveloperRequest;const makeUserRequest=async(_0x598520,_0x2ff27c={})=>{const _0x25ee32={'Mjkgc':_0x1293(0x10d),'VljyO':function(_0x2dd131){return _0x2dd131();},'jjgLv':function(_0x1efebd,_0xae2fd6){return _0x1efebd!==_0xae2fd6;},'CtGBq':_0x1293(0x1a0),'zVmRg':_0x1293(0x160),'cPATm':_0x1293(0x28),'lwKdl':function(_0x135303){return _0x135303();},'oBCPv':function(_0x26cd54,_0x3a19b2,_0x2706c6){return _0x26cd54(_0x3a19b2,_0x2706c6);},'urFBk':function(_0x1e96d8,_0x319ece){return _0x1e96d8!==_0x319ece;},'VdzNO':_0x1293(0x1a1),'bIunJ':_0x1293(0x1a2),'WCYIZ':function(_0x140fd6,_0x2e36b7){return _0x140fd6(_0x2e36b7);},'zPYXs':function(_0x1cc088,_0x11e9f5){return _0x1cc088===_0x11e9f5;},'lxBfK':function(_0x3cbf53,_0x59330a){return _0x3cbf53===_0x59330a;},'pxKZG':_0x1293(0x1a3),'TzmYk':'Authentication\x20expired.\x20Please\x20verify\x20email\x20again.','gFHvW':function(_0x38a7e3,_0x3fcb37){return _0x38a7e3===_0x3fcb37;},'YODzm':function(_0x12e846,_0x4380bf){return _0x12e846===_0x4380bf;},'WQLLm':'OEFPQ','vngNZ':_0x1293(0x1a4),'aaxOO':function(_0x348b7d,_0x419ea4){return _0x348b7d(_0x419ea4);},'psUQv':function(_0x1d1525,_0x45103e){return _0x1d1525!==_0x45103e;},'djlaN':_0x1293(0x1a5),'MTmwo':_0x1293(0x168),'sOsdB':_0x1293(0x181)};!_0x25ee32[_0x1293(0x1a6)](isUserAuthenticated)&&await loadJWT();if(!isUserAuthenticated()){if(_0x25ee32[_0x1293(0x1a7)](_0x25ee32[_0x1293(0x1a8)],_0x25ee32[_0x1293(0x1a8)]))_0x304e3a=_0x1293(0x1a9)+_0x2add64[_0x1293(0xd1)];else throw new Error(_0x25ee32['zVmRg']);}const _0x2eacac=_0x25ee32[_0x1293(0x1a6)](getApiConfig)||{'environment':'production','timeout':0x7530,'enableLogging':![]},_0x4c5023=API_ENDPOINTS[_0x2eacac[_0x1293(0x49)]||_0x25ee32['cPATm']],_0x372f3e=''+_0x4c5023+(_0x598520[_0x1293(0x47)]('/')?'':'/')+_0x598520,_0x105fe2={..._0x25ee32[_0x1293(0x1aa)](getUserAuthHeaders),..._0x2ff27c[_0x1293(0xb8)]||{}},_0x4189dd=new AbortController(),_0x30e4a9=_0x25ee32['oBCPv'](setTimeout,()=>_0x4189dd[_0x1293(0x16b)](),_0x2eacac['timeout']||0x7530);try{_0x2eacac[_0x1293(0x4a)]&&(_0x25ee32[_0x1293(0x1ab)](_0x25ee32[_0x1293(0x1ac)],_0x25ee32[_0x1293(0x1ad)])?console['log']('🌐\x20Making\x20user\x20request\x20to:\x20'+_0x598520):_0x21a399[_0x1293(0x54)](_0x25ee32['Mjkgc'],_0x6fb42d));const _0x4cda0f=await fetch(_0x372f3e,{..._0x2ff27c,'headers':_0x105fe2,'signal':_0x4189dd[_0x1293(0x18e)]});_0x25ee32['WCYIZ'](clearTimeout,_0x30e4a9);_0x2eacac[_0x1293(0x4a)]&&console[_0x1293(0x3e)](_0x1293(0x1ae)+_0x4cda0f[_0x1293(0xb2)]+_0x1293(0x147)+_0x598520);if(_0x25ee32[_0x1293(0x1af)](_0x4cda0f[_0x1293(0xb2)],0x191)){if(_0x25ee32['lxBfK'](_0x25ee32['pxKZG'],_0x25ee32['pxKZG'])){console['error'](_0x1293(0x1b0)),await _0x25ee32[_0x1293(0x1aa)](clearJWT);throw new Error(_0x25ee32[_0x1293(0x1b1)]);}else _0x58d083[_0x1293(0x3e)]('⏳\x20Waiting\x20'+_0x176cde+_0x1293(0x104));}if(_0x25ee32[_0x1293(0x1b2)](_0x4cda0f[_0x1293(0xb2)],0x193)){if(_0x25ee32['YODzm'](_0x25ee32[_0x1293(0x1b3)],_0x25ee32[_0x1293(0x1b3)])){console[_0x1293(0x54)](_0x1293(0x1b4));throw new Error(_0x25ee32[_0x1293(0x1b5)]);}else throw new _0x49f7c4(_0x1293(0xc1));}return _0x4cda0f;}catch(_0x2a008d){_0x25ee32['aaxOO'](clearTimeout,_0x30e4a9);if(_0x2a008d['name']===_0x1293(0x91)){if(_0x25ee32[_0x1293(0x1b6)](_0x1293(0x1a5),_0x25ee32[_0x1293(0x1b7)]))return _0x2912f9[_0x1293(0x156)];else{console[_0x1293(0x54)](_0x25ee32['MTmwo'],_0x598520);throw new Error(_0x25ee32['sOsdB']);}}throw _0x2a008d;}};exports[_0x1293(0x4)]=makeUserRequest;const clearValidationCache=()=>{const _0x1e42ac={'qrWJM':_0x1293(0x13e),'KSuPy':function(_0xe99828,_0x21cbe3){return _0xe99828!==_0x21cbe3;},'tDuRM':function(_0x4d8fe1,_0x25e3de){return _0x4d8fe1===_0x25e3de;},'iVGHJ':_0x1293(0x1b8),'wBNiv':'🗑️\x20API\x20key\x20validation\x20cache\x20cleared'};var _0xbef5a;validationCache[_0x1293(0x1b9)](),_0x1e42ac[_0x1293(0x1ba)](_0xbef5a=globalConfig,null)&&_0xbef5a!==void 0x0&&_0xbef5a[_0x1293(0x4a)]&&(_0x1e42ac['tDuRM'](_0x1e42ac[_0x1293(0x1bb)],_0x1e42ac[_0x1293(0x1bb)])?console['log'](_0x1e42ac[_0x1293(0x1bc)]):_0x4ef60c[_0x1293(0x3e)](_0x1e42ac[_0x1293(0x1bd)],_0x2ae05a));};exports[_0x1293(0x13)]=clearValidationCache;const resetApiKeyService=()=>{const _0x2a2fb1={'IbkAI':function(_0x5b79bc){return _0x5b79bc();},'CiZmY':_0x1293(0x1be)};globalConfig=null,isInitialized=![],_0x2a2fb1['IbkAI'](clearValidationCache),console['log'](_0x2a2fb1[_0x1293(0x1bf)]);};exports[_0x1293(0x1c0)]=resetApiKeyService;
|