@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,10 +1,349 @@
1
- 'use strict';
2
- // Onairos SDK - Asset Registry (auto-generated)
3
- var __ONAIROS_REQ_REGISTRY__ = [
4
- require("react-native"),
5
- require("../constants"),
6
- require("@react-native-async-storage/async-storage"),
7
- require('react-native-keychain')
8
- ];
9
- function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
10
- Object[_0x733a(0x0)](exports,_0x733a(0x1),{'value':!![]}),exports[_0x733a(0x2)]=exports[_0x733a(0x3)]=exports[_0x733a(0x4)]=exports[_0x733a(0x5)]=exports[_0x733a(0x6)]=exports[_0x733a(0x7)]=exports[_0x733a(0x8)]=exports[_0x733a(0x9)]=exports[_0x733a(0xa)]=exports[_0x733a(0xb)]=exports['deleteCredentials']=exports[_0x733a(0xc)]=void 0x0;var _reactNative=__ONAIROS_REQ_FUNC__(0x0),_constants=__ONAIROS_REQ_FUNC__(0x1),_asyncStorage=_interopRequireDefault(__ONAIROS_REQ_FUNC__(0x2));function _interopRequireDefault(_0x4d06d9){return _0x4d06d9&&_0x4d06d9['__esModule']?_0x4d06d9:{'default':_0x4d06d9};}function _0x4cac(){const _0x583f86=['defineProperty','__esModule','verifyCredentials','updateCredentials','storeCredentials','isJWTExpired','hasJWT','hasCredentials','getJWTPayload','getJWT','getCredentials','generateDeviceUsername','clearJWT','onairos_jwt_token','warn','mock','default','function','NBfXd','cqexM','getGenericPassword','NVBye','nBsjU','OGSnj','service','teqxd','qmMyQ','TWiZh','kIENh','ldOxl','gWbqe','Vnaug','parse','password','indexOf','charAt','wjtRl','gQHui','cuxhN','efKsy','fromCharCode','rbeqv','rKDhh','DQByi','cxCAB','nQhEP','Keychain\x20access\x20failed,\x20using\x20mock\x20storage','setGenericPassword','tABnk','vVeaD','YwUvl','JEHwh','LVeCD','ReSlr','xNHwW','ATGNH','spqTW','QgDVB','error','❌\x20Failed\x20to\x20clear\x20JWT\x20token:','lJQEo','zsgtY','sBYeZ','Username\x20is\x20required\x20for\x20storing\x20credentials','web','Error\x20storing\x20credentials:','JfZkO','ziaPa','GnFxR','luhjn','createdAt','now','username','mrjYz','STORAGE_KEYS','credentials','Platform','WJenO','ACCESS_CONTROL','ACCESSIBLE','WHEN_UNLOCKED','stringify','ZSJRZ','UgzuJ','Error\x20getting\x20credentials:','qxqeL','cSVgp','seoWu','DobNi','xLkOX','xlzcu','rICow','MPTqo','UvZdb','KQlUa','FJaTH','plAAn','Error\x20deleting\x20credentials:','deleteCredentials','ThMHl','toString','substring','dev_','Error\x20verifying\x20credentials:','LIQzm','hlvYR','CIoBY','eymiq','diuXE','PsKOE','SdtdD','sZcBJ','❌\x20Failed\x20to\x20retrieve\x20JWT\x20token:','getItem','CazcO','random','fnhFM','❌\x20Failed\x20to\x20check\x20JWT\x20token:','LpHcf','UjunN','oQcjA','removeItem','log','WojOz','NoNSG','UUwbG','JCFiV','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/','cYGbN','tUgqk','Fhrzu','HjyxS','PbKOD','GWzRR','ClyWN','fgIRc','WPHLi','TfpEC','DScpz','split','MyJoU','length','AmRVv','❌\x20Failed\x20to\x20decode\x20JWT\x20payload:','DSexY','DcBJr','exp','zsxez','YGtOF','osaGW','lfxKS','BYBpo'];_0x4cac=function(){return _0x583f86;};return _0x4cac();}const JWT_TOKEN_KEY=_0x733a(0xd),mockStorage={};let Keychain=null;try{Keychain=__ONAIROS_REQ_FUNC__(0x3);}catch(_0x5af894){console[_0x733a(0xe)]('react-native-keychain module not available, using mock storage'),Keychain={'ACCESS_CONTROL':{'BIOMETRY_ANY_OR_DEVICE_PASSCODE':_0x733a(0xf)},'ACCESSIBLE':{'WHEN_UNLOCKED':_0x733a(0xf)},'getGenericPassword':async()=>null,'setGenericPassword':async()=>!![],'resetGenericPassword':async()=>!![]};}const isKeychainAvailable=()=>{const _0x424227={'OGSnj':'Keychain\x20access\x20failed,\x20using\x20mock\x20storage','cqexM':function(_0x26d3e1,_0x327c6a){return _0x26d3e1===_0x327c6a;},'kVvAR':_0x733a(0x10),'NVBye':_0x733a(0x11),'nBsjU':_0x733a(0x12)};try{return Keychain&&_0x424227[_0x733a(0x13)](typeof Keychain[_0x733a(0x14)],_0x424227[_0x733a(0x15)]);}catch(_0x2abf68){if(_0x424227['cqexM'](_0x424227[_0x733a(0x16)],_0x424227[_0x733a(0x16)]))return![];else{_0x52369e[_0x733a(0xe)](_0x424227[_0x733a(0x17)],_0x9c0c86);const _0x59ddfb=(_0x424227[_0x733a(0x13)](_0x595c19,null)||_0x424112===void 0x0?void 0x0:_0x4cba9e[_0x733a(0x18)])||_0x424227['kVvAR'];return delete _0x378745[_0x59ddfb],!![];}}},safeGetGenericPassword=async _0x724d7a=>{const _0x309e3a={'wjtRl':function(_0x595de3,_0x176714){return _0x595de3+_0x176714;},'gQHui':function(_0x2ac30f,_0x3c8854){return _0x2ac30f|_0x3c8854;},'cuxhN':function(_0xec4b57,_0x396586){return _0xec4b57<<_0x396586;},'efKsy':function(_0x20d202,_0x117fb6){return _0x20d202<<_0x117fb6;},'rbeqv':function(_0x52d8ae,_0x400880){return _0x52d8ae&_0x400880;},'gdvCD':function(_0x1f5786,_0x5dcc0a){return _0x1f5786!==_0x5dcc0a;},'rKDhh':function(_0x448252,_0x410ddd){return _0x448252&_0x410ddd;},'TWiZh':function(_0x7d2d34,_0x1913c7){return _0x7d2d34!==_0x1913c7;},'kFSUJ':_0x733a(0x19),'ldOxl':function(_0x3fc31b){return _0x3fc31b();},'gWbqe':function(_0x54393b,_0x4ca41e){return _0x54393b!==_0x4ca41e;},'Vnaug':_0x733a(0x1a),'DQByi':'Keychain\x20access\x20failed,\x20using\x20mock\x20storage','cxCAB':function(_0x581f3b,_0x488a0b){return _0x581f3b===_0x488a0b;},'fJblK':_0x733a(0x10)};try{if(_0x309e3a[_0x733a(0x1b)](_0x309e3a['kFSUJ'],_0x733a(0x1c))){if(_0x309e3a[_0x733a(0x1d)](isKeychainAvailable))return _0x309e3a[_0x733a(0x1e)](_0x309e3a[_0x733a(0x1f)],_0x309e3a[_0x733a(0x1f)])?_0x5d2172[_0x733a(0x20)](_0x395da4[_0x733a(0x21)]):await Keychain['getGenericPassword'](_0x724d7a);else{const _0x2fe1d0=(_0x724d7a===null||_0x724d7a===void 0x0?void 0x0:_0x724d7a['service'])||_0x733a(0x10);return mockStorage[_0x2fe1d0]||null;}}else{const _0x465903=_0x42015c[_0x733a(0x22)](_0x1710b5[_0x733a(0x23)](_0x8eb26)),_0x3442df=_0x51c407[_0x733a(0x22)](_0x320092[_0x733a(0x23)](_0x3f1a8a+0x1)),_0x1fd62e=_0x206ffd[_0x733a(0x22)](_0x3cbad5[_0x733a(0x23)](_0x309e3a[_0x733a(0x24)](_0x2e9690,0x2))),_0xf9e1f1=_0x5edc2a[_0x733a(0x22)](_0x4a195e[_0x733a(0x23)](_0x309e3a['wjtRl'](_0x309a5d,0x3))),_0x5f485b=_0x309e3a[_0x733a(0x25)](_0x309e3a[_0x733a(0x25)](_0x309e3a[_0x733a(0x26)](_0x465903,0x12),_0x309e3a[_0x733a(0x27)](_0x3442df,0xc))|_0x1fd62e<<0x6,_0xf9e1f1);_0x2cf5eb+=_0x46bc29[_0x733a(0x28)](_0x309e3a[_0x733a(0x29)](_0x5f485b>>0x10,0xff));if(_0x309e3a['gdvCD'](_0x1fd62e,0x40))_0x43732c+=_0x3caf9c[_0x733a(0x28)](_0x309e3a['rbeqv'](_0x5f485b>>0x8,0xff));if(_0xf9e1f1!==0x40)_0x59e598+=_0x556bc6['fromCharCode'](_0x309e3a[_0x733a(0x2a)](_0x5f485b,0xff));}}catch(_0x180901){console[_0x733a(0xe)](_0x309e3a[_0x733a(0x2b)],_0x180901);const _0x2704e1=(_0x309e3a[_0x733a(0x2c)](_0x724d7a,null)||_0x724d7a===void 0x0?void 0x0:_0x724d7a[_0x733a(0x18)])||_0x309e3a['fJblK'];return mockStorage[_0x2704e1]||null;}},safeSetGenericPassword=async(_0x5102ba,_0x8d58da,_0x2ec07f)=>{const _0x1f1031={'tABnk':function(_0x3421d3,_0xf4fe02){return _0x3421d3===_0xf4fe02;},'vVeaD':_0x733a(0x10),'YwUvl':function(_0xf720b2,_0x4994d4){return _0xf720b2===_0x4994d4;},'JEHwh':_0x733a(0x2d),'LVeCD':_0x733a(0x2e),'ReSlr':function(_0xe6dc66,_0x26030f){return _0xe6dc66===_0x26030f;}};try{if(isKeychainAvailable())return await Keychain[_0x733a(0x2f)](_0x5102ba,_0x8d58da,_0x2ec07f);else{const _0x2517d4=(_0x2ec07f===null||_0x1f1031[_0x733a(0x30)](_0x2ec07f,void 0x0)?void 0x0:_0x2ec07f[_0x733a(0x18)])||_0x1f1031[_0x733a(0x31)];return mockStorage[_0x2517d4]={'username':_0x5102ba,'password':_0x8d58da},!![];}}catch(_0x7bfd1f){if(_0x1f1031[_0x733a(0x32)](_0x1f1031[_0x733a(0x33)],_0x1f1031[_0x733a(0x33)])){console['warn'](_0x1f1031[_0x733a(0x34)],_0x7bfd1f);const _0x244230=(_0x2ec07f===null||_0x1f1031[_0x733a(0x35)](_0x2ec07f,void 0x0)?void 0x0:_0x2ec07f[_0x733a(0x18)])||_0x1f1031[_0x733a(0x31)];return mockStorage[_0x244230]={'username':_0x5102ba,'password':_0x8d58da},!![];}else return!![];}},safeResetGenericPassword=async _0x3fc3f8=>{const _0x121e36={'xNHwW':function(_0x5dc855){return _0x5dc855();},'RMJhg':function(_0x44492a,_0x564f84){return _0x44492a===_0x564f84;},'ATGNH':_0x733a(0x10),'spqTW':function(_0x186b3a,_0x375f18){return _0x186b3a!==_0x375f18;},'QgDVB':'uoiyx','lJQEo':'Keychain\x20access\x20failed,\x20using\x20mock\x20storage','zsgtY':function(_0x1afcf3,_0x3c7d46){return _0x1afcf3===_0x3c7d46;}};try{if(_0x121e36[_0x733a(0x36)](isKeychainAvailable))return await Keychain['resetGenericPassword'](_0x3fc3f8);else{const _0x18905c=(_0x121e36['RMJhg'](_0x3fc3f8,null)||_0x3fc3f8===void 0x0?void 0x0:_0x3fc3f8[_0x733a(0x18)])||_0x121e36[_0x733a(0x37)];return delete mockStorage[_0x18905c],!![];}}catch(_0x37fe08){if(_0x121e36[_0x733a(0x38)](_0x121e36[_0x733a(0x39)],_0x121e36[_0x733a(0x39)]))return _0x36b573[_0x733a(0x3a)](_0x733a(0x3b),_0x1f8954),![];else{console['warn'](_0x121e36[_0x733a(0x3c)],_0x37fe08);const _0x36b2d2=(_0x3fc3f8===null||_0x121e36[_0x733a(0x3d)](_0x3fc3f8,void 0x0)?void 0x0:_0x3fc3f8[_0x733a(0x18)])||_0x121e36['ATGNH'];return delete mockStorage[_0x36b2d2],!![];}}},storeCredentials=async _0xd0d00=>{const _0x219ad9={'zQJVG':_0x733a(0x2e),'GnFxR':function(_0x2062a5,_0x5c31a){return _0x2062a5===_0x5c31a;},'gKzvT':_0x733a(0x10),'JfZkO':function(_0x3b836d,_0x625d20){return _0x3b836d!==_0x625d20;},'ziaPa':_0x733a(0x3e),'luhjn':function(_0x21a715){return _0x21a715();},'egsKO':function(_0x189bd4,_0x290a51){return _0x189bd4===_0x290a51;},'hFiWh':function(_0x176b8e,_0x394c94){return _0x176b8e===_0x394c94;},'mrjYz':_0x733a(0x3f),'WJenO':_0x733a(0x40),'VkrlV':_0x733a(0x41)};try{if(_0x219ad9[_0x733a(0x42)](_0x733a(0x3e),_0x219ad9[_0x733a(0x43)])){_0x16bff7[_0x733a(0xe)](_0x219ad9['zQJVG'],_0x29de14);const _0x3c063e=(_0x219ad9[_0x733a(0x44)](_0x418c52,null)||_0x23f1ca===void 0x0?void 0x0:_0x1a4a0d[_0x733a(0x18)])||_0x219ad9['gKzvT'];return _0x3fc6ee[_0x3c063e]={'username':_0x32cc21,'password':_0x323566},!![];}else{const _0x844dc2=await _0x219ad9[_0x733a(0x45)](getCredentials),_0x3c3fc9={..._0x844dc2,..._0xd0d00,'createdAt':(_0x219ad9['egsKO'](_0x844dc2,null)||_0x219ad9['hFiWh'](_0x844dc2,void 0x0)?void 0x0:_0x844dc2[_0x733a(0x46)])||Date[_0x733a(0x47)]()},_0x5820c2=_0x3c3fc9[_0x733a(0x48)];if(!_0x5820c2)throw new Error(_0x219ad9[_0x733a(0x49)]);const _0x2fae11={'service':_constants[_0x733a(0x4a)][_0x733a(0x4b)]};return _0x219ad9[_0x733a(0x42)](_reactNative[_0x733a(0x4c)]['OS'],_0x219ad9[_0x733a(0x4d)])&&_0x219ad9[_0x733a(0x45)](isKeychainAvailable)&&(_0x2fae11['accessControl']=Keychain[_0x733a(0x4e)]['BIOMETRY_ANY_OR_DEVICE_PASSCODE'],_0x2fae11['accessible']=Keychain[_0x733a(0x4f)][_0x733a(0x50)]),await safeSetGenericPassword(_0x5820c2,JSON[_0x733a(0x51)](_0x3c3fc9),_0x2fae11),!![];}}catch(_0x41f3ab){return console[_0x733a(0x3a)](_0x219ad9['VkrlV'],_0x41f3ab),![];}};exports['storeCredentials']=storeCredentials;const getCredentials=async()=>{const _0x14fdcb={'hJfJy':_0x733a(0xf),'DobNi':function(_0x21209f,_0x2281e6){return _0x21209f===_0x2281e6;},'xlzcu':'default','NIWHL':function(_0x32afd1,_0x385bc4){return _0x32afd1!==_0x385bc4;},'qxqeL':'YHDzd','cSVgp':_0x733a(0x52),'seoWu':function(_0x4be989,_0x1d662a){return _0x4be989(_0x1d662a);},'xLkOX':_0x733a(0x53),'cEMGT':_0x733a(0x54)};try{if(_0x14fdcb['NIWHL'](_0x14fdcb[_0x733a(0x55)],_0x14fdcb[_0x733a(0x56)])){const _0x13aaba=await _0x14fdcb[_0x733a(0x57)](safeGetGenericPassword,{'service':_constants['STORAGE_KEYS'][_0x733a(0x4b)]});if(_0x13aaba)return JSON[_0x733a(0x20)](_0x13aaba['password']);return null;}else _0x4fa47e[_0x733a(0xe)]('react-native-keychain module not available, using mock storage'),Keychain={'ACCESS_CONTROL':{'BIOMETRY_ANY_OR_DEVICE_PASSCODE':_0x14fdcb['hJfJy']},'ACCESSIBLE':{'WHEN_UNLOCKED':_0x733a(0xf)},'getGenericPassword':async()=>null,'setGenericPassword':async()=>!![],'resetGenericPassword':async()=>!![]};}catch(_0x2d369c){if(_0x14fdcb[_0x733a(0x58)](_0x14fdcb['xLkOX'],_0x14fdcb[_0x733a(0x59)]))return console[_0x733a(0x3a)](_0x14fdcb['cEMGT'],_0x2d369c),null;else{const _0x426195=(_0x14fdcb[_0x733a(0x58)](_0x14bf10,null)||_0x1ad8b6===void 0x0?void 0x0:_0x288a63[_0x733a(0x18)])||_0x14fdcb[_0x733a(0x5a)];return _0x597021[_0x426195]={'username':_0x182740,'password':_0x2d13db},!![];}}};exports[_0x733a(0xa)]=getCredentials;function _0x733a(_0x4cacef,_0x733ae6){_0x4cacef=_0x4cacef-0x0;const _0xed6d85=_0x4cac();let _0x15723=_0xed6d85[_0x4cacef];return _0x15723;}const hasCredentials=async()=>{const _0x2e14a3={'UvZdb':function(_0x1e2ebf,_0x3423b2){return _0x1e2ebf===_0x3423b2;},'OfBQi':_0x733a(0x5b),'KQlUa':_0x733a(0x5c),'VvfAY':function(_0x39e72f,_0x2e06bb){return _0x39e72f(_0x2e06bb);},'FJaTH':'Error\x20checking\x20credentials:'};try{if(_0x2e14a3[_0x733a(0x5d)](_0x2e14a3['OfBQi'],_0x2e14a3[_0x733a(0x5e)]))return _0x51600f&&_0x51a19e[_0x733a(0x1)]?_0x4b8e01:{'default':_0x2e35d2};else{const _0x112c3b=await _0x2e14a3['VvfAY'](safeGetGenericPassword,{'service':_constants[_0x733a(0x4a)][_0x733a(0x4b)]});return!!_0x112c3b;}}catch(_0x304972){return console['error'](_0x2e14a3[_0x733a(0x5f)],_0x304972),![];}};exports['hasCredentials']=hasCredentials;const deleteCredentials=async()=>{const _0x5ac14e={'plAAn':function(_0x53e509,_0x48a7fe){return _0x53e509(_0x48a7fe);}};try{return await _0x5ac14e[_0x733a(0x60)](safeResetGenericPassword,{'service':_constants[_0x733a(0x4a)][_0x733a(0x4b)]}),!![];}catch(_0x59e137){return console[_0x733a(0x3a)](_0x733a(0x61),_0x59e137),![];}};exports[_0x733a(0x62)]=deleteCredentials;const updateCredentials=async _0x4399c9=>{const _0x5c6d8d={'ThMHl':function(_0x1b7475,_0xf84aa1){return _0x1b7475(_0xf84aa1);}};return _0x5c6d8d[_0x733a(0x63)](storeCredentials,_0x4399c9);};exports[_0x733a(0x3)]=updateCredentials;const generateDeviceUsername=()=>{const _0x5ca680=Math['random']()[_0x733a(0x64)](0x24)[_0x733a(0x65)](0x2,0xa);return _0x733a(0x66)+_0x5ca680;};exports['generateDeviceUsername']=generateDeviceUsername;const verifyCredentials=async _0x54ef84=>{const _0x3447c6={'SdtdD':_0x733a(0x67),'CIoBY':function(_0x5afd59,_0x447c18){return _0x5afd59!==_0x447c18;},'eymiq':_0x733a(0x68),'diuXE':_0x733a(0x69),'PsKOE':function(_0x1f442f){return _0x1f442f();}};try{if(_0x3447c6[_0x733a(0x6a)](_0x3447c6[_0x733a(0x6b)],_0x3447c6[_0x733a(0x6c)])){if(!_0x3447c6[_0x733a(0x6d)](isKeychainAvailable))return!![];return!![];}else return _0x42a2e4[_0x733a(0x3a)](_0x3447c6[_0x733a(0x6e)],_0x779229),![];}catch(_0xf7ddc7){return console['error'](_0x3447c6['SdtdD'],_0xf7ddc7),![];}};exports['verifyCredentials']=verifyCredentials;const getJWT=async()=>{const _0x498c93={'CazcO':_0x733a(0x6f),'fnhFM':_0x733a(0x70)};try{const _0x4afc21=await _asyncStorage[_0x733a(0x10)][_0x733a(0x71)](JWT_TOKEN_KEY);return _0x4afc21;}catch(_0x3cc1b6){if(_0x498c93[_0x733a(0x72)]!==_0x498c93[_0x733a(0x72)]){const _0x10fe8e=_0x4012a6[_0x733a(0x73)]()[_0x733a(0x64)](0x24)[_0x733a(0x65)](0x2,0xa);return _0x733a(0x66)+_0x10fe8e;}else return console[_0x733a(0x3a)](_0x498c93[_0x733a(0x74)],_0x3cc1b6),null;}};exports[_0x733a(0x9)]=getJWT;const hasJWT=async()=>{const _0x18b664={'LpHcf':_0x733a(0x75)};try{const _0x190ae3=await _asyncStorage[_0x733a(0x10)][_0x733a(0x71)](JWT_TOKEN_KEY);return!!_0x190ae3;}catch(_0x5816a2){return console[_0x733a(0x3a)](_0x18b664[_0x733a(0x76)],_0x5816a2),![];}};exports[_0x733a(0x6)]=hasJWT;const clearJWT=async()=>{const _0x5c96d4={'GAbRB':_0x733a(0x11),'NoNSG':_0x733a(0x75),'jXXub':function(_0x35c420,_0x41a191){return _0x35c420===_0x41a191;},'NCRHu':_0x733a(0x77),'UUwbG':_0x733a(0x3b)};try{if(_0x5c96d4['jXXub'](_0x733a(0x78),_0x733a(0x78)))return await _asyncStorage['default'][_0x733a(0x79)](JWT_TOKEN_KEY),console[_0x733a(0x7a)]('🗑️\x20JWT\x20token\x20cleared'),!![];else try{return Keychain&&typeof Keychain['getGenericPassword']===_0x5c96d4['GAbRB'];}catch(_0x39f92d){return![];}}catch(_0x81395f){return _0x733a(0x7b)===_0x5c96d4['NCRHu']?(_0x1ceba6['error'](_0x5c96d4[_0x733a(0x7c)],_0x22c5d0),![]):(console[_0x733a(0x3a)](_0x5c96d4[_0x733a(0x7d)],_0x81395f),![]);}};exports[_0x733a(0xc)]=clearJWT;const base64Decode=_0x182a3b=>{const _0x4e36b4={'JCFiV':function(_0x3eccec,_0x3a96b6){return _0x3eccec%_0x3a96b6;},'WUxsv':function(_0x2b110b,_0x4c2ed0){return _0x2b110b<_0x4c2ed0;},'cYGbN':function(_0xaa7aaa,_0x311bb7){return _0xaa7aaa+_0x311bb7;},'tUgqk':function(_0x2a86dc,_0x2608c3){return _0x2a86dc+_0x2608c3;},'Fhrzu':function(_0x55552e,_0x5e6e0b){return _0x55552e|_0x5e6e0b;},'HjyxS':function(_0x5d476d,_0x38ff2b){return _0x5d476d|_0x38ff2b;},'kbeZF':function(_0x200d7e,_0x1dd4a5){return _0x200d7e<<_0x1dd4a5;},'PbKOD':function(_0x586755,_0x201436){return _0x586755<<_0x201436;},'GWzRR':function(_0x198d31,_0x3bac42){return _0x198d31&_0x3bac42;},'ClyWN':function(_0x2be0b1,_0xd6f1df){return _0x2be0b1>>_0xd6f1df;},'fgIRc':function(_0x57b4e6,_0x4d25be){return _0x57b4e6&_0x4d25be;},'WPHLi':function(_0x5b9dad,_0x44eb8d){return _0x5b9dad>>_0x44eb8d;},'TfpEC':function(_0x3a3d15,_0x497404){return _0x3a3d15!==_0x497404;}};while(_0x4e36b4[_0x733a(0x7e)](_0x182a3b['length'],0x4)){_0x182a3b+='=';}const _0x43744f=_0x733a(0x7f);let _0x469c68='';for(let _0x13c88c=0x0;_0x4e36b4['WUxsv'](_0x13c88c,_0x182a3b['length']);_0x13c88c+=0x4){const _0x35fd21=_0x43744f['indexOf'](_0x182a3b[_0x733a(0x23)](_0x13c88c)),_0x43053b=_0x43744f[_0x733a(0x22)](_0x182a3b[_0x733a(0x23)](_0x13c88c+0x1)),_0x448cd1=_0x43744f[_0x733a(0x22)](_0x182a3b[_0x733a(0x23)](_0x4e36b4[_0x733a(0x80)](_0x13c88c,0x2))),_0x4f6aed=_0x43744f[_0x733a(0x22)](_0x182a3b[_0x733a(0x23)](_0x4e36b4[_0x733a(0x81)](_0x13c88c,0x3))),_0x50dcb2=_0x4e36b4[_0x733a(0x82)](_0x4e36b4[_0x733a(0x83)](_0x4e36b4['kbeZF'](_0x35fd21,0x12)|_0x4e36b4['PbKOD'](_0x43053b,0xc),_0x4e36b4[_0x733a(0x84)](_0x448cd1,0x6)),_0x4f6aed);_0x469c68+=String[_0x733a(0x28)](_0x4e36b4[_0x733a(0x85)](_0x4e36b4[_0x733a(0x86)](_0x50dcb2,0x10),0xff));if(_0x448cd1!==0x40)_0x469c68+=String[_0x733a(0x28)](_0x4e36b4[_0x733a(0x87)](_0x4e36b4[_0x733a(0x88)](_0x50dcb2,0x8),0xff));if(_0x4e36b4[_0x733a(0x89)](_0x4f6aed,0x40))_0x469c68+=String[_0x733a(0x28)](_0x50dcb2&0xff);}return _0x469c68;},getJWTPayload=async()=>{const _0x252931={'MyJoU':function(_0x2f5b16,_0x14e7fc){return _0x2f5b16!==_0x14e7fc;},'AmRVv':function(_0x4ec8ac,_0x2d259d){return _0x4ec8ac===_0x2d259d;},'CbhGU':_0x733a(0x8a)};try{const _0x30291d=await getJWT();if(!_0x30291d)return null;const _0x877268=_0x30291d[_0x733a(0x8b)]('.');if(_0x252931[_0x733a(0x8c)](_0x877268[_0x733a(0x8d)],0x3))return null;const _0x375a69=base64Decode(_0x877268[0x1]),_0x1f1d50=JSON[_0x733a(0x20)](_0x375a69);return _0x1f1d50;}catch(_0x1e829a){return _0x252931[_0x733a(0x8e)]('SKVBD',_0x252931['CbhGU'])?(_0x111633[_0x733a(0x3a)](_0x733a(0x54),_0x46c174),null):(console[_0x733a(0x3a)](_0x733a(0x8f),_0x1e829a),null);}};exports[_0x733a(0x8)]=getJWTPayload;const isJWTExpired=async()=>{const _0x877ac0={'YGtOF':function(_0x52ebd4,_0x2842db){return _0x52ebd4===_0x2842db;},'osaGW':function(_0x1a02ec,_0x302627){return _0x1a02ec===_0x302627;},'lfxKS':_0x733a(0x10),'DcBJr':function(_0x1252e4){return _0x1252e4();},'rWIPK':function(_0xf6b629,_0x1e34bd){return _0xf6b629<_0x1e34bd;},'zsxez':_0x733a(0x90),'BYBpo':'❌\x20Failed\x20to\x20check\x20JWT\x20expiration:'};try{const _0x2c7b51=await _0x877ac0[_0x733a(0x91)](getJWTPayload);if(!_0x2c7b51||!_0x2c7b51[_0x733a(0x92)])return!![];const _0x4ccecb=Math['floor'](Date[_0x733a(0x47)]()/0x3e8);return _0x877ac0['rWIPK'](_0x2c7b51['exp'],_0x4ccecb);}catch(_0x25618e){if(_0x877ac0[_0x733a(0x93)]!=='DSexY'){const _0x591f98=(_0x877ac0[_0x733a(0x94)](_0x1c5df1,null)||_0x877ac0[_0x733a(0x95)](_0x18d4e4,void 0x0)?void 0x0:_0x38e533['service'])||_0x877ac0[_0x733a(0x96)];return delete _0x33a0f2[_0x591f98],!![];}else return console[_0x733a(0x3a)](_0x877ac0[_0x733a(0x97)],_0x25618e),!![];}};exports[_0x733a(0x5)]=isJWTExpired;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.verifyCredentials = exports.updateCredentials = exports.storeCredentials = exports.isJWTExpired = exports.hasJWT = exports.hasCredentials = exports.getJWTPayload = exports.getJWT = exports.getCredentials = exports.generateDeviceUsername = exports.deleteCredentials = exports.clearJWT = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _constants = require("../constants");
9
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ // JWT token storage key
12
+ const JWT_TOKEN_KEY = 'onairos_jwt_token';
13
+
14
+ // Define OnairosCredentials interface locally to avoid circular dependencies
15
+
16
+ // Create a mock storage for environments without Keychain access (like Expo Go)
17
+ const mockStorage = {};
18
+
19
+ // Try to import Keychain, but provide fallbacks if not available
20
+ let Keychain = null;
21
+ try {
22
+ // This import might fail in Expo Go or environments without native modules
23
+ Keychain = require('react-native-keychain');
24
+ } catch (error) {
25
+ console.warn('react-native-keychain module not available, using mock storage');
26
+ // Create minimal mock implementation
27
+ Keychain = {
28
+ ACCESS_CONTROL: {
29
+ BIOMETRY_ANY_OR_DEVICE_PASSCODE: 'mock'
30
+ },
31
+ ACCESSIBLE: {
32
+ WHEN_UNLOCKED: 'mock'
33
+ },
34
+ getGenericPassword: async () => null,
35
+ setGenericPassword: async () => true,
36
+ resetGenericPassword: async () => true
37
+ };
38
+ }
39
+
40
+ // Check if Keychain is properly initialized and available
41
+ const isKeychainAvailable = () => {
42
+ try {
43
+ return Keychain && typeof Keychain.getGenericPassword === 'function';
44
+ } catch (e) {
45
+ return false;
46
+ }
47
+ };
48
+
49
+ // Wrapper for getGenericPassword that falls back to mock storage
50
+ const safeGetGenericPassword = async options => {
51
+ try {
52
+ if (isKeychainAvailable()) {
53
+ return await Keychain.getGenericPassword(options);
54
+ } else {
55
+ // Fall back to mock storage in memory
56
+ const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
57
+ return mockStorage[key] || null;
58
+ }
59
+ } catch (error) {
60
+ console.warn('Keychain access failed, using mock storage', error);
61
+ // Fall back to mock storage on error
62
+ const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
63
+ return mockStorage[key] || null;
64
+ }
65
+ };
66
+
67
+ // Wrapper for setGenericPassword that falls back to mock storage
68
+ const safeSetGenericPassword = async (username, password, options) => {
69
+ try {
70
+ if (isKeychainAvailable()) {
71
+ return await Keychain.setGenericPassword(username, password, options);
72
+ } else {
73
+ // Fall back to mock storage in memory
74
+ const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
75
+ mockStorage[key] = {
76
+ username,
77
+ password
78
+ };
79
+ return true;
80
+ }
81
+ } catch (error) {
82
+ console.warn('Keychain access failed, using mock storage', error);
83
+ // Fall back to mock storage on error
84
+ const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
85
+ mockStorage[key] = {
86
+ username,
87
+ password
88
+ };
89
+ return true;
90
+ }
91
+ };
92
+
93
+ // Wrapper for resetGenericPassword that falls back to mock storage
94
+ const safeResetGenericPassword = async options => {
95
+ try {
96
+ if (isKeychainAvailable()) {
97
+ return await Keychain.resetGenericPassword(options);
98
+ } else {
99
+ // Fall back to mock storage in memory
100
+ const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
101
+ delete mockStorage[key];
102
+ return true;
103
+ }
104
+ } catch (error) {
105
+ console.warn('Keychain access failed, using mock storage', error);
106
+ // Fall back to mock storage on error
107
+ const key = (options === null || options === void 0 ? void 0 : options.service) || 'default';
108
+ delete mockStorage[key];
109
+ return true;
110
+ }
111
+ };
112
+
113
+ /**
114
+ * Store credentials in memory (temporary solution)
115
+ */
116
+ const storeCredentials = async credentials => {
117
+ try {
118
+ const existingCredentials = await getCredentials();
119
+ const updatedCredentials = {
120
+ ...existingCredentials,
121
+ ...credentials,
122
+ createdAt: (existingCredentials === null || existingCredentials === void 0 ? void 0 : existingCredentials.createdAt) || Date.now()
123
+ };
124
+ const username = updatedCredentials.username;
125
+ if (!username) {
126
+ throw new Error('Username is required for storing credentials');
127
+ }
128
+ const options = {
129
+ service: _constants.STORAGE_KEYS.credentials
130
+ };
131
+
132
+ // Only use secure storage options on real devices
133
+ if (_reactNative.Platform.OS !== 'web' && isKeychainAvailable()) {
134
+ options.accessControl = Keychain.ACCESS_CONTROL.BIOMETRY_ANY_OR_DEVICE_PASSCODE;
135
+ options.accessible = Keychain.ACCESSIBLE.WHEN_UNLOCKED;
136
+ }
137
+ await safeSetGenericPassword(username, JSON.stringify(updatedCredentials), options);
138
+ return true;
139
+ } catch (error) {
140
+ console.error('Error storing credentials:', error);
141
+ return false;
142
+ }
143
+ };
144
+
145
+ /**
146
+ * Retrieve credentials from memory (temporary solution)
147
+ */
148
+ exports.storeCredentials = storeCredentials;
149
+ const getCredentials = async () => {
150
+ try {
151
+ const credentials = await safeGetGenericPassword({
152
+ service: _constants.STORAGE_KEYS.credentials
153
+ });
154
+ if (credentials) {
155
+ return JSON.parse(credentials.password);
156
+ }
157
+ return null;
158
+ } catch (error) {
159
+ console.error('Error getting credentials:', error);
160
+ return null;
161
+ }
162
+ };
163
+
164
+ /**
165
+ * Check if the user has stored credentials
166
+ */
167
+ exports.getCredentials = getCredentials;
168
+ const hasCredentials = async () => {
169
+ try {
170
+ const credentials = await safeGetGenericPassword({
171
+ service: _constants.STORAGE_KEYS.credentials
172
+ });
173
+ return !!credentials;
174
+ } catch (error) {
175
+ console.error('Error checking credentials:', error);
176
+ return false;
177
+ }
178
+ };
179
+
180
+ /**
181
+ * Delete stored credentials
182
+ */
183
+ exports.hasCredentials = hasCredentials;
184
+ const deleteCredentials = async () => {
185
+ try {
186
+ await safeResetGenericPassword({
187
+ service: _constants.STORAGE_KEYS.credentials
188
+ });
189
+ return true;
190
+ } catch (error) {
191
+ console.error('Error deleting credentials:', error);
192
+ return false;
193
+ }
194
+ };
195
+
196
+ /**
197
+ * Update specific fields in the stored credentials
198
+ */
199
+ exports.deleteCredentials = deleteCredentials;
200
+ const updateCredentials = async credentials => {
201
+ return storeCredentials(credentials);
202
+ };
203
+
204
+ /**
205
+ * Generate a device-specific unique username
206
+ */
207
+ exports.updateCredentials = updateCredentials;
208
+ const generateDeviceUsername = () => {
209
+ const randomId = Math.random().toString(36).substring(2, 10);
210
+ return `dev_${randomId}`;
211
+ };
212
+
213
+ /**
214
+ * Verify credentials (temporary mock implementation)
215
+ */
216
+ exports.generateDeviceUsername = generateDeviceUsername;
217
+ const verifyCredentials = async username => {
218
+ try {
219
+ // For Expo Go or development, always return true
220
+ if (!isKeychainAvailable()) {
221
+ return true;
222
+ }
223
+
224
+ // TODO: Implement actual verification with API
225
+ return true;
226
+ } catch (error) {
227
+ console.error('Error verifying credentials:', error);
228
+ return false;
229
+ }
230
+ };
231
+
232
+ /**
233
+ * JWT Token Storage Functions
234
+ * These functions handle JWT tokens from email verification
235
+ *
236
+ * Note: Main JWT token management is handled in apiKeyService.ts
237
+ * These are utility functions for backwards compatibility
238
+ */
239
+
240
+ /**
241
+ * Retrieve JWT token
242
+ * @returns JWT token or null if not found
243
+ */
244
+ exports.verifyCredentials = verifyCredentials;
245
+ const getJWT = async () => {
246
+ try {
247
+ const token = await _asyncStorage.default.getItem(JWT_TOKEN_KEY);
248
+ return token;
249
+ } catch (error) {
250
+ console.error('❌ Failed to retrieve JWT token:', error);
251
+ return null;
252
+ }
253
+ };
254
+
255
+ /**
256
+ * Check if JWT token exists
257
+ * @returns True if JWT token exists
258
+ */
259
+ exports.getJWT = getJWT;
260
+ const hasJWT = async () => {
261
+ try {
262
+ const token = await _asyncStorage.default.getItem(JWT_TOKEN_KEY);
263
+ return !!token;
264
+ } catch (error) {
265
+ console.error('❌ Failed to check JWT token:', error);
266
+ return false;
267
+ }
268
+ };
269
+
270
+ /**
271
+ * Clear JWT token
272
+ */
273
+ exports.hasJWT = hasJWT;
274
+ const clearJWT = async () => {
275
+ try {
276
+ await _asyncStorage.default.removeItem(JWT_TOKEN_KEY);
277
+ console.log('🗑️ JWT token cleared');
278
+ return true;
279
+ } catch (error) {
280
+ console.error('❌ Failed to clear JWT token:', error);
281
+ return false;
282
+ }
283
+ };
284
+
285
+ /**
286
+ * Simple base64 decoder for React Native
287
+ */
288
+ exports.clearJWT = clearJWT;
289
+ const base64Decode = str => {
290
+ // Add padding if needed
291
+ while (str.length % 4) {
292
+ str += '=';
293
+ }
294
+
295
+ // Simple base64 decoding
296
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
297
+ let result = '';
298
+ for (let i = 0; i < str.length; i += 4) {
299
+ const a = chars.indexOf(str.charAt(i));
300
+ const b = chars.indexOf(str.charAt(i + 1));
301
+ const c = chars.indexOf(str.charAt(i + 2));
302
+ const d = chars.indexOf(str.charAt(i + 3));
303
+ const bitmap = a << 18 | b << 12 | c << 6 | d;
304
+ result += String.fromCharCode(bitmap >> 16 & 255);
305
+ if (c !== 64) result += String.fromCharCode(bitmap >> 8 & 255);
306
+ if (d !== 64) result += String.fromCharCode(bitmap & 255);
307
+ }
308
+ return result;
309
+ };
310
+
311
+ /**
312
+ * Get JWT token payload (decoded)
313
+ * @returns Decoded JWT payload or null if invalid
314
+ */
315
+ const getJWTPayload = async () => {
316
+ try {
317
+ const token = await getJWT();
318
+ if (!token) return null;
319
+
320
+ // Decode JWT payload (middle part of token)
321
+ const parts = token.split('.');
322
+ if (parts.length !== 3) return null;
323
+ const decodedPayload = base64Decode(parts[1]);
324
+ const payload = JSON.parse(decodedPayload);
325
+ return payload;
326
+ } catch (error) {
327
+ console.error('❌ Failed to decode JWT payload:', error);
328
+ return null;
329
+ }
330
+ };
331
+
332
+ /**
333
+ * Check if JWT token is expired
334
+ * @returns True if token is expired or invalid
335
+ */
336
+ exports.getJWTPayload = getJWTPayload;
337
+ const isJWTExpired = async () => {
338
+ try {
339
+ const payload = await getJWTPayload();
340
+ if (!payload || !payload.exp) return true;
341
+ const currentTime = Math.floor(Date.now() / 1000);
342
+ return payload.exp < currentTime;
343
+ } catch (error) {
344
+ console.error('❌ Failed to check JWT expiration:', error);
345
+ return true;
346
+ }
347
+ };
348
+ exports.isJWTExpired = isJWTExpired;
349
+ //# sourceMappingURL=secureStorage.js.map