@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
@@ -1,343 +1,555 @@
1
- import React, { useState, useCallback, useRef } from 'react';
2
- import {
3
- View,
4
- Text,
5
- StyleSheet,
6
- TextInput,
7
- TouchableOpacity,
8
- Keyboard,
9
- Dimensions,
10
- Modal,
11
- TouchableWithoutFeedback,
12
- } from 'react-native';
13
- import Icon from 'react-native-vector-icons/MaterialIcons';
14
- import { COLORS } from '../constants';
15
- import type { PinInputProps } from '../types';
16
-
17
- const { width } = Dimensions.get('window');
18
-
19
- export const PinInput: React.FC<PinInputProps> = ({
20
- onSubmit,
21
- minLength = 8,
22
- requireSpecialChar = true,
23
- requireNumber = true,
24
- onBack,
25
- }) => {
26
- const [pin, setPin] = useState('');
27
- const [error, setError] = useState<string | null>(null);
28
- const [showPin, setShowPin] = useState(false);
29
- const [showTooltip, setShowTooltip] = useState(false);
30
-
31
- const validatePin = useCallback((value: string) => {
32
- if (value.length < minLength) {
33
- return `PIN must be at least ${minLength} characters`;
34
- }
35
- if (requireSpecialChar && !/[!@#$%^&*(),.?":{}|<>]/.test(value)) {
36
- return 'PIN must include a special character';
37
- }
38
- if (requireNumber && !/\d/.test(value)) {
39
- return 'PIN must include a number';
40
- }
41
- return null;
42
- }, [minLength, requireSpecialChar, requireNumber]);
43
-
44
- const handleSubmit = useCallback(() => {
45
- const validationError = validatePin(pin);
46
- if (validationError) {
47
- setError(validationError);
48
- return;
49
- }
50
- onSubmit(pin);
51
- }, [pin, validatePin, onSubmit]);
52
-
53
- const handlePinChange = useCallback((value: string) => {
54
- setPin(value);
55
- setError(null);
56
- }, []);
57
-
58
- return (
59
- <View style={styles.container}>
60
- <View style={styles.header}>
61
- {onBack && (
62
- <TouchableOpacity style={styles.backButton} onPress={onBack}>
63
- <Icon name="arrow-back" size={24} color={COLORS.text.primary} />
64
- </TouchableOpacity>
65
- )}
66
- <Text style={styles.title}>Create your PIN</Text>
67
- <TouchableOpacity
68
- style={styles.helpButton}
69
- onPress={() => setShowTooltip(true)}
70
- >
71
- <Icon name="help" size={24} color={COLORS.text.primary} />
72
- </TouchableOpacity>
73
- </View>
74
-
75
- <Text style={styles.subtitle}>
76
- This PIN will be used to secure your account
77
- </Text>
78
-
79
- <View style={styles.inputContainer}>
80
- <TextInput
81
- style={styles.input}
82
- value={pin}
83
- onChangeText={handlePinChange}
84
- secureTextEntry={!showPin}
85
- placeholder="Enter PIN"
86
- keyboardType="default"
87
- maxLength={20}
88
- autoCapitalize="none"
89
- autoCorrect={false}
90
- />
91
- <TouchableOpacity
92
- style={styles.visibilityButton}
93
- onPress={() => setShowPin(!showPin)}
94
- >
95
- <Icon
96
- name={showPin ? 'visibility-off' : 'visibility'}
97
- size={24}
98
- color={COLORS.text.secondary}
99
- />
100
- </TouchableOpacity>
101
- </View>
102
-
103
- {error && <Text style={styles.error}>{error}</Text>}
104
-
105
- <View style={styles.requirements}>
106
- <Text style={styles.requirementTitle}>PIN Requirements:</Text>
107
- <Text style={[styles.requirement, pin.length >= minLength && styles.requirementMet]}>
108
- • At least {minLength} characters
109
- </Text>
110
- {requireSpecialChar && (
111
- <Text
112
- style={[
113
- styles.requirement,
114
- /[!@#$%^&*(),.?":{}|<>]/.test(pin) && styles.requirementMet,
115
- ]}
116
- >
117
- • Include a special character
118
- </Text>
119
- )}
120
- {requireNumber && (
121
- <Text
122
- style={[
123
- styles.requirement,
124
- /\d/.test(pin) && styles.requirementMet,
125
- ]}
126
- >
127
- • Include a number
128
- </Text>
129
- )}
130
- </View>
131
-
132
- <View style={styles.footer}>
133
- {onBack && (
134
- <TouchableOpacity
135
- style={styles.cancelButton}
136
- onPress={onBack}
137
- >
138
- <Text style={styles.cancelButtonText}>Back</Text>
139
- </TouchableOpacity>
140
- )}
141
-
142
- <TouchableOpacity
143
- style={[styles.submitButton, !pin && styles.submitButtonDisabled]}
144
- onPress={handleSubmit}
145
- disabled={!pin}
146
- >
147
- <Text style={styles.submitButtonText}>Continue</Text>
148
- </TouchableOpacity>
149
- </View>
150
-
151
- {/* PIN Information Tooltip Modal */}
152
- <Modal
153
- visible={showTooltip}
154
- transparent
155
- animationType="fade"
156
- onRequestClose={() => setShowTooltip(false)}
157
- >
158
- <TouchableWithoutFeedback onPress={() => setShowTooltip(false)}>
159
- <View style={styles.tooltipOverlay}>
160
- <View style={styles.tooltipContainer}>
161
- <Text style={styles.tooltipTitle}>About Your PIN</Text>
162
- <Text style={styles.tooltipText}>
163
- Your PIN is used to secure your account and protect your data. It will be required whenever you access sensitive information or perform important actions.
164
- </Text>
165
- <Text style={styles.tooltipText}>
166
- For maximum security, your PIN should:
167
- </Text>
168
- <Text style={styles.tooltipBullet}>• Be at least {minLength} characters</Text>
169
- {requireSpecialChar && (
170
- <Text style={styles.tooltipBullet}>• Include special characters like !@#$%^&*()</Text>
171
- )}
172
- {requireNumber && (
173
- <Text style={styles.tooltipBullet}>• Include at least one number</Text>
174
- )}
175
- <Text style={styles.tooltipText}>
176
- Your PIN is stored securely and encrypted on your device.
177
- </Text>
178
- <TouchableOpacity
179
- style={styles.tooltipButton}
180
- onPress={() => setShowTooltip(false)}
181
- >
182
- <Text style={styles.tooltipButtonText}>Got it</Text>
183
- </TouchableOpacity>
184
- </View>
185
- </View>
186
- </TouchableWithoutFeedback>
187
- </Modal>
188
- </View>
189
- );
190
- };
191
-
192
- const styles = StyleSheet.create({
193
- container: {
194
- flex: 1,
195
- padding: 16,
196
- width: width,
197
- backgroundColor: '#fff',
198
- },
199
- header: {
200
- flexDirection: 'row',
201
- alignItems: 'center',
202
- justifyContent: 'space-between',
203
- marginBottom: 16,
204
- paddingVertical: 8,
205
- },
206
- backButton: {
207
- padding: 8,
208
- },
209
- helpButton: {
210
- padding: 8,
211
- width: 40,
212
- alignItems: 'center',
213
- },
214
- title: {
215
- fontSize: 20,
216
- fontWeight: '600',
217
- color: COLORS.text.primary,
218
- textAlign: 'center',
219
- flex: 1,
220
- },
221
- subtitle: {
222
- fontSize: 14,
223
- color: COLORS.text.secondary,
224
- marginBottom: 24,
225
- textAlign: 'center',
226
- },
227
- inputContainer: {
228
- flexDirection: 'row',
229
- alignItems: 'center',
230
- borderWidth: 1,
231
- borderColor: COLORS.border,
232
- borderRadius: 8,
233
- marginBottom: 16,
234
- },
235
- input: {
236
- flex: 1,
237
- padding: 12,
238
- fontSize: 16,
239
- },
240
- visibilityButton: {
241
- padding: 12,
242
- },
243
- error: {
244
- color: COLORS.error,
245
- marginBottom: 16,
246
- },
247
- requirements: {
248
- marginBottom: 24,
249
- },
250
- requirementTitle: {
251
- fontSize: 14,
252
- fontWeight: '600',
253
- marginBottom: 8,
254
- color: COLORS.text.primary,
255
- },
256
- requirement: {
257
- fontSize: 14,
258
- color: COLORS.text.secondary,
259
- marginBottom: 4,
260
- },
261
- requirementMet: {
262
- color: COLORS.success,
263
- },
264
- footer: {
265
- flexDirection: 'row',
266
- alignItems: 'center',
267
- justifyContent: 'space-between',
268
- marginTop: 24,
269
- borderTopWidth: 1,
270
- borderTopColor: '#eee',
271
- paddingTop: 16,
272
- },
273
- cancelButton: {
274
- paddingVertical: 8,
275
- paddingHorizontal: 16,
276
- },
277
- cancelButtonText: {
278
- color: '#666',
279
- fontSize: 16,
280
- },
281
- submitButton: {
282
- paddingVertical: 16,
283
- paddingHorizontal: 32,
284
- borderRadius: 16,
285
- backgroundColor: COLORS.primary,
286
- borderWidth: 1,
287
- borderColor: COLORS.primary,
288
- alignItems: 'center',
289
- },
290
- submitButtonDisabled: {
291
- opacity: 0.5,
292
- },
293
- submitButtonText: {
294
- color: '#fff',
295
- fontSize: 16,
296
- fontWeight: '600',
297
- },
298
- tooltipOverlay: {
299
- flex: 1,
300
- backgroundColor: 'rgba(0, 0, 0, 0.5)',
301
- justifyContent: 'center',
302
- alignItems: 'center',
303
- padding: 20,
304
- },
305
- tooltipContainer: {
306
- backgroundColor: '#fff',
307
- borderRadius: 16,
308
- padding: 20,
309
- width: '90%',
310
- maxWidth: 400,
311
- },
312
- tooltipTitle: {
313
- fontSize: 18,
314
- fontWeight: '600',
315
- marginBottom: 12,
316
- color: COLORS.text.primary,
317
- textAlign: 'center',
318
- },
319
- tooltipText: {
320
- fontSize: 14,
321
- color: COLORS.text.secondary,
322
- marginBottom: 12,
323
- },
324
- tooltipBullet: {
325
- fontSize: 14,
326
- color: COLORS.text.secondary,
327
- marginBottom: 6,
328
- marginLeft: 10,
329
- },
330
- tooltipButton: {
331
- backgroundColor: COLORS.primary,
332
- paddingVertical: 12,
333
- paddingHorizontal: 24,
334
- borderRadius: 8,
335
- alignSelf: 'center',
336
- marginTop: 12,
337
- },
338
- tooltipButtonText: {
339
- color: '#fff',
340
- fontSize: 16,
341
- fontWeight: '600',
342
- },
343
- });
1
+ import React, { useState, useCallback } from 'react';
2
+ import {
3
+ View,
4
+ Text,
5
+ StyleSheet,
6
+ TextInput,
7
+ TouchableOpacity,
8
+ Dimensions,
9
+ Keyboard,
10
+ ActivityIndicator,
11
+ } from 'react-native';
12
+ import { biometricPinService } from '../services/biometricPinService';
13
+
14
+ const { width } = Dimensions.get('window');
15
+
16
+ export interface PinInputProps {
17
+ onSubmit: (pin: string) => void;
18
+ minLength?: number;
19
+ requireSpecialChar?: boolean;
20
+ requireNumber?: boolean;
21
+ onBack?: () => void;
22
+ // New prop to enable biometric storage
23
+ enableBiometricStorage?: boolean;
24
+ // ✅ NEW: Background training optimization props
25
+ onBackgroundTrainingStart?: () => Promise<void>;
26
+ showBackgroundProgress?: boolean;
27
+ backgroundProgressText?: string;
28
+ }
29
+
30
+ type InfoStatus = 'default' | 'biometric-unavailable' | 'biometric-failed' | 'storage-error' | 'authenticating';
31
+
32
+ export const PinInput: React.FC<PinInputProps> = ({
33
+ onSubmit,
34
+ minLength = 8,
35
+ requireSpecialChar = true,
36
+ requireNumber = true,
37
+ onBack,
38
+ enableBiometricStorage = true,
39
+ // NEW: Background training optimization props
40
+ onBackgroundTrainingStart,
41
+ showBackgroundProgress = false,
42
+ backgroundProgressText = "Training is starting in the background...",
43
+ }) => {
44
+ const [pin, setPin] = useState('');
45
+ const [error, setError] = useState<string | null>(null);
46
+ const [showPin, setShowPin] = useState(false);
47
+ const [isStoringPin, setIsStoringPin] = useState(false);
48
+ const [infoStatus, setInfoStatus] = useState<InfoStatus>('default');
49
+ // ✅ NEW: Background training state
50
+ const [isBackgroundTrainingStarted, setIsBackgroundTrainingStarted] = useState(false);
51
+
52
+ // ✅ UPDATED: Make background training conditional, not automatic on mount
53
+ React.useEffect(() => {
54
+ // Only start background training if explicitly requested and not already started
55
+ // This prevents automatic training on component mount
56
+ if (onBackgroundTrainingStart && !isBackgroundTrainingStarted && showBackgroundProgress) {
57
+ console.log('🚀 [PIN INPUT] Background training explicitly requested...');
58
+ setIsBackgroundTrainingStarted(true);
59
+
60
+ onBackgroundTrainingStart().catch(error => {
61
+ console.error('❌ [PIN INPUT] Background training failed:', error);
62
+ setIsBackgroundTrainingStarted(false);
63
+ });
64
+ }
65
+ }, [onBackgroundTrainingStart, isBackgroundTrainingStarted, showBackgroundProgress]);
66
+
67
+ const validatePin = useCallback((value: string) => {
68
+ if (value.length < minLength) {
69
+ return `PIN must be at least ${minLength} characters`;
70
+ }
71
+ if (requireSpecialChar && !/[!@#$%^&*(),.?":{}|<>]/.test(value)) {
72
+ return 'PIN must include a special character';
73
+ }
74
+ if (requireNumber && !/\d/.test(value)) {
75
+ return 'PIN must include a number';
76
+ }
77
+ return null;
78
+ }, [minLength, requireSpecialChar, requireNumber]);
79
+
80
+ const handleSubmit = useCallback(async () => {
81
+ console.log('🔍 [PIN INPUT] handleSubmit called with PIN length:', pin.length);
82
+
83
+ const validationError = validatePin(pin);
84
+ if (validationError) {
85
+ console.log('❌ [PIN INPUT] Validation failed:', validationError);
86
+ setError(validationError);
87
+ return;
88
+ }
89
+
90
+ console.log('✅ [PIN INPUT] PIN validation passed');
91
+
92
+ // If biometric storage is enabled, store PIN securely
93
+ if (enableBiometricStorage) {
94
+ console.log('🔐 [PIN INPUT] Biometric storage enabled, starting biometric flow...');
95
+ setIsStoringPin(true);
96
+ setInfoStatus('authenticating');
97
+
98
+ try {
99
+ // Check if biometric is available
100
+ const biometricAvailable = await biometricPinService.isBiometricAvailable();
101
+ console.log('📱 [PIN INPUT] Biometric available:', biometricAvailable);
102
+
103
+ if (!biometricAvailable) {
104
+ console.error('❌ [PIN INPUT] Face ID not available on this device');
105
+ setInfoStatus('biometric-unavailable');
106
+ setIsStoringPin(false);
107
+ return;
108
+ }
109
+
110
+ // Immediately attempt to store PIN with biometric authentication
111
+ console.log('🔐 [PIN INPUT] Triggering biometric authentication for PIN storage...');
112
+
113
+ const stored = await biometricPinService.storePinWithBiometric(pin);
114
+
115
+ if (stored) {
116
+ console.log('✅ [PIN INPUT] PIN stored successfully with biometric protection');
117
+
118
+ // Verify the PIN was actually stored by checking if it can be retrieved
119
+ const isStored = await biometricPinService.isPinStored();
120
+ if (isStored) {
121
+ console.log('✅ [PIN INPUT] PIN storage verified - proceeding with onboarding');
122
+ onSubmit(pin);
123
+ } else {
124
+ console.error('❌ [PIN INPUT] PIN storage verification failed');
125
+ setInfoStatus('storage-error');
126
+ setIsStoringPin(false);
127
+ }
128
+ } else {
129
+ // Biometric authentication was cancelled or failed
130
+ console.warn('⚠️ [PIN INPUT] Biometric authentication failed or was cancelled');
131
+ setInfoStatus('biometric-failed');
132
+ setIsStoringPin(false);
133
+ }
134
+ } catch (error) {
135
+ console.error('❌ [PIN INPUT] Error handling biometric PIN storage:', error);
136
+ setInfoStatus('storage-error');
137
+ setIsStoringPin(false);
138
+ }
139
+ } else {
140
+ // Biometric storage disabled, proceed normally
141
+ console.log('🔐 [PIN INPUT] Biometric storage disabled, proceeding normally');
142
+ onSubmit(pin);
143
+ }
144
+ }, [pin, validatePin, onSubmit, enableBiometricStorage]);
145
+
146
+ const handlePinChange = useCallback((value: string) => {
147
+ setPin(value);
148
+ setError(null);
149
+ setInfoStatus('default');
150
+
151
+ // Debug logging to help troubleshoot
152
+ console.log('🔍 [PIN INPUT] PIN changed:', {
153
+ length: value.length,
154
+ hasSpecialChar: /[!@#$%^&*(),.?":{}|<>]/.test(value),
155
+ hasNumber: /\d/.test(value),
156
+ isValid: !validatePin(value)
157
+ });
158
+ }, [validatePin]);
159
+
160
+ const handleContinueWithoutBiometric = useCallback(() => {
161
+ console.warn('⚠️ [PIN INPUT] User chose to continue without biometric security');
162
+ onSubmit(pin);
163
+ }, [pin, onSubmit]);
164
+
165
+ const handleRetry = useCallback(() => {
166
+ setInfoStatus('default');
167
+ handleSubmit();
168
+ }, [handleSubmit]);
169
+
170
+ const getInfoMessage = () => {
171
+ switch (infoStatus) {
172
+ case 'biometric-unavailable':
173
+ return {
174
+ title: 'Biometric Authentication Not Available',
175
+ message: 'This device does not support Face ID or Touch ID. Please enable biometric authentication in your device settings to secure your PIN.',
176
+ type: 'warning' as const,
177
+ showActions: true,
178
+ };
179
+ case 'biometric-failed':
180
+ return {
181
+ title: 'Biometric Authentication Failed',
182
+ message: 'Biometric authentication was cancelled or failed. Your PIN needs to be secured with biometric authentication to proceed.',
183
+ type: 'warning' as const,
184
+ showActions: true,
185
+ };
186
+ case 'storage-error':
187
+ return {
188
+ title: 'Storage Error',
189
+ message: 'An error occurred while securing your PIN. Would you like to try again?',
190
+ type: 'error' as const,
191
+ showActions: true,
192
+ };
193
+ case 'authenticating':
194
+ return {
195
+ title: 'Authenticating...',
196
+ message: 'Please complete biometric authentication to secure your PIN.',
197
+ type: 'info' as const,
198
+ showActions: false,
199
+ };
200
+ default:
201
+ return {
202
+ title: 'Secure PIN Storage',
203
+ message: 'Your PIN will be securely stored locally on your device using biometric authentication (Face ID or Touch ID) for enhanced security.',
204
+ type: 'info' as const,
205
+ showActions: false,
206
+ };
207
+ }
208
+ };
209
+
210
+ const infoMessage = getInfoMessage();
211
+
212
+ return (
213
+ <View style={styles.container}>
214
+ <View style={styles.inputSection}>
215
+ <View style={styles.header}>
216
+ {onBack && (
217
+ <TouchableOpacity style={styles.backButton} onPress={onBack}>
218
+ <Text style={{ fontSize: 24 }}>←</Text>
219
+ </TouchableOpacity>
220
+ )}
221
+ <Text style={styles.title}>Create a PIN</Text>
222
+ </View>
223
+
224
+ <Text style={styles.subtitle}>
225
+ A PIN so only you have access to your data
226
+ </Text>
227
+
228
+ {/* ✅ NEW: Background training progress indicator */}
229
+ {showBackgroundProgress && isBackgroundTrainingStarted && (
230
+ <View style={styles.backgroundProgressContainer}>
231
+ <Text style={styles.backgroundProgressText}>
232
+ {backgroundProgressText}
233
+ </Text>
234
+ <View style={styles.backgroundProgressIndicator}>
235
+ <ActivityIndicator size="small" color="#007AFF" />
236
+ </View>
237
+ </View>
238
+ )}
239
+
240
+ <View style={styles.inputContainer}>
241
+ <TextInput
242
+ style={styles.input}
243
+ value={pin}
244
+ onChangeText={handlePinChange}
245
+ secureTextEntry={!showPin}
246
+ placeholder="e.g. MyPin123!"
247
+ keyboardType="default"
248
+ maxLength={20}
249
+ autoCapitalize="none"
250
+ autoCorrect={false}
251
+ returnKeyType="done"
252
+ onSubmitEditing={() => Keyboard.dismiss()}
253
+ />
254
+ <TouchableOpacity
255
+ style={styles.visibilityButton}
256
+ onPress={() => setShowPin(!showPin)}
257
+ >
258
+ <Text>{showPin ? '👁️' : '👁️‍🗨️'}</Text>
259
+ </TouchableOpacity>
260
+ </View>
261
+ </View>
262
+
263
+ {error && <Text style={styles.error}>{error}</Text>}
264
+
265
+ <View style={styles.requirements}>
266
+ <Text style={styles.requirementTitle}>PIN Requirements:</Text>
267
+ <Text style={[styles.requirement, pin.length >= minLength && styles.requirementMet]}>
268
+ At least {minLength} characters
269
+ </Text>
270
+ {requireSpecialChar && (
271
+ <Text
272
+ style={[
273
+ styles.requirement,
274
+ /[!@#$%^&*(),.?":{}|<>]/.test(pin) && styles.requirementMet,
275
+ ]}
276
+ >
277
+ Include a special character
278
+ </Text>
279
+ )}
280
+ {requireNumber && (
281
+ <Text
282
+ style={[
283
+ styles.requirement,
284
+ /\d/.test(pin) && styles.requirementMet,
285
+ ]}
286
+ >
287
+ Include a number
288
+ </Text>
289
+ )}
290
+ </View>
291
+
292
+ {/* Inline Information Section */}
293
+ <View style={[
294
+ styles.infoContainer,
295
+ infoMessage.type === 'info' && styles.infoContainerInfo,
296
+ infoMessage.type === 'warning' && styles.infoContainerWarning,
297
+ infoMessage.type === 'error' && styles.infoContainerError,
298
+ ]}>
299
+ <Text style={[
300
+ styles.infoTitle,
301
+ infoMessage.type === 'info' && styles.infoTitleInfo,
302
+ infoMessage.type === 'warning' && styles.infoTitleWarning,
303
+ infoMessage.type === 'error' && styles.infoTitleError,
304
+ ]}>
305
+ {infoMessage.title}
306
+ </Text>
307
+ <Text style={[
308
+ styles.infoMessage,
309
+ infoMessage.type === 'info' && styles.infoMessageInfo,
310
+ infoMessage.type === 'warning' && styles.infoMessageWarning,
311
+ infoMessage.type === 'error' && styles.infoMessageError,
312
+ ]}>
313
+ {infoMessage.message}
314
+ </Text>
315
+
316
+ {infoMessage.showActions && (
317
+ <View style={styles.infoActions}>
318
+ <TouchableOpacity
319
+ style={styles.infoActionButton}
320
+ onPress={handleRetry}
321
+ >
322
+ <Text style={styles.infoActionButtonText}>Try Again</Text>
323
+ </TouchableOpacity>
324
+ <TouchableOpacity
325
+ style={[styles.infoActionButton, styles.infoActionButtonSecondary]}
326
+ onPress={handleContinueWithoutBiometric}
327
+ >
328
+ <Text style={[styles.infoActionButtonText, styles.infoActionButtonSecondaryText]}>
329
+ Continue Without Biometric
330
+ </Text>
331
+ </TouchableOpacity>
332
+ </View>
333
+ )}
334
+ </View>
335
+
336
+ <View style={styles.footer}>
337
+ {onBack && (
338
+ <TouchableOpacity
339
+ style={styles.cancelButton}
340
+ onPress={onBack}
341
+ >
342
+ <Text style={styles.cancelButtonText}>Back</Text>
343
+ </TouchableOpacity>
344
+ )}
345
+
346
+ <TouchableOpacity
347
+ style={[styles.submitButton, (!pin || isStoringPin || validatePin(pin)) && styles.submitButtonDisabled]}
348
+ onPress={handleSubmit}
349
+ disabled={!pin || isStoringPin || !!validatePin(pin)}
350
+ >
351
+ <Text style={styles.submitButtonText}>
352
+ {isStoringPin ? 'Authenticating...' : 'Continue'}
353
+ </Text>
354
+ </TouchableOpacity>
355
+ </View>
356
+ </View>
357
+ );
358
+ };
359
+
360
+ const styles = StyleSheet.create({
361
+ container: {
362
+ flex: 1,
363
+ padding: 16,
364
+ width: width,
365
+ backgroundColor: '#fff',
366
+ justifyContent: 'flex-start',
367
+ },
368
+ inputSection: {
369
+ width: '100%',
370
+ marginTop: 0,
371
+ paddingTop: 0,
372
+ },
373
+ header: {
374
+ flexDirection: 'row',
375
+ alignItems: 'center',
376
+ justifyContent: 'space-between',
377
+ marginBottom: 16,
378
+ paddingVertical: 8,
379
+ },
380
+ backButton: {
381
+ padding: 8,
382
+ },
383
+ title: {
384
+ fontSize: 20,
385
+ fontWeight: '600',
386
+ color: '#333',
387
+ textAlign: 'center',
388
+ flex: 1,
389
+ marginBottom: 8,
390
+ },
391
+ subtitle: {
392
+ fontSize: 14,
393
+ color: '#666',
394
+ marginBottom: 24,
395
+ textAlign: 'center',
396
+ },
397
+ inputContainer: {
398
+ flexDirection: 'row',
399
+ alignItems: 'center',
400
+ borderWidth: 1,
401
+ borderColor: '#CCCCCC',
402
+ borderRadius: 8,
403
+ marginBottom: 16,
404
+ },
405
+ input: {
406
+ flex: 1,
407
+ padding: 12,
408
+ fontSize: 16,
409
+ },
410
+ visibilityButton: {
411
+ padding: 12,
412
+ },
413
+ // Info Container Styles
414
+ infoContainer: {
415
+ padding: 16,
416
+ borderRadius: 12,
417
+ marginBottom: 16,
418
+ borderWidth: 1,
419
+ },
420
+ infoContainerInfo: {
421
+ backgroundColor: '#E3F2FD',
422
+ borderColor: '#2196F3',
423
+ },
424
+ infoContainerWarning: {
425
+ backgroundColor: '#FFF3E0',
426
+ borderColor: '#FF9800',
427
+ },
428
+ infoContainerError: {
429
+ backgroundColor: '#FFEBEE',
430
+ borderColor: '#F44336',
431
+ },
432
+ infoTitle: {
433
+ fontSize: 16,
434
+ fontWeight: '600',
435
+ marginBottom: 8,
436
+ },
437
+ infoTitleInfo: {
438
+ color: '#1976D2',
439
+ },
440
+ infoTitleWarning: {
441
+ color: '#F57C00',
442
+ },
443
+ infoTitleError: {
444
+ color: '#D32F2F',
445
+ },
446
+ infoMessage: {
447
+ fontSize: 14,
448
+ lineHeight: 20,
449
+ marginBottom: 12,
450
+ },
451
+ infoMessageInfo: {
452
+ color: '#1565C0',
453
+ },
454
+ infoMessageWarning: {
455
+ color: '#E65100',
456
+ },
457
+ infoMessageError: {
458
+ color: '#C62828',
459
+ },
460
+ infoActions: {
461
+ flexDirection: 'row',
462
+ justifyContent: 'space-between',
463
+ marginTop: 8,
464
+ },
465
+ infoActionButton: {
466
+ flex: 1,
467
+ paddingVertical: 10,
468
+ paddingHorizontal: 16,
469
+ borderRadius: 8,
470
+ backgroundColor: '#007AFF',
471
+ marginHorizontal: 4,
472
+ alignItems: 'center',
473
+ },
474
+ infoActionButtonSecondary: {
475
+ backgroundColor: 'transparent',
476
+ borderWidth: 1,
477
+ borderColor: '#007AFF',
478
+ },
479
+ infoActionButtonText: {
480
+ color: '#fff',
481
+ fontSize: 14,
482
+ fontWeight: '600',
483
+ },
484
+ infoActionButtonSecondaryText: {
485
+ color: '#007AFF',
486
+ },
487
+ error: {
488
+ color: '#FF3B30',
489
+ marginBottom: 16,
490
+ },
491
+ requirements: {
492
+ marginBottom: 24,
493
+ },
494
+ requirementTitle: {
495
+ fontSize: 14,
496
+ fontWeight: '600',
497
+ marginBottom: 8,
498
+ color: '#333',
499
+ },
500
+ requirement: {
501
+ fontSize: 14,
502
+ color: '#666',
503
+ marginBottom: 4,
504
+ },
505
+ requirementMet: {
506
+ color: '#34C759',
507
+ },
508
+ footer: {
509
+ flexDirection: 'row',
510
+ alignItems: 'center',
511
+ justifyContent: 'space-between',
512
+ marginTop: 24,
513
+ borderTopWidth: 1,
514
+ borderTopColor: '#eee',
515
+ paddingTop: 16,
516
+ },
517
+ cancelButton: {
518
+ paddingVertical: 8,
519
+ paddingHorizontal: 16,
520
+ },
521
+ cancelButtonText: {
522
+ color: '#666',
523
+ fontSize: 16,
524
+ },
525
+ submitButton: {
526
+ paddingVertical: 16,
527
+ paddingHorizontal: 32,
528
+ borderRadius: 16,
529
+ backgroundColor: '#000000',
530
+ alignItems: 'center',
531
+ },
532
+ submitButtonDisabled: {
533
+ opacity: 0.5,
534
+ },
535
+ submitButtonText: {
536
+ color: '#fff',
537
+ fontSize: 16,
538
+ fontWeight: '600',
539
+ },
540
+ // ✅ NEW: Background training progress styles
541
+ backgroundProgressContainer: {
542
+ flexDirection: 'row',
543
+ alignItems: 'center',
544
+ justifyContent: 'center',
545
+ marginBottom: 16,
546
+ },
547
+ backgroundProgressText: {
548
+ fontSize: 14,
549
+ color: '#666',
550
+ marginRight: 10,
551
+ },
552
+ backgroundProgressIndicator: {
553
+ padding: 5,
554
+ },
555
+ });