@onairos/react-native 3.1.11 → 3.1.13

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 (598) hide show
  1. package/lib/commonjs/api/index.js +75 -1
  2. package/lib/commonjs/api/index.js.map +1 -1
  3. package/lib/commonjs/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
  4. package/lib/commonjs/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  5. package/lib/commonjs/assets/icons/Facebookicon.png +0 -0
  6. package/lib/commonjs/assets/icons/Gmail.png +0 -0
  7. package/lib/commonjs/assets/icons/Linkedinicon.png +0 -0
  8. package/lib/commonjs/assets/icons/Redditicon.png +0 -0
  9. package/lib/commonjs/assets/icons/YouTubeicon2.png +0 -0
  10. package/lib/commonjs/assets/icons/YouTubeicon3.png +0 -0
  11. package/lib/commonjs/assets/icons/farcaster.png +0 -0
  12. package/lib/commonjs/assets/icons/instagram.png +0 -0
  13. package/lib/commonjs/assets/icons/pinterest.png +0 -0
  14. package/lib/commonjs/assets/icons/swerv_logo.png +0 -0
  15. package/lib/commonjs/assets/icons/twitter.jpg +0 -0
  16. package/lib/commonjs/assets/images/Checkbox.svg +3 -0
  17. package/lib/commonjs/assets/images/EnochE.svg +19 -0
  18. package/lib/commonjs/assets/images/Enochicon1.png +0 -0
  19. package/lib/commonjs/assets/images/Face_ID_logo.png +0 -0
  20. package/lib/commonjs/assets/images/Facebookicon.png +0 -0
  21. package/lib/commonjs/assets/images/Gmail.png +0 -0
  22. package/lib/commonjs/assets/images/Googlelogo.png +0 -0
  23. package/lib/commonjs/assets/images/Linkedinicon.png +0 -0
  24. package/lib/commonjs/assets/images/Onairoslogo.png +0 -0
  25. package/lib/commonjs/assets/images/Personalityprofile.svg +3 -0
  26. package/lib/commonjs/assets/images/Personalitytraits.svg +3 -0
  27. package/lib/commonjs/assets/images/Redditicon.png +0 -0
  28. package/lib/commonjs/assets/images/Userpreferences.svg +3 -0
  29. package/lib/commonjs/assets/images/YouTubeicon3.png +0 -0
  30. package/lib/commonjs/assets/images/arrow.svg +20 -0
  31. package/lib/commonjs/assets/images/basicproficon.svg +43 -0
  32. package/lib/commonjs/assets/images/basicprofile.svg +3 -0
  33. package/lib/commonjs/assets/images/checkmark.svg +4 -0
  34. package/lib/commonjs/assets/images/contentanalysis.svg +3 -0
  35. package/lib/commonjs/assets/images/contenticon.svg +23 -0
  36. package/lib/commonjs/assets/images/persona1.png +0 -0
  37. package/lib/commonjs/assets/images/persona2.png +0 -0
  38. package/lib/commonjs/assets/images/persona3.png +0 -0
  39. package/lib/commonjs/assets/images/persona4.png +0 -0
  40. package/lib/commonjs/assets/images/persona5.png +0 -0
  41. package/lib/commonjs/assets/images/personalityicon.svg +18 -0
  42. package/lib/commonjs/assets/images/x-close.svg +3 -0
  43. package/lib/commonjs/components/BodyText.js +27 -0
  44. package/lib/commonjs/components/BodyText.js.map +1 -0
  45. package/lib/commonjs/components/BrandMark.js +44 -0
  46. package/lib/commonjs/components/BrandMark.js.map +1 -0
  47. package/lib/commonjs/components/CodeInput.js +30 -0
  48. package/lib/commonjs/components/CodeInput.js.map +1 -0
  49. package/lib/commonjs/components/EmailInput.js +30 -0
  50. package/lib/commonjs/components/EmailInput.js.map +1 -0
  51. package/lib/commonjs/components/ExistingUserDataConfirmation.js +474 -0
  52. package/lib/commonjs/components/ExistingUserDataConfirmation.js.map +1 -0
  53. package/lib/commonjs/components/GoogleButton.js +55 -0
  54. package/lib/commonjs/components/GoogleButton.js.map +1 -0
  55. package/lib/commonjs/components/HeadingGroup.js +43 -0
  56. package/lib/commonjs/components/HeadingGroup.js.map +1 -0
  57. package/lib/commonjs/components/ModalHeader.js +99 -0
  58. package/lib/commonjs/components/ModalHeader.js.map +1 -0
  59. package/lib/commonjs/components/ModalSheet.js +41 -0
  60. package/lib/commonjs/components/ModalSheet.js.map +1 -0
  61. package/lib/commonjs/components/Onairos.js +1 -3
  62. package/lib/commonjs/components/Onairos.js.map +1 -1
  63. package/lib/commonjs/components/OnairosButton.js +171 -190
  64. package/lib/commonjs/components/OnairosButton.js.map +1 -1
  65. package/lib/commonjs/components/OnairosSignInButton.js +169 -0
  66. package/lib/commonjs/components/OnairosSignInButton.js.map +1 -0
  67. package/lib/commonjs/components/Overlay.js +5 -5
  68. package/lib/commonjs/components/Overlay.js.map +1 -1
  69. package/lib/commonjs/components/PersonaImage.js +60 -0
  70. package/lib/commonjs/components/PersonaImage.js.map +1 -0
  71. package/lib/commonjs/components/PersonaLoadingScreen.js +156 -0
  72. package/lib/commonjs/components/PersonaLoadingScreen.js.map +1 -0
  73. package/lib/commonjs/components/PersonalizationConsentScreen.js +316 -0
  74. package/lib/commonjs/components/PersonalizationConsentScreen.js.map +1 -0
  75. package/lib/commonjs/components/PinCreationScreen.js +393 -0
  76. package/lib/commonjs/components/PinCreationScreen.js.map +1 -0
  77. package/lib/commonjs/components/PinInput.js +282 -120
  78. package/lib/commonjs/components/PinInput.js.map +1 -1
  79. package/lib/commonjs/components/PlatformConnectorsStep.js +828 -0
  80. package/lib/commonjs/components/PlatformConnectorsStep.js.map +1 -0
  81. package/lib/commonjs/components/PlatformToggle.js +180 -0
  82. package/lib/commonjs/components/PlatformToggle.js.map +1 -0
  83. package/lib/commonjs/components/PrimaryButton.js +180 -0
  84. package/lib/commonjs/components/PrimaryButton.js.map +1 -0
  85. package/lib/commonjs/components/SignInMatchAnimation.js +197 -0
  86. package/lib/commonjs/components/SignInMatchAnimation.js.map +1 -0
  87. package/lib/commonjs/components/SignInStep.js +179 -0
  88. package/lib/commonjs/components/SignInStep.js.map +1 -0
  89. package/lib/commonjs/components/TrainingModal.js +808 -563
  90. package/lib/commonjs/components/TrainingModal.js.map +1 -1
  91. package/lib/commonjs/components/UniversalOnboarding.js +2304 -1283
  92. package/lib/commonjs/components/UniversalOnboarding.js.map +1 -1
  93. package/lib/commonjs/components/VerificationStep.js +154 -0
  94. package/lib/commonjs/components/VerificationStep.js.map +1 -0
  95. package/lib/commonjs/components/WelcomeScreen.js +385 -0
  96. package/lib/commonjs/components/WelcomeScreen.js.map +1 -0
  97. package/lib/commonjs/components/icons/Basicproficon.js +37 -0
  98. package/lib/commonjs/components/icons/Basicproficon.js.map +1 -0
  99. package/lib/commonjs/components/icons/Basicprofile.js +21 -0
  100. package/lib/commonjs/components/icons/Basicprofile.js.map +1 -0
  101. package/lib/commonjs/components/icons/Checkbox.js +21 -0
  102. package/lib/commonjs/components/icons/Checkbox.js.map +1 -0
  103. package/lib/commonjs/components/icons/Checkmark.js +27 -0
  104. package/lib/commonjs/components/icons/Checkmark.js.map +1 -0
  105. package/lib/commonjs/components/icons/Contentanalysis.js +21 -0
  106. package/lib/commonjs/components/icons/Contentanalysis.js.map +1 -0
  107. package/lib/commonjs/components/icons/Contenticon.js +39 -0
  108. package/lib/commonjs/components/icons/Contenticon.js.map +1 -0
  109. package/lib/commonjs/components/icons/EnochE.js +41 -0
  110. package/lib/commonjs/components/icons/EnochE.js.map +1 -0
  111. package/lib/commonjs/components/icons/Personalityicon.js +30 -0
  112. package/lib/commonjs/components/icons/Personalityicon.js.map +1 -0
  113. package/lib/commonjs/components/icons/Personalityprofile.js +21 -0
  114. package/lib/commonjs/components/icons/Personalityprofile.js.map +1 -0
  115. package/lib/commonjs/components/icons/Personalitytraits.js +21 -0
  116. package/lib/commonjs/components/icons/Personalitytraits.js.map +1 -0
  117. package/lib/commonjs/components/icons/Userpreferences.js +21 -0
  118. package/lib/commonjs/components/icons/Userpreferences.js.map +1 -0
  119. package/lib/commonjs/components/icons/index.js +84 -0
  120. package/lib/commonjs/components/icons/index.js.map +1 -0
  121. package/lib/commonjs/components/onboarding/OAuthWebView.js +134 -743
  122. package/lib/commonjs/components/onboarding/OAuthWebView.js.map +1 -1
  123. package/lib/commonjs/config/api.js +34 -0
  124. package/lib/commonjs/config/api.js.map +1 -0
  125. package/lib/commonjs/context/AuthContext.js +345 -0
  126. package/lib/commonjs/context/AuthContext.js.map +1 -0
  127. package/lib/commonjs/hooks/useConnectedAccounts.js +111 -0
  128. package/lib/commonjs/hooks/useConnectedAccounts.js.map +1 -0
  129. package/lib/commonjs/hooks/useConnections.js +120 -125
  130. package/lib/commonjs/hooks/useConnections.js.map +1 -1
  131. package/lib/commonjs/hooks/useUserConnections.js +148 -0
  132. package/lib/commonjs/hooks/useUserConnections.js.map +1 -0
  133. package/lib/commonjs/index.js +149 -27
  134. package/lib/commonjs/index.js.map +1 -1
  135. package/lib/commonjs/services/apiClient.js +302 -0
  136. package/lib/commonjs/services/apiClient.js.map +1 -0
  137. package/lib/commonjs/services/authService.js +935 -0
  138. package/lib/commonjs/services/authService.js.map +1 -0
  139. package/lib/commonjs/services/biometricPinService.js +184 -0
  140. package/lib/commonjs/services/biometricPinService.js.map +1 -0
  141. package/lib/commonjs/services/connectedAccountsService.js +268 -0
  142. package/lib/commonjs/services/connectedAccountsService.js.map +1 -0
  143. package/lib/commonjs/services/googleAuthService.js +268 -0
  144. package/lib/commonjs/services/googleAuthService.js.map +1 -0
  145. package/lib/commonjs/services/imageCompressionService.js +260 -0
  146. package/lib/commonjs/services/imageCompressionService.js.map +1 -0
  147. package/lib/commonjs/services/jwtStorageService.js +256 -0
  148. package/lib/commonjs/services/jwtStorageService.js.map +1 -0
  149. package/lib/commonjs/services/mobileTrainingService.js +185 -0
  150. package/lib/commonjs/services/mobileTrainingService.js.map +1 -0
  151. package/lib/commonjs/services/pinEncryptionService.js +84 -0
  152. package/lib/commonjs/services/pinEncryptionService.js.map +1 -0
  153. package/lib/commonjs/services/pinStorageUtils.js +105 -0
  154. package/lib/commonjs/services/pinStorageUtils.js.map +1 -0
  155. package/lib/commonjs/services/platformAuthService.js +956 -722
  156. package/lib/commonjs/services/platformAuthService.js.map +1 -1
  157. package/lib/commonjs/services/storageService.js +404 -0
  158. package/lib/commonjs/services/storageService.js.map +1 -0
  159. package/lib/commonjs/services/trainingApiHelpers.js +73 -0
  160. package/lib/commonjs/services/trainingApiHelpers.js.map +1 -0
  161. package/lib/commonjs/services/userConnectionsService.js +486 -0
  162. package/lib/commonjs/services/userConnectionsService.js.map +1 -0
  163. package/lib/commonjs/services/youtubeMigrationService.js +415 -0
  164. package/lib/commonjs/services/youtubeMigrationService.js.map +1 -0
  165. package/lib/commonjs/theme/index.js +249 -0
  166. package/lib/commonjs/theme/index.js.map +1 -0
  167. package/lib/commonjs/utils/eventUtils.js +288 -0
  168. package/lib/commonjs/utils/eventUtils.js.map +1 -0
  169. package/lib/commonjs/utils/haptics.js +66 -0
  170. package/lib/commonjs/utils/haptics.js.map +1 -0
  171. package/lib/commonjs/utils/imagePreloader.js +6 -0
  172. package/lib/commonjs/utils/imagePreloader.js.map +1 -0
  173. package/lib/module/api/index.js +72 -0
  174. package/lib/module/api/index.js.map +1 -1
  175. package/lib/module/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
  176. package/lib/module/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  177. package/lib/module/assets/icons/Facebookicon.png +0 -0
  178. package/lib/module/assets/icons/Gmail.png +0 -0
  179. package/lib/module/assets/icons/Linkedinicon.png +0 -0
  180. package/lib/module/assets/icons/Redditicon.png +0 -0
  181. package/lib/module/assets/icons/YouTubeicon2.png +0 -0
  182. package/lib/module/assets/icons/YouTubeicon3.png +0 -0
  183. package/lib/module/assets/icons/farcaster.png +0 -0
  184. package/lib/module/assets/icons/instagram.png +0 -0
  185. package/lib/module/assets/icons/pinterest.png +0 -0
  186. package/lib/module/assets/icons/swerv_logo.png +0 -0
  187. package/lib/module/assets/icons/twitter.jpg +0 -0
  188. package/lib/module/assets/images/Checkbox.svg +3 -0
  189. package/lib/module/assets/images/EnochE.svg +19 -0
  190. package/lib/module/assets/images/Enochicon1.png +0 -0
  191. package/lib/module/assets/images/Face_ID_logo.png +0 -0
  192. package/lib/module/assets/images/Facebookicon.png +0 -0
  193. package/lib/module/assets/images/Gmail.png +0 -0
  194. package/lib/module/assets/images/Googlelogo.png +0 -0
  195. package/lib/module/assets/images/Linkedinicon.png +0 -0
  196. package/lib/module/assets/images/Onairoslogo.png +0 -0
  197. package/lib/module/assets/images/Personalityprofile.svg +3 -0
  198. package/lib/module/assets/images/Personalitytraits.svg +3 -0
  199. package/lib/module/assets/images/Redditicon.png +0 -0
  200. package/lib/module/assets/images/Userpreferences.svg +3 -0
  201. package/lib/module/assets/images/YouTubeicon3.png +0 -0
  202. package/lib/module/assets/images/arrow.svg +20 -0
  203. package/lib/module/assets/images/basicproficon.svg +43 -0
  204. package/lib/module/assets/images/basicprofile.svg +3 -0
  205. package/lib/module/assets/images/checkmark.svg +4 -0
  206. package/lib/module/assets/images/contentanalysis.svg +3 -0
  207. package/lib/module/assets/images/contenticon.svg +23 -0
  208. package/lib/module/assets/images/persona1.png +0 -0
  209. package/lib/module/assets/images/persona2.png +0 -0
  210. package/lib/module/assets/images/persona3.png +0 -0
  211. package/lib/module/assets/images/persona4.png +0 -0
  212. package/lib/module/assets/images/persona5.png +0 -0
  213. package/lib/module/assets/images/personalityicon.svg +18 -0
  214. package/lib/module/assets/images/x-close.svg +3 -0
  215. package/lib/module/components/BodyText.js +20 -0
  216. package/lib/module/components/BodyText.js.map +1 -0
  217. package/lib/module/components/BrandMark.js +37 -0
  218. package/lib/module/components/BrandMark.js.map +1 -0
  219. package/lib/module/components/CodeInput.js +23 -0
  220. package/lib/module/components/CodeInput.js.map +1 -0
  221. package/lib/module/components/EmailInput.js +23 -0
  222. package/lib/module/components/EmailInput.js.map +1 -0
  223. package/lib/module/components/ExistingUserDataConfirmation.js +465 -0
  224. package/lib/module/components/ExistingUserDataConfirmation.js.map +1 -0
  225. package/lib/module/components/GoogleButton.js +48 -0
  226. package/lib/module/components/GoogleButton.js.map +1 -0
  227. package/lib/module/components/HeadingGroup.js +36 -0
  228. package/lib/module/components/HeadingGroup.js.map +1 -0
  229. package/lib/module/components/ModalHeader.js +92 -0
  230. package/lib/module/components/ModalHeader.js.map +1 -0
  231. package/lib/module/components/ModalSheet.js +34 -0
  232. package/lib/module/components/ModalSheet.js.map +1 -0
  233. package/lib/module/components/Onairos.js +1 -3
  234. package/lib/module/components/Onairos.js.map +1 -1
  235. package/lib/module/components/OnairosButton.js +172 -192
  236. package/lib/module/components/OnairosButton.js.map +1 -1
  237. package/lib/module/components/OnairosSignInButton.js +160 -0
  238. package/lib/module/components/OnairosSignInButton.js.map +1 -0
  239. package/lib/module/components/Overlay.js +5 -5
  240. package/lib/module/components/Overlay.js.map +1 -1
  241. package/lib/module/components/PersonaImage.js +53 -0
  242. package/lib/module/components/PersonaImage.js.map +1 -0
  243. package/lib/module/components/PersonaLoadingScreen.js +148 -0
  244. package/lib/module/components/PersonaLoadingScreen.js.map +1 -0
  245. package/lib/module/components/PersonalizationConsentScreen.js +309 -0
  246. package/lib/module/components/PersonalizationConsentScreen.js.map +1 -0
  247. package/lib/module/components/PinCreationScreen.js +386 -0
  248. package/lib/module/components/PinCreationScreen.js.map +1 -0
  249. package/lib/module/components/PinInput.js +283 -120
  250. package/lib/module/components/PinInput.js.map +1 -1
  251. package/lib/module/components/PlatformConnectorsStep.js +820 -0
  252. package/lib/module/components/PlatformConnectorsStep.js.map +1 -0
  253. package/lib/module/components/PlatformToggle.js +173 -0
  254. package/lib/module/components/PlatformToggle.js.map +1 -0
  255. package/lib/module/components/PrimaryButton.js +172 -0
  256. package/lib/module/components/PrimaryButton.js.map +1 -0
  257. package/lib/module/components/SignInMatchAnimation.js +189 -0
  258. package/lib/module/components/SignInMatchAnimation.js.map +1 -0
  259. package/lib/module/components/SignInStep.js +171 -0
  260. package/lib/module/components/SignInStep.js.map +1 -0
  261. package/lib/module/components/TrainingModal.js +809 -565
  262. package/lib/module/components/TrainingModal.js.map +1 -1
  263. package/lib/module/components/UniversalOnboarding.js +2307 -1284
  264. package/lib/module/components/UniversalOnboarding.js.map +1 -1
  265. package/lib/module/components/VerificationStep.js +146 -0
  266. package/lib/module/components/VerificationStep.js.map +1 -0
  267. package/lib/module/components/WelcomeScreen.js +378 -0
  268. package/lib/module/components/WelcomeScreen.js.map +1 -0
  269. package/lib/module/components/icons/Basicproficon.js +30 -0
  270. package/lib/module/components/icons/Basicproficon.js.map +1 -0
  271. package/lib/module/components/icons/Basicprofile.js +14 -0
  272. package/lib/module/components/icons/Basicprofile.js.map +1 -0
  273. package/lib/module/components/icons/Checkbox.js +14 -0
  274. package/lib/module/components/icons/Checkbox.js.map +1 -0
  275. package/lib/module/components/icons/Checkmark.js +20 -0
  276. package/lib/module/components/icons/Checkmark.js.map +1 -0
  277. package/lib/module/components/icons/Contentanalysis.js +14 -0
  278. package/lib/module/components/icons/Contentanalysis.js.map +1 -0
  279. package/lib/module/components/icons/Contenticon.js +32 -0
  280. package/lib/module/components/icons/Contenticon.js.map +1 -0
  281. package/lib/module/components/icons/EnochE.js +34 -0
  282. package/lib/module/components/icons/EnochE.js.map +1 -0
  283. package/lib/module/components/icons/Personalityicon.js +23 -0
  284. package/lib/module/components/icons/Personalityicon.js.map +1 -0
  285. package/lib/module/components/icons/Personalityprofile.js +14 -0
  286. package/lib/module/components/icons/Personalityprofile.js.map +1 -0
  287. package/lib/module/components/icons/Personalitytraits.js +14 -0
  288. package/lib/module/components/icons/Personalitytraits.js.map +1 -0
  289. package/lib/module/components/icons/Userpreferences.js +14 -0
  290. package/lib/module/components/icons/Userpreferences.js.map +1 -0
  291. package/lib/module/components/icons/index.js +13 -0
  292. package/lib/module/components/icons/index.js.map +1 -0
  293. package/lib/module/components/onboarding/OAuthWebView.js +136 -744
  294. package/lib/module/components/onboarding/OAuthWebView.js.map +1 -1
  295. package/lib/module/config/api.js +26 -0
  296. package/lib/module/config/api.js.map +1 -0
  297. package/lib/module/context/AuthContext.js +335 -0
  298. package/lib/module/context/AuthContext.js.map +1 -0
  299. package/lib/module/hooks/useConnectedAccounts.js +106 -0
  300. package/lib/module/hooks/useConnectedAccounts.js.map +1 -0
  301. package/lib/module/hooks/useConnections.js +119 -125
  302. package/lib/module/hooks/useConnections.js.map +1 -1
  303. package/lib/module/hooks/useUserConnections.js +140 -0
  304. package/lib/module/hooks/useUserConnections.js.map +1 -0
  305. package/lib/module/index.js +51 -15
  306. package/lib/module/index.js.map +1 -1
  307. package/lib/module/services/apiClient.js +298 -0
  308. package/lib/module/services/apiClient.js.map +1 -0
  309. package/lib/module/services/authService.js +905 -0
  310. package/lib/module/services/authService.js.map +1 -0
  311. package/lib/module/services/biometricPinService.js +173 -0
  312. package/lib/module/services/biometricPinService.js.map +1 -0
  313. package/lib/module/services/connectedAccountsService.js +255 -0
  314. package/lib/module/services/connectedAccountsService.js.map +1 -0
  315. package/lib/module/services/googleAuthService.js +258 -0
  316. package/lib/module/services/googleAuthService.js.map +1 -0
  317. package/lib/module/services/imageCompressionService.js +250 -0
  318. package/lib/module/services/imageCompressionService.js.map +1 -0
  319. package/lib/module/services/jwtStorageService.js +239 -0
  320. package/lib/module/services/jwtStorageService.js.map +1 -0
  321. package/lib/module/services/mobileTrainingService.js +172 -0
  322. package/lib/module/services/mobileTrainingService.js.map +1 -0
  323. package/lib/module/services/pinEncryptionService.js +75 -0
  324. package/lib/module/services/pinEncryptionService.js.map +1 -0
  325. package/lib/module/services/pinStorageUtils.js +93 -0
  326. package/lib/module/services/pinStorageUtils.js.map +1 -0
  327. package/lib/module/services/platformAuthService.js +943 -704
  328. package/lib/module/services/platformAuthService.js.map +1 -1
  329. package/lib/module/services/storageService.js +383 -0
  330. package/lib/module/services/storageService.js.map +1 -0
  331. package/lib/module/services/trainingApiHelpers.js +67 -0
  332. package/lib/module/services/trainingApiHelpers.js.map +1 -0
  333. package/lib/module/services/userConnectionsService.js +476 -0
  334. package/lib/module/services/userConnectionsService.js.map +1 -0
  335. package/lib/module/services/youtubeMigrationService.js +404 -0
  336. package/lib/module/services/youtubeMigrationService.js.map +1 -0
  337. package/lib/module/theme/index.js +244 -0
  338. package/lib/module/theme/index.js.map +1 -0
  339. package/lib/module/utils/eventUtils.js +270 -0
  340. package/lib/module/utils/eventUtils.js.map +1 -0
  341. package/lib/module/utils/haptics.js +59 -0
  342. package/lib/module/utils/haptics.js.map +1 -0
  343. package/lib/module/utils/imagePreloader.js +3 -0
  344. package/lib/module/utils/imagePreloader.js.map +1 -0
  345. package/lib/typescript/api/index.d.ts +8 -0
  346. package/lib/typescript/api/index.d.ts.map +1 -1
  347. package/lib/typescript/components/BodyText.d.ts +10 -0
  348. package/lib/typescript/components/BodyText.d.ts.map +1 -0
  349. package/lib/typescript/components/BrandMark.d.ts +11 -0
  350. package/lib/typescript/components/BrandMark.d.ts.map +1 -0
  351. package/lib/typescript/components/CodeInput.d.ts +10 -0
  352. package/lib/typescript/components/CodeInput.d.ts.map +1 -0
  353. package/lib/typescript/components/EmailInput.d.ts +8 -0
  354. package/lib/typescript/components/EmailInput.d.ts.map +1 -0
  355. package/lib/typescript/components/ExistingUserDataConfirmation.d.ts +12 -0
  356. package/lib/typescript/components/ExistingUserDataConfirmation.d.ts.map +1 -0
  357. package/lib/typescript/components/GoogleButton.d.ts +11 -0
  358. package/lib/typescript/components/GoogleButton.d.ts.map +1 -0
  359. package/lib/typescript/components/HeadingGroup.d.ts +11 -0
  360. package/lib/typescript/components/HeadingGroup.d.ts.map +1 -0
  361. package/lib/typescript/components/ModalHeader.d.ts +11 -0
  362. package/lib/typescript/components/ModalHeader.d.ts.map +1 -0
  363. package/lib/typescript/components/ModalSheet.d.ts +13 -0
  364. package/lib/typescript/components/ModalSheet.d.ts.map +1 -0
  365. package/lib/typescript/components/Onairos.d.ts.map +1 -1
  366. package/lib/typescript/components/OnairosButton.d.ts +29 -4
  367. package/lib/typescript/components/OnairosButton.d.ts.map +1 -1
  368. package/lib/typescript/components/OnairosSignInButton.d.ts +14 -0
  369. package/lib/typescript/components/OnairosSignInButton.d.ts.map +1 -0
  370. package/lib/typescript/components/PersonaImage.d.ts +8 -0
  371. package/lib/typescript/components/PersonaImage.d.ts.map +1 -0
  372. package/lib/typescript/components/PersonaLoadingScreen.d.ts +10 -0
  373. package/lib/typescript/components/PersonaLoadingScreen.d.ts.map +1 -0
  374. package/lib/typescript/components/PersonalizationConsentScreen.d.ts +10 -0
  375. package/lib/typescript/components/PersonalizationConsentScreen.d.ts.map +1 -0
  376. package/lib/typescript/components/PinCreationScreen.d.ts +10 -0
  377. package/lib/typescript/components/PinCreationScreen.d.ts.map +1 -0
  378. package/lib/typescript/components/PinInput.d.ts +11 -1
  379. package/lib/typescript/components/PinInput.d.ts.map +1 -1
  380. package/lib/typescript/components/PlatformConnectorsStep.d.ts +11 -0
  381. package/lib/typescript/components/PlatformConnectorsStep.d.ts.map +1 -0
  382. package/lib/typescript/components/PlatformToggle.d.ts +20 -0
  383. package/lib/typescript/components/PlatformToggle.d.ts.map +1 -0
  384. package/lib/typescript/components/PrimaryButton.d.ts +22 -0
  385. package/lib/typescript/components/PrimaryButton.d.ts.map +1 -0
  386. package/lib/typescript/components/SignInMatchAnimation.d.ts +9 -0
  387. package/lib/typescript/components/SignInMatchAnimation.d.ts.map +1 -0
  388. package/lib/typescript/components/SignInStep.d.ts +12 -0
  389. package/lib/typescript/components/SignInStep.d.ts.map +1 -0
  390. package/lib/typescript/components/TrainingModal.d.ts +12 -1
  391. package/lib/typescript/components/TrainingModal.d.ts.map +1 -1
  392. package/lib/typescript/components/UniversalOnboarding.d.ts +14 -1
  393. package/lib/typescript/components/UniversalOnboarding.d.ts.map +1 -1
  394. package/lib/typescript/components/VerificationStep.d.ts +13 -0
  395. package/lib/typescript/components/VerificationStep.d.ts.map +1 -0
  396. package/lib/typescript/components/WelcomeScreen.d.ts +9 -0
  397. package/lib/typescript/components/WelcomeScreen.d.ts.map +1 -0
  398. package/lib/typescript/components/icons/Basicproficon.d.ts +5 -0
  399. package/lib/typescript/components/icons/Basicproficon.d.ts.map +1 -0
  400. package/lib/typescript/components/icons/Basicprofile.d.ts +5 -0
  401. package/lib/typescript/components/icons/Basicprofile.d.ts.map +1 -0
  402. package/lib/typescript/components/icons/Checkbox.d.ts +5 -0
  403. package/lib/typescript/components/icons/Checkbox.d.ts.map +1 -0
  404. package/lib/typescript/components/icons/Checkmark.d.ts +5 -0
  405. package/lib/typescript/components/icons/Checkmark.d.ts.map +1 -0
  406. package/lib/typescript/components/icons/Contentanalysis.d.ts +5 -0
  407. package/lib/typescript/components/icons/Contentanalysis.d.ts.map +1 -0
  408. package/lib/typescript/components/icons/Contenticon.d.ts +5 -0
  409. package/lib/typescript/components/icons/Contenticon.d.ts.map +1 -0
  410. package/lib/typescript/components/icons/EnochE.d.ts +5 -0
  411. package/lib/typescript/components/icons/EnochE.d.ts.map +1 -0
  412. package/lib/typescript/components/icons/Personalityicon.d.ts +5 -0
  413. package/lib/typescript/components/icons/Personalityicon.d.ts.map +1 -0
  414. package/lib/typescript/components/icons/Personalityprofile.d.ts +5 -0
  415. package/lib/typescript/components/icons/Personalityprofile.d.ts.map +1 -0
  416. package/lib/typescript/components/icons/Personalitytraits.d.ts +5 -0
  417. package/lib/typescript/components/icons/Personalitytraits.d.ts.map +1 -0
  418. package/lib/typescript/components/icons/Userpreferences.d.ts +5 -0
  419. package/lib/typescript/components/icons/Userpreferences.d.ts.map +1 -0
  420. package/lib/typescript/components/icons/index.d.ts +12 -0
  421. package/lib/typescript/components/icons/index.d.ts.map +1 -0
  422. package/lib/typescript/components/onboarding/OAuthWebView.d.ts.map +1 -1
  423. package/lib/typescript/config/api.d.ts +24 -0
  424. package/lib/typescript/config/api.d.ts.map +1 -0
  425. package/lib/typescript/context/AuthContext.d.ts +34 -0
  426. package/lib/typescript/context/AuthContext.d.ts.map +1 -0
  427. package/lib/typescript/hooks/useConnectedAccounts.d.ts +11 -0
  428. package/lib/typescript/hooks/useConnectedAccounts.d.ts.map +1 -0
  429. package/lib/typescript/hooks/useConnections.d.ts +10 -5
  430. package/lib/typescript/hooks/useConnections.d.ts.map +1 -1
  431. package/lib/typescript/hooks/useUserConnections.d.ts +12 -0
  432. package/lib/typescript/hooks/useUserConnections.d.ts.map +1 -0
  433. package/lib/typescript/index.d.ts +24 -6
  434. package/lib/typescript/index.d.ts.map +1 -1
  435. package/lib/typescript/services/apiClient.d.ts +91 -0
  436. package/lib/typescript/services/apiClient.d.ts.map +1 -0
  437. package/lib/typescript/services/authService.d.ts +216 -0
  438. package/lib/typescript/services/authService.d.ts.map +1 -0
  439. package/lib/typescript/services/biometricPinService.d.ts +29 -0
  440. package/lib/typescript/services/biometricPinService.d.ts.map +1 -0
  441. package/lib/typescript/services/connectedAccountsService.d.ts +56 -0
  442. package/lib/typescript/services/connectedAccountsService.d.ts.map +1 -0
  443. package/lib/typescript/services/googleAuthService.d.ts +63 -0
  444. package/lib/typescript/services/googleAuthService.d.ts.map +1 -0
  445. package/lib/typescript/services/imageCompressionService.d.ts +37 -0
  446. package/lib/typescript/services/imageCompressionService.d.ts.map +1 -0
  447. package/lib/typescript/services/jwtStorageService.d.ts +86 -0
  448. package/lib/typescript/services/jwtStorageService.d.ts.map +1 -0
  449. package/lib/typescript/services/mobileTrainingService.d.ts +45 -0
  450. package/lib/typescript/services/mobileTrainingService.d.ts.map +1 -0
  451. package/lib/typescript/services/pinEncryptionService.d.ts +17 -0
  452. package/lib/typescript/services/pinEncryptionService.d.ts.map +1 -0
  453. package/lib/typescript/services/pinStorageUtils.d.ts +25 -0
  454. package/lib/typescript/services/pinStorageUtils.d.ts.map +1 -0
  455. package/lib/typescript/services/platformAuthService.d.ts +34 -109
  456. package/lib/typescript/services/platformAuthService.d.ts.map +1 -1
  457. package/lib/typescript/services/storageService.d.ts +128 -0
  458. package/lib/typescript/services/storageService.d.ts.map +1 -0
  459. package/lib/typescript/services/trainingApiHelpers.d.ts +38 -0
  460. package/lib/typescript/services/trainingApiHelpers.d.ts.map +1 -0
  461. package/lib/typescript/services/userConnectionsService.d.ts +90 -0
  462. package/lib/typescript/services/userConnectionsService.d.ts.map +1 -0
  463. package/lib/typescript/services/youtubeMigrationService.d.ts +12 -0
  464. package/lib/typescript/services/youtubeMigrationService.d.ts.map +1 -0
  465. package/lib/typescript/theme/index.d.ts +416 -0
  466. package/lib/typescript/theme/index.d.ts.map +1 -0
  467. package/lib/typescript/types/index.d.ts +39 -0
  468. package/lib/typescript/types/index.d.ts.map +1 -1
  469. package/lib/typescript/utils/eventUtils.d.ts +108 -0
  470. package/lib/typescript/utils/eventUtils.d.ts.map +1 -0
  471. package/lib/typescript/utils/haptics.d.ts +11 -0
  472. package/lib/typescript/utils/haptics.d.ts.map +1 -0
  473. package/lib/typescript/utils/imagePreloader.d.ts +2 -0
  474. package/lib/typescript/utils/imagePreloader.d.ts.map +1 -0
  475. package/package.json +158 -145
  476. package/src/api/index.ts +41 -0
  477. package/src/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
  478. package/src/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  479. package/src/assets/icons/Facebookicon.png +0 -0
  480. package/src/assets/icons/Gmail.png +0 -0
  481. package/src/assets/icons/Linkedinicon.png +0 -0
  482. package/src/assets/icons/Redditicon.png +0 -0
  483. package/src/assets/icons/YouTubeicon2.png +0 -0
  484. package/src/assets/icons/YouTubeicon3.png +0 -0
  485. package/src/assets/icons/farcaster.png +0 -0
  486. package/src/assets/icons/instagram.png +0 -0
  487. package/src/assets/icons/pinterest.png +0 -0
  488. package/src/assets/icons/swerv_logo.png +0 -0
  489. package/src/assets/icons/twitter.jpg +0 -0
  490. package/src/assets/images/Checkbox.svg +3 -0
  491. package/src/assets/images/EnochE.svg +19 -0
  492. package/src/assets/images/Enochicon1.png +0 -0
  493. package/src/assets/images/Face_ID_logo.png +0 -0
  494. package/src/assets/images/Facebookicon.png +0 -0
  495. package/src/assets/images/Gmail.png +0 -0
  496. package/src/assets/images/Googlelogo.png +0 -0
  497. package/src/assets/images/Linkedinicon.png +0 -0
  498. package/src/assets/images/Onairoslogo.png +0 -0
  499. package/src/assets/images/Personalityprofile.svg +3 -0
  500. package/src/assets/images/Personalitytraits.svg +3 -0
  501. package/src/assets/images/Redditicon.png +0 -0
  502. package/src/assets/images/Userpreferences.svg +3 -0
  503. package/src/assets/images/YouTubeicon3.png +0 -0
  504. package/src/assets/images/arrow.svg +20 -0
  505. package/src/assets/images/basicproficon.svg +43 -0
  506. package/src/assets/images/basicprofile.svg +3 -0
  507. package/src/assets/images/checkmark.svg +4 -0
  508. package/src/assets/images/contentanalysis.svg +3 -0
  509. package/src/assets/images/contenticon.svg +23 -0
  510. package/src/assets/images/persona1.png +0 -0
  511. package/src/assets/images/persona2.png +0 -0
  512. package/src/assets/images/persona3.png +0 -0
  513. package/src/assets/images/persona4.png +0 -0
  514. package/src/assets/images/persona5.png +0 -0
  515. package/src/assets/images/personalityicon.svg +18 -0
  516. package/src/assets/images/x-close.svg +3 -0
  517. package/src/components/BodyText.tsx +33 -0
  518. package/src/components/BrandMark.tsx +62 -0
  519. package/src/components/CodeInput.tsx +32 -0
  520. package/src/components/EmailInput.tsx +31 -0
  521. package/src/components/ExistingUserDataConfirmation.tsx +507 -0
  522. package/src/components/GoogleButton.tsx +55 -0
  523. package/src/components/HeadingGroup.tsx +49 -0
  524. package/src/components/ModalHeader.tsx +125 -0
  525. package/src/components/ModalSheet.tsx +57 -0
  526. package/src/components/Onairos.tsx +422 -424
  527. package/src/components/OnairosButton.tsx +339 -359
  528. package/src/components/OnairosSignInButton.tsx +166 -0
  529. package/src/components/Overlay.tsx +506 -506
  530. package/src/components/PersonaImage.tsx +79 -0
  531. package/src/components/PersonaLoadingScreen.tsx +201 -0
  532. package/src/components/PersonalizationConsentScreen.tsx +410 -0
  533. package/src/components/PinCreationScreen.tsx +492 -0
  534. package/src/components/PinInput.tsx +555 -343
  535. package/src/components/PlatformConnectorsStep.tsx +892 -0
  536. package/src/components/PlatformToggle.tsx +226 -0
  537. package/src/components/PrimaryButton.tsx +214 -0
  538. package/src/components/SignInMatchAnimation.tsx +225 -0
  539. package/src/components/SignInStep.tsx +217 -0
  540. package/src/components/TrainingModal.tsx +1047 -737
  541. package/src/components/UniversalOnboarding.tsx +2888 -1820
  542. package/src/components/VerificationStep.tsx +198 -0
  543. package/src/components/WelcomeScreen.tsx +473 -0
  544. package/src/components/icons/Basicproficon.tsx +30 -0
  545. package/src/components/icons/Basicprofile.tsx +17 -0
  546. package/src/components/icons/Checkbox.tsx +17 -0
  547. package/src/components/icons/Checkmark.tsx +24 -0
  548. package/src/components/icons/Contentanalysis.tsx +17 -0
  549. package/src/components/icons/Contenticon.tsx +30 -0
  550. package/src/components/icons/EnochE.tsx +39 -0
  551. package/src/components/icons/Personalityicon.tsx +22 -0
  552. package/src/components/icons/Personalityprofile.tsx +17 -0
  553. package/src/components/icons/Personalitytraits.tsx +17 -0
  554. package/src/components/icons/Userpreferences.tsx +17 -0
  555. package/src/components/icons/index.ts +12 -0
  556. package/src/components/onboarding/OAuthWebView.tsx +232 -838
  557. package/src/config/api.ts +25 -0
  558. package/src/context/AuthContext.tsx +393 -0
  559. package/src/hooks/useConnectedAccounts.ts +139 -0
  560. package/src/hooks/useConnections.ts +129 -131
  561. package/src/hooks/useUserConnections.ts +166 -0
  562. package/src/index.ts +94 -49
  563. package/src/services/apiClient.ts +337 -0
  564. package/src/services/authService.ts +1008 -0
  565. package/src/services/biometricPinService.ts +193 -0
  566. package/src/services/connectedAccountsService.ts +290 -0
  567. package/src/services/googleAuthService.ts +279 -0
  568. package/src/services/imageCompressionService.ts +303 -0
  569. package/src/services/jwtStorageService.ts +257 -0
  570. package/src/services/mobileTrainingService.ts +204 -0
  571. package/src/services/pinEncryptionService.ts +76 -0
  572. package/src/services/pinStorageUtils.ts +97 -0
  573. package/src/services/platformAuthService.ts +1346 -1113
  574. package/src/services/storageService.ts +452 -0
  575. package/src/services/trainingApiHelpers.ts +67 -0
  576. package/src/services/userConnectionsService.ts +557 -0
  577. package/src/services/youtubeMigrationService.ts +454 -0
  578. package/src/theme/index.ts +239 -0
  579. package/src/types/index.ts +265 -238
  580. package/src/utils/eventUtils.ts +303 -0
  581. package/src/utils/haptics.ts +59 -0
  582. package/src/utils/imagePreloader.ts +2 -0
  583. package/README.md +0 -375
  584. package/lib/commonjs/assets/images/email.png +0 -0
  585. package/lib/commonjs/assets/images/linkedin.png +0 -0
  586. package/lib/commonjs/assets/images/reddit.png +0 -0
  587. package/lib/commonjs/assets/images/youtube.png +0 -0
  588. package/lib/commonjs/components/UniversalOnboarding.tsx.new +0 -455
  589. package/lib/module/assets/images/email.png +0 -0
  590. package/lib/module/assets/images/linkedin.png +0 -0
  591. package/lib/module/assets/images/reddit.png +0 -0
  592. package/lib/module/assets/images/youtube.png +0 -0
  593. package/lib/module/components/UniversalOnboarding.tsx.new +0 -455
  594. package/src/assets/images/email.png +0 -0
  595. package/src/assets/images/linkedin.png +0 -0
  596. package/src/assets/images/reddit.png +0 -0
  597. package/src/assets/images/youtube.png +0 -0
  598. package/src/components/UniversalOnboarding.tsx.new +0 -455
@@ -0,0 +1,935 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.verifyToken = exports.updateUserOnboardedStatus = exports.saveOnairosUsername = exports.saveEnochToken = exports.saveAuthToken = exports.saveAdminStatus = exports.removeAuthToken = exports.isAuthenticated = exports.isAdminEmail = exports.getUserProfile = exports.getOnairosUsername = exports.getEventTimer = exports.getEnochToken = exports.getAuthToken = exports.getAdminStatus = exports.ensureAuthentication = exports.debugAuthStorage = exports.createOrUpdateProfile = exports.clearAllAuthTokens = exports.checkEnochOnairosConnection = exports.authenticateWithOnairosSignIn = exports.authenticateWithOnairos = exports.authenticateWithApple = void 0;
7
+ var _asyncStorage = _interopRequireDefault(require("@react-native-async-storage/async-storage"));
8
+ var _api = require("../config/api");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ // API base URL
12
+ const API_BASE_URL = _api.API_CONFIG.BASE_URL;
13
+
14
+ // Interface for authentication responses
15
+
16
+ // Interface for Apple authentication payload
17
+
18
+ /**
19
+ * Interface for the timer response from backend
20
+ */
21
+
22
+ /**
23
+ * Interface for the profile response from backend
24
+ */
25
+
26
+ /**
27
+ * Interface for creating/updating user profile
28
+ */
29
+
30
+ /**
31
+ * Authenticate with Apple
32
+ * @param appleAuthData Data from Apple authentication
33
+ * @returns Authentication response with token and user data
34
+ */
35
+ /**
36
+ * Authenticate with Onairos (similar to Apple authentication)
37
+ * @param onairosAuthData Data from Onairos authentication
38
+ * @returns Authentication response with token and user data
39
+ */
40
+ const authenticateWithOnairos = async onairosAuthData => {
41
+ try {
42
+ console.log('🔑 Authenticating with Onairos...');
43
+
44
+ // For Onairos, we already have the JWT token from TrainingModal
45
+ // We just need to create a proper user object like Apple does
46
+
47
+ // Store the token in all the expected locations
48
+ // CRITICAL FIX: Store as Onairos token (OAuth gives Onairos JWT)
49
+ const {
50
+ TokenType,
51
+ storeJWT
52
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('./jwtStorageService')));
53
+ await storeJWT(TokenType.ONAIROS, onairosAuthData.token);
54
+
55
+ // Extract username from email or use stored username
56
+ const storedUsername = await _asyncStorage.default.getItem('onairos_username');
57
+ const userName = storedUsername || onairosAuthData.email.split('@')[0] || 'Onairos User';
58
+
59
+ // Store username and email
60
+ await _asyncStorage.default.setItem('onairos_username', userName);
61
+ await _asyncStorage.default.setItem('user_email', onairosAuthData.email);
62
+ console.log('🔑 Onairos auth token stored:', `${onairosAuthData.token.substring(0, 20)}...`);
63
+ console.log('👤 User info:', {
64
+ email: onairosAuthData.email,
65
+ username: userName
66
+ });
67
+ return {
68
+ token: onairosAuthData.token,
69
+ user: {
70
+ id: Date.now().toString(),
71
+ // Generate a unique ID
72
+ name: userName,
73
+ email: onairosAuthData.email,
74
+ profilePicture: ''
75
+ },
76
+ onairos: {
77
+ hasConnectedOnairos: true,
78
+ onairosUserId: Date.now().toString(),
79
+ lastConnectedAt: new Date().toISOString()
80
+ }
81
+ };
82
+ } catch (error) {
83
+ console.error('❌ Onairos authentication error:', error);
84
+ throw error;
85
+ }
86
+ };
87
+
88
+ /**
89
+ * Authenticate with Onairos using the standardized /login/signin endpoint
90
+ * @param credentials Email and password for Onairos sign-in
91
+ * @returns Authentication response with token and user data
92
+ */
93
+ exports.authenticateWithOnairos = authenticateWithOnairos;
94
+ const authenticateWithOnairosSignIn = async credentials => {
95
+ try {
96
+ console.log('🔑 Signing in with Onairos via /login/signin endpoint...');
97
+ const response = await fetch(`${API_BASE_URL}/login/signin`, {
98
+ method: 'POST',
99
+ headers: (0, _api.getApiHeaders)(),
100
+ body: JSON.stringify(credentials)
101
+ });
102
+ if (!response.ok) {
103
+ const errorData = await response.json();
104
+ throw new Error(errorData.error || 'Onairos sign-in failed');
105
+ }
106
+ const authData = await response.json();
107
+ console.log('✅ Onairos sign-in successful');
108
+
109
+ // Check for authentication token first - this is the most critical part
110
+ if (!authData.token) {
111
+ throw new Error('No authentication token returned from Onairos sign-in');
112
+ }
113
+
114
+ // Log if result field is missing or unexpected (but don't fail)
115
+ if (!authData.result || authData.result !== "User logged in successfully" && authData.result !== "User created successfully") {
116
+ console.warn('🔑 Onairos sign-in: Unexpected or missing result field:', authData.result);
117
+ console.warn('🔑 Onairos sign-in: Proceeding with authentication since token is present');
118
+ }
119
+
120
+ // CRITICAL FIX: Store as Onairos token (sign-in gives Onairos JWT)
121
+ const {
122
+ TokenType,
123
+ storeJWT
124
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('./jwtStorageService')));
125
+ await storeJWT(TokenType.ONAIROS, authData.token);
126
+
127
+ // Store username from standardized response
128
+ if (authData.username) {
129
+ await _asyncStorage.default.setItem('onairos_username', authData.username);
130
+ }
131
+ await _asyncStorage.default.setItem('user_email', credentials.email);
132
+ console.log('🔑 Onairos sign-in token stored:', `${authData.token.substring(0, 20)}...`);
133
+ return {
134
+ token: authData.token,
135
+ user: {
136
+ id: Date.now().toString(),
137
+ name: authData.username,
138
+ email: credentials.email,
139
+ profilePicture: ''
140
+ },
141
+ onairos: {
142
+ hasConnectedOnairos: true,
143
+ onairosUserId: Date.now().toString(),
144
+ lastConnectedAt: new Date().toISOString()
145
+ }
146
+ };
147
+ } catch (error) {
148
+ console.error('❌ Onairos sign-in error:', error);
149
+ throw error;
150
+ }
151
+ };
152
+ exports.authenticateWithOnairosSignIn = authenticateWithOnairosSignIn;
153
+ const authenticateWithApple = async appleAuthData => {
154
+ try {
155
+ const userName = appleAuthData.fullName ? `${appleAuthData.fullName.givenName || ''} ${appleAuthData.fullName.familyName || ''}`.trim() : 'Onairos User';
156
+
157
+ // Call the Apple authentication endpoint - backend should return proper Enoch JWT
158
+ console.log('🍎 Authenticating with Apple via backend...');
159
+ const appleAuthResponse = await fetch(`${API_BASE_URL}/enoch/auth/apple`, {
160
+ method: 'POST',
161
+ headers: (0, _api.getApiHeaders)(),
162
+ body: JSON.stringify({
163
+ identity_token: appleAuthData.identityToken,
164
+ nonce: appleAuthData.nonce,
165
+ user_identifier: appleAuthData.user,
166
+ // Always present
167
+ email: appleAuthData.email,
168
+ // Can be null if user hides email
169
+ name: userName
170
+ })
171
+ });
172
+ if (!appleAuthResponse.ok) {
173
+ const errorData = await appleAuthResponse.json();
174
+ throw new Error(errorData.error || 'Apple authentication failed');
175
+ }
176
+ const authData = await appleAuthResponse.json();
177
+ console.log('✅ Apple authentication successful');
178
+
179
+ // CRITICAL: Log detailed Apple authentication response for comparison
180
+ console.log('🍎 ===== APPLE AUTHENTICATION DETAILS =====');
181
+ console.log('🍎 Response status:', appleAuthResponse.status);
182
+ console.log('🍎 Response ok:', appleAuthResponse.ok);
183
+ console.log('🍎 Response result field:', authData.result);
184
+ console.log('🍎 Response token present:', !!authData.token);
185
+ console.log('🍎 Response username present:', !!authData.username);
186
+ if (authData.token) {
187
+ console.log('🍎 Token preview:', `${authData.token.substring(0, 30)}...${authData.token.substring(authData.token.length - 10)}`);
188
+ console.log('🍎 Token length:', authData.token.length);
189
+ console.log('🍎 Token parts count:', authData.token.split('.').length);
190
+ }
191
+ console.log('🍎 ===== END APPLE AUTHENTICATION DETAILS =====');
192
+
193
+ // Check for authentication token first - this is the most critical part
194
+ if (!authData.token) {
195
+ throw new Error('No authentication token returned from Apple auth');
196
+ }
197
+
198
+ // Log if result field is missing or unexpected (but don't fail)
199
+ if (!authData.result || authData.result !== "User logged in successfully" && authData.result !== "User created successfully") {
200
+ console.warn('🍎 Apple auth: Unexpected or missing result field:', authData.result);
201
+ console.warn('🍎 Apple auth: Proceeding with authentication since token is present');
202
+ }
203
+
204
+ // CRITICAL FIX: Store as Onairos token (Apple sign-in gives Onairos JWT)
205
+ console.log('💾 Storing Apple-returned token as Onairos JWT');
206
+ const {
207
+ TokenType,
208
+ storeJWT
209
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('./jwtStorageService')));
210
+ await storeJWT(TokenType.ONAIROS, authData.token);
211
+
212
+ // Store username from standardized response
213
+ if (authData.username) {
214
+ await _asyncStorage.default.setItem('onairos_username', authData.username);
215
+ }
216
+
217
+ // Store the Apple user's email if available, otherwise use Apple user identifier
218
+ if (appleAuthData.email) {
219
+ await _asyncStorage.default.setItem('user_email', appleAuthData.email);
220
+ console.log('📧 Apple user email stored:', appleAuthData.email);
221
+ } else {
222
+ // Apple user chose "Hide My Email" - use Apple user identifier as fallback
223
+ const fallbackEmail = `apple_${appleAuthData.user}@privaterelay.apple.com`;
224
+ await _asyncStorage.default.setItem('user_email', fallbackEmail);
225
+ console.log('📧 Apple user email hidden - using fallback:', fallbackEmail);
226
+ }
227
+ console.log('🔑 Apple auth token stored:', `${authData.token.substring(0, 20)}...`);
228
+
229
+ // DEBUG: Log Apple token details to compare with Onairos tokens
230
+ console.log('🔍 DEBUG: Apple token details:');
231
+ console.log('🔍 DEBUG: Token length:', authData.token.length);
232
+ console.log('🔍 DEBUG: Token parts:', authData.token.split('.').length);
233
+ console.log('🔍 DEBUG: Token preview:', `${authData.token.substring(0, 50)}...`);
234
+ try {
235
+ const tokenParts = authData.token.split('.');
236
+ if (tokenParts.length === 3) {
237
+ console.log('🔍 DEBUG: Apple JWT header (base64):', tokenParts[0].substring(0, 30) + '...');
238
+ console.log('🔍 DEBUG: Apple JWT payload (base64):', tokenParts[1].substring(0, 30) + '...');
239
+ console.log('🔍 DEBUG: Apple JWT signature (base64):', tokenParts[2].substring(0, 30) + '...');
240
+ }
241
+ } catch (decodeError) {
242
+ console.log('🔍 DEBUG: Could not analyze Apple JWT structure:', decodeError);
243
+ }
244
+ return {
245
+ token: authData.token,
246
+ user: {
247
+ id: Date.now().toString(),
248
+ // Generate a unique ID since standardized response doesn't include user.id
249
+ name: authData.username,
250
+ email: appleAuthData.email || '',
251
+ profilePicture: ''
252
+ },
253
+ onairos: authData.onairos || {
254
+ hasConnectedOnairos: false,
255
+ // Default to false for fresh Apple users
256
+ onairosUserId: undefined,
257
+ lastConnectedAt: undefined
258
+ }
259
+ };
260
+ } catch (error) {
261
+ console.error('❌ Apple authentication error:', error);
262
+
263
+ // CRITICAL: Log detailed Apple authentication error
264
+ console.error('🚨 ===== APPLE AUTHENTICATION ERROR =====');
265
+ console.error('🚨 Error type:', error instanceof Error ? error.constructor.name : typeof error);
266
+ console.error('🚨 Error message:', error instanceof Error ? error.message : String(error));
267
+ console.error('🚨 Error stack:', error instanceof Error ? error.stack : 'No stack trace');
268
+ console.error('🚨 Apple auth data provided:', JSON.stringify(appleAuthData, null, 2));
269
+ console.error('🚨 ===== END APPLE ERROR DETAILS =====');
270
+ throw error;
271
+ }
272
+ };
273
+
274
+ /**
275
+ * Save authentication token
276
+ * @param token JWT token
277
+ */
278
+ exports.authenticateWithApple = authenticateWithApple;
279
+ const saveAuthToken = async token => {
280
+ try {
281
+ await _asyncStorage.default.setItem('auth_token', token);
282
+ } catch (error) {
283
+ console.error('Error saving auth token:', error);
284
+ throw error;
285
+ }
286
+ };
287
+
288
+ /**
289
+ * Debug function to check all auth-related storage
290
+ */
291
+ exports.saveAuthToken = saveAuthToken;
292
+ const debugAuthStorage = async () => {
293
+ console.log('🔍 [AUTH STORAGE DEBUG] Checking all auth-related storage:');
294
+ const authToken = await _asyncStorage.default.getItem('auth_token');
295
+ const onairosJwt = await _asyncStorage.default.getItem('onairos_jwt_token');
296
+ const enochToken = await _asyncStorage.default.getItem('enoch_token');
297
+ const userEmail = await _asyncStorage.default.getItem('user_email');
298
+ const onairosUsername = await _asyncStorage.default.getItem('onairos_username');
299
+ const authMethod = await _asyncStorage.default.getItem('auth_method');
300
+ console.log('🔑 auth_token:', authToken ? `"${authToken}"` : 'null');
301
+ console.log('🔑 onairos_jwt_token:', onairosJwt ? `"${onairosJwt}"` : 'null');
302
+ console.log('🔑 enoch_token:', enochToken ? `"${enochToken}"` : 'null');
303
+ console.log('🔑 user_email:', userEmail ? `"${userEmail}"` : 'null');
304
+ console.log('🔑 onairos_username:', onairosUsername ? `"${onairosUsername}"` : 'null');
305
+ console.log('🔑 auth_method:', authMethod ? `"${authMethod}"` : 'null');
306
+
307
+ // Check if any token is actually an email
308
+ const allTokens = [authToken, onairosJwt, enochToken];
309
+ allTokens.forEach((token, index) => {
310
+ const tokenNames = ['auth_token', 'onairos_jwt_token', 'enoch_token'];
311
+ if (token && token.includes('@') && token.includes('.')) {
312
+ console.error(`❌ [AUTH STORAGE DEBUG] ${tokenNames[index]} contains email instead of JWT: "${token}"`);
313
+ }
314
+ });
315
+ };
316
+
317
+ /**
318
+ * Clear all auth tokens and start fresh
319
+ */
320
+ exports.debugAuthStorage = debugAuthStorage;
321
+ const clearAllAuthTokens = async () => {
322
+ console.log('🧹 [AUTH DEBUG] Clearing all auth tokens via centralized service...');
323
+
324
+ // CRITICAL FIX: Clear all JWT token types
325
+ const {
326
+ clearAllJWT
327
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('./jwtStorageService')));
328
+ await clearAllJWT();
329
+
330
+ // Clear other auth-related data
331
+ await _asyncStorage.default.multiRemove(['user_email', 'onairos_username', 'auth_method']);
332
+ console.log('✅ [AUTH DEBUG] All auth tokens and data cleared');
333
+ };
334
+
335
+ /**
336
+ * Get saved authentication token - CRITICAL FIX: Try all token types
337
+ * @returns Saved JWT token or null if not found
338
+ */
339
+ exports.clearAllAuthTokens = clearAllAuthTokens;
340
+ const getAuthToken = async () => {
341
+ try {
342
+ console.log('🔑 [AUTH DEBUG] Checking all available JWT tokens...');
343
+
344
+ // CRITICAL FIX: Try all token types in priority order
345
+ const {
346
+ TokenType,
347
+ getJWT
348
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('./jwtStorageService')));
349
+
350
+ // Try Onairos token first (most common for main app usage)
351
+ let token = await getJWT(TokenType.ONAIROS);
352
+ if (token) {
353
+ console.log('✅ [AUTH DEBUG] Found Onairos JWT token:', `${token.substring(0, 20)}...`);
354
+ return token;
355
+ }
356
+
357
+ // Try Enoch token second (for Enoch-specific routes)
358
+ token = await getJWT(TokenType.ENOCH);
359
+ if (token) {
360
+ console.log('✅ [AUTH DEBUG] Found Enoch JWT token:', `${token.substring(0, 20)}...`);
361
+ return token;
362
+ }
363
+
364
+ // Try Auth token last (for context-specific flows)
365
+ token = await getJWT(TokenType.AUTH);
366
+ if (token) {
367
+ console.log('✅ [AUTH DEBUG] Found Auth token:', `${token.substring(0, 20)}...`);
368
+ return token;
369
+ }
370
+ console.warn('❌ [AUTH DEBUG] No valid JWT tokens found in any storage location');
371
+ return null;
372
+ } catch (error) {
373
+ console.error('❌ [AUTH DEBUG] Error during token retrieval:', error);
374
+ return null;
375
+ }
376
+ };
377
+
378
+ /**
379
+ * Remove authentication token (logout)
380
+ */
381
+ exports.getAuthToken = getAuthToken;
382
+ const removeAuthToken = async () => {
383
+ try {
384
+ await _asyncStorage.default.removeItem('auth_token');
385
+ } catch (error) {
386
+ console.error('Error removing auth token:', error);
387
+ }
388
+ };
389
+
390
+ /**
391
+ * Validate if user is properly authenticated
392
+ * @returns boolean indicating if user has valid authentication
393
+ */
394
+ exports.removeAuthToken = removeAuthToken;
395
+ const isAuthenticated = async () => {
396
+ try {
397
+ const token = await getAuthToken();
398
+ return token !== null && token.length > 50;
399
+ } catch (error) {
400
+ console.error('❌ [AUTH VALIDATION] Error checking authentication status:', error);
401
+ return false;
402
+ }
403
+ };
404
+
405
+ /**
406
+ * Ensure authentication is available before making API calls
407
+ * @param apiName - Name of the API being called (for logging)
408
+ * @returns boolean indicating if authentication is available
409
+ */
410
+ exports.isAuthenticated = isAuthenticated;
411
+ const ensureAuthentication = async apiName => {
412
+ const isAuth = await isAuthenticated();
413
+ if (!isAuth) {
414
+ console.warn(`⚠️ [${apiName}] No valid authentication available - API call may return limited data`);
415
+ } else {
416
+ console.log(`✅ [${apiName}] Authentication validated for API call`);
417
+ }
418
+ return isAuth;
419
+ };
420
+
421
+ /**
422
+ * Get saved Enoch authentication token specifically
423
+ * @returns Saved Enoch JWT token or null if not found
424
+ */
425
+ exports.ensureAuthentication = ensureAuthentication;
426
+ const getEnochToken = async () => {
427
+ try {
428
+ return await _asyncStorage.default.getItem('enoch_token');
429
+ } catch (error) {
430
+ console.error('Error getting Enoch token:', error);
431
+ return null;
432
+ }
433
+ };
434
+
435
+ /**
436
+ * Save Enoch authentication token specifically
437
+ * @param token Enoch JWT token
438
+ */
439
+ exports.getEnochToken = getEnochToken;
440
+ const saveEnochToken = async token => {
441
+ try {
442
+ await _asyncStorage.default.setItem('enoch_token', token);
443
+ await _asyncStorage.default.setItem('auth_token', token); // Also save as general auth token
444
+ } catch (error) {
445
+ console.error('Error saving Enoch token:', error);
446
+ throw error;
447
+ }
448
+ };
449
+
450
+ /**
451
+ * Verify token with backend
452
+ * @returns Boolean indicating if token is valid
453
+ */
454
+ exports.saveEnochToken = saveEnochToken;
455
+ const verifyToken = async () => {
456
+ try {
457
+ const token = await getAuthToken();
458
+ if (!token) {
459
+ console.warn('🔒 [TOKEN VERIFY] No token available for verification');
460
+ return false;
461
+ }
462
+ console.log('🔒 [TOKEN VERIFY] Verifying token with backend...');
463
+ console.log('🔒 [TOKEN VERIFY] Token preview:', `${token.substring(0, 20)}...`);
464
+ const response = await fetch(`${API_BASE_URL}/api/auth/verify`, {
465
+ method: 'GET',
466
+ headers: (0, _api.getAuthHeaders)(token)
467
+ });
468
+ console.log('🔒 [TOKEN VERIFY] Verification response status:', response.status);
469
+ if (response.ok) {
470
+ console.log('✅ [TOKEN VERIFY] Token is valid');
471
+ return true;
472
+ } else {
473
+ const errorText = await response.text();
474
+ console.warn('❌ [TOKEN VERIFY] Token verification failed:', response.status, errorText);
475
+ return false;
476
+ }
477
+ } catch (error) {
478
+ console.error('❌ [TOKEN VERIFY] Token verification error:', error);
479
+ return false;
480
+ }
481
+ };
482
+
483
+ /**
484
+ * Get user profile from backend using stored token
485
+ * Note: This endpoint doesn't exist as GET, so we'll try to fetch via other means
486
+ * @returns User profile data
487
+ */
488
+ exports.verifyToken = verifyToken;
489
+ const getUserProfile = async () => {
490
+ try {
491
+ var _token;
492
+ // Try to get the Enoch token first, then fall back to general auth token
493
+ let token = await getEnochToken();
494
+ if (!token) {
495
+ token = await getAuthToken();
496
+ }
497
+ if (!token) {
498
+ throw new Error('No authentication token found');
499
+ }
500
+ console.log('🔍 Attempting to fetch user profile with token:', ((_token = token) === null || _token === void 0 ? void 0 : _token.substring(0, 20)) + '...');
501
+
502
+ // First try to get profile from Enoch user endpoint
503
+ try {
504
+ console.log('🔍 Attempting to fetch user profile from Enoch endpoint...');
505
+ const response = await fetch(`${API_BASE_URL}/enoch/user/profile`, {
506
+ method: 'GET',
507
+ headers: (0, _api.getAuthHeaders)(token)
508
+ });
509
+ if (response.ok) {
510
+ const userData = await response.json();
511
+ console.log('✅ User profile fetched successfully from Enoch endpoint');
512
+
513
+ // Use JWT user ID if available, otherwise use the response ID
514
+ const userId = userData.id || userData._id;
515
+
516
+ // Transform the response to match expected format
517
+ return {
518
+ id: userId,
519
+ name: userData.name || 'Onairos User',
520
+ email: userData.email,
521
+ description: userData.bio || userData.description || '',
522
+ photoUrl: userData.photoUrl || userData.photo_url || '',
523
+ profilePicture: userData.photoUrl || userData.photo_url || '',
524
+ interests: userData.interests || [],
525
+ verified: userData.verified || false,
526
+ createdAt: userData.createdAt || new Date().toISOString(),
527
+ updatedAt: userData.updatedAt || new Date().toISOString(),
528
+ onboarded: userData.onboarded || false
529
+ };
530
+ } else {
531
+ console.warn('⚠️ Enoch profile endpoint failed:', response.status, await response.text());
532
+ }
533
+ } catch (enochError) {
534
+ console.warn('⚠️ Error with Enoch profile endpoint:', enochError);
535
+ }
536
+
537
+ // Try to create a profile using the POST endpoint (since that's what exists)
538
+ try {
539
+ console.log('🔍 Attempting to create/get profile via POST endpoint...');
540
+
541
+ // Get user data from AsyncStorage (no JWT decoding needed)
542
+ const storedUserEmail = await _asyncStorage.default.getItem('user_email');
543
+ const storedUserName = await _asyncStorage.default.getItem('onairos_username');
544
+ const userEmail = storedUserEmail || 'user@example.com';
545
+ const userName = storedUserName || 'Onairos User';
546
+ console.log('📧 Using stored user email:', userEmail);
547
+ console.log('👤 Using stored user name:', userName);
548
+
549
+ // Try to create/update profile with real user info
550
+ const response = await fetch(`${API_BASE_URL}/api/user/profile`, {
551
+ method: 'PUT',
552
+ // ✅ FIXED: Changed from POST to PUT to match backend
553
+ headers: (0, _api.getAuthHeaders)(token),
554
+ body: JSON.stringify({
555
+ name: userName,
556
+ bio: 'Welcome to Onairos!',
557
+ interests: [],
558
+ photo_url: ''
559
+ })
560
+ });
561
+ if (response.ok) {
562
+ const profileData = await response.json();
563
+ console.log('✅ Profile created/updated successfully:', profileData);
564
+ if (profileData.success && profileData.profile) {
565
+ // Use the response ID from the profile creation
566
+ const userId = profileData.profile.id;
567
+ return {
568
+ id: userId,
569
+ name: profileData.profile.name,
570
+ email: userEmail,
571
+ description: profileData.profile.bio || '',
572
+ photoUrl: profileData.profile.photo_url || '',
573
+ profilePicture: profileData.profile.photo_url || '',
574
+ interests: [],
575
+ verified: false,
576
+ createdAt: profileData.profile.updated_at || new Date().toISOString(),
577
+ updatedAt: profileData.profile.updated_at || new Date().toISOString(),
578
+ onboarded: false
579
+ };
580
+ }
581
+ } else {
582
+ const errorText = await response.text();
583
+ console.warn('⚠️ Profile creation endpoint failed:', response.status, errorText);
584
+ }
585
+ } catch (createError) {
586
+ console.warn('⚠️ Error with profile creation endpoint:', createError);
587
+ }
588
+
589
+ // If all endpoints fail, throw an error instead of returning fallback
590
+ console.error('❌ All profile endpoints failed and no JWT user ID available');
591
+ throw new Error('Unable to determine user ID from authentication token');
592
+ } catch (error) {
593
+ console.error('Error fetching user profile:', error);
594
+ throw error;
595
+ }
596
+ };
597
+
598
+ /**
599
+ * Create or update user profile
600
+ * @param profileData Profile data to create/update
601
+ * @returns Profile response from backend
602
+ */
603
+ exports.getUserProfile = getUserProfile;
604
+ const createOrUpdateProfile = async profileData => {
605
+ try {
606
+ const token = await getAuthToken();
607
+ if (!token) {
608
+ throw new Error('No authentication token found');
609
+ }
610
+ const response = await fetch(`${API_BASE_URL}/api/user/profile`, {
611
+ method: 'PUT',
612
+ // ✅ FIXED: Changed from POST to PUT to match backend
613
+ headers: (0, _api.getAuthHeaders)(token),
614
+ body: JSON.stringify(profileData)
615
+ });
616
+ if (!response.ok) {
617
+ const errorData = await response.json();
618
+ throw new Error(errorData.message || 'Failed to create/update profile');
619
+ }
620
+ return await response.json();
621
+ } catch (error) {
622
+ console.error('Error creating/updating profile:', error);
623
+ throw error;
624
+ }
625
+ };
626
+
627
+ /**
628
+ * Update user's onboarded status
629
+ * @returns Promise that resolves when update is successful
630
+ */
631
+ exports.createOrUpdateProfile = createOrUpdateProfile;
632
+ const updateUserOnboardedStatus = async () => {
633
+ try {
634
+ const token = await getAuthToken();
635
+ if (!token) {
636
+ throw new Error('No authentication token found');
637
+ }
638
+ const response = await fetch(`${API_BASE_URL}/enoch/auth/update-onboarded`, {
639
+ method: 'POST',
640
+ headers: (0, _api.getAuthHeaders)(token),
641
+ body: JSON.stringify({
642
+ onboarded: true
643
+ })
644
+ });
645
+ if (!response.ok) {
646
+ throw new Error('Failed to update onboarded status');
647
+ }
648
+ } catch (error) {
649
+ console.error('Error updating onboarded status:', error);
650
+ throw error;
651
+ }
652
+ };
653
+
654
+ /**
655
+ * Fetch the current timer status from the backend
656
+ * @returns Timer information including expiry and duration
657
+ */
658
+ exports.updateUserOnboardedStatus = updateUserOnboardedStatus;
659
+ const getEventTimer = async () => {
660
+ try {
661
+ const token = await getAuthToken();
662
+ console.log('🕐 Starting timer fetch. Token available:', !!token);
663
+
664
+ // Enhanced token logging for debugging
665
+ if (token) {
666
+ console.log('🔑 [TOKEN DEBUG] Token preview:', `${token.substring(0, 20)}...`);
667
+ console.log('🔑 [TOKEN DEBUG] Token length:', token.length);
668
+
669
+ // Check if token looks like a JWT
670
+ const tokenParts = token.split('.');
671
+ if (tokenParts.length === 3) {
672
+ console.log('🔑 [TOKEN DEBUG] Token appears to be a valid JWT format (3 parts)');
673
+ } else {
674
+ console.warn('🔑 [TOKEN DEBUG] Token does not appear to be JWT format (expected 3 parts, got', tokenParts.length, ')');
675
+ }
676
+ } else {
677
+ console.warn('🔑 [TOKEN DEBUG] No token available - will only try public endpoint');
678
+ }
679
+
680
+ // Try authenticated endpoint first if we have a token
681
+ if (token) {
682
+ try {
683
+ console.log('🕐 Fetching timer from authenticated endpoint:', `${API_BASE_URL}/enoch/event/timer`);
684
+ const response = await fetch(`${API_BASE_URL}/enoch/event/timer`, {
685
+ method: 'GET',
686
+ headers: (0, _api.getAuthHeaders)(token)
687
+ });
688
+ if (response.ok) {
689
+ const timerData = await response.json();
690
+ console.log('✅ Timer data received from authenticated endpoint:', timerData);
691
+
692
+ // Handle both direct timer data and wrapped response formats
693
+ if (timerData.success !== undefined) {
694
+ // If wrapped in success object, extract the timer data
695
+ return timerData.success ? timerData : timerData;
696
+ } else {
697
+ // Direct timer data format
698
+ return timerData;
699
+ }
700
+ } else {
701
+ const errorText = await response.text();
702
+ console.warn('⚠️ Authenticated timer endpoint failed:', response.status, errorText);
703
+
704
+ // Enhanced logging for token-related issues
705
+ if (response.status === 403) {
706
+ console.error('🚫 [TOKEN ERROR] 403 Forbidden - Token validation failed');
707
+ console.error('🔍 [TOKEN ERROR] This likely indicates an invalid or expired token');
708
+ console.error('🔍 [TOKEN ERROR] Token used:', token ? `${token.substring(0, 20)}...` : 'No token');
709
+ console.error('🔍 [TOKEN ERROR] Full error response:', errorText);
710
+
711
+ // Try to parse error response for more details
712
+ try {
713
+ const errorData = JSON.parse(errorText);
714
+ if (errorData.error) {
715
+ console.error('🔍 [TOKEN ERROR] Backend error message:', errorData.error);
716
+ }
717
+ if (errorData.code) {
718
+ console.error('🔍 [TOKEN ERROR] Error code:', errorData.code);
719
+ }
720
+ } catch (parseError) {
721
+ console.error('🔍 [TOKEN ERROR] Could not parse error response');
722
+ }
723
+ } else if (response.status === 401) {
724
+ console.error('🚫 [AUTH ERROR] 401 Unauthorized - Missing or invalid authentication');
725
+ console.error('🔍 [AUTH ERROR] Token used:', token ? `${token.substring(0, 20)}...` : 'No token');
726
+ } else {
727
+ console.error('🚫 [API ERROR] Unexpected error status:', response.status);
728
+ console.error('🔍 [API ERROR] Token used:', token ? `${token.substring(0, 20)}...` : 'No token');
729
+ }
730
+ }
731
+ } catch (authError) {
732
+ console.warn('⚠️ Error with authenticated timer endpoint:', authError);
733
+ console.error('🔍 [NETWORK ERROR] Failed to reach authenticated timer endpoint');
734
+ console.error('🔍 [NETWORK ERROR] Token used:', token ? `${token.substring(0, 20)}...` : 'No token');
735
+ console.error('🔍 [NETWORK ERROR] Error details:', authError instanceof Error ? authError.message : authError);
736
+ }
737
+ }
738
+
739
+ // Try public endpoint as fallback
740
+ try {
741
+ console.log('🕐 Fetching timer from public endpoint:', `${API_BASE_URL}/enoch/event/public/timer`);
742
+ const response = await fetch(`${API_BASE_URL}/enoch/event/public/timer`, {
743
+ method: 'GET',
744
+ headers: (0, _api.getApiHeaders)()
745
+ });
746
+ if (response.ok) {
747
+ const timerData = await response.json();
748
+ console.log('✅ Timer data received from public endpoint:', timerData);
749
+
750
+ // Handle both direct timer data and wrapped response formats
751
+ if (timerData.success !== undefined) {
752
+ // If wrapped in success object, extract the timer data
753
+ return timerData.success ? timerData : timerData;
754
+ } else {
755
+ // Direct timer data format
756
+ return timerData;
757
+ }
758
+ } else {
759
+ const errorText = await response.text();
760
+ console.warn('⚠️ Public timer endpoint failed:', response.status, errorText);
761
+ }
762
+ } catch (publicError) {
763
+ console.warn('⚠️ Error with public timer endpoint:', publicError);
764
+ }
765
+
766
+ // If both API endpoints fail, provide a realistic fallback timer
767
+ console.log('⚠️ Both timer endpoints failed, using fallback timer');
768
+ const nowInSeconds = Math.floor(Date.now() / 1000);
769
+ const eventTimeInSeconds = nowInSeconds + 3600; // 1 hour from now
770
+ const secondsRemaining = eventTimeInSeconds - nowInSeconds;
771
+
772
+ // Calculate countdown components
773
+ const days = Math.floor(secondsRemaining / (24 * 60 * 60));
774
+ const hours = Math.floor(secondsRemaining % (24 * 60 * 60) / (60 * 60));
775
+ const minutes = Math.floor(secondsRemaining % (60 * 60) / 60);
776
+ const seconds = Math.floor(secondsRemaining % 60);
777
+ return {
778
+ timerExpiry: eventTimeInSeconds,
779
+ timerDuration: 3600,
780
+ isReady: false,
781
+ testMode: true,
782
+ countdown: {
783
+ total: secondsRemaining,
784
+ days,
785
+ hours,
786
+ minutes,
787
+ seconds
788
+ }
789
+ };
790
+ } catch (error) {
791
+ console.error('❌ Error in getEventTimer:', error);
792
+
793
+ // Final fallback timer (30 minutes)
794
+ const nowInSeconds = Math.floor(Date.now() / 1000);
795
+ const eventTimeInSeconds = nowInSeconds + 1800; // 30 minutes from now
796
+
797
+ return {
798
+ timerExpiry: eventTimeInSeconds,
799
+ timerDuration: 1800,
800
+ isReady: false,
801
+ testMode: true,
802
+ countdown: {
803
+ total: 1800,
804
+ days: 0,
805
+ hours: 0,
806
+ minutes: 30,
807
+ seconds: 0
808
+ }
809
+ };
810
+ }
811
+ };
812
+
813
+ /**
814
+ * Check if a user email has admin privileges
815
+ * @param email User email to check
816
+ * @returns True if user is an admin
817
+ */
818
+ exports.getEventTimer = getEventTimer;
819
+ const isAdminEmail = email => {
820
+ if (!email) {
821
+ console.log('🔒 [Admin Check] No email provided');
822
+ return false;
823
+ }
824
+ const adminEmails = ['nicholas.berry@onairos.uk', 'zion.darko@onairos.uk', 'admin@enoch.events', 'admin@onairos.uk'];
825
+ const isAdmin = adminEmails.includes(email.toLowerCase());
826
+ if (isAdmin) {
827
+ console.log('🔑 [Admin Check] Admin access granted for:', email);
828
+ } else {
829
+ console.log('🚫 [Admin Check] No admin access for:', email);
830
+ }
831
+ return isAdmin;
832
+ };
833
+
834
+ /**
835
+ * Get the current admin status from AsyncStorage
836
+ * This could be used for caching admin status between sessions
837
+ */
838
+ exports.isAdminEmail = isAdminEmail;
839
+ const getAdminStatus = async () => {
840
+ try {
841
+ const adminStatus = await _asyncStorage.default.getItem('user_admin_status');
842
+ return adminStatus === 'true';
843
+ } catch (error) {
844
+ console.error('Error getting admin status:', error);
845
+ return false;
846
+ }
847
+ };
848
+
849
+ /**
850
+ * Save admin status to AsyncStorage
851
+ * @param isAdmin Whether the user is an admin
852
+ */
853
+ exports.getAdminStatus = getAdminStatus;
854
+ const saveAdminStatus = async isAdmin => {
855
+ try {
856
+ await _asyncStorage.default.setItem('user_admin_status', isAdmin.toString());
857
+ } catch (error) {
858
+ console.error('Error saving admin status:', error);
859
+ }
860
+ };
861
+
862
+ /**
863
+ * Get stored Onairos username for API calls
864
+ * This is used for data connector APIs (Reddit, etc.) that need the username
865
+ * @returns Stored username or null if not found
866
+ */
867
+ exports.saveAdminStatus = saveAdminStatus;
868
+ const getOnairosUsername = async () => {
869
+ try {
870
+ return await _asyncStorage.default.getItem('onairos_username');
871
+ } catch (error) {
872
+ console.error('Error getting Onairos username:', error);
873
+ return null;
874
+ }
875
+ };
876
+
877
+ /**
878
+ * Save Onairos username for API calls
879
+ * @param username Username to store
880
+ */
881
+ exports.getOnairosUsername = getOnairosUsername;
882
+ const saveOnairosUsername = async username => {
883
+ try {
884
+ await _asyncStorage.default.setItem('onairos_username', username);
885
+ } catch (error) {
886
+ console.error('Error saving Onairos username:', error);
887
+ }
888
+ };
889
+
890
+ /**
891
+ * Check if user has connected Onairos to Enoch before
892
+ * This checks for actual usage/training data, not just account existence
893
+ * @param userIdentifier - Email, username, or user ID to check
894
+ * @returns Promise<boolean> - true if user has connected Onairos features to Enoch
895
+ */
896
+ exports.saveOnairosUsername = saveOnairosUsername;
897
+ const checkEnochOnairosConnection = async userIdentifier => {
898
+ try {
899
+ console.log('🔍 Checking Enoch-Onairos connection status for:', userIdentifier);
900
+ const token = await getAuthToken();
901
+ const response = await fetch(`${API_BASE_URL}/enoch/user/onairos-connection-status`, {
902
+ method: 'POST',
903
+ headers: token ? (0, _api.getAuthHeaders)(token) : (0, _api.getApiHeaders)(),
904
+ body: JSON.stringify({
905
+ userIdentifier,
906
+ // Can be email, username, or user ID
907
+ checkType: 'comprehensive' // Check training data, connected platforms, etc.
908
+ })
909
+ });
910
+ if (response.ok) {
911
+ const data = await response.json();
912
+ console.log('✅ Enoch-Onairos connection status:', data);
913
+ return {
914
+ hasConnectedOnairos: data.hasConnectedOnairos || false,
915
+ onairosUserId: data.onairosUserId,
916
+ lastConnectedAt: data.lastConnectedAt,
917
+ connectionDetails: data.connectionDetails
918
+ };
919
+ } else {
920
+ console.warn('⚠️ Connection status check failed:', response.status);
921
+ // Default to false if API call fails
922
+ return {
923
+ hasConnectedOnairos: false
924
+ };
925
+ }
926
+ } catch (error) {
927
+ console.error('❌ Error checking Enoch-Onairos connection:', error);
928
+ // Default to false if error occurs
929
+ return {
930
+ hasConnectedOnairos: false
931
+ };
932
+ }
933
+ };
934
+ exports.checkEnochOnairosConnection = checkEnochOnairosConnection;
935
+ //# sourceMappingURL=authService.js.map