@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,7 +1,276 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Object['defineProperty'](exports,_0x2245(0x0),{'value':!![]}),exports[_0x2245(0x1)]=exports[_0x2245(0x2)]=exports[_0x2245(0x3)]=exports[_0x2245(0x4)]=exports['replaceJWTAfterVerification']=exports[_0x2245(0x5)]=exports[_0x2245(0x6)]=exports[_0x2245(0x7)]=exports[_0x2245(0x8)]=exports[_0x2245(0x9)]=exports[_0x2245(0xa)]=exports[_0x2245(0xb)]=exports[_0x2245(0xc)]=exports[_0x2245(0xd)]=exports[_0x2245(0xe)]=void 0x0;var _asyncStorage=_interopRequireDefault(__ONAIROS_REQ_FUNC__(0x0));function _interopRequireDefault(_0x922e4b){return _0x922e4b&&_0x922e4b['__esModule']?_0x922e4b:{'default':_0x922e4b};}const SDK_TOKEN_KEY=_0x2245(0xf),isValidJWTFormat=_0x526396=>{const _0x3c4593={'TjmcE':'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=','LpbbZ':function(_0x4b5d2e,_0x53bcc6){return _0x4b5d2e+_0x53bcc6;},'CgHbv':function(_0x406798,_0x554ed0){return _0x406798|_0x554ed0;},'DBMTA':function(_0x31f37f,_0x17208a){return _0x31f37f<<_0x17208a;},'RgdSz':function(_0x3647e5,_0x38b559){return _0x3647e5>>_0x38b559;},'RWKId':function(_0x2a5465,_0x3349eb){return _0x2a5465|_0x3349eb;},'ccRMp':function(_0x1f87ca,_0x293dc6){return _0x1f87ca<<_0x293dc6;},'Oyxbj':function(_0x4e67a5,_0x5df852){return _0x4e67a5>>_0x5df852;},'PBypl':function(_0x99ad9b,_0x3db9fc){return _0x99ad9b&_0x3db9fc;},'EyEoD':function(_0x44cd30,_0x2e53bd){return _0x44cd30!==_0x2e53bd;},'afJAD':function(_0x1e0e93,_0x2b7f45){return _0x1e0e93(_0x2b7f45);},'fAmPJ':function(_0x30ddc9,_0x3159f2){return _0x30ddc9<_0x3159f2;},'XNObq':function(_0x313d2b,_0x583af1){return _0x313d2b===_0x583af1;},'nyLdz':_0x2245(0x10),'eQyaA':function(_0x4db529,_0x53e58a){return _0x4db529!==_0x53e58a;},'kYaGL':function(_0xad5c3e,_0x5c3428){return _0xad5c3e<_0x5c3428;}};if(!_0x526396||_0x526396['length']<0x14)return![];if(_0x526396[_0x2245(0x11)]('@')&&_0x526396['includes']('.')&&!_0x526396[_0x2245(0x11)]('Bearer')&&_0x3c4593[_0x2245(0x12)](_0x526396[_0x2245(0x13)],0x64)){if(_0x3c4593[_0x2245(0x14)]('QyGPK',_0x3c4593[_0x2245(0x15)])){const _0x22c78e=_0x3c4593[_0x2245(0x16)];let _0x384243='';_0x4ef789=_0x153488[_0x2245(0x17)](/=+$/,'');for(let _0x286af6=0x0;_0x286af6<_0x214a6a[_0x2245(0x13)];_0x286af6+=0x4){const _0x384d9e=_0x22c78e['indexOf'](_0x50afab[_0x2245(0x18)](_0x286af6)),_0xa98ffd=_0x22c78e['indexOf'](_0x4f538a[_0x2245(0x18)](_0x3c4593[_0x2245(0x19)](_0x286af6,0x1))),_0xc79f6e=_0x22c78e[_0x2245(0x1a)](_0x95b96[_0x2245(0x18)](_0x3c4593[_0x2245(0x19)](_0x286af6,0x2))),_0x46cabd=_0x22c78e[_0x2245(0x1a)](_0x4825f4[_0x2245(0x18)](_0x3c4593[_0x2245(0x19)](_0x286af6,0x3))),_0x17d1a5=_0x3c4593['CgHbv'](_0x3c4593['DBMTA'](_0x384d9e,0x2),_0x3c4593[_0x2245(0x1b)](_0xa98ffd,0x4)),_0x5b9579=_0x3c4593['RWKId'](_0x3c4593['ccRMp'](_0xa98ffd&0xf,0x4),_0x3c4593['Oyxbj'](_0xc79f6e,0x2)),_0x5e6a6f=_0x3c4593[_0x2245(0x1c)](_0x3c4593['DBMTA'](_0x3c4593[_0x2245(0x1d)](_0xc79f6e,0x3),0x6),_0x46cabd);_0x384243+=_0x44d30e[_0x2245(0x1e)](_0x17d1a5);if(_0xc79f6e!==0x40)_0x384243+=_0x3f83f7[_0x2245(0x1e)](_0x5b9579);if(_0x3c4593['EyEoD'](_0x46cabd,0x40))_0x384243+=_0x1e177e['fromCharCode'](_0x5e6a6f);}return _0x3c4593[_0x2245(0x1f)](_0x517772,_0xa7a310(_0x384243));}else return![];}const _0x4553e7=_0x526396[_0x2245(0x20)]('.');if(_0x3c4593[_0x2245(0x21)](_0x4553e7['length'],0x3))return![];if(_0x3c4593[_0x2245(0x22)](_0x526396['length'],0x32))return![];return!![];},storeJWT=async _0x313519=>{const _0x2532b5={'GmaqS':_0x2245(0x23),'bnlcl':function(_0x21376d,_0x57c24e){return _0x21376d(_0x57c24e);},'QJgdU':'❌\x20[JWT\x20Storage]\x20Failed\x20to\x20extract\x20userId\x20from\x20token:','TQpnk':function(_0x470a3f,_0x450611){return _0x470a3f!==_0x450611;},'xsKlG':_0x2245(0x24),'nuaPz':function(_0x32d16e,_0x262318){return _0x32d16e===_0x262318;},'EjXHp':_0x2245(0x25),'eGfYH':'⚠️\x20[JWT\x20Storage]\x20Attempted\x20to\x20store\x20empty/null\x20token','DAzIq':_0x2245(0x26),'GxZRT':_0x2245(0x27)};try{if(_0x2532b5[_0x2245(0x28)](_0x2532b5[_0x2245(0x29)],_0x2245(0x24)))return _0x1dbfe6[_0x2245(0x2a)](_0x2532b5['GmaqS']),_0x2532b5[_0x2245(0x2b)](_0x5112c2,_0x4c1d6d);else{if(!_0x313519||_0x313519[_0x2245(0x2c)]()==='')return _0x2532b5[_0x2245(0x2d)](_0x2532b5[_0x2245(0x2e)],_0x2245(0x25))?(console[_0x2245(0x2a)](_0x2532b5['eGfYH']),![]):(_0x16e5c9[_0x2245(0x2f)](_0x2245(0x30)),![]);if(!_0x2532b5['bnlcl'](isValidJWTFormat,_0x313519))return console['warn'](_0x2532b5[_0x2245(0x31)]),![];return await _asyncStorage['default'][_0x2245(0x32)](SDK_TOKEN_KEY,_0x313519),console[_0x2245(0x33)](_0x2245(0x34)),!![];}}catch(_0x32c570){return _0x2245(0x27)!==_0x2532b5[_0x2245(0x35)]?(_0x5d7002[_0x2245(0x2f)](_0x2532b5['QJgdU'],_0x3c6b3e),null):(console['error'](_0x2245(0x36),_0x32c570),![]);}};exports[_0x2245(0x2)]=storeJWT;const getJWT=async()=>{const _0x3abc4a={'ghOKQ':'⚠️\x20[JWT\x20Storage]\x20Attempted\x20to\x20store\x20empty/null\x20token','UmRcu':_0x2245(0x37),'vIzsQ':function(_0x50bbf2,_0x1996ba){return _0x50bbf2(_0x1996ba);},'teWkr':function(_0x20cb0b,_0x5bb95a){return _0x20cb0b===_0x5bb95a;},'fZBGX':_0x2245(0x38),'ApiHp':function(_0x4abb49){return _0x4abb49();},'GAngP':function(_0xe04fab,_0x525be4){return _0xe04fab!==_0x525be4;},'SPMRv':_0x2245(0x39)};try{const _0x2452e3=await _asyncStorage[_0x2245(0x3a)][_0x2245(0x3b)](SDK_TOKEN_KEY);if(!_0x2452e3)return console[_0x2245(0x33)](_0x3abc4a[_0x2245(0x3c)]),null;if(!_0x3abc4a[_0x2245(0x3d)](isValidJWTFormat,_0x2452e3))return _0x3abc4a[_0x2245(0x3e)](_0x2245(0x3f),_0x3abc4a[_0x2245(0x40)])?_0x4c8a27&&_0x1fe743[_0x2245(0x0)]?_0x1d45d1:{'default':_0x5b1b61}:(console[_0x2245(0x2a)](_0x2245(0x41)),await _0x3abc4a[_0x2245(0x42)](clearJWT),null);return console[_0x2245(0x33)](_0x2245(0x43)),_0x2452e3;}catch(_0x2eff0f){return _0x3abc4a[_0x2245(0x44)](_0x2245(0x45),'apool')?(console[_0x2245(0x2f)](_0x3abc4a[_0x2245(0x46)],_0x2eff0f),null):(_0x1aa12d[_0x2245(0x2a)](_0x3abc4a['ghOKQ']),![]);}};exports[_0x2245(0xa)]=getJWT;const clearJWT=async()=>{const _0x220f6d={'soUwh':_0x2245(0x47),'vGwuv':_0x2245(0x48)};try{return await _asyncStorage[_0x2245(0x3a)][_0x2245(0x49)](SDK_TOKEN_KEY),console[_0x2245(0x33)](_0x220f6d['soUwh']),!![];}catch(_0x2c4cb0){return console['error'](_0x220f6d['vGwuv'],_0x2c4cb0),![];}};exports[_0x2245(0xc)]=clearJWT;function _0x2245(_0x1b68ec,_0x224570){_0x1b68ec=_0x1b68ec-0x0;const _0xb793b2=_0x1b68();let _0x94de20=_0xb793b2[_0x1b68ec];return _0x94de20;}const hasValidJWT=async()=>{const _0x2c099b={'ROJcq':function(_0x5c3a17){return _0x5c3a17();}},_0x2602a8=await _0x2c099b[_0x2245(0x4a)](getJWT);return _0x2602a8!==null;};exports['hasValidJWT']=hasValidJWT;const base64Decode=_0x544150=>{const _0x42b78f={'Hkvse':_0x2245(0x4b),'nbGUu':function(_0x3afa3a,_0xe45f52){return _0x3afa3a<_0xe45f52;},'jUTRo':function(_0xe1ee72,_0x12d1df){return _0xe1ee72===_0x12d1df;},'AWKEI':_0x2245(0x4c),'QuktA':_0x2245(0x4d),'cqgSl':function(_0x2d9f75,_0x3e6781){return _0x2d9f75+_0x3e6781;},'hpLur':function(_0x4476b5,_0x25a727){return _0x4476b5+_0x25a727;},'iMgyt':function(_0xca7d4c,_0x47631c){return _0xca7d4c<<_0x47631c;},'nMaUf':function(_0x54f3f5,_0x1ba006){return _0x54f3f5|_0x1ba006;},'iflRI':function(_0x1a8097,_0x5b86c2){return _0x1a8097&_0x5b86c2;},'SPbjo':function(_0x532e22,_0x4d4866){return _0x532e22>>_0x4d4866;},'WxFDC':function(_0x51a477,_0x3fc799){return _0x51a477&_0x3fc799;},'ZwSLs':function(_0x49d6b7,_0x5533d2){return _0x49d6b7!==_0x5533d2;},'yiJIl':function(_0x377d88,_0x4ea18b){return _0x377d88(_0x4ea18b);},'okyCR':function(_0x1165c8,_0x293f7c){return _0x1165c8(_0x293f7c);}},_0x5dab8f=_0x42b78f[_0x2245(0x4e)];let _0x43627a='';_0x544150=_0x544150[_0x2245(0x17)](/=+$/,'');for(let _0x2ba537=0x0;_0x42b78f[_0x2245(0x4f)](_0x2ba537,_0x544150['length']);_0x2ba537+=0x4){if(_0x42b78f[_0x2245(0x50)](_0x42b78f[_0x2245(0x51)],_0x42b78f['QuktA']))_0x34b136[_0x2245(0x33)]('✅\x20[JWT\x20Storage]\x20Token\x20successfully\x20replaced');else{const _0x412c90=_0x5dab8f['indexOf'](_0x544150[_0x2245(0x18)](_0x2ba537)),_0x1bb13d=_0x5dab8f[_0x2245(0x1a)](_0x544150[_0x2245(0x18)](_0x42b78f[_0x2245(0x52)](_0x2ba537,0x1))),_0x37103a=_0x5dab8f[_0x2245(0x1a)](_0x544150[_0x2245(0x18)](_0x42b78f[_0x2245(0x52)](_0x2ba537,0x2))),_0x2eae44=_0x5dab8f[_0x2245(0x1a)](_0x544150[_0x2245(0x18)](_0x42b78f[_0x2245(0x53)](_0x2ba537,0x3))),_0x10f66d=_0x42b78f[_0x2245(0x54)](_0x412c90,0x2)|_0x1bb13d>>0x4,_0x230a25=_0x42b78f['nMaUf'](_0x42b78f[_0x2245(0x54)](_0x42b78f[_0x2245(0x55)](_0x1bb13d,0xf),0x4),_0x42b78f['SPbjo'](_0x37103a,0x2)),_0x200983=_0x42b78f['iMgyt'](_0x42b78f[_0x2245(0x56)](_0x37103a,0x3),0x6)|_0x2eae44;_0x43627a+=String[_0x2245(0x1e)](_0x10f66d);if(_0x42b78f[_0x2245(0x57)](_0x37103a,0x40))_0x43627a+=String[_0x2245(0x1e)](_0x230a25);if(_0x42b78f[_0x2245(0x57)](_0x2eae44,0x40))_0x43627a+=String[_0x2245(0x1e)](_0x200983);}}return _0x42b78f[_0x2245(0x58)](decodeURIComponent,_0x42b78f[_0x2245(0x59)](escape,_0x43627a));},getUserIdFromToken=async()=>{const _0x3738c3={'oeGlY':function(_0x9c1b9c){return _0x9c1b9c();},'xsGNU':_0x2245(0x5a),'xqpLY':_0x2245(0x5b),'JfcZI':function(_0x10f8f0,_0x3c521d){return _0x10f8f0(_0x3c521d);},'HZxhU':_0x2245(0x5c),'LtLFL':_0x2245(0x5d)};try{const _0x33562a=await _0x3738c3[_0x2245(0x5e)](getJWT);if(!_0x33562a)return console[_0x2245(0x33)](_0x3738c3[_0x2245(0x5f)]),null;const _0xf5e7f2=_0x33562a[_0x2245(0x20)]('.');if(_0xf5e7f2[_0x2245(0x13)]!==0x3)return console['warn'](_0x3738c3['xqpLY']),null;const _0x2112b1=JSON[_0x2245(0x60)](_0x3738c3[_0x2245(0x61)](base64Decode,_0xf5e7f2[0x1]));if(_0x2112b1[_0x2245(0x62)])return console[_0x2245(0x33)](_0x3738c3['HZxhU'],_0x2112b1[_0x2245(0x62)]),_0x2112b1[_0x2245(0x62)];return console[_0x2245(0x2a)](_0x3738c3[_0x2245(0x63)]),null;}catch(_0x3ef29a){return console[_0x2245(0x2f)](_0x2245(0x64),_0x3ef29a),null;}};exports['getUserIdFromToken']=getUserIdFromToken;const replaceJWT=async _0x460056=>{const _0xb55224={'CzdMr':'📭\x20[JWT\x20Storage]\x20No\x20token\x20found\x20for\x20userId\x20extraction','fZIvq':_0x2245(0x37),'PBhal':_0x2245(0x65),'bsYDL':function(_0x5a0b70,_0x187ea4){return _0x5a0b70(_0x187ea4);},'VQAYO':_0x2245(0x30),'HXSxv':function(_0x51319a){return _0x51319a();},'oIrFO':function(_0x326a15,_0x559443){return _0x326a15(_0x559443);},'ftJPY':function(_0x166f75,_0x1dc136){return _0x166f75===_0x1dc136;},'FAZkO':_0x2245(0x66),'VxsbF':_0x2245(0x67)};try{if(_0xb55224['PBhal']!==_0xb55224[_0x2245(0x68)])return _0x4da157[_0x2245(0x33)](_0xb55224[_0x2245(0x69)]),null;else{if(!_0x460056||!_0xb55224[_0x2245(0x6a)](isValidJWTFormat,_0x460056))return console[_0x2245(0x2f)](_0xb55224[_0x2245(0x6b)]),![];await _0xb55224[_0x2245(0x6c)](clearJWT);const _0x7f733c=await _0xb55224[_0x2245(0x6d)](storeJWT,_0x460056);if(_0x7f733c){if(_0xb55224[_0x2245(0x6e)](_0x2245(0x6f),_0xb55224[_0x2245(0x70)]))return _0x5d7e0b[_0x2245(0x33)](_0xb55224[_0x2245(0x71)]),null;else console['log'](_0xb55224[_0x2245(0x72)]);}return _0x7f733c;}}catch(_0x291219){return console[_0x2245(0x2f)](_0x2245(0x73),_0x291219),![];}};exports[_0x2245(0x5)]=replaceJWT;let TokenType=exports[_0x2245(0xe)]=function(_0x364ff8){const _0x3992ea={'TBIgZ':_0x2245(0x74),'bbrzG':_0x2245(0x75),'Pksam':_0x2245(0x76),'puOWn':_0x2245(0x77),'EFJZb':'AUTH','GlINw':'auth_token'};return _0x364ff8[_0x3992ea[_0x2245(0x78)]]=_0x3992ea[_0x2245(0x79)],_0x364ff8[_0x3992ea[_0x2245(0x7a)]]=_0x3992ea['puOWn'],_0x364ff8[_0x3992ea['EFJZb']]=_0x3992ea[_0x2245(0x7b)],_0x364ff8;}({});const getTokenTypeForRoute=_0x274b6a=>{const _0x516616={'zZJch':_0x2245(0x7c)};return console['warn'](_0x516616[_0x2245(0x7d)]),TokenType[_0x2245(0x7e)];};exports[_0x2245(0x8)]=getTokenTypeForRoute;const getJWTForRoute=async _0x5ee88e=>{const _0x3f4021={'EwuEW':_0x2245(0x7f),'tEOiK':function(_0x20435c){return _0x20435c();}};return console[_0x2245(0x2a)](_0x3f4021[_0x2245(0x80)]),_0x3f4021[_0x2245(0x81)](getJWT);};exports['getJWTForRoute']=getJWTForRoute;const clearAllJWT=async()=>{const _0x3bd119={'IIDOI':function(_0x4fc079){return _0x4fc079();}};return console[_0x2245(0x2a)](_0x2245(0x82)),_0x3bd119[_0x2245(0x83)](clearJWT);};exports['clearAllJWT']=clearAllJWT;const storeEnochJWT=async _0x437e69=>{const _0xeac93c={'yLhuS':_0x2245(0x84)};return console[_0x2245(0x2a)](_0xeac93c[_0x2245(0x85)]),storeJWT(_0x437e69);};exports['storeEnochJWT']=storeEnochJWT;const storeOnairosJWT=async _0x332c2a=>{const _0x41432c={'gkzZM':_0x2245(0x86),'UyjqL':function(_0x65dd1c,_0x1ee7f7){return _0x65dd1c(_0x1ee7f7);}};return console[_0x2245(0x2a)](_0x41432c[_0x2245(0x87)]),_0x41432c['UyjqL'](storeJWT,_0x332c2a);};exports['storeOnairosJWT']=storeOnairosJWT;function _0x1b68(){const _0x51f62c=['__esModule','storeOnairosJWT','storeJWT','storeEnochJWT','storeAuthToken','replaceJWT','hasValidJWT','getUserIdFromToken','getTokenTypeForRoute','getJWTForRoute','getJWT','getAllTokens','clearJWT','clearAllJWT','TokenType','sdk_jwt_token','qPrHi','includes','fAmPJ','length','XNObq','nyLdz','TjmcE','replace','charAt','LpbbZ','indexOf','RgdSz','RWKId','PBypl','fromCharCode','afJAD','split','eQyaA','kYaGL','⚠️\x20[JWT\x20Storage]\x20storeAuthToken\x20is\x20deprecated\x20-\x20use\x20storeJWT()\x20instead','cAuml','ogZLG','⚠️\x20[JWT\x20Storage]\x20Invalid\x20JWT\x20format\x20-\x20token\x20should\x20have\x203\x20parts','ZuChI','TQpnk','xsKlG','warn','bnlcl','trim','nuaPz','EjXHp','error','❌\x20[JWT\x20Storage]\x20Invalid\x20token\x20provided\x20for\x20replacement','DAzIq','setItem','log','✅\x20[JWT\x20Storage]\x20Token\x20stored\x20successfully','GxZRT','❌\x20[JWT\x20Storage]\x20Failed\x20to\x20store\x20token:','📭\x20[JWT\x20Storage]\x20No\x20token\x20found\x20in\x20storage','sTwsY','❌\x20[JWT\x20Storage]\x20Failed\x20to\x20retrieve\x20token:','default','getItem','UmRcu','vIzsQ','teWkr','kUHzb','fZBGX','⚠️\x20[JWT\x20Storage]\x20Invalid\x20JWT\x20format\x20found,\x20removing','ApiHp','🔐\x20[JWT\x20Storage]\x20Token\x20retrieved\x20successfully','GAngP','rKvHB','SPMRv','✅\x20[JWT\x20Storage]\x20Token\x20cleared\x20successfully','❌\x20[JWT\x20Storage]\x20Failed\x20to\x20clear\x20token:','removeItem','ROJcq','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=','gJxRq','qtCoW','Hkvse','nbGUu','jUTRo','AWKEI','cqgSl','hpLur','iMgyt','iflRI','WxFDC','ZwSLs','yiJIl','okyCR','📭\x20[JWT\x20Storage]\x20No\x20token\x20found\x20for\x20userId\x20extraction','⚠️\x20[JWT\x20Storage]\x20Invalid\x20JWT\x20format\x20for\x20userId\x20extraction','✅\x20[JWT\x20Storage]\x20Extracted\x20userId\x20from\x20JWT:','⚠️\x20[JWT\x20Storage]\x20No\x20userId\x20field\x20found\x20in\x20JWT\x20payload','oeGlY','xsGNU','parse','JfcZI','userId','LtLFL','❌\x20[JWT\x20Storage]\x20Failed\x20to\x20extract\x20userId\x20from\x20token:','FLgKN','LKrds','✅\x20[JWT\x20Storage]\x20Token\x20successfully\x20replaced','PBhal','CzdMr','bsYDL','VQAYO','HXSxv','oIrFO','ftJPY','XeMPx','FAZkO','fZIvq','VxsbF','❌\x20[JWT\x20Storage]\x20Failed\x20to\x20replace\x20token:','ENOCH','enoch_token','ONAIROS','onairos_jwt_token','TBIgZ','bbrzG','Pksam','GlINw','⚠️\x20[JWT\x20Storage]\x20getTokenTypeForRoute\x20is\x20deprecated\x20-\x20SDK\x20uses\x20single\x20token','zZJch','AUTH','⚠️\x20[JWT\x20Storage]\x20getJWTForRoute\x20is\x20deprecated\x20-\x20use\x20getJWT()\x20instead','EwuEW','tEOiK','⚠️\x20[JWT\x20Storage]\x20clearAllJWT\x20is\x20deprecated\x20-\x20use\x20clearJWT()\x20instead','IIDOI','⚠️\x20[JWT\x20Storage]\x20storeEnochJWT\x20is\x20deprecated\x20-\x20use\x20storeJWT()\x20instead','yLhuS','⚠️\x20[JWT\x20Storage]\x20storeOnairosJWT\x20is\x20deprecated\x20-\x20use\x20storeJWT()\x20instead','gkzZM','JIMll','⚠️\x20[JWT\x20Storage]\x20replaceJWTAfterVerification\x20is\x20deprecated\x20-\x20use\x20replaceJWT()\x20instead','stOtr'];_0x1b68=function(){return _0x51f62c;};return _0x1b68();}const storeAuthToken=async _0x40e402=>{const _0x33461e={'JIMll':function(_0x3b5f3f,_0x3093e8){return _0x3b5f3f(_0x3093e8);}};return console[_0x2245(0x2a)]('⚠️\x20[JWT\x20Storage]\x20storeAuthToken\x20is\x20deprecated\x20-\x20use\x20storeJWT()\x20instead'),_0x33461e[_0x2245(0x88)](storeJWT,_0x40e402);};exports[_0x2245(0x4)]=storeAuthToken;const replaceJWTAfterVerification=async(_0x24a979,_0x3f870e)=>{const _0x5c39e1={'stOtr':_0x2245(0x89),'VAIjv':function(_0x45a061,_0x4a974b){return _0x45a061(_0x4a974b);}};return console['warn'](_0x5c39e1[_0x2245(0x8a)]),_0x5c39e1['VAIjv'](replaceJWT,_0x3f870e);};exports['replaceJWTAfterVerification']=replaceJWTAfterVerification;const getAllTokens=async()=>{const _0x213229=await getJWT();return{'sdk_token':_0x213229,[TokenType[_0x2245(0x74)]]:null,[TokenType['ONAIROS']]:null,[TokenType['AUTH']]:null};};exports[_0x2245(0xb)]=getAllTokens;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.storeOnairosJWT = exports.storeJWT = exports.storeEnochJWT = exports.storeAuthToken = exports.replaceJWTAfterVerification = exports.replaceJWT = exports.hasValidJWT = exports.getUserIdFromToken = exports.getTokenTypeForRoute = exports.getJWTForRoute = exports.getJWT = exports.getAllTokens = exports.clearJWT = exports.clearAllJWT = exports.TokenType = void 0;
|
|
7
|
+
var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
/**
|
|
10
|
+
* JWT Token Storage Service - SIMPLIFIED
|
|
11
|
+
* SDK uses a single JWT token for all authentication
|
|
12
|
+
*
|
|
13
|
+
* NOTE: This is the generic SDK JWT storage.
|
|
14
|
+
* Consuming apps that need multiple token types (like Enoch/Onairos separation)
|
|
15
|
+
* should implement their own token management.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const SDK_TOKEN_KEY = 'sdk_jwt_token';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Validate JWT format
|
|
22
|
+
* @param token - Token to validate
|
|
23
|
+
* @returns boolean - True if valid JWT format
|
|
24
|
+
*/
|
|
25
|
+
const isValidJWTFormat = token => {
|
|
26
|
+
if (!token || token.length < 20) return false;
|
|
27
|
+
|
|
28
|
+
// Check if it's an email address (invalid JWT)
|
|
29
|
+
if (token.includes('@') && token.includes('.') && !token.includes('Bearer') && token.length < 100) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Check if it has JWT structure (3 parts separated by dots)
|
|
34
|
+
const tokenParts = token.split('.');
|
|
35
|
+
if (tokenParts.length !== 3) return false;
|
|
36
|
+
|
|
37
|
+
// Additional validation - JWT should be longer than 50 characters typically
|
|
38
|
+
if (token.length < 50) return false;
|
|
39
|
+
return true;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Store JWT token
|
|
44
|
+
* @param token - JWT token to store
|
|
45
|
+
* @returns Promise<boolean> - Success status
|
|
46
|
+
*/
|
|
47
|
+
const storeJWT = async token => {
|
|
48
|
+
try {
|
|
49
|
+
if (!token || token.trim() === '') {
|
|
50
|
+
console.warn('⚠️ [JWT Storage] Attempted to store empty/null token');
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Validate JWT format
|
|
55
|
+
if (!isValidJWTFormat(token)) {
|
|
56
|
+
console.warn('⚠️ [JWT Storage] Invalid JWT format - token should have 3 parts');
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
await _asyncStorage.default.setItem(SDK_TOKEN_KEY, token);
|
|
60
|
+
console.log('✅ [JWT Storage] Token stored successfully');
|
|
61
|
+
return true;
|
|
62
|
+
} catch (error) {
|
|
63
|
+
console.error('❌ [JWT Storage] Failed to store token:', error);
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Retrieve JWT token
|
|
70
|
+
* @returns Promise<string | null> - JWT token or null if not found
|
|
71
|
+
*/
|
|
72
|
+
exports.storeJWT = storeJWT;
|
|
73
|
+
const getJWT = async () => {
|
|
74
|
+
try {
|
|
75
|
+
const token = await _asyncStorage.default.getItem(SDK_TOKEN_KEY);
|
|
76
|
+
if (!token) {
|
|
77
|
+
console.log('📭 [JWT Storage] No token found in storage');
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Validate JWT format
|
|
82
|
+
if (!isValidJWTFormat(token)) {
|
|
83
|
+
console.warn('⚠️ [JWT Storage] Invalid JWT format found, removing');
|
|
84
|
+
await clearJWT();
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
console.log('🔐 [JWT Storage] Token retrieved successfully');
|
|
88
|
+
return token;
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error('❌ [JWT Storage] Failed to retrieve token:', error);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Clear JWT token
|
|
97
|
+
* @returns Promise<boolean> - Success status
|
|
98
|
+
*/
|
|
99
|
+
exports.getJWT = getJWT;
|
|
100
|
+
const clearJWT = async () => {
|
|
101
|
+
try {
|
|
102
|
+
await _asyncStorage.default.removeItem(SDK_TOKEN_KEY);
|
|
103
|
+
console.log('✅ [JWT Storage] Token cleared successfully');
|
|
104
|
+
return true;
|
|
105
|
+
} catch (error) {
|
|
106
|
+
console.error('❌ [JWT Storage] Failed to clear token:', error);
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Check if valid JWT token exists
|
|
113
|
+
* @returns Promise<boolean> - True if valid token exists
|
|
114
|
+
*/
|
|
115
|
+
exports.clearJWT = clearJWT;
|
|
116
|
+
const hasValidJWT = async () => {
|
|
117
|
+
const token = await getJWT();
|
|
118
|
+
return token !== null;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Base64 decode helper for React Native (atob not available)
|
|
123
|
+
*/
|
|
124
|
+
exports.hasValidJWT = hasValidJWT;
|
|
125
|
+
const base64Decode = str => {
|
|
126
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
127
|
+
let output = '';
|
|
128
|
+
str = str.replace(/=+$/, '');
|
|
129
|
+
for (let i = 0; i < str.length; i += 4) {
|
|
130
|
+
const enc1 = chars.indexOf(str.charAt(i));
|
|
131
|
+
const enc2 = chars.indexOf(str.charAt(i + 1));
|
|
132
|
+
const enc3 = chars.indexOf(str.charAt(i + 2));
|
|
133
|
+
const enc4 = chars.indexOf(str.charAt(i + 3));
|
|
134
|
+
const chr1 = enc1 << 2 | enc2 >> 4;
|
|
135
|
+
const chr2 = (enc2 & 15) << 4 | enc3 >> 2;
|
|
136
|
+
const chr3 = (enc3 & 3) << 6 | enc4;
|
|
137
|
+
output += String.fromCharCode(chr1);
|
|
138
|
+
if (enc3 !== 64) output += String.fromCharCode(chr2);
|
|
139
|
+
if (enc4 !== 64) output += String.fromCharCode(chr3);
|
|
140
|
+
}
|
|
141
|
+
return decodeURIComponent(escape(output));
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Decode JWT payload and extract userId (UUID)
|
|
146
|
+
* Used specifically for LinkedIn scraping which needs the main DB userId
|
|
147
|
+
* @returns Promise<string | null> - User ID (UUID) or null if not found
|
|
148
|
+
*/
|
|
149
|
+
const getUserIdFromToken = async () => {
|
|
150
|
+
try {
|
|
151
|
+
const token = await getJWT();
|
|
152
|
+
if (!token) {
|
|
153
|
+
console.log('📭 [JWT Storage] No token found for userId extraction');
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const parts = token.split('.');
|
|
157
|
+
if (parts.length !== 3) {
|
|
158
|
+
console.warn('⚠️ [JWT Storage] Invalid JWT format for userId extraction');
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Decode the payload (middle part) - use custom base64 decode for React Native
|
|
163
|
+
const payload = JSON.parse(base64Decode(parts[1]));
|
|
164
|
+
|
|
165
|
+
// Look for userId field (this is the UUID from the backend)
|
|
166
|
+
if (payload.userId) {
|
|
167
|
+
console.log('✅ [JWT Storage] Extracted userId from JWT:', payload.userId);
|
|
168
|
+
return payload.userId;
|
|
169
|
+
}
|
|
170
|
+
console.warn('⚠️ [JWT Storage] No userId field found in JWT payload');
|
|
171
|
+
return null;
|
|
172
|
+
} catch (error) {
|
|
173
|
+
console.error('❌ [JWT Storage] Failed to extract userId from token:', error);
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Replace JWT token (for token refresh scenarios)
|
|
180
|
+
* @param newToken - New JWT token
|
|
181
|
+
* @returns Promise<boolean> - Success status
|
|
182
|
+
*/
|
|
183
|
+
exports.getUserIdFromToken = getUserIdFromToken;
|
|
184
|
+
const replaceJWT = async newToken => {
|
|
185
|
+
try {
|
|
186
|
+
if (!newToken || !isValidJWTFormat(newToken)) {
|
|
187
|
+
console.error('❌ [JWT Storage] Invalid token provided for replacement');
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
await clearJWT();
|
|
191
|
+
const stored = await storeJWT(newToken);
|
|
192
|
+
if (stored) {
|
|
193
|
+
console.log('✅ [JWT Storage] Token successfully replaced');
|
|
194
|
+
}
|
|
195
|
+
return stored;
|
|
196
|
+
} catch (error) {
|
|
197
|
+
console.error('❌ [JWT Storage] Failed to replace token:', error);
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
// ============================================
|
|
203
|
+
// DEPRECATED: Legacy token type support
|
|
204
|
+
// These are kept for backward compatibility but should not be used
|
|
205
|
+
// ============================================
|
|
206
|
+
|
|
207
|
+
/** @deprecated Use storeJWT instead */
|
|
208
|
+
exports.replaceJWT = replaceJWT;
|
|
209
|
+
let TokenType = exports.TokenType = /*#__PURE__*/function (TokenType) {
|
|
210
|
+
TokenType["ENOCH"] = "enoch_token";
|
|
211
|
+
TokenType["ONAIROS"] = "onairos_jwt_token";
|
|
212
|
+
TokenType["AUTH"] = "auth_token";
|
|
213
|
+
return TokenType;
|
|
214
|
+
}({});
|
|
215
|
+
/** @deprecated Route-based token selection removed - SDK uses single token */
|
|
216
|
+
const getTokenTypeForRoute = _route => {
|
|
217
|
+
console.warn('⚠️ [JWT Storage] getTokenTypeForRoute is deprecated - SDK uses single token');
|
|
218
|
+
return TokenType.AUTH;
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
/** @deprecated Use getJWT() instead */
|
|
222
|
+
exports.getTokenTypeForRoute = getTokenTypeForRoute;
|
|
223
|
+
const getJWTForRoute = async _route => {
|
|
224
|
+
console.warn('⚠️ [JWT Storage] getJWTForRoute is deprecated - use getJWT() instead');
|
|
225
|
+
return getJWT();
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
/** @deprecated Use clearJWT() instead */
|
|
229
|
+
exports.getJWTForRoute = getJWTForRoute;
|
|
230
|
+
const clearAllJWT = async () => {
|
|
231
|
+
console.warn('⚠️ [JWT Storage] clearAllJWT is deprecated - use clearJWT() instead');
|
|
232
|
+
return clearJWT();
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
/** @deprecated Use storeJWT() instead */
|
|
236
|
+
exports.clearAllJWT = clearAllJWT;
|
|
237
|
+
const storeEnochJWT = async token => {
|
|
238
|
+
console.warn('⚠️ [JWT Storage] storeEnochJWT is deprecated - use storeJWT() instead');
|
|
239
|
+
return storeJWT(token);
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
/** @deprecated Use storeJWT() instead */
|
|
243
|
+
exports.storeEnochJWT = storeEnochJWT;
|
|
244
|
+
const storeOnairosJWT = async token => {
|
|
245
|
+
console.warn('⚠️ [JWT Storage] storeOnairosJWT is deprecated - use storeJWT() instead');
|
|
246
|
+
return storeJWT(token);
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
/** @deprecated Use storeJWT() instead */
|
|
250
|
+
exports.storeOnairosJWT = storeOnairosJWT;
|
|
251
|
+
const storeAuthToken = async token => {
|
|
252
|
+
console.warn('⚠️ [JWT Storage] storeAuthToken is deprecated - use storeJWT() instead');
|
|
253
|
+
return storeJWT(token);
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
/** @deprecated Use replaceJWT() instead */
|
|
257
|
+
exports.storeAuthToken = storeAuthToken;
|
|
258
|
+
const replaceJWTAfterVerification = async (_tokenType, newToken) => {
|
|
259
|
+
console.warn('⚠️ [JWT Storage] replaceJWTAfterVerification is deprecated - use replaceJWT() instead');
|
|
260
|
+
return replaceJWT(newToken);
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
/** @deprecated For debugging only */
|
|
264
|
+
exports.replaceJWTAfterVerification = replaceJWTAfterVerification;
|
|
265
|
+
const getAllTokens = async () => {
|
|
266
|
+
const token = await getJWT();
|
|
267
|
+
return {
|
|
268
|
+
sdk_token: token,
|
|
269
|
+
// Legacy keys for debugging
|
|
270
|
+
[TokenType.ENOCH]: null,
|
|
271
|
+
[TokenType.ONAIROS]: null,
|
|
272
|
+
[TokenType.AUTH]: null
|
|
273
|
+
};
|
|
274
|
+
};
|
|
275
|
+
exports.getAllTokens = getAllTokens;
|
|
276
|
+
//# sourceMappingURL=jwtStorageService.js.map
|
|
@@ -1,7 +1,245 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Object[_0x3e86(0x0)](exports,_0x3e86(0x1),{'value':!![]}),exports[_0x3e86(0x2)]=exports[_0x3e86(0x3)]=exports[_0x3e86(0x4)]=exports[_0x3e86(0x5)]=exports['checkScrapingStatus']=void 0x0;function _0x490d(){const _0x5d2440=['defineProperty','__esModule','validateExtractedUrl','parseExtractionMessage','initiateProfileScraping','completeLinkedInExtraction','Failed\x20to\x20extract\x20profile\x20URL','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Extraction\x20failed:','object','Invalid\x20message\x20format','success','string','No\x20profile\x20URL\x20in\x20success\x20message','error','Unknown\x20extraction\x20error','⚠️\x20[LINKEDIN\x20EXTRACTOR]\x20Extraction\x20error:','gQYQp','Unknown\x20message\x20status:\x20','Failed\x20to\x20parse\x20extraction\x20result','log','BwBUW','parse','XYjto','zCTtI','VDzKe','UjSTh','profileUrl','QcfDE','RuINl','QRIGU','MTFua','wFEfa','SGkCg','qmaJi','XGlcK','message','jdEOm','warn','IdFdX','xjJvI','VGyRQ','DyBgk','❌\x20Error\x20occurred','Invalid\x20profile\x20URL','Unknown\x20error','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Complete\x20flow\x20error:','🚀\x20[LINKEDIN\x20EXTRACTOR]\x20Starting\x20profile\x20scraping...','🚀\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20URL:','✅\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20scraping\x20successful','Unknown\x20scraping\x20error','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20scraping\x20failed:','ZVtqY','❌\x20Scraping\x20failed','uezgQ','Unknown\x20error\x20occurred','EvrlI','🚀\x20[LINKEDIN\x20EXTRACTOR]\x20User\x20ID:','Tavbm','ZXRvP','✅\x20Profile\x20scraping\x20complete!','KRbyK','data','tGKGQ','zTeOJ','WhbmU','oViLX','wlnMl','meiCP','KYhCo','clIRC','yFneZ','AJuiy','JUdFI','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Exception\x20during\x20scraping:','usYHD','OHwfg','HONup','eXTEU','ZnCNM','🔍\x20[LINKEDIN\x20EXTRACTOR]\x20Checking\x20scraping\x20status\x20for:','LEvRt','vsSwu','XuDhT','checkScrapingStatus','PMTXp','rVLVL','URL\x20does\x20not\x20contain\x20/in/\x20pattern','linkedin.com','Could\x20not\x20extract\x20username\x20from\x20URL','CGzVB','kBDED','oJPtG','ufpSs','iqQmN','PzaTo','Rawfx','includes','URL\x20is\x20not\x20a\x20LinkedIn\x20domain','match','ovMTw','NULra','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Invalid\x20URL:','hOxLD','aSJcf','ZeKAw','xnCQU','FUsWQ','uBXnY','RWYPm','Processing\x20extracted\x20data...','kHDGm','hrGfR','sMkKQ','ZjxCz','UcHub','LYpQR','SiKXS','VyVIj','VKOsM','KwiAd','OBphG','OgQPH','RXrbW'];_0x490d=function(){return _0x5d2440;};return _0x490d();}var _linkedinScrapingService=__ONAIROS_REQ_FUNC__(0x0);const parseExtractionMessage=_0x348b31=>{const _0x2ae11b={'qmaJi':_0x3e86(0x6),'XGlcK':_0x3e86(0x7),'DyBgk':function(_0x2ff17f,_0x390a21){return _0x2ff17f(_0x390a21);},'BwBUW':'📨\x20[LINKEDIN\x20EXTRACTOR]\x20Parsing\x20WebView\x20message:','XYjto':function(_0x2e85ce,_0x396259){return _0x2e85ce!==_0x396259;},'zCTtI':_0x3e86(0x8),'VDzKe':_0x3e86(0x9),'UjSTh':function(_0x2a127c,_0x3e37d5){return _0x2a127c===_0x3e37d5;},'PYQcH':_0x3e86(0xa),'QcfDE':_0x3e86(0xb),'RuINl':_0x3e86(0xc),'QRIGU':'✅\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20URL\x20extracted:','mzcMU':'Profile\x20URL\x20extracted\x20successfully','MTFua':_0x3e86(0xd),'jdEOm':_0x3e86(0xe),'IdFdX':_0x3e86(0xf),'xjJvI':_0x3e86(0x10),'VGyRQ':_0x3e86(0x11),'figWA':'❌\x20[LINKEDIN\x20EXTRACTOR]\x20Failed\x20to\x20parse\x20message:','wWvGf':_0x3e86(0x12)};try{console[_0x3e86(0x13)](_0x2ae11b[_0x3e86(0x14)],_0x348b31);const _0x406fd4=JSON[_0x3e86(0x15)](_0x348b31);if(!_0x406fd4||_0x2ae11b[_0x3e86(0x16)](typeof _0x406fd4,_0x2ae11b[_0x3e86(0x17)]))return{'success':![],'error':_0x2ae11b[_0x3e86(0x18)]};const _0x3cf70d=_0x406fd4['status'];if(_0x2ae11b[_0x3e86(0x19)](_0x3cf70d,_0x2ae11b['PYQcH'])){const _0x3b9931=_0x406fd4[_0x3e86(0x1a)];if(!_0x3b9931||_0x2ae11b[_0x3e86(0x16)](typeof _0x3b9931,_0x2ae11b[_0x3e86(0x1b)]))return{'success':![],'error':_0x2ae11b[_0x3e86(0x1c)]};return console[_0x3e86(0x13)](_0x2ae11b[_0x3e86(0x1d)],_0x3b9931),{'success':!![],'profileUrl':_0x3b9931,'message':_0x2ae11b['mzcMU']};}else{if(_0x2ae11b[_0x3e86(0x19)](_0x3cf70d,_0x2ae11b[_0x3e86(0x1e)])){if(_0x3e86(0x1f)===_0x3e86(0x20)){const _0x23543b=_0x3b2f9a[_0x3e86(0xd)]||_0x2ae11b[_0x3e86(0x21)];return _0x4dd168['error'](_0x2ae11b[_0x3e86(0x22)],_0x23543b),_0x1f7afa&&_0x53615f(_0x23543b),![];}else{const _0x1b398f=_0x406fd4[_0x3e86(0x23)]||_0x2ae11b[_0x3e86(0x24)];return console[_0x3e86(0x25)](_0x2ae11b[_0x3e86(0x26)],_0x1b398f),{'success':![],'error':_0x1b398f};}}else{if(_0x2ae11b[_0x3e86(0x19)](_0x2ae11b[_0x3e86(0x27)],_0x2ae11b[_0x3e86(0x27)]))return{'success':![],'error':_0x2ae11b[_0x3e86(0x28)]+_0x3cf70d};else _0x2ae11b[_0x3e86(0x29)](_0x5000c7,_0x3e86(0x2a));}}}catch(_0x28425e){return console[_0x3e86(0xd)](_0x2ae11b['figWA'],_0x28425e),{'success':![],'error':_0x2ae11b['wWvGf']};}};exports['parseExtractionMessage']=parseExtractionMessage;function _0x3e86(_0x490dcf,_0x3e8603){_0x490dcf=_0x490dcf-0x0;const _0x50a44b=_0x490d();let _0x11c7a9=_0x50a44b[_0x490dcf];return _0x11c7a9;}const initiateProfileScraping=async _0x223efe=>{const _0x143707={'wlnMl':'URL\x20is\x20empty\x20or\x20invalid','ZXRvP':function(_0x31c26c,_0x70df36){return _0x31c26c(_0x70df36);},'HONup':_0x3e86(0x2b),'hTRcw':_0x3e86(0x2c),'eXTEU':_0x3e86(0x2d),'ZnCNM':function(_0x4484a4,_0x1e44e3){return _0x4484a4(_0x1e44e3);},'HACGw':_0x3e86(0x2e),'Tavbm':_0x3e86(0x2f),'jUDqH':'Sending\x20profile\x20URL\x20to\x20backend...','WSWOw':_0x3e86(0x30),'KRbyK':function(_0x42cc8b,_0x25bbf6){return _0x42cc8b(_0x25bbf6);},'tGKGQ':_0x3e86(0x31),'zTeOJ':_0x3e86(0x32),'WhbmU':function(_0x3630c0,_0x535eeb){return _0x3630c0!==_0x535eeb;},'oViLX':_0x3e86(0x33),'meiCP':function(_0x37de85,_0x4fdfd5){return _0x37de85(_0x4fdfd5);},'KYhCo':_0x3e86(0x34),'clIRC':function(_0x592159,_0x23f00c){return _0x592159===_0x23f00c;},'yFneZ':_0x3e86(0x35),'AJuiy':function(_0x199818,_0x22ed70){return _0x199818 instanceof _0x22ed70;},'JUdFI':_0x3e86(0x36),'usYHD':function(_0x121616,_0x3ff04f){return _0x121616!==_0x3ff04f;},'OHwfg':_0x3e86(0x37)},{userId:_0x35f809,profileUrl:_0x7629f0,onProgress:_0x19b161,onSuccess:_0x7b367e,onError:_0x5c9cdc}=_0x223efe;try{console[_0x3e86(0x13)](_0x143707['HACGw']),console[_0x3e86(0x13)](_0x3e86(0x38),_0x35f809),console[_0x3e86(0x13)](_0x143707[_0x3e86(0x39)],_0x7629f0);_0x19b161&&_0x143707[_0x3e86(0x3a)](_0x19b161,_0x143707['jUDqH']);const _0x56534b=await(0x0,_linkedinScrapingService['scrapeLinkedInProfile'])(_0x35f809,_0x7629f0);if(_0x56534b[_0x3e86(0xa)])console['log'](_0x143707['WSWOw']),_0x19b161&&_0x143707[_0x3e86(0x3a)](_0x19b161,_0x3e86(0x3b)),_0x7b367e&&_0x143707[_0x3e86(0x3c)](_0x7b367e,_0x56534b[_0x3e86(0x3d)]);else{const _0x2a1511=_0x56534b[_0x3e86(0xd)]||_0x143707[_0x3e86(0x3e)];console['error'](_0x143707[_0x3e86(0x3f)],_0x2a1511);if(_0x19b161){if(_0x143707[_0x3e86(0x40)](_0x143707['oViLX'],_0x143707[_0x3e86(0x41)]))return{'valid':![],'error':_0x143707[_0x3e86(0x42)]};else _0x143707[_0x3e86(0x43)](_0x19b161,_0x143707[_0x3e86(0x44)]);}_0x5c9cdc&&_0x5c9cdc(_0x2a1511);}}catch(_0x5bae15){if(_0x143707[_0x3e86(0x45)](_0x143707['yFneZ'],_0x143707[_0x3e86(0x46)])){const _0x3b7c25=_0x143707[_0x3e86(0x47)](_0x5bae15,Error)?_0x5bae15[_0x3e86(0x23)]:_0x143707[_0x3e86(0x48)];console['error'](_0x3e86(0x49),_0x5bae15),_0x19b161&&(_0x143707[_0x3e86(0x4a)](_0x3e86(0x37),_0x143707[_0x3e86(0x4b)])?_0x143707[_0x3e86(0x3a)](_0x227ede,_0x22ad66[_0x3e86(0xd)]||_0x143707[_0x3e86(0x4c)]):_0x143707[_0x3e86(0x43)](_0x19b161,_0x3e86(0x2a))),_0x5c9cdc&&_0x5c9cdc(_0x3b7c25);}else{const _0x5a0e0f=_0x19775e instanceof _0x4cdd9e?_0x46649e['message']:_0x143707['hTRcw'];return _0x4ed923[_0x3e86(0xd)](_0x143707[_0x3e86(0x4d)],_0x2f0373),_0x404548&&_0x143707[_0x3e86(0x4e)](_0x16cbdf,_0x5a0e0f),![];}}};exports[_0x3e86(0x4)]=initiateProfileScraping;const checkScrapingStatus=async _0x3ed630=>{const _0x3c1ea1={'PWNbf':_0x3e86(0x4f),'LEvRt':'❌\x20[LINKEDIN\x20EXTRACTOR]\x20Failed\x20to\x20check\x20status:','vsSwu':function(_0x538974,_0xaaeed1){return _0x538974 instanceof _0xaaeed1;},'XuDhT':_0x3e86(0x2c)};try{return console[_0x3e86(0x13)](_0x3c1ea1['PWNbf'],_0x3ed630),{'inProgress':![],'completed':![]};}catch(_0x30e89d){return console[_0x3e86(0xd)](_0x3c1ea1[_0x3e86(0x50)],_0x30e89d),{'inProgress':![],'completed':![],'error':_0x3c1ea1[_0x3e86(0x51)](_0x30e89d,Error)?_0x30e89d[_0x3e86(0x23)]:_0x3c1ea1[_0x3e86(0x52)]};}};exports[_0x3e86(0x53)]=checkScrapingStatus;const validateExtractedUrl=_0x142b62=>{const _0x3400d0={'Rawfx':'Invalid\x20message\x20format','Jbymn':function(_0x4d314f,_0x40a634){return _0x4d314f!==_0x40a634;},'MuCoK':_0x3e86(0xb),'CGzVB':'URL\x20is\x20empty\x20or\x20invalid','kBDED':'/in/','oJPtG':function(_0x52e119,_0x1a35b5){return _0x52e119!==_0x1a35b5;},'ufpSs':_0x3e86(0x54),'iqQmN':_0x3e86(0x55),'PzaTo':_0x3e86(0x56),'ajbQl':_0x3e86(0x57),'ovMTw':_0x3e86(0x58)};if(!_0x142b62||_0x3400d0['Jbymn'](typeof _0x142b62,_0x3400d0['MuCoK']))return{'valid':![],'error':_0x3400d0[_0x3e86(0x59)]};if(!_0x142b62['includes'](_0x3400d0[_0x3e86(0x5a)]))return _0x3400d0[_0x3e86(0x5b)](_0x3400d0[_0x3e86(0x5c)],_0x3400d0[_0x3e86(0x5d)])?{'valid':![],'error':_0x3400d0[_0x3e86(0x5e)]}:{'success':![],'error':_0x3400d0[_0x3e86(0x5f)]};if(!_0x142b62[_0x3e86(0x60)](_0x3400d0['ajbQl']))return{'valid':![],'error':_0x3e86(0x61)};const _0xbe7771=_0x142b62[_0x3e86(0x62)](/linkedin\.com\/in\/([^\/\?#]+)/);if(!_0xbe7771||!_0xbe7771[0x1])return{'valid':![],'error':_0x3400d0[_0x3e86(0x63)]};return{'valid':!![]};};exports[_0x3e86(0x2)]=validateExtractedUrl;const completeLinkedInExtraction=async(_0x4d2ecb,_0x473667,_0x3083f9)=>{const _0x5060b2={'uBXnY':function(_0x34f0e8,_0x391b42){return _0x34f0e8(_0x391b42);},'baxuX':_0x3e86(0x56),'UcHub':function(_0x359458,_0xa01040){return _0x359458(_0xa01040);},'xnCQU':function(_0x3ade58,_0x3d1826){return _0x3ade58!==_0x3d1826;},'FUsWQ':_0x3e86(0x64),'RWYPm':function(_0x50d986,_0x4da76a){return _0x50d986(_0x4da76a);},'kHDGm':'Failed\x20to\x20extract\x20profile\x20URL','hrGfR':function(_0x1880a8,_0x3ea400){return _0x1880a8(_0x3ea400);},'sMkKQ':_0x3e86(0x65),'OgQPH':function(_0x3ff469,_0x5ee350){return _0x3ff469===_0x5ee350;},'ZjxCz':_0x3e86(0x66),'LYpQR':_0x3e86(0x2b),'SiKXS':function(_0x4ec6c8,_0x2abdd4){return _0x4ec6c8!==_0x2abdd4;},'VKOsM':_0x3e86(0x67),'KwiAd':function(_0x4cb6c4,_0x218ba4){return _0x4cb6c4 instanceof _0x218ba4;},'YuGbr':_0x3e86(0x2c),'OBphG':_0x3e86(0x2d),'RXrbW':_0x3e86(0x68)},{onProgress:_0x1fd4df,onSuccess:_0x1d3ac4,onError:_0x13c5e5}=_0x3083f9;try{_0x1fd4df&&(_0x5060b2[_0x3e86(0x69)](_0x5060b2[_0x3e86(0x6a)],_0x5060b2['FUsWQ'])?_0x5060b2[_0x3e86(0x6b)](_0x47281f,_0x35c9da):_0x5060b2[_0x3e86(0x6c)](_0x1fd4df,_0x3e86(0x6d)));const _0x501fed=_0x5060b2[_0x3e86(0x6b)](parseExtractionMessage,_0x4d2ecb);if(!_0x501fed[_0x3e86(0xa)]||!_0x501fed[_0x3e86(0x1a)]){const _0x330acd=_0x501fed[_0x3e86(0xd)]||_0x5060b2[_0x3e86(0x6e)];return console[_0x3e86(0xd)]('❌\x20[LINKEDIN\x20EXTRACTOR]\x20Extraction\x20failed:',_0x330acd),_0x13c5e5&&_0x5060b2[_0x3e86(0x6f)](_0x13c5e5,_0x330acd),![];}const _0x2035b8=_0x501fed[_0x3e86(0x1a)],_0x4db24c=_0x5060b2[_0x3e86(0x6b)](validateExtractedUrl,_0x2035b8);if(!_0x4db24c['valid']){console[_0x3e86(0xd)](_0x5060b2[_0x3e86(0x70)],_0x4db24c[_0x3e86(0xd)]);if(_0x13c5e5){if(_0x5060b2['OgQPH']('SCuEY',_0x5060b2[_0x3e86(0x71)]))return{'valid':![],'error':_0x5060b2['baxuX']};else _0x5060b2[_0x3e86(0x72)](_0x13c5e5,_0x4db24c[_0x3e86(0xd)]||_0x5060b2[_0x3e86(0x73)]);}return![];}return await _0x5060b2[_0x3e86(0x6b)](initiateProfileScraping,{'userId':_0x473667,'profileUrl':_0x2035b8,'onProgress':_0x1fd4df,'onSuccess':_0x1d3ac4,'onError':_0x13c5e5}),!![];}catch(_0xb7791f){if(_0x5060b2[_0x3e86(0x74)](_0x3e86(0x75),_0x5060b2[_0x3e86(0x76)])){const _0x4f674b=_0x5060b2[_0x3e86(0x77)](_0xb7791f,Error)?_0xb7791f[_0x3e86(0x23)]:_0x5060b2['YuGbr'];return console[_0x3e86(0xd)](_0x5060b2[_0x3e86(0x78)],_0xb7791f),_0x13c5e5&&(_0x5060b2[_0x3e86(0x79)](_0x5060b2[_0x3e86(0x7a)],_0x5060b2[_0x3e86(0x7a)])?_0x5060b2[_0x3e86(0x72)](_0x13c5e5,_0x4f674b):_0x5060b2[_0x3e86(0x6b)](_0x9e6e90,_0x3e86(0x34))),![];}else _0x5060b2[_0x3e86(0x72)](_0x5bd38c,_0xaa8f31);}};exports['completeLinkedInExtraction']=completeLinkedInExtraction;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.validateExtractedUrl = exports.parseExtractionMessage = exports.initiateProfileScraping = exports.completeLinkedInExtraction = exports.checkScrapingStatus = void 0;
|
|
7
|
+
var _linkedinScrapingService = require("./linkedinScrapingService");
|
|
8
|
+
/**
|
|
9
|
+
* LinkedIn DOM Extractor Service
|
|
10
|
+
* Handles profile URL extraction from WebView and orchestrates backend scraping
|
|
11
|
+
* Works with existing linkedinScrapingService for backend integration
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Parse WebView message from profile extraction script
|
|
16
|
+
* Handles JSON parsing and validation
|
|
17
|
+
*/
|
|
18
|
+
const parseExtractionMessage = data => {
|
|
19
|
+
try {
|
|
20
|
+
console.log('📨 [LINKEDIN EXTRACTOR] Parsing WebView message:', data);
|
|
21
|
+
const parsed = JSON.parse(data);
|
|
22
|
+
|
|
23
|
+
// Validate message structure
|
|
24
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
error: 'Invalid message format'
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const status = parsed.status;
|
|
31
|
+
if (status === 'success') {
|
|
32
|
+
const profileUrl = parsed.profileUrl;
|
|
33
|
+
if (!profileUrl || typeof profileUrl !== 'string') {
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: 'No profile URL in success message'
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
console.log('✅ [LINKEDIN EXTRACTOR] Profile URL extracted:', profileUrl);
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
profileUrl: profileUrl,
|
|
43
|
+
message: 'Profile URL extracted successfully'
|
|
44
|
+
};
|
|
45
|
+
} else if (status === 'error') {
|
|
46
|
+
const errorMessage = parsed.message || 'Unknown extraction error';
|
|
47
|
+
console.warn('⚠️ [LINKEDIN EXTRACTOR] Extraction error:', errorMessage);
|
|
48
|
+
return {
|
|
49
|
+
success: false,
|
|
50
|
+
error: errorMessage
|
|
51
|
+
};
|
|
52
|
+
} else {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
error: 'Unknown message status: ' + status
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error('❌ [LINKEDIN EXTRACTOR] Failed to parse message:', error);
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
error: 'Failed to parse extraction result'
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Initiate profile scraping using extracted URL
|
|
69
|
+
* Reuses existing scrapeLinkedInProfile from linkedinScrapingService
|
|
70
|
+
*/
|
|
71
|
+
exports.parseExtractionMessage = parseExtractionMessage;
|
|
72
|
+
const initiateProfileScraping = async options => {
|
|
73
|
+
const {
|
|
74
|
+
userId,
|
|
75
|
+
profileUrl,
|
|
76
|
+
onProgress,
|
|
77
|
+
onSuccess,
|
|
78
|
+
onError
|
|
79
|
+
} = options;
|
|
80
|
+
try {
|
|
81
|
+
console.log('🚀 [LINKEDIN EXTRACTOR] Starting profile scraping...');
|
|
82
|
+
console.log('🚀 [LINKEDIN EXTRACTOR] User ID:', userId);
|
|
83
|
+
console.log('🚀 [LINKEDIN EXTRACTOR] Profile URL:', profileUrl);
|
|
84
|
+
|
|
85
|
+
// Update progress
|
|
86
|
+
if (onProgress) {
|
|
87
|
+
onProgress('Sending profile URL to backend...');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Call existing scraping service (reuses linkedinScrapingService.ts)
|
|
91
|
+
const result = await (0, _linkedinScrapingService.scrapeLinkedInProfile)(userId, profileUrl);
|
|
92
|
+
if (result.success) {
|
|
93
|
+
console.log('✅ [LINKEDIN EXTRACTOR] Profile scraping successful');
|
|
94
|
+
if (onProgress) {
|
|
95
|
+
onProgress('✅ Profile scraping complete!');
|
|
96
|
+
}
|
|
97
|
+
if (onSuccess) {
|
|
98
|
+
onSuccess(result.data);
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
const errorMsg = result.error || 'Unknown scraping error';
|
|
102
|
+
console.error('❌ [LINKEDIN EXTRACTOR] Profile scraping failed:', errorMsg);
|
|
103
|
+
if (onProgress) {
|
|
104
|
+
onProgress('❌ Scraping failed');
|
|
105
|
+
}
|
|
106
|
+
if (onError) {
|
|
107
|
+
onError(errorMsg);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
} catch (error) {
|
|
111
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
112
|
+
console.error('❌ [LINKEDIN EXTRACTOR] Exception during scraping:', error);
|
|
113
|
+
if (onProgress) {
|
|
114
|
+
onProgress('❌ Error occurred');
|
|
115
|
+
}
|
|
116
|
+
if (onError) {
|
|
117
|
+
onError(errorMsg);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Check scraping status for a user (optional - for future use)
|
|
124
|
+
* This can be used to poll backend for scraping completion
|
|
125
|
+
*/
|
|
126
|
+
exports.initiateProfileScraping = initiateProfileScraping;
|
|
127
|
+
const checkScrapingStatus = async userId => {
|
|
128
|
+
try {
|
|
129
|
+
console.log('🔍 [LINKEDIN EXTRACTOR] Checking scraping status for:', userId);
|
|
130
|
+
|
|
131
|
+
// This endpoint may not exist yet - implement when needed
|
|
132
|
+
// For now, return a basic status
|
|
133
|
+
return {
|
|
134
|
+
inProgress: false,
|
|
135
|
+
completed: false
|
|
136
|
+
};
|
|
137
|
+
} catch (error) {
|
|
138
|
+
console.error('❌ [LINKEDIN EXTRACTOR] Failed to check status:', error);
|
|
139
|
+
return {
|
|
140
|
+
inProgress: false,
|
|
141
|
+
completed: false,
|
|
142
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Validate extracted LinkedIn URL
|
|
149
|
+
* Additional validation layer before sending to backend
|
|
150
|
+
*/
|
|
151
|
+
exports.checkScrapingStatus = checkScrapingStatus;
|
|
152
|
+
const validateExtractedUrl = url => {
|
|
153
|
+
if (!url || typeof url !== 'string') {
|
|
154
|
+
return {
|
|
155
|
+
valid: false,
|
|
156
|
+
error: 'URL is empty or invalid'
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Check for /in/ pattern
|
|
161
|
+
if (!url.includes('/in/')) {
|
|
162
|
+
return {
|
|
163
|
+
valid: false,
|
|
164
|
+
error: 'URL does not contain /in/ pattern'
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Check for linkedin.com domain
|
|
169
|
+
if (!url.includes('linkedin.com')) {
|
|
170
|
+
return {
|
|
171
|
+
valid: false,
|
|
172
|
+
error: 'URL is not a LinkedIn domain'
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Extract username
|
|
177
|
+
const match = url.match(/linkedin\.com\/in\/([^\/\?#]+)/);
|
|
178
|
+
if (!match || !match[1]) {
|
|
179
|
+
return {
|
|
180
|
+
valid: false,
|
|
181
|
+
error: 'Could not extract username from URL'
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
valid: true
|
|
186
|
+
};
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Complete LinkedIn extraction and scraping flow
|
|
191
|
+
* High-level function that handles the entire process
|
|
192
|
+
*/
|
|
193
|
+
exports.validateExtractedUrl = validateExtractedUrl;
|
|
194
|
+
const completeLinkedInExtraction = async (webViewMessage, userId, callbacks) => {
|
|
195
|
+
const {
|
|
196
|
+
onProgress,
|
|
197
|
+
onSuccess,
|
|
198
|
+
onError
|
|
199
|
+
} = callbacks;
|
|
200
|
+
try {
|
|
201
|
+
// Step 1: Parse extraction result
|
|
202
|
+
if (onProgress) {
|
|
203
|
+
onProgress('Processing extracted data...');
|
|
204
|
+
}
|
|
205
|
+
const extractionResult = parseExtractionMessage(webViewMessage);
|
|
206
|
+
if (!extractionResult.success || !extractionResult.profileUrl) {
|
|
207
|
+
const errorMsg = extractionResult.error || 'Failed to extract profile URL';
|
|
208
|
+
console.error('❌ [LINKEDIN EXTRACTOR] Extraction failed:', errorMsg);
|
|
209
|
+
if (onError) {
|
|
210
|
+
onError(errorMsg);
|
|
211
|
+
}
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
const profileUrl = extractionResult.profileUrl;
|
|
215
|
+
|
|
216
|
+
// Step 2: Validate URL
|
|
217
|
+
const validation = validateExtractedUrl(profileUrl);
|
|
218
|
+
if (!validation.valid) {
|
|
219
|
+
console.error('❌ [LINKEDIN EXTRACTOR] Invalid URL:', validation.error);
|
|
220
|
+
if (onError) {
|
|
221
|
+
onError(validation.error || 'Invalid profile URL');
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Step 3: Initiate scraping
|
|
227
|
+
await initiateProfileScraping({
|
|
228
|
+
userId,
|
|
229
|
+
profileUrl,
|
|
230
|
+
onProgress,
|
|
231
|
+
onSuccess,
|
|
232
|
+
onError
|
|
233
|
+
});
|
|
234
|
+
return true;
|
|
235
|
+
} catch (error) {
|
|
236
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
237
|
+
console.error('❌ [LINKEDIN EXTRACTOR] Complete flow error:', error);
|
|
238
|
+
if (onError) {
|
|
239
|
+
onError(errorMsg);
|
|
240
|
+
}
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
exports.completeLinkedInExtraction = completeLinkedInExtraction;
|
|
245
|
+
//# sourceMappingURL=linkedinDOMExtractor.js.map
|