@proteoapp/react-native-onboarding 0.1.0

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 (667) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +294 -0
  3. package/assets/svgs/arrow-right.tsx +13 -0
  4. package/assets/svgs/back-document-circle.tsx +14 -0
  5. package/assets/svgs/camera-error-circle.tsx +47 -0
  6. package/assets/svgs/camera-plus.tsx +13 -0
  7. package/assets/svgs/checklist-circle.tsx +93 -0
  8. package/assets/svgs/clock-circle.tsx +40 -0
  9. package/assets/svgs/document-2.tsx +31 -0
  10. package/assets/svgs/document-avatar.tsx +148 -0
  11. package/assets/svgs/document-camera-overlay.tsx +52 -0
  12. package/assets/svgs/document-circle.tsx +14 -0
  13. package/assets/svgs/document.tsx +13 -0
  14. package/assets/svgs/face-auth-avatar.tsx +135 -0
  15. package/assets/svgs/face-auth-camera-overlay.tsx +51 -0
  16. package/assets/svgs/face-id-circle.tsx +16 -0
  17. package/assets/svgs/face-id-error.tsx +40 -0
  18. package/assets/svgs/face-id.tsx +13 -0
  19. package/assets/svgs/index.ts +24 -0
  20. package/assets/svgs/location-error-circle.tsx +61 -0
  21. package/assets/svgs/process-finished.tsx +40 -0
  22. package/assets/svgs/refresh.tsx +13 -0
  23. package/assets/svgs/shield-check-circle.tsx +13 -0
  24. package/assets/svgs/thumb-up.tsx +37 -0
  25. package/assets/svgs/upload.tsx +13 -0
  26. package/assets/svgs/x-error-circle.tsx +40 -0
  27. package/assets/svgs/x.tsx +13 -0
  28. package/lib/module/app.js +12 -0
  29. package/lib/module/app.js.map +1 -0
  30. package/lib/module/components/button.js +43 -0
  31. package/lib/module/components/button.js.map +1 -0
  32. package/lib/module/components/centered-loading.js +17 -0
  33. package/lib/module/components/centered-loading.js.map +1 -0
  34. package/lib/module/components/default-error-fallback.js +28 -0
  35. package/lib/module/components/default-error-fallback.js.map +1 -0
  36. package/lib/module/components/default-loading.js +32 -0
  37. package/lib/module/components/default-loading.js.map +1 -0
  38. package/lib/module/components/description-loading.js +42 -0
  39. package/lib/module/components/description-loading.js.map +1 -0
  40. package/lib/module/components/error-fallback.js +57 -0
  41. package/lib/module/components/error-fallback.js.map +1 -0
  42. package/lib/module/components/identification-error.js +41 -0
  43. package/lib/module/components/identification-error.js.map +1 -0
  44. package/lib/module/components/index.js +13 -0
  45. package/lib/module/components/index.js.map +1 -0
  46. package/lib/module/components/loading.js +43 -0
  47. package/lib/module/components/loading.js.map +1 -0
  48. package/lib/module/components/progress-indicator.js +45 -0
  49. package/lib/module/components/progress-indicator.js.map +1 -0
  50. package/lib/module/components/recommended-validations.js +82 -0
  51. package/lib/module/components/recommended-validations.js.map +1 -0
  52. package/lib/module/constants/camera-error-messages.js +11 -0
  53. package/lib/module/constants/camera-error-messages.js.map +1 -0
  54. package/lib/module/constants/environments.js +35 -0
  55. package/lib/module/constants/environments.js.map +1 -0
  56. package/lib/module/constants/error-header-fields.js +31 -0
  57. package/lib/module/constants/error-header-fields.js.map +1 -0
  58. package/lib/module/constants/image-type-references.js +10 -0
  59. package/lib/module/constants/image-type-references.js.map +1 -0
  60. package/lib/module/constants/index.js +11 -0
  61. package/lib/module/constants/index.js.map +1 -0
  62. package/lib/module/constants/progress-steps.js +11 -0
  63. package/lib/module/constants/progress-steps.js.map +1 -0
  64. package/lib/module/constants/route-step-index-descriptions.js +15 -0
  65. package/lib/module/constants/route-step-index-descriptions.js.map +1 -0
  66. package/lib/module/constants/route-step-indexes.js +13 -0
  67. package/lib/module/constants/route-step-indexes.js.map +1 -0
  68. package/lib/module/constants/routes-need-alter-status.js +8 -0
  69. package/lib/module/constants/routes-need-alter-status.js.map +1 -0
  70. package/lib/module/enums/document-type.js +9 -0
  71. package/lib/module/enums/document-type.js.map +1 -0
  72. package/lib/module/enums/image-type.js +10 -0
  73. package/lib/module/enums/image-type.js.map +1 -0
  74. package/lib/module/enums/index.js +10 -0
  75. package/lib/module/enums/index.js.map +1 -0
  76. package/lib/module/enums/objective.js +8 -0
  77. package/lib/module/enums/objective.js.map +1 -0
  78. package/lib/module/enums/process-status.js +10 -0
  79. package/lib/module/enums/process-status.js.map +1 -0
  80. package/lib/module/enums/request-status.js +12 -0
  81. package/lib/module/enums/request-status.js.map +1 -0
  82. package/lib/module/enums/timeline-status.js +10 -0
  83. package/lib/module/enums/timeline-status.js.map +1 -0
  84. package/lib/module/enums/validation-status.js +9 -0
  85. package/lib/module/enums/validation-status.js.map +1 -0
  86. package/lib/module/errors/camera-permission-denied.js +9 -0
  87. package/lib/module/errors/camera-permission-denied.js.map +1 -0
  88. package/lib/module/errors/camera-problem.js +9 -0
  89. package/lib/module/errors/camera-problem.js.map +1 -0
  90. package/lib/module/errors/contact-support.js +10 -0
  91. package/lib/module/errors/contact-support.js.map +1 -0
  92. package/lib/module/errors/geolocation-permission-denied.js +9 -0
  93. package/lib/module/errors/geolocation-permission-denied.js.map +1 -0
  94. package/lib/module/errors/index.js +9 -0
  95. package/lib/module/errors/index.js.map +1 -0
  96. package/lib/module/errors/non-standard-hours.js +10 -0
  97. package/lib/module/errors/non-standard-hours.js.map +1 -0
  98. package/lib/module/errors/process-already-completed.js +10 -0
  99. package/lib/module/errors/process-already-completed.js.map +1 -0
  100. package/lib/module/hooks/index.js +16 -0
  101. package/lib/module/hooks/index.js.map +1 -0
  102. package/lib/module/hooks/use-button.js +18 -0
  103. package/lib/module/hooks/use-button.js.map +1 -0
  104. package/lib/module/hooks/use-camera.js +97 -0
  105. package/lib/module/hooks/use-camera.js.map +1 -0
  106. package/lib/module/hooks/use-description-loading.js +19 -0
  107. package/lib/module/hooks/use-description-loading.js.map +1 -0
  108. package/lib/module/hooks/use-error-fallback.js +37 -0
  109. package/lib/module/hooks/use-error-fallback.js.map +1 -0
  110. package/lib/module/hooks/use-identification-error.js +15 -0
  111. package/lib/module/hooks/use-identification-error.js.map +1 -0
  112. package/lib/module/hooks/use-loading.js +39 -0
  113. package/lib/module/hooks/use-loading.js.map +1 -0
  114. package/lib/module/hooks/use-onboarding-channel.js +78 -0
  115. package/lib/module/hooks/use-onboarding-channel.js.map +1 -0
  116. package/lib/module/hooks/use-process-status.js +69 -0
  117. package/lib/module/hooks/use-process-status.js.map +1 -0
  118. package/lib/module/hooks/use-process-timeline.js +103 -0
  119. package/lib/module/hooks/use-process-timeline.js.map +1 -0
  120. package/lib/module/hooks/use-progress-indicator.js +47 -0
  121. package/lib/module/hooks/use-progress-indicator.js.map +1 -0
  122. package/lib/module/hooks/use-recommended-validations.js +37 -0
  123. package/lib/module/hooks/use-recommended-validations.js.map +1 -0
  124. package/lib/module/hooks/use-rekognition.js +35 -0
  125. package/lib/module/hooks/use-rekognition.js.map +1 -0
  126. package/lib/module/hooks/use-s3.js +94 -0
  127. package/lib/module/hooks/use-s3.js.map +1 -0
  128. package/lib/module/index.js +25 -0
  129. package/lib/module/index.js.map +1 -0
  130. package/lib/module/layouts/index.js +4 -0
  131. package/lib/module/layouts/index.js.map +1 -0
  132. package/lib/module/layouts/root/index.js +15 -0
  133. package/lib/module/layouts/root/index.js.map +1 -0
  134. package/lib/module/layouts/root/view-model.js +14 -0
  135. package/lib/module/layouts/root/view-model.js.map +1 -0
  136. package/lib/module/layouts/root/view.js +30 -0
  137. package/lib/module/layouts/root/view.js.map +1 -0
  138. package/lib/module/navigation/index.js +50 -0
  139. package/lib/module/navigation/index.js.map +1 -0
  140. package/lib/module/package.json +1 -0
  141. package/lib/module/screens/document/analysis/index.js +12 -0
  142. package/lib/module/screens/document/analysis/index.js.map +1 -0
  143. package/lib/module/screens/document/analysis/view-model.js +81 -0
  144. package/lib/module/screens/document/analysis/view-model.js.map +1 -0
  145. package/lib/module/screens/document/analysis/view.js +18 -0
  146. package/lib/module/screens/document/analysis/view.js.map +1 -0
  147. package/lib/module/screens/document/camera/index.js +12 -0
  148. package/lib/module/screens/document/camera/index.js.map +1 -0
  149. package/lib/module/screens/document/camera/view-model.js +377 -0
  150. package/lib/module/screens/document/camera/view-model.js.map +1 -0
  151. package/lib/module/screens/document/camera/view.js +191 -0
  152. package/lib/module/screens/document/camera/view.js.map +1 -0
  153. package/lib/module/screens/document/index.js +12 -0
  154. package/lib/module/screens/document/index.js.map +1 -0
  155. package/lib/module/screens/document/review/index.js +12 -0
  156. package/lib/module/screens/document/review/index.js.map +1 -0
  157. package/lib/module/screens/document/review/view-model.js +68 -0
  158. package/lib/module/screens/document/review/view-model.js.map +1 -0
  159. package/lib/module/screens/document/review/view.js +69 -0
  160. package/lib/module/screens/document/review/view.js.map +1 -0
  161. package/lib/module/screens/document/view-model.js +27 -0
  162. package/lib/module/screens/document/view-model.js.map +1 -0
  163. package/lib/module/screens/document/view.js +69 -0
  164. package/lib/module/screens/document/view.js.map +1 -0
  165. package/lib/module/screens/face-auth/analysis/index.js +12 -0
  166. package/lib/module/screens/face-auth/analysis/index.js.map +1 -0
  167. package/lib/module/screens/face-auth/analysis/view-model.js +147 -0
  168. package/lib/module/screens/face-auth/analysis/view-model.js.map +1 -0
  169. package/lib/module/screens/face-auth/analysis/view.js +25 -0
  170. package/lib/module/screens/face-auth/analysis/view.js.map +1 -0
  171. package/lib/module/screens/face-auth/camera/index.js +12 -0
  172. package/lib/module/screens/face-auth/camera/index.js.map +1 -0
  173. package/lib/module/screens/face-auth/camera/overlay.js +26 -0
  174. package/lib/module/screens/face-auth/camera/overlay.js.map +1 -0
  175. package/lib/module/screens/face-auth/camera/view-model.js +324 -0
  176. package/lib/module/screens/face-auth/camera/view-model.js.map +1 -0
  177. package/lib/module/screens/face-auth/camera/view.js +119 -0
  178. package/lib/module/screens/face-auth/camera/view.js.map +1 -0
  179. package/lib/module/screens/face-auth/index.js +12 -0
  180. package/lib/module/screens/face-auth/index.js.map +1 -0
  181. package/lib/module/screens/face-auth/view-model.js +23 -0
  182. package/lib/module/screens/face-auth/view-model.js.map +1 -0
  183. package/lib/module/screens/face-auth/view.js +50 -0
  184. package/lib/module/screens/face-auth/view.js.map +1 -0
  185. package/lib/module/screens/index.js +11 -0
  186. package/lib/module/screens/index.js.map +1 -0
  187. package/lib/module/screens/process-finished/index.js +12 -0
  188. package/lib/module/screens/process-finished/index.js.map +1 -0
  189. package/lib/module/screens/process-finished/view-model.js +18 -0
  190. package/lib/module/screens/process-finished/view-model.js.map +1 -0
  191. package/lib/module/screens/process-finished/view.js +32 -0
  192. package/lib/module/screens/process-finished/view.js.map +1 -0
  193. package/lib/module/services/api.js +31 -0
  194. package/lib/module/services/api.js.map +1 -0
  195. package/lib/module/services/credentials/generate.js +25 -0
  196. package/lib/module/services/credentials/generate.js.map +1 -0
  197. package/lib/module/services/credentials/index.js +4 -0
  198. package/lib/module/services/credentials/index.js.map +1 -0
  199. package/lib/module/services/documents/index.js +5 -0
  200. package/lib/module/services/documents/index.js.map +1 -0
  201. package/lib/module/services/documents/validate-pdf.js +33 -0
  202. package/lib/module/services/documents/validate-pdf.js.map +1 -0
  203. package/lib/module/services/documents/validate-picture.js +31 -0
  204. package/lib/module/services/documents/validate-picture.js.map +1 -0
  205. package/lib/module/services/index.js +8 -0
  206. package/lib/module/services/index.js.map +1 -0
  207. package/lib/module/services/location/get-from-user-ip.js +19 -0
  208. package/lib/module/services/location/get-from-user-ip.js.map +1 -0
  209. package/lib/module/services/location/index.js +4 -0
  210. package/lib/module/services/location/index.js.map +1 -0
  211. package/lib/module/services/onboarding/create-channel.js +24 -0
  212. package/lib/module/services/onboarding/create-channel.js.map +1 -0
  213. package/lib/module/services/onboarding/index.js +4 -0
  214. package/lib/module/services/onboarding/index.js.map +1 -0
  215. package/lib/module/services/process/alter-status.js +30 -0
  216. package/lib/module/services/process/alter-status.js.map +1 -0
  217. package/lib/module/services/process/create-error-log.js +21 -0
  218. package/lib/module/services/process/create-error-log.js.map +1 -0
  219. package/lib/module/services/process/create-timeline.js +41 -0
  220. package/lib/module/services/process/create-timeline.js.map +1 -0
  221. package/lib/module/services/process/done.js +54 -0
  222. package/lib/module/services/process/done.js.map +1 -0
  223. package/lib/module/services/process/generate-data.js +25 -0
  224. package/lib/module/services/process/generate-data.js.map +1 -0
  225. package/lib/module/services/process/index.js +9 -0
  226. package/lib/module/services/process/index.js.map +1 -0
  227. package/lib/module/services/process/start.js +40 -0
  228. package/lib/module/services/process/start.js.map +1 -0
  229. package/lib/module/store/env-variables.js +20 -0
  230. package/lib/module/store/env-variables.js.map +1 -0
  231. package/lib/module/store/flow.js +35 -0
  232. package/lib/module/store/flow.js.map +1 -0
  233. package/lib/module/store/index.js +7 -0
  234. package/lib/module/store/index.js.map +1 -0
  235. package/lib/module/store/process-timeline-queue.js +14 -0
  236. package/lib/module/store/process-timeline-queue.js.map +1 -0
  237. package/lib/module/store/process.js +31 -0
  238. package/lib/module/store/process.js.map +1 -0
  239. package/lib/module/theme/border-radius.js +9 -0
  240. package/lib/module/theme/border-radius.js.map +1 -0
  241. package/lib/module/theme/button-variants.js +19 -0
  242. package/lib/module/theme/button-variants.js.map +1 -0
  243. package/lib/module/theme/common-colors.js +15 -0
  244. package/lib/module/theme/common-colors.js.map +1 -0
  245. package/lib/module/theme/default-colors.js +7 -0
  246. package/lib/module/theme/default-colors.js.map +1 -0
  247. package/lib/module/theme/index.js +21 -0
  248. package/lib/module/theme/index.js.map +1 -0
  249. package/lib/module/theme/spacing.js +14 -0
  250. package/lib/module/theme/spacing.js.map +1 -0
  251. package/lib/module/theme/text-variants.js +17 -0
  252. package/lib/module/theme/text-variants.js.map +1 -0
  253. package/lib/module/utils/get-error-metadata.js +26 -0
  254. package/lib/module/utils/get-error-metadata.js.map +1 -0
  255. package/lib/module/utils/get-route-step.js +12 -0
  256. package/lib/module/utils/get-route-step.js.map +1 -0
  257. package/lib/module/utils/index.js +5 -0
  258. package/lib/module/utils/index.js.map +1 -0
  259. package/lib/module/view-model.js +167 -0
  260. package/lib/module/view-model.js.map +1 -0
  261. package/lib/module/view.js +45 -0
  262. package/lib/module/view.js.map +1 -0
  263. package/lib/typescript/assets/svgs/arrow-right.d.ts +3 -0
  264. package/lib/typescript/assets/svgs/arrow-right.d.ts.map +1 -0
  265. package/lib/typescript/assets/svgs/back-document-circle.d.ts +3 -0
  266. package/lib/typescript/assets/svgs/back-document-circle.d.ts.map +1 -0
  267. package/lib/typescript/assets/svgs/camera-error-circle.d.ts +7 -0
  268. package/lib/typescript/assets/svgs/camera-error-circle.d.ts.map +1 -0
  269. package/lib/typescript/assets/svgs/camera-plus.d.ts +3 -0
  270. package/lib/typescript/assets/svgs/camera-plus.d.ts.map +1 -0
  271. package/lib/typescript/assets/svgs/checklist-circle.d.ts +3 -0
  272. package/lib/typescript/assets/svgs/checklist-circle.d.ts.map +1 -0
  273. package/lib/typescript/assets/svgs/clock-circle.d.ts +7 -0
  274. package/lib/typescript/assets/svgs/clock-circle.d.ts.map +1 -0
  275. package/lib/typescript/assets/svgs/document-2.d.ts +3 -0
  276. package/lib/typescript/assets/svgs/document-2.d.ts.map +1 -0
  277. package/lib/typescript/assets/svgs/document-avatar.d.ts +3 -0
  278. package/lib/typescript/assets/svgs/document-avatar.d.ts.map +1 -0
  279. package/lib/typescript/assets/svgs/document-camera-overlay.d.ts +11 -0
  280. package/lib/typescript/assets/svgs/document-camera-overlay.d.ts.map +1 -0
  281. package/lib/typescript/assets/svgs/document-circle.d.ts +3 -0
  282. package/lib/typescript/assets/svgs/document-circle.d.ts.map +1 -0
  283. package/lib/typescript/assets/svgs/document.d.ts +3 -0
  284. package/lib/typescript/assets/svgs/document.d.ts.map +1 -0
  285. package/lib/typescript/assets/svgs/face-auth-avatar.d.ts +3 -0
  286. package/lib/typescript/assets/svgs/face-auth-avatar.d.ts.map +1 -0
  287. package/lib/typescript/assets/svgs/face-auth-camera-overlay.d.ts +11 -0
  288. package/lib/typescript/assets/svgs/face-auth-camera-overlay.d.ts.map +1 -0
  289. package/lib/typescript/assets/svgs/face-id-circle.d.ts +3 -0
  290. package/lib/typescript/assets/svgs/face-id-circle.d.ts.map +1 -0
  291. package/lib/typescript/assets/svgs/face-id-error.d.ts +7 -0
  292. package/lib/typescript/assets/svgs/face-id-error.d.ts.map +1 -0
  293. package/lib/typescript/assets/svgs/face-id.d.ts +3 -0
  294. package/lib/typescript/assets/svgs/face-id.d.ts.map +1 -0
  295. package/lib/typescript/assets/svgs/index.d.ts +25 -0
  296. package/lib/typescript/assets/svgs/index.d.ts.map +1 -0
  297. package/lib/typescript/assets/svgs/location-error-circle.d.ts +7 -0
  298. package/lib/typescript/assets/svgs/location-error-circle.d.ts.map +1 -0
  299. package/lib/typescript/assets/svgs/process-finished.d.ts +7 -0
  300. package/lib/typescript/assets/svgs/process-finished.d.ts.map +1 -0
  301. package/lib/typescript/assets/svgs/refresh.d.ts +3 -0
  302. package/lib/typescript/assets/svgs/refresh.d.ts.map +1 -0
  303. package/lib/typescript/assets/svgs/shield-check-circle.d.ts +3 -0
  304. package/lib/typescript/assets/svgs/shield-check-circle.d.ts.map +1 -0
  305. package/lib/typescript/assets/svgs/thumb-up.d.ts +7 -0
  306. package/lib/typescript/assets/svgs/thumb-up.d.ts.map +1 -0
  307. package/lib/typescript/assets/svgs/upload.d.ts +3 -0
  308. package/lib/typescript/assets/svgs/upload.d.ts.map +1 -0
  309. package/lib/typescript/assets/svgs/x-error-circle.d.ts +7 -0
  310. package/lib/typescript/assets/svgs/x-error-circle.d.ts.map +1 -0
  311. package/lib/typescript/assets/svgs/x.d.ts +3 -0
  312. package/lib/typescript/assets/svgs/x.d.ts.map +1 -0
  313. package/lib/typescript/eslint.config.d.mts +3 -0
  314. package/lib/typescript/eslint.config.d.mts.map +1 -0
  315. package/lib/typescript/package.json +1 -0
  316. package/lib/typescript/src/app.d.ts +3 -0
  317. package/lib/typescript/src/app.d.ts.map +1 -0
  318. package/lib/typescript/src/components/button.d.ts +15 -0
  319. package/lib/typescript/src/components/button.d.ts.map +1 -0
  320. package/lib/typescript/src/components/centered-loading.d.ts +3 -0
  321. package/lib/typescript/src/components/centered-loading.d.ts.map +1 -0
  322. package/lib/typescript/src/components/default-error-fallback.d.ts +6 -0
  323. package/lib/typescript/src/components/default-error-fallback.d.ts.map +1 -0
  324. package/lib/typescript/src/components/default-loading.d.ts +7 -0
  325. package/lib/typescript/src/components/default-loading.d.ts.map +1 -0
  326. package/lib/typescript/src/components/description-loading.d.ts +10 -0
  327. package/lib/typescript/src/components/description-loading.d.ts.map +1 -0
  328. package/lib/typescript/src/components/error-fallback.d.ts +5 -0
  329. package/lib/typescript/src/components/error-fallback.d.ts.map +1 -0
  330. package/lib/typescript/src/components/identification-error.d.ts +11 -0
  331. package/lib/typescript/src/components/identification-error.d.ts.map +1 -0
  332. package/lib/typescript/src/components/index.d.ts +11 -0
  333. package/lib/typescript/src/components/index.d.ts.map +1 -0
  334. package/lib/typescript/src/components/loading.d.ts +7 -0
  335. package/lib/typescript/src/components/loading.d.ts.map +1 -0
  336. package/lib/typescript/src/components/progress-indicator.d.ts +8 -0
  337. package/lib/typescript/src/components/progress-indicator.d.ts.map +1 -0
  338. package/lib/typescript/src/components/recommended-validations.d.ts +18 -0
  339. package/lib/typescript/src/components/recommended-validations.d.ts.map +1 -0
  340. package/lib/typescript/src/constants/camera-error-messages.d.ts +4 -0
  341. package/lib/typescript/src/constants/camera-error-messages.d.ts.map +1 -0
  342. package/lib/typescript/src/constants/environments.d.ts +33 -0
  343. package/lib/typescript/src/constants/environments.d.ts.map +1 -0
  344. package/lib/typescript/src/constants/error-header-fields.d.ts +40 -0
  345. package/lib/typescript/src/constants/error-header-fields.d.ts.map +1 -0
  346. package/lib/typescript/src/constants/image-type-references.d.ts +3 -0
  347. package/lib/typescript/src/constants/image-type-references.d.ts.map +1 -0
  348. package/lib/typescript/src/constants/index.d.ts +9 -0
  349. package/lib/typescript/src/constants/index.d.ts.map +1 -0
  350. package/lib/typescript/src/constants/progress-steps.d.ts +8 -0
  351. package/lib/typescript/src/constants/progress-steps.d.ts.map +1 -0
  352. package/lib/typescript/src/constants/route-step-index-descriptions.d.ts +3 -0
  353. package/lib/typescript/src/constants/route-step-index-descriptions.d.ts.map +1 -0
  354. package/lib/typescript/src/constants/route-step-indexes.d.ts +8 -0
  355. package/lib/typescript/src/constants/route-step-indexes.d.ts.map +1 -0
  356. package/lib/typescript/src/constants/routes-need-alter-status.d.ts +4 -0
  357. package/lib/typescript/src/constants/routes-need-alter-status.d.ts.map +1 -0
  358. package/lib/typescript/src/enums/document-type.d.ts +6 -0
  359. package/lib/typescript/src/enums/document-type.d.ts.map +1 -0
  360. package/lib/typescript/src/enums/image-type.d.ts +7 -0
  361. package/lib/typescript/src/enums/image-type.d.ts.map +1 -0
  362. package/lib/typescript/src/enums/index.d.ts +8 -0
  363. package/lib/typescript/src/enums/index.d.ts.map +1 -0
  364. package/lib/typescript/src/enums/objective.d.ts +5 -0
  365. package/lib/typescript/src/enums/objective.d.ts.map +1 -0
  366. package/lib/typescript/src/enums/process-status.d.ts +7 -0
  367. package/lib/typescript/src/enums/process-status.d.ts.map +1 -0
  368. package/lib/typescript/src/enums/request-status.d.ts +9 -0
  369. package/lib/typescript/src/enums/request-status.d.ts.map +1 -0
  370. package/lib/typescript/src/enums/timeline-status.d.ts +7 -0
  371. package/lib/typescript/src/enums/timeline-status.d.ts.map +1 -0
  372. package/lib/typescript/src/enums/validation-status.d.ts +6 -0
  373. package/lib/typescript/src/enums/validation-status.d.ts.map +1 -0
  374. package/lib/typescript/src/errors/camera-permission-denied.d.ts +4 -0
  375. package/lib/typescript/src/errors/camera-permission-denied.d.ts.map +1 -0
  376. package/lib/typescript/src/errors/camera-problem.d.ts +4 -0
  377. package/lib/typescript/src/errors/camera-problem.d.ts.map +1 -0
  378. package/lib/typescript/src/errors/contact-support.d.ts +5 -0
  379. package/lib/typescript/src/errors/contact-support.d.ts.map +1 -0
  380. package/lib/typescript/src/errors/geolocation-permission-denied.d.ts +4 -0
  381. package/lib/typescript/src/errors/geolocation-permission-denied.d.ts.map +1 -0
  382. package/lib/typescript/src/errors/index.d.ts +7 -0
  383. package/lib/typescript/src/errors/index.d.ts.map +1 -0
  384. package/lib/typescript/src/errors/non-standard-hours.d.ts +5 -0
  385. package/lib/typescript/src/errors/non-standard-hours.d.ts.map +1 -0
  386. package/lib/typescript/src/errors/process-already-completed.d.ts +5 -0
  387. package/lib/typescript/src/errors/process-already-completed.d.ts.map +1 -0
  388. package/lib/typescript/src/hooks/index.d.ts +14 -0
  389. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  390. package/lib/typescript/src/hooks/use-button.d.ts +12 -0
  391. package/lib/typescript/src/hooks/use-button.d.ts.map +1 -0
  392. package/lib/typescript/src/hooks/use-camera.d.ts +13 -0
  393. package/lib/typescript/src/hooks/use-camera.d.ts.map +1 -0
  394. package/lib/typescript/src/hooks/use-description-loading.d.ts +17 -0
  395. package/lib/typescript/src/hooks/use-description-loading.d.ts.map +1 -0
  396. package/lib/typescript/src/hooks/use-error-fallback.d.ts +35 -0
  397. package/lib/typescript/src/hooks/use-error-fallback.d.ts.map +1 -0
  398. package/lib/typescript/src/hooks/use-identification-error.d.ts +9 -0
  399. package/lib/typescript/src/hooks/use-identification-error.d.ts.map +1 -0
  400. package/lib/typescript/src/hooks/use-loading.d.ts +14 -0
  401. package/lib/typescript/src/hooks/use-loading.d.ts.map +1 -0
  402. package/lib/typescript/src/hooks/use-onboarding-channel.d.ts +9 -0
  403. package/lib/typescript/src/hooks/use-onboarding-channel.d.ts.map +1 -0
  404. package/lib/typescript/src/hooks/use-process-status.d.ts +7 -0
  405. package/lib/typescript/src/hooks/use-process-status.d.ts.map +1 -0
  406. package/lib/typescript/src/hooks/use-process-timeline.d.ts +14 -0
  407. package/lib/typescript/src/hooks/use-process-timeline.d.ts.map +1 -0
  408. package/lib/typescript/src/hooks/use-progress-indicator.d.ts +12 -0
  409. package/lib/typescript/src/hooks/use-progress-indicator.d.ts.map +1 -0
  410. package/lib/typescript/src/hooks/use-recommended-validations.d.ts +9 -0
  411. package/lib/typescript/src/hooks/use-recommended-validations.d.ts.map +1 -0
  412. package/lib/typescript/src/hooks/use-rekognition.d.ts +4 -0
  413. package/lib/typescript/src/hooks/use-rekognition.d.ts.map +1 -0
  414. package/lib/typescript/src/hooks/use-s3.d.ts +6 -0
  415. package/lib/typescript/src/hooks/use-s3.d.ts.map +1 -0
  416. package/lib/typescript/src/index.d.ts +12 -0
  417. package/lib/typescript/src/index.d.ts.map +1 -0
  418. package/lib/typescript/src/layouts/index.d.ts +2 -0
  419. package/lib/typescript/src/layouts/index.d.ts.map +1 -0
  420. package/lib/typescript/src/layouts/root/index.d.ts +6 -0
  421. package/lib/typescript/src/layouts/root/index.d.ts.map +1 -0
  422. package/lib/typescript/src/layouts/root/view-model.d.ts +16 -0
  423. package/lib/typescript/src/layouts/root/view-model.d.ts.map +1 -0
  424. package/lib/typescript/src/layouts/root/view.d.ts +7 -0
  425. package/lib/typescript/src/layouts/root/view.d.ts.map +1 -0
  426. package/lib/typescript/src/navigation/index.d.ts +29 -0
  427. package/lib/typescript/src/navigation/index.d.ts.map +1 -0
  428. package/lib/typescript/src/screens/document/analysis/index.d.ts +2 -0
  429. package/lib/typescript/src/screens/document/analysis/index.d.ts.map +1 -0
  430. package/lib/typescript/src/screens/document/analysis/view-model.d.ts +16 -0
  431. package/lib/typescript/src/screens/document/analysis/view-model.d.ts.map +1 -0
  432. package/lib/typescript/src/screens/document/analysis/view.d.ts +5 -0
  433. package/lib/typescript/src/screens/document/analysis/view.d.ts.map +1 -0
  434. package/lib/typescript/src/screens/document/camera/index.d.ts +2 -0
  435. package/lib/typescript/src/screens/document/camera/index.d.ts.map +1 -0
  436. package/lib/typescript/src/screens/document/camera/view-model.d.ts +63 -0
  437. package/lib/typescript/src/screens/document/camera/view-model.d.ts.map +1 -0
  438. package/lib/typescript/src/screens/document/camera/view.d.ts +5 -0
  439. package/lib/typescript/src/screens/document/camera/view.d.ts.map +1 -0
  440. package/lib/typescript/src/screens/document/index.d.ts +2 -0
  441. package/lib/typescript/src/screens/document/index.d.ts.map +1 -0
  442. package/lib/typescript/src/screens/document/review/index.d.ts +2 -0
  443. package/lib/typescript/src/screens/document/review/index.d.ts.map +1 -0
  444. package/lib/typescript/src/screens/document/review/view-model.d.ts +31 -0
  445. package/lib/typescript/src/screens/document/review/view-model.d.ts.map +1 -0
  446. package/lib/typescript/src/screens/document/review/view.d.ts +5 -0
  447. package/lib/typescript/src/screens/document/review/view.d.ts.map +1 -0
  448. package/lib/typescript/src/screens/document/view-model.d.ts +12 -0
  449. package/lib/typescript/src/screens/document/view-model.d.ts.map +1 -0
  450. package/lib/typescript/src/screens/document/view.d.ts +5 -0
  451. package/lib/typescript/src/screens/document/view.d.ts.map +1 -0
  452. package/lib/typescript/src/screens/face-auth/analysis/index.d.ts +2 -0
  453. package/lib/typescript/src/screens/face-auth/analysis/index.d.ts.map +1 -0
  454. package/lib/typescript/src/screens/face-auth/analysis/view-model.d.ts +26 -0
  455. package/lib/typescript/src/screens/face-auth/analysis/view-model.d.ts.map +1 -0
  456. package/lib/typescript/src/screens/face-auth/analysis/view.d.ts +5 -0
  457. package/lib/typescript/src/screens/face-auth/analysis/view.d.ts.map +1 -0
  458. package/lib/typescript/src/screens/face-auth/camera/index.d.ts +2 -0
  459. package/lib/typescript/src/screens/face-auth/camera/index.d.ts.map +1 -0
  460. package/lib/typescript/src/screens/face-auth/camera/overlay.d.ts +11 -0
  461. package/lib/typescript/src/screens/face-auth/camera/overlay.d.ts.map +1 -0
  462. package/lib/typescript/src/screens/face-auth/camera/view-model.d.ts +56 -0
  463. package/lib/typescript/src/screens/face-auth/camera/view-model.d.ts.map +1 -0
  464. package/lib/typescript/src/screens/face-auth/camera/view.d.ts +5 -0
  465. package/lib/typescript/src/screens/face-auth/camera/view.d.ts.map +1 -0
  466. package/lib/typescript/src/screens/face-auth/index.d.ts +2 -0
  467. package/lib/typescript/src/screens/face-auth/index.d.ts.map +1 -0
  468. package/lib/typescript/src/screens/face-auth/view-model.d.ts +17 -0
  469. package/lib/typescript/src/screens/face-auth/view-model.d.ts.map +1 -0
  470. package/lib/typescript/src/screens/face-auth/view.d.ts +5 -0
  471. package/lib/typescript/src/screens/face-auth/view.d.ts.map +1 -0
  472. package/lib/typescript/src/screens/index.d.ts +9 -0
  473. package/lib/typescript/src/screens/index.d.ts.map +1 -0
  474. package/lib/typescript/src/screens/process-finished/index.d.ts +2 -0
  475. package/lib/typescript/src/screens/process-finished/index.d.ts.map +1 -0
  476. package/lib/typescript/src/screens/process-finished/view-model.d.ts +4 -0
  477. package/lib/typescript/src/screens/process-finished/view-model.d.ts.map +1 -0
  478. package/lib/typescript/src/screens/process-finished/view.d.ts +5 -0
  479. package/lib/typescript/src/screens/process-finished/view.d.ts.map +1 -0
  480. package/lib/typescript/src/services/api.d.ts +5 -0
  481. package/lib/typescript/src/services/api.d.ts.map +1 -0
  482. package/lib/typescript/src/services/credentials/generate.d.ts +16 -0
  483. package/lib/typescript/src/services/credentials/generate.d.ts.map +1 -0
  484. package/lib/typescript/src/services/credentials/index.d.ts +2 -0
  485. package/lib/typescript/src/services/credentials/index.d.ts.map +1 -0
  486. package/lib/typescript/src/services/documents/index.d.ts +3 -0
  487. package/lib/typescript/src/services/documents/index.d.ts.map +1 -0
  488. package/lib/typescript/src/services/documents/validate-pdf.d.ts +10 -0
  489. package/lib/typescript/src/services/documents/validate-pdf.d.ts.map +1 -0
  490. package/lib/typescript/src/services/documents/validate-picture.d.ts +13 -0
  491. package/lib/typescript/src/services/documents/validate-picture.d.ts.map +1 -0
  492. package/lib/typescript/src/services/index.d.ts +6 -0
  493. package/lib/typescript/src/services/index.d.ts.map +1 -0
  494. package/lib/typescript/src/services/location/get-from-user-ip.d.ts +14 -0
  495. package/lib/typescript/src/services/location/get-from-user-ip.d.ts.map +1 -0
  496. package/lib/typescript/src/services/location/index.d.ts +2 -0
  497. package/lib/typescript/src/services/location/index.d.ts.map +1 -0
  498. package/lib/typescript/src/services/onboarding/create-channel.d.ts +16 -0
  499. package/lib/typescript/src/services/onboarding/create-channel.d.ts.map +1 -0
  500. package/lib/typescript/src/services/onboarding/index.d.ts +2 -0
  501. package/lib/typescript/src/services/onboarding/index.d.ts.map +1 -0
  502. package/lib/typescript/src/services/process/alter-status.d.ts +11 -0
  503. package/lib/typescript/src/services/process/alter-status.d.ts.map +1 -0
  504. package/lib/typescript/src/services/process/create-error-log.d.ts +7 -0
  505. package/lib/typescript/src/services/process/create-error-log.d.ts.map +1 -0
  506. package/lib/typescript/src/services/process/create-timeline.d.ts +23 -0
  507. package/lib/typescript/src/services/process/create-timeline.d.ts.map +1 -0
  508. package/lib/typescript/src/services/process/done.d.ts +35 -0
  509. package/lib/typescript/src/services/process/done.d.ts.map +1 -0
  510. package/lib/typescript/src/services/process/generate-data.d.ts +27 -0
  511. package/lib/typescript/src/services/process/generate-data.d.ts.map +1 -0
  512. package/lib/typescript/src/services/process/index.d.ts +7 -0
  513. package/lib/typescript/src/services/process/index.d.ts.map +1 -0
  514. package/lib/typescript/src/services/process/start.d.ts +33 -0
  515. package/lib/typescript/src/services/process/start.d.ts.map +1 -0
  516. package/lib/typescript/src/store/env-variables.d.ts +15 -0
  517. package/lib/typescript/src/store/env-variables.d.ts.map +1 -0
  518. package/lib/typescript/src/store/flow.d.ts +25 -0
  519. package/lib/typescript/src/store/flow.d.ts.map +1 -0
  520. package/lib/typescript/src/store/index.d.ts +5 -0
  521. package/lib/typescript/src/store/index.d.ts.map +1 -0
  522. package/lib/typescript/src/store/process-timeline-queue.d.ts +10 -0
  523. package/lib/typescript/src/store/process-timeline-queue.d.ts.map +1 -0
  524. package/lib/typescript/src/store/process.d.ts +26 -0
  525. package/lib/typescript/src/store/process.d.ts.map +1 -0
  526. package/lib/typescript/src/theme/border-radius.d.ts +7 -0
  527. package/lib/typescript/src/theme/border-radius.d.ts.map +1 -0
  528. package/lib/typescript/src/theme/button-variants.d.ts +17 -0
  529. package/lib/typescript/src/theme/button-variants.d.ts.map +1 -0
  530. package/lib/typescript/src/theme/common-colors.d.ts +13 -0
  531. package/lib/typescript/src/theme/common-colors.d.ts.map +1 -0
  532. package/lib/typescript/src/theme/default-colors.d.ts +5 -0
  533. package/lib/typescript/src/theme/default-colors.d.ts.map +1 -0
  534. package/lib/typescript/src/theme/index.d.ts +77 -0
  535. package/lib/typescript/src/theme/index.d.ts.map +1 -0
  536. package/lib/typescript/src/theme/spacing.d.ts +12 -0
  537. package/lib/typescript/src/theme/spacing.d.ts.map +1 -0
  538. package/lib/typescript/src/theme/text-variants.d.ts +15 -0
  539. package/lib/typescript/src/theme/text-variants.d.ts.map +1 -0
  540. package/lib/typescript/src/utils/get-error-metadata.d.ts +18 -0
  541. package/lib/typescript/src/utils/get-error-metadata.d.ts.map +1 -0
  542. package/lib/typescript/src/utils/get-route-step.d.ts +9 -0
  543. package/lib/typescript/src/utils/get-route-step.d.ts.map +1 -0
  544. package/lib/typescript/src/utils/index.d.ts +3 -0
  545. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  546. package/lib/typescript/src/view-model.d.ts +84 -0
  547. package/lib/typescript/src/view-model.d.ts.map +1 -0
  548. package/lib/typescript/src/view.d.ts +5 -0
  549. package/lib/typescript/src/view.d.ts.map +1 -0
  550. package/package.json +200 -0
  551. package/src/app.tsx +9 -0
  552. package/src/components/button.tsx +70 -0
  553. package/src/components/centered-loading.tsx +11 -0
  554. package/src/components/default-error-fallback.tsx +26 -0
  555. package/src/components/default-loading.tsx +29 -0
  556. package/src/components/description-loading.tsx +32 -0
  557. package/src/components/error-fallback.tsx +55 -0
  558. package/src/components/identification-error.tsx +37 -0
  559. package/src/components/index.ts +10 -0
  560. package/src/components/loading.tsx +50 -0
  561. package/src/components/progress-indicator.tsx +46 -0
  562. package/src/components/recommended-validations.tsx +98 -0
  563. package/src/constants/camera-error-messages.ts +24 -0
  564. package/src/constants/environments.ts +35 -0
  565. package/src/constants/error-header-fields.ts +41 -0
  566. package/src/constants/image-type-references.ts +8 -0
  567. package/src/constants/index.ts +8 -0
  568. package/src/constants/progress-steps.ts +23 -0
  569. package/src/constants/route-step-index-descriptions.ts +14 -0
  570. package/src/constants/route-step-indexes.ts +20 -0
  571. package/src/constants/routes-need-alter-status.ts +8 -0
  572. package/src/enums/document-type.ts +5 -0
  573. package/src/enums/image-type.ts +6 -0
  574. package/src/enums/index.ts +7 -0
  575. package/src/enums/objective.ts +4 -0
  576. package/src/enums/process-status.ts +6 -0
  577. package/src/enums/request-status.ts +8 -0
  578. package/src/enums/timeline-status.ts +6 -0
  579. package/src/enums/validation-status.ts +5 -0
  580. package/src/errors/camera-permission-denied.ts +9 -0
  581. package/src/errors/camera-problem.ts +7 -0
  582. package/src/errors/contact-support.ts +10 -0
  583. package/src/errors/geolocation-permission-denied.ts +9 -0
  584. package/src/errors/index.ts +6 -0
  585. package/src/errors/non-standard-hours.ts +11 -0
  586. package/src/errors/process-already-completed.ts +10 -0
  587. package/src/hooks/index.ts +13 -0
  588. package/src/hooks/use-button.ts +22 -0
  589. package/src/hooks/use-camera.ts +131 -0
  590. package/src/hooks/use-description-loading.ts +19 -0
  591. package/src/hooks/use-error-fallback.ts +33 -0
  592. package/src/hooks/use-identification-error.ts +13 -0
  593. package/src/hooks/use-loading.ts +52 -0
  594. package/src/hooks/use-onboarding-channel.ts +115 -0
  595. package/src/hooks/use-process-status.ts +82 -0
  596. package/src/hooks/use-process-timeline.ts +155 -0
  597. package/src/hooks/use-progress-indicator.ts +51 -0
  598. package/src/hooks/use-recommended-validations.ts +52 -0
  599. package/src/hooks/use-rekognition.ts +41 -0
  600. package/src/hooks/use-s3.ts +113 -0
  601. package/src/index.tsx +31 -0
  602. package/src/layouts/index.ts +1 -0
  603. package/src/layouts/root/index.tsx +12 -0
  604. package/src/layouts/root/view-model.ts +13 -0
  605. package/src/layouts/root/view.tsx +24 -0
  606. package/src/navigation/index.tsx +92 -0
  607. package/src/screens/document/analysis/index.tsx +8 -0
  608. package/src/screens/document/analysis/view-model.ts +95 -0
  609. package/src/screens/document/analysis/view.tsx +20 -0
  610. package/src/screens/document/camera/index.tsx +8 -0
  611. package/src/screens/document/camera/view-model.ts +570 -0
  612. package/src/screens/document/camera/view.tsx +196 -0
  613. package/src/screens/document/index.tsx +8 -0
  614. package/src/screens/document/review/index.tsx +8 -0
  615. package/src/screens/document/review/view-model.ts +77 -0
  616. package/src/screens/document/review/view.tsx +69 -0
  617. package/src/screens/document/view-model.ts +29 -0
  618. package/src/screens/document/view.tsx +80 -0
  619. package/src/screens/face-auth/analysis/index.tsx +8 -0
  620. package/src/screens/face-auth/analysis/view-model.ts +200 -0
  621. package/src/screens/face-auth/analysis/view.tsx +31 -0
  622. package/src/screens/face-auth/camera/index.tsx +8 -0
  623. package/src/screens/face-auth/camera/overlay.tsx +31 -0
  624. package/src/screens/face-auth/camera/view-model.ts +462 -0
  625. package/src/screens/face-auth/camera/view.tsx +128 -0
  626. package/src/screens/face-auth/index.tsx +8 -0
  627. package/src/screens/face-auth/view-model.ts +25 -0
  628. package/src/screens/face-auth/view.tsx +51 -0
  629. package/src/screens/index.ts +8 -0
  630. package/src/screens/process-finished/index.tsx +8 -0
  631. package/src/screens/process-finished/view-model.ts +15 -0
  632. package/src/screens/process-finished/view.tsx +24 -0
  633. package/src/services/api.ts +39 -0
  634. package/src/services/credentials/generate.ts +37 -0
  635. package/src/services/credentials/index.ts +1 -0
  636. package/src/services/documents/index.ts +2 -0
  637. package/src/services/documents/validate-pdf.ts +46 -0
  638. package/src/services/documents/validate-picture.ts +50 -0
  639. package/src/services/index.ts +5 -0
  640. package/src/services/location/get-from-user-ip.ts +31 -0
  641. package/src/services/location/index.ts +1 -0
  642. package/src/services/onboarding/create-channel.ts +45 -0
  643. package/src/services/onboarding/index.ts +1 -0
  644. package/src/services/process/alter-status.ts +38 -0
  645. package/src/services/process/create-error-log.ts +28 -0
  646. package/src/services/process/create-timeline.ts +75 -0
  647. package/src/services/process/done.ts +114 -0
  648. package/src/services/process/generate-data.ts +54 -0
  649. package/src/services/process/index.ts +6 -0
  650. package/src/services/process/start.ts +86 -0
  651. package/src/store/env-variables.ts +37 -0
  652. package/src/store/flow.ts +54 -0
  653. package/src/store/index.ts +4 -0
  654. package/src/store/process-timeline-queue.ts +25 -0
  655. package/src/store/process.ts +64 -0
  656. package/src/theme/border-radius.ts +6 -0
  657. package/src/theme/button-variants.ts +16 -0
  658. package/src/theme/common-colors.ts +12 -0
  659. package/src/theme/default-colors.ts +4 -0
  660. package/src/theme/index.ts +31 -0
  661. package/src/theme/spacing.ts +11 -0
  662. package/src/theme/text-variants.ts +14 -0
  663. package/src/utils/get-error-metadata.ts +46 -0
  664. package/src/utils/get-route-step.ts +24 -0
  665. package/src/utils/index.ts +2 -0
  666. package/src/view-model.ts +222 -0
  667. package/src/view.tsx +52 -0
@@ -0,0 +1,31 @@
1
+ import { FaceIdCircleSvg, FaceIdErrorSvg } from '../../../../assets/svgs'
2
+ import { RootLayout } from '../../../layouts'
3
+ import { DescriptionLoading, IdentificationError } from '../../../components'
4
+ import { useFaceAuthAnalysisViewModel } from './view-model'
5
+
6
+ type FaceAuthAnalysisViewProps = ReturnType<typeof useFaceAuthAnalysisViewModel>
7
+
8
+ export const FaceAuthAnalysisView = ({
9
+ descriptionLoadingProps,
10
+ descriptionLoadingMessage,
11
+ identificationErrorProps,
12
+ couldNotBeIdentified,
13
+ onTryAgainPress,
14
+ }: FaceAuthAnalysisViewProps) => (
15
+ <RootLayout>
16
+ {couldNotBeIdentified ? (
17
+ <IdentificationError
18
+ {...identificationErrorProps}
19
+ icon={FaceIdErrorSvg}
20
+ onTryAgainPress={onTryAgainPress}
21
+ />
22
+ ) : (
23
+ <DescriptionLoading
24
+ {...descriptionLoadingProps}
25
+ title="Analisando foto facial"
26
+ message={descriptionLoadingMessage}
27
+ icon={FaceIdCircleSvg}
28
+ />
29
+ )}
30
+ </RootLayout>
31
+ )
@@ -0,0 +1,8 @@
1
+ import { FaceAuthCameraView } from './view'
2
+ import { useFaceAuthCameraViewModel } from './view-model'
3
+
4
+ export const FaceAuthCameraScreen = () => {
5
+ const props = useFaceAuthCameraViewModel()
6
+
7
+ return <FaceAuthCameraView {...props} />
8
+ }
@@ -0,0 +1,31 @@
1
+ import { createBox } from '@shopify/restyle'
2
+ import { FaceAuthCameraOverlaySvg } from '../../../../assets/svgs'
3
+ import { type CustomThemeProps } from '../../../theme'
4
+
5
+ type FaceAuthCameraOverlayProps = {
6
+ ovalCenterX: number
7
+ ovalCenterY: number
8
+ ovalRadiusX: number
9
+ ovalRadiusY: number
10
+ backgroundColor: string
11
+ ellipseBorderColor: string
12
+ }
13
+
14
+ const Box = createBox<CustomThemeProps>()
15
+
16
+ export const FaceAuthCameraOverlay = ({
17
+ backgroundColor,
18
+ ...props
19
+ }: FaceAuthCameraOverlayProps) => (
20
+ <Box flex={1}>
21
+ <FaceAuthCameraOverlaySvg {...props} color={backgroundColor} />
22
+ <Box
23
+ position="absolute"
24
+ bottom={0.1}
25
+ left={0}
26
+ right={0}
27
+ height={0.1}
28
+ style={{ backgroundColor }}
29
+ />
30
+ </Box>
31
+ )
@@ -0,0 +1,462 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
2
+ import {
3
+ Platform,
4
+ View,
5
+ type LayoutChangeEvent,
6
+ type LayoutRectangle,
7
+ } from 'react-native'
8
+ import {
9
+ useNavigation,
10
+ useRoute,
11
+ type RouteProp,
12
+ } from '@react-navigation/native'
13
+ import { type NativeStackNavigationProp } from '@react-navigation/native-stack'
14
+ import { useMutation, useQuery } from '@tanstack/react-query'
15
+ import { useTheme } from '@shopify/restyle'
16
+ import { type Frame } from 'react-native-vision-camera'
17
+ import {
18
+ type Face,
19
+ type FaceDetectionOptions,
20
+ } from 'react-native-vision-camera-face-detector'
21
+ import Geolocation from '@react-native-community/geolocation'
22
+ import { useDebounce } from 'use-debounce'
23
+ import { type RootStackParamList } from '../../../navigation'
24
+ import { useFlowStore, useProcessStore } from '../../../store'
25
+ import {
26
+ generateTemporaryCredentials,
27
+ getLocationFromUserIp,
28
+ startProcess,
29
+ } from '../../../services'
30
+ import {
31
+ useCamera,
32
+ useProcessTimeline,
33
+ useDescriptionLoading,
34
+ useLoading,
35
+ useRecommendedValidations,
36
+ } from '../../../hooks'
37
+ import { Objective, TimelineStatus } from '../../../enums'
38
+ import { type CustomThemeProps } from '../../../theme'
39
+ import { GeolocationPermissionDeniedError } from '../../../errors'
40
+
41
+ export const useFaceAuthCameraViewModel = () => {
42
+ const route = useRoute<RouteProp<RootStackParamList, 'FaceAuthCamera'>>()
43
+ const navigation =
44
+ useNavigation<NativeStackNavigationProp<RootStackParamList>>()
45
+ const [overlayAreaLayout, setOverlayAreaLayout] = useState<LayoutRectangle>({
46
+ width: 0,
47
+ height: 0,
48
+ x: 0,
49
+ y: 0,
50
+ })
51
+ const [recommendedValidationsLayout, setRecommendedValidationsLayout] =
52
+ useState<LayoutRectangle>({
53
+ width: 0,
54
+ height: 0,
55
+ x: 0,
56
+ y: 0,
57
+ })
58
+ const [coordinates, setCoordinates] = useState<{
59
+ latitude: number
60
+ longitude: number
61
+ } | null>(null)
62
+ const [isLoading, setIsLoading] = useState(!route.params?.retry)
63
+ const [descriptionLoadingMessage, setDescriptionLoadingMessage] =
64
+ useState<string>()
65
+ const [isGeolocationPermissionDenied, setIsGeolocationPermissionDenied] =
66
+ useState(false)
67
+ const [faceIsAligned, setFaceIsAligned] = useState(false)
68
+ const [shouldCapture, setShouldCapture] = useState(false)
69
+ const { colors } = useTheme<CustomThemeProps>()
70
+ const [faceIsAlignedVisualDebounced] = useDebounce(faceIsAligned, 300)
71
+ const [faceIsAlignedDebounced] = useDebounce(
72
+ faceIsAlignedVisualDebounced,
73
+ 800,
74
+ )
75
+ const overlayAreaRef = useRef<React.ComponentRef<typeof View>>(null)
76
+ const prevFaceIsAlignedDebouncedRef = useRef(false)
77
+ const faceDetectionOptions = useMemo<FaceDetectionOptions>(
78
+ () => ({
79
+ windowWidth: overlayAreaLayout.width,
80
+ windowHeight: overlayAreaLayout.height,
81
+ performanceMode: 'accurate',
82
+ landmarkMode: 'all',
83
+ contourMode: 'none',
84
+ classificationMode: 'all',
85
+ trackingEnabled: true,
86
+ autoMode: true,
87
+ }),
88
+ [overlayAreaLayout],
89
+ )
90
+ const {
91
+ authToken,
92
+ tenant,
93
+ backgroundCheckId,
94
+ document,
95
+ objective,
96
+ isSimplifiedMode,
97
+ } = useProcessStore((state) => ({
98
+ authToken: state.authToken,
99
+ tenant: state.tenant,
100
+ backgroundCheckId: state.backgroundCheckId,
101
+ document: state.document,
102
+ objective: state.objective,
103
+ isSimplifiedMode: state.isSimplifiedMode,
104
+ }))
105
+ const { setTemporaryCredentials, setBackgroundCheckExecutionId } =
106
+ useFlowStore((state) => ({
107
+ setTemporaryCredentials: state.setTemporaryCredentials,
108
+ setBackgroundCheckExecutionId: state.setBackgroundCheckExecutionId,
109
+ }))
110
+ const {
111
+ ref,
112
+ device,
113
+ hasPermission,
114
+ isReady,
115
+ enablePhoto,
116
+ onInitialized,
117
+ onError,
118
+ takePicture,
119
+ } = useCamera('front')
120
+ const { create: createProcessTimeline } = useProcessTimeline()
121
+ const {
122
+ data: location,
123
+ error: locationError,
124
+ isSuccess: isLocationGetted,
125
+ isError: isLocationError,
126
+ } = useQuery({
127
+ queryKey: ['location', coordinates, route.params?.retry],
128
+ queryFn: getLocationFromUserIp,
129
+ enabled: !!coordinates && !route.params?.retry,
130
+ })
131
+ const {
132
+ data: temporaryCredentials,
133
+ error: temporaryCredentialsError,
134
+ isSuccess: isTemporaryCredentialsGenerated,
135
+ isError: isTemporaryCredentialsError,
136
+ } = useQuery({
137
+ queryKey: [
138
+ 'temporaryCredentials',
139
+ authToken,
140
+ tenant,
141
+ backgroundCheckId,
142
+ route.params?.retry,
143
+ ],
144
+ queryFn: () => {
145
+ setDescriptionLoadingMessage('Gerando as credenciais')
146
+
147
+ return generateTemporaryCredentials({
148
+ authToken,
149
+ tenant,
150
+ backgroundCheckId,
151
+ })
152
+ },
153
+ enabled: !route.params?.retry,
154
+ })
155
+ const {
156
+ mutate: startProcessMutate,
157
+ error: startProcessError,
158
+ isError: isStartProcessError,
159
+ } = useMutation({
160
+ mutationFn: startProcess,
161
+ onSuccess: ({ data }) => {
162
+ setBackgroundCheckExecutionId(data.background_check_execution_id)
163
+ setIsLoading(false)
164
+ },
165
+ onError: () => {
166
+ setIsLoading(false)
167
+ },
168
+ })
169
+
170
+ const ellipseBorderColor = !isReady
171
+ ? colors.gray
172
+ : faceIsAlignedVisualDebounced
173
+ ? colors.green
174
+ : colors.red
175
+ const ovalWidth = isSimplifiedMode
176
+ ? overlayAreaLayout.width * 0.7
177
+ : overlayAreaLayout.width * 0.8
178
+ const ovalHeight = isSimplifiedMode
179
+ ? overlayAreaLayout.height * 0.75
180
+ : overlayAreaLayout.height * 0.65
181
+ const ovalRadiusX = ovalWidth / 2
182
+ const ovalRadiusY = ovalHeight / 2
183
+ const ovalCenterX = overlayAreaLayout.width / 2
184
+ const ovalCenterY = overlayAreaLayout.height / 2
185
+ const ovalTop = ovalCenterY - ovalRadiusY
186
+ const ovalBottom = ovalCenterY + ovalRadiusY
187
+ const ovalLeft = ovalCenterX - ovalRadiusX
188
+ const ovalRight = ovalCenterX + ovalRadiusX
189
+ const ovalToleranceX = ovalRadiusX * 0.05
190
+ const ovalToleranceY = ovalRadiusY * 0.05
191
+ const overlayWithRecommendedValidationsHeight =
192
+ overlayAreaLayout.height + recommendedValidationsLayout.height
193
+ const overlayCompressionRatio =
194
+ overlayAreaLayout.height / overlayWithRecommendedValidationsHeight
195
+ const androidMinDistanceFactor = isSimplifiedMode ? 0.31 : 0.36
196
+ const androidMaxDistanceFactor = androidMinDistanceFactor * 1.05
197
+ const iosMinDistanceFactor = isSimplifiedMode ? 0.15 : 0.17
198
+ const iosMaxDistanceFactor = iosMinDistanceFactor * 1.05
199
+ const minDistanceFactor =
200
+ Platform.OS === 'android' ? androidMinDistanceFactor : iosMinDistanceFactor
201
+ const maxDistanceFactor =
202
+ Platform.OS === 'android' ? androidMaxDistanceFactor : iosMaxDistanceFactor
203
+ const isLoadingOverlayLayout = !ovalWidth || !ovalHeight
204
+
205
+ const descriptionLoadingProps = useDescriptionLoading({ isActive: isLoading })
206
+ const recommendedValidationsProps = useRecommendedValidations()
207
+ const loadingOverlayLayoutProps = useLoading({
208
+ isActive: isLoadingOverlayLayout,
209
+ })
210
+
211
+ const onOverlayAreaLayout = useCallback(() => {
212
+ overlayAreaRef.current?.measureInWindow((x, y, width, height) => {
213
+ setOverlayAreaLayout({ x, y, width, height })
214
+ })
215
+ }, [])
216
+ const onRecommendedValidationsLayout = useCallback(
217
+ (event: LayoutChangeEvent) => {
218
+ setRecommendedValidationsLayout(event.nativeEvent.layout)
219
+ },
220
+ [],
221
+ )
222
+ const transformLandmark = useCallback(
223
+ (landmark: { x: number; y: number }, frame: Frame) => {
224
+ if (Platform.OS === 'android') {
225
+ const offsetY = isSimplifiedMode
226
+ ? overlayAreaLayout.y * overlayCompressionRatio
227
+ : overlayAreaLayout.y
228
+
229
+ return {
230
+ x: landmark.x,
231
+ y: landmark.y - offsetY,
232
+ }
233
+ }
234
+
235
+ const scaleX = overlayAreaLayout.width / frame.height
236
+ const scaleY = overlayAreaLayout.height / frame.width
237
+ const scaledX = landmark.y * scaleX
238
+ const scaledY = landmark.x * scaleY
239
+ const offsetX = overlayAreaLayout.x * scaleX
240
+ const offsetY = overlayAreaLayout.y * scaleY
241
+
242
+ return {
243
+ x: scaledX - offsetX,
244
+ y: scaledY - offsetY,
245
+ }
246
+ },
247
+ [isSimplifiedMode, overlayAreaLayout, overlayCompressionRatio],
248
+ )
249
+ const handleFacesDetection = useCallback(
250
+ async (faces: Face[], frame: Frame) => {
251
+ const face = faces?.[0]
252
+
253
+ if (
254
+ !face ||
255
+ !frame ||
256
+ !face.landmarks?.LEFT_EYE ||
257
+ !face.landmarks?.RIGHT_EYE ||
258
+ !face.landmarks?.NOSE_BASE ||
259
+ !face.landmarks?.MOUTH_BOTTOM ||
260
+ overlayAreaLayout.width === 0 ||
261
+ overlayAreaLayout.height === 0
262
+ ) {
263
+ setFaceIsAligned(false)
264
+ prevFaceIsAlignedDebouncedRef.current = false
265
+
266
+ return
267
+ }
268
+
269
+ const rawLeftEye = face.landmarks.LEFT_EYE
270
+ const rawRightEye = face.landmarks.RIGHT_EYE
271
+ const rawNose = face.landmarks.NOSE_BASE
272
+ const rawMouth = face.landmarks.MOUTH_BOTTOM
273
+ const rawFaceTop = Math.min(rawLeftEye.y, rawRightEye.y, rawNose.y)
274
+ const rawFaceBottom = rawMouth.y
275
+ const rawFaceHeight = rawFaceBottom - rawFaceTop
276
+ const isDistanceGood =
277
+ rawFaceHeight >= frame.height * minDistanceFactor &&
278
+ rawFaceHeight <= frame.height * maxDistanceFactor
279
+
280
+ if (!isDistanceGood) {
281
+ setFaceIsAligned(false)
282
+ prevFaceIsAlignedDebouncedRef.current = false
283
+
284
+ return
285
+ }
286
+
287
+ const leftEye = transformLandmark(face.landmarks.LEFT_EYE, frame)
288
+ const rightEye = transformLandmark(face.landmarks.RIGHT_EYE, frame)
289
+ const nose = transformLandmark(face.landmarks.NOSE_BASE, frame)
290
+ const mouth = transformLandmark(face.landmarks.MOUTH_BOTTOM, frame)
291
+ const faceLeft = Math.min(leftEye.x, rightEye.x, nose.x, mouth.x)
292
+ const faceRight = Math.max(leftEye.x, rightEye.x, nose.x, mouth.x)
293
+ const faceTop = Math.min(leftEye.y, rightEye.y, nose.y, mouth.y)
294
+ const faceBottom = Math.max(leftEye.y, rightEye.y, nose.y, mouth.y)
295
+ const faceCenterX = (faceLeft + faceRight) / 2
296
+ const faceCenterY = (faceTop + faceBottom) / 2
297
+ const allPointsInside =
298
+ faceLeft >= ovalLeft + ovalToleranceX &&
299
+ faceRight <= ovalRight - ovalToleranceX &&
300
+ faceTop >= ovalTop + ovalToleranceY &&
301
+ faceBottom <= ovalBottom - ovalToleranceY
302
+ const isAngleGood =
303
+ Math.abs(face.rollAngle) < 8 && Math.abs(face.yawAngle) < 8
304
+ const isCentered =
305
+ Math.abs((faceCenterX - ovalCenterX) / ovalRadiusX) <= 0.05 &&
306
+ Math.abs((faceCenterY - ovalCenterY) / ovalRadiusY) <= 0.05
307
+ const isAligned = allPointsInside && isAngleGood && isCentered
308
+
309
+ setFaceIsAligned(isAligned)
310
+
311
+ if (faceIsAlignedDebounced && !prevFaceIsAlignedDebouncedRef.current) {
312
+ setShouldCapture(true)
313
+ }
314
+
315
+ prevFaceIsAlignedDebouncedRef.current = faceIsAlignedDebounced
316
+ },
317
+ [
318
+ faceIsAlignedDebounced,
319
+ maxDistanceFactor,
320
+ minDistanceFactor,
321
+ ovalBottom,
322
+ ovalCenterX,
323
+ ovalCenterY,
324
+ ovalLeft,
325
+ ovalRadiusX,
326
+ ovalRadiusY,
327
+ ovalRight,
328
+ ovalToleranceX,
329
+ ovalToleranceY,
330
+ ovalTop,
331
+ overlayAreaLayout,
332
+ transformLandmark,
333
+ ],
334
+ )
335
+ const capture = useCallback(async () => {
336
+ const picture = await takePicture()
337
+
338
+ if (!picture) return
339
+
340
+ createProcessTimeline({
341
+ status: TimelineStatus.SUCCESS,
342
+ message: 'Usuário posicionou o rosto e a captura foi realizada',
343
+ })
344
+ navigation.replace('FaceAuthAnalysis', {
345
+ pictureUri: `file://${picture.path}`,
346
+ })
347
+ }, [createProcessTimeline, navigation, takePicture])
348
+
349
+ useEffect(() => {
350
+ if (!coordinates) {
351
+ Geolocation.getCurrentPosition(
352
+ (position) => {
353
+ createProcessTimeline({
354
+ status: TimelineStatus.SUCCESS,
355
+ message: 'Acesso à localização permitido pelo usuário',
356
+ })
357
+ setCoordinates({
358
+ latitude: position.coords.latitude,
359
+ longitude: position.coords.longitude,
360
+ })
361
+ },
362
+ (error) => {
363
+ if (error.PERMISSION_DENIED) {
364
+ setIsGeolocationPermissionDenied(true)
365
+ }
366
+ },
367
+ { timeout: 15000 },
368
+ )
369
+ }
370
+ }, [coordinates, createProcessTimeline])
371
+
372
+ useEffect(() => {
373
+ if (isTemporaryCredentialsGenerated) {
374
+ setTemporaryCredentials({
375
+ accessKeyId: temporaryCredentials.data.access_key_id,
376
+ secretAccessKey: temporaryCredentials.data.secret_access_key,
377
+ sessionToken: temporaryCredentials.data.session_token,
378
+ expiration: temporaryCredentials.data.expiration,
379
+ })
380
+ }
381
+ }, [
382
+ isTemporaryCredentialsGenerated,
383
+ setTemporaryCredentials,
384
+ temporaryCredentials,
385
+ ])
386
+
387
+ useEffect(() => {
388
+ if (
389
+ isLocationGetted &&
390
+ !!coordinates &&
391
+ !!temporaryCredentials &&
392
+ !route.params?.retry
393
+ ) {
394
+ setDescriptionLoadingMessage(
395
+ objective === Objective.ONBOARDING
396
+ ? 'Iniciando onboarding'
397
+ : 'Iniciando autenticação facial',
398
+ )
399
+ startProcessMutate({
400
+ authToken,
401
+ tenant,
402
+ backgroundCheckId,
403
+ document,
404
+ objective,
405
+ location,
406
+ geolocation: coordinates,
407
+ })
408
+ }
409
+ }, [
410
+ authToken,
411
+ backgroundCheckId,
412
+ coordinates,
413
+ document,
414
+ isLocationGetted,
415
+ location,
416
+ objective,
417
+ route.params?.retry,
418
+ startProcessMutate,
419
+ temporaryCredentials,
420
+ tenant,
421
+ ])
422
+
423
+ useEffect(() => {
424
+ if (shouldCapture) {
425
+ capture()
426
+ }
427
+ }, [shouldCapture, capture])
428
+
429
+ if (isGeolocationPermissionDenied)
430
+ throw new GeolocationPermissionDeniedError()
431
+ if (isLocationError) throw locationError
432
+ if (isTemporaryCredentialsError) throw temporaryCredentialsError
433
+ if (isStartProcessError) throw startProcessError
434
+
435
+ return {
436
+ descriptionLoadingProps,
437
+ descriptionLoadingMessage,
438
+ loadingOverlayLayoutProps,
439
+ recommendedValidationsProps,
440
+ device,
441
+ ref,
442
+ overlayAreaRef,
443
+ overlayColor: colors.secondary,
444
+ ellipseBorderColor,
445
+ ovalCenterX,
446
+ ovalCenterY,
447
+ ovalRadiusX,
448
+ ovalRadiusY,
449
+ faceDetectionOptions,
450
+ isLoading,
451
+ isLoadingOverlayLayout,
452
+ hasPermission,
453
+ isReady,
454
+ enablePhoto,
455
+ isSimplifiedMode,
456
+ onOverlayAreaLayout,
457
+ onRecommendedValidationsLayout,
458
+ onInitialized,
459
+ onError,
460
+ handleFacesDetection,
461
+ }
462
+ }
@@ -0,0 +1,128 @@
1
+ import { Fragment } from 'react'
2
+ import { StyleSheet } from 'react-native'
3
+ import { createBox, createText } from '@shopify/restyle'
4
+ import { Camera } from 'react-native-vision-camera-face-detector'
5
+ import { ChecklistCircleSvg } from '../../../../assets/svgs'
6
+ import { RootLayout } from '../../../layouts'
7
+ import { type CustomThemeProps } from '../../../theme'
8
+ import {
9
+ CenteredLoading,
10
+ DescriptionLoading,
11
+ RecommendedValidations,
12
+ } from '../../../components'
13
+ import { useFaceAuthCameraViewModel } from './view-model'
14
+ import { FaceAuthCameraOverlay } from './overlay'
15
+
16
+ const Box = createBox<CustomThemeProps>()
17
+ const Text = createText<CustomThemeProps>()
18
+
19
+ type FaceAuthCameraViewProps = ReturnType<typeof useFaceAuthCameraViewModel>
20
+
21
+ export const FaceAuthCameraView = ({
22
+ descriptionLoadingProps,
23
+ descriptionLoadingMessage,
24
+ loadingOverlayLayoutProps,
25
+ recommendedValidationsProps,
26
+ device,
27
+ ref,
28
+ overlayAreaRef,
29
+ overlayColor,
30
+ ellipseBorderColor,
31
+ ovalCenterX,
32
+ ovalCenterY,
33
+ ovalRadiusX,
34
+ ovalRadiusY,
35
+ faceDetectionOptions,
36
+ isLoading,
37
+ isLoadingOverlayLayout,
38
+ hasPermission,
39
+ isReady,
40
+ enablePhoto,
41
+ isSimplifiedMode,
42
+ onOverlayAreaLayout,
43
+ onRecommendedValidationsLayout,
44
+ onInitialized,
45
+ onError,
46
+ handleFacesDetection,
47
+ }: FaceAuthCameraViewProps) => (
48
+ <RootLayout>
49
+ {isLoading ? (
50
+ <DescriptionLoading
51
+ {...descriptionLoadingProps}
52
+ title="Estamos preparando tudo"
53
+ message={descriptionLoadingMessage}
54
+ icon={ChecklistCircleSvg}
55
+ />
56
+ ) : (
57
+ <Box flex={1}>
58
+ <Box ref={overlayAreaRef} flex={1} onLayout={onOverlayAreaLayout}>
59
+ {isLoadingOverlayLayout ? (
60
+ <CenteredLoading {...loadingOverlayLayoutProps} />
61
+ ) : (
62
+ <Fragment>
63
+ {!!device && hasPermission && (
64
+ <Box bg="black" style={StyleSheet.absoluteFillObject}>
65
+ <Camera
66
+ ref={ref}
67
+ isActive={isReady}
68
+ photo={enablePhoto}
69
+ device={device}
70
+ faceDetectionOptions={faceDetectionOptions}
71
+ faceDetectionCallback={handleFacesDetection}
72
+ photoQualityBalance="balanced"
73
+ style={StyleSheet.absoluteFillObject}
74
+ onInitialized={onInitialized}
75
+ onError={onError}
76
+ />
77
+ </Box>
78
+ )}
79
+ <Box
80
+ position="absolute"
81
+ top={ovalCenterY - ovalRadiusY}
82
+ left="50%"
83
+ pb="m"
84
+ zIndex={10}
85
+ style={{
86
+ transform: [{ translateX: '-50%' }, { translateY: '-100%' }],
87
+ }}
88
+ >
89
+ <Text variant="subtitle">Mantenha a posição</Text>
90
+ </Box>
91
+ <FaceAuthCameraOverlay
92
+ ovalCenterX={ovalCenterX}
93
+ ovalCenterY={ovalCenterY}
94
+ ovalRadiusX={ovalRadiusX}
95
+ ovalRadiusY={ovalRadiusY}
96
+ backgroundColor={overlayColor}
97
+ ellipseBorderColor={ellipseBorderColor}
98
+ />
99
+ <Box
100
+ position="absolute"
101
+ top={ovalCenterY + ovalRadiusY}
102
+ left="50%"
103
+ pt="m"
104
+ zIndex={10}
105
+ style={{ transform: [{ translateX: '-50%' }] }}
106
+ >
107
+ <Text>Coloque o seu rosto dentro do círculo.</Text>
108
+ </Box>
109
+ </Fragment>
110
+ )}
111
+ </Box>
112
+ {isSimplifiedMode && (
113
+ <RecommendedValidations
114
+ {...recommendedValidationsProps}
115
+ mode="tip"
116
+ title="Antes de começar, siga estas dicas:"
117
+ recommendations={[
118
+ 'Encontre um ambiente bem iluminado;',
119
+ 'Remova acessórios como óculos, bonés ou máscaras;',
120
+ 'Evite fundo muito escuro ou com muitas distrações.',
121
+ ]}
122
+ onLayout={onRecommendedValidationsLayout}
123
+ />
124
+ )}
125
+ </Box>
126
+ )}
127
+ </RootLayout>
128
+ )
@@ -0,0 +1,8 @@
1
+ import { FaceAuthView } from './view'
2
+ import { useFaceAuthViewModel } from './view-model'
3
+
4
+ export const FaceAuthScreen = () => {
5
+ const props = useFaceAuthViewModel()
6
+
7
+ return <FaceAuthView {...props} />
8
+ }
@@ -0,0 +1,25 @@
1
+ import { useNavigation } from '@react-navigation/native'
2
+ import { type NativeStackNavigationProp } from '@react-navigation/native-stack'
3
+ import { useTheme } from '@shopify/restyle'
4
+ import { type RootStackParamList } from '../../navigation'
5
+ import { useButton, useRecommendedValidations } from '../../hooks'
6
+ import { type CustomThemeProps } from '../../theme'
7
+
8
+ export const useFaceAuthViewModel = () => {
9
+ const navigation =
10
+ useNavigation<NativeStackNavigationProp<RootStackParamList>>()
11
+ const { colors } = useTheme<CustomThemeProps>()
12
+ const startButtonProps = useButton()
13
+ const recommendedValidationsProps = useRecommendedValidations()
14
+
15
+ const onStartPress = () => {
16
+ navigation.replace('FaceAuthCamera')
17
+ }
18
+
19
+ return {
20
+ mainImageColor: colors.primary,
21
+ startButtonProps,
22
+ recommendedValidationsProps,
23
+ onStartPress,
24
+ }
25
+ }