@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,222 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
function _0x569c(){const _0x46ddb9=['defineProperty','useLinkedInProfileExtractor','storeLinkedInProfileToBackend','storeLinkedInProfileLocally','storeLinkedInProfile','getLinkedInProfileLocally','default','clearLinkedInProfileLocally','__esModule','@onairos_linkedin_profile_timestamp','Unknown\x20error','3|4|2|1|0','✅\x20[LINKEDIN\x20PROFILE]\x20Profile\x20stored\x20locally','💾\x20[LINKEDIN\x20PROFILE]\x20Storing\x20profile\x20data\x20locally...','ejCXA','vgbCi','split','log','zacgx','setItem','toISOString','TgFKz','TFPSr','MVZiG','message','hwyeY','error','GwHNS','eQcmI','gxiAo','nJjOu','warn','⚠️\x20[LINKEDIN\x20PROFILE]\x20No\x20user\x20auth,\x20using\x20basic\x20headers','getApiHeaders','EALDp','rMbeV','parse','wjoTO','❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20store\x20locally:','OvvTS','removeItem','cKqUC','⚠️\x20[LINKEDIN\x20PROFILE]\x20Backend\x20storage\x20failed,\x20but\x20local\x20storage\x20succeeded','Profile\x20stored\x20locally\x20(backend\x20storage\x20pending)','📤\x20[LINKEDIN\x20PROFILE]\x20User\x20ID:','📤\x20[LINKEDIN\x20PROFILE]\x20Profile\x20summary:','Xtapw','ywYdb','❌\x20[LINKEDIN\x20PROFILE]\x20Backend\x20storage\x20failed:','✅\x20[LINKEDIN\x20PROFILE]\x20Backend\x20storage\x20successful:','lEDXF','❌\x20[LINKEDIN\x20PROFILE]\x20Storage\x20error:','📤\x20[LINKEDIN\x20PROFILE]\x20Storing\x20profile\x20data\x20to\x20backend...','HKeAL','headline','substring','DffRv','experience','length','education','Sekpd','skills','YqoBk','getUserIdFromToken','AMIAJ','nPKmc','QQmGL','getUserAuthHeaders','hulfK','infqq','QyPMH','ZGWcY','UOFQX','FLEBb','API_CONFIG','BASE_URL','/enoch/linkedin/store-profile','stringify','text','Backend\x20storage\x20failed:\x20','status','json','uSAPl','Profile\x20stored\x20successfully','pszPl','xkJHC','KjOEm','mTgkT','ieygi','NiBjK','iqqQR','💼\x20[LINKEDIN\x20PROFILE]\x20Initiating\x20profile\x20storage...','DIkPi','gZNVz','aRogk','❌\x20[LINKEDIN\x20PROFILE]\x20Store\x20profile\x20error:','xRFcJ','hJOTP','FRNjm','anZpU','TBDoL','❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20clear\x20local\x20profile:','ZGrcj','qaZxd','RGNsI','mQltX','aMJvW','rjOxg','JeehQ','pclPF'];_0x569c=function(){return _0x46ddb9;};return _0x569c();}Object[_0x1ca5(0x0)](exports,'__esModule',{'value':!![]}),exports[_0x1ca5(0x1)]=exports[_0x1ca5(0x2)]=exports[_0x1ca5(0x3)]=exports[_0x1ca5(0x4)]=exports[_0x1ca5(0x5)]=exports[_0x1ca5(0x6)]=exports[_0x1ca5(0x7)]=void 0x0;var _asyncStorage=_interopRequireDefault(__ONAIROS_REQ_FUNC__(0x0)),_api=__ONAIROS_REQ_FUNC__(0x1),_jwtStorageService=__ONAIROS_REQ_FUNC__(0x2);function _interopRequireDefault(_0xcef36f){return _0xcef36f&&_0xcef36f[_0x1ca5(0x8)]?_0xcef36f:{'default':_0xcef36f};}const LINKEDIN_PROFILE_KEY='@onairos_linkedin_profile',LINKEDIN_PROFILE_TIMESTAMP_KEY=_0x1ca5(0x9),storeLinkedInProfileLocally=async _0x45522a=>{const _0x48e965={'TFPSr':'❌\x20[LINKEDIN\x20PROFILE]\x20Store\x20profile\x20error:','MVZiG':function(_0xea37cd,_0x4ec339){return _0xea37cd instanceof _0x4ec339;},'hwyeY':_0x1ca5(0xa),'ejCXA':function(_0x522a31,_0x1b0777){return _0x522a31===_0x1b0777;},'vgbCi':'iQqVS','mAdWG':_0x1ca5(0xb),'zacgx':_0x1ca5(0xc),'TgFKz':_0x1ca5(0xd),'wFHtM':'❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20store\x20locally:'};try{if(_0x48e965[_0x1ca5(0xe)](_0x48e965[_0x1ca5(0xf)],_0x48e965['vgbCi'])){const _0x26be59=_0x48e965['mAdWG'][_0x1ca5(0x10)]('|');let _0x4b0e54=0x0;while(!![]){switch(_0x26be59[_0x4b0e54++]){case'0':return!![];case'1':console[_0x1ca5(0x11)](_0x48e965[_0x1ca5(0x12)]);continue;case'2':await _asyncStorage[_0x1ca5(0x6)][_0x1ca5(0x13)](LINKEDIN_PROFILE_TIMESTAMP_KEY,new Date()[_0x1ca5(0x14)]());continue;case'3':console['log'](_0x48e965[_0x1ca5(0x15)]);continue;case'4':await _asyncStorage[_0x1ca5(0x6)][_0x1ca5(0x13)](LINKEDIN_PROFILE_KEY,JSON['stringify'](_0x45522a));continue;}break;}}else return _0x2cfcc4['error'](_0x48e965[_0x1ca5(0x16)],_0x2dc5b6),{'success':![],'error':_0x48e965[_0x1ca5(0x17)](_0x296aa2,_0x106add)?_0x1fdb63[_0x1ca5(0x18)]:_0x48e965[_0x1ca5(0x19)]};}catch(_0x2157ec){return console[_0x1ca5(0x1a)](_0x48e965['wFHtM'],_0x2157ec),![];}};exports['storeLinkedInProfileLocally']=storeLinkedInProfileLocally;const getLinkedInProfileLocally=async()=>{const _0x5816d6={'gxiAo':'SYIgi','nJjOu':_0x1ca5(0x1b),'EALDp':function(_0x2dfb92,_0xefb6af){return _0x2dfb92!==_0xefb6af;},'rbaJk':'lXevN','rMbeV':_0x1ca5(0x1c),'wjoTO':'❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20get\x20local\x20profile:'};try{if(_0x5816d6[_0x1ca5(0x1d)]===_0x5816d6[_0x1ca5(0x1e)])_0x396cec[_0x1ca5(0x1f)](_0x1ca5(0x20)),_0xb5d3bd=(0x0,_0x116ac0[_0x1ca5(0x21)])();else{const _0x1b6de1=await _asyncStorage[_0x1ca5(0x6)]['getItem'](LINKEDIN_PROFILE_KEY);if(_0x1b6de1)return _0x5816d6[_0x1ca5(0x22)](_0x5816d6['rbaJk'],_0x5816d6[_0x1ca5(0x23)])?JSON[_0x1ca5(0x24)](_0x1b6de1):_0x5b370();return null;}}catch(_0x3d5c50){return console[_0x1ca5(0x1a)](_0x5816d6[_0x1ca5(0x25)],_0x3d5c50),null;}};exports[_0x1ca5(0x5)]=getLinkedInProfileLocally;const clearLinkedInProfileLocally=async()=>{const _0x3c0fc8={'cKqUC':_0x1ca5(0x26),'LkLSi':_0x1ca5(0x27),'zwLTQ':'❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20clear\x20local\x20profile:'};try{return await _asyncStorage['default'][_0x1ca5(0x28)](LINKEDIN_PROFILE_KEY),await _asyncStorage[_0x1ca5(0x6)][_0x1ca5(0x28)](LINKEDIN_PROFILE_TIMESTAMP_KEY),!![];}catch(_0x9d8afc){return _0x3c0fc8['LkLSi']==='OvvTS'?(console[_0x1ca5(0x1a)](_0x3c0fc8['zwLTQ'],_0x9d8afc),![]):(_0x543e1b[_0x1ca5(0x1a)](_0x3c0fc8[_0x1ca5(0x29)],_0x5b2657),![]);}};function _0x1ca5(_0x569cbd,_0x1ca538){_0x569cbd=_0x569cbd-0x0;const _0x2af0c2=_0x569c();let _0x2a0517=_0x2af0c2[_0x569cbd];return _0x2a0517;}exports[_0x1ca5(0x7)]=clearLinkedInProfileLocally;const storeLinkedInProfileToBackend=async(_0x292605,_0x5ab4a5)=>{const _0x1236a7={'QQmGL':function(_0x3b2de8){return _0x3b2de8();},'ZGWcY':_0x1ca5(0x2a),'UOFQX':_0x1ca5(0x2b),'FLEBb':function(_0xd18b3,_0xd9d930,_0x10edc4){return _0xd18b3(_0xd9d930,_0x10edc4);},'iqqQR':function(_0x39600f){return _0x39600f();},'cQCwK':_0x1ca5(0x2c),'HKeAL':_0x1ca5(0x2d),'DffRv':function(_0x112bf8,_0x3bdcd8){return _0x112bf8===_0x3bdcd8;},'Sekpd':function(_0x11cc45,_0x365e5d){return _0x11cc45===_0x365e5d;},'YqoBk':function(_0x5b23c3,_0xe84a77){return _0x5b23c3===_0xe84a77;},'zfJeD':function(_0x3436a2,_0x10dba9){return _0x3436a2||_0x10dba9;},'AMIAJ':'📤\x20[LINKEDIN\x20PROFILE]\x20Effective\x20userId:','nPKmc':_0x1ca5(0x2e),'hulfK':'🔑\x20[LINKEDIN\x20PROFILE]\x20Using\x20authenticated\x20headers','infqq':function(_0x3e3b3b,_0x25e5e2){return _0x3e3b3b!==_0x25e5e2;},'ZYaXi':_0x1ca5(0x2f),'QyPMH':'QXtvb','nLEPy':_0x1ca5(0x30),'uSAPl':function(_0x4d7e07,_0x2ef1bf){return _0x4d7e07(_0x2ef1bf);},'ZwvLf':_0x1ca5(0x31),'pszPl':_0x1ca5(0x32),'xkJHC':'jivUp','KjOEm':_0x1ca5(0x33),'mTgkT':function(_0x279dc6,_0x45bad5){return _0x279dc6(_0x45bad5);},'ieygi':function(_0x442cb2,_0x1453ad){return _0x442cb2 instanceof _0x1453ad;},'NiBjK':'Unknown\x20error'};try{var _0x206e3c,_0x8b69d1,_0x1aeab9,_0x1e43d7;console['log'](_0x1ca5(0x34)),console[_0x1ca5(0x11)](_0x1236a7['cQCwK'],_0x292605),console[_0x1ca5(0x11)](_0x1236a7[_0x1ca5(0x35)],{'name':_0x5ab4a5['fullName'],'headline':(_0x206e3c=_0x5ab4a5[_0x1ca5(0x36)])===null||_0x206e3c===void 0x0?void 0x0:_0x206e3c[_0x1ca5(0x37)](0x0,0x32),'experienceCount':(_0x1236a7[_0x1ca5(0x38)](_0x8b69d1=_0x5ab4a5[_0x1ca5(0x39)],null)||_0x1236a7[_0x1ca5(0x38)](_0x8b69d1,void 0x0)?void 0x0:_0x8b69d1[_0x1ca5(0x3a)])||0x0,'educationCount':((_0x1aeab9=_0x5ab4a5[_0x1ca5(0x3b)])===null||_0x1aeab9===void 0x0?void 0x0:_0x1aeab9[_0x1ca5(0x3a)])||0x0,'skillsCount':(_0x1236a7[_0x1ca5(0x3c)](_0x1e43d7=_0x5ab4a5[_0x1ca5(0x3d)],null)||_0x1236a7[_0x1ca5(0x3e)](_0x1e43d7,void 0x0)?void 0x0:_0x1e43d7['length'])||0x0});const _0x1a935d=await(0x0,_jwtStorageService[_0x1ca5(0x3f)])(),_0x23a474=_0x1236a7['zfJeD'](_0x1a935d,_0x292605);console[_0x1ca5(0x11)](_0x1236a7[_0x1ca5(0x40)],_0x23a474);let _0x5957df;try{if(_0x1236a7[_0x1ca5(0x41)]!=='Xtapw')return _0x1236a7[_0x1ca5(0x42)](_0x5a61ea);else _0x5957df=await(0x0,_api[_0x1ca5(0x43)])(),console[_0x1ca5(0x11)](_0x1236a7[_0x1ca5(0x44)]);}catch(_0x386fae){if(_0x1236a7[_0x1ca5(0x45)](_0x1236a7['ZYaXi'],_0x1236a7[_0x1ca5(0x46)]))console[_0x1ca5(0x1f)](_0x1ca5(0x20)),_0x5957df=(0x0,_api['getApiHeaders'])();else return _0x71e012[_0x1ca5(0x1f)](_0x1236a7[_0x1ca5(0x47)]),{'success':!![],'message':_0x1236a7[_0x1ca5(0x48)]};}const _0x15a72d=await _0x1236a7[_0x1ca5(0x49)](fetch,_api[_0x1ca5(0x4a)][_0x1ca5(0x4b)]+_0x1ca5(0x4c),{'method':'POST','headers':_0x5957df,'body':JSON[_0x1ca5(0x4d)]({'userId':_0x23a474,'profileData':_0x5ab4a5})});if(!_0x15a72d['ok']){const _0x2019a0=await _0x15a72d[_0x1ca5(0x4e)]();return console[_0x1ca5(0x1a)](_0x1236a7['nLEPy'],_0x15a72d['status'],_0x2019a0),await _0x1236a7['uSAPl'](storeLinkedInProfileLocally,_0x5ab4a5),{'success':![],'error':_0x1ca5(0x4f)+_0x15a72d[_0x1ca5(0x50)]};}const _0x744c2e=await _0x15a72d[_0x1ca5(0x51)]();return console[_0x1ca5(0x11)](_0x1236a7['ZwvLf'],_0x744c2e),await _0x1236a7[_0x1ca5(0x52)](storeLinkedInProfileLocally,_0x5ab4a5),{'success':!![],'message':_0x1ca5(0x53)};}catch(_0x18bbe6){if(_0x1236a7[_0x1ca5(0x45)](_0x1236a7[_0x1ca5(0x54)],_0x1236a7[_0x1ca5(0x55)]))return console[_0x1ca5(0x1a)](_0x1236a7[_0x1ca5(0x56)],_0x18bbe6),await _0x1236a7[_0x1ca5(0x57)](storeLinkedInProfileLocally,_0x5ab4a5),{'success':![],'error':_0x1236a7[_0x1ca5(0x58)](_0x18bbe6,Error)?_0x18bbe6[_0x1ca5(0x18)]:_0x1236a7[_0x1ca5(0x59)]};else{const _0x18cba9={'DSISy':function(_0x36b113){return _0x36b113();}},_0x265b97=async(_0x575c96,_0x37c7ac)=>{return _0x1236a7[_0x1ca5(0x49)](_0x43ad4a,_0x575c96,_0x37c7ac);},_0x3c0927=async()=>{return _0x1236a7[_0x1ca5(0x5a)](_0x12c6a1);},_0x4039c0=async()=>{return _0x18cba9['DSISy'](_0xca4065);};return{'storeProfile':_0x265b97,'getStoredProfile':_0x3c0927,'clearProfile':_0x4039c0};}}};exports[_0x1ca5(0x2)]=storeLinkedInProfileToBackend;const storeLinkedInProfile=async(_0x5fbdf3,_0x4abbfb)=>{const _0x4d6e9d={'qaZxd':function(_0x2c7060,_0x7971b5,_0x406fcc){return _0x2c7060(_0x7971b5,_0x406fcc);},'xRFcJ':function(_0x10020e,_0x32424d){return _0x10020e===_0x32424d;},'hJOTP':'FtjlX','iDzaR':_0x1ca5(0x5b),'FRNjm':function(_0x499e22,_0x12bb6a){return _0x499e22(_0x12bb6a);},'jMCaN':function(_0x141bd9,_0x2c07e0,_0x3614ed){return _0x141bd9(_0x2c07e0,_0x3614ed);},'anZpU':_0x1ca5(0x5c),'TBDoL':_0x1ca5(0x5d),'ZGrcj':_0x1ca5(0x2a),'vOBcm':_0x1ca5(0x53),'RGNsI':function(_0x3c967b,_0x3ad385){return _0x3c967b!==_0x3ad385;},'mQltX':_0x1ca5(0x5e),'aMJvW':_0x1ca5(0x5f),'rjOxg':function(_0xd91138,_0x2fc4ae){return _0xd91138 instanceof _0x2fc4ae;},'JeehQ':_0x1ca5(0xa)};try{if(_0x4d6e9d[_0x1ca5(0x60)](_0x4d6e9d[_0x1ca5(0x61)],_0x4d6e9d[_0x1ca5(0x61)])){console['log'](_0x4d6e9d['iDzaR']),await _0x4d6e9d[_0x1ca5(0x62)](storeLinkedInProfileLocally,_0x4abbfb);const _0x2d6ec3=await _0x4d6e9d['jMCaN'](storeLinkedInProfileToBackend,_0x5fbdf3,_0x4abbfb);if(!_0x2d6ec3['success'])return _0x4d6e9d[_0x1ca5(0x60)](_0x4d6e9d[_0x1ca5(0x63)],_0x4d6e9d[_0x1ca5(0x64)])?(_0x2ca794[_0x1ca5(0x1a)](_0x1ca5(0x65),_0x3bce95),![]):(console['warn'](_0x4d6e9d[_0x1ca5(0x66)]),{'success':!![],'message':_0x1ca5(0x2b)});return{'success':!![],'message':_0x4d6e9d['vOBcm']};}else return _0x4d6e9d[_0x1ca5(0x67)](_0x471274,_0x139c83,_0xee6943);}catch(_0x2b2bf5){return _0x4d6e9d[_0x1ca5(0x68)](_0x4d6e9d[_0x1ca5(0x69)],_0x1ca5(0x5e))?_0x2756bc['parse'](_0x5d04c2):(console['error'](_0x4d6e9d[_0x1ca5(0x6a)],_0x2b2bf5),{'success':![],'error':_0x4d6e9d[_0x1ca5(0x6b)](_0x2b2bf5,Error)?_0x2b2bf5[_0x1ca5(0x18)]:_0x4d6e9d[_0x1ca5(0x6c)]});}};exports[_0x1ca5(0x4)]=storeLinkedInProfile;const useLinkedInProfileExtractor=()=>{const _0x5918d7={'ojdsn':function(_0x176fbd,_0x19577,_0x1c11f4){return _0x176fbd(_0x19577,_0x1c11f4);},'pclPF':function(_0xb4cb10){return _0xb4cb10();}},_0xc18217=async(_0x361699,_0x502e8b)=>{return _0x5918d7['ojdsn'](storeLinkedInProfile,_0x361699,_0x502e8b);},_0x265152=async()=>{return _0x5918d7[_0x1ca5(0x6d)](getLinkedInProfileLocally);},_0x145716=async()=>{return clearLinkedInProfileLocally();};return{'storeProfile':_0xc18217,'getStoredProfile':_0x265152,'clearProfile':_0x145716};};exports[_0x1ca5(0x1)]=useLinkedInProfileExtractor;var _default=exports[_0x1ca5(0x6)]={'storeLinkedInProfile':storeLinkedInProfile,'storeLinkedInProfileLocally':storeLinkedInProfileLocally,'getLinkedInProfileLocally':getLinkedInProfileLocally,'clearLinkedInProfileLocally':clearLinkedInProfileLocally,'storeLinkedInProfileToBackend':storeLinkedInProfileToBackend,'useLinkedInProfileExtractor':useLinkedInProfileExtractor};
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useLinkedInProfileExtractor = exports.storeLinkedInProfileToBackend = exports.storeLinkedInProfileLocally = exports.storeLinkedInProfile = exports.getLinkedInProfileLocally = exports.default = exports.clearLinkedInProfileLocally = void 0;
|
|
7
|
+
var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
|
|
8
|
+
var _api = require("../config/api");
|
|
9
|
+
var _jwtStorageService = require("./jwtStorageService");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
/**
|
|
12
|
+
* LinkedIn Profile Service
|
|
13
|
+
* Handles storing and managing LinkedIn profile data extracted from DOM
|
|
14
|
+
* Similar to chatGPTConversationService pattern
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* LinkedIn Profile Data Types
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
// AsyncStorage keys
|
|
22
|
+
const LINKEDIN_PROFILE_KEY = '@onairos_linkedin_profile';
|
|
23
|
+
const LINKEDIN_PROFILE_TIMESTAMP_KEY = '@onairos_linkedin_profile_timestamp';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Store LinkedIn profile data locally
|
|
27
|
+
*/
|
|
28
|
+
const storeLinkedInProfileLocally = async profileData => {
|
|
29
|
+
try {
|
|
30
|
+
console.log('💾 [LINKEDIN PROFILE] Storing profile data locally...');
|
|
31
|
+
await _asyncStorage.default.setItem(LINKEDIN_PROFILE_KEY, JSON.stringify(profileData));
|
|
32
|
+
await _asyncStorage.default.setItem(LINKEDIN_PROFILE_TIMESTAMP_KEY, new Date().toISOString());
|
|
33
|
+
console.log('✅ [LINKEDIN PROFILE] Profile stored locally');
|
|
34
|
+
return true;
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.error('❌ [LINKEDIN PROFILE] Failed to store locally:', error);
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Get locally stored LinkedIn profile data
|
|
43
|
+
*/
|
|
44
|
+
exports.storeLinkedInProfileLocally = storeLinkedInProfileLocally;
|
|
45
|
+
const getLinkedInProfileLocally = async () => {
|
|
46
|
+
try {
|
|
47
|
+
const data = await _asyncStorage.default.getItem(LINKEDIN_PROFILE_KEY);
|
|
48
|
+
if (data) {
|
|
49
|
+
return JSON.parse(data);
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
} catch (error) {
|
|
53
|
+
console.error('❌ [LINKEDIN PROFILE] Failed to get local profile:', error);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Clear locally stored LinkedIn profile data
|
|
60
|
+
*/
|
|
61
|
+
exports.getLinkedInProfileLocally = getLinkedInProfileLocally;
|
|
62
|
+
const clearLinkedInProfileLocally = async () => {
|
|
63
|
+
try {
|
|
64
|
+
await _asyncStorage.default.removeItem(LINKEDIN_PROFILE_KEY);
|
|
65
|
+
await _asyncStorage.default.removeItem(LINKEDIN_PROFILE_TIMESTAMP_KEY);
|
|
66
|
+
return true;
|
|
67
|
+
} catch (error) {
|
|
68
|
+
console.error('❌ [LINKEDIN PROFILE] Failed to clear local profile:', error);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Store LinkedIn profile data to backend
|
|
75
|
+
* This sends the extracted profile data to the Onairos backend for processing
|
|
76
|
+
*/
|
|
77
|
+
exports.clearLinkedInProfileLocally = clearLinkedInProfileLocally;
|
|
78
|
+
const storeLinkedInProfileToBackend = async (userId, profileData) => {
|
|
79
|
+
try {
|
|
80
|
+
var _profileData$headline, _profileData$experien, _profileData$educatio, _profileData$skills;
|
|
81
|
+
console.log('📤 [LINKEDIN PROFILE] Storing profile data to backend...');
|
|
82
|
+
console.log('📤 [LINKEDIN PROFILE] User ID:', userId);
|
|
83
|
+
console.log('📤 [LINKEDIN PROFILE] Profile summary:', {
|
|
84
|
+
name: profileData.fullName,
|
|
85
|
+
headline: (_profileData$headline = profileData.headline) === null || _profileData$headline === void 0 ? void 0 : _profileData$headline.substring(0, 50),
|
|
86
|
+
experienceCount: ((_profileData$experien = profileData.experience) === null || _profileData$experien === void 0 ? void 0 : _profileData$experien.length) || 0,
|
|
87
|
+
educationCount: ((_profileData$educatio = profileData.education) === null || _profileData$educatio === void 0 ? void 0 : _profileData$educatio.length) || 0,
|
|
88
|
+
skillsCount: ((_profileData$skills = profileData.skills) === null || _profileData$skills === void 0 ? void 0 : _profileData$skills.length) || 0
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Get the actual userId (UUID) from JWT token
|
|
92
|
+
const jwtUserId = await (0, _jwtStorageService.getUserIdFromToken)();
|
|
93
|
+
const effectiveUserId = jwtUserId || userId;
|
|
94
|
+
console.log('📤 [LINKEDIN PROFILE] Effective userId:', effectiveUserId);
|
|
95
|
+
|
|
96
|
+
// Get authenticated headers
|
|
97
|
+
let headers;
|
|
98
|
+
try {
|
|
99
|
+
headers = await (0, _api.getUserAuthHeaders)();
|
|
100
|
+
console.log('🔑 [LINKEDIN PROFILE] Using authenticated headers');
|
|
101
|
+
} catch (authError) {
|
|
102
|
+
console.warn('⚠️ [LINKEDIN PROFILE] No user auth, using basic headers');
|
|
103
|
+
headers = (0, _api.getApiHeaders)();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Send to backend
|
|
107
|
+
const response = await fetch(`${_api.API_CONFIG.BASE_URL}/enoch/linkedin/store-profile`, {
|
|
108
|
+
method: 'POST',
|
|
109
|
+
headers,
|
|
110
|
+
body: JSON.stringify({
|
|
111
|
+
userId: effectiveUserId,
|
|
112
|
+
profileData: profileData
|
|
113
|
+
})
|
|
114
|
+
});
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
const errorText = await response.text();
|
|
117
|
+
console.error('❌ [LINKEDIN PROFILE] Backend storage failed:', response.status, errorText);
|
|
118
|
+
|
|
119
|
+
// Store locally as fallback
|
|
120
|
+
await storeLinkedInProfileLocally(profileData);
|
|
121
|
+
return {
|
|
122
|
+
success: false,
|
|
123
|
+
error: `Backend storage failed: ${response.status}`
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const result = await response.json();
|
|
127
|
+
console.log('✅ [LINKEDIN PROFILE] Backend storage successful:', result);
|
|
128
|
+
|
|
129
|
+
// Also store locally
|
|
130
|
+
await storeLinkedInProfileLocally(profileData);
|
|
131
|
+
return {
|
|
132
|
+
success: true,
|
|
133
|
+
message: 'Profile stored successfully'
|
|
134
|
+
};
|
|
135
|
+
} catch (error) {
|
|
136
|
+
console.error('❌ [LINKEDIN PROFILE] Storage error:', error);
|
|
137
|
+
|
|
138
|
+
// Store locally as fallback
|
|
139
|
+
await storeLinkedInProfileLocally(profileData);
|
|
140
|
+
return {
|
|
141
|
+
success: false,
|
|
142
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Combined function to store profile both locally and to backend
|
|
149
|
+
*/
|
|
150
|
+
exports.storeLinkedInProfileToBackend = storeLinkedInProfileToBackend;
|
|
151
|
+
const storeLinkedInProfile = async (userId, profileData) => {
|
|
152
|
+
try {
|
|
153
|
+
console.log('💼 [LINKEDIN PROFILE] Initiating profile storage...');
|
|
154
|
+
|
|
155
|
+
// Store locally first (immediate)
|
|
156
|
+
await storeLinkedInProfileLocally(profileData);
|
|
157
|
+
|
|
158
|
+
// Then try to store to backend (may fail if endpoint doesn't exist yet)
|
|
159
|
+
const backendResult = await storeLinkedInProfileToBackend(userId, profileData);
|
|
160
|
+
if (!backendResult.success) {
|
|
161
|
+
console.warn('⚠️ [LINKEDIN PROFILE] Backend storage failed, but local storage succeeded');
|
|
162
|
+
// Return success since local storage worked
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
message: 'Profile stored locally (backend storage pending)'
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
success: true,
|
|
170
|
+
message: 'Profile stored successfully'
|
|
171
|
+
};
|
|
172
|
+
} catch (error) {
|
|
173
|
+
console.error('❌ [LINKEDIN PROFILE] Store profile error:', error);
|
|
174
|
+
return {
|
|
175
|
+
success: false,
|
|
176
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Hook for LinkedIn profile extraction
|
|
183
|
+
* Returns functions to handle profile extraction workflow
|
|
184
|
+
*/
|
|
185
|
+
exports.storeLinkedInProfile = storeLinkedInProfile;
|
|
186
|
+
const useLinkedInProfileExtractor = () => {
|
|
187
|
+
/**
|
|
188
|
+
* Store extracted profile data
|
|
189
|
+
*/
|
|
190
|
+
const storeProfile = async (userId, profileData) => {
|
|
191
|
+
return storeLinkedInProfile(userId, profileData);
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Get stored profile data
|
|
196
|
+
*/
|
|
197
|
+
const getStoredProfile = async () => {
|
|
198
|
+
return getLinkedInProfileLocally();
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Clear stored profile data
|
|
203
|
+
*/
|
|
204
|
+
const clearProfile = async () => {
|
|
205
|
+
return clearLinkedInProfileLocally();
|
|
206
|
+
};
|
|
207
|
+
return {
|
|
208
|
+
storeProfile,
|
|
209
|
+
getStoredProfile,
|
|
210
|
+
clearProfile
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
exports.useLinkedInProfileExtractor = useLinkedInProfileExtractor;
|
|
214
|
+
var _default = exports.default = {
|
|
215
|
+
storeLinkedInProfile,
|
|
216
|
+
storeLinkedInProfileLocally,
|
|
217
|
+
getLinkedInProfileLocally,
|
|
218
|
+
clearLinkedInProfileLocally,
|
|
219
|
+
storeLinkedInProfileToBackend,
|
|
220
|
+
useLinkedInProfileExtractor
|
|
221
|
+
};
|
|
222
|
+
//# sourceMappingURL=linkedinProfileService.js.map
|
|
@@ -1,8 +1,230 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Object[_0x38e9(0x0)](exports,_0x38e9(0x1),{'value':!![]}),exports[_0x38e9(0x2)]=exports['isValidLinkedInUrl']=exports[_0x38e9(0x3)]=exports[_0x38e9(0x4)]=exports[_0x38e9(0x5)]=exports[_0x38e9(0x6)]=void 0x0;var _api=__ONAIROS_REQ_FUNC__(0x0),_jwtStorageService=__ONAIROS_REQ_FUNC__(0x1);function _0x28b1(){const _0x327aff=['defineProperty','__esModule','scrapeLinkedInProfile','getLinkedInConnectionStatus','formatLinkedInUrl','extractLinkedInUsername','canScrapeProfile','🔍\x20[LINKEDIN\x20SCRAPE]\x20Passed\x20User\x20ID:','🔍\x20[LINKEDIN\x20SCRAPE]\x20Profile\x20URL:','🔍\x20[LINKEDIN\x20SCRAPE]\x20JWT\x20userId:','🔍\x20[LINKEDIN\x20SCRAPE]\x20Effective\x20userId\x20(will\x20use):','wtOGJ','⚠️\x20[LINKEDIN\x20SCRAPE]\x20No\x20user\x20auth\x20available,\x20using\x20basic\x20headers:','📊\x20[LINKEDIN\x20SCRAPE]\x20Data\x20preview:','Profile\x20scraped\x20successfully','❌\x20[LINKEDIN\x20SCRAPE]\x20Error:','Unknown\x20error\x20occurred\x20during\x20scraping','log','Ulfsq','getUserIdFromToken','qvKnu','WDiMN','Ziqqi','error','yKBct','getUserAuthHeaders','hYcMR','warn','fnhmO','getApiHeaders','obwuG','API_CONFIG','/enoch/linkedin-scrape/scrape-profile','stringify','text','status','parse','json','cnllt','lfAhG','profileData','hYMQV','fullName','vhPPm','headline','PYdYk','aJOxY','WYQjY','experience','length','education','PItGl','ktpfY','skills','hcoox','cHcqk','qAeiv','message','qgvvp','fCedQ','LEbJv','PhlCO','ywkhh','❌\x20[LINKEDIN]\x20Error\x20extracting\x20username:','XPsPW','bguhS','YJIqV','mDWWB','pStUy','sygpo','NRiBC','prdua','ExpnY','test','JlbCx','GHDXl','vpxLo','GuJLB','EFuba','isValidLinkedInUrl','❌\x20[LINKEDIN]\x20Error\x20checking\x20scrape\x20availability:','http://','cYuVQ','lsLMR','/in/','startsWith','jIvyO','yMjPV','includes','ctxLF','XYMFL','linkedin.com/in/','fwhtc','ElodD','gUXwx','https://','https://linkedin.com','https://linkedin.com/in/','GnWtH','dqnnU','UlFmy','cPmVU','vQYXF','BcJcA','aAJJr','LUoDH','WCBST','mLGeN','Hwfdp','WlqYn','EUJNn','BASE_URL','/user/','/connections','iduNZ','CUjQc','ZJrMV','connections','LinkedIn','dPkJf','GbjJB','yLHKr','❌\x20[LINKEDIN\x20SCRAPE]\x20Invalid\x20LinkedIn\x20URL','rawFF','AcrZt','PmAjz','tsoTu','kbbdo','xVxar','iizKt','jLpPT','/enoch/linkedin-scrape/scrape-profile/','match','aaxYx','FaBQW','htIhV','❌\x20[LINKEDIN]\x20Error\x20getting\x20connection\x20status:'];_0x28b1=function(){return _0x327aff;};return _0x28b1();}const scrapeLinkedInProfile=async(_0x40cc48,_0x34a8d1)=>{const _0x1c3603={'Ulfsq':'🔍\x20[LINKEDIN\x20SCRAPE]\x20Starting\x20profile\x20scrape...','snuIk':_0x38e9(0x7),'ytjnt':_0x38e9(0x8),'qvKnu':function(_0x1ed67e,_0x39421f){return _0x1ed67e||_0x39421f;},'blZii':_0x38e9(0x9),'WDiMN':_0x38e9(0xa),'Ziqqi':function(_0x2d9f48,_0x43d4fb){return _0x2d9f48(_0x43d4fb);},'xUQML':'❌\x20[LINKEDIN\x20SCRAPE]\x20Invalid\x20LinkedIn\x20URL','ixBPP':'Invalid\x20LinkedIn\x20profile\x20URL.\x20Please\x20use\x20format:\x20https://linkedin.com/in/username','jKvSU':function(_0x52910e,_0x3e4c65){return _0x52910e===_0x3e4c65;},'yKBct':_0x38e9(0xb),'XgNSX':'OmqXb','hYcMR':'🔑\x20[LINKEDIN\x20SCRAPE]\x20Using\x20authenticated\x20user\x20headers','fnhmO':_0x38e9(0xc),'obwuG':function(_0x274b3e,_0x3a0bca,_0x2c1570){return _0x274b3e(_0x3a0bca,_0x2c1570);},'OoWEc':'❌\x20[LINKEDIN\x20SCRAPE]\x20Failed:','cnllt':'✅\x20[LINKEDIN\x20SCRAPE]\x20Profile\x20scraped\x20successfully','lfAhG':_0x38e9(0xd),'hYMQV':function(_0x462c4e,_0x1565a9){return _0x462c4e===_0x1565a9;},'PYdYk':function(_0x510e41,_0x1180de){return _0x510e41===_0x1180de;},'vhPPm':function(_0x28c3d4,_0x1f464d){return _0x28c3d4===_0x1f464d;},'aJOxY':function(_0x3630a5,_0x4c9135){return _0x3630a5===_0x4c9135;},'WYQjY':function(_0x4fd620,_0x5673be){return _0x4fd620===_0x5673be;},'qjEJh':function(_0x1b8d8d,_0x761219){return _0x1b8d8d===_0x761219;},'PItGl':function(_0x45fba3,_0xed0e7c){return _0x45fba3===_0xed0e7c;},'ktpfY':function(_0x57d8e2,_0x1a340e){return _0x57d8e2===_0x1a340e;},'hcoox':_0x38e9(0xe),'cHcqk':_0x38e9(0xf),'qAeiv':function(_0x4b2bfd,_0x3663a8){return _0x4b2bfd instanceof _0x3663a8;},'qgvvp':_0x38e9(0x10)};try{var _0x4a0131,_0x2e0db0,_0x15e9a9,_0x215f74,_0x297fea;console[_0x38e9(0x11)](_0x1c3603[_0x38e9(0x12)]),console[_0x38e9(0x11)](_0x1c3603['snuIk'],_0x40cc48),console[_0x38e9(0x11)](_0x1c3603['ytjnt'],_0x34a8d1);const _0x484cc7=await(0x0,_jwtStorageService[_0x38e9(0x13)])(),_0x478465=_0x1c3603[_0x38e9(0x14)](_0x484cc7,_0x40cc48);console[_0x38e9(0x11)](_0x1c3603['blZii'],_0x484cc7),console[_0x38e9(0x11)](_0x1c3603[_0x38e9(0x15)],_0x478465);if(!_0x1c3603[_0x38e9(0x16)](isValidLinkedInUrl,_0x34a8d1))return console[_0x38e9(0x17)](_0x1c3603['xUQML']),{'success':![],'error':_0x1c3603['ixBPP']};let _0x38520f;try{if(_0x1c3603['jKvSU'](_0x1c3603[_0x38e9(0x18)],_0x1c3603['XgNSX']))return![];else _0x38520f=await(0x0,_api[_0x38e9(0x19)])(),console[_0x38e9(0x11)](_0x1c3603[_0x38e9(0x1a)]);}catch(_0x517e9c){console[_0x38e9(0x1b)](_0x1c3603[_0x38e9(0x1c)],_0x517e9c),_0x38520f=(0x0,_api[_0x38e9(0x1d)])();}const _0x6fca66=await _0x1c3603[_0x38e9(0x1e)](fetch,_api[_0x38e9(0x1f)]['BASE_URL']+_0x38e9(0x20),{'method':'POST','headers':_0x38520f,'body':JSON[_0x38e9(0x21)]({'userId':_0x478465,'profileUrl':_0x34a8d1})});if(!_0x6fca66['ok']){const _0x42cf97=await _0x6fca66[_0x38e9(0x22)]();console[_0x38e9(0x17)](_0x1c3603['OoWEc'],_0x6fca66['status'],_0x42cf97);let _0x5da301='Scraping\x20failed:\x20'+_0x6fca66[_0x38e9(0x23)];try{const _0x2d2a6b=JSON[_0x38e9(0x24)](_0x42cf97);_0x5da301=_0x2d2a6b[_0x38e9(0x17)]||_0x2d2a6b['message']||_0x5da301;}catch{}return{'success':![],'error':_0x5da301};}const _0x5b59bf=await _0x6fca66[_0x38e9(0x25)]();return console[_0x38e9(0x11)](_0x1c3603[_0x38e9(0x26)]),console['log'](_0x1c3603[_0x38e9(0x27)],{'name':_0x1c3603['hYMQV'](_0x4a0131=_0x5b59bf[_0x38e9(0x28)],null)||_0x1c3603[_0x38e9(0x29)](_0x4a0131,void 0x0)?void 0x0:_0x4a0131[_0x38e9(0x2a)],'headline':_0x1c3603['PYdYk'](_0x2e0db0=_0x5b59bf[_0x38e9(0x28)],null)||_0x1c3603[_0x38e9(0x2b)](_0x2e0db0,void 0x0)?void 0x0:_0x2e0db0[_0x38e9(0x2c)],'experienceCount':(_0x1c3603[_0x38e9(0x2d)](_0x15e9a9=_0x5b59bf['profileData'],null)||_0x1c3603[_0x38e9(0x2e)](_0x15e9a9,void 0x0)||_0x1c3603[_0x38e9(0x2f)](_0x15e9a9=_0x15e9a9[_0x38e9(0x30)],null)||_0x1c3603[_0x38e9(0x2f)](_0x15e9a9,void 0x0)?void 0x0:_0x15e9a9[_0x38e9(0x31)])||0x0,'educationCount':(_0x1c3603[_0x38e9(0x2b)](_0x215f74=_0x5b59bf['profileData'],null)||_0x215f74===void 0x0||_0x1c3603[_0x38e9(0x2e)](_0x215f74=_0x215f74[_0x38e9(0x32)],null)||_0x1c3603['qjEJh'](_0x215f74,void 0x0)?void 0x0:_0x215f74[_0x38e9(0x31)])||0x0,'skillsCount':(_0x1c3603[_0x38e9(0x33)](_0x297fea=_0x5b59bf[_0x38e9(0x28)],null)||_0x1c3603[_0x38e9(0x34)](_0x297fea,void 0x0)||_0x1c3603[_0x38e9(0x33)](_0x297fea=_0x297fea[_0x38e9(0x35)],null)||_0x297fea===void 0x0?void 0x0:_0x297fea[_0x38e9(0x31)])||0x0}),{'success':!![],'data':_0x5b59bf[_0x38e9(0x28)],'message':_0x1c3603[_0x38e9(0x36)]};}catch(_0x42b1bb){return console[_0x38e9(0x17)](_0x1c3603[_0x38e9(0x37)],_0x42b1bb),{'success':![],'error':_0x1c3603[_0x38e9(0x38)](_0x42b1bb,Error)?_0x42b1bb[_0x38e9(0x39)]:_0x1c3603[_0x38e9(0x3a)]};}};exports[_0x38e9(0x2)]=scrapeLinkedInProfile;const extractLinkedInUsername=_0x50caa1=>{const _0x58a3fe={'XPsPW':function(_0x27f90c,_0x1e5ddd){return _0x27f90c!==_0x1e5ddd;},'bguhS':_0x38e9(0x3b),'YJIqV':_0x38e9(0x3c),'mDWWB':function(_0x3c38da,_0x2f242d){return _0x3c38da!==_0x2f242d;},'pStUy':_0x38e9(0x3d),'sygpo':_0x38e9(0x3e),'NRiBC':_0x38e9(0x3f)};try{if(_0x58a3fe[_0x38e9(0x40)](_0x58a3fe[_0x38e9(0x41)],_0x58a3fe[_0x38e9(0x42)])){const _0x1ae9f6=_0x50caa1['match'](/linkedin\.com\/in\/([^\/\?#]+)/);return _0x1ae9f6?_0x1ae9f6[0x1]:null;}else{const _0x2827ba=_0x202cbd[_0x38e9(0x24)](_0x44c0e6);_0x154541=_0x2827ba[_0x38e9(0x17)]||_0x2827ba[_0x38e9(0x39)]||_0x12cedc;}}catch(_0x3a099d){return _0x58a3fe[_0x38e9(0x43)](_0x58a3fe[_0x38e9(0x44)],_0x58a3fe[_0x38e9(0x45)])?(console[_0x38e9(0x17)](_0x58a3fe[_0x38e9(0x46)],_0x3a099d),null):_0x4cff2b;}};exports[_0x38e9(0x5)]=extractLinkedInUsername;const isValidLinkedInUrl=_0x278dd1=>{const _0x2f2985={'GHDXl':_0x38e9(0xf),'vpxLo':function(_0x208027,_0x573fe6){return _0x208027 instanceof _0x573fe6;},'GuJLB':_0x38e9(0x10),'ExpnY':function(_0x3f453c,_0x306a3a){return _0x3f453c!==_0x306a3a;},'JlbCx':_0x38e9(0x47),'mlcUb':function(_0xeebdb8,_0x421e9e){return _0xeebdb8(_0x421e9e);},'tvYzq':function(_0x2ff7f9,_0x28ecfe){return _0x2ff7f9!==_0x28ecfe;},'EFuba':function(_0x5f0277,_0x177e3f){return _0x5f0277>_0x177e3f;}};if(!_0x278dd1||_0x2f2985[_0x38e9(0x48)](typeof _0x278dd1,'string'))return![];const _0x1b268d=/linkedin\.com\/in\/[^\/\?#]+/[_0x38e9(0x49)](_0x278dd1);if(!_0x1b268d)return _0x2f2985['ExpnY'](_0x2f2985[_0x38e9(0x4a)],_0x2f2985[_0x38e9(0x4a)])?(_0x4702b8[_0x38e9(0x17)](_0x2f2985[_0x38e9(0x4b)],_0x4ad443),{'success':![],'error':_0x2f2985[_0x38e9(0x4c)](_0x9f1c3f,_0x187fc6)?_0x73081c[_0x38e9(0x39)]:_0x2f2985[_0x38e9(0x4d)]}):![];const _0xb9c229=_0x2f2985['mlcUb'](extractLinkedInUsername,_0x278dd1);return _0x2f2985['tvYzq'](_0xb9c229,null)&&_0x2f2985[_0x38e9(0x4e)](_0xb9c229[_0x38e9(0x31)],0x0);};exports[_0x38e9(0x4f)]=isValidLinkedInUrl;const formatLinkedInUrl=_0x5288b8=>{const _0x3e846b={'XYMFL':_0x38e9(0x50),'jIvyO':_0x38e9(0x51),'TWqgW':'https://','yMjPV':function(_0x36901e,_0x47ab79){return _0x36901e===_0x47ab79;},'ctxLF':'CmrHJ','fwhtc':function(_0x4e7fae,_0x2fd84d){return _0x4e7fae!==_0x2fd84d;},'ElodD':_0x38e9(0x52),'gUXwx':_0x38e9(0x53),'fPfYo':_0x38e9(0x54)};if(_0x5288b8[_0x38e9(0x55)](_0x3e846b[_0x38e9(0x56)])||_0x5288b8[_0x38e9(0x55)](_0x3e846b['TWqgW']))return _0x3e846b[_0x38e9(0x57)]('KorTv','KorTv')?_0x5288b8:![];if(!_0x5288b8[_0x38e9(0x58)]('/'))return _0x3e846b['yMjPV'](_0x3e846b[_0x38e9(0x59)],_0x3e846b['ctxLF'])?'https://linkedin.com/in/'+_0x5288b8:(_0x20bfbd[_0x38e9(0x17)](_0x3e846b[_0x38e9(0x5a)],_0x3445aa),![]);if(_0x5288b8[_0x38e9(0x55)](_0x38e9(0x5b))){if(_0x3e846b[_0x38e9(0x5c)](_0x3e846b[_0x38e9(0x5d)],_0x3e846b[_0x38e9(0x5e)]))return _0x38e9(0x5f)+_0x5288b8;else _0xccdadf=(0x0,_0x500a00['getApiHeaders'])();}if(_0x5288b8[_0x38e9(0x55)](_0x3e846b['fPfYo']))return _0x38e9(0x60)+_0x5288b8;return _0x38e9(0x61)+_0x5288b8;};function _0x38e9(_0x28b1f0,_0x38e92a){_0x28b1f0=_0x28b1f0-0x0;const _0x2cbca9=_0x28b1();let _0x4767d4=_0x2cbca9[_0x28b1f0];return _0x4767d4;}exports[_0x38e9(0x4)]=formatLinkedInUrl;const canScrapeProfile=async _0x16f716=>{const _0x3e9977={'LUoDH':function(_0x51a899,_0x3d7dab){return _0x51a899!==_0x3d7dab;},'WCBST':'string','mLGeN':function(_0x27649c,_0x2e4bb4){return _0x27649c!==_0x2e4bb4;},'Hwfdp':function(_0x4aed9e,_0x5856e5){return _0x4aed9e>_0x5856e5;},'yLHKr':_0x38e9(0xc),'vQYXF':function(_0x4b0e3b,_0x41abdb){return _0x4b0e3b===_0x41abdb;},'BcJcA':_0x38e9(0x62),'iduNZ':function(_0xd4cd2a,_0x156be5){return _0xd4cd2a===_0x156be5;},'WlqYn':_0x38e9(0x63),'EUJNn':function(_0x2ab526,_0x3a2215,_0x4beb21){return _0x2ab526(_0x3a2215,_0x4beb21);},'pnKgA':'UzwVD','CUjQc':_0x38e9(0x64),'ZJrMV':function(_0x828ad1,_0x5cf4b6){return _0x828ad1!==_0x5cf4b6;},'dPkJf':function(_0x365bbe,_0x27878e){return _0x365bbe!==_0x27878e;},'GbjJB':_0x38e9(0x65),'BoGKT':'❌\x20[LINKEDIN]\x20Error\x20checking\x20scrape\x20availability:'};try{if(_0x3e9977[_0x38e9(0x66)](_0x3e9977[_0x38e9(0x67)],_0x38e9(0x68))){if(!_0x3661ae||_0x3e9977[_0x38e9(0x69)](typeof _0x2a9e58,_0x3e9977[_0x38e9(0x6a)]))return![];const _0x32770a=/linkedin\.com\/in\/[^\/\?#]+/[_0x38e9(0x49)](_0x40f2e0);if(!_0x32770a)return![];const _0x37a952=_0x589268(_0x2ef264);return _0x3e9977[_0x38e9(0x6b)](_0x37a952,null)&&_0x3e9977[_0x38e9(0x6c)](_0x37a952[_0x38e9(0x31)],0x0);}else{let _0x15cc6d;try{if(_0x3e9977['iduNZ'](_0x3e9977['WlqYn'],_0x3e9977[_0x38e9(0x6d)]))_0x15cc6d=await(0x0,_api[_0x38e9(0x19)])();else{const _0xe60e02=_0x2f9dba['match'](/linkedin\.com\/in\/([^\/\?#]+)/);return _0xe60e02?_0xe60e02[0x1]:null;}}catch{_0x15cc6d=(0x0,_api[_0x38e9(0x1d)])();}const _0x187018=await _0x3e9977[_0x38e9(0x6e)](fetch,_api[_0x38e9(0x1f)][_0x38e9(0x6f)]+_0x38e9(0x70)+_0x16f716+_0x38e9(0x71),{'headers':_0x15cc6d});if(_0x187018['ok']){if(_0x3e9977[_0x38e9(0x72)](_0x3e9977['pnKgA'],_0x3e9977[_0x38e9(0x73)]))return'https://linkedin.com'+_0x1bae4e;else{var _0xe69fd4;const _0x740c60=await _0x187018[_0x38e9(0x25)]();return _0x3e9977[_0x38e9(0x74)](_0x3e9977[_0x38e9(0x72)](_0xe69fd4=_0x740c60[_0x38e9(0x75)],null)||_0x3e9977[_0x38e9(0x72)](_0xe69fd4,void 0x0)?void 0x0:_0xe69fd4[_0x38e9(0x76)],undefined);}}return![];}}catch(_0x2970bb){if(_0x3e9977[_0x38e9(0x77)](_0x3e9977[_0x38e9(0x78)],_0x3e9977[_0x38e9(0x78)]))_0x4d4bc3[_0x38e9(0x1b)](_0x3e9977[_0x38e9(0x79)],_0x7cb981),_0xc6c2c=(0x0,_0x15c8a8[_0x38e9(0x1d)])();else return console[_0x38e9(0x17)](_0x3e9977['BoGKT'],_0x2970bb),![];}};exports[_0x38e9(0x6)]=canScrapeProfile;const getLinkedInConnectionStatus=async _0x81947a=>{const _0x584978={'aaxYx':_0x38e9(0x3f),'JmLpn':_0x38e9(0x7a),'tsoTu':function(_0x2ba51b,_0x44cca5){return _0x2ba51b===_0x44cca5;},'kbbdo':_0x38e9(0x7b),'xVxar':function(_0x1fcd5b,_0x1ae54f){return _0x1fcd5b!==_0x1ae54f;},'iizKt':_0x38e9(0x7c),'QAvla':_0x38e9(0x7d),'jLpPT':function(_0x21171c,_0x19619c,_0x43aaa1){return _0x21171c(_0x19619c,_0x43aaa1);},'htIhV':'jGfej'};try{if(_0x584978[_0x38e9(0x7e)](_0x584978[_0x38e9(0x7f)],_0x584978['kbbdo'])){let _0x25f942;try{_0x25f942=await(0x0,_api['getUserAuthHeaders'])();}catch{if(_0x584978[_0x38e9(0x80)](_0x584978[_0x38e9(0x81)],_0x584978['QAvla']))_0x25f942=(0x0,_api[_0x38e9(0x1d)])();else return _0x38e9(0x5f)+_0x3adf2b;}const _0x2bfabd=await _0x584978[_0x38e9(0x82)](fetch,_api[_0x38e9(0x1f)]['BASE_URL']+_0x38e9(0x83)+_0x81947a,{'headers':_0x25f942});if(_0x2bfabd['ok']){const _0x426d72=await _0x2bfabd['json']();return _0x426d72;}return{'connected':![]};}else try{const _0x2cf4f9=_0x181c36[_0x38e9(0x84)](/linkedin\.com\/in\/([^\/\?#]+)/);return _0x2cf4f9?_0x2cf4f9[0x1]:null;}catch(_0x326c28){return _0x55257f['error'](_0x584978[_0x38e9(0x85)],_0x326c28),null;}}catch(_0x11adca){return _0x584978['xVxar'](_0x38e9(0x86),_0x584978[_0x38e9(0x87)])?(console[_0x38e9(0x17)](_0x38e9(0x88),_0x11adca),{'connected':![]}):(_0xe9c23['error'](_0x584978['JmLpn']),{'success':![],'error':'Invalid\x20LinkedIn\x20profile\x20URL.\x20Please\x20use\x20format:\x20https://linkedin.com/in/username'});}};exports[_0x38e9(0x3)]=getLinkedInConnectionStatus;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.scrapeLinkedInProfile = exports.isValidLinkedInUrl = exports.getLinkedInConnectionStatus = exports.formatLinkedInUrl = exports.extractLinkedInUsername = exports.canScrapeProfile = void 0;
|
|
7
|
+
var _api = require("../config/api");
|
|
8
|
+
var _jwtStorageService = require("./jwtStorageService");
|
|
9
|
+
/**
|
|
10
|
+
* LinkedIn Profile Scraping Service
|
|
11
|
+
* Handles profile scraping after OAuth connection using Apify
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Scrape LinkedIn profile after OAuth connection
|
|
16
|
+
* @param userId - User ID (username or email) - will be overridden by JWT userId if available
|
|
17
|
+
* @param profileUrl - LinkedIn profile URL (e.g., https://linkedin.com/in/username)
|
|
18
|
+
*/
|
|
19
|
+
const scrapeLinkedInProfile = async (userId, profileUrl) => {
|
|
20
|
+
try {
|
|
21
|
+
var _data$profileData, _data$profileData2, _data$profileData3, _data$profileData4, _data$profileData5;
|
|
22
|
+
console.log('🔍 [LINKEDIN SCRAPE] Starting profile scrape...');
|
|
23
|
+
console.log('🔍 [LINKEDIN SCRAPE] Passed User ID:', userId);
|
|
24
|
+
console.log('🔍 [LINKEDIN SCRAPE] Profile URL:', profileUrl);
|
|
25
|
+
|
|
26
|
+
// Get the actual userId (UUID) from JWT token - this is critical for correct user lookup
|
|
27
|
+
const jwtUserId = await (0, _jwtStorageService.getUserIdFromToken)();
|
|
28
|
+
const effectiveUserId = jwtUserId || userId;
|
|
29
|
+
console.log('🔍 [LINKEDIN SCRAPE] JWT userId:', jwtUserId);
|
|
30
|
+
console.log('🔍 [LINKEDIN SCRAPE] Effective userId (will use):', effectiveUserId);
|
|
31
|
+
|
|
32
|
+
// Validate profile URL
|
|
33
|
+
if (!isValidLinkedInUrl(profileUrl)) {
|
|
34
|
+
console.error('❌ [LINKEDIN SCRAPE] Invalid LinkedIn URL');
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
error: 'Invalid LinkedIn profile URL. Please use format: https://linkedin.com/in/username'
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Get user-authenticated headers (includes JWT token)
|
|
42
|
+
let headers;
|
|
43
|
+
try {
|
|
44
|
+
headers = await (0, _api.getUserAuthHeaders)();
|
|
45
|
+
console.log('🔑 [LINKEDIN SCRAPE] Using authenticated user headers');
|
|
46
|
+
} catch (authError) {
|
|
47
|
+
console.warn('⚠️ [LINKEDIN SCRAPE] No user auth available, using basic headers:', authError);
|
|
48
|
+
headers = (0, _api.getApiHeaders)();
|
|
49
|
+
}
|
|
50
|
+
const response = await fetch(`${_api.API_CONFIG.BASE_URL}/enoch/linkedin-scrape/scrape-profile`, {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
headers,
|
|
53
|
+
body: JSON.stringify({
|
|
54
|
+
userId: effectiveUserId,
|
|
55
|
+
profileUrl: profileUrl
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
const errorText = await response.text();
|
|
60
|
+
console.error('❌ [LINKEDIN SCRAPE] Failed:', response.status, errorText);
|
|
61
|
+
|
|
62
|
+
// Parse error message if available
|
|
63
|
+
let errorMessage = `Scraping failed: ${response.status}`;
|
|
64
|
+
try {
|
|
65
|
+
const errorData = JSON.parse(errorText);
|
|
66
|
+
errorMessage = errorData.error || errorData.message || errorMessage;
|
|
67
|
+
} catch {
|
|
68
|
+
// Use default error message
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
error: errorMessage
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const data = await response.json();
|
|
76
|
+
console.log('✅ [LINKEDIN SCRAPE] Profile scraped successfully');
|
|
77
|
+
console.log('📊 [LINKEDIN SCRAPE] Data preview:', {
|
|
78
|
+
name: (_data$profileData = data.profileData) === null || _data$profileData === void 0 ? void 0 : _data$profileData.fullName,
|
|
79
|
+
headline: (_data$profileData2 = data.profileData) === null || _data$profileData2 === void 0 ? void 0 : _data$profileData2.headline,
|
|
80
|
+
experienceCount: ((_data$profileData3 = data.profileData) === null || _data$profileData3 === void 0 || (_data$profileData3 = _data$profileData3.experience) === null || _data$profileData3 === void 0 ? void 0 : _data$profileData3.length) || 0,
|
|
81
|
+
educationCount: ((_data$profileData4 = data.profileData) === null || _data$profileData4 === void 0 || (_data$profileData4 = _data$profileData4.education) === null || _data$profileData4 === void 0 ? void 0 : _data$profileData4.length) || 0,
|
|
82
|
+
skillsCount: ((_data$profileData5 = data.profileData) === null || _data$profileData5 === void 0 || (_data$profileData5 = _data$profileData5.skills) === null || _data$profileData5 === void 0 ? void 0 : _data$profileData5.length) || 0
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
success: true,
|
|
86
|
+
data: data.profileData,
|
|
87
|
+
message: 'Profile scraped successfully'
|
|
88
|
+
};
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error('❌ [LINKEDIN SCRAPE] Error:', error);
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred during scraping'
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Extract LinkedIn username from profile URL
|
|
100
|
+
* @param url - LinkedIn profile URL
|
|
101
|
+
* @returns username or null if invalid
|
|
102
|
+
*/
|
|
103
|
+
exports.scrapeLinkedInProfile = scrapeLinkedInProfile;
|
|
104
|
+
const extractLinkedInUsername = url => {
|
|
105
|
+
try {
|
|
106
|
+
// Match various LinkedIn URL formats:
|
|
107
|
+
// - https://linkedin.com/in/username
|
|
108
|
+
// - https://www.linkedin.com/in/username/
|
|
109
|
+
// - linkedin.com/in/username
|
|
110
|
+
const match = url.match(/linkedin\.com\/in\/([^\/\?#]+)/);
|
|
111
|
+
return match ? match[1] : null;
|
|
112
|
+
} catch (error) {
|
|
113
|
+
console.error('❌ [LINKEDIN] Error extracting username:', error);
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Validate LinkedIn profile URL
|
|
120
|
+
* @param url - URL to validate
|
|
121
|
+
* @returns true if valid LinkedIn profile URL
|
|
122
|
+
*/
|
|
123
|
+
exports.extractLinkedInUsername = extractLinkedInUsername;
|
|
124
|
+
const isValidLinkedInUrl = url => {
|
|
125
|
+
if (!url || typeof url !== 'string') {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Check if URL contains linkedin.com/in/
|
|
130
|
+
const hasLinkedInPattern = /linkedin\.com\/in\/[^\/\?#]+/.test(url);
|
|
131
|
+
if (!hasLinkedInPattern) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Try to extract username
|
|
136
|
+
const username = extractLinkedInUsername(url);
|
|
137
|
+
return username !== null && username.length > 0;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Format LinkedIn URL (ensure proper format)
|
|
142
|
+
* @param url - URL or username
|
|
143
|
+
* @returns properly formatted LinkedIn URL
|
|
144
|
+
*/
|
|
145
|
+
exports.isValidLinkedInUrl = isValidLinkedInUrl;
|
|
146
|
+
const formatLinkedInUrl = url => {
|
|
147
|
+
// If it's already a full URL, return as is
|
|
148
|
+
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
149
|
+
return url;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// If it's just a username, construct URL
|
|
153
|
+
if (!url.includes('/')) {
|
|
154
|
+
return `https://linkedin.com/in/${url}`;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// If it's a partial path
|
|
158
|
+
if (url.startsWith('linkedin.com/in/')) {
|
|
159
|
+
return `https://${url}`;
|
|
160
|
+
}
|
|
161
|
+
if (url.startsWith('/in/')) {
|
|
162
|
+
return `https://linkedin.com${url}`;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Default: assume it's a username
|
|
166
|
+
return `https://linkedin.com/in/${url}`;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Check if profile scraping is available for a user
|
|
171
|
+
* @param userId - User ID
|
|
172
|
+
*/
|
|
173
|
+
exports.formatLinkedInUrl = formatLinkedInUrl;
|
|
174
|
+
const canScrapeProfile = async userId => {
|
|
175
|
+
try {
|
|
176
|
+
// Check if user has LinkedIn connected
|
|
177
|
+
// This would typically query your backend
|
|
178
|
+
let headers;
|
|
179
|
+
try {
|
|
180
|
+
headers = await (0, _api.getUserAuthHeaders)();
|
|
181
|
+
} catch {
|
|
182
|
+
headers = (0, _api.getApiHeaders)();
|
|
183
|
+
}
|
|
184
|
+
const response = await fetch(`${_api.API_CONFIG.BASE_URL}/user/${userId}/connections`, {
|
|
185
|
+
headers
|
|
186
|
+
});
|
|
187
|
+
if (response.ok) {
|
|
188
|
+
var _data$connections;
|
|
189
|
+
const data = await response.json();
|
|
190
|
+
return ((_data$connections = data.connections) === null || _data$connections === void 0 ? void 0 : _data$connections.LinkedIn) !== undefined;
|
|
191
|
+
}
|
|
192
|
+
return false;
|
|
193
|
+
} catch (error) {
|
|
194
|
+
console.error('❌ [LINKEDIN] Error checking scrape availability:', error);
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Get LinkedIn connection status for a user
|
|
201
|
+
* @param userId - User ID
|
|
202
|
+
*/
|
|
203
|
+
exports.canScrapeProfile = canScrapeProfile;
|
|
204
|
+
const getLinkedInConnectionStatus = async userId => {
|
|
205
|
+
try {
|
|
206
|
+
let headers;
|
|
207
|
+
try {
|
|
208
|
+
headers = await (0, _api.getUserAuthHeaders)();
|
|
209
|
+
} catch {
|
|
210
|
+
headers = (0, _api.getApiHeaders)();
|
|
211
|
+
}
|
|
212
|
+
const response = await fetch(`${_api.API_CONFIG.BASE_URL}/enoch/linkedin-scrape/scrape-profile/${userId}`, {
|
|
213
|
+
headers
|
|
214
|
+
});
|
|
215
|
+
if (response.ok) {
|
|
216
|
+
const data = await response.json();
|
|
217
|
+
return data;
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
connected: false
|
|
221
|
+
};
|
|
222
|
+
} catch (error) {
|
|
223
|
+
console.error('❌ [LINKEDIN] Error getting connection status:', error);
|
|
224
|
+
return {
|
|
225
|
+
connected: false
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
exports.getLinkedInConnectionStatus = getLinkedInConnectionStatus;
|
|
230
|
+
//# sourceMappingURL=linkedinScrapingService.js.map
|