@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 +1,234 @@
1
- import{scrapeLinkedInProfile}from'./linkedinScrapingService';function _0x48e4(_0x21a54f,_0x48e4ee){_0x21a54f=_0x21a54f-0x0;const _0x5a4975=_0x21a5();let _0x21474e=_0x5a4975[_0x21a54f];return _0x21474e;}export const parseExtractionMessage=_0x458ea5=>{const _0x5d5a8c={'adCKz':function(_0x4fbcd9,_0x36e5b2){return _0x4fbcd9(_0x36e5b2);},'DHhUq':'Sending\x20profile\x20URL\x20to\x20backend...','iRPhe':function(_0x29f906,_0x3b6609){return _0x29f906(_0x3b6609);},'LhciN':'Invalid\x20profile\x20URL','cCBtY':_0x48e4(0x0),'Toccp':function(_0x7f7f6a,_0x1881ea){return _0x7f7f6a(_0x1881ea);},'DAhtn':function(_0x5467ea,_0xf077ac){return _0x5467ea!==_0xf077ac;},'LTwxr':_0x48e4(0x1),'ALyuD':_0x48e4(0x2),'WMirS':_0x48e4(0x3),'bFHPM':function(_0x5f48fa,_0x157037){return _0x5f48fa===_0x157037;},'ftZBk':_0x48e4(0x4),'XxmXL':_0x48e4(0x5),'kPygZ':_0x48e4(0x6),'jSQvR':_0x48e4(0x7),'itCjo':_0x48e4(0x8),'DzIMt':_0x48e4(0x9),'tABpu':_0x48e4(0xa),'GnBfZ':function(_0x33e454,_0xb3462a){return _0x33e454!==_0xb3462a;},'xQcuN':_0x48e4(0xb),'aJZpT':_0x48e4(0xc),'SuJBz':_0x48e4(0xd),'cYjnF':'Failed\x20to\x20parse\x20extraction\x20result'};try{if(_0x5d5a8c[_0x48e4(0xe)](_0x5d5a8c[_0x48e4(0xf)],_0x5d5a8c[_0x48e4(0x10)])){console[_0x48e4(0x11)](_0x48e4(0x12),_0x458ea5);const _0x4df130=JSON['parse'](_0x458ea5);if(!_0x4df130||_0x5d5a8c[_0x48e4(0xe)](typeof _0x4df130,_0x5d5a8c[_0x48e4(0x13)]))return{'success':![],'error':_0x5d5a8c['cCBtY']};const _0x517072=_0x4df130[_0x48e4(0x14)];if(_0x5d5a8c[_0x48e4(0x15)](_0x517072,_0x5d5a8c['ftZBk'])){const _0x194dba=_0x4df130[_0x48e4(0x16)];if(!_0x194dba||_0x5d5a8c[_0x48e4(0xe)](typeof _0x194dba,_0x5d5a8c['XxmXL'])){if(_0x5d5a8c[_0x48e4(0x17)]===_0x5d5a8c[_0x48e4(0x17)])return{'success':![],'error':_0x5d5a8c['jSQvR']};else _0x5d5a8c['adCKz'](_0x191697,_0x5d5a8c['DHhUq']);}return console[_0x48e4(0x11)](_0x5d5a8c[_0x48e4(0x18)],_0x194dba),{'success':!![],'profileUrl':_0x194dba,'message':_0x5d5a8c['DzIMt']};}else{if(_0x517072===_0x48e4(0x19)){const _0x2ea64a=_0x4df130[_0x48e4(0x1a)]||_0x5d5a8c[_0x48e4(0x1b)];return console[_0x48e4(0x1c)](_0x48e4(0x1d),_0x2ea64a),{'success':![],'error':_0x2ea64a};}else return _0x5d5a8c['GnBfZ'](_0x5d5a8c[_0x48e4(0x1e)],_0x5d5a8c[_0x48e4(0x1e)])?(_0xb4ab7f['error'](_0x48e4(0x1f),_0x2e1c73[_0x48e4(0x19)]),_0x417ff0&&_0x5d5a8c[_0x48e4(0x20)](_0x24e5c1,_0x15d453[_0x48e4(0x19)]||_0x5d5a8c['LhciN']),![]):{'success':![],'error':_0x5d5a8c[_0x48e4(0x21)]+_0x517072};}}else return{'success':![],'error':_0x5d5a8c[_0x48e4(0x22)]};}catch(_0x2383ae){if('Vpgeg'===_0x5d5a8c['SuJBz'])return console[_0x48e4(0x19)](_0x48e4(0x23),_0x2383ae),{'success':![],'error':_0x5d5a8c['cYjnF']};else _0x5d5a8c['Toccp'](_0x3e7406,'❌\x20Error\x20occurred');}};export const initiateProfileScraping=async _0x555e00=>{const _0x15f596={'xHuqe':'Unknown\x20scraping\x20error','Kyzga':function(_0x59c2be,_0x153201){return _0x59c2be(_0x153201);},'rwZNg':'❌\x20Scraping\x20failed','XxHzu':function(_0x5e96ba,_0x2fa11f){return _0x5e96ba(_0x2fa11f);},'ExyFY':function(_0x4a0b41,_0x1eae57){return _0x4a0b41+_0x1eae57;},'ihHGS':'Unknown\x20message\x20status:\x20','KEGao':function(_0x530784,_0x41c55f){return _0x530784!==_0x41c55f;},'PSlbJ':_0x48e4(0x5),'Fgztf':_0x48e4(0x7),'fdVbE':'✅\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20URL\x20extracted:','Hirve':_0x48e4(0x9),'xlFgm':_0x48e4(0x24),'PNJAe':_0x48e4(0x25),'iwCdK':_0x48e4(0x26),'LsxTk':function(_0x10b452,_0x1ebd2e){return _0x10b452!==_0x1ebd2e;},'enEEZ':_0x48e4(0x27),'giXlF':'Sending\x20profile\x20URL\x20to\x20backend...','IqnTh':function(_0x1fdc97,_0x23bceb,_0x3f0397){return _0x1fdc97(_0x23bceb,_0x3f0397);},'vNNvA':_0x48e4(0x28),'BgnZE':function(_0x3b7da7,_0x294f38){return _0x3b7da7!==_0x294f38;},'wvhtL':_0x48e4(0x29),'fCQIn':_0x48e4(0x2a),'piXlR':_0x48e4(0x2b),'KVveB':_0x48e4(0x2c),'nKVHg':'YUdDQ','JlvVX':function(_0x1558d1,_0x3c7979){return _0x1558d1(_0x3c7979);},'AzSbP':function(_0x5b6412,_0x44fe19){return _0x5b6412!==_0x44fe19;},'CnmXM':'GQbyN','NPzQW':function(_0x3697ac,_0x22c718){return _0x3697ac instanceof _0x22c718;},'poGXW':'Unknown\x20error\x20occurred','unumv':_0x48e4(0x2d),'sbKPO':'njAvv','qTPix':_0x48e4(0x2e),'USFYa':function(_0x4b7065,_0x11ad41){return _0x4b7065(_0x11ad41);}},{userId:_0x37a60c,profileUrl:_0x4a8a19,onProgress:_0x2d43b5,onSuccess:_0xaa5814,onError:_0x1066fa}=_0x555e00;try{console['log'](_0x48e4(0x2f)),console[_0x48e4(0x11)](_0x15f596['PNJAe'],_0x37a60c),console['log'](_0x15f596[_0x48e4(0x30)],_0x4a8a19);if(_0x2d43b5){if(_0x15f596[_0x48e4(0x31)]('AmCzD',_0x15f596['enEEZ'])){const _0x2f4861=_0x2c395f[_0x48e4(0x19)]||_0x15f596[_0x48e4(0x32)];_0x3c22fd[_0x48e4(0x19)]('❌\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20scraping\x20failed:',_0x2f4861),_0xa785c2&&_0x15f596[_0x48e4(0x33)](_0x2530bc,_0x15f596[_0x48e4(0x34)]),_0x4fe549&&_0x15f596[_0x48e4(0x33)](_0x4b55ba,_0x2f4861);}else _0x15f596[_0x48e4(0x35)](_0x2d43b5,_0x15f596[_0x48e4(0x36)]);}const _0xd935b7=await _0x15f596[_0x48e4(0x37)](scrapeLinkedInProfile,_0x37a60c,_0x4a8a19);if(_0xd935b7[_0x48e4(0x4)])console[_0x48e4(0x11)](_0x15f596['vNNvA']),_0x2d43b5&&(_0x15f596[_0x48e4(0x38)](_0x15f596[_0x48e4(0x39)],_0x15f596[_0x48e4(0x3a)])?_0x2d43b5(_0x15f596[_0x48e4(0x3b)]):_0x15f596[_0x48e4(0x33)](_0x1b8b02,_0x343821[_0x48e4(0x19)]||_0x48e4(0x3c))),_0xaa5814&&_0x15f596[_0x48e4(0x33)](_0xaa5814,_0xd935b7[_0x48e4(0x3d)]);else{const _0x50badf=_0xd935b7[_0x48e4(0x19)]||_0x15f596[_0x48e4(0x32)];console['error'](_0x15f596[_0x48e4(0x3e)],_0x50badf);_0x2d43b5&&(_0x15f596[_0x48e4(0x3f)]===_0x15f596[_0x48e4(0x3f)]?_0x15f596[_0x48e4(0x40)](_0x2d43b5,_0x15f596[_0x48e4(0x34)]):_0x15f596[_0x48e4(0x35)](_0x1f8f54,_0x527b98));if(_0x1066fa){if(_0x15f596[_0x48e4(0x41)](_0x48e4(0x42),_0x15f596['CnmXM']))return{'success':![],'error':_0x15f596['ExyFY'](_0x15f596['ihHGS'],_0x375305)};else _0x1066fa(_0x50badf);}}}catch(_0x56048f){if('JtEMJ'===_0x48e4(0x43)){const _0xcbe30=_0x15f596[_0x48e4(0x44)](_0x56048f,Error)?_0x56048f[_0x48e4(0x1a)]:_0x15f596[_0x48e4(0x45)];console[_0x48e4(0x19)](_0x15f596[_0x48e4(0x46)],_0x56048f);if(_0x2d43b5){if(_0x15f596[_0x48e4(0x47)]===_0x48e4(0x48))_0x2d43b5(_0x15f596[_0x48e4(0x49)]);else{const _0x40585e=_0x58c78e[_0x48e4(0x16)];if(!_0x40585e||_0x15f596[_0x48e4(0x4a)](typeof _0x40585e,_0x15f596['PSlbJ']))return{'success':![],'error':_0x15f596[_0x48e4(0x4b)]};return _0x4a4503[_0x48e4(0x11)](_0x15f596[_0x48e4(0x4c)],_0x40585e),{'success':!![],'profileUrl':_0x40585e,'message':_0x15f596[_0x48e4(0x4d)]};}}_0x1066fa&&_0x15f596[_0x48e4(0x4e)](_0x1066fa,_0xcbe30);}else return{'valid':![],'error':_0x15f596['xlFgm']};}};export const checkScrapingStatus=async _0x12864a=>{const _0x219742={'oOKKY':function(_0x54283a,_0x3bdfe7){return _0x54283a!==_0x3bdfe7;},'kvCBi':_0x48e4(0x4f),'yNsNQ':_0x48e4(0x50),'WYszX':'🔍\x20[LINKEDIN\x20EXTRACTOR]\x20Checking\x20scraping\x20status\x20for:','kxTsK':'❌\x20[LINKEDIN\x20EXTRACTOR]\x20Failed\x20to\x20check\x20status:','miMkX':function(_0x1532fd,_0x3e5e45){return _0x1532fd instanceof _0x3e5e45;},'hqIOu':'Unknown\x20error'};try{if(_0x219742['oOKKY'](_0x219742['kvCBi'],_0x219742[_0x48e4(0x51)]))return console[_0x48e4(0x11)](_0x219742[_0x48e4(0x52)],_0x12864a),{'inProgress':![],'completed':![]};else _0x32f53b(_0x13b7bc[_0x48e4(0x3d)]);}catch(_0x4208cc){return console[_0x48e4(0x19)](_0x219742['kxTsK'],_0x4208cc),{'inProgress':![],'completed':![],'error':_0x219742[_0x48e4(0x53)](_0x4208cc,Error)?_0x4208cc[_0x48e4(0x1a)]:_0x219742[_0x48e4(0x54)]};}};export const validateExtractedUrl=_0x4bf810=>{const _0x7a7f5c={'BzVaM':_0x48e4(0x23),'CCkYe':_0x48e4(0x55),'qyVvH':'❌\x20[LINKEDIN\x20EXTRACTOR]\x20Complete\x20flow\x20error:','QGLHG':function(_0x495cf8,_0x24d384){return _0x495cf8(_0x24d384);},'vpxGF':function(_0x3676f0,_0x21cb78){return _0x3676f0!==_0x21cb78;},'HDhVH':_0x48e4(0x5),'MtKEq':function(_0xefcd83,_0x2cbae0){return _0xefcd83===_0x2cbae0;},'JCBQP':'JDLhQ','iaJUh':_0x48e4(0x56),'rqryR':_0x48e4(0x57),'BBSYJ':_0x48e4(0x58),'ODMWD':_0x48e4(0x24),'BdvZd':'linkedin.com','FKveS':_0x48e4(0x59),'AXNhF':_0x48e4(0x5a)};if(!_0x4bf810||_0x7a7f5c['vpxGF'](typeof _0x4bf810,_0x7a7f5c[_0x48e4(0x5b)]))return _0x7a7f5c[_0x48e4(0x5c)](_0x7a7f5c[_0x48e4(0x5d)],_0x7a7f5c[_0x48e4(0x5d)])?{'valid':![],'error':_0x7a7f5c['iaJUh']}:(_0x477a52[_0x48e4(0x19)](_0x7a7f5c['BzVaM'],_0x5d985d),{'success':![],'error':_0x48e4(0x5e)});if(!_0x4bf810['includes'](_0x7a7f5c[_0x48e4(0x5f)])){if(_0x7a7f5c[_0x48e4(0x5c)](_0x48e4(0x60),_0x7a7f5c[_0x48e4(0x61)])){const _0x5730d1=_0x3b0dcb instanceof _0x567440?_0x4e3c48[_0x48e4(0x1a)]:_0x7a7f5c[_0x48e4(0x62)];return _0x13c0c0[_0x48e4(0x19)](_0x7a7f5c[_0x48e4(0x63)],_0x3cdcc4),_0x160175&&_0x7a7f5c[_0x48e4(0x64)](_0x4f6e93,_0x5730d1),![];}else return{'valid':![],'error':_0x7a7f5c['ODMWD']};}if(!_0x4bf810[_0x48e4(0x65)](_0x7a7f5c[_0x48e4(0x66)]))return{'valid':![],'error':_0x7a7f5c[_0x48e4(0x67)]};const _0x375648=_0x4bf810[_0x48e4(0x68)](/linkedin\.com\/in\/([^\/\?#]+)/);if(!_0x375648||!_0x375648[0x1])return{'valid':![],'error':_0x7a7f5c[_0x48e4(0x69)]};return{'valid':!![]};};export const completeLinkedInExtraction=async(_0x18efa9,_0x5aae15,_0x309713)=>{const _0x14d3f0={'Nhhsv':function(_0x5db2cb,_0x2d058e){return _0x5db2cb(_0x2d058e);},'WmmDv':function(_0x585dc8,_0x468aa1){return _0x585dc8(_0x468aa1);},'TJyOm':_0x48e4(0x6a),'BGZFD':_0x48e4(0x2d),'xbVuf':_0x48e4(0x2e),'Ncfkc':'No\x20profile\x20URL\x20in\x20success\x20message','OqviZ':function(_0x25b47b,_0x34b545){return _0x25b47b!==_0x34b545;},'wYsvI':_0x48e4(0x6b),'FWUNT':function(_0x59f67a,_0x2b52dc){return _0x59f67a(_0x2b52dc);},'SoKDk':'Processing\x20extracted\x20data...','HyYZj':_0x48e4(0x6c),'kiZTB':function(_0x194394,_0x54ea81){return _0x194394(_0x54ea81);},'pxYJV':'xEnKZ','TfPIs':function(_0x4330b8,_0x3dc2f7){return _0x4330b8===_0x3dc2f7;},'ztIVK':_0x48e4(0x6d),'RXsuv':_0x48e4(0x6e),'YfZde':_0x48e4(0x3c),'qXnkd':function(_0x19b5d4,_0x5cf110){return _0x19b5d4 instanceof _0x5cf110;},'hKxCm':_0x48e4(0x55),'SheXj':'❌\x20[LINKEDIN\x20EXTRACTOR]\x20Complete\x20flow\x20error:','UWinZ':function(_0x52299e,_0x3ed142){return _0x52299e===_0x3ed142;},'ljGyj':_0x48e4(0x6f),'HovpT':function(_0x2f7ff5,_0x26fa8b){return _0x2f7ff5(_0x26fa8b);}},{onProgress:_0x20e91a,onSuccess:_0x40e169,onError:_0x55cba5}=_0x309713;try{if(_0x20e91a){if(_0x14d3f0['OqviZ'](_0x14d3f0['wYsvI'],_0x48e4(0x6b))){const _0x3ea1f8=_0x3147f8[_0x48e4(0x19)]||_0x48e4(0x70);return _0x1fa7e7[_0x48e4(0x19)](_0x48e4(0x6c),_0x3ea1f8),_0x1dc461&&_0x14d3f0['Nhhsv'](_0x3e2f08,_0x3ea1f8),![];}else _0x14d3f0['FWUNT'](_0x20e91a,_0x14d3f0[_0x48e4(0x71)]);}const _0x29963e=parseExtractionMessage(_0x18efa9);if(!_0x29963e[_0x48e4(0x4)]||!_0x29963e[_0x48e4(0x16)]){const _0x2e8b74=_0x29963e[_0x48e4(0x19)]||_0x48e4(0x70);return console[_0x48e4(0x19)](_0x14d3f0['HyYZj'],_0x2e8b74),_0x55cba5&&_0x14d3f0[_0x48e4(0x72)](_0x55cba5,_0x2e8b74),![];}const _0x55ea28=_0x29963e['profileUrl'],_0xbbe1c0=validateExtractedUrl(_0x55ea28);if(!_0xbbe1c0[_0x48e4(0x73)]){if(_0x14d3f0[_0x48e4(0x74)]===_0x14d3f0[_0x48e4(0x74)])return console[_0x48e4(0x19)](_0x48e4(0x1f),_0xbbe1c0[_0x48e4(0x19)]),_0x55cba5&&(_0x14d3f0[_0x48e4(0x75)](_0x14d3f0[_0x48e4(0x76)],_0x14d3f0[_0x48e4(0x77)])?_0x14d3f0[_0x48e4(0x78)](_0x5932e5,_0x597b9f):_0x14d3f0[_0x48e4(0x78)](_0x55cba5,_0xbbe1c0[_0x48e4(0x19)]||_0x14d3f0[_0x48e4(0x79)])),![];else{const _0x30efc4=_0x5594b6 instanceof _0x5c63bb?_0x35e9b7[_0x48e4(0x1a)]:_0x14d3f0[_0x48e4(0x7a)];_0x47870e[_0x48e4(0x19)](_0x14d3f0[_0x48e4(0x7b)],_0x24f28c),_0x4b3d33&&_0x14d3f0[_0x48e4(0x7c)](_0xaf8c04,_0x14d3f0[_0x48e4(0x7d)]),_0x1fc0a3&&_0x14d3f0[_0x48e4(0x7c)](_0xc94541,_0x30efc4);}}return await _0x14d3f0[_0x48e4(0x72)](initiateProfileScraping,{'userId':_0x5aae15,'profileUrl':_0x55ea28,'onProgress':_0x20e91a,'onSuccess':_0x40e169,'onError':_0x55cba5}),!![];}catch(_0x2cd30e){const _0x5f452b=_0x14d3f0['qXnkd'](_0x2cd30e,Error)?_0x2cd30e[_0x48e4(0x1a)]:_0x14d3f0[_0x48e4(0x7e)];console['error'](_0x14d3f0[_0x48e4(0x7f)],_0x2cd30e);if(_0x55cba5){if(_0x14d3f0[_0x48e4(0x80)](_0x48e4(0x6f),_0x14d3f0[_0x48e4(0x81)]))_0x14d3f0[_0x48e4(0x82)](_0x55cba5,_0x5f452b);else return{'success':![],'error':_0x14d3f0[_0x48e4(0x83)]};}return![];}};function _0x21a5(){const _0x43d029=['Invalid\x20message\x20format','HYzLW','XeygU','object','success','string','HplRm','No\x20profile\x20URL\x20in\x20success\x20message','✅\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20URL\x20extracted:','Profile\x20URL\x20extracted\x20successfully','Unknown\x20extraction\x20error','SUzJv','Unknown\x20message\x20status:\x20','Vpgeg','DAhtn','LTwxr','ALyuD','log','📨\x20[LINKEDIN\x20EXTRACTOR]\x20Parsing\x20WebView\x20message:','WMirS','status','bFHPM','profileUrl','kPygZ','itCjo','error','message','tABpu','warn','⚠️\x20[LINKEDIN\x20EXTRACTOR]\x20Extraction\x20error:','xQcuN','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Invalid\x20URL:','iRPhe','aJZpT','cCBtY','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Failed\x20to\x20parse\x20message:','URL\x20does\x20not\x20contain\x20/in/\x20pattern','🚀\x20[LINKEDIN\x20EXTRACTOR]\x20User\x20ID:','🚀\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20URL:','AmCzD','✅\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20scraping\x20successful','uAVQy','GpoOh','✅\x20Profile\x20scraping\x20complete!','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Profile\x20scraping\x20failed:','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Exception\x20during\x20scraping:','❌\x20Error\x20occurred','🚀\x20[LINKEDIN\x20EXTRACTOR]\x20Starting\x20profile\x20scraping...','iwCdK','LsxTk','xHuqe','Kyzga','rwZNg','XxHzu','giXlF','IqnTh','BgnZE','wvhtL','fCQIn','piXlR','Invalid\x20profile\x20URL','data','KVveB','nKVHg','JlvVX','AzSbP','GQbyN','JtEMJ','NPzQW','poGXW','unumv','sbKPO','njAvv','qTPix','KEGao','Fgztf','fdVbE','Hirve','USFYa','kmcGw','iIQKJ','yNsNQ','WYszX','miMkX','hqIOu','Unknown\x20error','URL\x20is\x20empty\x20or\x20invalid','/in/','ZNQHh','URL\x20is\x20not\x20a\x20LinkedIn\x20domain','Could\x20not\x20extract\x20username\x20from\x20URL','HDhVH','MtKEq','JCBQP','Failed\x20to\x20parse\x20extraction\x20result','rqryR','sHcYo','BBSYJ','CCkYe','qyVvH','QGLHG','includes','BdvZd','FKveS','match','AXNhF','Unknown\x20error\x20occurred','LFUNr','❌\x20[LINKEDIN\x20EXTRACTOR]\x20Extraction\x20failed:','BTpsG','jaaxM','miKnn','Failed\x20to\x20extract\x20profile\x20URL','SoKDk','kiZTB','valid','pxYJV','TfPIs','ztIVK','RXsuv','WmmDv','YfZde','TJyOm','BGZFD','Nhhsv','xbVuf','hKxCm','SheXj','UWinZ','ljGyj','HovpT','Ncfkc'];_0x21a5=function(){return _0x43d029;};return _0x21a5();}
1
+ /**
2
+ * LinkedIn DOM Extractor Service
3
+ * Handles profile URL extraction from WebView and orchestrates backend scraping
4
+ * Works with existing linkedinScrapingService for backend integration
5
+ */
6
+
7
+ import { scrapeLinkedInProfile } from './linkedinScrapingService';
8
+ /**
9
+ * Parse WebView message from profile extraction script
10
+ * Handles JSON parsing and validation
11
+ */
12
+ export const parseExtractionMessage = data => {
13
+ try {
14
+ console.log('📨 [LINKEDIN EXTRACTOR] Parsing WebView message:', data);
15
+ const parsed = JSON.parse(data);
16
+
17
+ // Validate message structure
18
+ if (!parsed || typeof parsed !== 'object') {
19
+ return {
20
+ success: false,
21
+ error: 'Invalid message format'
22
+ };
23
+ }
24
+ const status = parsed.status;
25
+ if (status === 'success') {
26
+ const profileUrl = parsed.profileUrl;
27
+ if (!profileUrl || typeof profileUrl !== 'string') {
28
+ return {
29
+ success: false,
30
+ error: 'No profile URL in success message'
31
+ };
32
+ }
33
+ console.log('✅ [LINKEDIN EXTRACTOR] Profile URL extracted:', profileUrl);
34
+ return {
35
+ success: true,
36
+ profileUrl: profileUrl,
37
+ message: 'Profile URL extracted successfully'
38
+ };
39
+ } else if (status === 'error') {
40
+ const errorMessage = parsed.message || 'Unknown extraction error';
41
+ console.warn('⚠️ [LINKEDIN EXTRACTOR] Extraction error:', errorMessage);
42
+ return {
43
+ success: false,
44
+ error: errorMessage
45
+ };
46
+ } else {
47
+ return {
48
+ success: false,
49
+ error: 'Unknown message status: ' + status
50
+ };
51
+ }
52
+ } catch (error) {
53
+ console.error('❌ [LINKEDIN EXTRACTOR] Failed to parse message:', error);
54
+ return {
55
+ success: false,
56
+ error: 'Failed to parse extraction result'
57
+ };
58
+ }
59
+ };
60
+
61
+ /**
62
+ * Initiate profile scraping using extracted URL
63
+ * Reuses existing scrapeLinkedInProfile from linkedinScrapingService
64
+ */
65
+ export const initiateProfileScraping = async options => {
66
+ const {
67
+ userId,
68
+ profileUrl,
69
+ onProgress,
70
+ onSuccess,
71
+ onError
72
+ } = options;
73
+ try {
74
+ console.log('🚀 [LINKEDIN EXTRACTOR] Starting profile scraping...');
75
+ console.log('🚀 [LINKEDIN EXTRACTOR] User ID:', userId);
76
+ console.log('🚀 [LINKEDIN EXTRACTOR] Profile URL:', profileUrl);
77
+
78
+ // Update progress
79
+ if (onProgress) {
80
+ onProgress('Sending profile URL to backend...');
81
+ }
82
+
83
+ // Call existing scraping service (reuses linkedinScrapingService.ts)
84
+ const result = await scrapeLinkedInProfile(userId, profileUrl);
85
+ if (result.success) {
86
+ console.log('✅ [LINKEDIN EXTRACTOR] Profile scraping successful');
87
+ if (onProgress) {
88
+ onProgress('✅ Profile scraping complete!');
89
+ }
90
+ if (onSuccess) {
91
+ onSuccess(result.data);
92
+ }
93
+ } else {
94
+ const errorMsg = result.error || 'Unknown scraping error';
95
+ console.error('❌ [LINKEDIN EXTRACTOR] Profile scraping failed:', errorMsg);
96
+ if (onProgress) {
97
+ onProgress('❌ Scraping failed');
98
+ }
99
+ if (onError) {
100
+ onError(errorMsg);
101
+ }
102
+ }
103
+ } catch (error) {
104
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error occurred';
105
+ console.error('❌ [LINKEDIN EXTRACTOR] Exception during scraping:', error);
106
+ if (onProgress) {
107
+ onProgress('❌ Error occurred');
108
+ }
109
+ if (onError) {
110
+ onError(errorMsg);
111
+ }
112
+ }
113
+ };
114
+
115
+ /**
116
+ * Check scraping status for a user (optional - for future use)
117
+ * This can be used to poll backend for scraping completion
118
+ */
119
+ export const checkScrapingStatus = async userId => {
120
+ try {
121
+ console.log('🔍 [LINKEDIN EXTRACTOR] Checking scraping status for:', userId);
122
+
123
+ // This endpoint may not exist yet - implement when needed
124
+ // For now, return a basic status
125
+ return {
126
+ inProgress: false,
127
+ completed: false
128
+ };
129
+ } catch (error) {
130
+ console.error('❌ [LINKEDIN EXTRACTOR] Failed to check status:', error);
131
+ return {
132
+ inProgress: false,
133
+ completed: false,
134
+ error: error instanceof Error ? error.message : 'Unknown error'
135
+ };
136
+ }
137
+ };
138
+
139
+ /**
140
+ * Validate extracted LinkedIn URL
141
+ * Additional validation layer before sending to backend
142
+ */
143
+ export const validateExtractedUrl = url => {
144
+ if (!url || typeof url !== 'string') {
145
+ return {
146
+ valid: false,
147
+ error: 'URL is empty or invalid'
148
+ };
149
+ }
150
+
151
+ // Check for /in/ pattern
152
+ if (!url.includes('/in/')) {
153
+ return {
154
+ valid: false,
155
+ error: 'URL does not contain /in/ pattern'
156
+ };
157
+ }
158
+
159
+ // Check for linkedin.com domain
160
+ if (!url.includes('linkedin.com')) {
161
+ return {
162
+ valid: false,
163
+ error: 'URL is not a LinkedIn domain'
164
+ };
165
+ }
166
+
167
+ // Extract username
168
+ const match = url.match(/linkedin\.com\/in\/([^\/\?#]+)/);
169
+ if (!match || !match[1]) {
170
+ return {
171
+ valid: false,
172
+ error: 'Could not extract username from URL'
173
+ };
174
+ }
175
+ return {
176
+ valid: true
177
+ };
178
+ };
179
+
180
+ /**
181
+ * Complete LinkedIn extraction and scraping flow
182
+ * High-level function that handles the entire process
183
+ */
184
+ export const completeLinkedInExtraction = async (webViewMessage, userId, callbacks) => {
185
+ const {
186
+ onProgress,
187
+ onSuccess,
188
+ onError
189
+ } = callbacks;
190
+ try {
191
+ // Step 1: Parse extraction result
192
+ if (onProgress) {
193
+ onProgress('Processing extracted data...');
194
+ }
195
+ const extractionResult = parseExtractionMessage(webViewMessage);
196
+ if (!extractionResult.success || !extractionResult.profileUrl) {
197
+ const errorMsg = extractionResult.error || 'Failed to extract profile URL';
198
+ console.error('❌ [LINKEDIN EXTRACTOR] Extraction failed:', errorMsg);
199
+ if (onError) {
200
+ onError(errorMsg);
201
+ }
202
+ return false;
203
+ }
204
+ const profileUrl = extractionResult.profileUrl;
205
+
206
+ // Step 2: Validate URL
207
+ const validation = validateExtractedUrl(profileUrl);
208
+ if (!validation.valid) {
209
+ console.error('❌ [LINKEDIN EXTRACTOR] Invalid URL:', validation.error);
210
+ if (onError) {
211
+ onError(validation.error || 'Invalid profile URL');
212
+ }
213
+ return false;
214
+ }
215
+
216
+ // Step 3: Initiate scraping
217
+ await initiateProfileScraping({
218
+ userId,
219
+ profileUrl,
220
+ onProgress,
221
+ onSuccess,
222
+ onError
223
+ });
224
+ return true;
225
+ } catch (error) {
226
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
227
+ console.error('❌ [LINKEDIN EXTRACTOR] Complete flow error:', error);
228
+ if (onError) {
229
+ onError(errorMsg);
230
+ }
231
+ return false;
232
+ }
233
+ };
234
+ //# sourceMappingURL=linkedinDOMExtractor.js.map
@@ -1 +1,210 @@
1
- function _0x4351(_0x1af68a,_0x4351fb){_0x1af68a=_0x1af68a-0x0;const _0x254b53=_0x1af6();let _0x3873d5=_0x254b53[_0x1af68a];return _0x3873d5;}import AsyncStorage from'@react-native-async-storage/async-storage';import{getUserAuthHeaders,getApiHeaders,API_CONFIG}from'../config/api';import{getUserIdFromToken}from'./jwtStorageService';const LINKEDIN_PROFILE_KEY='@onairos_linkedin_profile',LINKEDIN_PROFILE_TIMESTAMP_KEY=_0x4351(0x0);function _0x1af6(){const _0xec724=['@onairos_linkedin_profile_timestamp','Unknown\x20error','4|3|0|2|1','✅\x20[LINKEDIN\x20PROFILE]\x20Profile\x20stored\x20locally','❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20store\x20locally:','vMNap','axWgE','setItem','log','MMEIl','stringify','qmttQ','error','XUYEs','GUziE','oWDlR','fRTFU','YilmP','getItem','JjHgf','parse','❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20get\x20local\x20profile:','❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20clear\x20local\x20profile:','removeItem','📤\x20[LINKEDIN\x20PROFILE]\x20Storing\x20profile\x20data\x20to\x20backend...','📤\x20[LINKEDIN\x20PROFILE]\x20Profile\x20summary:','📤\x20[LINKEDIN\x20PROFILE]\x20Effective\x20userId:','🔑\x20[LINKEDIN\x20PROFILE]\x20Using\x20authenticated\x20headers','⚠️\x20[LINKEDIN\x20PROFILE]\x20No\x20user\x20auth,\x20using\x20basic\x20headers','PDaSa','VoCUZ','✅\x20[LINKEDIN\x20PROFILE]\x20Backend\x20storage\x20successful:','Profile\x20stored\x20successfully','📤\x20[LINKEDIN\x20PROFILE]\x20User\x20ID:','AAgfZ','fullName','headline','QuFKS','experience','length','education','BErcY','skills','exfWO','UzwKj','warn','RqZnb','BASE_URL','ZijhN','lLzXr','Tyurj','LafzP','status','VwHIw','nFZfn','json','MTfBo','MKtmu','fYstT','HugZP','HaFID','iXRTo','message','yLaXO','❌\x20[LINKEDIN\x20PROFILE]\x20Store\x20profile\x20error:','hSeus','success','⚠️\x20[LINKEDIN\x20PROFILE]\x20Backend\x20storage\x20failed,\x20but\x20local\x20storage\x20succeeded','hckCG','qCbTo','FEqsx','XYJJl','XLoRr','qjcLn','IFNxI','tpLpR','bpWac','GWiUo'];_0x1af6=function(){return _0xec724;};return _0x1af6();}export const storeLinkedInProfileLocally=async _0x48cbc2=>{const _0x42afd7={'XUYEs':'❌\x20[LINKEDIN\x20PROFILE]\x20Store\x20profile\x20error:','GUziE':function(_0x589d48,_0x40addc){return _0x589d48 instanceof _0x40addc;},'oWDlR':_0x4351(0x1),'qqAeg':function(_0x286083,_0x455787){return _0x286083!==_0x455787;},'jINPk':'YObWP','axWgE':_0x4351(0x2),'MMEIl':_0x4351(0x3),'qmttQ':'💾\x20[LINKEDIN\x20PROFILE]\x20Storing\x20profile\x20data\x20locally...','cuvkl':_0x4351(0x4)};try{if(_0x42afd7['qqAeg'](_0x4351(0x5),_0x42afd7['jINPk'])){const _0x38624a=_0x42afd7[_0x4351(0x6)]['split']('|');let _0x23f18f=0x0;while(!![]){switch(_0x38624a[_0x23f18f++]){case'0':await AsyncStorage[_0x4351(0x7)](LINKEDIN_PROFILE_TIMESTAMP_KEY,new Date()['toISOString']());continue;case'1':return!![];case'2':console[_0x4351(0x8)](_0x42afd7[_0x4351(0x9)]);continue;case'3':await AsyncStorage[_0x4351(0x7)](LINKEDIN_PROFILE_KEY,JSON[_0x4351(0xa)](_0x48cbc2));continue;case'4':console[_0x4351(0x8)](_0x42afd7[_0x4351(0xb)]);continue;}break;}}else return _0xf4fed[_0x4351(0xc)](_0x42afd7[_0x4351(0xd)],_0xd9c2b4),{'success':![],'error':_0x42afd7[_0x4351(0xe)](_0x1e2f09,_0x5179f3)?_0x4db4ac['message']:_0x42afd7[_0x4351(0xf)]};}catch(_0x1471a9){return console['error'](_0x42afd7['cuvkl'],_0x1471a9),![];}};export const getLinkedInProfileLocally=async()=>{const _0x45d2ae={'lFwWU':function(_0x1df6bc){return _0x1df6bc();},'JjHgf':_0x4351(0x10),'wbXoy':_0x4351(0x11)};try{const _0x393f56=await AsyncStorage[_0x4351(0x12)](LINKEDIN_PROFILE_KEY);if(_0x393f56)return _0x45d2ae[_0x4351(0x13)]!==_0x45d2ae['wbXoy']?JSON[_0x4351(0x14)](_0x393f56):_0x45d2ae['lFwWU'](_0x320160);return null;}catch(_0x4b6746){return console['error'](_0x4351(0x15),_0x4b6746),null;}};export const clearLinkedInProfileLocally=async()=>{const _0x47ebb0={'zedYh':_0x4351(0x16)};try{return await AsyncStorage[_0x4351(0x17)](LINKEDIN_PROFILE_KEY),await AsyncStorage[_0x4351(0x17)](LINKEDIN_PROFILE_TIMESTAMP_KEY),!![];}catch(_0x46b235){return console[_0x4351(0xc)](_0x47ebb0['zedYh'],_0x46b235),![];}};export const storeLinkedInProfileToBackend=async(_0x239eea,_0x845b5a)=>{const _0x577763={'nFZfn':function(_0x84d83e){return _0x84d83e();},'LmWIy':_0x4351(0x18),'AAgfZ':_0x4351(0x19),'OKXgA':function(_0x125c55,_0xb0640){return _0x125c55===_0xb0640;},'QuFKS':function(_0xd98d19,_0x597ddc){return _0xd98d19===_0x597ddc;},'SlnnQ':function(_0x2c4eb6,_0x162d05){return _0x2c4eb6===_0x162d05;},'drjsx':function(_0x5819db,_0x1241df){return _0x5819db===_0x1241df;},'Ksauo':function(_0x7af928,_0x18996d){return _0x7af928===_0x18996d;},'BErcY':function(_0x39e7c0,_0x332d1b){return _0x39e7c0===_0x332d1b;},'fejUL':function(_0x3575ed,_0x2cc0ee){return _0x3575ed===_0x2cc0ee;},'ICyPB':function(_0x98d618,_0x2a5984){return _0x98d618||_0x2a5984;},'exfWO':_0x4351(0x1a),'UzwKj':_0x4351(0x1b),'RqZnb':_0x4351(0x1c),'YxpfD':function(_0x1f93ec,_0x3a556a,_0xd33e6c){return _0x1f93ec(_0x3a556a,_0xd33e6c);},'ZijhN':function(_0x12c90d,_0x13d0f8){return _0x12c90d!==_0x13d0f8;},'lLzXr':_0x4351(0x1d),'Tyurj':_0x4351(0x1e),'LafzP':'❌\x20[LINKEDIN\x20PROFILE]\x20Backend\x20storage\x20failed:','VwHIw':function(_0x5c2b76,_0x2504ac){return _0x5c2b76(_0x2504ac);},'MTfBo':_0x4351(0x1f),'MKtmu':function(_0x4c9dc4,_0x9f2da7){return _0x4c9dc4(_0x9f2da7);},'fYstT':_0x4351(0x20),'HugZP':'❌\x20[LINKEDIN\x20PROFILE]\x20Storage\x20error:','HaFID':function(_0x19092f,_0x59869c){return _0x19092f(_0x59869c);},'iXRTo':function(_0x11b478,_0x5965d8){return _0x11b478 instanceof _0x5965d8;},'yLaXO':_0x4351(0x1)};try{var _0x298214,_0x3d2f57,_0x48c300,_0x18e6ce;console[_0x4351(0x8)](_0x577763['LmWIy']),console[_0x4351(0x8)](_0x4351(0x21),_0x239eea),console[_0x4351(0x8)](_0x577763[_0x4351(0x22)],{'name':_0x845b5a[_0x4351(0x23)],'headline':_0x577763['OKXgA'](_0x298214=_0x845b5a[_0x4351(0x24)],null)||_0x577763[_0x4351(0x25)](_0x298214,void 0x0)?void 0x0:_0x298214['substring'](0x0,0x32),'experienceCount':(_0x577763['SlnnQ'](_0x3d2f57=_0x845b5a[_0x4351(0x26)],null)||_0x577763['drjsx'](_0x3d2f57,void 0x0)?void 0x0:_0x3d2f57[_0x4351(0x27)])||0x0,'educationCount':(_0x577763['Ksauo'](_0x48c300=_0x845b5a[_0x4351(0x28)],null)||_0x577763['QuFKS'](_0x48c300,void 0x0)?void 0x0:_0x48c300[_0x4351(0x27)])||0x0,'skillsCount':(_0x577763[_0x4351(0x29)](_0x18e6ce=_0x845b5a[_0x4351(0x2a)],null)||_0x577763['fejUL'](_0x18e6ce,void 0x0)?void 0x0:_0x18e6ce['length'])||0x0});const _0x30e8e4=await getUserIdFromToken(),_0x1166dd=_0x577763['ICyPB'](_0x30e8e4,_0x239eea);console[_0x4351(0x8)](_0x577763[_0x4351(0x2b)],_0x1166dd);let _0x406ad7;try{_0x406ad7=await getUserAuthHeaders(),console['log'](_0x577763[_0x4351(0x2c)]);}catch(_0x57c900){console[_0x4351(0x2d)](_0x577763[_0x4351(0x2e)]),_0x406ad7=getApiHeaders();}const _0x19d22b=await _0x577763['YxpfD'](fetch,API_CONFIG[_0x4351(0x2f)]+'/enoch/linkedin/store-profile',{'method':'POST','headers':_0x406ad7,'body':JSON[_0x4351(0xa)]({'userId':_0x1166dd,'profileData':_0x845b5a})});if(!_0x19d22b['ok']){if(_0x577763[_0x4351(0x30)](_0x577763[_0x4351(0x31)],_0x577763[_0x4351(0x32)])){const _0x30e529=await _0x19d22b['text']();return console['error'](_0x577763[_0x4351(0x33)],_0x19d22b[_0x4351(0x34)],_0x30e529),await _0x577763[_0x4351(0x35)](storeLinkedInProfileLocally,_0x845b5a),{'success':![],'error':'Backend\x20storage\x20failed:\x20'+_0x19d22b[_0x4351(0x34)]};}else return _0x577763[_0x4351(0x36)](_0x42f58f);}const _0x3f5177=await _0x19d22b[_0x4351(0x37)]();return console[_0x4351(0x8)](_0x577763[_0x4351(0x38)],_0x3f5177),await _0x577763[_0x4351(0x39)](storeLinkedInProfileLocally,_0x845b5a),{'success':!![],'message':_0x577763[_0x4351(0x3a)]};}catch(_0x14c1ba){return console['error'](_0x577763[_0x4351(0x3b)],_0x14c1ba),await _0x577763[_0x4351(0x3c)](storeLinkedInProfileLocally,_0x845b5a),{'success':![],'error':_0x577763[_0x4351(0x3d)](_0x14c1ba,Error)?_0x14c1ba[_0x4351(0x3e)]:_0x577763[_0x4351(0x3f)]};}};export const storeLinkedInProfile=async(_0x88d532,_0x2c113a)=>{const _0x1f317c={'hSeus':'💼\x20[LINKEDIN\x20PROFILE]\x20Initiating\x20profile\x20storage...','lAXaI':function(_0x332bb4,_0x174b39){return _0x332bb4(_0x174b39);},'hckCG':'Profile\x20stored\x20locally\x20(backend\x20storage\x20pending)','boiwH':'Profile\x20stored\x20successfully','qCbTo':_0x4351(0x40),'FEqsx':function(_0x495c76,_0x402fdc){return _0x495c76 instanceof _0x402fdc;}};try{console[_0x4351(0x8)](_0x1f317c[_0x4351(0x41)]),await _0x1f317c['lAXaI'](storeLinkedInProfileLocally,_0x2c113a);const _0x1639f2=await storeLinkedInProfileToBackend(_0x88d532,_0x2c113a);if(!_0x1639f2[_0x4351(0x42)])return console[_0x4351(0x2d)](_0x4351(0x43)),{'success':!![],'message':_0x1f317c[_0x4351(0x44)]};return{'success':!![],'message':_0x1f317c['boiwH']};}catch(_0x339d3c){return console[_0x4351(0xc)](_0x1f317c[_0x4351(0x45)],_0x339d3c),{'success':![],'error':_0x1f317c[_0x4351(0x46)](_0x339d3c,Error)?_0x339d3c['message']:_0x4351(0x1)};}};export const useLinkedInProfileExtractor=()=>{const _0x2a77d5={'qjcLn':function(_0x5d4329,_0x23f5e1){return _0x5d4329===_0x23f5e1;},'IFNxI':_0x4351(0x47),'bpWac':function(_0x10f1cb,_0x404dda,_0xeb20c0){return _0x10f1cb(_0x404dda,_0xeb20c0);},'GWiUo':_0x4351(0x48),'DJNbF':function(_0xeff62f){return _0xeff62f();}},_0x2f6691=async(_0x4fbd96,_0x47a62)=>{return _0x2a77d5[_0x4351(0x49)](_0x2a77d5[_0x4351(0x4a)],_0x4351(0x4b))?(_0x398f41[_0x4351(0xc)]('❌\x20[LINKEDIN\x20PROFILE]\x20Failed\x20to\x20store\x20locally:',_0x1f9b40),![]):_0x2a77d5[_0x4351(0x4c)](storeLinkedInProfile,_0x4fbd96,_0x47a62);},_0x438f35=async()=>{return getLinkedInProfileLocally();},_0x37e334=async()=>{return _0x2a77d5[_0x4351(0x4d)]!==_0x2a77d5['GWiUo']?_0x2a77d5['bpWac'](_0x706575,_0x5592a0,_0x3445c9):_0x2a77d5['DJNbF'](clearLinkedInProfileLocally);};return{'storeProfile':_0x2f6691,'getStoredProfile':_0x438f35,'clearProfile':_0x37e334};};export default{'storeLinkedInProfile':storeLinkedInProfile,'storeLinkedInProfileLocally':storeLinkedInProfileLocally,'getLinkedInProfileLocally':getLinkedInProfileLocally,'clearLinkedInProfileLocally':clearLinkedInProfileLocally,'storeLinkedInProfileToBackend':storeLinkedInProfileToBackend,'useLinkedInProfileExtractor':useLinkedInProfileExtractor};
1
+ /**
2
+ * LinkedIn Profile Service
3
+ * Handles storing and managing LinkedIn profile data extracted from DOM
4
+ * Similar to chatGPTConversationService pattern
5
+ */
6
+
7
+ import AsyncStorage from '@react-native-async-storage/async-storage';
8
+ import { getUserAuthHeaders, getApiHeaders, API_CONFIG } from '../config/api';
9
+ import { getUserIdFromToken } from './jwtStorageService';
10
+
11
+ /**
12
+ * LinkedIn Profile Data Types
13
+ */
14
+
15
+ // AsyncStorage keys
16
+ const LINKEDIN_PROFILE_KEY = '@onairos_linkedin_profile';
17
+ const LINKEDIN_PROFILE_TIMESTAMP_KEY = '@onairos_linkedin_profile_timestamp';
18
+
19
+ /**
20
+ * Store LinkedIn profile data locally
21
+ */
22
+ export const storeLinkedInProfileLocally = async profileData => {
23
+ try {
24
+ console.log('💾 [LINKEDIN PROFILE] Storing profile data locally...');
25
+ await AsyncStorage.setItem(LINKEDIN_PROFILE_KEY, JSON.stringify(profileData));
26
+ await AsyncStorage.setItem(LINKEDIN_PROFILE_TIMESTAMP_KEY, new Date().toISOString());
27
+ console.log('✅ [LINKEDIN PROFILE] Profile stored locally');
28
+ return true;
29
+ } catch (error) {
30
+ console.error('❌ [LINKEDIN PROFILE] Failed to store locally:', error);
31
+ return false;
32
+ }
33
+ };
34
+
35
+ /**
36
+ * Get locally stored LinkedIn profile data
37
+ */
38
+ export const getLinkedInProfileLocally = async () => {
39
+ try {
40
+ const data = await AsyncStorage.getItem(LINKEDIN_PROFILE_KEY);
41
+ if (data) {
42
+ return JSON.parse(data);
43
+ }
44
+ return null;
45
+ } catch (error) {
46
+ console.error('❌ [LINKEDIN PROFILE] Failed to get local profile:', error);
47
+ return null;
48
+ }
49
+ };
50
+
51
+ /**
52
+ * Clear locally stored LinkedIn profile data
53
+ */
54
+ export const clearLinkedInProfileLocally = async () => {
55
+ try {
56
+ await AsyncStorage.removeItem(LINKEDIN_PROFILE_KEY);
57
+ await AsyncStorage.removeItem(LINKEDIN_PROFILE_TIMESTAMP_KEY);
58
+ return true;
59
+ } catch (error) {
60
+ console.error('❌ [LINKEDIN PROFILE] Failed to clear local profile:', error);
61
+ return false;
62
+ }
63
+ };
64
+
65
+ /**
66
+ * Store LinkedIn profile data to backend
67
+ * This sends the extracted profile data to the Onairos backend for processing
68
+ */
69
+ export const storeLinkedInProfileToBackend = async (userId, profileData) => {
70
+ try {
71
+ var _profileData$headline, _profileData$experien, _profileData$educatio, _profileData$skills;
72
+ console.log('📤 [LINKEDIN PROFILE] Storing profile data to backend...');
73
+ console.log('📤 [LINKEDIN PROFILE] User ID:', userId);
74
+ console.log('📤 [LINKEDIN PROFILE] Profile summary:', {
75
+ name: profileData.fullName,
76
+ headline: (_profileData$headline = profileData.headline) === null || _profileData$headline === void 0 ? void 0 : _profileData$headline.substring(0, 50),
77
+ experienceCount: ((_profileData$experien = profileData.experience) === null || _profileData$experien === void 0 ? void 0 : _profileData$experien.length) || 0,
78
+ educationCount: ((_profileData$educatio = profileData.education) === null || _profileData$educatio === void 0 ? void 0 : _profileData$educatio.length) || 0,
79
+ skillsCount: ((_profileData$skills = profileData.skills) === null || _profileData$skills === void 0 ? void 0 : _profileData$skills.length) || 0
80
+ });
81
+
82
+ // Get the actual userId (UUID) from JWT token
83
+ const jwtUserId = await getUserIdFromToken();
84
+ const effectiveUserId = jwtUserId || userId;
85
+ console.log('📤 [LINKEDIN PROFILE] Effective userId:', effectiveUserId);
86
+
87
+ // Get authenticated headers
88
+ let headers;
89
+ try {
90
+ headers = await getUserAuthHeaders();
91
+ console.log('🔑 [LINKEDIN PROFILE] Using authenticated headers');
92
+ } catch (authError) {
93
+ console.warn('⚠️ [LINKEDIN PROFILE] No user auth, using basic headers');
94
+ headers = getApiHeaders();
95
+ }
96
+
97
+ // Send to backend
98
+ const response = await fetch(`${API_CONFIG.BASE_URL}/enoch/linkedin/store-profile`, {
99
+ method: 'POST',
100
+ headers,
101
+ body: JSON.stringify({
102
+ userId: effectiveUserId,
103
+ profileData: profileData
104
+ })
105
+ });
106
+ if (!response.ok) {
107
+ const errorText = await response.text();
108
+ console.error('❌ [LINKEDIN PROFILE] Backend storage failed:', response.status, errorText);
109
+
110
+ // Store locally as fallback
111
+ await storeLinkedInProfileLocally(profileData);
112
+ return {
113
+ success: false,
114
+ error: `Backend storage failed: ${response.status}`
115
+ };
116
+ }
117
+ const result = await response.json();
118
+ console.log('✅ [LINKEDIN PROFILE] Backend storage successful:', result);
119
+
120
+ // Also store locally
121
+ await storeLinkedInProfileLocally(profileData);
122
+ return {
123
+ success: true,
124
+ message: 'Profile stored successfully'
125
+ };
126
+ } catch (error) {
127
+ console.error('❌ [LINKEDIN PROFILE] Storage error:', error);
128
+
129
+ // Store locally as fallback
130
+ await storeLinkedInProfileLocally(profileData);
131
+ return {
132
+ success: false,
133
+ error: error instanceof Error ? error.message : 'Unknown error'
134
+ };
135
+ }
136
+ };
137
+
138
+ /**
139
+ * Combined function to store profile both locally and to backend
140
+ */
141
+ export const storeLinkedInProfile = async (userId, profileData) => {
142
+ try {
143
+ console.log('💼 [LINKEDIN PROFILE] Initiating profile storage...');
144
+
145
+ // Store locally first (immediate)
146
+ await storeLinkedInProfileLocally(profileData);
147
+
148
+ // Then try to store to backend (may fail if endpoint doesn't exist yet)
149
+ const backendResult = await storeLinkedInProfileToBackend(userId, profileData);
150
+ if (!backendResult.success) {
151
+ console.warn('⚠️ [LINKEDIN PROFILE] Backend storage failed, but local storage succeeded');
152
+ // Return success since local storage worked
153
+ return {
154
+ success: true,
155
+ message: 'Profile stored locally (backend storage pending)'
156
+ };
157
+ }
158
+ return {
159
+ success: true,
160
+ message: 'Profile stored successfully'
161
+ };
162
+ } catch (error) {
163
+ console.error('❌ [LINKEDIN PROFILE] Store profile error:', error);
164
+ return {
165
+ success: false,
166
+ error: error instanceof Error ? error.message : 'Unknown error'
167
+ };
168
+ }
169
+ };
170
+
171
+ /**
172
+ * Hook for LinkedIn profile extraction
173
+ * Returns functions to handle profile extraction workflow
174
+ */
175
+ export const useLinkedInProfileExtractor = () => {
176
+ /**
177
+ * Store extracted profile data
178
+ */
179
+ const storeProfile = async (userId, profileData) => {
180
+ return storeLinkedInProfile(userId, profileData);
181
+ };
182
+
183
+ /**
184
+ * Get stored profile data
185
+ */
186
+ const getStoredProfile = async () => {
187
+ return getLinkedInProfileLocally();
188
+ };
189
+
190
+ /**
191
+ * Clear stored profile data
192
+ */
193
+ const clearProfile = async () => {
194
+ return clearLinkedInProfileLocally();
195
+ };
196
+ return {
197
+ storeProfile,
198
+ getStoredProfile,
199
+ clearProfile
200
+ };
201
+ };
202
+ export default {
203
+ storeLinkedInProfile,
204
+ storeLinkedInProfileLocally,
205
+ getLinkedInProfileLocally,
206
+ clearLinkedInProfileLocally,
207
+ storeLinkedInProfileToBackend,
208
+ useLinkedInProfileExtractor
209
+ };
210
+ //# sourceMappingURL=linkedinProfileService.js.map