@onairos/react-native 3.7.2 → 3.7.4
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/lib/commonjs/api/index.js +219 -9
- package/lib/commonjs/components/BodyText.js +27 -9
- package/lib/commonjs/components/BrandMark.js +111 -10
- package/lib/commonjs/components/CodeInput.js +120 -9
- package/lib/commonjs/components/EmailInput.js +30 -8
- package/lib/commonjs/components/GoogleButton.js +56 -9
- package/lib/commonjs/components/HeadingGroup.js +43 -9
- package/lib/commonjs/components/LLMDataInputModal.js +664 -14
- package/lib/commonjs/components/ModalHeader.js +99 -9
- package/lib/commonjs/components/ModalSheet.js +47 -9
- package/lib/commonjs/components/Onairos.js +380 -14
- package/lib/commonjs/components/OnairosButton.js +313 -13
- package/lib/commonjs/components/OnairosSignInButton.js +130 -12
- package/lib/commonjs/components/Overlay.js +465 -13
- package/lib/commonjs/components/PersonaImage.js +137 -10
- package/lib/commonjs/components/PersonaLoadingScreen.js +318 -12
- package/lib/commonjs/components/PersonalizationConsentScreen.js +467 -13
- package/lib/commonjs/components/PinCreationScreen.js +403 -12
- package/lib/commonjs/components/PinInput.js +464 -9
- package/lib/commonjs/components/PlatformConnectorsStep.js +1311 -23
- package/lib/commonjs/components/PlatformList.js +137 -10
- package/lib/commonjs/components/PlatformToggle.js +180 -9
- package/lib/commonjs/components/PrimaryButton.js +180 -10
- package/lib/commonjs/components/SignInMatchAnimation.js +197 -9
- package/lib/commonjs/components/SignInStep.js +345 -12
- package/lib/commonjs/components/UniversalOnboarding.js +2780 -30
- package/lib/commonjs/components/VerificationStep.js +176 -11
- package/lib/commonjs/components/WelcomeScreen.js +461 -22
- package/lib/commonjs/components/icons/Basicproficon.js +37 -8
- package/lib/commonjs/components/icons/Basicprofile.js +21 -8
- package/lib/commonjs/components/icons/Checkbox.js +21 -8
- package/lib/commonjs/components/icons/Checkmark.js +27 -8
- package/lib/commonjs/components/icons/Contentanalysis.js +21 -8
- package/lib/commonjs/components/icons/Contenticon.js +39 -8
- package/lib/commonjs/components/icons/EnochE.js +41 -8
- package/lib/commonjs/components/icons/Personalityicon.js +30 -8
- package/lib/commonjs/components/icons/Personalityprofile.js +21 -8
- package/lib/commonjs/components/icons/Personalitytraits.js +21 -8
- package/lib/commonjs/components/icons/Userpreferences.js +21 -8
- package/lib/commonjs/components/icons/index.js +84 -17
- package/lib/commonjs/components/onboarding/OAuthWebView.js +1754 -18
- package/lib/commonjs/components/onboarding/OnboardingHeader.js +74 -10
- package/lib/commonjs/components/onboarding/PinInput.js +283 -10
- package/lib/commonjs/components/onboarding/PlatformConnector.js +249 -11
- package/lib/commonjs/config/PLATFORM_APIS.md +849 -0
- package/lib/commonjs/config/api.js +56 -7
- package/lib/commonjs/constants/index.js +120 -7
- package/lib/commonjs/context/AuthContext.js +345 -10
- package/lib/commonjs/hooks/useConnectedAccounts.js +111 -9
- package/lib/commonjs/hooks/useConnections.js +102 -8
- package/lib/commonjs/hooks/useCredentials.js +178 -10
- package/lib/commonjs/hooks/useUserConnections.js +148 -10
- package/lib/commonjs/index.js +439 -34
- package/lib/commonjs/services/apiClient.js +298 -8
- package/lib/commonjs/services/biometricPinService.js +180 -8
- package/lib/commonjs/services/chatGPTConversationExtractor.js +155 -8
- package/lib/commonjs/services/chatGPTConversationService.js +275 -9
- package/lib/commonjs/services/claudeConversationExtractor.js +103 -8
- package/lib/commonjs/services/claudeConversationService.js +158 -9
- package/lib/commonjs/services/connectedAccountsService.js +310 -10
- package/lib/commonjs/services/googleAuthService.js +252 -11
- package/lib/commonjs/services/hingeDataExtractor.js +105 -8
- package/lib/commonjs/services/hingeDataService.js +150 -9
- package/lib/commonjs/services/imageCompressionService.js +260 -7
- package/lib/commonjs/services/instagramDataExtractor.js +126 -8
- package/lib/commonjs/services/instagramDataService.js +163 -9
- package/lib/commonjs/services/jwtStorageService.js +276 -7
- package/lib/commonjs/services/linkedinDOMExtractor.js +245 -7
- package/lib/commonjs/services/linkedinProfileService.js +222 -9
- package/lib/commonjs/services/linkedinScrapingService.js +230 -8
- package/lib/commonjs/services/llmDataStorage.js +294 -8
- package/lib/commonjs/services/mobileTrainingService.js +186 -8
- package/lib/commonjs/services/netflixDataExtractor.js +120 -8
- package/lib/commonjs/services/netflixDataService.js +198 -9
- package/lib/commonjs/services/pinEncryptionService.js +84 -8
- package/lib/commonjs/services/pinStorageUtils.js +105 -7
- package/lib/commonjs/services/platformAuthService.js +1484 -12
- package/lib/commonjs/services/sephoraDataExtractor.js +140 -8
- package/lib/commonjs/services/sephoraDataService.js +200 -9
- package/lib/commonjs/services/spotifyDataExtractor.js +148 -8
- package/lib/commonjs/services/spotifyDataService.js +241 -9
- package/lib/commonjs/services/storageService.js +404 -8
- package/lib/commonjs/services/telegramDataExtractor.js +115 -8
- package/lib/commonjs/services/telegramDataService.js +499 -9
- package/lib/commonjs/services/trainingApiHelpers.js +73 -7
- package/lib/commonjs/services/userConnectionsService.js +340 -10
- package/lib/commonjs/services/youtubeMigrationService.js +416 -10
- package/lib/commonjs/theme/index.js +250 -7
- package/lib/commonjs/types/ambient.d.js +2 -1
- package/lib/commonjs/types/declarations.d.js +2 -1
- package/lib/commonjs/types/index.js +6 -1
- package/lib/commonjs/types/node-fix.d.js +2 -1
- package/lib/commonjs/types/node-override.d.js +2 -1
- package/lib/commonjs/types/opacity.d.js +2 -1
- package/lib/commonjs/types.js +14 -1
- package/lib/commonjs/utils/Portal.js +98 -8
- package/lib/commonjs/utils/api.js +130 -9
- package/lib/commonjs/utils/assetRegistry.js +210 -35
- package/lib/commonjs/utils/auth.js +112 -9
- package/lib/commonjs/utils/connectorTests.js +613 -29
- package/lib/commonjs/utils/crypto.js +62 -8
- package/lib/commonjs/utils/debugHelper.js +64 -1
- package/lib/commonjs/utils/encryption.js +76 -7
- package/lib/commonjs/utils/eventUtils.js +288 -1
- package/lib/commonjs/utils/haptics.js +66 -9
- package/lib/commonjs/utils/imagePreloader.js +6 -1
- package/lib/commonjs/utils/networkDiagnostics.js +226 -8
- package/lib/commonjs/utils/onairosApi.js +350 -9
- package/lib/commonjs/utils/programmaticFlow.js +117 -9
- package/lib/commonjs/utils/retryHelper.js +220 -1
- package/lib/commonjs/utils/secureStorage.js +349 -10
- package/lib/commonjs/utils/webviewScripts/chatgpt.js +551 -1
- package/lib/commonjs/utils/webviewScripts/claude.js +376 -1
- package/lib/commonjs/utils/webviewScripts/hinge.js +411 -1
- package/lib/commonjs/utils/webviewScripts/index.js +698 -15
- package/lib/commonjs/utils/webviewScripts/instagram.js +454 -1
- package/lib/commonjs/utils/webviewScripts/linkedin.js +880 -1
- package/lib/commonjs/utils/webviewScripts/netflix.js +382 -1
- package/lib/commonjs/utils/webviewScripts/sephora.js +516 -1
- package/lib/commonjs/utils/webviewScripts/spotify.js +419 -1
- package/lib/commonjs/utils/webviewScripts/telegram.js +678 -1
- package/lib/module/api/index.js +211 -1
- package/lib/module/components/BodyText.js +20 -1
- package/lib/module/components/BrandMark.js +104 -1
- package/lib/module/components/CodeInput.js +113 -1
- package/lib/module/components/EmailInput.js +23 -1
- package/lib/module/components/GoogleButton.js +49 -1
- package/lib/module/components/HeadingGroup.js +36 -1
- package/lib/module/components/LLMDataInputModal.js +656 -7
- package/lib/module/components/ModalHeader.js +92 -1
- package/lib/module/components/ModalSheet.js +39 -1
- package/lib/module/components/Onairos.js +373 -1
- package/lib/module/components/OnairosButton.js +305 -1
- package/lib/module/components/OnairosSignInButton.js +121 -1
- package/lib/module/components/Overlay.js +456 -1
- package/lib/module/components/PersonaImage.js +129 -1
- package/lib/module/components/PersonaLoadingScreen.js +310 -1
- package/lib/module/components/PersonalizationConsentScreen.js +460 -1
- package/lib/module/components/PinCreationScreen.js +396 -1
- package/lib/module/components/PinInput.js +456 -1
- package/lib/module/components/PlatformConnectorsStep.js +1302 -6
- package/lib/module/components/PlatformList.js +129 -1
- package/lib/module/components/PlatformToggle.js +173 -1
- package/lib/module/components/PrimaryButton.js +172 -1
- package/lib/module/components/SignInMatchAnimation.js +189 -1
- package/lib/module/components/SignInStep.js +338 -1
- package/lib/module/components/UniversalOnboarding.js +2770 -1
- package/lib/module/components/VerificationStep.js +168 -1
- package/lib/module/components/WelcomeScreen.js +453 -1
- package/lib/module/components/icons/Basicproficon.js +30 -1
- package/lib/module/components/icons/Basicprofile.js +14 -1
- package/lib/module/components/icons/Checkbox.js +14 -1
- package/lib/module/components/icons/Checkmark.js +20 -1
- package/lib/module/components/icons/Contentanalysis.js +14 -1
- package/lib/module/components/icons/Contenticon.js +32 -1
- package/lib/module/components/icons/EnochE.js +34 -1
- package/lib/module/components/icons/Personalityicon.js +23 -1
- package/lib/module/components/icons/Personalityprofile.js +14 -1
- package/lib/module/components/icons/Personalitytraits.js +14 -1
- package/lib/module/components/icons/Userpreferences.js +14 -1
- package/lib/module/components/icons/index.js +13 -1
- package/lib/module/components/onboarding/OAuthWebView.js +1746 -1
- package/lib/module/components/onboarding/OnboardingHeader.js +66 -1
- package/lib/module/components/onboarding/PinInput.js +274 -1
- package/lib/module/components/onboarding/PlatformConnector.js +240 -1
- package/lib/module/config/PLATFORM_APIS.md +849 -0
- package/lib/module/config/api.js +47 -1
- package/lib/module/constants/index.js +114 -1
- package/lib/module/context/AuthContext.js +335 -1
- package/lib/module/hooks/useConnectedAccounts.js +106 -1
- package/lib/module/hooks/useConnections.js +95 -1
- package/lib/module/hooks/useCredentials.js +171 -6
- package/lib/module/hooks/useUserConnections.js +140 -1
- package/lib/module/index.js +172 -1
- package/lib/module/services/apiClient.js +295 -1
- package/lib/module/services/biometricPinService.js +169 -1
- package/lib/module/services/chatGPTConversationExtractor.js +149 -1
- package/lib/module/services/chatGPTConversationService.js +268 -1
- package/lib/module/services/claudeConversationExtractor.js +97 -1
- package/lib/module/services/claudeConversationService.js +151 -1
- package/lib/module/services/connectedAccountsService.js +293 -1
- package/lib/module/services/googleAuthService.js +241 -1
- package/lib/module/services/hingeDataExtractor.js +99 -1
- package/lib/module/services/hingeDataService.js +143 -1
- package/lib/module/services/imageCompressionService.js +250 -1
- package/lib/module/services/instagramDataExtractor.js +120 -1
- package/lib/module/services/instagramDataService.js +156 -1
- package/lib/module/services/jwtStorageService.js +257 -1
- package/lib/module/services/linkedinDOMExtractor.js +234 -1
- package/lib/module/services/linkedinProfileService.js +210 -1
- package/lib/module/services/linkedinScrapingService.js +219 -1
- package/lib/module/services/llmDataStorage.js +277 -1
- package/lib/module/services/mobileTrainingService.js +173 -1
- package/lib/module/services/netflixDataExtractor.js +114 -1
- package/lib/module/services/netflixDataService.js +191 -1
- package/lib/module/services/pinEncryptionService.js +74 -6
- package/lib/module/services/pinStorageUtils.js +93 -1
- package/lib/module/services/platformAuthService.js +1461 -1
- package/lib/module/services/sephoraDataExtractor.js +134 -1
- package/lib/module/services/sephoraDataService.js +193 -1
- package/lib/module/services/spotifyDataExtractor.js +142 -1
- package/lib/module/services/spotifyDataService.js +234 -1
- package/lib/module/services/storageService.js +383 -1
- package/lib/module/services/telegramDataExtractor.js +109 -1
- package/lib/module/services/telegramDataService.js +493 -1
- package/lib/module/services/trainingApiHelpers.js +67 -1
- package/lib/module/services/userConnectionsService.js +329 -1
- package/lib/module/services/youtubeMigrationService.js +405 -1
- package/lib/module/theme/index.js +245 -1
- package/lib/module/types.js +10 -1
- package/lib/module/utils/Portal.js +90 -1
- package/lib/module/utils/api.js +118 -1
- package/lib/module/utils/assetRegistry.js +200 -34
- package/lib/module/utils/auth.js +100 -1
- package/lib/module/utils/connectorTests.js +600 -27
- package/lib/module/utils/crypto.js +54 -1
- package/lib/module/utils/debugHelper.js +54 -1
- package/lib/module/utils/encryption.js +67 -1
- package/lib/module/utils/eventUtils.js +270 -1
- package/lib/module/utils/haptics.js +59 -8
- package/lib/module/utils/imagePreloader.js +3 -1
- package/lib/module/utils/networkDiagnostics.js +217 -1
- package/lib/module/utils/onairosApi.js +333 -1
- package/lib/module/utils/programmaticFlow.js +111 -1
- package/lib/module/utils/retryHelper.js +211 -1
- package/lib/module/utils/secureStorage.js +330 -6
- package/lib/module/utils/webviewScripts/chatgpt.js +545 -1
- package/lib/module/utils/webviewScripts/claude.js +370 -1
- package/lib/module/utils/webviewScripts/hinge.js +405 -1
- package/lib/module/utils/webviewScripts/index.js +434 -1
- package/lib/module/utils/webviewScripts/instagram.js +448 -1
- package/lib/module/utils/webviewScripts/linkedin.js +874 -1
- package/lib/module/utils/webviewScripts/netflix.js +376 -1
- package/lib/module/utils/webviewScripts/sephora.js +510 -1
- package/lib/module/utils/webviewScripts/spotify.js +413 -1
- package/lib/module/utils/webviewScripts/telegram.js +672 -1
- package/package.json +2 -2
|
@@ -1,10 +1,349 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Object[_0x501d(0x0)](exports,_0x501d(0x1),{'value':!![]}),exports[_0x501d(0x2)]=exports[_0x501d(0x3)]=exports[_0x501d(0x4)]=exports[_0x501d(0x5)]=exports[_0x501d(0x6)]=exports[_0x501d(0x7)]=exports[_0x501d(0x8)]=exports[_0x501d(0x9)]=exports['getCredentials']=exports[_0x501d(0xa)]=exports[_0x501d(0xb)]=exports[_0x501d(0xc)]=void 0x0;var _reactNative=__ONAIROS_REQ_FUNC__(0x0),_constants=__ONAIROS_REQ_FUNC__(0x1),_asyncStorage=_interopRequireDefault(__ONAIROS_REQ_FUNC__(0x2));function _0x1993(){const _0x18e864=['defineProperty','__esModule','verifyCredentials','updateCredentials','storeCredentials','isJWTExpired','hasJWT','hasCredentials','getJWTPayload','getJWT','generateDeviceUsername','deleteCredentials','clearJWT','warn','mock','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/','zCjCe','function','lhdKl','GMPqH','Pbdgz','length','charAt','indexOf','bllIi','wbPzM','EbZqE','fromCharCode','auClG','jxLnJ','qrchr','qrcRf','getGenericPassword','EmvEp','iBqbx','EeOTR','zSQJK','LCfOy','Keychain\x20access\x20failed,\x20using\x20mock\x20storage','default','SnBCg','PjRVV','uRzjl','lREJa','ZCIPw','service','sJJyf','weMsX','ynGoc','setGenericPassword','mwGpW','mtZgI','wSWgw','cIHvr','ajKBw','UPuwq','accessControl','ACCESS_CONTROL','ACCESSIBLE','WHEN_UNLOCKED','❌\x20Failed\x20to\x20check\x20JWT\x20token:','IMfis','pjVnj','ZjLBS','Wncev','somoh','resetGenericPassword','ZbSzy','eFSkD','qqNtS','error','jiNfQ','mMBbY','Username\x20is\x20required\x20for\x20storing\x20credentials','FmYSM','QxaqL','EPhwi','Error\x20verifying\x20credentials:','gDuwK','xJPib','helNP','createdAt','now','username','hvvnu','nGwFU','hZOLp','kbzhN','Platform','DdiHM','QiAvL','Ebmko','BOwEY','IzkOF','BIOMETRY_ANY_OR_DEVICE_PASSCODE','accessible','stringify','xcuLl','Error\x20getting\x20credentials:','PaLKq','OjxbC','fbCxZ','kBPDm','vznNf','credentials','DPukk','odbuA','parse','password','FAcWc','rPvpU','hslAA','getCredentials','❌\x20Failed\x20to\x20clear\x20JWT\x20token:','Ycvxa','NphXx','qDOfu','CzJDF','STORAGE_KEYS','HXYAb','uHpvY','JhlgU','zdPyC','HACEl','Error\x20deleting\x20credentials:','LCUsk','uGtFl','random','toString','substring','hOZIH','JGCcj','dev_','eABJz','FFxdK','UWHoO','GFSFV','YjUGr','getItem','YHiEV','hMPOK','lOxUe','OihIu','wXpLP','nuLoP','🗑️\x20JWT\x20token\x20cleared','removeItem','log','fAwmO','ftFWN','Error\x20checking\x20credentials:','uveQG','NoZdN','QEwun','ItOfh','iTYRb','Ifmyd','QSxRF','upRZH','CfsRg','VTpKp','rPSLt','PsNLM','tDykT','QrWET','JqdTQ','LQalq','BWirS','kQsGz','❌\x20Failed\x20to\x20decode\x20JWT\x20payload:','KFVGc','GnGYn','❌\x20Failed\x20to\x20check\x20JWT\x20expiration:','Wikzk','AIRdh','UdhZz','DBUPz','BcGBx','MRcjm','USiaG'];_0x1993=function(){return _0x18e864;};return _0x1993();}function _interopRequireDefault(_0x30324b){return _0x30324b&&_0x30324b[_0x501d(0x1)]?_0x30324b:{'default':_0x30324b};}const JWT_TOKEN_KEY='onairos_jwt_token',mockStorage={};let Keychain=null;try{Keychain=__ONAIROS_REQ_FUNC__(0x3);}catch(_0x4ceefc){console[_0x501d(0xd)]('react-native-keychain module not available, using mock storage'),Keychain={'ACCESS_CONTROL':{'BIOMETRY_ANY_OR_DEVICE_PASSCODE':'mock'},'ACCESSIBLE':{'WHEN_UNLOCKED':_0x501d(0xe)},'getGenericPassword':async()=>null,'setGenericPassword':async()=>!![],'resetGenericPassword':async()=>!![]};}const isKeychainAvailable=()=>{const _0x8f9fc1={'mFmFi':_0x501d(0xf),'nOZVb':function(_0x44542b,_0x28b168){return _0x44542b<_0x28b168;},'bllIi':function(_0x137679,_0x507fe5){return _0x137679+_0x507fe5;},'wbPzM':function(_0x4a9b37,_0x384631){return _0x4a9b37|_0x384631;},'OJLVQ':function(_0x4e4447,_0x80ce0b){return _0x4e4447|_0x80ce0b;},'EbZqE':function(_0x32af90,_0x499512){return _0x32af90<<_0x499512;},'auClG':function(_0x582dc6,_0x1ab2a6){return _0x582dc6&_0x1ab2a6;},'GMPqH':function(_0x3a1af7,_0x278f72){return _0x3a1af7!==_0x278f72;},'jxLnJ':function(_0x2cee81,_0x28233e){return _0x2cee81!==_0x28233e;},'qrchr':function(_0x318235,_0x159622){return _0x318235&_0x159622;},'ynRYq':function(_0x24f866,_0xbb13ef){return _0x24f866===_0xbb13ef;},'Pbdgz':_0x501d(0x10),'qrcRf':function(_0x27cd30,_0x66a174){return _0x27cd30===_0x66a174;},'EmvEp':_0x501d(0x11),'iBqbx':function(_0x21fdbe,_0x438bcb){return _0x21fdbe===_0x438bcb;},'hctKI':_0x501d(0x12)};try{if(_0x8f9fc1[_0x501d(0x13)](_0x8f9fc1[_0x501d(0x14)],_0x8f9fc1[_0x501d(0x14)])){while(_0x4262f7[_0x501d(0x15)]%0x4){_0x52a157+='=';}const _0x432948=_0x8f9fc1['mFmFi'];let _0x51fbbb='';for(let _0x31fc86=0x0;_0x8f9fc1['nOZVb'](_0x31fc86,_0x33cd74['length']);_0x31fc86+=0x4){const _0x18069a=_0x432948['indexOf'](_0x5f0984[_0x501d(0x16)](_0x31fc86)),_0x5d2625=_0x432948[_0x501d(0x17)](_0x2e5767[_0x501d(0x16)](_0x8f9fc1[_0x501d(0x18)](_0x31fc86,0x1))),_0x294a70=_0x432948['indexOf'](_0xbd3016[_0x501d(0x16)](_0x31fc86+0x2)),_0x533a0e=_0x432948[_0x501d(0x17)](_0x1ef87b[_0x501d(0x16)](_0x31fc86+0x3)),_0x50a34f=_0x8f9fc1[_0x501d(0x19)](_0x8f9fc1['OJLVQ'](_0x18069a<<0x12,_0x8f9fc1[_0x501d(0x1a)](_0x5d2625,0xc)),_0x8f9fc1[_0x501d(0x1a)](_0x294a70,0x6))|_0x533a0e;_0x51fbbb+=_0x4094f8[_0x501d(0x1b)](_0x8f9fc1[_0x501d(0x1c)](_0x50a34f>>0x10,0xff));if(_0x8f9fc1[_0x501d(0x13)](_0x294a70,0x40))_0x51fbbb+=_0x4f67b4[_0x501d(0x1b)](_0x50a34f>>0x8&0xff);if(_0x8f9fc1[_0x501d(0x1d)](_0x533a0e,0x40))_0x51fbbb+=_0x531aac['fromCharCode'](_0x8f9fc1[_0x501d(0x1e)](_0x50a34f,0xff));}return _0x51fbbb;}else return Keychain&&_0x8f9fc1[_0x501d(0x1f)](typeof Keychain[_0x501d(0x20)],_0x8f9fc1[_0x501d(0x21)]);}catch(_0x85176b){return _0x8f9fc1[_0x501d(0x22)](_0x8f9fc1['hctKI'],_0x501d(0x23))?Keychain&&_0x8f9fc1['ynRYq'](typeof Keychain[_0x501d(0x20)],'function'):![];}},safeGetGenericPassword=async _0x138e18=>{const _0xe4575={'BQZAo':function(_0x2f4af0,_0x5a7b35){return _0x2f4af0(_0x5a7b35);},'YAuAs':_0x501d(0x24),'PjRVV':function(_0x1fbe33,_0x353164){return _0x1fbe33===_0x353164;},'uRzjl':'drBCs','lREJa':_0x501d(0x25),'ZCIPw':function(_0x3913c2,_0x229abb){return _0x3913c2===_0x229abb;},'sJJyf':_0x501d(0x26),'sLylp':function(_0x2ad6c0,_0x898748){return _0x2ad6c0===_0x898748;},'weMsX':_0x501d(0x27)};try{if(_0xe4575['YAuAs']===_0x501d(0x28))Keychain=_0xe4575['BQZAo'](_0x382201,0x3);else{if(isKeychainAvailable()){if(_0xe4575[_0x501d(0x29)](_0xe4575[_0x501d(0x2a)],_0xe4575[_0x501d(0x2b)]))_0x189c63[_0x501d(0xd)]('react-native-keychain module not available, using mock storage'),Keychain={'ACCESS_CONTROL':{'BIOMETRY_ANY_OR_DEVICE_PASSCODE':_0x501d(0xe)},'ACCESSIBLE':{'WHEN_UNLOCKED':_0x501d(0xe)},'getGenericPassword':async()=>null,'setGenericPassword':async()=>!![],'resetGenericPassword':async()=>!![]};else return await Keychain['getGenericPassword'](_0x138e18);}else{const _0x2cc896=(_0xe4575[_0x501d(0x2c)](_0x138e18,null)||_0x138e18===void 0x0?void 0x0:_0x138e18[_0x501d(0x2d)])||_0x501d(0x27);return mockStorage[_0x2cc896]||null;}}}catch(_0x1d9382){console[_0x501d(0xd)](_0xe4575[_0x501d(0x2e)],_0x1d9382);const _0x704eb7=(_0xe4575[_0x501d(0x2c)](_0x138e18,null)||_0xe4575['sLylp'](_0x138e18,void 0x0)?void 0x0:_0x138e18[_0x501d(0x2d)])||_0xe4575[_0x501d(0x2f)];return mockStorage[_0x704eb7]||null;}},safeSetGenericPassword=async(_0x267efc,_0x1de8db,_0x5767a0)=>{const _0x1227c7={'ynGoc':function(_0x36d080){return _0x36d080();},'RNxTF':function(_0x2833c1,_0x32bc51){return _0x2833c1===_0x32bc51;},'mwGpW':function(_0x281634,_0x25e5a6){return _0x281634===_0x25e5a6;},'UPuwq':_0x501d(0x27),'mtZgI':function(_0x2e4b30,_0x49c284){return _0x2e4b30!==_0x49c284;},'wSWgw':'PUveu','IEEFh':_0x501d(0x26),'ajKBw':function(_0x544abb,_0x4721c5){return _0x544abb===_0x4721c5;}};try{if(_0x1227c7[_0x501d(0x30)](isKeychainAvailable))return await Keychain[_0x501d(0x31)](_0x267efc,_0x1de8db,_0x5767a0);else{const _0x5d3a4b=(_0x1227c7['RNxTF'](_0x5767a0,null)||_0x1227c7[_0x501d(0x32)](_0x5767a0,void 0x0)?void 0x0:_0x5767a0[_0x501d(0x2d)])||_0x1227c7['UPuwq'];return mockStorage[_0x5d3a4b]={'username':_0x267efc,'password':_0x1de8db},!![];}}catch(_0x3ec726){if(_0x1227c7[_0x501d(0x33)](_0x1227c7[_0x501d(0x34)],_0x501d(0x35))){console[_0x501d(0xd)](_0x1227c7['IEEFh'],_0x3ec726);const _0x101baf=(_0x1227c7[_0x501d(0x36)](_0x5767a0,null)||_0x5767a0===void 0x0?void 0x0:_0x5767a0[_0x501d(0x2d)])||_0x1227c7[_0x501d(0x37)];return mockStorage[_0x101baf]={'username':_0x267efc,'password':_0x1de8db},!![];}else _0x2d8257[_0x501d(0x38)]=Keychain[_0x501d(0x39)]['BIOMETRY_ANY_OR_DEVICE_PASSCODE'],_0x578986['accessible']=Keychain[_0x501d(0x3a)][_0x501d(0x3b)];}},safeResetGenericPassword=async _0x3c1c36=>{const _0x1ce267={'jiNfQ':_0x501d(0x3c),'Wncev':function(_0x4d15df){return _0x4d15df();},'UrqHZ':function(_0x180f10,_0x1416bc){return _0x180f10===_0x1416bc;},'somoh':_0x501d(0x3d),'ZbSzy':function(_0x36ce43,_0x10c210){return _0x36ce43===_0x10c210;},'tTQpF':function(_0x10d179,_0x2f0507){return _0x10d179===_0x2f0507;},'eFSkD':_0x501d(0x27),'qqNtS':_0x501d(0x3e),'KrDet':_0x501d(0x3f),'NUoLo':function(_0x125c35,_0x267825){return _0x125c35===_0x267825;}};try{if(_0x1ce267[_0x501d(0x40)](isKeychainAvailable))return _0x1ce267['UrqHZ'](_0x1ce267[_0x501d(0x41)],_0x1ce267[_0x501d(0x41)])?await Keychain[_0x501d(0x42)](_0x3c1c36):!![];else{const _0x227e3a=(_0x1ce267[_0x501d(0x43)](_0x3c1c36,null)||_0x1ce267['tTQpF'](_0x3c1c36,void 0x0)?void 0x0:_0x3c1c36[_0x501d(0x2d)])||_0x1ce267[_0x501d(0x44)];return delete mockStorage[_0x227e3a],!![];}}catch(_0xa571f5){if(_0x1ce267[_0x501d(0x45)]===_0x1ce267['KrDet'])return _0xb05064[_0x501d(0x46)](_0x1ce267[_0x501d(0x47)],_0x37e4ce),![];else{console[_0x501d(0xd)]('Keychain\x20access\x20failed,\x20using\x20mock\x20storage',_0xa571f5);const _0x30e836=(_0x1ce267['NUoLo'](_0x3c1c36,null)||_0x1ce267[_0x501d(0x43)](_0x3c1c36,void 0x0)?void 0x0:_0x3c1c36[_0x501d(0x2d)])||_0x1ce267['eFSkD'];return delete mockStorage[_0x30e836],!![];}}},storeCredentials=async _0x463268=>{const _0x4239e2={'IzkOF':function(_0x113ce3,_0x3684c0){return _0x113ce3===_0x3684c0;},'JyYOf':_0x501d(0x27),'QxaqL':function(_0x305a63,_0xe5c5a1){return _0x305a63!==_0xe5c5a1;},'EPhwi':_0x501d(0x48),'gDuwK':function(_0x29d7aa){return _0x29d7aa();},'xJPib':function(_0x5cdda6,_0x3fc0b0){return _0x5cdda6===_0x3fc0b0;},'helNP':function(_0x2686ad,_0x57be43){return _0x2686ad===_0x57be43;},'hvvnu':'BomKG','hZOLp':_0x501d(0x49),'kbzhN':function(_0x2a4bc,_0x4185f1){return _0x2a4bc!==_0x4185f1;},'DdiHM':'web','QiAvL':function(_0x197c18){return _0x197c18();},'Ebmko':function(_0x20e6bf,_0x3e03a8){return _0x20e6bf!==_0x3e03a8;},'BOwEY':_0x501d(0x4a),'mAxav':function(_0x37474d,_0x1c4d73,_0x33ec76,_0x37aa24){return _0x37474d(_0x1c4d73,_0x33ec76,_0x37aa24);},'xcuLl':'Error\x20storing\x20credentials:'};try{if(_0x4239e2[_0x501d(0x4b)](_0x4239e2[_0x501d(0x4c)],_0x4239e2['EPhwi']))return _0x100afc[_0x501d(0x46)](_0x501d(0x4d),_0xc25eb3),![];else{const _0x50cc70=await _0x4239e2[_0x501d(0x4e)](getCredentials),_0x54bfd1={..._0x50cc70,..._0x463268,'createdAt':(_0x4239e2[_0x501d(0x4f)](_0x50cc70,null)||_0x4239e2[_0x501d(0x50)](_0x50cc70,void 0x0)?void 0x0:_0x50cc70[_0x501d(0x51)])||Date[_0x501d(0x52)]()},_0x4e3116=_0x54bfd1[_0x501d(0x53)];if(!_0x4e3116){if(_0x4239e2['QxaqL'](_0x4239e2[_0x501d(0x54)],_0x501d(0x55)))throw new Error(_0x4239e2[_0x501d(0x56)]);else _0xfdb76f+='=';}const _0x47748e={'service':_constants['STORAGE_KEYS']['credentials']};if(_0x4239e2[_0x501d(0x57)](_reactNative[_0x501d(0x58)]['OS'],_0x4239e2[_0x501d(0x59)])&&_0x4239e2[_0x501d(0x5a)](isKeychainAvailable)){if(_0x4239e2[_0x501d(0x5b)](_0x4239e2[_0x501d(0x5c)],'FmYSM')){const _0x1fcfd0=(_0x4239e2[_0x501d(0x5d)](_0xcd1516,null)||_0x17a25a===void 0x0?void 0x0:_0x5d2ba5[_0x501d(0x2d)])||_0x4239e2['JyYOf'];return _0x3633ae[_0x1fcfd0]={'username':_0x4bfc86,'password':_0x10fb0c},!![];}else _0x47748e[_0x501d(0x38)]=Keychain[_0x501d(0x39)][_0x501d(0x5e)],_0x47748e[_0x501d(0x5f)]=Keychain['ACCESSIBLE']['WHEN_UNLOCKED'];}return await _0x4239e2['mAxav'](safeSetGenericPassword,_0x4e3116,JSON[_0x501d(0x60)](_0x54bfd1),_0x47748e),!![];}}catch(_0x358cd6){return console[_0x501d(0x46)](_0x4239e2[_0x501d(0x61)],_0x358cd6),![];}};exports[_0x501d(0x4)]=storeCredentials;const getCredentials=async()=>{const _0x4234a9={'hslAA':_0x501d(0x62),'odbuA':'Error\x20storing\x20credentials:','xNWrh':_0x501d(0x11),'OjxbC':function(_0x1ab717,_0x12f455){return _0x1ab717!==_0x12f455;},'kBPDm':'fbCxZ','vznNf':function(_0x417b78,_0x5b78c1){return _0x417b78(_0x5b78c1);},'DPukk':_0x501d(0x63),'FAcWc':function(_0x5ee7ad,_0x123742){return _0x5ee7ad!==_0x123742;},'rPvpU':'ASOaG'};try{if(_0x4234a9[_0x501d(0x64)](_0x501d(0x65),_0x4234a9[_0x501d(0x66)]))return _0x4c245d['error'](_0x4234a9['hslAA'],_0x512a70),null;else{const _0x54c05c=await _0x4234a9[_0x501d(0x67)](safeGetGenericPassword,{'service':_constants['STORAGE_KEYS'][_0x501d(0x68)]});if(_0x54c05c)return _0x4234a9[_0x501d(0x69)]==='yaNWm'?(_0x239f61[_0x501d(0x46)](_0x4234a9[_0x501d(0x6a)],_0x211b61),![]):JSON[_0x501d(0x6b)](_0x54c05c[_0x501d(0x6c)]);return null;}}catch(_0x26a2be){if(_0x4234a9[_0x501d(0x6d)](_0x4234a9[_0x501d(0x6e)],_0x4234a9[_0x501d(0x6e)]))try{return Keychain&&typeof Keychain['getGenericPassword']===_0x4234a9['xNWrh'];}catch(_0x11cc8f){return![];}else return console[_0x501d(0x46)](_0x4234a9[_0x501d(0x6f)],_0x26a2be),null;}};exports[_0x501d(0x70)]=getCredentials;const hasCredentials=async()=>{const _0x3ad5f0={'HXYAb':_0x501d(0x71),'mNJJr':function(_0x32b8b5,_0x17182a){return _0x32b8b5===_0x17182a;},'zdPyC':_0x501d(0x27),'qDOfu':function(_0x59bb13,_0x17844e){return _0x59bb13!==_0x17844e;},'eqBGz':_0x501d(0x72),'oGXkf':function(_0xebaf0b,_0x28cde8){return _0xebaf0b(_0x28cde8);},'uHpvY':function(_0x1bbd8d,_0x5228a3){return _0x1bbd8d!==_0x5228a3;},'JhlgU':_0x501d(0x73)};try{if(_0x3ad5f0[_0x501d(0x74)](_0x3ad5f0['eqBGz'],_0x501d(0x75))){const _0x4358a0=await _0x3ad5f0['oGXkf'](safeGetGenericPassword,{'service':_constants[_0x501d(0x76)][_0x501d(0x68)]});return!!_0x4358a0;}else return _0x199af4[_0x501d(0x46)](_0x3ad5f0[_0x501d(0x77)],_0x422328),![];}catch(_0x26b483){if(_0x3ad5f0[_0x501d(0x78)](_0x3ad5f0['JhlgU'],_0x3ad5f0[_0x501d(0x79)])){const _0x4102d4=(_0x3ad5f0['mNJJr'](_0x5d8550,null)||_0x3ad5f0['mNJJr'](_0x37c085,void 0x0)?void 0x0:_0x3ff6c4[_0x501d(0x2d)])||_0x3ad5f0[_0x501d(0x7a)];return delete _0x2bf7b7[_0x4102d4],!![];}else return console[_0x501d(0x46)]('Error\x20checking\x20credentials:',_0x26b483),![];}};exports[_0x501d(0x7)]=hasCredentials;const deleteCredentials=async()=>{const _0x4a58ac={'LCUsk':function(_0x5e5b51,_0x1e9d80){return _0x5e5b51(_0x1e9d80);},'uGtFl':_0x501d(0x7b),'hOZIH':_0x501d(0x7c)};try{return await _0x4a58ac[_0x501d(0x7d)](safeResetGenericPassword,{'service':_constants[_0x501d(0x76)]['credentials']}),!![];}catch(_0xe482d8){if(_0x4a58ac[_0x501d(0x7e)]!==_0x4a58ac[_0x501d(0x7e)]){const _0x3ff3ab=_0x223e80[_0x501d(0x7f)]()[_0x501d(0x80)](0x24)[_0x501d(0x81)](0x2,0xa);return'dev_'+_0x3ff3ab;}else return console['error'](_0x4a58ac[_0x501d(0x82)],_0xe482d8),![];}};exports[_0x501d(0xb)]=deleteCredentials;const updateCredentials=async _0x59e477=>{const _0x4a2f83={'JGCcj':function(_0x1390e1,_0x533f15){return _0x1390e1(_0x533f15);}};return _0x4a2f83[_0x501d(0x83)](storeCredentials,_0x59e477);};exports[_0x501d(0x3)]=updateCredentials;const generateDeviceUsername=()=>{const _0xe8e892=Math[_0x501d(0x7f)]()[_0x501d(0x80)](0x24)[_0x501d(0x81)](0x2,0xa);return _0x501d(0x84)+_0xe8e892;};exports['generateDeviceUsername']=generateDeviceUsername;const verifyCredentials=async _0x35301b=>{const _0x351f18={'GFSFV':function(_0x3c90e8,_0x297484){return _0x3c90e8===_0x297484;},'iKlfc':'default','FFxdK':function(_0x12624f){return _0x12624f();},'QFxMW':_0x501d(0x85),'GlTLl':'Error\x20verifying\x20credentials:'};try{if(!_0x351f18[_0x501d(0x86)](isKeychainAvailable))return!![];return!![];}catch(_0xc58089){if(_0x501d(0x87)===_0x351f18['QFxMW']){const _0xa68ab2=(_0x351f18[_0x501d(0x88)](_0x15fbeb,null)||_0x351f18[_0x501d(0x88)](_0x3d9f70,void 0x0)?void 0x0:_0x1f2cbf[_0x501d(0x2d)])||_0x351f18['iKlfc'];return _0x303dfc[_0xa68ab2]||null;}else return console[_0x501d(0x46)](_0x351f18['GlTLl'],_0xc58089),![];}};exports[_0x501d(0x2)]=verifyCredentials;const getJWT=async()=>{const _0x4fdb53={'hMPOK':'❌\x20Failed\x20to\x20retrieve\x20JWT\x20token:','NYlir':function(_0x5912ef,_0x42ab4f){return _0x5912ef===_0x42ab4f;},'YHiEV':_0x501d(0x89)};try{const _0x1a06c5=await _asyncStorage['default'][_0x501d(0x8a)](JWT_TOKEN_KEY);return _0x1a06c5;}catch(_0x52c761){return _0x4fdb53['NYlir']('nodAm',_0x4fdb53[_0x501d(0x8b)])?(_0x37686a[_0x501d(0x46)](_0x4fdb53[_0x501d(0x8c)],_0x36669d),null):(console[_0x501d(0x46)]('❌\x20Failed\x20to\x20retrieve\x20JWT\x20token:',_0x52c761),null);}};function _0x501d(_0x1993e1,_0x501d50){_0x1993e1=_0x1993e1-0x0;const _0x15a285=_0x1993();let _0x4a05b3=_0x15a285[_0x1993e1];return _0x4a05b3;}exports[_0x501d(0x9)]=getJWT;const hasJWT=async()=>{const _0xdd34ca={'wXpLP':'Error\x20deleting\x20credentials:','OihIu':function(_0x3172d4,_0x9be020){return _0x3172d4===_0x9be020;},'urkpH':_0x501d(0x8d),'nuLoP':_0x501d(0x3c)};try{if(_0xdd34ca[_0x501d(0x8e)](_0xdd34ca['urkpH'],_0xdd34ca['urkpH'])){const _0x3aa3b6=await _asyncStorage[_0x501d(0x27)]['getItem'](JWT_TOKEN_KEY);return!!_0x3aa3b6;}else return _0x484d08['error'](_0xdd34ca[_0x501d(0x8f)],_0x2b20ad),![];}catch(_0x180448){return console[_0x501d(0x46)](_0xdd34ca[_0x501d(0x90)],_0x180448),![];}};exports['hasJWT']=hasJWT;const clearJWT=async()=>{const _0x197c85={'fAwmO':_0x501d(0x91),'ftFWN':_0x501d(0x71)};try{return await _asyncStorage['default'][_0x501d(0x92)](JWT_TOKEN_KEY),console[_0x501d(0x93)](_0x197c85[_0x501d(0x94)]),!![];}catch(_0x1d49a8){return console[_0x501d(0x46)](_0x197c85[_0x501d(0x95)],_0x1d49a8),![];}};exports[_0x501d(0xc)]=clearJWT;const base64Decode=_0x1dca67=>{const _0x2c2edc={'QSxRF':_0x501d(0x96),'QEwun':function(_0x1c3362,_0x52dd1e){return _0x1c3362%_0x52dd1e;},'ItOfh':function(_0x118231,_0x2f0c60){return _0x118231===_0x2f0c60;},'Ifmyd':'iTYRb','ICWil':_0x501d(0xf),'upRZH':function(_0x18df75,_0x4c061c){return _0x18df75<_0x4c061c;},'CfsRg':function(_0x4dd20a,_0x1ab4af){return _0x4dd20a===_0x1ab4af;},'EAaKM':_0x501d(0x97),'VTpKp':_0x501d(0x98),'rPSLt':function(_0x1624fc,_0x2c5845){return _0x1624fc+_0x2c5845;},'PsNLM':function(_0x4d0d5f,_0x560c44){return _0x4d0d5f|_0x560c44;},'tDykT':function(_0x20cf31,_0xb1b984){return _0x20cf31|_0xb1b984;},'QrWET':function(_0x38a461,_0x21958e){return _0x38a461<<_0x21958e;},'JqdTQ':function(_0x3d2632,_0x39e029){return _0x3d2632>>_0x39e029;},'LQalq':function(_0x5dda8a,_0x39cdbb){return _0x5dda8a!==_0x39cdbb;},'BWirS':function(_0x3ef561,_0x598f44){return _0x3ef561&_0x598f44;},'kQsGz':function(_0x424980,_0x1ee566){return _0x424980>>_0x1ee566;}};while(_0x2c2edc[_0x501d(0x99)](_0x1dca67[_0x501d(0x15)],0x4)){if(_0x2c2edc[_0x501d(0x9a)](_0x501d(0x9b),_0x2c2edc[_0x501d(0x9c)]))_0x1dca67+='=';else return _0x174b32[_0x501d(0x46)](_0x2c2edc[_0x501d(0x9d)],_0x5b7795),![];}const _0x45f886=_0x2c2edc['ICWil'];let _0x3b8935='';for(let _0x47d61=0x0;_0x2c2edc[_0x501d(0x9e)](_0x47d61,_0x1dca67['length']);_0x47d61+=0x4){if(_0x2c2edc[_0x501d(0x9f)](_0x2c2edc['EAaKM'],_0x2c2edc[_0x501d(0xa0)]))throw new _0x113fdc(_0x501d(0x49));else{const _0x38b113=_0x45f886['indexOf'](_0x1dca67[_0x501d(0x16)](_0x47d61)),_0x10abc1=_0x45f886[_0x501d(0x17)](_0x1dca67['charAt'](_0x2c2edc[_0x501d(0xa1)](_0x47d61,0x1))),_0x4cb9b6=_0x45f886['indexOf'](_0x1dca67[_0x501d(0x16)](_0x47d61+0x2)),_0x18f70f=_0x45f886[_0x501d(0x17)](_0x1dca67['charAt'](_0x2c2edc[_0x501d(0xa1)](_0x47d61,0x3))),_0x438adb=_0x2c2edc[_0x501d(0xa2)](_0x2c2edc[_0x501d(0xa2)](_0x2c2edc[_0x501d(0xa3)](_0x38b113<<0x12,_0x2c2edc[_0x501d(0xa4)](_0x10abc1,0xc)),_0x2c2edc[_0x501d(0xa4)](_0x4cb9b6,0x6)),_0x18f70f);_0x3b8935+=String['fromCharCode'](_0x2c2edc[_0x501d(0xa5)](_0x438adb,0x10)&0xff);if(_0x2c2edc[_0x501d(0xa6)](_0x4cb9b6,0x40))_0x3b8935+=String[_0x501d(0x1b)](_0x2c2edc[_0x501d(0xa7)](_0x2c2edc[_0x501d(0xa8)](_0x438adb,0x8),0xff));if(_0x18f70f!==0x40)_0x3b8935+=String[_0x501d(0x1b)](_0x2c2edc[_0x501d(0xa7)](_0x438adb,0xff));}}return _0x3b8935;},getJWTPayload=async()=>{const _0x11cc97={'KFVGc':function(_0xf28faf){return _0xf28faf();},'GnGYn':_0x501d(0xa9)};try{const _0x1d8bff=await _0x11cc97[_0x501d(0xaa)](getJWT);if(!_0x1d8bff)return null;const _0x3a1789=_0x1d8bff['split']('.');if(_0x3a1789[_0x501d(0x15)]!==0x3)return null;const _0x2ce323=base64Decode(_0x3a1789[0x1]),_0x27c353=JSON[_0x501d(0x6b)](_0x2ce323);return _0x27c353;}catch(_0x2ef979){return console[_0x501d(0x46)](_0x11cc97[_0x501d(0xab)],_0x2ef979),null;}};exports['getJWTPayload']=getJWTPayload;const isJWTExpired=async()=>{const _0x119536={'BcGBx':_0x501d(0x26),'MRcjm':function(_0x4734a4,_0x232c9b){return _0x4734a4===_0x232c9b;},'Wikzk':function(_0x44d88b){return _0x44d88b();},'AIRdh':function(_0x190899,_0x476be7){return _0x190899/_0x476be7;},'UZRfk':function(_0x1db5e8,_0x3a3096){return _0x1db5e8<_0x3a3096;},'UdhZz':function(_0x45a04a,_0x38c70d){return _0x45a04a!==_0x38c70d;},'DBUPz':'GGKSD','USiaG':_0x501d(0xac)};try{const _0x2b2a4d=await _0x119536[_0x501d(0xad)](getJWTPayload);if(!_0x2b2a4d||!_0x2b2a4d['exp'])return!![];const _0x9ddfc4=Math['floor'](_0x119536[_0x501d(0xae)](Date['now'](),0x3e8));return _0x119536['UZRfk'](_0x2b2a4d['exp'],_0x9ddfc4);}catch(_0x10870a){if(_0x119536[_0x501d(0xaf)](_0x119536[_0x501d(0xb0)],_0x119536[_0x501d(0xb0)])){_0x425793['warn'](_0x119536[_0x501d(0xb1)],_0x3cbadd);const _0x1f3b81=(_0x1fc102===null||_0x119536[_0x501d(0xb2)](_0x34b666,void 0x0)?void 0x0:_0x4c11b5[_0x501d(0x2d)])||'default';return delete _0x1b3c4e[_0x1f3b81],!![];}else return console[_0x501d(0x46)](_0x119536[_0x501d(0xb3)],_0x10870a),!![];}};exports['isJWTExpired']=isJWTExpired;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.verifyCredentials = exports.updateCredentials = exports.storeCredentials = exports.isJWTExpired = exports.hasJWT = exports.hasCredentials = exports.getJWTPayload = exports.getJWT = exports.getCredentials = exports.generateDeviceUsername = exports.deleteCredentials = exports.clearJWT = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _constants = require("../constants");
|
|
9
|
+
var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
// JWT token storage key
|
|
12
|
+
const JWT_TOKEN_KEY = 'onairos_jwt_token';
|
|
13
|
+
|
|
14
|
+
// Define OnairosCredentials interface locally to avoid circular dependencies
|
|
15
|
+
|
|
16
|
+
// Create a mock storage for environments without Keychain access (like Expo Go)
|
|
17
|
+
const mockStorage = {};
|
|
18
|
+
|
|
19
|
+
// Try to import Keychain, but provide fallbacks if not available
|
|
20
|
+
let Keychain = null;
|
|
21
|
+
try {
|
|
22
|
+
// This import might fail in Expo Go or environments without native modules
|
|
23
|
+
Keychain = require('react-native-keychain');
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.warn('react-native-keychain module not available, using mock storage');
|
|
26
|
+
// Create minimal mock implementation
|
|
27
|
+
Keychain = {
|
|
28
|
+
ACCESS_CONTROL: {
|
|
29
|
+
BIOMETRY_ANY_OR_DEVICE_PASSCODE: 'mock'
|
|
30
|
+
},
|
|
31
|
+
ACCESSIBLE: {
|
|
32
|
+
WHEN_UNLOCKED: 'mock'
|
|
33
|
+
},
|
|
34
|
+
getGenericPassword: async () => null,
|
|
35
|
+
setGenericPassword: async () => true,
|
|
36
|
+
resetGenericPassword: async () => true
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Check if Keychain is properly initialized and available
|
|
41
|
+
const isKeychainAvailable = () => {
|
|
42
|
+
try {
|
|
43
|
+
return Keychain && typeof Keychain.getGenericPassword === 'function';
|
|
44
|
+
} catch (e) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Wrapper for getGenericPassword that falls back to mock storage
|
|
50
|
+
const safeGetGenericPassword = async options => {
|
|
51
|
+
try {
|
|
52
|
+
if (isKeychainAvailable()) {
|
|
53
|
+
return await Keychain.getGenericPassword(options);
|
|
54
|
+
} else {
|
|
55
|
+
// Fall back to mock storage in memory
|
|
56
|
+
const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
|
|
57
|
+
return mockStorage[key] || null;
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.warn('Keychain access failed, using mock storage', error);
|
|
61
|
+
// Fall back to mock storage on error
|
|
62
|
+
const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
|
|
63
|
+
return mockStorage[key] || null;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// Wrapper for setGenericPassword that falls back to mock storage
|
|
68
|
+
const safeSetGenericPassword = async (username, password, options) => {
|
|
69
|
+
try {
|
|
70
|
+
if (isKeychainAvailable()) {
|
|
71
|
+
return await Keychain.setGenericPassword(username, password, options);
|
|
72
|
+
} else {
|
|
73
|
+
// Fall back to mock storage in memory
|
|
74
|
+
const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
|
|
75
|
+
mockStorage[key] = {
|
|
76
|
+
username,
|
|
77
|
+
password
|
|
78
|
+
};
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.warn('Keychain access failed, using mock storage', error);
|
|
83
|
+
// Fall back to mock storage on error
|
|
84
|
+
const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
|
|
85
|
+
mockStorage[key] = {
|
|
86
|
+
username,
|
|
87
|
+
password
|
|
88
|
+
};
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// Wrapper for resetGenericPassword that falls back to mock storage
|
|
94
|
+
const safeResetGenericPassword = async options => {
|
|
95
|
+
try {
|
|
96
|
+
if (isKeychainAvailable()) {
|
|
97
|
+
return await Keychain.resetGenericPassword(options);
|
|
98
|
+
} else {
|
|
99
|
+
// Fall back to mock storage in memory
|
|
100
|
+
const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
|
|
101
|
+
delete mockStorage[key];
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
} catch (error) {
|
|
105
|
+
console.warn('Keychain access failed, using mock storage', error);
|
|
106
|
+
// Fall back to mock storage on error
|
|
107
|
+
const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
|
|
108
|
+
delete mockStorage[key];
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Store credentials in memory (temporary solution)
|
|
115
|
+
*/
|
|
116
|
+
const storeCredentials = async credentials => {
|
|
117
|
+
try {
|
|
118
|
+
const existingCredentials = await getCredentials();
|
|
119
|
+
const updatedCredentials = {
|
|
120
|
+
...existingCredentials,
|
|
121
|
+
...credentials,
|
|
122
|
+
createdAt: (existingCredentials === null || existingCredentials === void 0 ? void 0 : existingCredentials.createdAt) || Date.now()
|
|
123
|
+
};
|
|
124
|
+
const username = updatedCredentials.username;
|
|
125
|
+
if (!username) {
|
|
126
|
+
throw new Error('Username is required for storing credentials');
|
|
127
|
+
}
|
|
128
|
+
const options = {
|
|
129
|
+
service: _constants.STORAGE_KEYS.credentials
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// Only use secure storage options on real devices
|
|
133
|
+
if (_reactNative.Platform.OS !== 'web' && isKeychainAvailable()) {
|
|
134
|
+
options.accessControl = Keychain.ACCESS_CONTROL.BIOMETRY_ANY_OR_DEVICE_PASSCODE;
|
|
135
|
+
options.accessible = Keychain.ACCESSIBLE.WHEN_UNLOCKED;
|
|
136
|
+
}
|
|
137
|
+
await safeSetGenericPassword(username, JSON.stringify(updatedCredentials), options);
|
|
138
|
+
return true;
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.error('Error storing credentials:', error);
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Retrieve credentials from memory (temporary solution)
|
|
147
|
+
*/
|
|
148
|
+
exports.storeCredentials = storeCredentials;
|
|
149
|
+
const getCredentials = async () => {
|
|
150
|
+
try {
|
|
151
|
+
const credentials = await safeGetGenericPassword({
|
|
152
|
+
service: _constants.STORAGE_KEYS.credentials
|
|
153
|
+
});
|
|
154
|
+
if (credentials) {
|
|
155
|
+
return JSON.parse(credentials.password);
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
} catch (error) {
|
|
159
|
+
console.error('Error getting credentials:', error);
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Check if the user has stored credentials
|
|
166
|
+
*/
|
|
167
|
+
exports.getCredentials = getCredentials;
|
|
168
|
+
const hasCredentials = async () => {
|
|
169
|
+
try {
|
|
170
|
+
const credentials = await safeGetGenericPassword({
|
|
171
|
+
service: _constants.STORAGE_KEYS.credentials
|
|
172
|
+
});
|
|
173
|
+
return !!credentials;
|
|
174
|
+
} catch (error) {
|
|
175
|
+
console.error('Error checking credentials:', error);
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Delete stored credentials
|
|
182
|
+
*/
|
|
183
|
+
exports.hasCredentials = hasCredentials;
|
|
184
|
+
const deleteCredentials = async () => {
|
|
185
|
+
try {
|
|
186
|
+
await safeResetGenericPassword({
|
|
187
|
+
service: _constants.STORAGE_KEYS.credentials
|
|
188
|
+
});
|
|
189
|
+
return true;
|
|
190
|
+
} catch (error) {
|
|
191
|
+
console.error('Error deleting credentials:', error);
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Update specific fields in the stored credentials
|
|
198
|
+
*/
|
|
199
|
+
exports.deleteCredentials = deleteCredentials;
|
|
200
|
+
const updateCredentials = async credentials => {
|
|
201
|
+
return storeCredentials(credentials);
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Generate a device-specific unique username
|
|
206
|
+
*/
|
|
207
|
+
exports.updateCredentials = updateCredentials;
|
|
208
|
+
const generateDeviceUsername = () => {
|
|
209
|
+
const randomId = Math.random().toString(36).substring(2, 10);
|
|
210
|
+
return `dev_${randomId}`;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Verify credentials (temporary mock implementation)
|
|
215
|
+
*/
|
|
216
|
+
exports.generateDeviceUsername = generateDeviceUsername;
|
|
217
|
+
const verifyCredentials = async username => {
|
|
218
|
+
try {
|
|
219
|
+
// For Expo Go or development, always return true
|
|
220
|
+
if (!isKeychainAvailable()) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// TODO: Implement actual verification with API
|
|
225
|
+
return true;
|
|
226
|
+
} catch (error) {
|
|
227
|
+
console.error('Error verifying credentials:', error);
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* JWT Token Storage Functions
|
|
234
|
+
* These functions handle JWT tokens from email verification
|
|
235
|
+
*
|
|
236
|
+
* Note: Main JWT token management is handled in apiKeyService.ts
|
|
237
|
+
* These are utility functions for backwards compatibility
|
|
238
|
+
*/
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Retrieve JWT token
|
|
242
|
+
* @returns JWT token or null if not found
|
|
243
|
+
*/
|
|
244
|
+
exports.verifyCredentials = verifyCredentials;
|
|
245
|
+
const getJWT = async () => {
|
|
246
|
+
try {
|
|
247
|
+
const token = await _asyncStorage.default.getItem(JWT_TOKEN_KEY);
|
|
248
|
+
return token;
|
|
249
|
+
} catch (error) {
|
|
250
|
+
console.error('❌ Failed to retrieve JWT token:', error);
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Check if JWT token exists
|
|
257
|
+
* @returns True if JWT token exists
|
|
258
|
+
*/
|
|
259
|
+
exports.getJWT = getJWT;
|
|
260
|
+
const hasJWT = async () => {
|
|
261
|
+
try {
|
|
262
|
+
const token = await _asyncStorage.default.getItem(JWT_TOKEN_KEY);
|
|
263
|
+
return !!token;
|
|
264
|
+
} catch (error) {
|
|
265
|
+
console.error('❌ Failed to check JWT token:', error);
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Clear JWT token
|
|
272
|
+
*/
|
|
273
|
+
exports.hasJWT = hasJWT;
|
|
274
|
+
const clearJWT = async () => {
|
|
275
|
+
try {
|
|
276
|
+
await _asyncStorage.default.removeItem(JWT_TOKEN_KEY);
|
|
277
|
+
console.log('🗑️ JWT token cleared');
|
|
278
|
+
return true;
|
|
279
|
+
} catch (error) {
|
|
280
|
+
console.error('❌ Failed to clear JWT token:', error);
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Simple base64 decoder for React Native
|
|
287
|
+
*/
|
|
288
|
+
exports.clearJWT = clearJWT;
|
|
289
|
+
const base64Decode = str => {
|
|
290
|
+
// Add padding if needed
|
|
291
|
+
while (str.length % 4) {
|
|
292
|
+
str += '=';
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Simple base64 decoding
|
|
296
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
297
|
+
let result = '';
|
|
298
|
+
for (let i = 0; i < str.length; i += 4) {
|
|
299
|
+
const a = chars.indexOf(str.charAt(i));
|
|
300
|
+
const b = chars.indexOf(str.charAt(i + 1));
|
|
301
|
+
const c = chars.indexOf(str.charAt(i + 2));
|
|
302
|
+
const d = chars.indexOf(str.charAt(i + 3));
|
|
303
|
+
const bitmap = a << 18 | b << 12 | c << 6 | d;
|
|
304
|
+
result += String.fromCharCode(bitmap >> 16 & 255);
|
|
305
|
+
if (c !== 64) result += String.fromCharCode(bitmap >> 8 & 255);
|
|
306
|
+
if (d !== 64) result += String.fromCharCode(bitmap & 255);
|
|
307
|
+
}
|
|
308
|
+
return result;
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Get JWT token payload (decoded)
|
|
313
|
+
* @returns Decoded JWT payload or null if invalid
|
|
314
|
+
*/
|
|
315
|
+
const getJWTPayload = async () => {
|
|
316
|
+
try {
|
|
317
|
+
const token = await getJWT();
|
|
318
|
+
if (!token) return null;
|
|
319
|
+
|
|
320
|
+
// Decode JWT payload (middle part of token)
|
|
321
|
+
const parts = token.split('.');
|
|
322
|
+
if (parts.length !== 3) return null;
|
|
323
|
+
const decodedPayload = base64Decode(parts[1]);
|
|
324
|
+
const payload = JSON.parse(decodedPayload);
|
|
325
|
+
return payload;
|
|
326
|
+
} catch (error) {
|
|
327
|
+
console.error('❌ Failed to decode JWT payload:', error);
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Check if JWT token is expired
|
|
334
|
+
* @returns True if token is expired or invalid
|
|
335
|
+
*/
|
|
336
|
+
exports.getJWTPayload = getJWTPayload;
|
|
337
|
+
const isJWTExpired = async () => {
|
|
338
|
+
try {
|
|
339
|
+
const payload = await getJWTPayload();
|
|
340
|
+
if (!payload || !payload.exp) return true;
|
|
341
|
+
const currentTime = Math.floor(Date.now() / 1000);
|
|
342
|
+
return payload.exp < currentTime;
|
|
343
|
+
} catch (error) {
|
|
344
|
+
console.error('❌ Failed to check JWT expiration:', error);
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
exports.isJWTExpired = isJWTExpired;
|
|
349
|
+
//# sourceMappingURL=secureStorage.js.map
|