@onairos/react-native 3.7.1 → 3.7.3
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/assets/icons/spotify.png +0 -0
- package/lib/commonjs/assets/images/spotify.png +0 -0
- package/lib/commonjs/components/BodyText.js +27 -9
- package/lib/commonjs/components/BrandMark.js +111 -10
- package/lib/commonjs/components/CodeInput.js +116 -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/assets/icons/spotify.png +0 -0
- package/lib/module/assets/images/spotify.png +0 -0
- package/lib/module/components/BodyText.js +20 -1
- package/lib/module/components/BrandMark.js +104 -1
- package/lib/module/components/CodeInput.js +109 -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,9 +1,464 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Object['defineProperty'](exports,_0xf2c5(0x0),{'value':!![]}),exports[_0xf2c5(0x1)]=void 0x0;var _react=_interopRequireWildcard(__ONAIROS_REQ_FUNC__(0x0)),_reactNative=__ONAIROS_REQ_FUNC__(0x1),_biometricPinService=__ONAIROS_REQ_FUNC__(0x2);function _0xf2c5(_0x4d804c,_0xf2c502){_0x4d804c=_0x4d804c-0x0;const _0x18486d=_0x4d80();let _0x20a2e2=_0x18486d[_0x4d804c];return _0x20a2e2;}function _0x4d80(){const _0xf6b460=['__esModule','PinInput','EVGdJ','jtXZh','object','default','bmLZF','iMgxo','STqat','wLasI','PUdGF','evHGY','has','set','cqIrj','hasOwnProperty','call','defineProperty','get','QzZnq','PIN\x20must\x20be\x20at\x20least\x20','\x20characters','window','Training\x20is\x20starting\x20in\x20the\x20background...','storage-error','hCJPV','qeocS','biometric-unavailable','OLsky','warning','biometric-failed','Biometric\x20authentication\x20was\x20cancelled\x20or\x20failed.\x20Your\x20PIN\x20needs\x20to\x20be\x20secured\x20with\x20biometric\x20authentication\x20to\x20proceed.','Authenticating...','info','OJPhx','authenticating','AhggW','GhlwM','KXWPF','vRoNZ','wZBSY','evpUI','VWLmC','This\x20device\x20does\x20not\x20support\x20Face\x20ID\x20or\x20Touch\x20ID.\x20Please\x20enable\x20biometric\x20authentication\x20in\x20your\x20device\x20settings\x20to\x20secure\x20your\x20PIN.','Biometric\x20Authentication\x20Failed','Please\x20complete\x20biometric\x20authentication\x20to\x20secure\x20your\x20PIN.','Create\x20a\x20PIN','A\x20PIN\x20so\x20only\x20you\x20have\x20access\x20to\x20your\x20data','small','#007AFF','e.g.\x20MyPin123!','none','👁️','PIN\x20Requirements:','•\x20At\x20least\x20','•\x20Include\x20a\x20special\x20character','Try\x20Again','Continue','useState','useEffect','KRgfC','nDuaP','PqBJf','XzFxX','MIWtu','log','nWofy','catch','FRtmQ','GSNHY','LpMOO','KhrnV','TUKoU','Tjrwb','error','vnavB','useCallback','XTGSF','ozJyf','hDIna','test','NQNWS','EXlUe','dtvyg','udMnB','oxRon','MSOSY','Storage\x20Error','hmzPQ','nbWXB','zzWwT','wFzqZ','nzTbT','length','agRQA','ujBKg','lLblE','sOnmC','KdvYE','ihNXE','UaUCI','UsDCn','lgvne','YFLLl','ATjVX','BAdTT','biometricPinService','isBiometricAvailable','DPSDD','xVIte','MrorK','storePinWithBiometric','isPinStored','FHXds','OijIC','sPOAC','uxgYB','qfLJH','dmyUj','mPLBh','oSZRn','RaVYA','PNPaA','iKwJh','owNop','hMEFr','rLtgD','uHsjY','vBgXW','eAcMC','Secure\x20PIN\x20Storage','warn','gPqrs','mBJsP','nqaoF','XEOyF','xeEJQ','dwNTB','LhgNs','MbMKk','FGFBV','dzGGK','QyvTY','vNqkO','vOicr','NirdY','tFBqI','CSBNo','createElement','View','container','inputSection','header','TouchableOpacity','Text','VizYK','backgroundProgressContainer','backgroundProgressText','BCoRA','MsypG','inputContainer','TextInput','input','kkFQq','done','Keyboard','visibilityButton','UFStW','cghjz','requirementTitle','FOyBI','requirement','dxuUU','pxJlm','thdWH','requirementMet','oTpeS','infoContainer','type','infoContainerInfo','DoWeo','infoContainerWarning','infoContainerError','infoTitle','infoTitleInfo','infoTitleWarning','tRogs','infoTitleError','title','infoMessageInfo','infoMessageWarning','infoMessageError','message','showActions','infoActionButton','infoActionButtonText','infoActionButtonSecondary','infoActionButtonSecondaryText','Continue\x20Without\x20Biometric','cancelButton','cancelButtonText','Back','submitButton','lxXgd','submitButtonDisabled','bVysB','submitButtonText','StyleSheet','create','#fff','row','center','space-between','600','#333','#666','#CCCCCC','#E3F2FD','#2196F3','#FFF3E0','#FF9800','#F44336','#1976D2','#F57C00','#D32F2F','#1565C0','transparent','#FF3B30'];_0x4d80=function(){return _0xf6b460;};return _0x4d80();}function _interopRequireWildcard(_0x26fe9c,_0x298e05){const _0x109f4a={'UmbwF':_0xf2c5(0x2),'iMgxo':_0xf2c5(0x3),'STqat':function(_0x214794,_0xe32fc0){return _0x214794&&_0xe32fc0;},'cPpkF':function(_0x3916a9,_0x4851eb){return _0x3916a9===_0x4851eb;},'wLasI':function(_0x37a5f6,_0x5b6507){return _0x37a5f6!=_0x5b6507;},'PUdGF':_0xf2c5(0x4),'evHGY':function(_0x54e846,_0x203ba8){return _0x54e846!=_0x203ba8;},'bmLZF':'function','vWbHq':function(_0x42c626,_0x22f332){return _0x42c626!==_0x22f332;},'cqIrj':_0xf2c5(0x5),'QzZnq':function(_0x3fb94e,_0x822ca9,_0x5e0b06,_0xc8f31c){return _0x3fb94e(_0x822ca9,_0x5e0b06,_0xc8f31c);}};if(_0x109f4a[_0xf2c5(0x6)]==typeof WeakMap)var _0x1e64dd=new WeakMap(),_0x29cfc8=new WeakMap();return(_interopRequireWildcard=function(_0x2e6fe1,_0x3e67d6){if(_0x109f4a['UmbwF']!==_0x109f4a[_0xf2c5(0x7)]){if(_0x109f4a[_0xf2c5(0x8)](!_0x3e67d6,_0x2e6fe1)&&_0x2e6fe1['__esModule'])return _0x2e6fe1;var _0x1aa4ec,_0x161fc0,_0x1178ed={'__proto__':null,'default':_0x2e6fe1};if(_0x109f4a['cPpkF'](null,_0x2e6fe1)||_0x109f4a[_0xf2c5(0x9)](_0x109f4a[_0xf2c5(0xa)],typeof _0x2e6fe1)&&_0x109f4a[_0xf2c5(0xb)](_0x109f4a[_0xf2c5(0x6)],typeof _0x2e6fe1))return _0x1178ed;if(_0x1aa4ec=_0x3e67d6?_0x29cfc8:_0x1e64dd){if(_0x1aa4ec[_0xf2c5(0xc)](_0x2e6fe1))return _0x1aa4ec['get'](_0x2e6fe1);_0x1aa4ec[_0xf2c5(0xd)](_0x2e6fe1,_0x1178ed);}for(const _0x3a0b43 in _0x2e6fe1)_0x109f4a['vWbHq'](_0x109f4a[_0xf2c5(0xe)],_0x3a0b43)&&{}[_0xf2c5(0xf)][_0xf2c5(0x10)](_0x2e6fe1,_0x3a0b43)&&((_0x161fc0=(_0x1aa4ec=Object[_0xf2c5(0x11)])&&Object['getOwnPropertyDescriptor'](_0x2e6fe1,_0x3a0b43))&&(_0x161fc0[_0xf2c5(0x12)]||_0x161fc0[_0xf2c5(0xd)])?_0x109f4a[_0xf2c5(0x13)](_0x1aa4ec,_0x1178ed,_0x3a0b43,_0x161fc0):_0x1178ed[_0x3a0b43]=_0x2e6fe1[_0x3a0b43]);return _0x1178ed;}else return _0xf2c5(0x14)+_0x54fcb6+_0xf2c5(0x15);})(_0x26fe9c,_0x298e05);}const {width}=_reactNative['Dimensions']['get'](_0xf2c5(0x16)),PinInput=({onSubmit:_0x3ccd7b,minLength:minLength=0x8,requireSpecialChar:requireSpecialChar=!![],requireNumber:requireNumber=!![],onBack:_0x88d29e,enableBiometricStorage:enableBiometricStorage=!![],onBackgroundTrainingStart:_0x287362,showBackgroundProgress:showBackgroundProgress=![],backgroundProgressText:backgroundProgressText=_0xf2c5(0x17)})=>{const _0x590549={'KRgfC':function(_0x1e1705,_0x307ffd){return _0x1e1705(_0x307ffd);},'nDuaP':_0xf2c5(0x18),'DPSDD':function(_0x21ce51,_0x267645){return _0x21ce51!==_0x267645;},'PqBJf':_0xf2c5(0x19),'XzFxX':function(_0x36f7f4,_0x33e668){return _0x36f7f4===_0x33e668;},'MIWtu':_0xf2c5(0x1a),'nWofy':function(_0xea9c65,_0x5cc20b){return _0xea9c65(_0x5cc20b);},'sOnmC':function(_0x5ef15f){return _0x5ef15f();},'QyvTY':_0xf2c5(0x1b),'XTGSF':function(_0x56f577,_0xd6f4b0){return _0x56f577<_0xd6f4b0;},'ozJyf':_0xf2c5(0x1c),'hDIna':'aEQgY','KHmQl':'PIN\x20must\x20include\x20a\x20special\x20character','GAGnp':'ukFwD','lLblE':function(_0x159fe2,_0x4e63c9){return _0x159fe2(_0x4e63c9);},'YFLLl':function(_0x2a4a23,_0x2ce29b){return _0x2a4a23&&_0x2ce29b;},'ATjVX':function(_0x46d7b9,_0x33b86b){return _0x46d7b9(_0x33b86b);},'BAdTT':function(_0x3afb42){return _0x3afb42();},'NQNWS':function(_0x24cc5d,_0x594d2c){return _0x24cc5d<_0x594d2c;},'EXlUe':'PIN\x20must\x20include\x20a\x20number','dtvyg':'Biometric\x20Authentication\x20Not\x20Available','udMnB':_0xf2c5(0x1d),'oxRon':_0xf2c5(0x1e),'MSOSY':_0xf2c5(0x1f),'hmzPQ':'An\x20error\x20occurred\x20while\x20securing\x20your\x20PIN.\x20Would\x20you\x20like\x20to\x20try\x20again?','nbWXB':'error','zzWwT':_0xf2c5(0x20),'wFzqZ':_0xf2c5(0x21),'nzTbT':'Your\x20PIN\x20will\x20be\x20securely\x20stored\x20locally\x20on\x20your\x20device\x20using\x20biometric\x20authentication\x20(Face\x20ID\x20or\x20Touch\x20ID)\x20for\x20enhanced\x20security.','ihNXE':function(_0x4522a8,_0x47edcc){return _0x4522a8(_0x47edcc);},'agRQA':function(_0x239b5c,_0x5ae4ad){return _0x239b5c(_0x5ae4ad);},'ujBKg':_0xf2c5(0x22),'UaUCI':_0xf2c5(0x23),'UsDCn':_0xf2c5(0x24),'lgvne':_0xf2c5(0x25),'xVIte':_0xf2c5(0x26),'FHXds':function(_0x399913,_0x3b5c51){return _0x399913(_0x3b5c51);},'OijIC':function(_0x494db3,_0x24e144){return _0x494db3(_0x24e144);},'sPOAC':'xkkqe','uxgYB':function(_0x13adf0,_0x5aa202){return _0x13adf0(_0x5aa202);},'qfLJH':function(_0x195f19,_0x50501b){return _0x195f19(_0x50501b);},'dmyUj':_0xf2c5(0x27),'mPLBh':'bKUNg','KOdch':function(_0x57a37b,_0xafc99e){return _0x57a37b(_0xafc99e);},'lxXgd':function(_0x308cd3,_0x19e280){return _0x308cd3(_0x19e280);},'LhgNs':_0xf2c5(0x5),'gPqrs':function(_0x58ac18,_0x2ff2cd){return _0x58ac18(_0x2ff2cd);},'ipdYn':function(_0x6804c0,_0x7dbd70){return _0x6804c0&&_0x7dbd70;},'mBJsP':_0xf2c5(0x4),'nqaoF':function(_0x2b823c,_0x62223,_0x252818,_0x3709b2){return _0x2b823c(_0x62223,_0x252818,_0x3709b2);},'XEOyF':_0xf2c5(0x28),'MbMKk':function(_0x5f2ffc,_0x3b5682){return _0x5f2ffc(_0x3b5682);},'FGFBV':_0xf2c5(0x29),'dzGGK':_0xf2c5(0x2a),'vNqkO':_0xf2c5(0x2b),'vOicr':_0xf2c5(0x2c),'NirdY':_0xf2c5(0x2d),'tFBqI':'Secure\x20PIN\x20Storage','CSBNo':function(_0x46c9a3){return _0x46c9a3();},'VizYK':_0xf2c5(0x2e),'eEnxw':_0xf2c5(0x2f),'BCoRA':_0xf2c5(0x30),'MsypG':_0xf2c5(0x31),'KCNRE':_0xf2c5(0x32),'kkFQq':_0xf2c5(0x33),'UFStW':_0xf2c5(0x34),'cghjz':'👁️🗨️','FOyBI':_0xf2c5(0x35),'dxuUU':function(_0x2b774c,_0x6f0edc){return _0x2b774c>=_0x6f0edc;},'pxJlm':_0xf2c5(0x36),'thdWH':'\x20characters','oTpeS':_0xf2c5(0x37),'DoWeo':function(_0x2532c8,_0x15ef4a){return _0x2532c8===_0x15ef4a;},'tRogs':function(_0x3b6232,_0x977842){return _0x3b6232===_0x977842;},'ToocW':_0xf2c5(0x38),'MmMrb':function(_0x401507,_0x3e86d3){return _0x401507||_0x3e86d3;},'bVysB':function(_0x4d7042,_0x1cbc77){return _0x4d7042||_0x1cbc77;},'WuYrA':_0xf2c5(0x39)},[_0x447e55,_0x37df3f]=(0x0,_react[_0xf2c5(0x3a)])(''),[_0x2bf7a0,_0xdd784b]=(0x0,_react[_0xf2c5(0x3a)])(null),[_0x4d0c19,_0xb50ac4]=(0x0,_react[_0xf2c5(0x3a)])(![]),[_0x27c6e3,_0xfbcb0]=(0x0,_react[_0xf2c5(0x3a)])(![]),[_0x3028c4,_0x1638ed]=(0x0,_react[_0xf2c5(0x3a)])(_0xf2c5(0x5)),[_0x34a8a3,_0x491150]=(0x0,_react[_0xf2c5(0x3a)])(![]);_react[_0xf2c5(0x5)][_0xf2c5(0x3b)](()=>{const _0x1f9697={'GSNHY':function(_0x49dc7b,_0x466e1c){return _0x590549[_0xf2c5(0x3c)](_0x49dc7b,_0x466e1c);},'FRtmQ':_0x590549[_0xf2c5(0x3d)],'LpMOO':function(_0x55ed7e,_0x1de927){return _0x590549['DPSDD'](_0x55ed7e,_0x1de927);},'KhrnV':_0x590549[_0xf2c5(0x3e)],'vnavB':function(_0x51775e,_0x18bb10){return _0x51775e(_0x18bb10);}};_0x287362&&!_0x34a8a3&&showBackgroundProgress&&(_0x590549[_0xf2c5(0x3f)]('zroNt',_0x590549[_0xf2c5(0x40)])?(_0x534207[_0xf2c5(0x41)]('\uD83D\uDD10 [PIN INPUT] Biometric storage disabled, proceeding normally'),_0x1f9697['GSNHY'](_0x220b8d,_0x5d6934)):(console['log']('\uD83D\uDE80 [PIN INPUT] Background training explicitly requested...'),_0x590549[_0xf2c5(0x42)](_0x491150,!![]),_0x590549['sOnmC'](_0x287362)[_0xf2c5(0x43)](_0x1058ab=>{const _0x1d27ee={'TUKoU':function(_0x1b0119,_0x5f6ac0){return _0x1f9697['GSNHY'](_0x1b0119,_0x5f6ac0);},'eemvU':_0x1f9697[_0xf2c5(0x44)],'Tjrwb':function(_0x228295,_0x42d669){return _0x1f9697[_0xf2c5(0x45)](_0x228295,_0x42d669);}};_0x1f9697[_0xf2c5(0x46)](_0xf2c5(0x19),_0x1f9697[_0xf2c5(0x47)])?(_0x44863a['error']('\u274C [PIN INPUT] Error handling biometric PIN storage:',_0x2a26f7),_0x1d27ee[_0xf2c5(0x48)](_0x4a8851,_0x1d27ee['eemvU']),_0x1d27ee[_0xf2c5(0x49)](_0x53236d,![])):(console[_0xf2c5(0x4a)]('\u274C [PIN INPUT] Background training failed:',_0x1058ab),_0x1f9697[_0xf2c5(0x4b)](_0x491150,![]));})));},[_0x287362,_0x34a8a3,showBackgroundProgress]);const _0x4220d1=(0x0,_react[_0xf2c5(0x4c)])(_0x5e2628=>{if(_0x590549[_0xf2c5(0x4d)](_0x5e2628['length'],minLength)){if(_0x590549['DPSDD'](_0x590549[_0xf2c5(0x4e)],_0x590549[_0xf2c5(0x4f)]))return'PIN\x20must\x20be\x20at\x20least\x20'+minLength+_0xf2c5(0x15);else{_0x13bffc[_0xf2c5(0x41)]('\u274C [PIN INPUT] Validation failed:',_0x3ac991),_0x590549[_0xf2c5(0x42)](_0x2da2b9,_0x3e8e30);return;}}if(requireSpecialChar&&!/[!@#$%^&*(),.?":{}|<>]/['test'](_0x5e2628))return _0x590549['KHmQl'];if(requireNumber&&!/\d/[_0xf2c5(0x50)](_0x5e2628)){if(_0x590549['GAGnp']==='ukFwD')return'PIN\x20must\x20include\x20a\x20number';else{_0x2c9003['error']('\u274C [PIN INPUT] Face ID not available on this device'),_0x590549[_0xf2c5(0x42)](_0x396c49,_0x590549['QyvTY']),_0x590549[_0xf2c5(0x42)](_0x20ddd1,![]);return;}}return null;},[minLength,requireSpecialChar,requireNumber]),_0x3eae3a=(0x0,_react[_0xf2c5(0x4c)])(async()=>{const _0x1bae22={'HUOUs':function(_0x452c9a,_0x2ca7cc){return _0x590549[_0xf2c5(0x51)](_0x452c9a,_0x2ca7cc);},'MrorK':_0x590549[_0xf2c5(0x52)],'oSZRn':_0xf2c5(0x1b),'RaVYA':_0x590549[_0xf2c5(0x53)],'PNPaA':_0x590549[_0xf2c5(0x54)],'iKwJh':_0x590549[_0xf2c5(0x55)],'owNop':_0xf2c5(0x2c),'hMEFr':_0x590549[_0xf2c5(0x56)],'TVgDH':_0xf2c5(0x57),'rLtgD':_0x590549[_0xf2c5(0x58)],'uHsjY':_0x590549[_0xf2c5(0x59)],'vBgXW':_0x590549[_0xf2c5(0x5a)],'eAcMC':_0x590549[_0xf2c5(0x5b)],'ZfPLV':_0x590549[_0xf2c5(0x5c)]};console[_0xf2c5(0x41)]('\uD83D\uDD0D [PIN INPUT] handleSubmit called with PIN length:',_0x447e55[_0xf2c5(0x5d)]);const _0x24b3da=_0x590549['ihNXE'](_0x4220d1,_0x447e55);if(_0x24b3da){console[_0xf2c5(0x41)]('\u274C [PIN INPUT] Validation failed:',_0x24b3da),_0x590549[_0xf2c5(0x5e)](_0xdd784b,_0x24b3da);return;}console[_0xf2c5(0x41)]('\u2705 [PIN INPUT] PIN validation passed');if(enableBiometricStorage){if(_0x590549[_0xf2c5(0x5f)]!==_0x590549[_0xf2c5(0x5f)]){const _0xf37788={'KdvYE':function(_0x201dd6,_0x3bf399){return _0x590549[_0xf2c5(0x60)](_0x201dd6,_0x3bf399);}};_0x1a393d[_0xf2c5(0x41)]('\uD83D\uDE80 [PIN INPUT] Background training explicitly requested...'),_0x1cbed8(!![]),_0x590549[_0xf2c5(0x61)](_0x3cd6c8)[_0xf2c5(0x43)](_0x5ccdc4=>{_0x5416b9['error']('\u274C [PIN INPUT] Background training failed:',_0x5ccdc4),_0xf37788[_0xf2c5(0x62)](_0x3861ad,![]);});}else{console[_0xf2c5(0x41)]('\uD83D\uDD10 [PIN INPUT] Biometric storage enabled, starting biometric flow...'),_0x590549[_0xf2c5(0x63)](_0xfbcb0,!![]),_0x1638ed(_0x590549[_0xf2c5(0x64)]);try{if(_0x590549[_0xf2c5(0x3f)](_0x590549[_0xf2c5(0x65)],_0x590549[_0xf2c5(0x66)]))_0x590549[_0xf2c5(0x67)](_0x2d5528,!_0x25e3e8)&&_0x46facc&&(_0x589faa[_0xf2c5(0x41)]('\uD83D\uDE80 [PIN INPUT] Background training explicitly requested...'),_0x590549[_0xf2c5(0x68)](_0x119866,!![]),_0x590549[_0xf2c5(0x69)](_0x4cb77a)[_0xf2c5(0x43)](_0x518693=>{_0x7c14ed[_0xf2c5(0x4a)]('\u274C [PIN INPUT] Background training failed:',_0x518693),_0x4f1983(![]);}));else{const _0x3fa392=await _biometricPinService[_0xf2c5(0x6a)][_0xf2c5(0x6b)]();console['log']('\uD83D\uDCF1 [PIN INPUT] Biometric available:',_0x3fa392);if(!_0x3fa392){if(_0x590549[_0xf2c5(0x6c)](_0x590549['xVIte'],_0x590549[_0xf2c5(0x6d)])){if(_0x1bae22['HUOUs'](_0x147596[_0xf2c5(0x5d)],_0x316142))return _0xf2c5(0x14)+_0x370968+_0xf2c5(0x15);if(_0x5b2d40&&!/[!@#$%^&*(),.?":{}|<>]/['test'](_0xe62a27))return'PIN\x20must\x20include\x20a\x20special\x20character';if(_0x54a25a&&!/\d/[_0xf2c5(0x50)](_0x3877e3))return _0x1bae22[_0xf2c5(0x6e)];return null;}else{console[_0xf2c5(0x4a)]('\u274C [PIN INPUT] Face ID not available on this device'),_0x590549[_0xf2c5(0x60)](_0x1638ed,'biometric-unavailable'),_0x590549[_0xf2c5(0x60)](_0xfbcb0,![]);return;}}console[_0xf2c5(0x41)]('\uD83D\uDD10 [PIN INPUT] Triggering biometric authentication for PIN storage...');const _0xe3b177=await _biometricPinService[_0xf2c5(0x6a)][_0xf2c5(0x6f)](_0x447e55);if(_0xe3b177){console[_0xf2c5(0x41)]('\u2705 [PIN INPUT] PIN stored successfully with biometric protection');const _0x3edab1=await _biometricPinService['biometricPinService'][_0xf2c5(0x70)]();_0x3edab1?(console[_0xf2c5(0x41)]('\u2705 [PIN INPUT] PIN storage verified - proceeding with onboarding'),_0x590549[_0xf2c5(0x3c)](_0x3ccd7b,_0x447e55)):(console[_0xf2c5(0x4a)]('\u274C [PIN INPUT] PIN storage verification failed'),_0x590549[_0xf2c5(0x71)](_0x1638ed,_0xf2c5(0x18)),_0x590549[_0xf2c5(0x72)](_0xfbcb0,![]));}else{if(_0x590549[_0xf2c5(0x3f)](_0x590549[_0xf2c5(0x73)],'xkkqe'))console['warn']('\u26A0️ [PIN INPUT] Biometric authentication failed or was cancelled'),_0x590549[_0xf2c5(0x74)](_0x1638ed,_0x590549['oxRon']),_0x590549[_0xf2c5(0x75)](_0xfbcb0,![]);else{if(_0x2f3d76['has'](_0x2cc669))return _0x5f8bd4['get'](_0x565a67);_0x416172['set'](_0x377e2b,_0x298544);}}}}catch(_0x4d8a19){console['error']('\u274C [PIN INPUT] Error handling biometric PIN storage:',_0x4d8a19),_0x590549['KRgfC'](_0x1638ed,_0x590549['nDuaP']),_0xfbcb0(![]);}}}else{if(_0x590549[_0xf2c5(0x76)]!==_0x590549[_0xf2c5(0x77)])console[_0xf2c5(0x41)]('\uD83D\uDD10 [PIN INPUT] Biometric storage disabled, proceeding normally'),_0x590549[_0xf2c5(0x72)](_0x3ccd7b,_0x447e55);else switch(_0x3b1b8e){case _0x1bae22[_0xf2c5(0x78)]:return{'title':_0x1bae22[_0xf2c5(0x79)],'message':_0xf2c5(0x2b),'type':_0x1bae22[_0xf2c5(0x7a)],'showActions':!![]};case _0x1bae22[_0xf2c5(0x7b)]:return{'title':_0x1bae22[_0xf2c5(0x7c)],'message':_0x1bae22[_0xf2c5(0x7d)],'type':_0x1bae22[_0xf2c5(0x7a)],'showActions':!![]};case _0xf2c5(0x18):return{'title':_0x1bae22['TVgDH'],'message':_0x1bae22[_0xf2c5(0x7e)],'type':_0x1bae22[_0xf2c5(0x7f)],'showActions':!![]};case _0xf2c5(0x23):return{'title':_0x1bae22[_0xf2c5(0x80)],'message':'Please\x20complete\x20biometric\x20authentication\x20to\x20secure\x20your\x20PIN.','type':_0x1bae22[_0xf2c5(0x81)],'showActions':![]};default:return{'title':_0xf2c5(0x82),'message':_0x1bae22['ZfPLV'],'type':_0xf2c5(0x21),'showActions':![]};}}},[_0x447e55,_0x4220d1,_0x3ccd7b,enableBiometricStorage]),_0x26b5d9=(0x0,_react[_0xf2c5(0x4c)])(_0xb115c0=>{_0x590549['ATjVX'](_0x37df3f,_0xb115c0),_0x590549['KOdch'](_0xdd784b,null),_0x590549['lxXgd'](_0x1638ed,_0x590549['LhgNs']),console[_0xf2c5(0x41)]('\uD83D\uDD0D [PIN INPUT] PIN changed:',{'length':_0xb115c0[_0xf2c5(0x5d)],'hasSpecialChar':/[!@#$%^&*(),.?":{}|<>]/[_0xf2c5(0x50)](_0xb115c0),'hasNumber':/\d/[_0xf2c5(0x50)](_0xb115c0),'isValid':!_0x4220d1(_0xb115c0)});},[_0x4220d1]),_0x34cc89=(0x0,_react[_0xf2c5(0x4c)])(()=>{console[_0xf2c5(0x83)]('\u26A0️ [PIN INPUT] User chose to continue without biometric security'),_0x590549[_0xf2c5(0x84)](_0x3ccd7b,_0x447e55);},[_0x447e55,_0x3ccd7b]),_0x2883f3=(0x0,_react[_0xf2c5(0x4c)])(()=>{const _0x14c219={'nzwqp':function(_0x3e662c,_0xcdca17){return _0x590549['ipdYn'](_0x3e662c,_0xcdca17);},'psZMV':_0x590549[_0xf2c5(0x85)],'xeEJQ':function(_0x25aa4a,_0x368119){return _0x25aa4a!==_0x368119;},'dwNTB':function(_0x129926,_0x103db4,_0x23a344,_0x7d2541){return _0x590549[_0xf2c5(0x86)](_0x129926,_0x103db4,_0x23a344,_0x7d2541);}};if(_0x590549[_0xf2c5(0x6c)](_0x590549[_0xf2c5(0x87)],_0x590549[_0xf2c5(0x87)])){if(_0x14c219['nzwqp'](!_0x33028c,_0x5bd721)&&_0x12975f[_0xf2c5(0x0)])return _0x47b57f;var _0x9eaefe,_0x5d41b3,_0x31110d={'__proto__':null,'default':_0x13a6ba};if(null===_0x333277||_0x14c219['psZMV']!=typeof _0x13527c&&'function'!=typeof _0x48e1d3)return _0x31110d;if(_0x9eaefe=_0x14e026?_0x3a2e3c:_0x329c28){if(_0x9eaefe[_0xf2c5(0xc)](_0x289375))return _0x9eaefe[_0xf2c5(0x12)](_0x4c0306);_0x9eaefe[_0xf2c5(0xd)](_0x4e071d,_0x31110d);}for(const _0x5e7758 in _0x1ea41a)_0x14c219[_0xf2c5(0x88)](_0xf2c5(0x5),_0x5e7758)&&{}[_0xf2c5(0xf)][_0xf2c5(0x10)](_0x922b7,_0x5e7758)&&((_0x5d41b3=(_0x9eaefe=_0x332649[_0xf2c5(0x11)])&&_0x262d13['getOwnPropertyDescriptor'](_0x172f72,_0x5e7758))&&(_0x5d41b3[_0xf2c5(0x12)]||_0x5d41b3[_0xf2c5(0xd)])?_0x14c219[_0xf2c5(0x89)](_0x9eaefe,_0x31110d,_0x5e7758,_0x5d41b3):_0x31110d[_0x5e7758]=_0x34664e[_0x5e7758]);return _0x31110d;}else _0x1638ed(_0x590549[_0xf2c5(0x8a)]),_0x3eae3a();},[_0x3eae3a]),_0x4a4a9f=()=>{const _0x10edff={'GPray':function(_0x1f8de3,_0x49d87d){return _0x590549[_0xf2c5(0x8b)](_0x1f8de3,_0x49d87d);}};if(_0x590549[_0xf2c5(0x6c)](_0x590549[_0xf2c5(0x8c)],_0x590549[_0xf2c5(0x8d)]))switch(_0x3028c4){case _0x590549[_0xf2c5(0x8e)]:return{'title':_0x590549[_0xf2c5(0x53)],'message':_0x590549[_0xf2c5(0x8f)],'type':_0x590549[_0xf2c5(0x54)],'showActions':!![]};case _0x590549[_0xf2c5(0x55)]:return{'title':_0x590549[_0xf2c5(0x90)],'message':_0x590549['MSOSY'],'type':_0x590549[_0xf2c5(0x54)],'showActions':!![]};case _0xf2c5(0x18):return{'title':_0xf2c5(0x57),'message':_0x590549['hmzPQ'],'type':_0x590549[_0xf2c5(0x59)],'showActions':!![]};case _0x590549['UaUCI']:return{'title':_0x590549[_0xf2c5(0x5a)],'message':_0x590549[_0xf2c5(0x91)],'type':_0x590549[_0xf2c5(0x5b)],'showActions':![]};default:return{'title':_0x590549[_0xf2c5(0x92)],'message':_0x590549[_0xf2c5(0x5c)],'type':_0x590549[_0xf2c5(0x5b)],'showActions':![]};}else _0x347dd5['log']('\u2705 [PIN INPUT] PIN storage verified - proceeding with onboarding'),_0x10edff['GPray'](_0x327531,_0x486beb);},_0x54504d=_0x590549[_0xf2c5(0x93)](_0x4a4a9f);return _react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x95)],{'style':styles[_0xf2c5(0x96)]},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x95)],{'style':styles[_0xf2c5(0x97)]},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x95)],{'style':styles[_0xf2c5(0x98)]},_0x88d29e&&_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x99)],{'style':styles['backButton'],'onPress':_0x88d29e},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x9a)],{'style':{'fontSize':0x18}},'←')),_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x9a)],{'style':styles['title']},_0x590549[_0xf2c5(0x9b)])),_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x9a)],{'style':styles['subtitle']},_0x590549['eEnxw']),_0x590549[_0xf2c5(0x67)](showBackgroundProgress,_0x34a8a3)&&_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x95)],{'style':styles[_0xf2c5(0x9c)]},_react['default'][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x9a)],{'style':styles[_0xf2c5(0x9d)]},backgroundProgressText),_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative['View'],{'style':styles['backgroundProgressIndicator']},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative['ActivityIndicator'],{'size':_0x590549[_0xf2c5(0x9e)],'color':_0x590549[_0xf2c5(0x9f)]}))),_react['default'][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x95)],{'style':styles[_0xf2c5(0xa0)]},_react['default'][_0xf2c5(0x94)](_reactNative[_0xf2c5(0xa1)],{'style':styles[_0xf2c5(0xa2)],'value':_0x447e55,'onChangeText':_0x26b5d9,'secureTextEntry':!_0x4d0c19,'placeholder':_0x590549['KCNRE'],'keyboardType':_0x590549[_0xf2c5(0x8a)],'maxLength':0x14,'autoCapitalize':_0x590549[_0xf2c5(0xa3)],'autoCorrect':![],'returnKeyType':_0xf2c5(0xa4),'onSubmitEditing':()=>_reactNative[_0xf2c5(0xa5)]['dismiss']()}),_react['default'][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x99)],{'style':styles[_0xf2c5(0xa6)],'onPress':()=>_0xb50ac4(!_0x4d0c19)},_react[_0xf2c5(0x5)]['createElement'](_reactNative['Text'],null,_0x4d0c19?_0x590549[_0xf2c5(0xa7)]:_0x590549[_0xf2c5(0xa8)])))),_0x2bf7a0&&_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x9a)],{'style':styles[_0xf2c5(0x4a)]},_0x2bf7a0),_react[_0xf2c5(0x5)]['createElement'](_reactNative[_0xf2c5(0x95)],{'style':styles['requirements']},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative['Text'],{'style':styles[_0xf2c5(0xa9)]},_0x590549[_0xf2c5(0xaa)]),_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative['Text'],{'style':[styles[_0xf2c5(0xab)],_0x590549[_0xf2c5(0xac)](_0x447e55[_0xf2c5(0x5d)],minLength)&&styles['requirementMet']]},_0x590549[_0xf2c5(0xad)],minLength,_0x590549[_0xf2c5(0xae)]),requireSpecialChar&&_react['default'][_0xf2c5(0x94)](_reactNative['Text'],{'style':[styles['requirement'],/[!@#$%^&*(),.?":{}|<>]/[_0xf2c5(0x50)](_0x447e55)&&styles[_0xf2c5(0xaf)]]},_0x590549[_0xf2c5(0xb0)]),requireNumber&&_react[_0xf2c5(0x5)]['createElement'](_reactNative[_0xf2c5(0x9a)],{'style':[styles[_0xf2c5(0xab)],/\d/[_0xf2c5(0x50)](_0x447e55)&&styles[_0xf2c5(0xaf)]]},'•\x20Include\x20a\x20number')),_react['default'][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x95)],{'style':[styles[_0xf2c5(0xb1)],_0x54504d[_0xf2c5(0xb2)]===_0xf2c5(0x21)&&styles[_0xf2c5(0xb3)],_0x590549[_0xf2c5(0xb4)](_0x54504d['type'],_0xf2c5(0x1d))&&styles[_0xf2c5(0xb5)],_0x590549['DoWeo'](_0x54504d[_0xf2c5(0xb2)],_0x590549['nbWXB'])&&styles[_0xf2c5(0xb6)]]},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x9a)],{'style':[styles[_0xf2c5(0xb7)],_0x54504d['type']===_0x590549[_0xf2c5(0x5b)]&&styles[_0xf2c5(0xb8)],_0x54504d[_0xf2c5(0xb2)]===_0x590549['udMnB']&&styles[_0xf2c5(0xb9)],_0x590549[_0xf2c5(0xba)](_0x54504d[_0xf2c5(0xb2)],_0x590549[_0xf2c5(0x59)])&&styles[_0xf2c5(0xbb)]]},_0x54504d[_0xf2c5(0xbc)]),_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x9a)],{'style':[styles['infoMessage'],_0x54504d[_0xf2c5(0xb2)]==='info'&&styles[_0xf2c5(0xbd)],_0x590549['XzFxX'](_0x54504d[_0xf2c5(0xb2)],_0x590549[_0xf2c5(0x54)])&&styles[_0xf2c5(0xbe)],_0x590549['tRogs'](_0x54504d[_0xf2c5(0xb2)],_0x590549[_0xf2c5(0x59)])&&styles[_0xf2c5(0xbf)]]},_0x54504d[_0xf2c5(0xc0)]),_0x54504d[_0xf2c5(0xc1)]&&_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x95)],{'style':styles['infoActions']},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x99)],{'style':styles[_0xf2c5(0xc2)],'onPress':_0x2883f3},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative['Text'],{'style':styles[_0xf2c5(0xc3)]},_0x590549['ToocW'])),_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x99)],{'style':[styles[_0xf2c5(0xc2)],styles[_0xf2c5(0xc4)]],'onPress':_0x34cc89},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative['Text'],{'style':[styles[_0xf2c5(0xc3)],styles[_0xf2c5(0xc5)]]},_0xf2c5(0xc6))))),_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x95)],{'style':styles['footer']},_0x88d29e&&_react['default'][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x99)],{'style':styles[_0xf2c5(0xc7)],'onPress':_0x88d29e},_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative['Text'],{'style':styles[_0xf2c5(0xc8)]},_0xf2c5(0xc9))),_react[_0xf2c5(0x5)][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x99)],{'style':[styles[_0xf2c5(0xca)],(_0x590549['MmMrb'](!_0x447e55,_0x27c6e3)||_0x590549[_0xf2c5(0xcb)](_0x4220d1,_0x447e55))&&styles[_0xf2c5(0xcc)]],'onPress':_0x3eae3a,'disabled':_0x590549[_0xf2c5(0xcd)](!_0x447e55,_0x27c6e3)||!!_0x4220d1(_0x447e55)},_react['default'][_0xf2c5(0x94)](_reactNative[_0xf2c5(0x9a)],{'style':styles[_0xf2c5(0xce)]},_0x27c6e3?_0x590549[_0xf2c5(0x5a)]:_0x590549['WuYrA']))));};exports['PinInput']=PinInput;const styles=_reactNative[_0xf2c5(0xcf)][_0xf2c5(0xd0)]({'container':{'flex':0x1,'padding':0x10,'width':width,'backgroundColor':_0xf2c5(0xd1),'justifyContent':'flex-start'},'inputSection':{'width':'100%','marginTop':0x0,'paddingTop':0x0},'header':{'flexDirection':_0xf2c5(0xd2),'alignItems':_0xf2c5(0xd3),'justifyContent':_0xf2c5(0xd4),'marginBottom':0x10,'paddingVertical':0x8},'backButton':{'padding':0x8},'title':{'fontSize':0x14,'fontWeight':_0xf2c5(0xd5),'color':_0xf2c5(0xd6),'textAlign':_0xf2c5(0xd3),'flex':0x1,'marginBottom':0x8},'subtitle':{'fontSize':0xe,'color':_0xf2c5(0xd7),'marginBottom':0x18,'textAlign':_0xf2c5(0xd3)},'inputContainer':{'flexDirection':_0xf2c5(0xd2),'alignItems':_0xf2c5(0xd3),'borderWidth':0x1,'borderColor':_0xf2c5(0xd8),'borderRadius':0x8,'marginBottom':0x10},'input':{'flex':0x1,'padding':0xc,'fontSize':0x10},'visibilityButton':{'padding':0xc},'infoContainer':{'padding':0x10,'borderRadius':0xc,'marginBottom':0x10,'borderWidth':0x1},'infoContainerInfo':{'backgroundColor':_0xf2c5(0xd9),'borderColor':_0xf2c5(0xda)},'infoContainerWarning':{'backgroundColor':_0xf2c5(0xdb),'borderColor':_0xf2c5(0xdc)},'infoContainerError':{'backgroundColor':'#FFEBEE','borderColor':_0xf2c5(0xdd)},'infoTitle':{'fontSize':0x10,'fontWeight':_0xf2c5(0xd5),'marginBottom':0x8},'infoTitleInfo':{'color':_0xf2c5(0xde)},'infoTitleWarning':{'color':_0xf2c5(0xdf)},'infoTitleError':{'color':_0xf2c5(0xe0)},'infoMessage':{'fontSize':0xe,'lineHeight':0x14,'marginBottom':0xc},'infoMessageInfo':{'color':_0xf2c5(0xe1)},'infoMessageWarning':{'color':'#E65100'},'infoMessageError':{'color':'#C62828'},'infoActions':{'flexDirection':_0xf2c5(0xd2),'justifyContent':_0xf2c5(0xd4),'marginTop':0x8},'infoActionButton':{'flex':0x1,'paddingVertical':0xa,'paddingHorizontal':0x10,'borderRadius':0x8,'backgroundColor':_0xf2c5(0x31),'marginHorizontal':0x4,'alignItems':_0xf2c5(0xd3)},'infoActionButtonSecondary':{'backgroundColor':_0xf2c5(0xe2),'borderWidth':0x1,'borderColor':_0xf2c5(0x31)},'infoActionButtonText':{'color':_0xf2c5(0xd1),'fontSize':0xe,'fontWeight':_0xf2c5(0xd5)},'infoActionButtonSecondaryText':{'color':_0xf2c5(0x31)},'error':{'color':_0xf2c5(0xe3),'marginBottom':0x10},'requirements':{'marginBottom':0x18},'requirementTitle':{'fontSize':0xe,'fontWeight':_0xf2c5(0xd5),'marginBottom':0x8,'color':_0xf2c5(0xd6)},'requirement':{'fontSize':0xe,'color':_0xf2c5(0xd7),'marginBottom':0x4},'requirementMet':{'color':'#34C759'},'footer':{'flexDirection':_0xf2c5(0xd2),'alignItems':_0xf2c5(0xd3),'justifyContent':_0xf2c5(0xd4),'marginTop':0x18,'borderTopWidth':0x1,'borderTopColor':'#eee','paddingTop':0x10},'cancelButton':{'paddingVertical':0x8,'paddingHorizontal':0x10},'cancelButtonText':{'color':_0xf2c5(0xd7),'fontSize':0x10},'submitButton':{'paddingVertical':0x10,'paddingHorizontal':0x20,'borderRadius':0x10,'backgroundColor':'#000000','alignItems':_0xf2c5(0xd3)},'submitButtonDisabled':{'opacity':0.5},'submitButtonText':{'color':'#fff','fontSize':0x10,'fontWeight':'600'},'backgroundProgressContainer':{'flexDirection':'row','alignItems':'center','justifyContent':_0xf2c5(0xd3),'marginBottom':0x10},'backgroundProgressText':{'fontSize':0xe,'color':_0xf2c5(0xd7),'marginRight':0xa},'backgroundProgressIndicator':{'padding':0x5}});
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PinInput = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _biometricPinService = require("../services/biometricPinService");
|
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
+
const {
|
|
12
|
+
width
|
|
13
|
+
} = _reactNative.Dimensions.get('window');
|
|
14
|
+
const PinInput = ({
|
|
15
|
+
onSubmit,
|
|
16
|
+
minLength = 8,
|
|
17
|
+
requireSpecialChar = true,
|
|
18
|
+
requireNumber = true,
|
|
19
|
+
onBack,
|
|
20
|
+
enableBiometricStorage = true,
|
|
21
|
+
// ✅ NEW: Background training optimization props
|
|
22
|
+
onBackgroundTrainingStart,
|
|
23
|
+
showBackgroundProgress = false,
|
|
24
|
+
backgroundProgressText = "Training is starting in the background..."
|
|
25
|
+
}) => {
|
|
26
|
+
const [pin, setPin] = (0, _react.useState)('');
|
|
27
|
+
const [error, setError] = (0, _react.useState)(null);
|
|
28
|
+
const [showPin, setShowPin] = (0, _react.useState)(false);
|
|
29
|
+
const [isStoringPin, setIsStoringPin] = (0, _react.useState)(false);
|
|
30
|
+
const [infoStatus, setInfoStatus] = (0, _react.useState)('default');
|
|
31
|
+
// ✅ NEW: Background training state
|
|
32
|
+
const [isBackgroundTrainingStarted, setIsBackgroundTrainingStarted] = (0, _react.useState)(false);
|
|
33
|
+
|
|
34
|
+
// ✅ UPDATED: Make background training conditional, not automatic on mount
|
|
35
|
+
_react.default.useEffect(() => {
|
|
36
|
+
// Only start background training if explicitly requested and not already started
|
|
37
|
+
// This prevents automatic training on component mount
|
|
38
|
+
if (onBackgroundTrainingStart && !isBackgroundTrainingStarted && showBackgroundProgress) {
|
|
39
|
+
console.log('🚀 [PIN INPUT] Background training explicitly requested...');
|
|
40
|
+
setIsBackgroundTrainingStarted(true);
|
|
41
|
+
onBackgroundTrainingStart().catch(error => {
|
|
42
|
+
console.error('❌ [PIN INPUT] Background training failed:', error);
|
|
43
|
+
setIsBackgroundTrainingStarted(false);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}, [onBackgroundTrainingStart, isBackgroundTrainingStarted, showBackgroundProgress]);
|
|
47
|
+
const validatePin = (0, _react.useCallback)(value => {
|
|
48
|
+
if (value.length < minLength) {
|
|
49
|
+
return `PIN must be at least ${minLength} characters`;
|
|
50
|
+
}
|
|
51
|
+
if (requireSpecialChar && !/[!@#$%^&*(),.?":{}|<>]/.test(value)) {
|
|
52
|
+
return 'PIN must include a special character';
|
|
53
|
+
}
|
|
54
|
+
if (requireNumber && !/\d/.test(value)) {
|
|
55
|
+
return 'PIN must include a number';
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}, [minLength, requireSpecialChar, requireNumber]);
|
|
59
|
+
const handleSubmit = (0, _react.useCallback)(async () => {
|
|
60
|
+
console.log('🔍 [PIN INPUT] handleSubmit called with PIN length:', pin.length);
|
|
61
|
+
const validationError = validatePin(pin);
|
|
62
|
+
if (validationError) {
|
|
63
|
+
console.log('❌ [PIN INPUT] Validation failed:', validationError);
|
|
64
|
+
setError(validationError);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
console.log('✅ [PIN INPUT] PIN validation passed');
|
|
68
|
+
|
|
69
|
+
// If biometric storage is enabled, store PIN securely
|
|
70
|
+
if (enableBiometricStorage) {
|
|
71
|
+
console.log('🔐 [PIN INPUT] Biometric storage enabled, starting biometric flow...');
|
|
72
|
+
setIsStoringPin(true);
|
|
73
|
+
setInfoStatus('authenticating');
|
|
74
|
+
try {
|
|
75
|
+
// Check if biometric is available
|
|
76
|
+
const biometricAvailable = await _biometricPinService.biometricPinService.isBiometricAvailable();
|
|
77
|
+
console.log('📱 [PIN INPUT] Biometric available:', biometricAvailable);
|
|
78
|
+
if (!biometricAvailable) {
|
|
79
|
+
console.error('❌ [PIN INPUT] Face ID not available on this device');
|
|
80
|
+
setInfoStatus('biometric-unavailable');
|
|
81
|
+
setIsStoringPin(false);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Immediately attempt to store PIN with biometric authentication
|
|
86
|
+
console.log('🔐 [PIN INPUT] Triggering biometric authentication for PIN storage...');
|
|
87
|
+
const stored = await _biometricPinService.biometricPinService.storePinWithBiometric(pin);
|
|
88
|
+
if (stored) {
|
|
89
|
+
console.log('✅ [PIN INPUT] PIN stored successfully with biometric protection');
|
|
90
|
+
|
|
91
|
+
// Verify the PIN was actually stored by checking if it can be retrieved
|
|
92
|
+
const isStored = await _biometricPinService.biometricPinService.isPinStored();
|
|
93
|
+
if (isStored) {
|
|
94
|
+
console.log('✅ [PIN INPUT] PIN storage verified - proceeding with onboarding');
|
|
95
|
+
onSubmit(pin);
|
|
96
|
+
} else {
|
|
97
|
+
console.error('❌ [PIN INPUT] PIN storage verification failed');
|
|
98
|
+
setInfoStatus('storage-error');
|
|
99
|
+
setIsStoringPin(false);
|
|
100
|
+
}
|
|
101
|
+
} else {
|
|
102
|
+
// Biometric authentication was cancelled or failed
|
|
103
|
+
console.warn('⚠️ [PIN INPUT] Biometric authentication failed or was cancelled');
|
|
104
|
+
setInfoStatus('biometric-failed');
|
|
105
|
+
setIsStoringPin(false);
|
|
106
|
+
}
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error('❌ [PIN INPUT] Error handling biometric PIN storage:', error);
|
|
109
|
+
setInfoStatus('storage-error');
|
|
110
|
+
setIsStoringPin(false);
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
// Biometric storage disabled, proceed normally
|
|
114
|
+
console.log('🔐 [PIN INPUT] Biometric storage disabled, proceeding normally');
|
|
115
|
+
onSubmit(pin);
|
|
116
|
+
}
|
|
117
|
+
}, [pin, validatePin, onSubmit, enableBiometricStorage]);
|
|
118
|
+
const handlePinChange = (0, _react.useCallback)(value => {
|
|
119
|
+
setPin(value);
|
|
120
|
+
setError(null);
|
|
121
|
+
setInfoStatus('default');
|
|
122
|
+
|
|
123
|
+
// Debug logging to help troubleshoot
|
|
124
|
+
console.log('🔍 [PIN INPUT] PIN changed:', {
|
|
125
|
+
length: value.length,
|
|
126
|
+
hasSpecialChar: /[!@#$%^&*(),.?":{}|<>]/.test(value),
|
|
127
|
+
hasNumber: /\d/.test(value),
|
|
128
|
+
isValid: !validatePin(value)
|
|
129
|
+
});
|
|
130
|
+
}, [validatePin]);
|
|
131
|
+
const handleContinueWithoutBiometric = (0, _react.useCallback)(() => {
|
|
132
|
+
console.warn('⚠️ [PIN INPUT] User chose to continue without biometric security');
|
|
133
|
+
onSubmit(pin);
|
|
134
|
+
}, [pin, onSubmit]);
|
|
135
|
+
const handleRetry = (0, _react.useCallback)(() => {
|
|
136
|
+
setInfoStatus('default');
|
|
137
|
+
handleSubmit();
|
|
138
|
+
}, [handleSubmit]);
|
|
139
|
+
const getInfoMessage = () => {
|
|
140
|
+
switch (infoStatus) {
|
|
141
|
+
case 'biometric-unavailable':
|
|
142
|
+
return {
|
|
143
|
+
title: 'Biometric Authentication Not Available',
|
|
144
|
+
message: 'This device does not support Face ID or Touch ID. Please enable biometric authentication in your device settings to secure your PIN.',
|
|
145
|
+
type: 'warning',
|
|
146
|
+
showActions: true
|
|
147
|
+
};
|
|
148
|
+
case 'biometric-failed':
|
|
149
|
+
return {
|
|
150
|
+
title: 'Biometric Authentication Failed',
|
|
151
|
+
message: 'Biometric authentication was cancelled or failed. Your PIN needs to be secured with biometric authentication to proceed.',
|
|
152
|
+
type: 'warning',
|
|
153
|
+
showActions: true
|
|
154
|
+
};
|
|
155
|
+
case 'storage-error':
|
|
156
|
+
return {
|
|
157
|
+
title: 'Storage Error',
|
|
158
|
+
message: 'An error occurred while securing your PIN. Would you like to try again?',
|
|
159
|
+
type: 'error',
|
|
160
|
+
showActions: true
|
|
161
|
+
};
|
|
162
|
+
case 'authenticating':
|
|
163
|
+
return {
|
|
164
|
+
title: 'Authenticating...',
|
|
165
|
+
message: 'Please complete biometric authentication to secure your PIN.',
|
|
166
|
+
type: 'info',
|
|
167
|
+
showActions: false
|
|
168
|
+
};
|
|
169
|
+
default:
|
|
170
|
+
return {
|
|
171
|
+
title: 'Secure PIN Storage',
|
|
172
|
+
message: 'Your PIN will be securely stored locally on your device using biometric authentication (Face ID or Touch ID) for enhanced security.',
|
|
173
|
+
type: 'info',
|
|
174
|
+
showActions: false
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const infoMessage = getInfoMessage();
|
|
179
|
+
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
180
|
+
style: styles.container
|
|
181
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
182
|
+
style: styles.inputSection
|
|
183
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
184
|
+
style: styles.header
|
|
185
|
+
}, onBack && /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
186
|
+
style: styles.backButton,
|
|
187
|
+
onPress: onBack
|
|
188
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
189
|
+
style: {
|
|
190
|
+
fontSize: 24
|
|
191
|
+
}
|
|
192
|
+
}, "\u2190")), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
193
|
+
style: styles.title
|
|
194
|
+
}, "Create a PIN")), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
195
|
+
style: styles.subtitle
|
|
196
|
+
}, "A PIN so only you have access to your data"), showBackgroundProgress && isBackgroundTrainingStarted && /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
197
|
+
style: styles.backgroundProgressContainer
|
|
198
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
199
|
+
style: styles.backgroundProgressText
|
|
200
|
+
}, backgroundProgressText), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
201
|
+
style: styles.backgroundProgressIndicator
|
|
202
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.ActivityIndicator, {
|
|
203
|
+
size: "small",
|
|
204
|
+
color: "#007AFF"
|
|
205
|
+
}))), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
206
|
+
style: styles.inputContainer
|
|
207
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.TextInput, {
|
|
208
|
+
style: styles.input,
|
|
209
|
+
value: pin,
|
|
210
|
+
onChangeText: handlePinChange,
|
|
211
|
+
secureTextEntry: !showPin,
|
|
212
|
+
placeholder: "e.g. MyPin123!",
|
|
213
|
+
keyboardType: "default",
|
|
214
|
+
maxLength: 20,
|
|
215
|
+
autoCapitalize: "none",
|
|
216
|
+
autoCorrect: false,
|
|
217
|
+
returnKeyType: "done",
|
|
218
|
+
onSubmitEditing: () => _reactNative.Keyboard.dismiss()
|
|
219
|
+
}), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
220
|
+
style: styles.visibilityButton,
|
|
221
|
+
onPress: () => setShowPin(!showPin)
|
|
222
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, showPin ? '👁️' : '👁️🗨️')))), error && /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
223
|
+
style: styles.error
|
|
224
|
+
}, error), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
225
|
+
style: styles.requirements
|
|
226
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
227
|
+
style: styles.requirementTitle
|
|
228
|
+
}, "PIN Requirements:"), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
229
|
+
style: [styles.requirement, pin.length >= minLength && styles.requirementMet]
|
|
230
|
+
}, "\u2022 At least ", minLength, " characters"), requireSpecialChar && /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
231
|
+
style: [styles.requirement, /[!@#$%^&*(),.?":{}|<>]/.test(pin) && styles.requirementMet]
|
|
232
|
+
}, "\u2022 Include a special character"), requireNumber && /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
233
|
+
style: [styles.requirement, /\d/.test(pin) && styles.requirementMet]
|
|
234
|
+
}, "\u2022 Include a number")), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
235
|
+
style: [styles.infoContainer, infoMessage.type === 'info' && styles.infoContainerInfo, infoMessage.type === 'warning' && styles.infoContainerWarning, infoMessage.type === 'error' && styles.infoContainerError]
|
|
236
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
237
|
+
style: [styles.infoTitle, infoMessage.type === 'info' && styles.infoTitleInfo, infoMessage.type === 'warning' && styles.infoTitleWarning, infoMessage.type === 'error' && styles.infoTitleError]
|
|
238
|
+
}, infoMessage.title), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
239
|
+
style: [styles.infoMessage, infoMessage.type === 'info' && styles.infoMessageInfo, infoMessage.type === 'warning' && styles.infoMessageWarning, infoMessage.type === 'error' && styles.infoMessageError]
|
|
240
|
+
}, infoMessage.message), infoMessage.showActions && /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
241
|
+
style: styles.infoActions
|
|
242
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
243
|
+
style: styles.infoActionButton,
|
|
244
|
+
onPress: handleRetry
|
|
245
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
246
|
+
style: styles.infoActionButtonText
|
|
247
|
+
}, "Try Again")), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
248
|
+
style: [styles.infoActionButton, styles.infoActionButtonSecondary],
|
|
249
|
+
onPress: handleContinueWithoutBiometric
|
|
250
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
251
|
+
style: [styles.infoActionButtonText, styles.infoActionButtonSecondaryText]
|
|
252
|
+
}, "Continue Without Biometric")))), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
253
|
+
style: styles.footer
|
|
254
|
+
}, onBack && /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
255
|
+
style: styles.cancelButton,
|
|
256
|
+
onPress: onBack
|
|
257
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
258
|
+
style: styles.cancelButtonText
|
|
259
|
+
}, "Back")), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
260
|
+
style: [styles.submitButton, (!pin || isStoringPin || validatePin(pin)) && styles.submitButtonDisabled],
|
|
261
|
+
onPress: handleSubmit,
|
|
262
|
+
disabled: !pin || isStoringPin || !!validatePin(pin)
|
|
263
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
|
|
264
|
+
style: styles.submitButtonText
|
|
265
|
+
}, isStoringPin ? 'Authenticating...' : 'Continue'))));
|
|
266
|
+
};
|
|
267
|
+
exports.PinInput = PinInput;
|
|
268
|
+
const styles = _reactNative.StyleSheet.create({
|
|
269
|
+
container: {
|
|
270
|
+
flex: 1,
|
|
271
|
+
padding: 16,
|
|
272
|
+
width: width,
|
|
273
|
+
backgroundColor: '#fff',
|
|
274
|
+
justifyContent: 'flex-start'
|
|
275
|
+
},
|
|
276
|
+
inputSection: {
|
|
277
|
+
width: '100%',
|
|
278
|
+
marginTop: 0,
|
|
279
|
+
paddingTop: 0
|
|
280
|
+
},
|
|
281
|
+
header: {
|
|
282
|
+
flexDirection: 'row',
|
|
283
|
+
alignItems: 'center',
|
|
284
|
+
justifyContent: 'space-between',
|
|
285
|
+
marginBottom: 16,
|
|
286
|
+
paddingVertical: 8
|
|
287
|
+
},
|
|
288
|
+
backButton: {
|
|
289
|
+
padding: 8
|
|
290
|
+
},
|
|
291
|
+
title: {
|
|
292
|
+
fontSize: 20,
|
|
293
|
+
fontWeight: '600',
|
|
294
|
+
color: '#333',
|
|
295
|
+
textAlign: 'center',
|
|
296
|
+
flex: 1,
|
|
297
|
+
marginBottom: 8
|
|
298
|
+
},
|
|
299
|
+
subtitle: {
|
|
300
|
+
fontSize: 14,
|
|
301
|
+
color: '#666',
|
|
302
|
+
marginBottom: 24,
|
|
303
|
+
textAlign: 'center'
|
|
304
|
+
},
|
|
305
|
+
inputContainer: {
|
|
306
|
+
flexDirection: 'row',
|
|
307
|
+
alignItems: 'center',
|
|
308
|
+
borderWidth: 1,
|
|
309
|
+
borderColor: '#CCCCCC',
|
|
310
|
+
borderRadius: 8,
|
|
311
|
+
marginBottom: 16
|
|
312
|
+
},
|
|
313
|
+
input: {
|
|
314
|
+
flex: 1,
|
|
315
|
+
padding: 12,
|
|
316
|
+
fontSize: 16
|
|
317
|
+
},
|
|
318
|
+
visibilityButton: {
|
|
319
|
+
padding: 12
|
|
320
|
+
},
|
|
321
|
+
// Info Container Styles
|
|
322
|
+
infoContainer: {
|
|
323
|
+
padding: 16,
|
|
324
|
+
borderRadius: 12,
|
|
325
|
+
marginBottom: 16,
|
|
326
|
+
borderWidth: 1
|
|
327
|
+
},
|
|
328
|
+
infoContainerInfo: {
|
|
329
|
+
backgroundColor: '#E3F2FD',
|
|
330
|
+
borderColor: '#2196F3'
|
|
331
|
+
},
|
|
332
|
+
infoContainerWarning: {
|
|
333
|
+
backgroundColor: '#FFF3E0',
|
|
334
|
+
borderColor: '#FF9800'
|
|
335
|
+
},
|
|
336
|
+
infoContainerError: {
|
|
337
|
+
backgroundColor: '#FFEBEE',
|
|
338
|
+
borderColor: '#F44336'
|
|
339
|
+
},
|
|
340
|
+
infoTitle: {
|
|
341
|
+
fontSize: 16,
|
|
342
|
+
fontWeight: '600',
|
|
343
|
+
marginBottom: 8
|
|
344
|
+
},
|
|
345
|
+
infoTitleInfo: {
|
|
346
|
+
color: '#1976D2'
|
|
347
|
+
},
|
|
348
|
+
infoTitleWarning: {
|
|
349
|
+
color: '#F57C00'
|
|
350
|
+
},
|
|
351
|
+
infoTitleError: {
|
|
352
|
+
color: '#D32F2F'
|
|
353
|
+
},
|
|
354
|
+
infoMessage: {
|
|
355
|
+
fontSize: 14,
|
|
356
|
+
lineHeight: 20,
|
|
357
|
+
marginBottom: 12
|
|
358
|
+
},
|
|
359
|
+
infoMessageInfo: {
|
|
360
|
+
color: '#1565C0'
|
|
361
|
+
},
|
|
362
|
+
infoMessageWarning: {
|
|
363
|
+
color: '#E65100'
|
|
364
|
+
},
|
|
365
|
+
infoMessageError: {
|
|
366
|
+
color: '#C62828'
|
|
367
|
+
},
|
|
368
|
+
infoActions: {
|
|
369
|
+
flexDirection: 'row',
|
|
370
|
+
justifyContent: 'space-between',
|
|
371
|
+
marginTop: 8
|
|
372
|
+
},
|
|
373
|
+
infoActionButton: {
|
|
374
|
+
flex: 1,
|
|
375
|
+
paddingVertical: 10,
|
|
376
|
+
paddingHorizontal: 16,
|
|
377
|
+
borderRadius: 8,
|
|
378
|
+
backgroundColor: '#007AFF',
|
|
379
|
+
marginHorizontal: 4,
|
|
380
|
+
alignItems: 'center'
|
|
381
|
+
},
|
|
382
|
+
infoActionButtonSecondary: {
|
|
383
|
+
backgroundColor: 'transparent',
|
|
384
|
+
borderWidth: 1,
|
|
385
|
+
borderColor: '#007AFF'
|
|
386
|
+
},
|
|
387
|
+
infoActionButtonText: {
|
|
388
|
+
color: '#fff',
|
|
389
|
+
fontSize: 14,
|
|
390
|
+
fontWeight: '600'
|
|
391
|
+
},
|
|
392
|
+
infoActionButtonSecondaryText: {
|
|
393
|
+
color: '#007AFF'
|
|
394
|
+
},
|
|
395
|
+
error: {
|
|
396
|
+
color: '#FF3B30',
|
|
397
|
+
marginBottom: 16
|
|
398
|
+
},
|
|
399
|
+
requirements: {
|
|
400
|
+
marginBottom: 24
|
|
401
|
+
},
|
|
402
|
+
requirementTitle: {
|
|
403
|
+
fontSize: 14,
|
|
404
|
+
fontWeight: '600',
|
|
405
|
+
marginBottom: 8,
|
|
406
|
+
color: '#333'
|
|
407
|
+
},
|
|
408
|
+
requirement: {
|
|
409
|
+
fontSize: 14,
|
|
410
|
+
color: '#666',
|
|
411
|
+
marginBottom: 4
|
|
412
|
+
},
|
|
413
|
+
requirementMet: {
|
|
414
|
+
color: '#34C759'
|
|
415
|
+
},
|
|
416
|
+
footer: {
|
|
417
|
+
flexDirection: 'row',
|
|
418
|
+
alignItems: 'center',
|
|
419
|
+
justifyContent: 'space-between',
|
|
420
|
+
marginTop: 24,
|
|
421
|
+
borderTopWidth: 1,
|
|
422
|
+
borderTopColor: '#eee',
|
|
423
|
+
paddingTop: 16
|
|
424
|
+
},
|
|
425
|
+
cancelButton: {
|
|
426
|
+
paddingVertical: 8,
|
|
427
|
+
paddingHorizontal: 16
|
|
428
|
+
},
|
|
429
|
+
cancelButtonText: {
|
|
430
|
+
color: '#666',
|
|
431
|
+
fontSize: 16
|
|
432
|
+
},
|
|
433
|
+
submitButton: {
|
|
434
|
+
paddingVertical: 16,
|
|
435
|
+
paddingHorizontal: 32,
|
|
436
|
+
borderRadius: 16,
|
|
437
|
+
backgroundColor: '#000000',
|
|
438
|
+
alignItems: 'center'
|
|
439
|
+
},
|
|
440
|
+
submitButtonDisabled: {
|
|
441
|
+
opacity: 0.5
|
|
442
|
+
},
|
|
443
|
+
submitButtonText: {
|
|
444
|
+
color: '#fff',
|
|
445
|
+
fontSize: 16,
|
|
446
|
+
fontWeight: '600'
|
|
447
|
+
},
|
|
448
|
+
// ✅ NEW: Background training progress styles
|
|
449
|
+
backgroundProgressContainer: {
|
|
450
|
+
flexDirection: 'row',
|
|
451
|
+
alignItems: 'center',
|
|
452
|
+
justifyContent: 'center',
|
|
453
|
+
marginBottom: 16
|
|
454
|
+
},
|
|
455
|
+
backgroundProgressText: {
|
|
456
|
+
fontSize: 14,
|
|
457
|
+
color: '#666',
|
|
458
|
+
marginRight: 10
|
|
459
|
+
},
|
|
460
|
+
backgroundProgressIndicator: {
|
|
461
|
+
padding: 5
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
//# sourceMappingURL=PinInput.js.map
|