@onairos/react-native 3.1.12 → 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 (604) 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/apiKeyService.js +8 -9
  138. package/lib/commonjs/services/apiKeyService.js.map +1 -1
  139. package/lib/commonjs/services/authService.js +935 -0
  140. package/lib/commonjs/services/authService.js.map +1 -0
  141. package/lib/commonjs/services/biometricPinService.js +184 -0
  142. package/lib/commonjs/services/biometricPinService.js.map +1 -0
  143. package/lib/commonjs/services/connectedAccountsService.js +268 -0
  144. package/lib/commonjs/services/connectedAccountsService.js.map +1 -0
  145. package/lib/commonjs/services/googleAuthService.js +268 -0
  146. package/lib/commonjs/services/googleAuthService.js.map +1 -0
  147. package/lib/commonjs/services/imageCompressionService.js +260 -0
  148. package/lib/commonjs/services/imageCompressionService.js.map +1 -0
  149. package/lib/commonjs/services/jwtStorageService.js +256 -0
  150. package/lib/commonjs/services/jwtStorageService.js.map +1 -0
  151. package/lib/commonjs/services/mobileTrainingService.js +185 -0
  152. package/lib/commonjs/services/mobileTrainingService.js.map +1 -0
  153. package/lib/commonjs/services/pinEncryptionService.js +84 -0
  154. package/lib/commonjs/services/pinEncryptionService.js.map +1 -0
  155. package/lib/commonjs/services/pinStorageUtils.js +105 -0
  156. package/lib/commonjs/services/pinStorageUtils.js.map +1 -0
  157. package/lib/commonjs/services/platformAuthService.js +956 -722
  158. package/lib/commonjs/services/platformAuthService.js.map +1 -1
  159. package/lib/commonjs/services/storageService.js +404 -0
  160. package/lib/commonjs/services/storageService.js.map +1 -0
  161. package/lib/commonjs/services/trainingApiHelpers.js +73 -0
  162. package/lib/commonjs/services/trainingApiHelpers.js.map +1 -0
  163. package/lib/commonjs/services/userConnectionsService.js +486 -0
  164. package/lib/commonjs/services/userConnectionsService.js.map +1 -0
  165. package/lib/commonjs/services/youtubeMigrationService.js +415 -0
  166. package/lib/commonjs/services/youtubeMigrationService.js.map +1 -0
  167. package/lib/commonjs/theme/index.js +249 -0
  168. package/lib/commonjs/theme/index.js.map +1 -0
  169. package/lib/commonjs/utils/eventUtils.js +288 -0
  170. package/lib/commonjs/utils/eventUtils.js.map +1 -0
  171. package/lib/commonjs/utils/haptics.js +66 -0
  172. package/lib/commonjs/utils/haptics.js.map +1 -0
  173. package/lib/commonjs/utils/imagePreloader.js +6 -0
  174. package/lib/commonjs/utils/imagePreloader.js.map +1 -0
  175. package/lib/module/api/index.js +72 -0
  176. package/lib/module/api/index.js.map +1 -1
  177. package/lib/module/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
  178. package/lib/module/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  179. package/lib/module/assets/icons/Facebookicon.png +0 -0
  180. package/lib/module/assets/icons/Gmail.png +0 -0
  181. package/lib/module/assets/icons/Linkedinicon.png +0 -0
  182. package/lib/module/assets/icons/Redditicon.png +0 -0
  183. package/lib/module/assets/icons/YouTubeicon2.png +0 -0
  184. package/lib/module/assets/icons/YouTubeicon3.png +0 -0
  185. package/lib/module/assets/icons/farcaster.png +0 -0
  186. package/lib/module/assets/icons/instagram.png +0 -0
  187. package/lib/module/assets/icons/pinterest.png +0 -0
  188. package/lib/module/assets/icons/swerv_logo.png +0 -0
  189. package/lib/module/assets/icons/twitter.jpg +0 -0
  190. package/lib/module/assets/images/Checkbox.svg +3 -0
  191. package/lib/module/assets/images/EnochE.svg +19 -0
  192. package/lib/module/assets/images/Enochicon1.png +0 -0
  193. package/lib/module/assets/images/Face_ID_logo.png +0 -0
  194. package/lib/module/assets/images/Facebookicon.png +0 -0
  195. package/lib/module/assets/images/Gmail.png +0 -0
  196. package/lib/module/assets/images/Googlelogo.png +0 -0
  197. package/lib/module/assets/images/Linkedinicon.png +0 -0
  198. package/lib/module/assets/images/Onairoslogo.png +0 -0
  199. package/lib/module/assets/images/Personalityprofile.svg +3 -0
  200. package/lib/module/assets/images/Personalitytraits.svg +3 -0
  201. package/lib/module/assets/images/Redditicon.png +0 -0
  202. package/lib/module/assets/images/Userpreferences.svg +3 -0
  203. package/lib/module/assets/images/YouTubeicon3.png +0 -0
  204. package/lib/module/assets/images/arrow.svg +20 -0
  205. package/lib/module/assets/images/basicproficon.svg +43 -0
  206. package/lib/module/assets/images/basicprofile.svg +3 -0
  207. package/lib/module/assets/images/checkmark.svg +4 -0
  208. package/lib/module/assets/images/contentanalysis.svg +3 -0
  209. package/lib/module/assets/images/contenticon.svg +23 -0
  210. package/lib/module/assets/images/persona1.png +0 -0
  211. package/lib/module/assets/images/persona2.png +0 -0
  212. package/lib/module/assets/images/persona3.png +0 -0
  213. package/lib/module/assets/images/persona4.png +0 -0
  214. package/lib/module/assets/images/persona5.png +0 -0
  215. package/lib/module/assets/images/personalityicon.svg +18 -0
  216. package/lib/module/assets/images/x-close.svg +3 -0
  217. package/lib/module/components/BodyText.js +20 -0
  218. package/lib/module/components/BodyText.js.map +1 -0
  219. package/lib/module/components/BrandMark.js +37 -0
  220. package/lib/module/components/BrandMark.js.map +1 -0
  221. package/lib/module/components/CodeInput.js +23 -0
  222. package/lib/module/components/CodeInput.js.map +1 -0
  223. package/lib/module/components/EmailInput.js +23 -0
  224. package/lib/module/components/EmailInput.js.map +1 -0
  225. package/lib/module/components/ExistingUserDataConfirmation.js +465 -0
  226. package/lib/module/components/ExistingUserDataConfirmation.js.map +1 -0
  227. package/lib/module/components/GoogleButton.js +48 -0
  228. package/lib/module/components/GoogleButton.js.map +1 -0
  229. package/lib/module/components/HeadingGroup.js +36 -0
  230. package/lib/module/components/HeadingGroup.js.map +1 -0
  231. package/lib/module/components/ModalHeader.js +92 -0
  232. package/lib/module/components/ModalHeader.js.map +1 -0
  233. package/lib/module/components/ModalSheet.js +34 -0
  234. package/lib/module/components/ModalSheet.js.map +1 -0
  235. package/lib/module/components/Onairos.js +1 -3
  236. package/lib/module/components/Onairos.js.map +1 -1
  237. package/lib/module/components/OnairosButton.js +172 -192
  238. package/lib/module/components/OnairosButton.js.map +1 -1
  239. package/lib/module/components/OnairosSignInButton.js +160 -0
  240. package/lib/module/components/OnairosSignInButton.js.map +1 -0
  241. package/lib/module/components/Overlay.js +5 -5
  242. package/lib/module/components/Overlay.js.map +1 -1
  243. package/lib/module/components/PersonaImage.js +53 -0
  244. package/lib/module/components/PersonaImage.js.map +1 -0
  245. package/lib/module/components/PersonaLoadingScreen.js +148 -0
  246. package/lib/module/components/PersonaLoadingScreen.js.map +1 -0
  247. package/lib/module/components/PersonalizationConsentScreen.js +309 -0
  248. package/lib/module/components/PersonalizationConsentScreen.js.map +1 -0
  249. package/lib/module/components/PinCreationScreen.js +386 -0
  250. package/lib/module/components/PinCreationScreen.js.map +1 -0
  251. package/lib/module/components/PinInput.js +283 -120
  252. package/lib/module/components/PinInput.js.map +1 -1
  253. package/lib/module/components/PlatformConnectorsStep.js +820 -0
  254. package/lib/module/components/PlatformConnectorsStep.js.map +1 -0
  255. package/lib/module/components/PlatformToggle.js +173 -0
  256. package/lib/module/components/PlatformToggle.js.map +1 -0
  257. package/lib/module/components/PrimaryButton.js +172 -0
  258. package/lib/module/components/PrimaryButton.js.map +1 -0
  259. package/lib/module/components/SignInMatchAnimation.js +189 -0
  260. package/lib/module/components/SignInMatchAnimation.js.map +1 -0
  261. package/lib/module/components/SignInStep.js +171 -0
  262. package/lib/module/components/SignInStep.js.map +1 -0
  263. package/lib/module/components/TrainingModal.js +809 -565
  264. package/lib/module/components/TrainingModal.js.map +1 -1
  265. package/lib/module/components/UniversalOnboarding.js +2307 -1284
  266. package/lib/module/components/UniversalOnboarding.js.map +1 -1
  267. package/lib/module/components/VerificationStep.js +146 -0
  268. package/lib/module/components/VerificationStep.js.map +1 -0
  269. package/lib/module/components/WelcomeScreen.js +378 -0
  270. package/lib/module/components/WelcomeScreen.js.map +1 -0
  271. package/lib/module/components/icons/Basicproficon.js +30 -0
  272. package/lib/module/components/icons/Basicproficon.js.map +1 -0
  273. package/lib/module/components/icons/Basicprofile.js +14 -0
  274. package/lib/module/components/icons/Basicprofile.js.map +1 -0
  275. package/lib/module/components/icons/Checkbox.js +14 -0
  276. package/lib/module/components/icons/Checkbox.js.map +1 -0
  277. package/lib/module/components/icons/Checkmark.js +20 -0
  278. package/lib/module/components/icons/Checkmark.js.map +1 -0
  279. package/lib/module/components/icons/Contentanalysis.js +14 -0
  280. package/lib/module/components/icons/Contentanalysis.js.map +1 -0
  281. package/lib/module/components/icons/Contenticon.js +32 -0
  282. package/lib/module/components/icons/Contenticon.js.map +1 -0
  283. package/lib/module/components/icons/EnochE.js +34 -0
  284. package/lib/module/components/icons/EnochE.js.map +1 -0
  285. package/lib/module/components/icons/Personalityicon.js +23 -0
  286. package/lib/module/components/icons/Personalityicon.js.map +1 -0
  287. package/lib/module/components/icons/Personalityprofile.js +14 -0
  288. package/lib/module/components/icons/Personalityprofile.js.map +1 -0
  289. package/lib/module/components/icons/Personalitytraits.js +14 -0
  290. package/lib/module/components/icons/Personalitytraits.js.map +1 -0
  291. package/lib/module/components/icons/Userpreferences.js +14 -0
  292. package/lib/module/components/icons/Userpreferences.js.map +1 -0
  293. package/lib/module/components/icons/index.js +13 -0
  294. package/lib/module/components/icons/index.js.map +1 -0
  295. package/lib/module/components/onboarding/OAuthWebView.js +136 -744
  296. package/lib/module/components/onboarding/OAuthWebView.js.map +1 -1
  297. package/lib/module/config/api.js +26 -0
  298. package/lib/module/config/api.js.map +1 -0
  299. package/lib/module/context/AuthContext.js +335 -0
  300. package/lib/module/context/AuthContext.js.map +1 -0
  301. package/lib/module/hooks/useConnectedAccounts.js +106 -0
  302. package/lib/module/hooks/useConnectedAccounts.js.map +1 -0
  303. package/lib/module/hooks/useConnections.js +119 -125
  304. package/lib/module/hooks/useConnections.js.map +1 -1
  305. package/lib/module/hooks/useUserConnections.js +140 -0
  306. package/lib/module/hooks/useUserConnections.js.map +1 -0
  307. package/lib/module/index.js +51 -15
  308. package/lib/module/index.js.map +1 -1
  309. package/lib/module/services/apiClient.js +298 -0
  310. package/lib/module/services/apiClient.js.map +1 -0
  311. package/lib/module/services/apiKeyService.js +8 -9
  312. package/lib/module/services/apiKeyService.js.map +1 -1
  313. package/lib/module/services/authService.js +905 -0
  314. package/lib/module/services/authService.js.map +1 -0
  315. package/lib/module/services/biometricPinService.js +173 -0
  316. package/lib/module/services/biometricPinService.js.map +1 -0
  317. package/lib/module/services/connectedAccountsService.js +255 -0
  318. package/lib/module/services/connectedAccountsService.js.map +1 -0
  319. package/lib/module/services/googleAuthService.js +258 -0
  320. package/lib/module/services/googleAuthService.js.map +1 -0
  321. package/lib/module/services/imageCompressionService.js +250 -0
  322. package/lib/module/services/imageCompressionService.js.map +1 -0
  323. package/lib/module/services/jwtStorageService.js +239 -0
  324. package/lib/module/services/jwtStorageService.js.map +1 -0
  325. package/lib/module/services/mobileTrainingService.js +172 -0
  326. package/lib/module/services/mobileTrainingService.js.map +1 -0
  327. package/lib/module/services/pinEncryptionService.js +75 -0
  328. package/lib/module/services/pinEncryptionService.js.map +1 -0
  329. package/lib/module/services/pinStorageUtils.js +93 -0
  330. package/lib/module/services/pinStorageUtils.js.map +1 -0
  331. package/lib/module/services/platformAuthService.js +943 -704
  332. package/lib/module/services/platformAuthService.js.map +1 -1
  333. package/lib/module/services/storageService.js +383 -0
  334. package/lib/module/services/storageService.js.map +1 -0
  335. package/lib/module/services/trainingApiHelpers.js +67 -0
  336. package/lib/module/services/trainingApiHelpers.js.map +1 -0
  337. package/lib/module/services/userConnectionsService.js +476 -0
  338. package/lib/module/services/userConnectionsService.js.map +1 -0
  339. package/lib/module/services/youtubeMigrationService.js +404 -0
  340. package/lib/module/services/youtubeMigrationService.js.map +1 -0
  341. package/lib/module/theme/index.js +244 -0
  342. package/lib/module/theme/index.js.map +1 -0
  343. package/lib/module/utils/eventUtils.js +270 -0
  344. package/lib/module/utils/eventUtils.js.map +1 -0
  345. package/lib/module/utils/haptics.js +59 -0
  346. package/lib/module/utils/haptics.js.map +1 -0
  347. package/lib/module/utils/imagePreloader.js +3 -0
  348. package/lib/module/utils/imagePreloader.js.map +1 -0
  349. package/lib/typescript/api/index.d.ts +8 -0
  350. package/lib/typescript/api/index.d.ts.map +1 -1
  351. package/lib/typescript/components/BodyText.d.ts +10 -0
  352. package/lib/typescript/components/BodyText.d.ts.map +1 -0
  353. package/lib/typescript/components/BrandMark.d.ts +11 -0
  354. package/lib/typescript/components/BrandMark.d.ts.map +1 -0
  355. package/lib/typescript/components/CodeInput.d.ts +10 -0
  356. package/lib/typescript/components/CodeInput.d.ts.map +1 -0
  357. package/lib/typescript/components/EmailInput.d.ts +8 -0
  358. package/lib/typescript/components/EmailInput.d.ts.map +1 -0
  359. package/lib/typescript/components/ExistingUserDataConfirmation.d.ts +12 -0
  360. package/lib/typescript/components/ExistingUserDataConfirmation.d.ts.map +1 -0
  361. package/lib/typescript/components/GoogleButton.d.ts +11 -0
  362. package/lib/typescript/components/GoogleButton.d.ts.map +1 -0
  363. package/lib/typescript/components/HeadingGroup.d.ts +11 -0
  364. package/lib/typescript/components/HeadingGroup.d.ts.map +1 -0
  365. package/lib/typescript/components/ModalHeader.d.ts +11 -0
  366. package/lib/typescript/components/ModalHeader.d.ts.map +1 -0
  367. package/lib/typescript/components/ModalSheet.d.ts +13 -0
  368. package/lib/typescript/components/ModalSheet.d.ts.map +1 -0
  369. package/lib/typescript/components/Onairos.d.ts.map +1 -1
  370. package/lib/typescript/components/OnairosButton.d.ts +29 -4
  371. package/lib/typescript/components/OnairosButton.d.ts.map +1 -1
  372. package/lib/typescript/components/OnairosSignInButton.d.ts +14 -0
  373. package/lib/typescript/components/OnairosSignInButton.d.ts.map +1 -0
  374. package/lib/typescript/components/PersonaImage.d.ts +8 -0
  375. package/lib/typescript/components/PersonaImage.d.ts.map +1 -0
  376. package/lib/typescript/components/PersonaLoadingScreen.d.ts +10 -0
  377. package/lib/typescript/components/PersonaLoadingScreen.d.ts.map +1 -0
  378. package/lib/typescript/components/PersonalizationConsentScreen.d.ts +10 -0
  379. package/lib/typescript/components/PersonalizationConsentScreen.d.ts.map +1 -0
  380. package/lib/typescript/components/PinCreationScreen.d.ts +10 -0
  381. package/lib/typescript/components/PinCreationScreen.d.ts.map +1 -0
  382. package/lib/typescript/components/PinInput.d.ts +11 -1
  383. package/lib/typescript/components/PinInput.d.ts.map +1 -1
  384. package/lib/typescript/components/PlatformConnectorsStep.d.ts +11 -0
  385. package/lib/typescript/components/PlatformConnectorsStep.d.ts.map +1 -0
  386. package/lib/typescript/components/PlatformToggle.d.ts +20 -0
  387. package/lib/typescript/components/PlatformToggle.d.ts.map +1 -0
  388. package/lib/typescript/components/PrimaryButton.d.ts +22 -0
  389. package/lib/typescript/components/PrimaryButton.d.ts.map +1 -0
  390. package/lib/typescript/components/SignInMatchAnimation.d.ts +9 -0
  391. package/lib/typescript/components/SignInMatchAnimation.d.ts.map +1 -0
  392. package/lib/typescript/components/SignInStep.d.ts +12 -0
  393. package/lib/typescript/components/SignInStep.d.ts.map +1 -0
  394. package/lib/typescript/components/TrainingModal.d.ts +12 -1
  395. package/lib/typescript/components/TrainingModal.d.ts.map +1 -1
  396. package/lib/typescript/components/UniversalOnboarding.d.ts +14 -1
  397. package/lib/typescript/components/UniversalOnboarding.d.ts.map +1 -1
  398. package/lib/typescript/components/VerificationStep.d.ts +13 -0
  399. package/lib/typescript/components/VerificationStep.d.ts.map +1 -0
  400. package/lib/typescript/components/WelcomeScreen.d.ts +9 -0
  401. package/lib/typescript/components/WelcomeScreen.d.ts.map +1 -0
  402. package/lib/typescript/components/icons/Basicproficon.d.ts +5 -0
  403. package/lib/typescript/components/icons/Basicproficon.d.ts.map +1 -0
  404. package/lib/typescript/components/icons/Basicprofile.d.ts +5 -0
  405. package/lib/typescript/components/icons/Basicprofile.d.ts.map +1 -0
  406. package/lib/typescript/components/icons/Checkbox.d.ts +5 -0
  407. package/lib/typescript/components/icons/Checkbox.d.ts.map +1 -0
  408. package/lib/typescript/components/icons/Checkmark.d.ts +5 -0
  409. package/lib/typescript/components/icons/Checkmark.d.ts.map +1 -0
  410. package/lib/typescript/components/icons/Contentanalysis.d.ts +5 -0
  411. package/lib/typescript/components/icons/Contentanalysis.d.ts.map +1 -0
  412. package/lib/typescript/components/icons/Contenticon.d.ts +5 -0
  413. package/lib/typescript/components/icons/Contenticon.d.ts.map +1 -0
  414. package/lib/typescript/components/icons/EnochE.d.ts +5 -0
  415. package/lib/typescript/components/icons/EnochE.d.ts.map +1 -0
  416. package/lib/typescript/components/icons/Personalityicon.d.ts +5 -0
  417. package/lib/typescript/components/icons/Personalityicon.d.ts.map +1 -0
  418. package/lib/typescript/components/icons/Personalityprofile.d.ts +5 -0
  419. package/lib/typescript/components/icons/Personalityprofile.d.ts.map +1 -0
  420. package/lib/typescript/components/icons/Personalitytraits.d.ts +5 -0
  421. package/lib/typescript/components/icons/Personalitytraits.d.ts.map +1 -0
  422. package/lib/typescript/components/icons/Userpreferences.d.ts +5 -0
  423. package/lib/typescript/components/icons/Userpreferences.d.ts.map +1 -0
  424. package/lib/typescript/components/icons/index.d.ts +12 -0
  425. package/lib/typescript/components/icons/index.d.ts.map +1 -0
  426. package/lib/typescript/components/onboarding/OAuthWebView.d.ts.map +1 -1
  427. package/lib/typescript/config/api.d.ts +24 -0
  428. package/lib/typescript/config/api.d.ts.map +1 -0
  429. package/lib/typescript/context/AuthContext.d.ts +34 -0
  430. package/lib/typescript/context/AuthContext.d.ts.map +1 -0
  431. package/lib/typescript/hooks/useConnectedAccounts.d.ts +11 -0
  432. package/lib/typescript/hooks/useConnectedAccounts.d.ts.map +1 -0
  433. package/lib/typescript/hooks/useConnections.d.ts +10 -5
  434. package/lib/typescript/hooks/useConnections.d.ts.map +1 -1
  435. package/lib/typescript/hooks/useUserConnections.d.ts +12 -0
  436. package/lib/typescript/hooks/useUserConnections.d.ts.map +1 -0
  437. package/lib/typescript/index.d.ts +24 -6
  438. package/lib/typescript/index.d.ts.map +1 -1
  439. package/lib/typescript/services/apiClient.d.ts +91 -0
  440. package/lib/typescript/services/apiClient.d.ts.map +1 -0
  441. package/lib/typescript/services/apiKeyService.d.ts.map +1 -1
  442. package/lib/typescript/services/authService.d.ts +216 -0
  443. package/lib/typescript/services/authService.d.ts.map +1 -0
  444. package/lib/typescript/services/biometricPinService.d.ts +29 -0
  445. package/lib/typescript/services/biometricPinService.d.ts.map +1 -0
  446. package/lib/typescript/services/connectedAccountsService.d.ts +56 -0
  447. package/lib/typescript/services/connectedAccountsService.d.ts.map +1 -0
  448. package/lib/typescript/services/googleAuthService.d.ts +63 -0
  449. package/lib/typescript/services/googleAuthService.d.ts.map +1 -0
  450. package/lib/typescript/services/imageCompressionService.d.ts +37 -0
  451. package/lib/typescript/services/imageCompressionService.d.ts.map +1 -0
  452. package/lib/typescript/services/jwtStorageService.d.ts +86 -0
  453. package/lib/typescript/services/jwtStorageService.d.ts.map +1 -0
  454. package/lib/typescript/services/mobileTrainingService.d.ts +45 -0
  455. package/lib/typescript/services/mobileTrainingService.d.ts.map +1 -0
  456. package/lib/typescript/services/pinEncryptionService.d.ts +17 -0
  457. package/lib/typescript/services/pinEncryptionService.d.ts.map +1 -0
  458. package/lib/typescript/services/pinStorageUtils.d.ts +25 -0
  459. package/lib/typescript/services/pinStorageUtils.d.ts.map +1 -0
  460. package/lib/typescript/services/platformAuthService.d.ts +34 -109
  461. package/lib/typescript/services/platformAuthService.d.ts.map +1 -1
  462. package/lib/typescript/services/storageService.d.ts +128 -0
  463. package/lib/typescript/services/storageService.d.ts.map +1 -0
  464. package/lib/typescript/services/trainingApiHelpers.d.ts +38 -0
  465. package/lib/typescript/services/trainingApiHelpers.d.ts.map +1 -0
  466. package/lib/typescript/services/userConnectionsService.d.ts +90 -0
  467. package/lib/typescript/services/userConnectionsService.d.ts.map +1 -0
  468. package/lib/typescript/services/youtubeMigrationService.d.ts +12 -0
  469. package/lib/typescript/services/youtubeMigrationService.d.ts.map +1 -0
  470. package/lib/typescript/theme/index.d.ts +416 -0
  471. package/lib/typescript/theme/index.d.ts.map +1 -0
  472. package/lib/typescript/types/index.d.ts +39 -0
  473. package/lib/typescript/types/index.d.ts.map +1 -1
  474. package/lib/typescript/utils/eventUtils.d.ts +108 -0
  475. package/lib/typescript/utils/eventUtils.d.ts.map +1 -0
  476. package/lib/typescript/utils/haptics.d.ts +11 -0
  477. package/lib/typescript/utils/haptics.d.ts.map +1 -0
  478. package/lib/typescript/utils/imagePreloader.d.ts +2 -0
  479. package/lib/typescript/utils/imagePreloader.d.ts.map +1 -0
  480. package/package.json +158 -145
  481. package/src/api/index.ts +41 -0
  482. package/src/assets/fonts/EBGaramond-VariableFont_wght.ttf +0 -0
  483. package/src/assets/fonts/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  484. package/src/assets/icons/Facebookicon.png +0 -0
  485. package/src/assets/icons/Gmail.png +0 -0
  486. package/src/assets/icons/Linkedinicon.png +0 -0
  487. package/src/assets/icons/Redditicon.png +0 -0
  488. package/src/assets/icons/YouTubeicon2.png +0 -0
  489. package/src/assets/icons/YouTubeicon3.png +0 -0
  490. package/src/assets/icons/farcaster.png +0 -0
  491. package/src/assets/icons/instagram.png +0 -0
  492. package/src/assets/icons/pinterest.png +0 -0
  493. package/src/assets/icons/swerv_logo.png +0 -0
  494. package/src/assets/icons/twitter.jpg +0 -0
  495. package/src/assets/images/Checkbox.svg +3 -0
  496. package/src/assets/images/EnochE.svg +19 -0
  497. package/src/assets/images/Enochicon1.png +0 -0
  498. package/src/assets/images/Face_ID_logo.png +0 -0
  499. package/src/assets/images/Facebookicon.png +0 -0
  500. package/src/assets/images/Gmail.png +0 -0
  501. package/src/assets/images/Googlelogo.png +0 -0
  502. package/src/assets/images/Linkedinicon.png +0 -0
  503. package/src/assets/images/Onairoslogo.png +0 -0
  504. package/src/assets/images/Personalityprofile.svg +3 -0
  505. package/src/assets/images/Personalitytraits.svg +3 -0
  506. package/src/assets/images/Redditicon.png +0 -0
  507. package/src/assets/images/Userpreferences.svg +3 -0
  508. package/src/assets/images/YouTubeicon3.png +0 -0
  509. package/src/assets/images/arrow.svg +20 -0
  510. package/src/assets/images/basicproficon.svg +43 -0
  511. package/src/assets/images/basicprofile.svg +3 -0
  512. package/src/assets/images/checkmark.svg +4 -0
  513. package/src/assets/images/contentanalysis.svg +3 -0
  514. package/src/assets/images/contenticon.svg +23 -0
  515. package/src/assets/images/persona1.png +0 -0
  516. package/src/assets/images/persona2.png +0 -0
  517. package/src/assets/images/persona3.png +0 -0
  518. package/src/assets/images/persona4.png +0 -0
  519. package/src/assets/images/persona5.png +0 -0
  520. package/src/assets/images/personalityicon.svg +18 -0
  521. package/src/assets/images/x-close.svg +3 -0
  522. package/src/components/BodyText.tsx +33 -0
  523. package/src/components/BrandMark.tsx +62 -0
  524. package/src/components/CodeInput.tsx +32 -0
  525. package/src/components/EmailInput.tsx +31 -0
  526. package/src/components/ExistingUserDataConfirmation.tsx +507 -0
  527. package/src/components/GoogleButton.tsx +55 -0
  528. package/src/components/HeadingGroup.tsx +49 -0
  529. package/src/components/ModalHeader.tsx +125 -0
  530. package/src/components/ModalSheet.tsx +57 -0
  531. package/src/components/Onairos.tsx +422 -424
  532. package/src/components/OnairosButton.tsx +339 -359
  533. package/src/components/OnairosSignInButton.tsx +166 -0
  534. package/src/components/Overlay.tsx +506 -506
  535. package/src/components/PersonaImage.tsx +79 -0
  536. package/src/components/PersonaLoadingScreen.tsx +201 -0
  537. package/src/components/PersonalizationConsentScreen.tsx +410 -0
  538. package/src/components/PinCreationScreen.tsx +492 -0
  539. package/src/components/PinInput.tsx +555 -343
  540. package/src/components/PlatformConnectorsStep.tsx +892 -0
  541. package/src/components/PlatformToggle.tsx +226 -0
  542. package/src/components/PrimaryButton.tsx +214 -0
  543. package/src/components/SignInMatchAnimation.tsx +225 -0
  544. package/src/components/SignInStep.tsx +217 -0
  545. package/src/components/TrainingModal.tsx +1047 -737
  546. package/src/components/UniversalOnboarding.tsx +2888 -1820
  547. package/src/components/VerificationStep.tsx +198 -0
  548. package/src/components/WelcomeScreen.tsx +473 -0
  549. package/src/components/icons/Basicproficon.tsx +30 -0
  550. package/src/components/icons/Basicprofile.tsx +17 -0
  551. package/src/components/icons/Checkbox.tsx +17 -0
  552. package/src/components/icons/Checkmark.tsx +24 -0
  553. package/src/components/icons/Contentanalysis.tsx +17 -0
  554. package/src/components/icons/Contenticon.tsx +30 -0
  555. package/src/components/icons/EnochE.tsx +39 -0
  556. package/src/components/icons/Personalityicon.tsx +22 -0
  557. package/src/components/icons/Personalityprofile.tsx +17 -0
  558. package/src/components/icons/Personalitytraits.tsx +17 -0
  559. package/src/components/icons/Userpreferences.tsx +17 -0
  560. package/src/components/icons/index.ts +12 -0
  561. package/src/components/onboarding/OAuthWebView.tsx +232 -838
  562. package/src/config/api.ts +25 -0
  563. package/src/context/AuthContext.tsx +393 -0
  564. package/src/hooks/useConnectedAccounts.ts +139 -0
  565. package/src/hooks/useConnections.ts +129 -131
  566. package/src/hooks/useUserConnections.ts +166 -0
  567. package/src/index.ts +94 -49
  568. package/src/services/apiClient.ts +337 -0
  569. package/src/services/apiKeyService.ts +9 -11
  570. package/src/services/authService.ts +1008 -0
  571. package/src/services/biometricPinService.ts +193 -0
  572. package/src/services/connectedAccountsService.ts +290 -0
  573. package/src/services/googleAuthService.ts +279 -0
  574. package/src/services/imageCompressionService.ts +303 -0
  575. package/src/services/jwtStorageService.ts +257 -0
  576. package/src/services/mobileTrainingService.ts +204 -0
  577. package/src/services/pinEncryptionService.ts +76 -0
  578. package/src/services/pinStorageUtils.ts +97 -0
  579. package/src/services/platformAuthService.ts +1346 -1113
  580. package/src/services/storageService.ts +452 -0
  581. package/src/services/trainingApiHelpers.ts +67 -0
  582. package/src/services/userConnectionsService.ts +557 -0
  583. package/src/services/youtubeMigrationService.ts +454 -0
  584. package/src/theme/index.ts +239 -0
  585. package/src/types/index.ts +265 -238
  586. package/src/utils/eventUtils.ts +303 -0
  587. package/src/utils/haptics.ts +59 -0
  588. package/src/utils/imagePreloader.ts +2 -0
  589. package/README.md +0 -375
  590. package/lib/commonjs/assets/images/email.png +0 -0
  591. package/lib/commonjs/assets/images/linkedin.png +0 -0
  592. package/lib/commonjs/assets/images/reddit.png +0 -0
  593. package/lib/commonjs/assets/images/youtube.png +0 -0
  594. package/lib/commonjs/components/UniversalOnboarding.tsx.new +0 -455
  595. package/lib/module/assets/images/email.png +0 -0
  596. package/lib/module/assets/images/linkedin.png +0 -0
  597. package/lib/module/assets/images/reddit.png +0 -0
  598. package/lib/module/assets/images/youtube.png +0 -0
  599. package/lib/module/components/UniversalOnboarding.tsx.new +0 -455
  600. package/src/assets/images/email.png +0 -0
  601. package/src/assets/images/linkedin.png +0 -0
  602. package/src/assets/images/reddit.png +0 -0
  603. package/src/assets/images/youtube.png +0 -0
  604. package/src/components/UniversalOnboarding.tsx.new +0 -455
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Google Authentication Service
3
+ * Handles Google Sign-In for user authentication and account creation
4
+ */
5
+
6
+ import { GoogleSignin, statusCodes } from '@react-native-google-signin/google-signin';
7
+ import AsyncStorage from '@react-native-async-storage/async-storage';
8
+
9
+ // 🔑 Using the same client ID configuration as platform auth
10
+ let WEB_CLIENT_ID = '1030678346906-lovkuds2ouqmoc8eu5qpo98spa6edv4o.apps.googleusercontent.com';
11
+ let IOS_CLIENT_ID = '1030678346906-lovkuds2ouqmoc8eu5qpo98spa6edv4o.apps.googleusercontent.com';
12
+
13
+ /**
14
+ * Update Google OAuth client IDs for custom configurations
15
+ */
16
+ export const updateGoogleClientIds = (config: {
17
+ webClientId?: string;
18
+ iosClientId?: string;
19
+ }) => {
20
+ if (config.webClientId) {
21
+ WEB_CLIENT_ID = config.webClientId;
22
+ }
23
+ if (config.iosClientId) {
24
+ IOS_CLIENT_ID = config.iosClientId;
25
+ }
26
+
27
+ console.log('✅ Google client IDs updated:', {
28
+ webClientId: WEB_CLIENT_ID,
29
+ iosClientId: IOS_CLIENT_ID
30
+ });
31
+ };
32
+
33
+ /**
34
+ * Initialize Google Sign-In for user authentication
35
+ */
36
+ const initializeGoogleAuth = () => {
37
+ GoogleSignin.configure({
38
+ webClientId: WEB_CLIENT_ID,
39
+ iosClientId: IOS_CLIENT_ID,
40
+
41
+ // Basic scopes for user authentication
42
+ scopes: [
43
+ 'openid',
44
+ 'profile',
45
+ 'email'
46
+ ],
47
+
48
+ // Enable offline access for refresh tokens
49
+ offlineAccess: true,
50
+ forceCodeForRefreshToken: true,
51
+
52
+ // Clear settings to avoid conflicts
53
+ hostedDomain: '',
54
+ accountName: '',
55
+ });
56
+ };
57
+
58
+ /**
59
+ * Sign in with Google and create/authenticate user account
60
+ */
61
+ export const signInWithGoogle = async () => {
62
+ try {
63
+ console.log('🔗 Initiating Google Sign-In for user authentication');
64
+
65
+ // Initialize Google Sign-In
66
+ initializeGoogleAuth();
67
+
68
+ // Check if Google Play Services are available
69
+ await GoogleSignin.hasPlayServices();
70
+
71
+ // Sign out first to ensure fresh consent
72
+ try {
73
+ await GoogleSignin.signOut();
74
+ console.log('🔄 Signed out to ensure fresh consent');
75
+ } catch (signOutError) {
76
+ console.log('ℹ️ Sign out not needed or failed:', signOutError);
77
+ }
78
+
79
+ // Sign in with Google
80
+ const userInfo = await GoogleSignin.signIn();
81
+ console.log('✅ Google Sign-In successful:', userInfo.data?.user?.email);
82
+
83
+ const googleUser = userInfo.data?.user;
84
+ if (!googleUser || !googleUser.email) {
85
+ throw new Error('No user data received from Google');
86
+ }
87
+
88
+ console.log('👤 Google user data:', {
89
+ email: googleUser.email,
90
+ name: googleUser.name,
91
+ photo: googleUser.photo,
92
+ id: googleUser.id
93
+ });
94
+
95
+ // Get tokens for account creation
96
+ const tokens = await GoogleSignin.getTokens();
97
+ console.log('🔑 Got Google tokens');
98
+
99
+ // Create user account on backend
100
+ const accountResult = await createUserAccount({
101
+ email: googleUser.email,
102
+ name: googleUser.name || googleUser.email.split('@')[0],
103
+ photoUrl: googleUser.photo || '',
104
+ googleId: googleUser.id,
105
+ accessToken: tokens.accessToken,
106
+ idToken: tokens.idToken
107
+ });
108
+
109
+ if (accountResult.success) {
110
+ console.log('✅ User account created/authenticated successfully');
111
+
112
+ // Store authentication data
113
+ await AsyncStorage.setItem('user_email', googleUser.email);
114
+ await AsyncStorage.setItem('user_name', googleUser.name || '');
115
+ await AsyncStorage.setItem('user_photo', googleUser.photo || '');
116
+ await AsyncStorage.setItem('auth_method', 'google');
117
+
118
+ if (accountResult.token) {
119
+ await AsyncStorage.setItem('onairos_jwt_token', accountResult.token);
120
+ await AsyncStorage.setItem('auth_token', accountResult.token);
121
+ }
122
+
123
+ return {
124
+ success: true,
125
+ user: {
126
+ email: googleUser.email,
127
+ name: googleUser.name,
128
+ photo: googleUser.photo,
129
+ id: googleUser.id
130
+ },
131
+ token: accountResult.token,
132
+ existingUser: accountResult.existingUser
133
+ };
134
+ } else {
135
+ throw new Error(accountResult.message || 'Failed to create user account');
136
+ }
137
+
138
+ } catch (error: any) {
139
+ console.error('❌ Google Sign-In error:', error);
140
+
141
+ // Handle specific Google Sign-In errors
142
+ if (error.code === statusCodes.SIGN_IN_CANCELLED) {
143
+ return {
144
+ success: false,
145
+ message: 'Google Sign-In was cancelled',
146
+ cancelled: true
147
+ };
148
+ } else if (error.code === statusCodes.IN_PROGRESS) {
149
+ return {
150
+ success: false,
151
+ message: 'Google Sign-In is already in progress'
152
+ };
153
+ } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
154
+ return {
155
+ success: false,
156
+ message: 'Google Play Services not available'
157
+ };
158
+ } else {
159
+ return {
160
+ success: false,
161
+ message: error.message || 'Google Sign-In failed'
162
+ };
163
+ }
164
+ }
165
+ };
166
+
167
+ /**
168
+ * Create or authenticate user account on backend
169
+ */
170
+ const createUserAccount = async (userData: {
171
+ email: string;
172
+ name: string;
173
+ photoUrl: string;
174
+ googleId: string;
175
+ accessToken: string;
176
+ idToken: string;
177
+ }) => {
178
+ try {
179
+ console.log('🔐 Creating/authenticating user account for:', userData.email);
180
+
181
+ // Step 1: Create Enoch user first
182
+ console.log('🔐 Step 1: Creating Enoch user...');
183
+ try {
184
+ const enochRegisterResponse = await fetch('https://api2.onairos.uk/enoch/users/register', {
185
+ method: 'POST',
186
+ headers: {
187
+ 'Content-Type': 'application/json'
188
+ },
189
+ body: JSON.stringify({
190
+ email: userData.email,
191
+ name: userData.name,
192
+ photoUrl: userData.photoUrl
193
+ })
194
+ });
195
+
196
+ console.log('📡 Enoch register response status:', enochRegisterResponse.status);
197
+ const enochResponseData = await enochRegisterResponse.json();
198
+ console.log('🔗 Enoch user creation response:', enochResponseData);
199
+ } catch (enochError) {
200
+ console.warn('⚠️ Enoch user creation failed (continuing):', enochError);
201
+ }
202
+
203
+ // Step 2: Create Onairos account to get JWT token
204
+ console.log('🔐 Step 2: Creating Onairos account...');
205
+ const onairosSignupResponse = await fetch('https://api2.onairos.uk/register/enoch', {
206
+ method: 'POST',
207
+ headers: {
208
+ 'Content-Type': 'application/json'
209
+ },
210
+ body: JSON.stringify({
211
+ email: userData.email,
212
+ username: userData.name,
213
+ name: userData.name,
214
+ googleAuth: true, // Flag to indicate Google authentication
215
+ googleId: userData.googleId,
216
+ photoUrl: userData.photoUrl
217
+ })
218
+ });
219
+
220
+ console.log('📡 Onairos register response status:', onairosSignupResponse.status);
221
+ const onairosResponseData = await onairosSignupResponse.json();
222
+ console.log('🔗 Onairos account creation response:', onairosResponseData);
223
+
224
+ if (onairosSignupResponse.ok && onairosResponseData.token) {
225
+ return {
226
+ success: true,
227
+ token: onairosResponseData.token,
228
+ existingUser: onairosResponseData.existingUser || false,
229
+ message: 'Account created/authenticated successfully'
230
+ };
231
+ } else {
232
+ return {
233
+ success: false,
234
+ message: onairosResponseData.message || 'Failed to create account'
235
+ };
236
+ }
237
+
238
+ } catch (error: any) {
239
+ console.error('❌ Error creating user account:', error);
240
+ return {
241
+ success: false,
242
+ message: error.message || 'Failed to create user account'
243
+ };
244
+ }
245
+ };
246
+
247
+ /**
248
+ * Check if user is already signed in with Google
249
+ */
250
+ export const isGoogleSignedIn = async () => {
251
+ try {
252
+ const currentUser = await GoogleSignin.getCurrentUser();
253
+ const isSignedIn = currentUser !== null;
254
+ if (isSignedIn) {
255
+ return {
256
+ isSignedIn: true,
257
+ user: currentUser?.user
258
+ };
259
+ }
260
+ return { isSignedIn: false };
261
+ } catch (error) {
262
+ console.error('❌ Error checking Google sign-in status:', error);
263
+ return { isSignedIn: false };
264
+ }
265
+ };
266
+
267
+ /**
268
+ * Sign out from Google
269
+ */
270
+ export const signOutFromGoogle = async () => {
271
+ try {
272
+ await GoogleSignin.signOut();
273
+ console.log('✅ Google sign-out successful');
274
+ return true;
275
+ } catch (error) {
276
+ console.error('❌ Google sign-out error:', error);
277
+ return false;
278
+ }
279
+ };
@@ -0,0 +1,303 @@
1
+ import ImageResizer from '@bam.tech/react-native-image-resizer';
2
+
3
+ /**
4
+ * Comprehensive image compression service for React Native
5
+ * Supports iterative compression to meet specific size targets
6
+ */
7
+
8
+ interface CompressionOptions {
9
+ maxSizeKB?: number;
10
+ maxWidth?: number;
11
+ maxHeight?: number;
12
+ quality?: number;
13
+ format?: 'JPEG' | 'PNG' | 'WEBP';
14
+ }
15
+
16
+ interface CompressionResult {
17
+ success: boolean;
18
+ base64?: string;
19
+ sizeKB?: number;
20
+ originalSizeKB?: number;
21
+ compressionRatio?: number;
22
+ error?: string;
23
+ }
24
+
25
+ /**
26
+ * Get file size from URI (React Native compatible)
27
+ */
28
+ const getFileSizeFromUri = async (uri: string): Promise<number> => {
29
+ try {
30
+ const response = await fetch(uri);
31
+ const blob = await response.blob();
32
+ return blob.size;
33
+ } catch (error) {
34
+ console.error('Error getting file size:', error);
35
+ return 0;
36
+ }
37
+ };
38
+
39
+ /**
40
+ * Convert image to base64 string
41
+ */
42
+ const imageToBase64 = async (uri: string): Promise<string | null> => {
43
+ try {
44
+ const response = await fetch(uri);
45
+ const blob = await response.blob();
46
+
47
+ return new Promise((resolve, reject) => {
48
+ const reader = new FileReader();
49
+ reader.onloadend = () => {
50
+ try {
51
+ const base64data = reader.result as string;
52
+ // Remove the data:image/jpeg;base64, prefix
53
+ const base64 = base64data.split(',')[1];
54
+ resolve(base64);
55
+ } catch (error) {
56
+ reject(error);
57
+ }
58
+ };
59
+ reader.onerror = reject;
60
+ reader.readAsDataURL(blob);
61
+ });
62
+ } catch (error) {
63
+ console.error('Error converting image to base64:', error);
64
+ return null;
65
+ }
66
+ };
67
+
68
+ /**
69
+ * Compress image with iterative quality reduction to meet size target
70
+ */
71
+ export const compressImageToTarget = async (
72
+ imageUri: string,
73
+ options: CompressionOptions = {}
74
+ ): Promise<CompressionResult> => {
75
+ const {
76
+ maxSizeKB = 300,
77
+ maxWidth = 1200,
78
+ maxHeight = 1200,
79
+ quality = 0.8,
80
+ format = 'JPEG'
81
+ } = options;
82
+
83
+ try {
84
+ console.log('🖼️ [COMPRESSION] Starting compression for:', imageUri);
85
+
86
+ // Get original file size
87
+ const originalSize = await getFileSizeFromUri(imageUri);
88
+ const originalSizeKB = Math.round(originalSize / 1024);
89
+
90
+ console.log('📊 [COMPRESSION] Original size:', originalSizeKB, 'KB');
91
+
92
+ // If already under target, just convert to base64
93
+ if (originalSizeKB <= maxSizeKB) {
94
+ console.log('✅ [COMPRESSION] Image already under target size');
95
+ const base64 = await imageToBase64(imageUri);
96
+
97
+ if (base64) {
98
+ return {
99
+ success: true,
100
+ base64,
101
+ sizeKB: originalSizeKB,
102
+ originalSizeKB,
103
+ compressionRatio: 1.0
104
+ };
105
+ }
106
+ }
107
+
108
+ // Start with initial compression parameters
109
+ let currentQuality = quality;
110
+ let currentWidth = maxWidth;
111
+ let currentHeight = maxHeight;
112
+ let attempts = 0;
113
+ const maxAttempts = 8;
114
+
115
+ while (attempts < maxAttempts) {
116
+ attempts++;
117
+
118
+ console.log(`🔄 [COMPRESSION] Attempt ${attempts}: quality=${currentQuality}, size=${currentWidth}x${currentHeight}`);
119
+
120
+ try {
121
+ // Resize and compress the image
122
+ const resizedImage = await ImageResizer.createResizedImage(
123
+ imageUri,
124
+ currentWidth,
125
+ currentHeight,
126
+ format,
127
+ Math.round(currentQuality * 100), // Convert to percentage
128
+ 0, // rotation
129
+ undefined, // outputPath
130
+ false, // keepMeta
131
+ {
132
+ mode: 'contain', // Maintain aspect ratio
133
+ onlyScaleDown: true, // Don't upscale
134
+ }
135
+ );
136
+
137
+ // Check the size of the compressed image
138
+ const compressedSize = await getFileSizeFromUri(resizedImage.uri);
139
+ const compressedSizeKB = Math.round(compressedSize / 1024);
140
+
141
+ console.log(`📊 [COMPRESSION] Attempt ${attempts} result: ${compressedSizeKB} KB`);
142
+
143
+ // If we've hit our target, convert to base64 and return
144
+ if (compressedSizeKB <= maxSizeKB) {
145
+ console.log('✅ [COMPRESSION] Target size achieved!');
146
+
147
+ const base64 = await imageToBase64(resizedImage.uri);
148
+
149
+ if (base64) {
150
+ const compressionRatio = originalSizeKB / compressedSizeKB;
151
+
152
+ console.log('🎯 [COMPRESSION] Success:', {
153
+ originalSizeKB,
154
+ finalSizeKB: compressedSizeKB,
155
+ compressionRatio: compressionRatio.toFixed(2) + 'x',
156
+ attempts
157
+ });
158
+
159
+ return {
160
+ success: true,
161
+ base64,
162
+ sizeKB: compressedSizeKB,
163
+ originalSizeKB,
164
+ compressionRatio
165
+ };
166
+ }
167
+ }
168
+
169
+ // If still too large, adjust parameters for next attempt
170
+ if (compressedSizeKB > maxSizeKB) {
171
+ // Reduce quality more aggressively if we're way over
172
+ const sizeRatio = compressedSizeKB / maxSizeKB;
173
+
174
+ if (sizeRatio > 2.0) {
175
+ // Way too big - reduce quality and dimensions significantly
176
+ currentQuality *= 0.6;
177
+ currentWidth = Math.round(currentWidth * 0.8);
178
+ currentHeight = Math.round(currentHeight * 0.8);
179
+ } else if (sizeRatio > 1.5) {
180
+ // Moderately too big - reduce quality more
181
+ currentQuality *= 0.75;
182
+ currentWidth = Math.round(currentWidth * 0.9);
183
+ currentHeight = Math.round(currentHeight * 0.9);
184
+ } else {
185
+ // Close to target - fine-tune quality
186
+ currentQuality *= 0.85;
187
+ }
188
+
189
+ // Ensure we don't go below minimum thresholds
190
+ currentQuality = Math.max(0.1, currentQuality);
191
+ currentWidth = Math.max(400, currentWidth);
192
+ currentHeight = Math.max(400, currentHeight);
193
+ }
194
+
195
+ } catch (resizeError) {
196
+ console.error(`❌ [COMPRESSION] Resize attempt ${attempts} failed:`, resizeError);
197
+
198
+ // Try with more aggressive settings
199
+ currentQuality *= 0.7;
200
+ currentWidth = Math.round(currentWidth * 0.8);
201
+ currentHeight = Math.round(currentHeight * 0.8);
202
+
203
+ if (currentQuality < 0.1 || currentWidth < 200 || currentHeight < 200) {
204
+ break;
205
+ }
206
+ }
207
+ }
208
+
209
+ // If we've exhausted all attempts, return the best effort
210
+ console.log('⚠️ [COMPRESSION] Max attempts reached, using best effort');
211
+
212
+ try {
213
+ const finalImage = await ImageResizer.createResizedImage(
214
+ imageUri,
215
+ Math.max(400, currentWidth),
216
+ Math.max(400, currentHeight),
217
+ format,
218
+ 30, // Very low quality as last resort
219
+ 0,
220
+ undefined,
221
+ false,
222
+ { mode: 'contain', onlyScaleDown: true }
223
+ );
224
+
225
+ const finalSize = await getFileSizeFromUri(finalImage.uri);
226
+ const finalSizeKB = Math.round(finalSize / 1024);
227
+ const base64 = await imageToBase64(finalImage.uri);
228
+
229
+ if (base64) {
230
+ console.log('📤 [COMPRESSION] Final result (best effort):', finalSizeKB, 'KB');
231
+
232
+ return {
233
+ success: true,
234
+ base64,
235
+ sizeKB: finalSizeKB,
236
+ originalSizeKB,
237
+ compressionRatio: originalSizeKB / finalSizeKB
238
+ };
239
+ }
240
+ } catch (finalError) {
241
+ console.error('❌ [COMPRESSION] Final compression attempt failed:', finalError);
242
+ }
243
+
244
+ return {
245
+ success: false,
246
+ error: `Failed to compress image to ${maxSizeKB}KB after ${maxAttempts} attempts`,
247
+ originalSizeKB
248
+ };
249
+
250
+ } catch (error) {
251
+ console.error('❌ [COMPRESSION] Compression service error:', error);
252
+ return {
253
+ success: false,
254
+ error: error instanceof Error ? error.message : 'Unknown compression error',
255
+ originalSizeKB: 0
256
+ };
257
+ }
258
+ };
259
+
260
+ /**
261
+ * Quick compression for profile pictures (300KB target)
262
+ */
263
+ export const compressProfilePicture = async (imageUri: string): Promise<CompressionResult> => {
264
+ return compressImageToTarget(imageUri, {
265
+ maxSizeKB: 300,
266
+ maxWidth: 1200,
267
+ maxHeight: 1200,
268
+ quality: 0.8,
269
+ format: 'JPEG'
270
+ });
271
+ };
272
+
273
+ /**
274
+ * Compress image for upload with custom settings
275
+ */
276
+ export const compressForUpload = async (
277
+ imageUri: string,
278
+ maxSizeKB: number = 300
279
+ ): Promise<CompressionResult> => {
280
+ return compressImageToTarget(imageUri, {
281
+ maxSizeKB,
282
+ maxWidth: 1200,
283
+ maxHeight: 1200,
284
+ quality: 0.8,
285
+ format: 'JPEG'
286
+ });
287
+ };
288
+
289
+ /**
290
+ * Legacy function for backward compatibility
291
+ */
292
+ export const convertImageToOptimizedBase64 = async (
293
+ imageUri: string,
294
+ quality: number = 0.8
295
+ ): Promise<string | null> => {
296
+ const result = await compressImageToTarget(imageUri, {
297
+ maxSizeKB: 300,
298
+ quality,
299
+ format: 'JPEG'
300
+ });
301
+
302
+ return result.success ? result.base64 || null : null;
303
+ };