@onairos/react-native 3.7.2 → 3.7.4

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 (237) hide show
  1. package/lib/commonjs/api/index.js +219 -9
  2. package/lib/commonjs/components/BodyText.js +27 -9
  3. package/lib/commonjs/components/BrandMark.js +111 -10
  4. package/lib/commonjs/components/CodeInput.js +120 -9
  5. package/lib/commonjs/components/EmailInput.js +30 -8
  6. package/lib/commonjs/components/GoogleButton.js +56 -9
  7. package/lib/commonjs/components/HeadingGroup.js +43 -9
  8. package/lib/commonjs/components/LLMDataInputModal.js +664 -14
  9. package/lib/commonjs/components/ModalHeader.js +99 -9
  10. package/lib/commonjs/components/ModalSheet.js +47 -9
  11. package/lib/commonjs/components/Onairos.js +380 -14
  12. package/lib/commonjs/components/OnairosButton.js +313 -13
  13. package/lib/commonjs/components/OnairosSignInButton.js +130 -12
  14. package/lib/commonjs/components/Overlay.js +465 -13
  15. package/lib/commonjs/components/PersonaImage.js +137 -10
  16. package/lib/commonjs/components/PersonaLoadingScreen.js +318 -12
  17. package/lib/commonjs/components/PersonalizationConsentScreen.js +467 -13
  18. package/lib/commonjs/components/PinCreationScreen.js +403 -12
  19. package/lib/commonjs/components/PinInput.js +464 -9
  20. package/lib/commonjs/components/PlatformConnectorsStep.js +1311 -23
  21. package/lib/commonjs/components/PlatformList.js +137 -10
  22. package/lib/commonjs/components/PlatformToggle.js +180 -9
  23. package/lib/commonjs/components/PrimaryButton.js +180 -10
  24. package/lib/commonjs/components/SignInMatchAnimation.js +197 -9
  25. package/lib/commonjs/components/SignInStep.js +345 -12
  26. package/lib/commonjs/components/UniversalOnboarding.js +2780 -30
  27. package/lib/commonjs/components/VerificationStep.js +176 -11
  28. package/lib/commonjs/components/WelcomeScreen.js +461 -22
  29. package/lib/commonjs/components/icons/Basicproficon.js +37 -8
  30. package/lib/commonjs/components/icons/Basicprofile.js +21 -8
  31. package/lib/commonjs/components/icons/Checkbox.js +21 -8
  32. package/lib/commonjs/components/icons/Checkmark.js +27 -8
  33. package/lib/commonjs/components/icons/Contentanalysis.js +21 -8
  34. package/lib/commonjs/components/icons/Contenticon.js +39 -8
  35. package/lib/commonjs/components/icons/EnochE.js +41 -8
  36. package/lib/commonjs/components/icons/Personalityicon.js +30 -8
  37. package/lib/commonjs/components/icons/Personalityprofile.js +21 -8
  38. package/lib/commonjs/components/icons/Personalitytraits.js +21 -8
  39. package/lib/commonjs/components/icons/Userpreferences.js +21 -8
  40. package/lib/commonjs/components/icons/index.js +84 -17
  41. package/lib/commonjs/components/onboarding/OAuthWebView.js +1754 -18
  42. package/lib/commonjs/components/onboarding/OnboardingHeader.js +74 -10
  43. package/lib/commonjs/components/onboarding/PinInput.js +283 -10
  44. package/lib/commonjs/components/onboarding/PlatformConnector.js +249 -11
  45. package/lib/commonjs/config/PLATFORM_APIS.md +849 -0
  46. package/lib/commonjs/config/api.js +56 -7
  47. package/lib/commonjs/constants/index.js +120 -7
  48. package/lib/commonjs/context/AuthContext.js +345 -10
  49. package/lib/commonjs/hooks/useConnectedAccounts.js +111 -9
  50. package/lib/commonjs/hooks/useConnections.js +102 -8
  51. package/lib/commonjs/hooks/useCredentials.js +178 -10
  52. package/lib/commonjs/hooks/useUserConnections.js +148 -10
  53. package/lib/commonjs/index.js +439 -34
  54. package/lib/commonjs/services/apiClient.js +298 -8
  55. package/lib/commonjs/services/biometricPinService.js +180 -8
  56. package/lib/commonjs/services/chatGPTConversationExtractor.js +155 -8
  57. package/lib/commonjs/services/chatGPTConversationService.js +275 -9
  58. package/lib/commonjs/services/claudeConversationExtractor.js +103 -8
  59. package/lib/commonjs/services/claudeConversationService.js +158 -9
  60. package/lib/commonjs/services/connectedAccountsService.js +310 -10
  61. package/lib/commonjs/services/googleAuthService.js +252 -11
  62. package/lib/commonjs/services/hingeDataExtractor.js +105 -8
  63. package/lib/commonjs/services/hingeDataService.js +150 -9
  64. package/lib/commonjs/services/imageCompressionService.js +260 -7
  65. package/lib/commonjs/services/instagramDataExtractor.js +126 -8
  66. package/lib/commonjs/services/instagramDataService.js +163 -9
  67. package/lib/commonjs/services/jwtStorageService.js +276 -7
  68. package/lib/commonjs/services/linkedinDOMExtractor.js +245 -7
  69. package/lib/commonjs/services/linkedinProfileService.js +222 -9
  70. package/lib/commonjs/services/linkedinScrapingService.js +230 -8
  71. package/lib/commonjs/services/llmDataStorage.js +294 -8
  72. package/lib/commonjs/services/mobileTrainingService.js +186 -8
  73. package/lib/commonjs/services/netflixDataExtractor.js +120 -8
  74. package/lib/commonjs/services/netflixDataService.js +198 -9
  75. package/lib/commonjs/services/pinEncryptionService.js +84 -8
  76. package/lib/commonjs/services/pinStorageUtils.js +105 -7
  77. package/lib/commonjs/services/platformAuthService.js +1484 -12
  78. package/lib/commonjs/services/sephoraDataExtractor.js +140 -8
  79. package/lib/commonjs/services/sephoraDataService.js +200 -9
  80. package/lib/commonjs/services/spotifyDataExtractor.js +148 -8
  81. package/lib/commonjs/services/spotifyDataService.js +241 -9
  82. package/lib/commonjs/services/storageService.js +404 -8
  83. package/lib/commonjs/services/telegramDataExtractor.js +115 -8
  84. package/lib/commonjs/services/telegramDataService.js +499 -9
  85. package/lib/commonjs/services/trainingApiHelpers.js +73 -7
  86. package/lib/commonjs/services/userConnectionsService.js +340 -10
  87. package/lib/commonjs/services/youtubeMigrationService.js +416 -10
  88. package/lib/commonjs/theme/index.js +250 -7
  89. package/lib/commonjs/types/ambient.d.js +2 -1
  90. package/lib/commonjs/types/declarations.d.js +2 -1
  91. package/lib/commonjs/types/index.js +6 -1
  92. package/lib/commonjs/types/node-fix.d.js +2 -1
  93. package/lib/commonjs/types/node-override.d.js +2 -1
  94. package/lib/commonjs/types/opacity.d.js +2 -1
  95. package/lib/commonjs/types.js +14 -1
  96. package/lib/commonjs/utils/Portal.js +98 -8
  97. package/lib/commonjs/utils/api.js +130 -9
  98. package/lib/commonjs/utils/assetRegistry.js +210 -35
  99. package/lib/commonjs/utils/auth.js +112 -9
  100. package/lib/commonjs/utils/connectorTests.js +613 -29
  101. package/lib/commonjs/utils/crypto.js +62 -8
  102. package/lib/commonjs/utils/debugHelper.js +64 -1
  103. package/lib/commonjs/utils/encryption.js +76 -7
  104. package/lib/commonjs/utils/eventUtils.js +288 -1
  105. package/lib/commonjs/utils/haptics.js +66 -9
  106. package/lib/commonjs/utils/imagePreloader.js +6 -1
  107. package/lib/commonjs/utils/networkDiagnostics.js +226 -8
  108. package/lib/commonjs/utils/onairosApi.js +350 -9
  109. package/lib/commonjs/utils/programmaticFlow.js +117 -9
  110. package/lib/commonjs/utils/retryHelper.js +220 -1
  111. package/lib/commonjs/utils/secureStorage.js +349 -10
  112. package/lib/commonjs/utils/webviewScripts/chatgpt.js +551 -1
  113. package/lib/commonjs/utils/webviewScripts/claude.js +376 -1
  114. package/lib/commonjs/utils/webviewScripts/hinge.js +411 -1
  115. package/lib/commonjs/utils/webviewScripts/index.js +698 -15
  116. package/lib/commonjs/utils/webviewScripts/instagram.js +454 -1
  117. package/lib/commonjs/utils/webviewScripts/linkedin.js +880 -1
  118. package/lib/commonjs/utils/webviewScripts/netflix.js +382 -1
  119. package/lib/commonjs/utils/webviewScripts/sephora.js +516 -1
  120. package/lib/commonjs/utils/webviewScripts/spotify.js +419 -1
  121. package/lib/commonjs/utils/webviewScripts/telegram.js +678 -1
  122. package/lib/module/api/index.js +211 -1
  123. package/lib/module/components/BodyText.js +20 -1
  124. package/lib/module/components/BrandMark.js +104 -1
  125. package/lib/module/components/CodeInput.js +113 -1
  126. package/lib/module/components/EmailInput.js +23 -1
  127. package/lib/module/components/GoogleButton.js +49 -1
  128. package/lib/module/components/HeadingGroup.js +36 -1
  129. package/lib/module/components/LLMDataInputModal.js +656 -7
  130. package/lib/module/components/ModalHeader.js +92 -1
  131. package/lib/module/components/ModalSheet.js +39 -1
  132. package/lib/module/components/Onairos.js +373 -1
  133. package/lib/module/components/OnairosButton.js +305 -1
  134. package/lib/module/components/OnairosSignInButton.js +121 -1
  135. package/lib/module/components/Overlay.js +456 -1
  136. package/lib/module/components/PersonaImage.js +129 -1
  137. package/lib/module/components/PersonaLoadingScreen.js +310 -1
  138. package/lib/module/components/PersonalizationConsentScreen.js +460 -1
  139. package/lib/module/components/PinCreationScreen.js +396 -1
  140. package/lib/module/components/PinInput.js +456 -1
  141. package/lib/module/components/PlatformConnectorsStep.js +1302 -6
  142. package/lib/module/components/PlatformList.js +129 -1
  143. package/lib/module/components/PlatformToggle.js +173 -1
  144. package/lib/module/components/PrimaryButton.js +172 -1
  145. package/lib/module/components/SignInMatchAnimation.js +189 -1
  146. package/lib/module/components/SignInStep.js +338 -1
  147. package/lib/module/components/UniversalOnboarding.js +2770 -1
  148. package/lib/module/components/VerificationStep.js +168 -1
  149. package/lib/module/components/WelcomeScreen.js +453 -1
  150. package/lib/module/components/icons/Basicproficon.js +30 -1
  151. package/lib/module/components/icons/Basicprofile.js +14 -1
  152. package/lib/module/components/icons/Checkbox.js +14 -1
  153. package/lib/module/components/icons/Checkmark.js +20 -1
  154. package/lib/module/components/icons/Contentanalysis.js +14 -1
  155. package/lib/module/components/icons/Contenticon.js +32 -1
  156. package/lib/module/components/icons/EnochE.js +34 -1
  157. package/lib/module/components/icons/Personalityicon.js +23 -1
  158. package/lib/module/components/icons/Personalityprofile.js +14 -1
  159. package/lib/module/components/icons/Personalitytraits.js +14 -1
  160. package/lib/module/components/icons/Userpreferences.js +14 -1
  161. package/lib/module/components/icons/index.js +13 -1
  162. package/lib/module/components/onboarding/OAuthWebView.js +1746 -1
  163. package/lib/module/components/onboarding/OnboardingHeader.js +66 -1
  164. package/lib/module/components/onboarding/PinInput.js +274 -1
  165. package/lib/module/components/onboarding/PlatformConnector.js +240 -1
  166. package/lib/module/config/PLATFORM_APIS.md +849 -0
  167. package/lib/module/config/api.js +47 -1
  168. package/lib/module/constants/index.js +114 -1
  169. package/lib/module/context/AuthContext.js +335 -1
  170. package/lib/module/hooks/useConnectedAccounts.js +106 -1
  171. package/lib/module/hooks/useConnections.js +95 -1
  172. package/lib/module/hooks/useCredentials.js +171 -6
  173. package/lib/module/hooks/useUserConnections.js +140 -1
  174. package/lib/module/index.js +172 -1
  175. package/lib/module/services/apiClient.js +295 -1
  176. package/lib/module/services/biometricPinService.js +169 -1
  177. package/lib/module/services/chatGPTConversationExtractor.js +149 -1
  178. package/lib/module/services/chatGPTConversationService.js +268 -1
  179. package/lib/module/services/claudeConversationExtractor.js +97 -1
  180. package/lib/module/services/claudeConversationService.js +151 -1
  181. package/lib/module/services/connectedAccountsService.js +293 -1
  182. package/lib/module/services/googleAuthService.js +241 -1
  183. package/lib/module/services/hingeDataExtractor.js +99 -1
  184. package/lib/module/services/hingeDataService.js +143 -1
  185. package/lib/module/services/imageCompressionService.js +250 -1
  186. package/lib/module/services/instagramDataExtractor.js +120 -1
  187. package/lib/module/services/instagramDataService.js +156 -1
  188. package/lib/module/services/jwtStorageService.js +257 -1
  189. package/lib/module/services/linkedinDOMExtractor.js +234 -1
  190. package/lib/module/services/linkedinProfileService.js +210 -1
  191. package/lib/module/services/linkedinScrapingService.js +219 -1
  192. package/lib/module/services/llmDataStorage.js +277 -1
  193. package/lib/module/services/mobileTrainingService.js +173 -1
  194. package/lib/module/services/netflixDataExtractor.js +114 -1
  195. package/lib/module/services/netflixDataService.js +191 -1
  196. package/lib/module/services/pinEncryptionService.js +74 -6
  197. package/lib/module/services/pinStorageUtils.js +93 -1
  198. package/lib/module/services/platformAuthService.js +1461 -1
  199. package/lib/module/services/sephoraDataExtractor.js +134 -1
  200. package/lib/module/services/sephoraDataService.js +193 -1
  201. package/lib/module/services/spotifyDataExtractor.js +142 -1
  202. package/lib/module/services/spotifyDataService.js +234 -1
  203. package/lib/module/services/storageService.js +383 -1
  204. package/lib/module/services/telegramDataExtractor.js +109 -1
  205. package/lib/module/services/telegramDataService.js +493 -1
  206. package/lib/module/services/trainingApiHelpers.js +67 -1
  207. package/lib/module/services/userConnectionsService.js +329 -1
  208. package/lib/module/services/youtubeMigrationService.js +405 -1
  209. package/lib/module/theme/index.js +245 -1
  210. package/lib/module/types.js +10 -1
  211. package/lib/module/utils/Portal.js +90 -1
  212. package/lib/module/utils/api.js +118 -1
  213. package/lib/module/utils/assetRegistry.js +200 -34
  214. package/lib/module/utils/auth.js +100 -1
  215. package/lib/module/utils/connectorTests.js +600 -27
  216. package/lib/module/utils/crypto.js +54 -1
  217. package/lib/module/utils/debugHelper.js +54 -1
  218. package/lib/module/utils/encryption.js +67 -1
  219. package/lib/module/utils/eventUtils.js +270 -1
  220. package/lib/module/utils/haptics.js +59 -8
  221. package/lib/module/utils/imagePreloader.js +3 -1
  222. package/lib/module/utils/networkDiagnostics.js +217 -1
  223. package/lib/module/utils/onairosApi.js +333 -1
  224. package/lib/module/utils/programmaticFlow.js +111 -1
  225. package/lib/module/utils/retryHelper.js +211 -1
  226. package/lib/module/utils/secureStorage.js +330 -6
  227. package/lib/module/utils/webviewScripts/chatgpt.js +545 -1
  228. package/lib/module/utils/webviewScripts/claude.js +370 -1
  229. package/lib/module/utils/webviewScripts/hinge.js +405 -1
  230. package/lib/module/utils/webviewScripts/index.js +434 -1
  231. package/lib/module/utils/webviewScripts/instagram.js +448 -1
  232. package/lib/module/utils/webviewScripts/linkedin.js +874 -1
  233. package/lib/module/utils/webviewScripts/netflix.js +376 -1
  234. package/lib/module/utils/webviewScripts/sephora.js +510 -1
  235. package/lib/module/utils/webviewScripts/spotify.js +413 -1
  236. package/lib/module/utils/webviewScripts/telegram.js +672 -1
  237. package/package.json +2 -2
@@ -1,8 +1,120 @@
1
- 'use strict';
2
- // Onairos SDK - Asset Registry (auto-generated)
3
- var __ONAIROS_REQ_REGISTRY__ = [
4
- require("./netflixDataService"),
5
- require("react-native")
6
- ];
7
- function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
8
- Object['defineProperty'](exports,_0x4c1e(0x0),{'value':!![]}),exports[_0x4c1e(0x1)]=void 0x0;var _netflixDataService=__ONAIROS_REQ_FUNC__(0x0),_reactNative=__ONAIROS_REQ_FUNC__(0x1);function _0x4f89(){const _0x95a7fb=['__esModule','useNetflixDataExtractor','✅\x20[NETFLIX_EXTRACTOR]\x20Export\x20completed\x20successfully','ℹ️\x20[NETFLIX_EXTRACTOR]\x20No\x20data\x20to\x20export\x20-\x20treating\x20as\x20success\x20(connected)','⚠️\x20[NETFLIX_EXTRACTOR]\x20Invalid\x20My\x20List\x20item:','⚠️\x20[NETFLIX_EXTRACTOR]\x20Invalid\x20viewing\x20history\x20item:','AQyuK','📊\x20[NETFLIX_EXTRACTOR]\x20Summary:','❌\x20[NETFLIX_EXTRACTOR]\x20Username\x20is\x20required','Error','default','XQfae','CmFIK','📡\x20[NETFLIX_EXTRACTOR]\x20Sending\x20to\x20backend...','Export\x20Failed','fnJmM','Failed\x20to\x20connect\x20to\x20the\x20data\x20storage\x20service.\x20Please\x20check\x20your\x20network\x20connection.','YDpiG','hixvg','mhNmN','fEQId','bDyPG','❌\x20[NETFLIX_EXTRACTOR]\x20Backend\x20storage\x20failed:','xmkkG','uLkBc','mDfGe','videoId','warn','kuymF','Iayoz','log','xNvDU','summary','MebwA','Alert','alert','Username\x20is\x20required\x20to\x20export\x20Netflix\x20data.','dAOGI','viewingHistory','items','length','pMjyy','filter','VqKnf','title','OUCvC','kIkOO','rating','SJqOp','ratings','ieNhP','YWBvS','hLkcO','SKsUp','error','Eteef','CzwTW','An\x20unknown\x20error\x20occurred\x20during\x20data\x20storage.','brDpY','klAfT','kJBPG','oOjIJ','HAEvb','\x20invalid\x20items','awmJM','HoBaP','storeNetflixData','profile','tokenExpiry','profileId','FBfPR','fiitQ','ZVYMD','Export\x20Error','SQZSI'];_0x4f89=function(){return _0x95a7fb;};return _0x4f89();}const useNetflixDataExtractor=()=>{const _0x56031e={'kJBPG':_0x4c1e(0x2),'oOjIJ':'📊\x20[NETFLIX_EXTRACTOR]\x20Backend\x20response:','OeQcQ':_0x4c1e(0x3),'OjKbP':_0x4c1e(0x4),'YDpiG':'⚠️\x20[NETFLIX_EXTRACTOR]\x20Invalid\x20rating:','hixvg':function(_0x223acd,_0x1d37b4){return _0x223acd!==_0x1d37b4;},'mhNmN':function(_0x3f8a60,_0x5aef15){return _0x3f8a60!==_0x5aef15;},'fEQId':'FVpKQ','bDyPG':_0x4c1e(0x5),'xmkkG':function(_0x34fed2,_0x206671){return _0x34fed2===_0x206671;},'qIWCD':_0x4c1e(0x6),'mDfGe':'tHMhe','Iayoz':'🚀\x20[NETFLIX_EXTRACTOR]\x20Initiating\x20data\x20export','xNvDU':'👤\x20[NETFLIX_EXTRACTOR]\x20Username:','zKHgX':_0x4c1e(0x7),'MebwA':_0x4c1e(0x8),'DBxbF':_0x4c1e(0x9),'dAOGI':_0x4c1e(0xa),'NVbsS':function(_0x3e187a,_0x564b12){return _0x3e187a===_0x564b12;},'GsimU':function(_0x569655,_0x3afc5a){return _0x569655===_0x3afc5a;},'pMjyy':function(_0x459e58,_0x4c83e){return _0x459e58===_0x4c83e;},'brDpY':function(_0x438059,_0x277341){return _0x438059+_0x277341;},'klAfT':_0x4c1e(0xb),'HAEvb':function(_0x39dd24,_0x2625f0){return _0x39dd24-_0x2625f0;},'awmJM':function(_0x3b57a1,_0xed2158){return _0x3b57a1!==_0xed2158;},'HoBaP':_0x4c1e(0xc),'NttNB':_0x4c1e(0xd),'FBfPR':'❌\x20[NETFLIX_EXTRACTOR]\x20Backend\x20storage\x20failed:','fiitQ':_0x4c1e(0xe),'qDzQk':function(_0x292e31,_0x2890fd){return _0x292e31!==_0x2890fd;},'ZVYMD':_0x4c1e(0xf),'SQZSI':_0x4c1e(0x10)},_0x4341d5=async(_0x2072c6,_0x3c7f80)=>{const _0x3beacc={'kuymF':_0x56031e['OjKbP'],'ZYsbm':_0x56031e[_0x4c1e(0x11)],'GupyS':function(_0x27b0a8,_0x1e106c){return _0x56031e[_0x4c1e(0x12)](_0x27b0a8,_0x1e106c);},'rJRxq':'VqKnf','OUCvC':function(_0x243658,_0x2a8b0c){return _0x56031e[_0x4c1e(0x13)](_0x243658,_0x2a8b0c);},'kIkOO':_0x56031e[_0x4c1e(0x14)],'SJqOp':_0x56031e[_0x4c1e(0x15)],'ieNhP':_0x4c1e(0x16),'YWBvS':_0x4c1e(0xe),'hLkcO':function(_0x537260,_0x412b6e){return _0x56031e[_0x4c1e(0x17)](_0x537260,_0x412b6e);},'SKsUp':_0x56031e['qIWCD']};if(_0x4c1e(0x18)===_0x56031e[_0x4c1e(0x19)]){const _0x449381=_0x27bfb9[_0x4c1e(0x1a)]&&_0x396153['title'];return!_0x449381&&_0x5b3cbc[_0x4c1e(0x1b)](_0x3beacc[_0x4c1e(0x1c)],_0x4d9c29),_0x449381;}else{var _0x3034de,_0x4a01a2,_0x5b2a8e,_0x1d8b28;console['log'](_0x56031e[_0x4c1e(0x1d)]),console[_0x4c1e(0x1e)](_0x56031e[_0x4c1e(0x1f)],_0x2072c6),console[_0x4c1e(0x1e)](_0x56031e['zKHgX'],_0x3c7f80[_0x4c1e(0x20)]);if(!_0x2072c6)return console['error'](_0x56031e[_0x4c1e(0x21)]),_reactNative[_0x4c1e(0x22)][_0x4c1e(0x23)](_0x56031e['DBxbF'],_0x4c1e(0x24),[{'text':'OK','style':_0x56031e[_0x4c1e(0x25)]}]),![];const _0x3c09ad=((_0x56031e['xmkkG'](_0x3034de=_0x3c7f80[_0x4c1e(0x26)],null)||_0x56031e[_0x4c1e(0x17)](_0x3034de,void 0x0)||(_0x3034de=_0x3034de[_0x4c1e(0x27)])===null||_0x56031e['NVbsS'](_0x3034de,void 0x0)?void 0x0:_0x3034de[_0x4c1e(0x28)])||0x0)+(((_0x4a01a2=_0x3c7f80['myList'])===null||_0x4a01a2===void 0x0?void 0x0:_0x4a01a2[_0x4c1e(0x28)])||0x0)+((_0x56031e[_0x4c1e(0x17)](_0x5b2a8e=_0x3c7f80['ratings'],null)||_0x5b2a8e===void 0x0?void 0x0:_0x5b2a8e['length'])||0x0);if(_0x56031e['GsimU'](_0x3c09ad,0x0))return console[_0x4c1e(0x1e)]('ℹ️\x20[NETFLIX_EXTRACTOR]\x20No\x20data\x20to\x20export\x20-\x20treating\x20as\x20success\x20(connected)'),!![];const _0x3da283=((_0x56031e['GsimU'](_0x1d8b28=_0x3c7f80['viewingHistory'],null)||_0x56031e[_0x4c1e(0x29)](_0x1d8b28,void 0x0)?void 0x0:_0x1d8b28[_0x4c1e(0x27)])||[])[_0x4c1e(0x2a)](_0x4d57a7=>{if(_0x3beacc['GupyS'](_0x3beacc['rJRxq'],_0x4c1e(0x2b)))_0x32d85b[_0x4c1e(0x1b)](_0x3beacc['ZYsbm'],_0x4a1bb6);else{const _0x5306fa=_0x4d57a7[_0x4c1e(0x1a)]&&_0x4d57a7[_0x4c1e(0x2c)];if(!_0x5306fa){if(_0x3beacc[_0x4c1e(0x2d)](_0x3beacc[_0x4c1e(0x2e)],_0x3beacc['kIkOO'])){const _0xed6e0b=_0x52911c['videoId']&&_0x55774a[_0x4c1e(0x2f)];return!_0xed6e0b&&_0x4c5834[_0x4c1e(0x1b)](_0x3beacc['ZYsbm'],_0x482b35),_0xed6e0b;}else console[_0x4c1e(0x1b)](_0x3beacc[_0x4c1e(0x30)],_0x4d57a7);}return _0x5306fa;}}),_0x51d252=(_0x3c7f80['myList']||[])['filter'](_0xa33cd9=>{const _0x3917dd=_0xa33cd9[_0x4c1e(0x1a)]&&_0xa33cd9[_0x4c1e(0x2c)];return!_0x3917dd&&console[_0x4c1e(0x1b)](_0x3beacc[_0x4c1e(0x1c)],_0xa33cd9),_0x3917dd;}),_0x23e2c4=(_0x3c7f80[_0x4c1e(0x31)]||[])[_0x4c1e(0x2a)](_0x191aff=>{const _0x176c27={'Eteef':_0x3beacc[_0x4c1e(0x32)],'CzwTW':_0x3beacc[_0x4c1e(0x33)]},_0x4938ed=_0x191aff[_0x4c1e(0x1a)]&&_0x191aff['rating'];if(!_0x4938ed){if(_0x3beacc[_0x4c1e(0x34)](_0x4c1e(0x6),_0x3beacc[_0x4c1e(0x35)]))console[_0x4c1e(0x1b)](_0x3beacc['ZYsbm'],_0x191aff);else return _0x44b204[_0x4c1e(0x36)](_0x176c27[_0x4c1e(0x37)],_0x231f4c['error']),_0x28a9e0[_0x4c1e(0x22)][_0x4c1e(0x23)](_0x176c27[_0x4c1e(0x38)],_0x540fb0[_0x4c1e(0x36)]||_0x4c1e(0x39),[{'text':'OK','style':'default'}]),![];}return _0x4938ed;}),_0x3877c4=_0x3c09ad,_0x414a2d=_0x56031e[_0x4c1e(0x3a)](_0x3da283[_0x4c1e(0x28)],_0x51d252[_0x4c1e(0x28)])+_0x23e2c4[_0x4c1e(0x28)];if(_0x414a2d<_0x3877c4){if(_0x56031e[_0x4c1e(0x3b)]==='NpuaW')return _0x2cf064[_0x4c1e(0x1e)](_0x56031e[_0x4c1e(0x3c)]),_0xc345d0['log'](_0x56031e[_0x4c1e(0x3d)],_0xeb1cf2['data']),!![];else console[_0x4c1e(0x1b)]('⚠️\x20[NETFLIX_EXTRACTOR]\x20Filtered\x20out\x20'+_0x56031e[_0x4c1e(0x3e)](_0x3877c4,_0x414a2d)+_0x4c1e(0x3f));}try{if(_0x56031e[_0x4c1e(0x40)](_0x56031e[_0x4c1e(0x41)],_0x56031e['HoBaP'])){const _0x41e220=_0x158145[_0x4c1e(0x1a)]&&_0xe81cc8[_0x4c1e(0x2c)];return!_0x41e220&&_0x5e009a[_0x4c1e(0x1b)](_0x3beacc['SJqOp'],_0xa294de),_0x41e220;}else{console['log'](_0x56031e['NttNB']);const _0x1da6b9=await(0x0,_netflixDataService[_0x4c1e(0x42)])(_0x2072c6,{'viewingHistory':{'items':_0x3da283,'totalCount':_0x3da283[_0x4c1e(0x28)]},'myList':_0x51d252,'ratings':_0x23e2c4,'profile':_0x3c7f80[_0x4c1e(0x43)],'tokenExpiry':_0x3c7f80[_0x4c1e(0x44)],'profileId':_0x3c7f80[_0x4c1e(0x45)]});return _0x1da6b9['success']?(console[_0x4c1e(0x1e)](_0x56031e[_0x4c1e(0x3c)]),console[_0x4c1e(0x1e)](_0x56031e[_0x4c1e(0x3d)],_0x1da6b9['data']),!![]):(console[_0x4c1e(0x36)](_0x56031e[_0x4c1e(0x46)],_0x1da6b9[_0x4c1e(0x36)]),_reactNative[_0x4c1e(0x22)][_0x4c1e(0x23)](_0x56031e[_0x4c1e(0x47)],_0x1da6b9['error']||_0x4c1e(0x39),[{'text':'OK','style':_0x56031e[_0x4c1e(0x25)]}]),![]);}}catch(_0x2b6b8e){return _0x56031e['qDzQk'](_0x56031e[_0x4c1e(0x48)],_0x56031e[_0x4c1e(0x48)])?(_0x25f1b9[_0x4c1e(0x1e)](_0x56031e['OeQcQ']),!![]):(console[_0x4c1e(0x36)]('❌\x20[NETFLIX_EXTRACTOR]\x20Unexpected\x20error\x20during\x20export:',_0x2b6b8e),_reactNative[_0x4c1e(0x22)][_0x4c1e(0x23)](_0x4c1e(0x49),_0x56031e[_0x4c1e(0x4a)],[{'text':'OK','style':_0x56031e['dAOGI']}]),![]);}}};return{'initiateDataExport':_0x4341d5};};function _0x4c1e(_0x4f898b,_0x4c1e91){_0x4f898b=_0x4f898b-0x0;const _0x4c6d70=_0x4f89();let _0x21990f=_0x4c6d70[_0x4f898b];return _0x21990f;}exports[_0x4c1e(0x1)]=useNetflixDataExtractor;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useNetflixDataExtractor = void 0;
7
+ var _netflixDataService = require("./netflixDataService");
8
+ var _reactNative = require("react-native");
9
+ /**
10
+ * Netflix Data Extractor
11
+ *
12
+ * Orchestrates the Netflix data export flow:
13
+ * 1. Receives extracted viewing data from WebView
14
+ * 2. Validates and formats data
15
+ * 3. Sends to backend via netflixDataService
16
+ *
17
+ * This acts as the bridge between OAuthWebView and the backend API.
18
+ *
19
+ * @reference Sephora implementation: src/services/sephoraDataExtractor.ts
20
+ */
21
+
22
+ /**
23
+ * Combined Netflix export data from WebView - matches netflix.ts script output
24
+ */
25
+
26
+ /**
27
+ * Hook for Netflix data extraction operations
28
+ */
29
+ const useNetflixDataExtractor = () => {
30
+ /**
31
+ * Initiate data export to backend
32
+ *
33
+ * @param username - User identifier
34
+ * @param data - Extracted Netflix data (viewingHistory, myList, ratings, profile)
35
+ * @returns true if successful, false otherwise
36
+ */
37
+ const initiateDataExport = async (username, data) => {
38
+ var _data$viewingHistory, _data$myList, _data$ratings, _data$viewingHistory2;
39
+ console.log('🚀 [NETFLIX_EXTRACTOR] Initiating data export');
40
+ console.log('👤 [NETFLIX_EXTRACTOR] Username:', username);
41
+ console.log('📊 [NETFLIX_EXTRACTOR] Summary:', data.summary);
42
+ if (!username) {
43
+ console.error('❌ [NETFLIX_EXTRACTOR] Username is required');
44
+ _reactNative.Alert.alert('Error', 'Username is required to export Netflix data.', [{
45
+ text: 'OK',
46
+ style: 'default'
47
+ }]);
48
+ return false;
49
+ }
50
+ const totalItems = (((_data$viewingHistory = data.viewingHistory) === null || _data$viewingHistory === void 0 || (_data$viewingHistory = _data$viewingHistory.items) === null || _data$viewingHistory === void 0 ? void 0 : _data$viewingHistory.length) || 0) + (((_data$myList = data.myList) === null || _data$myList === void 0 ? void 0 : _data$myList.length) || 0) + (((_data$ratings = data.ratings) === null || _data$ratings === void 0 ? void 0 : _data$ratings.length) || 0);
51
+ if (totalItems === 0) {
52
+ console.log('ℹ️ [NETFLIX_EXTRACTOR] No data to export - treating as success (connected)');
53
+ return true;
54
+ }
55
+ const validViewingHistory = (((_data$viewingHistory2 = data.viewingHistory) === null || _data$viewingHistory2 === void 0 ? void 0 : _data$viewingHistory2.items) || []).filter(item => {
56
+ const isValid = item.videoId && item.title;
57
+ if (!isValid) {
58
+ console.warn('⚠️ [NETFLIX_EXTRACTOR] Invalid viewing history item:', item);
59
+ }
60
+ return isValid;
61
+ });
62
+ const validMyList = (data.myList || []).filter(item => {
63
+ const isValid = item.videoId && item.title;
64
+ if (!isValid) {
65
+ console.warn('⚠️ [NETFLIX_EXTRACTOR] Invalid My List item:', item);
66
+ }
67
+ return isValid;
68
+ });
69
+ const validRatings = (data.ratings || []).filter(rating => {
70
+ const isValid = rating.videoId && rating.rating;
71
+ if (!isValid) {
72
+ console.warn('⚠️ [NETFLIX_EXTRACTOR] Invalid rating:', rating);
73
+ }
74
+ return isValid;
75
+ });
76
+ const originalCount = totalItems;
77
+ const validCount = validViewingHistory.length + validMyList.length + validRatings.length;
78
+ if (validCount < originalCount) {
79
+ console.warn(`⚠️ [NETFLIX_EXTRACTOR] Filtered out ${originalCount - validCount} invalid items`);
80
+ }
81
+ try {
82
+ console.log('📡 [NETFLIX_EXTRACTOR] Sending to backend...');
83
+ const result = await (0, _netflixDataService.storeNetflixData)(username, {
84
+ viewingHistory: {
85
+ items: validViewingHistory,
86
+ totalCount: validViewingHistory.length
87
+ },
88
+ myList: validMyList,
89
+ ratings: validRatings,
90
+ profile: data.profile,
91
+ tokenExpiry: data.tokenExpiry,
92
+ profileId: data.profileId
93
+ });
94
+ if (result.success) {
95
+ console.log('✅ [NETFLIX_EXTRACTOR] Export completed successfully');
96
+ console.log('📊 [NETFLIX_EXTRACTOR] Backend response:', result.data);
97
+ return true;
98
+ } else {
99
+ console.error('❌ [NETFLIX_EXTRACTOR] Backend storage failed:', result.error);
100
+ _reactNative.Alert.alert('Export Failed', result.error || 'An unknown error occurred during data storage.', [{
101
+ text: 'OK',
102
+ style: 'default'
103
+ }]);
104
+ return false;
105
+ }
106
+ } catch (error) {
107
+ console.error('❌ [NETFLIX_EXTRACTOR] Unexpected error during export:', error);
108
+ _reactNative.Alert.alert('Export Error', 'Failed to connect to the data storage service. Please check your network connection.', [{
109
+ text: 'OK',
110
+ style: 'default'
111
+ }]);
112
+ return false;
113
+ }
114
+ };
115
+ return {
116
+ initiateDataExport
117
+ };
118
+ };
119
+ exports.useNetflixDataExtractor = useNetflixDataExtractor;
120
+ //# sourceMappingURL=netflixDataExtractor.js.map
@@ -1,9 +1,198 @@
1
- 'use strict';
2
- // Onairos SDK - Asset Registry (auto-generated)
3
- var __ONAIROS_REQ_REGISTRY__ = [
4
- require("../config/api"),
5
- require("@react-native-async-storage/async-storage"),
6
- require("react-native")
7
- ];
8
- function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
9
- function _0x1828(){const _0x2a859a=['__esModule','storeNetflixData','Unknown\x20error','❌\x20[NETFLIX_SERVICE]\x20No\x20auth\x20token\x20found','Authentication\x20token\x20not\x20found.\x20Please\x20log\x20in\x20again.','📊\x20[NETFLIX_SERVICE]\x20Has\x20profile:','❌\x20[NETFLIX_SERVICE]\x20Invalid\x20input:\x20userId\x20missing','ffuBg','iOWJc','WqNcl','ios','17.0','iPhone','Android','mobile-netflix','streaming','✅\x20[NETFLIX_SERVICE]\x20Successfully\x20stored\x20Netflix\x20data','mTVbH','log','🚀\x20[NETFLIX_SERVICE]\x20Storing\x20Netflix\x20data\x20for:','qaImP','OgOnD','viewingHistory','gefLm','items','length','myList','📊\x20[NETFLIX_SERVICE]\x20Ratings:','ratings','EbFIf','JhFoN','profile','HaaGL','cBXBL','error','Invalid\x20input:\x20userId\x20missing.','message','ecEXF','data','iCdOt','default','getItem','enoch_token','auth_token','jjGCI','aqsdv','tvAjM','HTZSA','warn','⚠️\x20[NETFLIX_SERVICE]\x20Backend\x20returned\x20status:\x20','⚠️\x20[NETFLIX_SERVICE]\x20Error:\x20','VLuSv','HTTP\x20','status','🔑\x20[NETFLIX_SERVICE]\x20Auth\x20token\x20found','Platform','webview-api','1.0.0','Gkmae','CAaiB','vjObL','GexJl','toISOString','tokenExpiry','UKnQF','nHpAT','RrEhU','map','videoId','title','seriesTitle','seasonNumber','episodeNumber','watchedAt','watchDuration','totalDuration','percentWatched','genres','GLgTF','JIRSy','fVCmj','type','addedAt','maturityRating','year','rating','ratedAt','profileId','profileName','maturityLevel','language','subtitlePreferences','dhRhW','cauFP','thumbs_down','mWeiR','vMSHN','📍\x20[NETFLIX_SERVICE]\x20URL:','/platform-data/store','API_CONFIG','BASE_URL','Bearer\x20','OnairosSDK/1.0.0\x20(','json','pefWR','📝\x20[NETFLIX_SERVICE]\x20Backend\x20response:\x20','pAUza','eIOtY','❌\x20[NETFLIX_SERVICE]\x20Network\x20error:'];_0x1828=function(){return _0x2a859a;};return _0x1828();}Object['defineProperty'](exports,_0x2123(0x0),{'value':!![]}),exports[_0x2123(0x1)]=void 0x0;var _api=__ONAIROS_REQ_FUNC__(0x0),_asyncStorage=_interopRequireDefault(__ONAIROS_REQ_FUNC__(0x1)),_reactNative=__ONAIROS_REQ_FUNC__(0x2);function _0x2123(_0x18288f,_0x21237b){_0x18288f=_0x18288f-0x0;const _0x5479b4=_0x1828();let _0x2c54c2=_0x5479b4[_0x18288f];return _0x2c54c2;}function _interopRequireDefault(_0x2defde){return _0x2defde&&_0x2defde[_0x2123(0x0)]?_0x2defde:{'default':_0x2defde};}const storeNetflixData=async(_0x5b77be,_0x2c964e)=>{const _0x5d049d={'ecEXF':'Netflix\x20data\x20stored\x20successfully','VLuSv':_0x2123(0x2),'tvAjM':_0x2123(0x3),'HTZSA':_0x2123(0x4),'qaImP':'📊\x20[NETFLIX_SERVICE]\x20Viewing\x20history\x20items:','OgOnD':function(_0x524f27,_0x20fc69){return _0x524f27===_0x20fc69;},'JIRSy':function(_0x37bacb,_0xe18f43){return _0x37bacb===_0xe18f43;},'gefLm':function(_0x247f40,_0x1c31bd){return _0x247f40===_0x1c31bd;},'EbFIf':function(_0x2a8a40,_0x517a15){return _0x2a8a40===_0x517a15;},'JhFoN':_0x2123(0x5),'HaaGL':'cBXBL','guuqa':_0x2123(0x6),'jjGCI':function(_0x1f0afa,_0x509b56){return _0x1f0afa!==_0x509b56;},'iCdOt':'uPYfe','dNwhX':_0x2123(0x7),'zWKpC':_0x2123(0x8),'aqsdv':_0x2123(0x9),'Gkmae':_0x2123(0xa),'CAaiB':_0x2123(0xb),'vjObL':_0x2123(0xc),'GexJl':_0x2123(0xd),'UKnQF':_0x2123(0xe),'nHpAT':_0x2123(0xf),'RrEhU':function(_0x25ae00,_0x1aabd8){return _0x25ae00===_0x1aabd8;},'GLgTF':function(_0x5f2e61,_0xa6fcc5){return _0x5f2e61===_0xa6fcc5;},'fVCmj':function(_0x49ed7b,_0x51e59a){return _0x49ed7b===_0x51e59a;},'dhRhW':function(_0x238062,_0x459997){return _0x238062===_0x459997;},'cjRoA':function(_0x10f188,_0x3373ab){return _0x10f188===_0x3373ab;},'cauFP':function(_0x48ea1e,_0x14e5b6){return _0x48ea1e===_0x14e5b6;},'eGKzQ':function(_0x319ff8,_0x34864b){return _0x319ff8===_0x34864b;},'mWeiR':function(_0x30ab11,_0x1ee37e){return _0x30ab11===_0x1ee37e;},'vMSHN':'unknown','ZQPhh':function(_0x20d1e9,_0x71f832,_0x287725){return _0x20d1e9(_0x71f832,_0x287725);},'pefWR':_0x2123(0x10),'pAUza':_0x2123(0x11),'eIOtY':'lxgmq'};var _0x3902fd,_0x43c714,_0x15bdb1;console[_0x2123(0x12)](_0x2123(0x13),_0x5b77be),console[_0x2123(0x12)](_0x5d049d[_0x2123(0x14)],(_0x5d049d[_0x2123(0x15)](_0x3902fd=_0x2c964e[_0x2123(0x16)],null)||_0x5d049d['JIRSy'](_0x3902fd,void 0x0)||_0x5d049d[_0x2123(0x17)](_0x3902fd=_0x3902fd[_0x2123(0x18)],null)||_0x5d049d['EbFIf'](_0x3902fd,void 0x0)?void 0x0:_0x3902fd[_0x2123(0x19)])||0x0),console['log']('📊\x20[NETFLIX_SERVICE]\x20My\x20List\x20items:',((_0x43c714=_0x2c964e[_0x2123(0x1a)])===null||_0x5d049d[_0x2123(0x17)](_0x43c714,void 0x0)?void 0x0:_0x43c714[_0x2123(0x19)])||0x0),console[_0x2123(0x12)](_0x2123(0x1b),((_0x15bdb1=_0x2c964e[_0x2123(0x1c)])===null||_0x5d049d[_0x2123(0x1d)](_0x15bdb1,void 0x0)?void 0x0:_0x15bdb1[_0x2123(0x19)])||0x0),console['log'](_0x5d049d[_0x2123(0x1e)],!!_0x2c964e[_0x2123(0x1f)]);if(!_0x5b77be)return _0x5d049d[_0x2123(0x15)](_0x5d049d[_0x2123(0x20)],_0x2123(0x21))?(console[_0x2123(0x22)](_0x5d049d['guuqa']),{'success':![],'error':_0x2123(0x23)}):(_0x49405a[_0x2123(0x12)]('✅\x20[NETFLIX_SERVICE]\x20Successfully\x20stored\x20Netflix\x20data'),_0x15e809[_0x2123(0x24)]&&_0x5bd1f6[_0x2123(0x12)]('📝\x20[NETFLIX_SERVICE]\x20Backend\x20response:\x20'+_0x2ae21a[_0x2123(0x24)]),{'success':!![],'message':_0x267105['message']||_0x5d049d[_0x2123(0x25)],'data':_0x276bef[_0x2123(0x26)]});try{if(_0x5d049d['jjGCI'](_0x5d049d[_0x2123(0x27)],_0x5d049d['dNwhX'])){var _0x3f892c,_0x4724f0,_0xc15edb,_0xae13ce,_0x868ee1,_0x2367a3,_0x2bbf59,_0x38e191;const _0x2057b5=await _asyncStorage[_0x2123(0x28)][_0x2123(0x29)]('onairos_jwt_token')||await _asyncStorage['default'][_0x2123(0x29)](_0x2123(0x2a))||await _asyncStorage['default'][_0x2123(0x29)](_0x2123(0x2b));if(!_0x2057b5)return _0x5d049d[_0x2123(0x2c)](_0x5d049d['zWKpC'],_0x5d049d[_0x2123(0x2d)])?(console[_0x2123(0x22)](_0x5d049d[_0x2123(0x2e)]),{'success':![],'error':_0x5d049d[_0x2123(0x2f)]}):(_0x1c876f[_0x2123(0x30)](_0x2123(0x31)+_0xe07311['status']),_0x1fa707[_0x2123(0x30)](_0x2123(0x32)+(_0x267b7c[_0x2123(0x22)]||_0x5d049d[_0x2123(0x33)])),{'success':![],'error':_0xabe095[_0x2123(0x22)]||_0x2123(0x34)+_0x5bdf1f[_0x2123(0x35)]});console[_0x2123(0x12)](_0x2123(0x36));const _0x382b46={'platform':_reactNative[_0x2123(0x37)]['OS'],'source':_0x2123(0x38),'appVersion':_0x2123(0x39),'osVersion':_reactNative[_0x2123(0x37)]['OS']===_0x5d049d[_0x2123(0x3a)]?_0x5d049d[_0x2123(0x3b)]:_reactNative[_0x2123(0x37)]['OS'],'deviceModel':_reactNative[_0x2123(0x37)]['OS']===_0x5d049d['Gkmae']?_0x5d049d[_0x2123(0x3c)]:_0x5d049d[_0x2123(0x3d)],'isOfflineSync':![],'extractedAt':new Date()[_0x2123(0x3e)](),'tokenExpiry':_0x2c964e[_0x2123(0x3f)]},_0x464ab8={'platform':_0x5d049d[_0x2123(0x40)],'dataType':_0x5d049d[_0x2123(0x41)],'data':{'viewingHistory':{'items':((_0x5d049d[_0x2123(0x42)](_0x3f892c=_0x2c964e[_0x2123(0x16)],null)||_0x3f892c===void 0x0?void 0x0:_0x3f892c[_0x2123(0x18)])||[])[_0x2123(0x43)](_0x10210=>({'videoId':_0x10210[_0x2123(0x44)],'title':_0x10210[_0x2123(0x45)],'type':_0x10210['type'],'seriesTitle':_0x10210[_0x2123(0x46)],'seasonNumber':_0x10210[_0x2123(0x47)],'episodeNumber':_0x10210[_0x2123(0x48)],'watchedAt':_0x10210[_0x2123(0x49)],'watchDuration':_0x10210[_0x2123(0x4a)],'totalDuration':_0x10210[_0x2123(0x4b)],'percentWatched':_0x10210[_0x2123(0x4c)],'imageUrl':_0x10210['imageUrl'],'genres':_0x10210[_0x2123(0x4d)]})),'totalCount':((_0x4724f0=_0x2c964e['viewingHistory'])===null||_0x4724f0===void 0x0?void 0x0:_0x4724f0['totalCount'])||(_0x5d049d['EbFIf'](_0xc15edb=_0x2c964e[_0x2123(0x16)],null)||_0x5d049d[_0x2123(0x4e)](_0xc15edb,void 0x0)||_0x5d049d[_0x2123(0x4f)](_0xc15edb=_0xc15edb[_0x2123(0x18)],null)||_0x5d049d[_0x2123(0x50)](_0xc15edb,void 0x0)?void 0x0:_0xc15edb[_0x2123(0x19)])||0x0},'myList':(_0x2c964e[_0x2123(0x1a)]||[])[_0x2123(0x43)](_0xe65f59=>({'videoId':_0xe65f59['videoId'],'title':_0xe65f59[_0x2123(0x45)],'type':_0xe65f59[_0x2123(0x51)],'addedAt':_0xe65f59[_0x2123(0x52)],'imageUrl':_0xe65f59['imageUrl'],'genres':_0xe65f59[_0x2123(0x4d)],'maturityRating':_0xe65f59[_0x2123(0x53)],'year':_0xe65f59[_0x2123(0x54)]})),'ratings':(_0x2c964e['ratings']||[])[_0x2123(0x43)](_0x4e90e0=>({'videoId':_0x4e90e0[_0x2123(0x44)],'title':_0x4e90e0[_0x2123(0x45)],'rating':_0x4e90e0[_0x2123(0x55)],'ratedAt':_0x4e90e0[_0x2123(0x56)]})),'profile':_0x2c964e[_0x2123(0x1f)]?{'profileId':_0x2c964e['profile'][_0x2123(0x57)],'profileName':_0x2c964e[_0x2123(0x1f)][_0x2123(0x58)],'maturityLevel':_0x2c964e[_0x2123(0x1f)][_0x2123(0x59)],'language':_0x2c964e['profile'][_0x2123(0x5a)],'subtitlePreferences':_0x2c964e[_0x2123(0x1f)][_0x2123(0x5b)],'autoplayPreferences':_0x2c964e[_0x2123(0x1f)]['autoplayPreferences']}:null,'netflixProfileId':_0x2c964e[_0x2123(0x57)]||(_0x5d049d[_0x2123(0x5c)](_0xae13ce=_0x2c964e['profile'],null)||_0x5d049d['cjRoA'](_0xae13ce,void 0x0)?void 0x0:_0xae13ce[_0x2123(0x57)])},'summary':{'viewingHistoryCount':((_0x868ee1=_0x2c964e[_0x2123(0x16)])===null||_0x5d049d[_0x2123(0x4f)](_0x868ee1,void 0x0)||(_0x868ee1=_0x868ee1['items'])===null||_0x868ee1===void 0x0?void 0x0:_0x868ee1['length'])||0x0,'myListCount':(_0x5d049d[_0x2123(0x4e)](_0x2367a3=_0x2c964e[_0x2123(0x1a)],null)||_0x5d049d[_0x2123(0x5d)](_0x2367a3,void 0x0)?void 0x0:_0x2367a3[_0x2123(0x19)])||0x0,'ratingsCount':(_0x5d049d['eGKzQ'](_0x2bbf59=_0x2c964e['ratings'],null)||_0x5d049d[_0x2123(0x42)](_0x2bbf59,void 0x0)?void 0x0:_0x2bbf59['length'])||0x0,'thumbsUpCount':(_0x2c964e[_0x2123(0x1c)]||[])['filter'](_0x380ad4=>_0x380ad4['rating']==='thumbs_up')['length'],'thumbsDownCount':(_0x2c964e[_0x2123(0x1c)]||[])['filter'](_0x5d077b=>_0x5d077b[_0x2123(0x55)]===_0x2123(0x5e))['length'],'profileName':(_0x5d049d[_0x2123(0x15)](_0x38e191=_0x2c964e[_0x2123(0x1f)],null)||_0x5d049d[_0x2123(0x5f)](_0x38e191,void 0x0)?void 0x0:_0x38e191['profileName'])||_0x5d049d[_0x2123(0x60)]},'mobileMetadata':_0x382b46};console[_0x2123(0x12)]('📡\x20[NETFLIX_SERVICE]\x20Sending\x20to\x20backend...'),console[_0x2123(0x12)](_0x2123(0x61),_api['API_CONFIG']['BASE_URL']+_0x2123(0x62));const _0x5331f6=await _0x5d049d['ZQPhh'](fetch,_api[_0x2123(0x63)][_0x2123(0x64)]+_0x2123(0x62),{'method':'POST','headers':{'Content-Type':'application/json','Authorization':_0x2123(0x65)+_0x2057b5,'User-Agent':_0x2123(0x66)+_reactNative['Platform']['OS']+')'},'body':JSON['stringify'](_0x464ab8)}),_0x2780b0=await _0x5331f6[_0x2123(0x67)]();return _0x5331f6['ok']?(console[_0x2123(0x12)](_0x5d049d[_0x2123(0x68)]),_0x2780b0[_0x2123(0x24)]&&console[_0x2123(0x12)](_0x2123(0x69)+_0x2780b0['message']),{'success':!![],'message':_0x2780b0[_0x2123(0x24)]||_0x5d049d[_0x2123(0x25)],'data':_0x2780b0['data']}):_0x5d049d[_0x2123(0x6a)]!==_0x5d049d[_0x2123(0x6a)]?(_0x3f6221[_0x2123(0x22)](_0x5d049d[_0x2123(0x2e)]),{'success':![],'error':_0x5d049d[_0x2123(0x2f)]}):(console[_0x2123(0x30)](_0x2123(0x31)+_0x5331f6[_0x2123(0x35)]),console[_0x2123(0x30)]('⚠️\x20[NETFLIX_SERVICE]\x20Error:\x20'+(_0x2780b0[_0x2123(0x22)]||_0x2123(0x2))),{'success':![],'error':_0x2780b0[_0x2123(0x22)]||_0x2123(0x34)+_0x5331f6[_0x2123(0x35)]});}else return _0x251af3&&_0x5bae5c[_0x2123(0x0)]?_0x33cc9b:{'default':_0x24f6f5};}catch(_0x455cab){if(_0x5d049d[_0x2123(0x5c)](_0x5d049d['eIOtY'],_0x5d049d[_0x2123(0x6b)]))return console[_0x2123(0x22)](_0x2123(0x6c),_0x455cab),{'success':![],'error':_0x455cab[_0x2123(0x24)]||'Network\x20error.\x20Please\x20check\x20your\x20connection.'};else _0x21e16a[_0x2123(0x12)](_0x2123(0x69)+_0x2d5a5e['message']);}};exports[_0x2123(0x1)]=storeNetflixData;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.storeNetflixData = void 0;
7
+ var _api = require("../config/api");
8
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
9
+ var _reactNative = require("react-native");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /**
12
+ * Netflix Data Service
13
+ *
14
+ * API layer for storing Netflix viewing data on backend.
15
+ * Sends extracted viewing history, watch later, and profile to /platform-data/store endpoint.
16
+ *
17
+ * MATCHES Sephora/ChatGPT implementation pattern
18
+ * - Uses format: { platform, data, metadata }
19
+ * - Platform: "mobile-netflix"
20
+ *
21
+ * Data Sources (from netflix.com - API details TBD):
22
+ * - Viewing History: User's watch history
23
+ * - My List: User's saved shows/movies
24
+ * - Profile: User preferences and settings
25
+ * - Ratings: User's thumbs up/down ratings
26
+ */
27
+
28
+ /**
29
+ * Structure of a viewed item - Netflix content
30
+ */
31
+
32
+ /**
33
+ * Structure of viewing history
34
+ */
35
+
36
+ /**
37
+ * Structure of a My List item
38
+ */
39
+
40
+ /**
41
+ * Structure of a rating
42
+ */
43
+
44
+ /**
45
+ * Structure of user profile
46
+ */
47
+
48
+ /**
49
+ * Token expiry information
50
+ */
51
+
52
+ /**
53
+ * Combined Netflix data to store - matches WebView export format
54
+ */
55
+
56
+ /**
57
+ * Response from backend endpoint
58
+ */
59
+
60
+ /**
61
+ * Store Netflix data on backend
62
+ *
63
+ * @param userId - Username or identifier
64
+ * @param data - Netflix viewing data (history, myList, ratings, profile)
65
+ * @returns Response indicating success/failure with metadata
66
+ */
67
+ const storeNetflixData = async (userId, data) => {
68
+ var _data$viewingHistory, _data$myList, _data$ratings;
69
+ console.log('🚀 [NETFLIX_SERVICE] Storing Netflix data for:', userId);
70
+ console.log('📊 [NETFLIX_SERVICE] Viewing history items:', ((_data$viewingHistory = data.viewingHistory) === null || _data$viewingHistory === void 0 || (_data$viewingHistory = _data$viewingHistory.items) === null || _data$viewingHistory === void 0 ? void 0 : _data$viewingHistory.length) || 0);
71
+ console.log('📊 [NETFLIX_SERVICE] My List items:', ((_data$myList = data.myList) === null || _data$myList === void 0 ? void 0 : _data$myList.length) || 0);
72
+ console.log('📊 [NETFLIX_SERVICE] Ratings:', ((_data$ratings = data.ratings) === null || _data$ratings === void 0 ? void 0 : _data$ratings.length) || 0);
73
+ console.log('📊 [NETFLIX_SERVICE] Has profile:', !!data.profile);
74
+ if (!userId) {
75
+ console.error('❌ [NETFLIX_SERVICE] Invalid input: userId missing');
76
+ return {
77
+ success: false,
78
+ error: 'Invalid input: userId missing.'
79
+ };
80
+ }
81
+ try {
82
+ var _data$viewingHistory2, _data$viewingHistory3, _data$viewingHistory4, _data$profile, _data$viewingHistory5, _data$myList2, _data$ratings2, _data$profile2;
83
+ const authToken = (await _asyncStorage.default.getItem('onairos_jwt_token')) || (await _asyncStorage.default.getItem('enoch_token')) || (await _asyncStorage.default.getItem('auth_token'));
84
+ if (!authToken) {
85
+ console.error('❌ [NETFLIX_SERVICE] No auth token found');
86
+ return {
87
+ success: false,
88
+ error: 'Authentication token not found. Please log in again.'
89
+ };
90
+ }
91
+ console.log('🔑 [NETFLIX_SERVICE] Auth token found');
92
+ const mobileMetadata = {
93
+ platform: _reactNative.Platform.OS,
94
+ source: 'webview-api',
95
+ appVersion: '1.0.0',
96
+ osVersion: _reactNative.Platform.OS === 'ios' ? '17.0' : _reactNative.Platform.OS,
97
+ deviceModel: _reactNative.Platform.OS === 'ios' ? 'iPhone' : 'Android',
98
+ isOfflineSync: false,
99
+ extractedAt: new Date().toISOString(),
100
+ tokenExpiry: data.tokenExpiry
101
+ };
102
+ const requestBody = {
103
+ platform: 'mobile-netflix',
104
+ dataType: 'streaming',
105
+ data: {
106
+ viewingHistory: {
107
+ items: (((_data$viewingHistory2 = data.viewingHistory) === null || _data$viewingHistory2 === void 0 ? void 0 : _data$viewingHistory2.items) || []).map(item => ({
108
+ videoId: item.videoId,
109
+ title: item.title,
110
+ type: item.type,
111
+ seriesTitle: item.seriesTitle,
112
+ seasonNumber: item.seasonNumber,
113
+ episodeNumber: item.episodeNumber,
114
+ watchedAt: item.watchedAt,
115
+ watchDuration: item.watchDuration,
116
+ totalDuration: item.totalDuration,
117
+ percentWatched: item.percentWatched,
118
+ imageUrl: item.imageUrl,
119
+ genres: item.genres
120
+ })),
121
+ totalCount: ((_data$viewingHistory3 = data.viewingHistory) === null || _data$viewingHistory3 === void 0 ? void 0 : _data$viewingHistory3.totalCount) || ((_data$viewingHistory4 = data.viewingHistory) === null || _data$viewingHistory4 === void 0 || (_data$viewingHistory4 = _data$viewingHistory4.items) === null || _data$viewingHistory4 === void 0 ? void 0 : _data$viewingHistory4.length) || 0
122
+ },
123
+ myList: (data.myList || []).map(item => ({
124
+ videoId: item.videoId,
125
+ title: item.title,
126
+ type: item.type,
127
+ addedAt: item.addedAt,
128
+ imageUrl: item.imageUrl,
129
+ genres: item.genres,
130
+ maturityRating: item.maturityRating,
131
+ year: item.year
132
+ })),
133
+ ratings: (data.ratings || []).map(rating => ({
134
+ videoId: rating.videoId,
135
+ title: rating.title,
136
+ rating: rating.rating,
137
+ ratedAt: rating.ratedAt
138
+ })),
139
+ profile: data.profile ? {
140
+ profileId: data.profile.profileId,
141
+ profileName: data.profile.profileName,
142
+ maturityLevel: data.profile.maturityLevel,
143
+ language: data.profile.language,
144
+ subtitlePreferences: data.profile.subtitlePreferences,
145
+ autoplayPreferences: data.profile.autoplayPreferences
146
+ } : null,
147
+ netflixProfileId: data.profileId || ((_data$profile = data.profile) === null || _data$profile === void 0 ? void 0 : _data$profile.profileId)
148
+ },
149
+ summary: {
150
+ viewingHistoryCount: ((_data$viewingHistory5 = data.viewingHistory) === null || _data$viewingHistory5 === void 0 || (_data$viewingHistory5 = _data$viewingHistory5.items) === null || _data$viewingHistory5 === void 0 ? void 0 : _data$viewingHistory5.length) || 0,
151
+ myListCount: ((_data$myList2 = data.myList) === null || _data$myList2 === void 0 ? void 0 : _data$myList2.length) || 0,
152
+ ratingsCount: ((_data$ratings2 = data.ratings) === null || _data$ratings2 === void 0 ? void 0 : _data$ratings2.length) || 0,
153
+ thumbsUpCount: (data.ratings || []).filter(r => r.rating === 'thumbs_up').length,
154
+ thumbsDownCount: (data.ratings || []).filter(r => r.rating === 'thumbs_down').length,
155
+ profileName: ((_data$profile2 = data.profile) === null || _data$profile2 === void 0 ? void 0 : _data$profile2.profileName) || 'unknown'
156
+ },
157
+ mobileMetadata: mobileMetadata
158
+ };
159
+ console.log('📡 [NETFLIX_SERVICE] Sending to backend...');
160
+ console.log('📍 [NETFLIX_SERVICE] URL:', `${_api.API_CONFIG.BASE_URL}/platform-data/store`);
161
+ const response = await fetch(`${_api.API_CONFIG.BASE_URL}/platform-data/store`, {
162
+ method: 'POST',
163
+ headers: {
164
+ 'Content-Type': 'application/json',
165
+ 'Authorization': `Bearer ${authToken}`,
166
+ 'User-Agent': `OnairosSDK/1.0.0 (${_reactNative.Platform.OS})`
167
+ },
168
+ body: JSON.stringify(requestBody)
169
+ });
170
+ const responseData = await response.json();
171
+ if (response.ok) {
172
+ console.log('✅ [NETFLIX_SERVICE] Successfully stored Netflix data');
173
+ if (responseData.message) {
174
+ console.log(`📝 [NETFLIX_SERVICE] Backend response: ${responseData.message}`);
175
+ }
176
+ return {
177
+ success: true,
178
+ message: responseData.message || 'Netflix data stored successfully',
179
+ data: responseData.data
180
+ };
181
+ } else {
182
+ console.warn(`⚠️ [NETFLIX_SERVICE] Backend returned status: ${response.status}`);
183
+ console.warn(`⚠️ [NETFLIX_SERVICE] Error: ${responseData.error || 'Unknown error'}`);
184
+ return {
185
+ success: false,
186
+ error: responseData.error || `HTTP ${response.status}`
187
+ };
188
+ }
189
+ } catch (error) {
190
+ console.error('❌ [NETFLIX_SERVICE] Network error:', error);
191
+ return {
192
+ success: false,
193
+ error: error.message || 'Network error. Please check your connection.'
194
+ };
195
+ }
196
+ };
197
+ exports.storeNetflixData = storeNetflixData;
198
+ //# sourceMappingURL=netflixDataService.js.map
@@ -1,8 +1,84 @@
1
- 'use strict';
2
- // Onairos SDK - Asset Registry (auto-generated)
3
- var __ONAIROS_REQ_REGISTRY__ = [
4
- require("./pinStorageUtils"),
5
- require('react-native-crypto-js')
6
- ];
7
- function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
8
- Object[_0x3e5f(0x0)](exports,_0x3e5f(0x1),{'value':!![]}),exports[_0x3e5f(0x2)]=exports[_0x3e5f(0x3)]=exports[_0x3e5f(0x4)]=exports[_0x3e5f(0x5)]=void 0x0;function _0x2193(){const _0x3cf238=['defineProperty','__esModule','hashPin','getEncryptedPinForAPI','encryptPin','decryptPin','onairos-pin-encryption-key-2024','AES','log','error','🔓\x20PIN\x20decrypted\x20successfully','❌\x20Error\x20decrypting\x20PIN:','decrypt','toString','enc','Utf8','IWuAS','uMPfb','⚠️\x20No\x20temporary\x20PIN\x20available\x20for\x20encryption','Qnnow','djJpc','WhJPN','KqQXN','dGkgB','✅\x20PIN\x20encrypted\x20for\x20API\x20transmission','hNFHA','❌\x20Error\x20hashing\x20PIN:','SHA256','dVPiq','🔒\x20PIN\x20hashed\x20successfully','eGdhv','rtlqK','nOZTK'];_0x2193=function(){return _0x3cf238;};return _0x2193();}var _pinStorageUtils=__ONAIROS_REQ_FUNC__(0x0);const CryptoJS=__ONAIROS_REQ_FUNC__(0x1),ENCRYPTION_KEY=_0x3e5f(0x6),encryptPin=_0xfa60d0=>{const _0x408bc8={'VwBGV':'🔐\x20PIN\x20encrypted\x20successfully'};try{const _0x1ce6fa=CryptoJS[_0x3e5f(0x7)]['encrypt'](_0xfa60d0,ENCRYPTION_KEY)['toString']();return console[_0x3e5f(0x8)](_0x408bc8['VwBGV']),_0x1ce6fa;}catch(_0x9b06a6){console[_0x3e5f(0x9)]('❌\x20Error\x20encrypting\x20PIN:',_0x9b06a6);throw _0x9b06a6;}};exports[_0x3e5f(0x4)]=encryptPin;function _0x3e5f(_0x2193ac,_0x3e5f11){_0x2193ac=_0x2193ac-0x0;const _0x564d96=_0x2193();let _0x589032=_0x564d96[_0x2193ac];return _0x589032;}const decryptPin=_0x2094a5=>{const _0x37ffa1={'IWuAS':_0x3e5f(0xa),'uMPfb':_0x3e5f(0xb)};try{const _0x5e7cfa=CryptoJS['AES'][_0x3e5f(0xc)](_0x2094a5,ENCRYPTION_KEY),_0x42ec59=_0x5e7cfa[_0x3e5f(0xd)](CryptoJS[_0x3e5f(0xe)][_0x3e5f(0xf)]);return console[_0x3e5f(0x8)](_0x37ffa1[_0x3e5f(0x10)]),_0x42ec59;}catch(_0x4d9e77){console[_0x3e5f(0x9)](_0x37ffa1[_0x3e5f(0x11)],_0x4d9e77);throw _0x4d9e77;}};exports['decryptPin']=decryptPin;const getEncryptedPinForAPI=async()=>{const _0x2d956d={'dGkgB':_0x3e5f(0x12),'djJpc':function(_0x3a6c42,_0x313b05){return _0x3a6c42===_0x313b05;},'WhJPN':_0x3e5f(0x13),'KqQXN':'HKQxn'};try{if(_0x2d956d[_0x3e5f(0x14)](_0x2d956d[_0x3e5f(0x15)],_0x2d956d[_0x3e5f(0x16)]))return _0x16f219[_0x3e5f(0x8)](_0x2d956d[_0x3e5f(0x17)]),null;else{const _0x400607=(0x0,_pinStorageUtils['getTemporaryPin'])();if(!_0x400607)return console[_0x3e5f(0x8)](_0x2d956d[_0x3e5f(0x17)]),null;const _0x5339a7=encryptPin(_0x400607);return console[_0x3e5f(0x8)](_0x3e5f(0x18)),_0x5339a7;}}catch(_0x46c0ed){return console['error']('❌\x20Error\x20getting\x20encrypted\x20PIN\x20for\x20API:',_0x46c0ed),null;}};exports['getEncryptedPinForAPI']=getEncryptedPinForAPI;const hashPin=_0x5b174b=>{const _0x438999={'dVPiq':function(_0x1be8ce,_0x508207){return _0x1be8ce+_0x508207;},'eGdhv':function(_0x368846,_0x1866b7){return _0x368846!==_0x1866b7;},'rtlqK':_0x3e5f(0x19),'nOZTK':_0x3e5f(0x1a)};try{const _0x33d7a4=CryptoJS[_0x3e5f(0x1b)](_0x438999[_0x3e5f(0x1c)](_0x5b174b,ENCRYPTION_KEY))[_0x3e5f(0xd)]();return console[_0x3e5f(0x8)](_0x3e5f(0x1d)),_0x33d7a4;}catch(_0x438db8){if(_0x438999[_0x3e5f(0x1e)](_0x438999[_0x3e5f(0x1f)],_0x438999[_0x3e5f(0x1f)])){_0x22b115[_0x3e5f(0x9)]('❌\x20Error\x20decrypting\x20PIN:',_0x888073);throw _0x26e5c1;}else{console[_0x3e5f(0x9)](_0x438999[_0x3e5f(0x20)],_0x438db8);throw _0x438db8;}}};exports[_0x3e5f(0x2)]=hashPin;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hashPin = exports.getEncryptedPinForAPI = exports.encryptPin = exports.decryptPin = void 0;
7
+ var _pinStorageUtils = require("./pinStorageUtils");
8
+ const CryptoJS = require('react-native-crypto-js');
9
+ /**
10
+ * Service for encrypting PIN data before sending to APIs
11
+ */
12
+
13
+ // Encryption key - in production, this should come from a secure source
14
+ const ENCRYPTION_KEY = 'onairos-pin-encryption-key-2024';
15
+
16
+ /**
17
+ * Encrypt PIN using AES encryption
18
+ */
19
+ const encryptPin = pin => {
20
+ try {
21
+ const encrypted = CryptoJS.AES.encrypt(pin, ENCRYPTION_KEY).toString();
22
+ console.log('🔐 PIN encrypted successfully');
23
+ return encrypted;
24
+ } catch (error) {
25
+ console.error('❌ Error encrypting PIN:', error);
26
+ throw error;
27
+ }
28
+ };
29
+
30
+ /**
31
+ * Decrypt PIN (for verification purposes)
32
+ */
33
+ exports.encryptPin = encryptPin;
34
+ const decryptPin = encryptedPin => {
35
+ try {
36
+ const decrypted = CryptoJS.AES.decrypt(encryptedPin, ENCRYPTION_KEY);
37
+ const pin = decrypted.toString(CryptoJS.enc.Utf8);
38
+ console.log('🔓 PIN decrypted successfully');
39
+ return pin;
40
+ } catch (error) {
41
+ console.error('❌ Error decrypting PIN:', error);
42
+ throw error;
43
+ }
44
+ };
45
+
46
+ /**
47
+ * Get encrypted PIN for API transmission
48
+ */
49
+ exports.decryptPin = decryptPin;
50
+ const getEncryptedPinForAPI = async () => {
51
+ try {
52
+ // Get the temporary PIN from memory
53
+ const pin = (0, _pinStorageUtils.getTemporaryPin)();
54
+ if (!pin) {
55
+ console.log('⚠️ No temporary PIN available for encryption');
56
+ return null;
57
+ }
58
+
59
+ // Encrypt the PIN
60
+ const encryptedPin = encryptPin(pin);
61
+ console.log('✅ PIN encrypted for API transmission');
62
+ return encryptedPin;
63
+ } catch (error) {
64
+ console.error('❌ Error getting encrypted PIN for API:', error);
65
+ return null;
66
+ }
67
+ };
68
+
69
+ /**
70
+ * Hash PIN for verification (one-way hash)
71
+ */
72
+ exports.getEncryptedPinForAPI = getEncryptedPinForAPI;
73
+ const hashPin = pin => {
74
+ try {
75
+ const hash = CryptoJS.SHA256(pin + ENCRYPTION_KEY).toString();
76
+ console.log('🔒 PIN hashed successfully');
77
+ return hash;
78
+ } catch (error) {
79
+ console.error('❌ Error hashing PIN:', error);
80
+ throw error;
81
+ }
82
+ };
83
+ exports.hashPin = hashPin;
84
+ //# sourceMappingURL=pinEncryptionService.js.map
@@ -1,7 +1,105 @@
1
- 'use strict';
2
- // Onairos SDK - Asset Registry (auto-generated)
3
- var __ONAIROS_REQ_REGISTRY__ = [
4
- require("./biometricPinService")
5
- ];
6
- function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
7
- Object[_0x873a(0x0)](exports,'__esModule',{'value':!![]}),exports[_0x873a(0x1)]=exports[_0x873a(0x2)]=exports['getTemporaryPin']=exports[_0x873a(0x3)]=exports[_0x873a(0x4)]=exports[_0x873a(0x5)]=exports[_0x873a(0x6)]=void 0x0;var _biometricPinService=__ONAIROS_REQ_FUNC__(0x0);const getStoredPinForTraining=async()=>{const _0x2c3dfc={'UUXKn':function(_0x2d8ee5,_0x22a9b7){return _0x2d8ee5===_0x22a9b7;},'aKJlf':_0x873a(0x7),'eVlqp':'🔓\x20Retrieving\x20stored\x20PIN\x20for\x20training...','CUFta':_0x873a(0x8),'cnkbB':_0x873a(0x9),'cMINq':'✅\x20PIN\x20retrieved\x20successfully\x20for\x20training','njSpb':_0x873a(0xa),'eNdGq':'❌\x20Error\x20retrieving\x20stored\x20PIN:'};try{if(_0x2c3dfc[_0x873a(0xb)](_0x2c3dfc['aKJlf'],_0x873a(0xc)))return _0x31be77;else{console[_0x873a(0xd)](_0x2c3dfc['eVlqp']);const _0x3aa85=await _biometricPinService[_0x873a(0xe)]['isPinStored']();if(!_0x3aa85)return console[_0x873a(0xd)](_0x2c3dfc['CUFta']),null;const _0x1913fc=await _biometricPinService['biometricPinService'][_0x873a(0xf)]();return _0x1913fc?_0x2c3dfc[_0x873a(0x10)]!==_0x2c3dfc[_0x873a(0x10)]?(_0x8dc12d[_0x873a(0xd)](_0x873a(0x11)),_0x42b7dd):(console[_0x873a(0xd)](_0x2c3dfc[_0x873a(0x12)]),_0x1913fc):(console[_0x873a(0xd)](_0x2c3dfc['njSpb']),null);}}catch(_0x5b5c1f){return console[_0x873a(0x13)](_0x2c3dfc[_0x873a(0x14)],_0x5b5c1f),null;}};exports[_0x873a(0x3)]=getStoredPinForTraining;const hasStoredPin=async()=>{const _0x164232={'OzvJP':_0x873a(0x15),'WNbJh':function(_0xfb882f,_0x38e99e){return _0xfb882f!==_0x38e99e;},'lgIpb':_0x873a(0x16)};try{if(_0x164232[_0x873a(0x17)](_0x164232['lgIpb'],_0x873a(0x16)))_0x2dc06d=null,_0x4801df['log'](_0x164232[_0x873a(0x18)]);else return await _biometricPinService[_0x873a(0xe)][_0x873a(0x19)]();}catch(_0x24cce7){return console[_0x873a(0x13)]('❌\x20Error\x20checking\x20PIN\x20storage:',_0x24cce7),![];}};exports[_0x873a(0x2)]=hasStoredPin;const clearStoredPin=async()=>{const _0x5ec024={'cvzbK':'📝\x20Using\x20temporary\x20PIN\x20for\x20training','udYKJ':_0x873a(0x1a),'qSKYv':function(_0x403bee,_0x5f2ae3){return _0x403bee===_0x5f2ae3;},'DuxZZ':_0x873a(0x1b)};try{return console[_0x873a(0xd)](_0x5ec024['udYKJ']),await _biometricPinService[_0x873a(0xe)][_0x873a(0x1c)]();}catch(_0x54809a){return _0x5ec024[_0x873a(0x1d)](_0x5ec024['DuxZZ'],_0x873a(0x1e))?(_0x3c0eb2[_0x873a(0xd)](_0x5ec024[_0x873a(0x1f)]),_0x3ad307):(console[_0x873a(0x13)]('❌\x20Error\x20clearing\x20stored\x20PIN:',_0x54809a),![]);}};exports[_0x873a(0x6)]=clearStoredPin;const getPinForTraining=async _0x4e6bda=>{const _0xfb3f75={'ZMqgR':function(_0x14b28d){return _0x14b28d();}};if(_0x4e6bda)return console[_0x873a(0xd)](_0x873a(0x20)),_0x4e6bda;return await _0xfb3f75[_0x873a(0x21)](getStoredPinForTraining);};function _0x873a(_0x336b4a,_0x873a9d){_0x336b4a=_0x336b4a-0x0;const _0x563257=_0x336b();let _0x492fbd=_0x563257[_0x336b4a];return _0x492fbd;}function _0x336b(){const _0x51c97e=['defineProperty','setTemporaryPin','hasStoredPin','getStoredPinForTraining','getPinForTraining','clearTemporaryPin','clearStoredPin','ltNFu','⚠️\x20No\x20PIN\x20stored\x20in\x20secure\x20storage','Gvqjt','❌\x20Failed\x20to\x20retrieve\x20PIN\x20or\x20user\x20cancelled\x20authentication','UUXKn','zHHeB','log','biometricPinService','retrievePinWithBiometric','cnkbB','✅\x20PIN\x20retrieved\x20successfully\x20for\x20training','cMINq','error','eNdGq','🗑️\x20Temporary\x20PIN\x20cleared','GYOOv','WNbJh','OzvJP','isPinStored','🗑️\x20Clearing\x20stored\x20PIN...','Nsbtw','removePinFromStorage','qSKYv','DqHzH','cvzbK','📝\x20Using\x20temporary\x20PIN\x20for\x20training','ZMqgR','📝\x20Temporary\x20PIN\x20set\x20for\x20training','getTemporaryPin','Ddlnc'];_0x336b=function(){return _0x51c97e;};return _0x336b();}exports['getPinForTraining']=getPinForTraining;let temporaryPin=null;const setTemporaryPin=_0xc1febf=>{temporaryPin=_0xc1febf,console['log'](_0x873a(0x22));};exports[_0x873a(0x1)]=setTemporaryPin;const getTemporaryPin=()=>{return temporaryPin;};exports[_0x873a(0x23)]=getTemporaryPin;const clearTemporaryPin=()=>{const _0xd0d0dc={'Ddlnc':_0x873a(0x15)};temporaryPin=null,console[_0x873a(0xd)](_0xd0d0dc[_0x873a(0x24)]);};exports['clearTemporaryPin']=clearTemporaryPin;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setTemporaryPin = exports.hasStoredPin = exports.getTemporaryPin = exports.getStoredPinForTraining = exports.getPinForTraining = exports.clearTemporaryPin = exports.clearStoredPin = void 0;
7
+ var _biometricPinService = require("./biometricPinService");
8
+ /**
9
+ * Utility functions for PIN storage management
10
+ */
11
+
12
+ /**
13
+ * Get the stored PIN for training/authentication purposes
14
+ * This will prompt for biometric authentication
15
+ */
16
+ const getStoredPinForTraining = async () => {
17
+ try {
18
+ console.log('🔓 Retrieving stored PIN for training...');
19
+
20
+ // Check if PIN is stored
21
+ const pinStored = await _biometricPinService.biometricPinService.isPinStored();
22
+ if (!pinStored) {
23
+ console.log('⚠️ No PIN stored in secure storage');
24
+ return null;
25
+ }
26
+
27
+ // Retrieve PIN with biometric authentication
28
+ const pin = await _biometricPinService.biometricPinService.retrievePinWithBiometric();
29
+ if (pin) {
30
+ console.log('✅ PIN retrieved successfully for training');
31
+ return pin;
32
+ } else {
33
+ console.log('❌ Failed to retrieve PIN or user cancelled authentication');
34
+ return null;
35
+ }
36
+ } catch (error) {
37
+ console.error('❌ Error retrieving stored PIN:', error);
38
+ return null;
39
+ }
40
+ };
41
+
42
+ /**
43
+ * Check if user has a PIN stored securely
44
+ */
45
+ exports.getStoredPinForTraining = getStoredPinForTraining;
46
+ const hasStoredPin = async () => {
47
+ try {
48
+ return await _biometricPinService.biometricPinService.isPinStored();
49
+ } catch (error) {
50
+ console.error('❌ Error checking PIN storage:', error);
51
+ return false;
52
+ }
53
+ };
54
+
55
+ /**
56
+ * Remove stored PIN (for logout/reset purposes)
57
+ */
58
+ exports.hasStoredPin = hasStoredPin;
59
+ const clearStoredPin = async () => {
60
+ try {
61
+ console.log('🗑️ Clearing stored PIN...');
62
+ return await _biometricPinService.biometricPinService.removePinFromStorage();
63
+ } catch (error) {
64
+ console.error('❌ Error clearing stored PIN:', error);
65
+ return false;
66
+ }
67
+ };
68
+
69
+ /**
70
+ * Get PIN for passing to training component
71
+ * This function can be called from the onboarding flow
72
+ */
73
+ exports.clearStoredPin = clearStoredPin;
74
+ const getPinForTraining = async tempPin => {
75
+ // If a temporary PIN is provided (from the PIN input), use it
76
+ if (tempPin) {
77
+ console.log('📝 Using temporary PIN for training');
78
+ return tempPin;
79
+ }
80
+
81
+ // Otherwise, try to retrieve stored PIN
82
+ return await getStoredPinForTraining();
83
+ };
84
+
85
+ /**
86
+ * Store PIN temporarily in memory for training component
87
+ * This is used when PIN is entered but not yet stored biometrically
88
+ */
89
+ exports.getPinForTraining = getPinForTraining;
90
+ let temporaryPin = null;
91
+ const setTemporaryPin = pin => {
92
+ temporaryPin = pin;
93
+ console.log('📝 Temporary PIN set for training');
94
+ };
95
+ exports.setTemporaryPin = setTemporaryPin;
96
+ const getTemporaryPin = () => {
97
+ return temporaryPin;
98
+ };
99
+ exports.getTemporaryPin = getTemporaryPin;
100
+ const clearTemporaryPin = () => {
101
+ temporaryPin = null;
102
+ console.log('🗑️ Temporary PIN cleared');
103
+ };
104
+ exports.clearTemporaryPin = clearTemporaryPin;
105
+ //# sourceMappingURL=pinStorageUtils.js.map