@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.
Files changed (241) hide show
  1. package/lib/commonjs/api/index.js +219 -9
  2. package/lib/commonjs/assets/icons/spotify.png +0 -0
  3. package/lib/commonjs/assets/images/spotify.png +0 -0
  4. package/lib/commonjs/components/BodyText.js +27 -9
  5. package/lib/commonjs/components/BrandMark.js +111 -10
  6. package/lib/commonjs/components/CodeInput.js +116 -9
  7. package/lib/commonjs/components/EmailInput.js +30 -8
  8. package/lib/commonjs/components/GoogleButton.js +56 -9
  9. package/lib/commonjs/components/HeadingGroup.js +43 -9
  10. package/lib/commonjs/components/LLMDataInputModal.js +664 -14
  11. package/lib/commonjs/components/ModalHeader.js +99 -9
  12. package/lib/commonjs/components/ModalSheet.js +47 -9
  13. package/lib/commonjs/components/Onairos.js +380 -14
  14. package/lib/commonjs/components/OnairosButton.js +313 -13
  15. package/lib/commonjs/components/OnairosSignInButton.js +130 -12
  16. package/lib/commonjs/components/Overlay.js +465 -13
  17. package/lib/commonjs/components/PersonaImage.js +137 -10
  18. package/lib/commonjs/components/PersonaLoadingScreen.js +318 -12
  19. package/lib/commonjs/components/PersonalizationConsentScreen.js +467 -13
  20. package/lib/commonjs/components/PinCreationScreen.js +403 -12
  21. package/lib/commonjs/components/PinInput.js +464 -9
  22. package/lib/commonjs/components/PlatformConnectorsStep.js +1311 -23
  23. package/lib/commonjs/components/PlatformList.js +137 -10
  24. package/lib/commonjs/components/PlatformToggle.js +180 -9
  25. package/lib/commonjs/components/PrimaryButton.js +180 -10
  26. package/lib/commonjs/components/SignInMatchAnimation.js +197 -9
  27. package/lib/commonjs/components/SignInStep.js +345 -12
  28. package/lib/commonjs/components/UniversalOnboarding.js +2780 -30
  29. package/lib/commonjs/components/VerificationStep.js +176 -11
  30. package/lib/commonjs/components/WelcomeScreen.js +461 -22
  31. package/lib/commonjs/components/icons/Basicproficon.js +37 -8
  32. package/lib/commonjs/components/icons/Basicprofile.js +21 -8
  33. package/lib/commonjs/components/icons/Checkbox.js +21 -8
  34. package/lib/commonjs/components/icons/Checkmark.js +27 -8
  35. package/lib/commonjs/components/icons/Contentanalysis.js +21 -8
  36. package/lib/commonjs/components/icons/Contenticon.js +39 -8
  37. package/lib/commonjs/components/icons/EnochE.js +41 -8
  38. package/lib/commonjs/components/icons/Personalityicon.js +30 -8
  39. package/lib/commonjs/components/icons/Personalityprofile.js +21 -8
  40. package/lib/commonjs/components/icons/Personalitytraits.js +21 -8
  41. package/lib/commonjs/components/icons/Userpreferences.js +21 -8
  42. package/lib/commonjs/components/icons/index.js +84 -17
  43. package/lib/commonjs/components/onboarding/OAuthWebView.js +1754 -18
  44. package/lib/commonjs/components/onboarding/OnboardingHeader.js +74 -10
  45. package/lib/commonjs/components/onboarding/PinInput.js +283 -10
  46. package/lib/commonjs/components/onboarding/PlatformConnector.js +249 -11
  47. package/lib/commonjs/config/PLATFORM_APIS.md +849 -0
  48. package/lib/commonjs/config/api.js +56 -7
  49. package/lib/commonjs/constants/index.js +120 -7
  50. package/lib/commonjs/context/AuthContext.js +345 -10
  51. package/lib/commonjs/hooks/useConnectedAccounts.js +111 -9
  52. package/lib/commonjs/hooks/useConnections.js +102 -8
  53. package/lib/commonjs/hooks/useCredentials.js +178 -10
  54. package/lib/commonjs/hooks/useUserConnections.js +148 -10
  55. package/lib/commonjs/index.js +439 -34
  56. package/lib/commonjs/services/apiClient.js +298 -8
  57. package/lib/commonjs/services/biometricPinService.js +180 -8
  58. package/lib/commonjs/services/chatGPTConversationExtractor.js +155 -8
  59. package/lib/commonjs/services/chatGPTConversationService.js +275 -9
  60. package/lib/commonjs/services/claudeConversationExtractor.js +103 -8
  61. package/lib/commonjs/services/claudeConversationService.js +158 -9
  62. package/lib/commonjs/services/connectedAccountsService.js +310 -10
  63. package/lib/commonjs/services/googleAuthService.js +252 -11
  64. package/lib/commonjs/services/hingeDataExtractor.js +105 -8
  65. package/lib/commonjs/services/hingeDataService.js +150 -9
  66. package/lib/commonjs/services/imageCompressionService.js +260 -7
  67. package/lib/commonjs/services/instagramDataExtractor.js +126 -8
  68. package/lib/commonjs/services/instagramDataService.js +163 -9
  69. package/lib/commonjs/services/jwtStorageService.js +276 -7
  70. package/lib/commonjs/services/linkedinDOMExtractor.js +245 -7
  71. package/lib/commonjs/services/linkedinProfileService.js +222 -9
  72. package/lib/commonjs/services/linkedinScrapingService.js +230 -8
  73. package/lib/commonjs/services/llmDataStorage.js +294 -8
  74. package/lib/commonjs/services/mobileTrainingService.js +186 -8
  75. package/lib/commonjs/services/netflixDataExtractor.js +120 -8
  76. package/lib/commonjs/services/netflixDataService.js +198 -9
  77. package/lib/commonjs/services/pinEncryptionService.js +84 -8
  78. package/lib/commonjs/services/pinStorageUtils.js +105 -7
  79. package/lib/commonjs/services/platformAuthService.js +1484 -12
  80. package/lib/commonjs/services/sephoraDataExtractor.js +140 -8
  81. package/lib/commonjs/services/sephoraDataService.js +200 -9
  82. package/lib/commonjs/services/spotifyDataExtractor.js +148 -8
  83. package/lib/commonjs/services/spotifyDataService.js +241 -9
  84. package/lib/commonjs/services/storageService.js +404 -8
  85. package/lib/commonjs/services/telegramDataExtractor.js +115 -8
  86. package/lib/commonjs/services/telegramDataService.js +499 -9
  87. package/lib/commonjs/services/trainingApiHelpers.js +73 -7
  88. package/lib/commonjs/services/userConnectionsService.js +340 -10
  89. package/lib/commonjs/services/youtubeMigrationService.js +416 -10
  90. package/lib/commonjs/theme/index.js +250 -7
  91. package/lib/commonjs/types/ambient.d.js +2 -1
  92. package/lib/commonjs/types/declarations.d.js +2 -1
  93. package/lib/commonjs/types/index.js +6 -1
  94. package/lib/commonjs/types/node-fix.d.js +2 -1
  95. package/lib/commonjs/types/node-override.d.js +2 -1
  96. package/lib/commonjs/types/opacity.d.js +2 -1
  97. package/lib/commonjs/types.js +14 -1
  98. package/lib/commonjs/utils/Portal.js +98 -8
  99. package/lib/commonjs/utils/api.js +130 -9
  100. package/lib/commonjs/utils/assetRegistry.js +210 -35
  101. package/lib/commonjs/utils/auth.js +112 -9
  102. package/lib/commonjs/utils/connectorTests.js +613 -29
  103. package/lib/commonjs/utils/crypto.js +62 -8
  104. package/lib/commonjs/utils/debugHelper.js +64 -1
  105. package/lib/commonjs/utils/encryption.js +76 -7
  106. package/lib/commonjs/utils/eventUtils.js +288 -1
  107. package/lib/commonjs/utils/haptics.js +66 -9
  108. package/lib/commonjs/utils/imagePreloader.js +6 -1
  109. package/lib/commonjs/utils/networkDiagnostics.js +226 -8
  110. package/lib/commonjs/utils/onairosApi.js +350 -9
  111. package/lib/commonjs/utils/programmaticFlow.js +117 -9
  112. package/lib/commonjs/utils/retryHelper.js +220 -1
  113. package/lib/commonjs/utils/secureStorage.js +349 -10
  114. package/lib/commonjs/utils/webviewScripts/chatgpt.js +551 -1
  115. package/lib/commonjs/utils/webviewScripts/claude.js +376 -1
  116. package/lib/commonjs/utils/webviewScripts/hinge.js +411 -1
  117. package/lib/commonjs/utils/webviewScripts/index.js +698 -15
  118. package/lib/commonjs/utils/webviewScripts/instagram.js +454 -1
  119. package/lib/commonjs/utils/webviewScripts/linkedin.js +880 -1
  120. package/lib/commonjs/utils/webviewScripts/netflix.js +382 -1
  121. package/lib/commonjs/utils/webviewScripts/sephora.js +516 -1
  122. package/lib/commonjs/utils/webviewScripts/spotify.js +419 -1
  123. package/lib/commonjs/utils/webviewScripts/telegram.js +678 -1
  124. package/lib/module/api/index.js +211 -1
  125. package/lib/module/assets/icons/spotify.png +0 -0
  126. package/lib/module/assets/images/spotify.png +0 -0
  127. package/lib/module/components/BodyText.js +20 -1
  128. package/lib/module/components/BrandMark.js +104 -1
  129. package/lib/module/components/CodeInput.js +109 -1
  130. package/lib/module/components/EmailInput.js +23 -1
  131. package/lib/module/components/GoogleButton.js +49 -1
  132. package/lib/module/components/HeadingGroup.js +36 -1
  133. package/lib/module/components/LLMDataInputModal.js +656 -7
  134. package/lib/module/components/ModalHeader.js +92 -1
  135. package/lib/module/components/ModalSheet.js +39 -1
  136. package/lib/module/components/Onairos.js +373 -1
  137. package/lib/module/components/OnairosButton.js +305 -1
  138. package/lib/module/components/OnairosSignInButton.js +121 -1
  139. package/lib/module/components/Overlay.js +456 -1
  140. package/lib/module/components/PersonaImage.js +129 -1
  141. package/lib/module/components/PersonaLoadingScreen.js +310 -1
  142. package/lib/module/components/PersonalizationConsentScreen.js +460 -1
  143. package/lib/module/components/PinCreationScreen.js +396 -1
  144. package/lib/module/components/PinInput.js +456 -1
  145. package/lib/module/components/PlatformConnectorsStep.js +1302 -6
  146. package/lib/module/components/PlatformList.js +129 -1
  147. package/lib/module/components/PlatformToggle.js +173 -1
  148. package/lib/module/components/PrimaryButton.js +172 -1
  149. package/lib/module/components/SignInMatchAnimation.js +189 -1
  150. package/lib/module/components/SignInStep.js +338 -1
  151. package/lib/module/components/UniversalOnboarding.js +2770 -1
  152. package/lib/module/components/VerificationStep.js +168 -1
  153. package/lib/module/components/WelcomeScreen.js +453 -1
  154. package/lib/module/components/icons/Basicproficon.js +30 -1
  155. package/lib/module/components/icons/Basicprofile.js +14 -1
  156. package/lib/module/components/icons/Checkbox.js +14 -1
  157. package/lib/module/components/icons/Checkmark.js +20 -1
  158. package/lib/module/components/icons/Contentanalysis.js +14 -1
  159. package/lib/module/components/icons/Contenticon.js +32 -1
  160. package/lib/module/components/icons/EnochE.js +34 -1
  161. package/lib/module/components/icons/Personalityicon.js +23 -1
  162. package/lib/module/components/icons/Personalityprofile.js +14 -1
  163. package/lib/module/components/icons/Personalitytraits.js +14 -1
  164. package/lib/module/components/icons/Userpreferences.js +14 -1
  165. package/lib/module/components/icons/index.js +13 -1
  166. package/lib/module/components/onboarding/OAuthWebView.js +1746 -1
  167. package/lib/module/components/onboarding/OnboardingHeader.js +66 -1
  168. package/lib/module/components/onboarding/PinInput.js +274 -1
  169. package/lib/module/components/onboarding/PlatformConnector.js +240 -1
  170. package/lib/module/config/PLATFORM_APIS.md +849 -0
  171. package/lib/module/config/api.js +47 -1
  172. package/lib/module/constants/index.js +114 -1
  173. package/lib/module/context/AuthContext.js +335 -1
  174. package/lib/module/hooks/useConnectedAccounts.js +106 -1
  175. package/lib/module/hooks/useConnections.js +95 -1
  176. package/lib/module/hooks/useCredentials.js +171 -6
  177. package/lib/module/hooks/useUserConnections.js +140 -1
  178. package/lib/module/index.js +172 -1
  179. package/lib/module/services/apiClient.js +295 -1
  180. package/lib/module/services/biometricPinService.js +169 -1
  181. package/lib/module/services/chatGPTConversationExtractor.js +149 -1
  182. package/lib/module/services/chatGPTConversationService.js +268 -1
  183. package/lib/module/services/claudeConversationExtractor.js +97 -1
  184. package/lib/module/services/claudeConversationService.js +151 -1
  185. package/lib/module/services/connectedAccountsService.js +293 -1
  186. package/lib/module/services/googleAuthService.js +241 -1
  187. package/lib/module/services/hingeDataExtractor.js +99 -1
  188. package/lib/module/services/hingeDataService.js +143 -1
  189. package/lib/module/services/imageCompressionService.js +250 -1
  190. package/lib/module/services/instagramDataExtractor.js +120 -1
  191. package/lib/module/services/instagramDataService.js +156 -1
  192. package/lib/module/services/jwtStorageService.js +257 -1
  193. package/lib/module/services/linkedinDOMExtractor.js +234 -1
  194. package/lib/module/services/linkedinProfileService.js +210 -1
  195. package/lib/module/services/linkedinScrapingService.js +219 -1
  196. package/lib/module/services/llmDataStorage.js +277 -1
  197. package/lib/module/services/mobileTrainingService.js +173 -1
  198. package/lib/module/services/netflixDataExtractor.js +114 -1
  199. package/lib/module/services/netflixDataService.js +191 -1
  200. package/lib/module/services/pinEncryptionService.js +74 -6
  201. package/lib/module/services/pinStorageUtils.js +93 -1
  202. package/lib/module/services/platformAuthService.js +1461 -1
  203. package/lib/module/services/sephoraDataExtractor.js +134 -1
  204. package/lib/module/services/sephoraDataService.js +193 -1
  205. package/lib/module/services/spotifyDataExtractor.js +142 -1
  206. package/lib/module/services/spotifyDataService.js +234 -1
  207. package/lib/module/services/storageService.js +383 -1
  208. package/lib/module/services/telegramDataExtractor.js +109 -1
  209. package/lib/module/services/telegramDataService.js +493 -1
  210. package/lib/module/services/trainingApiHelpers.js +67 -1
  211. package/lib/module/services/userConnectionsService.js +329 -1
  212. package/lib/module/services/youtubeMigrationService.js +405 -1
  213. package/lib/module/theme/index.js +245 -1
  214. package/lib/module/types.js +10 -1
  215. package/lib/module/utils/Portal.js +90 -1
  216. package/lib/module/utils/api.js +118 -1
  217. package/lib/module/utils/assetRegistry.js +200 -34
  218. package/lib/module/utils/auth.js +100 -1
  219. package/lib/module/utils/connectorTests.js +600 -27
  220. package/lib/module/utils/crypto.js +54 -1
  221. package/lib/module/utils/debugHelper.js +54 -1
  222. package/lib/module/utils/encryption.js +67 -1
  223. package/lib/module/utils/eventUtils.js +270 -1
  224. package/lib/module/utils/haptics.js +59 -8
  225. package/lib/module/utils/imagePreloader.js +3 -1
  226. package/lib/module/utils/networkDiagnostics.js +217 -1
  227. package/lib/module/utils/onairosApi.js +333 -1
  228. package/lib/module/utils/programmaticFlow.js +111 -1
  229. package/lib/module/utils/retryHelper.js +211 -1
  230. package/lib/module/utils/secureStorage.js +330 -6
  231. package/lib/module/utils/webviewScripts/chatgpt.js +545 -1
  232. package/lib/module/utils/webviewScripts/claude.js +370 -1
  233. package/lib/module/utils/webviewScripts/hinge.js +405 -1
  234. package/lib/module/utils/webviewScripts/index.js +434 -1
  235. package/lib/module/utils/webviewScripts/instagram.js +448 -1
  236. package/lib/module/utils/webviewScripts/linkedin.js +874 -1
  237. package/lib/module/utils/webviewScripts/netflix.js +376 -1
  238. package/lib/module/utils/webviewScripts/sephora.js +510 -1
  239. package/lib/module/utils/webviewScripts/spotify.js +413 -1
  240. package/lib/module/utils/webviewScripts/telegram.js +672 -1
  241. package/package.json +2 -2
@@ -1,9 +1,222 @@
1
- 'use strict';
2
- // Onairos SDK - Asset Registry (auto-generated)
3
- var __ONAIROS_REQ_REGISTRY__ = [
4
- require("@react-native-async-storage/async-storage"),
5
- require("../config/api"),
6
- require("./jwtStorageService")
7
- ];
8
- function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
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
- 'use strict';
2
- // Onairos SDK - Asset Registry (auto-generated)
3
- var __ONAIROS_REQ_REGISTRY__ = [
4
- require("../config/api"),
5
- require("./jwtStorageService")
6
- ];
7
- function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
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