@velion-la/onboarding-sdk-react-native 1.0.0-beta.2

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 (557) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/LICENSE +12 -0
  3. package/README.md +803 -0
  4. package/lib/commonjs/camera/AddressSearchBar.js +304 -0
  5. package/lib/commonjs/camera/AddressSearchBar.js.map +1 -0
  6. package/lib/commonjs/camera/DocumentCapture.js +505 -0
  7. package/lib/commonjs/camera/DocumentCapture.js.map +1 -0
  8. package/lib/commonjs/camera/LivenessCamera.js +534 -0
  9. package/lib/commonjs/camera/LivenessCamera.js.map +1 -0
  10. package/lib/commonjs/camera/MapAddressPicker.js +341 -0
  11. package/lib/commonjs/camera/MapAddressPicker.js.map +1 -0
  12. package/lib/commonjs/core/VelionOnboarding.js +815 -0
  13. package/lib/commonjs/core/VelionOnboarding.js.map +1 -0
  14. package/lib/commonjs/core/sessionDeclinedCopy.js +56 -0
  15. package/lib/commonjs/core/sessionDeclinedCopy.js.map +1 -0
  16. package/lib/commonjs/core/sessionStateMapper.js +137 -0
  17. package/lib/commonjs/core/sessionStateMapper.js.map +1 -0
  18. package/lib/commonjs/core/sseReasonMessages.js +450 -0
  19. package/lib/commonjs/core/sseReasonMessages.js.map +1 -0
  20. package/lib/commonjs/data/iso3166Alpha2Codes.json +1 -0
  21. package/lib/commonjs/data/iso3166CountryNames.json +251 -0
  22. package/lib/commonjs/i18n/index.js +30 -0
  23. package/lib/commonjs/i18n/index.js.map +1 -0
  24. package/lib/commonjs/i18n/strings/en.js +261 -0
  25. package/lib/commonjs/i18n/strings/en.js.map +1 -0
  26. package/lib/commonjs/i18n/strings/es.js +266 -0
  27. package/lib/commonjs/i18n/strings/es.js.map +1 -0
  28. package/lib/commonjs/index.js +213 -0
  29. package/lib/commonjs/index.js.map +1 -0
  30. package/lib/commonjs/package.json +1 -0
  31. package/lib/commonjs/steps/AddressInfoStep.js +650 -0
  32. package/lib/commonjs/steps/AddressInfoStep.js.map +1 -0
  33. package/lib/commonjs/steps/DocumentsOcrStep.js +397 -0
  34. package/lib/commonjs/steps/DocumentsOcrStep.js.map +1 -0
  35. package/lib/commonjs/steps/EmailContactStep.js +145 -0
  36. package/lib/commonjs/steps/EmailContactStep.js.map +1 -0
  37. package/lib/commonjs/steps/EmailOtpStep.js +220 -0
  38. package/lib/commonjs/steps/EmailOtpStep.js.map +1 -0
  39. package/lib/commonjs/steps/FaceMatchStep.js +166 -0
  40. package/lib/commonjs/steps/FaceMatchStep.js.map +1 -0
  41. package/lib/commonjs/steps/FingerprintStep.js +92 -0
  42. package/lib/commonjs/steps/FingerprintStep.js.map +1 -0
  43. package/lib/commonjs/steps/HumanBasicInfoStep.js +243 -0
  44. package/lib/commonjs/steps/HumanBasicInfoStep.js.map +1 -0
  45. package/lib/commonjs/steps/HumanExtendedInfoStep.js +268 -0
  46. package/lib/commonjs/steps/HumanExtendedInfoStep.js.map +1 -0
  47. package/lib/commonjs/steps/LegalBasicInfoStep.js +188 -0
  48. package/lib/commonjs/steps/LegalBasicInfoStep.js.map +1 -0
  49. package/lib/commonjs/steps/LegalExtendedInfoStep.js +166 -0
  50. package/lib/commonjs/steps/LegalExtendedInfoStep.js.map +1 -0
  51. package/lib/commonjs/steps/LivenessMatchStep.js +707 -0
  52. package/lib/commonjs/steps/LivenessMatchStep.js.map +1 -0
  53. package/lib/commonjs/steps/PhoneContactStep.js +146 -0
  54. package/lib/commonjs/steps/PhoneContactStep.js.map +1 -0
  55. package/lib/commonjs/steps/PhoneOtpStep.js +219 -0
  56. package/lib/commonjs/steps/PhoneOtpStep.js.map +1 -0
  57. package/lib/commonjs/steps/SwornDeclarationStep.js +196 -0
  58. package/lib/commonjs/steps/SwornDeclarationStep.js.map +1 -0
  59. package/lib/commonjs/steps/TaxInfoStep.js +244 -0
  60. package/lib/commonjs/steps/TaxInfoStep.js.map +1 -0
  61. package/lib/commonjs/steps/TermsAndConditionsStep.js +238 -0
  62. package/lib/commonjs/steps/TermsAndConditionsStep.js.map +1 -0
  63. package/lib/commonjs/steps/_shared.js +40 -0
  64. package/lib/commonjs/steps/_shared.js.map +1 -0
  65. package/lib/commonjs/steps/types.js +6 -0
  66. package/lib/commonjs/steps/types.js.map +1 -0
  67. package/lib/commonjs/transport/api.js +176 -0
  68. package/lib/commonjs/transport/api.js.map +1 -0
  69. package/lib/commonjs/transport/irisWebSocket.js +121 -0
  70. package/lib/commonjs/transport/irisWebSocket.js.map +1 -0
  71. package/lib/commonjs/transport/secureUrl.js +50 -0
  72. package/lib/commonjs/transport/secureUrl.js.map +1 -0
  73. package/lib/commonjs/transport/sse.js +248 -0
  74. package/lib/commonjs/transport/sse.js.map +1 -0
  75. package/lib/commonjs/types/index.js +391 -0
  76. package/lib/commonjs/types/index.js.map +1 -0
  77. package/lib/commonjs/ui/MapFallbackBoundary.js +42 -0
  78. package/lib/commonjs/ui/MapFallbackBoundary.js.map +1 -0
  79. package/lib/commonjs/ui/StepShell.js +118 -0
  80. package/lib/commonjs/ui/StepShell.js.map +1 -0
  81. package/lib/commonjs/ui/VelionOnboardingScreen.js +217 -0
  82. package/lib/commonjs/ui/VelionOnboardingScreen.js.map +1 -0
  83. package/lib/commonjs/ui/forms/index.js +38 -0
  84. package/lib/commonjs/ui/forms/index.js.map +1 -0
  85. package/lib/commonjs/ui/forms/useInlineValidation.js +88 -0
  86. package/lib/commonjs/ui/forms/useInlineValidation.js.map +1 -0
  87. package/lib/commonjs/ui/forms/validators.js +34 -0
  88. package/lib/commonjs/ui/forms/validators.js.map +1 -0
  89. package/lib/commonjs/ui/icons/HomeHeartIcon.js +38 -0
  90. package/lib/commonjs/ui/icons/HomeHeartIcon.js.map +1 -0
  91. package/lib/commonjs/ui/icons/StepIcon.js +59 -0
  92. package/lib/commonjs/ui/icons/StepIcon.js.map +1 -0
  93. package/lib/commonjs/ui/overlays/AnalyzingOverlay.js +284 -0
  94. package/lib/commonjs/ui/overlays/AnalyzingOverlay.js.map +1 -0
  95. package/lib/commonjs/ui/overlays/LoadingOverlay.js +108 -0
  96. package/lib/commonjs/ui/overlays/LoadingOverlay.js.map +1 -0
  97. package/lib/commonjs/ui/overlays/ProgressBar.js +95 -0
  98. package/lib/commonjs/ui/overlays/ProgressBar.js.map +1 -0
  99. package/lib/commonjs/ui/overlays/RetryDialog.js +125 -0
  100. package/lib/commonjs/ui/overlays/RetryDialog.js.map +1 -0
  101. package/lib/commonjs/ui/overlays/index.js +33 -0
  102. package/lib/commonjs/ui/overlays/index.js.map +1 -0
  103. package/lib/commonjs/ui/primitives/Banner.js +81 -0
  104. package/lib/commonjs/ui/primitives/Banner.js.map +1 -0
  105. package/lib/commonjs/ui/primitives/Button.js +142 -0
  106. package/lib/commonjs/ui/primitives/Button.js.map +1 -0
  107. package/lib/commonjs/ui/primitives/Card.js +50 -0
  108. package/lib/commonjs/ui/primitives/Card.js.map +1 -0
  109. package/lib/commonjs/ui/primitives/Checkbox.js +139 -0
  110. package/lib/commonjs/ui/primitives/Checkbox.js.map +1 -0
  111. package/lib/commonjs/ui/primitives/CountrySelect.js +288 -0
  112. package/lib/commonjs/ui/primitives/CountrySelect.js.map +1 -0
  113. package/lib/commonjs/ui/primitives/DatePicker.js +245 -0
  114. package/lib/commonjs/ui/primitives/DatePicker.js.map +1 -0
  115. package/lib/commonjs/ui/primitives/Input.js +101 -0
  116. package/lib/commonjs/ui/primitives/Input.js.map +1 -0
  117. package/lib/commonjs/ui/primitives/Select.js +209 -0
  118. package/lib/commonjs/ui/primitives/Select.js.map +1 -0
  119. package/lib/commonjs/ui/primitives/Spinner.js +25 -0
  120. package/lib/commonjs/ui/primitives/Spinner.js.map +1 -0
  121. package/lib/commonjs/ui/primitives/index.js +69 -0
  122. package/lib/commonjs/ui/primitives/index.js.map +1 -0
  123. package/lib/commonjs/ui/theme/ThemeProvider.js +74 -0
  124. package/lib/commonjs/ui/theme/ThemeProvider.js.map +1 -0
  125. package/lib/commonjs/ui/theme/index.js +68 -0
  126. package/lib/commonjs/ui/theme/index.js.map +1 -0
  127. package/lib/commonjs/ui/theme/tokens.js +154 -0
  128. package/lib/commonjs/ui/theme/tokens.js.map +1 -0
  129. package/lib/commonjs/utils/EventEmitter.js +144 -0
  130. package/lib/commonjs/utils/EventEmitter.js.map +1 -0
  131. package/lib/commonjs/utils/base64.js +53 -0
  132. package/lib/commonjs/utils/base64.js.map +1 -0
  133. package/lib/commonjs/utils/deviceFingerprint.js +132 -0
  134. package/lib/commonjs/utils/deviceFingerprint.js.map +1 -0
  135. package/lib/commonjs/utils/documentTypeOptions.js +35 -0
  136. package/lib/commonjs/utils/documentTypeOptions.js.map +1 -0
  137. package/lib/commonjs/utils/googleMapsPreflight.js +77 -0
  138. package/lib/commonjs/utils/googleMapsPreflight.js.map +1 -0
  139. package/lib/commonjs/utils/hmac.js +58 -0
  140. package/lib/commonjs/utils/hmac.js.map +1 -0
  141. package/lib/commonjs/utils/iso3166Countries.js +98 -0
  142. package/lib/commonjs/utils/iso3166Countries.js.map +1 -0
  143. package/lib/commonjs/utils/jpegFromUri.js +44 -0
  144. package/lib/commonjs/utils/jpegFromUri.js.map +1 -0
  145. package/lib/commonjs/utils/keepAwake.js +58 -0
  146. package/lib/commonjs/utils/keepAwake.js.map +1 -0
  147. package/lib/commonjs/utils/log.js +42 -0
  148. package/lib/commonjs/utils/log.js.map +1 -0
  149. package/lib/commonjs/utils/osGeocoder.js +70 -0
  150. package/lib/commonjs/utils/osGeocoder.js.map +1 -0
  151. package/lib/commonjs/utils/parseGoogleAddressComponents.js +74 -0
  152. package/lib/commonjs/utils/parseGoogleAddressComponents.js.map +1 -0
  153. package/lib/commonjs/utils/personNameNormalize.js +24 -0
  154. package/lib/commonjs/utils/personNameNormalize.js.map +1 -0
  155. package/lib/commonjs/utils/sdkError.js +34 -0
  156. package/lib/commonjs/utils/sdkError.js.map +1 -0
  157. package/lib/commonjs/utils/sdkVersion.js +13 -0
  158. package/lib/commonjs/utils/sdkVersion.js.map +1 -0
  159. package/lib/commonjs/utils/stepConfig.js +65 -0
  160. package/lib/commonjs/utils/stepConfig.js.map +1 -0
  161. package/lib/commonjs/utils/taxInfoConfig.js +19 -0
  162. package/lib/commonjs/utils/taxInfoConfig.js.map +1 -0
  163. package/lib/module/camera/AddressSearchBar.js +299 -0
  164. package/lib/module/camera/AddressSearchBar.js.map +1 -0
  165. package/lib/module/camera/DocumentCapture.js +500 -0
  166. package/lib/module/camera/DocumentCapture.js.map +1 -0
  167. package/lib/module/camera/LivenessCamera.js +529 -0
  168. package/lib/module/camera/LivenessCamera.js.map +1 -0
  169. package/lib/module/camera/MapAddressPicker.js +337 -0
  170. package/lib/module/camera/MapAddressPicker.js.map +1 -0
  171. package/lib/module/core/VelionOnboarding.js +811 -0
  172. package/lib/module/core/VelionOnboarding.js.map +1 -0
  173. package/lib/module/core/sessionDeclinedCopy.js +52 -0
  174. package/lib/module/core/sessionDeclinedCopy.js.map +1 -0
  175. package/lib/module/core/sessionStateMapper.js +128 -0
  176. package/lib/module/core/sessionStateMapper.js.map +1 -0
  177. package/lib/module/core/sseReasonMessages.js +446 -0
  178. package/lib/module/core/sseReasonMessages.js.map +1 -0
  179. package/lib/module/data/iso3166Alpha2Codes.json +1 -0
  180. package/lib/module/data/iso3166CountryNames.json +251 -0
  181. package/lib/module/i18n/index.js +25 -0
  182. package/lib/module/i18n/index.js.map +1 -0
  183. package/lib/module/i18n/strings/en.js +257 -0
  184. package/lib/module/i18n/strings/en.js.map +1 -0
  185. package/lib/module/i18n/strings/es.js +262 -0
  186. package/lib/module/i18n/strings/es.js.map +1 -0
  187. package/lib/module/index.js +36 -0
  188. package/lib/module/index.js.map +1 -0
  189. package/lib/module/steps/AddressInfoStep.js +646 -0
  190. package/lib/module/steps/AddressInfoStep.js.map +1 -0
  191. package/lib/module/steps/DocumentsOcrStep.js +391 -0
  192. package/lib/module/steps/DocumentsOcrStep.js.map +1 -0
  193. package/lib/module/steps/EmailContactStep.js +140 -0
  194. package/lib/module/steps/EmailContactStep.js.map +1 -0
  195. package/lib/module/steps/EmailOtpStep.js +215 -0
  196. package/lib/module/steps/EmailOtpStep.js.map +1 -0
  197. package/lib/module/steps/FaceMatchStep.js +161 -0
  198. package/lib/module/steps/FaceMatchStep.js.map +1 -0
  199. package/lib/module/steps/FingerprintStep.js +87 -0
  200. package/lib/module/steps/FingerprintStep.js.map +1 -0
  201. package/lib/module/steps/HumanBasicInfoStep.js +238 -0
  202. package/lib/module/steps/HumanBasicInfoStep.js.map +1 -0
  203. package/lib/module/steps/HumanExtendedInfoStep.js +263 -0
  204. package/lib/module/steps/HumanExtendedInfoStep.js.map +1 -0
  205. package/lib/module/steps/LegalBasicInfoStep.js +183 -0
  206. package/lib/module/steps/LegalBasicInfoStep.js.map +1 -0
  207. package/lib/module/steps/LegalExtendedInfoStep.js +161 -0
  208. package/lib/module/steps/LegalExtendedInfoStep.js.map +1 -0
  209. package/lib/module/steps/LivenessMatchStep.js +701 -0
  210. package/lib/module/steps/LivenessMatchStep.js.map +1 -0
  211. package/lib/module/steps/PhoneContactStep.js +141 -0
  212. package/lib/module/steps/PhoneContactStep.js.map +1 -0
  213. package/lib/module/steps/PhoneOtpStep.js +214 -0
  214. package/lib/module/steps/PhoneOtpStep.js.map +1 -0
  215. package/lib/module/steps/SwornDeclarationStep.js +191 -0
  216. package/lib/module/steps/SwornDeclarationStep.js.map +1 -0
  217. package/lib/module/steps/TaxInfoStep.js +239 -0
  218. package/lib/module/steps/TaxInfoStep.js.map +1 -0
  219. package/lib/module/steps/TermsAndConditionsStep.js +233 -0
  220. package/lib/module/steps/TermsAndConditionsStep.js.map +1 -0
  221. package/lib/module/steps/_shared.js +33 -0
  222. package/lib/module/steps/_shared.js.map +1 -0
  223. package/lib/module/steps/types.js +4 -0
  224. package/lib/module/steps/types.js.map +1 -0
  225. package/lib/module/transport/api.js +173 -0
  226. package/lib/module/transport/api.js.map +1 -0
  227. package/lib/module/transport/irisWebSocket.js +115 -0
  228. package/lib/module/transport/irisWebSocket.js.map +1 -0
  229. package/lib/module/transport/secureUrl.js +45 -0
  230. package/lib/module/transport/secureUrl.js.map +1 -0
  231. package/lib/module/transport/sse.js +242 -0
  232. package/lib/module/transport/sse.js.map +1 -0
  233. package/lib/module/types/index.js +457 -0
  234. package/lib/module/types/index.js.map +1 -0
  235. package/lib/module/ui/MapFallbackBoundary.js +37 -0
  236. package/lib/module/ui/MapFallbackBoundary.js.map +1 -0
  237. package/lib/module/ui/StepShell.js +114 -0
  238. package/lib/module/ui/StepShell.js.map +1 -0
  239. package/lib/module/ui/VelionOnboardingScreen.js +212 -0
  240. package/lib/module/ui/VelionOnboardingScreen.js.map +1 -0
  241. package/lib/module/ui/forms/index.js +5 -0
  242. package/lib/module/ui/forms/index.js.map +1 -0
  243. package/lib/module/ui/forms/useInlineValidation.js +84 -0
  244. package/lib/module/ui/forms/useInlineValidation.js.map +1 -0
  245. package/lib/module/ui/forms/validators.js +27 -0
  246. package/lib/module/ui/forms/validators.js.map +1 -0
  247. package/lib/module/ui/icons/HomeHeartIcon.js +33 -0
  248. package/lib/module/ui/icons/HomeHeartIcon.js.map +1 -0
  249. package/lib/module/ui/icons/StepIcon.js +55 -0
  250. package/lib/module/ui/icons/StepIcon.js.map +1 -0
  251. package/lib/module/ui/overlays/AnalyzingOverlay.js +279 -0
  252. package/lib/module/ui/overlays/AnalyzingOverlay.js.map +1 -0
  253. package/lib/module/ui/overlays/LoadingOverlay.js +104 -0
  254. package/lib/module/ui/overlays/LoadingOverlay.js.map +1 -0
  255. package/lib/module/ui/overlays/ProgressBar.js +90 -0
  256. package/lib/module/ui/overlays/ProgressBar.js.map +1 -0
  257. package/lib/module/ui/overlays/RetryDialog.js +121 -0
  258. package/lib/module/ui/overlays/RetryDialog.js.map +1 -0
  259. package/lib/module/ui/overlays/index.js +6 -0
  260. package/lib/module/ui/overlays/index.js.map +1 -0
  261. package/lib/module/ui/primitives/Banner.js +77 -0
  262. package/lib/module/ui/primitives/Banner.js.map +1 -0
  263. package/lib/module/ui/primitives/Button.js +138 -0
  264. package/lib/module/ui/primitives/Button.js.map +1 -0
  265. package/lib/module/ui/primitives/Card.js +46 -0
  266. package/lib/module/ui/primitives/Card.js.map +1 -0
  267. package/lib/module/ui/primitives/Checkbox.js +136 -0
  268. package/lib/module/ui/primitives/Checkbox.js.map +1 -0
  269. package/lib/module/ui/primitives/CountrySelect.js +284 -0
  270. package/lib/module/ui/primitives/CountrySelect.js.map +1 -0
  271. package/lib/module/ui/primitives/DatePicker.js +241 -0
  272. package/lib/module/ui/primitives/DatePicker.js.map +1 -0
  273. package/lib/module/ui/primitives/Input.js +97 -0
  274. package/lib/module/ui/primitives/Input.js.map +1 -0
  275. package/lib/module/ui/primitives/Select.js +205 -0
  276. package/lib/module/ui/primitives/Select.js.map +1 -0
  277. package/lib/module/ui/primitives/Spinner.js +21 -0
  278. package/lib/module/ui/primitives/Spinner.js.map +1 -0
  279. package/lib/module/ui/primitives/index.js +12 -0
  280. package/lib/module/ui/primitives/index.js.map +1 -0
  281. package/lib/module/ui/theme/ThemeProvider.js +67 -0
  282. package/lib/module/ui/theme/ThemeProvider.js.map +1 -0
  283. package/lib/module/ui/theme/index.js +5 -0
  284. package/lib/module/ui/theme/index.js.map +1 -0
  285. package/lib/module/ui/theme/tokens.js +145 -0
  286. package/lib/module/ui/theme/tokens.js.map +1 -0
  287. package/lib/module/utils/EventEmitter.js +139 -0
  288. package/lib/module/utils/EventEmitter.js.map +1 -0
  289. package/lib/module/utils/base64.js +47 -0
  290. package/lib/module/utils/base64.js.map +1 -0
  291. package/lib/module/utils/deviceFingerprint.js +129 -0
  292. package/lib/module/utils/deviceFingerprint.js.map +1 -0
  293. package/lib/module/utils/documentTypeOptions.js +31 -0
  294. package/lib/module/utils/documentTypeOptions.js.map +1 -0
  295. package/lib/module/utils/googleMapsPreflight.js +73 -0
  296. package/lib/module/utils/googleMapsPreflight.js.map +1 -0
  297. package/lib/module/utils/hmac.js +53 -0
  298. package/lib/module/utils/hmac.js.map +1 -0
  299. package/lib/module/utils/iso3166Countries.js +92 -0
  300. package/lib/module/utils/iso3166Countries.js.map +1 -0
  301. package/lib/module/utils/jpegFromUri.js +40 -0
  302. package/lib/module/utils/jpegFromUri.js.map +1 -0
  303. package/lib/module/utils/keepAwake.js +53 -0
  304. package/lib/module/utils/keepAwake.js.map +1 -0
  305. package/lib/module/utils/log.js +37 -0
  306. package/lib/module/utils/log.js.map +1 -0
  307. package/lib/module/utils/osGeocoder.js +65 -0
  308. package/lib/module/utils/osGeocoder.js.map +1 -0
  309. package/lib/module/utils/parseGoogleAddressComponents.js +69 -0
  310. package/lib/module/utils/parseGoogleAddressComponents.js.map +1 -0
  311. package/lib/module/utils/personNameNormalize.js +20 -0
  312. package/lib/module/utils/personNameNormalize.js.map +1 -0
  313. package/lib/module/utils/sdkError.js +29 -0
  314. package/lib/module/utils/sdkError.js.map +1 -0
  315. package/lib/module/utils/sdkVersion.js +9 -0
  316. package/lib/module/utils/sdkVersion.js.map +1 -0
  317. package/lib/module/utils/stepConfig.js +59 -0
  318. package/lib/module/utils/stepConfig.js.map +1 -0
  319. package/lib/module/utils/taxInfoConfig.js +15 -0
  320. package/lib/module/utils/taxInfoConfig.js.map +1 -0
  321. package/lib/typescript/camera/AddressSearchBar.d.ts +37 -0
  322. package/lib/typescript/camera/AddressSearchBar.d.ts.map +1 -0
  323. package/lib/typescript/camera/DocumentCapture.d.ts +34 -0
  324. package/lib/typescript/camera/DocumentCapture.d.ts.map +1 -0
  325. package/lib/typescript/camera/LivenessCamera.d.ts +50 -0
  326. package/lib/typescript/camera/LivenessCamera.d.ts.map +1 -0
  327. package/lib/typescript/camera/MapAddressPicker.d.ts +57 -0
  328. package/lib/typescript/camera/MapAddressPicker.d.ts.map +1 -0
  329. package/lib/typescript/core/VelionOnboarding.d.ts +115 -0
  330. package/lib/typescript/core/VelionOnboarding.d.ts.map +1 -0
  331. package/lib/typescript/core/sessionDeclinedCopy.d.ts +16 -0
  332. package/lib/typescript/core/sessionDeclinedCopy.d.ts.map +1 -0
  333. package/lib/typescript/core/sessionStateMapper.d.ts +33 -0
  334. package/lib/typescript/core/sessionStateMapper.d.ts.map +1 -0
  335. package/lib/typescript/core/sseReasonMessages.d.ts +20 -0
  336. package/lib/typescript/core/sseReasonMessages.d.ts.map +1 -0
  337. package/lib/typescript/i18n/index.d.ts +13 -0
  338. package/lib/typescript/i18n/index.d.ts.map +1 -0
  339. package/lib/typescript/i18n/strings/en.d.ts +3 -0
  340. package/lib/typescript/i18n/strings/en.d.ts.map +1 -0
  341. package/lib/typescript/i18n/strings/es.d.ts +260 -0
  342. package/lib/typescript/i18n/strings/es.d.ts.map +1 -0
  343. package/lib/typescript/index.d.ts +26 -0
  344. package/lib/typescript/index.d.ts.map +1 -0
  345. package/lib/typescript/steps/AddressInfoStep.d.ts +26 -0
  346. package/lib/typescript/steps/AddressInfoStep.d.ts.map +1 -0
  347. package/lib/typescript/steps/DocumentsOcrStep.d.ts +26 -0
  348. package/lib/typescript/steps/DocumentsOcrStep.d.ts.map +1 -0
  349. package/lib/typescript/steps/EmailContactStep.d.ts +15 -0
  350. package/lib/typescript/steps/EmailContactStep.d.ts.map +1 -0
  351. package/lib/typescript/steps/EmailOtpStep.d.ts +21 -0
  352. package/lib/typescript/steps/EmailOtpStep.d.ts.map +1 -0
  353. package/lib/typescript/steps/FaceMatchStep.d.ts +27 -0
  354. package/lib/typescript/steps/FaceMatchStep.d.ts.map +1 -0
  355. package/lib/typescript/steps/FingerprintStep.d.ts +25 -0
  356. package/lib/typescript/steps/FingerprintStep.d.ts.map +1 -0
  357. package/lib/typescript/steps/HumanBasicInfoStep.d.ts +25 -0
  358. package/lib/typescript/steps/HumanBasicInfoStep.d.ts.map +1 -0
  359. package/lib/typescript/steps/HumanExtendedInfoStep.d.ts +23 -0
  360. package/lib/typescript/steps/HumanExtendedInfoStep.d.ts.map +1 -0
  361. package/lib/typescript/steps/LegalBasicInfoStep.d.ts +17 -0
  362. package/lib/typescript/steps/LegalBasicInfoStep.d.ts.map +1 -0
  363. package/lib/typescript/steps/LegalExtendedInfoStep.d.ts +17 -0
  364. package/lib/typescript/steps/LegalExtendedInfoStep.d.ts.map +1 -0
  365. package/lib/typescript/steps/LivenessMatchStep.d.ts +26 -0
  366. package/lib/typescript/steps/LivenessMatchStep.d.ts.map +1 -0
  367. package/lib/typescript/steps/PhoneContactStep.d.ts +15 -0
  368. package/lib/typescript/steps/PhoneContactStep.d.ts.map +1 -0
  369. package/lib/typescript/steps/PhoneOtpStep.d.ts +19 -0
  370. package/lib/typescript/steps/PhoneOtpStep.d.ts.map +1 -0
  371. package/lib/typescript/steps/SwornDeclarationStep.d.ts +20 -0
  372. package/lib/typescript/steps/SwornDeclarationStep.d.ts.map +1 -0
  373. package/lib/typescript/steps/TaxInfoStep.d.ts +19 -0
  374. package/lib/typescript/steps/TaxInfoStep.d.ts.map +1 -0
  375. package/lib/typescript/steps/TermsAndConditionsStep.d.ts +21 -0
  376. package/lib/typescript/steps/TermsAndConditionsStep.d.ts.map +1 -0
  377. package/lib/typescript/steps/_shared.d.ts +11 -0
  378. package/lib/typescript/steps/_shared.d.ts.map +1 -0
  379. package/lib/typescript/steps/types.d.ts +68 -0
  380. package/lib/typescript/steps/types.d.ts.map +1 -0
  381. package/lib/typescript/transport/api.d.ts +35 -0
  382. package/lib/typescript/transport/api.d.ts.map +1 -0
  383. package/lib/typescript/transport/irisWebSocket.d.ts +72 -0
  384. package/lib/typescript/transport/irisWebSocket.d.ts.map +1 -0
  385. package/lib/typescript/transport/secureUrl.d.ts +14 -0
  386. package/lib/typescript/transport/secureUrl.d.ts.map +1 -0
  387. package/lib/typescript/transport/sse.d.ts +54 -0
  388. package/lib/typescript/transport/sse.d.ts.map +1 -0
  389. package/lib/typescript/types/index.d.ts +1010 -0
  390. package/lib/typescript/types/index.d.ts.map +1 -0
  391. package/lib/typescript/ui/MapFallbackBoundary.d.ts +28 -0
  392. package/lib/typescript/ui/MapFallbackBoundary.d.ts.map +1 -0
  393. package/lib/typescript/ui/StepShell.d.ts +19 -0
  394. package/lib/typescript/ui/StepShell.d.ts.map +1 -0
  395. package/lib/typescript/ui/VelionOnboardingScreen.d.ts +19 -0
  396. package/lib/typescript/ui/VelionOnboardingScreen.d.ts.map +1 -0
  397. package/lib/typescript/ui/forms/index.d.ts +3 -0
  398. package/lib/typescript/ui/forms/index.d.ts.map +1 -0
  399. package/lib/typescript/ui/forms/useInlineValidation.d.ts +30 -0
  400. package/lib/typescript/ui/forms/useInlineValidation.d.ts.map +1 -0
  401. package/lib/typescript/ui/forms/validators.d.ts +11 -0
  402. package/lib/typescript/ui/forms/validators.d.ts.map +1 -0
  403. package/lib/typescript/ui/icons/HomeHeartIcon.d.ts +14 -0
  404. package/lib/typescript/ui/icons/HomeHeartIcon.d.ts.map +1 -0
  405. package/lib/typescript/ui/icons/StepIcon.d.ts +26 -0
  406. package/lib/typescript/ui/icons/StepIcon.d.ts.map +1 -0
  407. package/lib/typescript/ui/overlays/AnalyzingOverlay.d.ts +24 -0
  408. package/lib/typescript/ui/overlays/AnalyzingOverlay.d.ts.map +1 -0
  409. package/lib/typescript/ui/overlays/LoadingOverlay.d.ts +19 -0
  410. package/lib/typescript/ui/overlays/LoadingOverlay.d.ts.map +1 -0
  411. package/lib/typescript/ui/overlays/ProgressBar.d.ts +26 -0
  412. package/lib/typescript/ui/overlays/ProgressBar.d.ts.map +1 -0
  413. package/lib/typescript/ui/overlays/RetryDialog.d.ts +17 -0
  414. package/lib/typescript/ui/overlays/RetryDialog.d.ts.map +1 -0
  415. package/lib/typescript/ui/overlays/index.d.ts +4 -0
  416. package/lib/typescript/ui/overlays/index.d.ts.map +1 -0
  417. package/lib/typescript/ui/primitives/Banner.d.ts +11 -0
  418. package/lib/typescript/ui/primitives/Banner.d.ts.map +1 -0
  419. package/lib/typescript/ui/primitives/Button.d.ts +27 -0
  420. package/lib/typescript/ui/primitives/Button.d.ts.map +1 -0
  421. package/lib/typescript/ui/primitives/Card.d.ts +10 -0
  422. package/lib/typescript/ui/primitives/Card.d.ts.map +1 -0
  423. package/lib/typescript/ui/primitives/Checkbox.d.ts +25 -0
  424. package/lib/typescript/ui/primitives/Checkbox.d.ts.map +1 -0
  425. package/lib/typescript/ui/primitives/CountrySelect.d.ts +31 -0
  426. package/lib/typescript/ui/primitives/CountrySelect.d.ts.map +1 -0
  427. package/lib/typescript/ui/primitives/DatePicker.d.ts +42 -0
  428. package/lib/typescript/ui/primitives/DatePicker.d.ts.map +1 -0
  429. package/lib/typescript/ui/primitives/Input.d.ts +17 -0
  430. package/lib/typescript/ui/primitives/Input.d.ts.map +1 -0
  431. package/lib/typescript/ui/primitives/Select.d.ts +26 -0
  432. package/lib/typescript/ui/primitives/Select.d.ts.map +1 -0
  433. package/lib/typescript/ui/primitives/Spinner.d.ts +10 -0
  434. package/lib/typescript/ui/primitives/Spinner.d.ts.map +1 -0
  435. package/lib/typescript/ui/primitives/index.d.ts +10 -0
  436. package/lib/typescript/ui/primitives/index.d.ts.map +1 -0
  437. package/lib/typescript/ui/theme/ThemeProvider.d.ts +23 -0
  438. package/lib/typescript/ui/theme/ThemeProvider.d.ts.map +1 -0
  439. package/lib/typescript/ui/theme/index.d.ts +3 -0
  440. package/lib/typescript/ui/theme/index.d.ts.map +1 -0
  441. package/lib/typescript/ui/theme/tokens.d.ts +42 -0
  442. package/lib/typescript/ui/theme/tokens.d.ts.map +1 -0
  443. package/lib/typescript/utils/EventEmitter.d.ts +98 -0
  444. package/lib/typescript/utils/EventEmitter.d.ts.map +1 -0
  445. package/lib/typescript/utils/base64.d.ts +19 -0
  446. package/lib/typescript/utils/base64.d.ts.map +1 -0
  447. package/lib/typescript/utils/deviceFingerprint.d.ts +42 -0
  448. package/lib/typescript/utils/deviceFingerprint.d.ts.map +1 -0
  449. package/lib/typescript/utils/documentTypeOptions.d.ts +13 -0
  450. package/lib/typescript/utils/documentTypeOptions.d.ts.map +1 -0
  451. package/lib/typescript/utils/googleMapsPreflight.d.ts +44 -0
  452. package/lib/typescript/utils/googleMapsPreflight.d.ts.map +1 -0
  453. package/lib/typescript/utils/hmac.d.ts +39 -0
  454. package/lib/typescript/utils/hmac.d.ts.map +1 -0
  455. package/lib/typescript/utils/iso3166Countries.d.ts +27 -0
  456. package/lib/typescript/utils/iso3166Countries.d.ts.map +1 -0
  457. package/lib/typescript/utils/jpegFromUri.d.ts +29 -0
  458. package/lib/typescript/utils/jpegFromUri.d.ts.map +1 -0
  459. package/lib/typescript/utils/keepAwake.d.ts +16 -0
  460. package/lib/typescript/utils/keepAwake.d.ts.map +1 -0
  461. package/lib/typescript/utils/log.d.ts +18 -0
  462. package/lib/typescript/utils/log.d.ts.map +1 -0
  463. package/lib/typescript/utils/osGeocoder.d.ts +38 -0
  464. package/lib/typescript/utils/osGeocoder.d.ts.map +1 -0
  465. package/lib/typescript/utils/parseGoogleAddressComponents.d.ts +43 -0
  466. package/lib/typescript/utils/parseGoogleAddressComponents.d.ts.map +1 -0
  467. package/lib/typescript/utils/personNameNormalize.d.ts +10 -0
  468. package/lib/typescript/utils/personNameNormalize.d.ts.map +1 -0
  469. package/lib/typescript/utils/sdkError.d.ts +14 -0
  470. package/lib/typescript/utils/sdkError.d.ts.map +1 -0
  471. package/lib/typescript/utils/sdkVersion.d.ts +7 -0
  472. package/lib/typescript/utils/sdkVersion.d.ts.map +1 -0
  473. package/lib/typescript/utils/stepConfig.d.ts +8 -0
  474. package/lib/typescript/utils/stepConfig.d.ts.map +1 -0
  475. package/lib/typescript/utils/taxInfoConfig.d.ts +7 -0
  476. package/lib/typescript/utils/taxInfoConfig.d.ts.map +1 -0
  477. package/package.json +99 -0
  478. package/src/camera/AddressSearchBar.tsx +363 -0
  479. package/src/camera/DocumentCapture.tsx +505 -0
  480. package/src/camera/LivenessCamera.tsx +602 -0
  481. package/src/camera/MapAddressPicker.tsx +397 -0
  482. package/src/core/VelionOnboarding.ts +974 -0
  483. package/src/core/sessionDeclinedCopy.ts +76 -0
  484. package/src/core/sessionStateMapper.ts +167 -0
  485. package/src/core/sseReasonMessages.ts +531 -0
  486. package/src/data/iso3166Alpha2Codes.json +1 -0
  487. package/src/data/iso3166CountryNames.json +251 -0
  488. package/src/i18n/index.ts +26 -0
  489. package/src/i18n/strings/en.ts +289 -0
  490. package/src/i18n/strings/es.ts +291 -0
  491. package/src/index.ts +137 -0
  492. package/src/steps/AddressInfoStep.tsx +726 -0
  493. package/src/steps/DocumentsOcrStep.tsx +472 -0
  494. package/src/steps/EmailContactStep.tsx +159 -0
  495. package/src/steps/EmailOtpStep.tsx +250 -0
  496. package/src/steps/FaceMatchStep.tsx +177 -0
  497. package/src/steps/FingerprintStep.tsx +99 -0
  498. package/src/steps/HumanBasicInfoStep.tsx +274 -0
  499. package/src/steps/HumanExtendedInfoStep.tsx +353 -0
  500. package/src/steps/LegalBasicInfoStep.tsx +205 -0
  501. package/src/steps/LegalExtendedInfoStep.tsx +171 -0
  502. package/src/steps/LivenessMatchStep.tsx +846 -0
  503. package/src/steps/PhoneContactStep.tsx +160 -0
  504. package/src/steps/PhoneOtpStep.tsx +249 -0
  505. package/src/steps/SwornDeclarationStep.tsx +220 -0
  506. package/src/steps/TaxInfoStep.tsx +277 -0
  507. package/src/steps/TermsAndConditionsStep.tsx +261 -0
  508. package/src/steps/_shared.ts +44 -0
  509. package/src/steps/types.ts +72 -0
  510. package/src/transport/api.ts +257 -0
  511. package/src/transport/irisWebSocket.ts +186 -0
  512. package/src/transport/secureUrl.ts +47 -0
  513. package/src/transport/sse.ts +310 -0
  514. package/src/types/index.ts +1198 -0
  515. package/src/ui/MapFallbackBoundary.tsx +46 -0
  516. package/src/ui/StepShell.tsx +137 -0
  517. package/src/ui/VelionOnboardingScreen.tsx +223 -0
  518. package/src/ui/forms/index.ts +12 -0
  519. package/src/ui/forms/useInlineValidation.ts +115 -0
  520. package/src/ui/forms/validators.ts +29 -0
  521. package/src/ui/icons/HomeHeartIcon.tsx +34 -0
  522. package/src/ui/icons/StepIcon.tsx +77 -0
  523. package/src/ui/overlays/AnalyzingOverlay.tsx +323 -0
  524. package/src/ui/overlays/LoadingOverlay.tsx +115 -0
  525. package/src/ui/overlays/ProgressBar.tsx +99 -0
  526. package/src/ui/overlays/RetryDialog.tsx +128 -0
  527. package/src/ui/overlays/index.ts +3 -0
  528. package/src/ui/primitives/Banner.tsx +81 -0
  529. package/src/ui/primitives/Button.tsx +164 -0
  530. package/src/ui/primitives/Card.tsx +55 -0
  531. package/src/ui/primitives/Checkbox.tsx +153 -0
  532. package/src/ui/primitives/CountrySelect.tsx +356 -0
  533. package/src/ui/primitives/DatePicker.tsx +266 -0
  534. package/src/ui/primitives/Input.tsx +110 -0
  535. package/src/ui/primitives/Select.tsx +259 -0
  536. package/src/ui/primitives/Spinner.tsx +17 -0
  537. package/src/ui/primitives/index.ts +9 -0
  538. package/src/ui/theme/ThemeProvider.tsx +102 -0
  539. package/src/ui/theme/index.ts +17 -0
  540. package/src/ui/theme/tokens.ts +159 -0
  541. package/src/utils/EventEmitter.ts +155 -0
  542. package/src/utils/base64.ts +44 -0
  543. package/src/utils/deviceFingerprint.ts +184 -0
  544. package/src/utils/documentTypeOptions.ts +31 -0
  545. package/src/utils/googleMapsPreflight.ts +72 -0
  546. package/src/utils/hmac.ts +61 -0
  547. package/src/utils/iso3166Countries.ts +111 -0
  548. package/src/utils/jpegFromUri.ts +42 -0
  549. package/src/utils/keepAwake.ts +62 -0
  550. package/src/utils/log.ts +37 -0
  551. package/src/utils/osGeocoder.ts +75 -0
  552. package/src/utils/parseGoogleAddressComponents.ts +123 -0
  553. package/src/utils/personNameNormalize.ts +17 -0
  554. package/src/utils/sdkError.ts +40 -0
  555. package/src/utils/sdkVersion.ts +6 -0
  556. package/src/utils/stepConfig.ts +75 -0
  557. package/src/utils/taxInfoConfig.ts +14 -0
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @fileoverview Typed, memory-safe EventEmitter for internal SDK communication.
3
+ *
4
+ * Design rationale:
5
+ * - Fully typed via generics — no `any` escapes at the call sites.
6
+ * - All `on()` calls return an unsubscribe function, which is the preferred
7
+ * modern pattern over imperative `off()` calls. This makes cleanup trivial
8
+ * via a collected array of disposables.
9
+ * - Listeners that throw are caught and logged, preventing one bad subscriber
10
+ * from silently breaking the entire event chain.
11
+ * - `removeAllListeners()` is explicitly called in `VelionOnboarding.destroy()`
12
+ * to prevent memory leaks in long-lived single-page applications.
13
+ */
14
+
15
+ /** A strongly-typed listener function for a given event payload. */
16
+ type Listener<TPayload> = (payload: TPayload) => void;
17
+
18
+ /** A function returned by `on()` that removes the registered listener when called. */
19
+ export type Unsubscribe = () => void;
20
+
21
+ /**
22
+ * A generic, compile-time safe EventEmitter.
23
+ *
24
+ * @typeParam TEventMap - An object type mapping event names to their payload types.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * interface MyEvents {
29
+ * 'data:ready': { records: string[] };
30
+ * 'error': Error;
31
+ * }
32
+ *
33
+ * const emitter = new TypedEventEmitter<MyEvents>();
34
+ *
35
+ * const unsub = emitter.on('data:ready', ({ records }) => {
36
+ * // `records` is correctly typed as string[]
37
+ * console.log(records);
38
+ * });
39
+ *
40
+ * emitter.emit('data:ready', { records: ['a', 'b'] });
41
+ * unsub(); // Clean up
42
+ * ```
43
+ */
44
+ export class TypedEventEmitter<TEventMap extends Record<string, unknown>> {
45
+ /**
46
+ * Internal store. Using a `Map<K, Set<Listener>>` gives O(1) lookups and
47
+ * avoids duplicate listeners with zero extra checks (Set semantics).
48
+ */
49
+ private readonly _listeners = new Map<
50
+ keyof TEventMap,
51
+ Set<Listener<unknown>>
52
+ >();
53
+
54
+ /**
55
+ * Registers a listener for the given event. The listener will be invoked
56
+ * synchronously every time `emit(event, payload)` is called.
57
+ *
58
+ * @param event - The event name to subscribe to.
59
+ * @param listener - The callback to invoke. Receives the typed payload.
60
+ * @returns An unsubscribe function. Call it to remove this specific listener.
61
+ */
62
+ on<K extends keyof TEventMap>(
63
+ event: K,
64
+ listener: Listener<TEventMap[K]>,
65
+ ): Unsubscribe {
66
+ if (!this._listeners.has(event)) {
67
+ this._listeners.set(event, new Set());
68
+ }
69
+ const listeners = this._listeners.get(event);
70
+ if (listeners) listeners.add(listener as Listener<unknown>);
71
+
72
+ return () => this.off(event, listener);
73
+ }
74
+
75
+ /**
76
+ * Registers a one-time listener. The listener is automatically removed
77
+ * after the first time the event fires.
78
+ *
79
+ * @param event - The event name to subscribe to.
80
+ * @param listener - The callback to invoke once.
81
+ * @returns An unsubscribe function. Call it to cancel before the event fires.
82
+ */
83
+ once<K extends keyof TEventMap>(
84
+ event: K,
85
+ listener: Listener<TEventMap[K]>,
86
+ ): Unsubscribe {
87
+ const wrapper: Listener<TEventMap[K]> = (payload) => {
88
+ listener(payload);
89
+ this.off(event, wrapper);
90
+ };
91
+ return this.on(event, wrapper);
92
+ }
93
+
94
+ /**
95
+ * Emits an event, synchronously invoking all registered listeners.
96
+ * Errors thrown by individual listeners are caught and logged to prevent
97
+ * cascading failures.
98
+ *
99
+ * @param event - The event name to emit.
100
+ * @param payload - The data to pass to each listener.
101
+ */
102
+ emit<K extends keyof TEventMap>(event: K, payload: TEventMap[K]): void {
103
+ const set = this._listeners.get(event);
104
+ if (!set || set.size === 0) return;
105
+
106
+ for (const listener of set) {
107
+ try {
108
+ (listener as Listener<TEventMap[K]>)(payload);
109
+ } catch (err) {
110
+ console.error(
111
+ `[VelionSDK] Uncaught error in listener for event "${String(event)}":`,
112
+ err,
113
+ );
114
+ }
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Removes a specific listener for an event.
120
+ *
121
+ * @param event - The event name.
122
+ * @param listener - The exact listener function reference to remove.
123
+ */
124
+ off<K extends keyof TEventMap>(
125
+ event: K,
126
+ listener: Listener<TEventMap[K]>,
127
+ ): void {
128
+ this._listeners.get(event)?.delete(listener as Listener<unknown>);
129
+ }
130
+
131
+ /**
132
+ * Removes all listeners, optionally scoped to a single event.
133
+ * Called by `VelionOnboarding.destroy()` to prevent memory leaks.
134
+ *
135
+ * @param event - If provided, only clears listeners for that event.
136
+ * If omitted, clears ALL listeners on ALL events.
137
+ */
138
+ removeAllListeners(event?: keyof TEventMap): void {
139
+ if (event !== undefined) {
140
+ this._listeners.delete(event);
141
+ } else {
142
+ this._listeners.clear();
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Returns the number of registered listeners for a given event.
148
+ * Useful for debugging and testing assertions.
149
+ *
150
+ * @param event - The event name to check.
151
+ */
152
+ listenerCount(event: keyof TEventMap): number {
153
+ return this._listeners.get(event)?.size ?? 0;
154
+ }
155
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Base64 helpers without `Buffer` (RN does not ship a Buffer global) and
3
+ * without leaning on `react-native-quick-base64`. Hermes provides `btoa` /
4
+ * `atob`, which take Latin-1 strings — we wrap them with byte arrays so
5
+ * callers don't have to think about the in-between.
6
+ */
7
+
8
+ /**
9
+ * Encodes a `Uint8Array` to a standard base64 string.
10
+ *
11
+ * Implementation note: `btoa` requires a Latin-1 string. We convert the byte
12
+ * array to one char per byte via `String.fromCharCode`, in chunks to avoid
13
+ * blowing the JS argument-list limit on large frames (~1 MB JPEG).
14
+ */
15
+ export function bytesToBase64(bytes: Uint8Array): string {
16
+ const CHUNK = 0x8000; // 32 KiB — well below the spread-args limit.
17
+ let binary = '';
18
+ for (let i = 0; i < bytes.length; i += CHUNK) {
19
+ const slice = bytes.subarray(i, i + CHUNK);
20
+ binary += String.fromCharCode(...slice);
21
+ }
22
+ // `btoa` is part of the WHATWG spec and is available on Hermes (RN ≥ 0.74).
23
+ return globalThis.btoa(binary);
24
+ }
25
+
26
+ /** Decodes a standard base64 string into a `Uint8Array`. */
27
+ export function base64ToBytes(b64: string): Uint8Array {
28
+ const binary = globalThis.atob(b64);
29
+ const bytes = new Uint8Array(binary.length);
30
+ for (let i = 0; i < binary.length; i += 1) {
31
+ bytes[i] = binary.charCodeAt(i);
32
+ }
33
+ return bytes;
34
+ }
35
+
36
+ /** Lowercase hex (`'a1f3…'`) — matches the canonical Iris HMAC format. */
37
+ export function bytesToHexLower(bytes: Uint8Array): string {
38
+ let out = '';
39
+ for (let i = 0; i < bytes.length; i += 1) {
40
+ const v = bytes[i] ?? 0;
41
+ out += v.toString(16).padStart(2, '0');
42
+ }
43
+ return out;
44
+ }
@@ -0,0 +1,184 @@
1
+ /**
2
+ * @fileoverview Device Fingerprint via Fingerprint Pro RN SDK.
3
+ *
4
+ * Uses the official `@fingerprintjs/fingerprintjs-pro-react-native` agent
5
+ * class to identify the device.
6
+ *
7
+ * Why a real SDK and not a hand-rolled hash:
8
+ * - The backend (`PublicSdkSessionController.fingerprint`) reads only
9
+ * `request_id` and `sealed_result` from the body. A custom `visitor_id`
10
+ * field is silently dropped and the AML enrichment lookup never runs.
11
+ * - Fingerprint Pro returns a stable `requestId` (lookup key against the
12
+ * Fingerprint server) and a `sealedResult` (encrypted payload the
13
+ * backend decrypts with its private key for server-side identification).
14
+ *
15
+ * The Fingerprint Pro RN SDK is loaded **dynamically** so it stays an
16
+ * optional peer dep: hosts that don't ship the fingerprint module get a
17
+ * clear `FINGERPRINT_FAILED` error instead of a hard module-resolution
18
+ * crash at app boot. (The Velion example app installs it; third-party
19
+ * consumers without a Fingerprint workspace can swap defaults via
20
+ * `fingerprintApiKey` / `fingerprintEndpoint` in `VelionConfig`.)
21
+ */
22
+
23
+ import { SdkErrorCode, type SdkError } from '../types';
24
+
25
+ /** Public shape of the result. */
26
+ export interface DeviceFingerprintResult {
27
+ request_id: string;
28
+ sealed_result?: string;
29
+ }
30
+
31
+ export interface DeviceFingerprintOptions {
32
+ /** Custom endpoint subdomain (proxied through Velion infra). */
33
+ endpoint: string;
34
+ /** Optional override for the public Fingerprint Pro key. */
35
+ apiKey?: string;
36
+ /** Hard ceiling for the call (ms). The SDK's own timeout can hang past this; we Promise.race against it. */
37
+ timeoutMs?: number;
38
+ }
39
+
40
+ /**
41
+ * Fingerprint Pro public API key for the shared Velion workspace. Hardcoded
42
+ * by design — Fingerprint distinguishes public keys (safe to ship in client
43
+ * code; bound to your domain/bundle ID at the Fingerprint dashboard) from
44
+ * secret keys (server-only, used by the worker to decrypt sealedResult or
45
+ * call the Server API). This constant is the *public* one.
46
+ */
47
+ const VELION_FP_PUBLIC_KEY = 'GU2vrZByydGqG9HYUaz2';
48
+
49
+ /**
50
+ * Loaded once per process. We resolve the optional native module lazily so
51
+ * its absence is reported as a clean SDK error rather than crashing the
52
+ * Metro bundler at startup with "Unable to resolve module".
53
+ */
54
+ type FingerprintAgentLike = {
55
+ getVisitorData: (
56
+ tags?: Record<string, unknown> | undefined,
57
+ linkedId?: string | undefined,
58
+ ) => Promise<{ requestId?: string; sealedResult?: string }>;
59
+ };
60
+
61
+ type FingerprintAgentCtor = new (config: {
62
+ apiKey: string;
63
+ region?: 'us' | 'eu' | 'ap';
64
+ endpointUrl?: string | string[];
65
+ /** Used by the SDK if the primary endpoint fails or times out. */
66
+ fallbackEndpointUrls?: string[];
67
+ extendedResponseFormat?: boolean;
68
+ /** Per-request defaults; overridden by the third arg of getVisitorData(). */
69
+ requestOptions?: { timeout?: number };
70
+ }) => FingerprintAgentLike;
71
+
72
+ function loadAgentCtor(): FingerprintAgentCtor {
73
+ // Avoid bundler hoisting at build time so missing optional dep doesn't
74
+ // crash the host app at boot.
75
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
76
+ const mod = require('@fingerprintjs/fingerprintjs-pro-react-native') as {
77
+ FingerprintJsProAgent?: FingerprintAgentCtor;
78
+ };
79
+ if (typeof mod.FingerprintJsProAgent !== 'function') {
80
+ throw new Error(
81
+ 'Module @fingerprintjs/fingerprintjs-pro-react-native is installed ' +
82
+ 'but does not export FingerprintJsProAgent. Upgrade to v3+ of the package.',
83
+ );
84
+ }
85
+ return mod.FingerprintJsProAgent;
86
+ }
87
+
88
+ /**
89
+ * Calls Fingerprint Pro RN to obtain `requestId` + optional `sealedResult`,
90
+ * the only two pieces of data the Velion backend cares about. Throws a
91
+ * shaped `SdkError` on any failure (missing module, agent init error,
92
+ * network).
93
+ */
94
+ export async function generateDeviceFingerprint(
95
+ options: DeviceFingerprintOptions,
96
+ ): Promise<DeviceFingerprintResult> {
97
+ let AgentCtor: FingerprintAgentCtor;
98
+ try {
99
+ AgentCtor = loadAgentCtor();
100
+ } catch (err) {
101
+ throw {
102
+ code: SdkErrorCode.FINGERPRINT_FAILED,
103
+ message:
104
+ 'Fingerprint Pro RN module is not installed. Add ' +
105
+ '`@fingerprintjs/fingerprintjs-pro-react-native` to your app ' +
106
+ '(and re-run `expo prebuild`) to enable the DEVICE_FINGERPRINT step.',
107
+ cause: err,
108
+ } satisfies SdkError;
109
+ }
110
+
111
+ const trimmedEndpoint = options.endpoint.replace(/\/$/, '').trim();
112
+ // An empty string is treated as "no custom endpoint" — the SDK falls through
113
+ // to its built-in public endpoint (api.fpjs.io). This is useful for
114
+ // diagnosing whether a custom proxy (e.g. fp.velion.la) is the cause of a
115
+ // ClientTimeout when the public path works.
116
+ const useCustomEndpoint = trimmedEndpoint.length > 0;
117
+ const apiKey = options.apiKey?.trim() || VELION_FP_PUBLIC_KEY;
118
+ // Internal cap for the call. The Fingerprint SDK has its own retry/timeout
119
+ // logic that on iOS occasionally hangs past 30s without surfacing the error
120
+ // to the JS layer; we Promise.race against this to guarantee a clean failure.
121
+ const timeoutMs = Math.max(6000, options.timeoutMs ?? 15000);
122
+
123
+ const agent = new AgentCtor({
124
+ apiKey,
125
+ region: 'us',
126
+ ...(useCustomEndpoint && {
127
+ endpointUrl: trimmedEndpoint,
128
+ // If the custom endpoint is unreachable (proxy misconfigured, DNS, etc.)
129
+ // the SDK falls back to the public Fingerprint Pro endpoint so the step
130
+ // still completes during development.
131
+ fallbackEndpointUrls: ['https://api.fpjs.io'],
132
+ }),
133
+ extendedResponseFormat: true,
134
+ requestOptions: { timeout: Math.floor(timeoutMs * 0.75) },
135
+ });
136
+
137
+ let visitorData: { requestId?: string; sealedResult?: string };
138
+ let timeoutHandle: ReturnType<typeof setTimeout> | null = null;
139
+ try {
140
+ visitorData = await Promise.race([
141
+ agent.getVisitorData(),
142
+ new Promise<never>((_resolve, reject) => {
143
+ timeoutHandle = setTimeout(
144
+ () =>
145
+ reject(
146
+ new Error(
147
+ `Fingerprint Pro getVisitorData() did not return within ${timeoutMs}ms`,
148
+ ),
149
+ ),
150
+ timeoutMs,
151
+ );
152
+ }),
153
+ ]);
154
+ } catch (err) {
155
+ throw {
156
+ code: SdkErrorCode.FINGERPRINT_FAILED,
157
+ message:
158
+ 'No pudimos completar el reconocimiento del dispositivo. ' +
159
+ 'Probá nuevamente; si el problema persiste, verificá tu conexión ' +
160
+ '(sin VPN ni proxies) o que el bundle ID de la app esté habilitado ' +
161
+ 'en el dashboard de Fingerprint Pro.',
162
+ cause: err,
163
+ } satisfies SdkError;
164
+ } finally {
165
+ if (timeoutHandle !== null) clearTimeout(timeoutHandle);
166
+ }
167
+
168
+ const requestId = visitorData.requestId;
169
+ if (typeof requestId !== 'string' || requestId.length === 0) {
170
+ throw {
171
+ code: SdkErrorCode.FINGERPRINT_FAILED,
172
+ message:
173
+ 'Fingerprint Pro did not return a requestId — backend cannot ' +
174
+ 'enrich the session without it.',
175
+ cause: undefined,
176
+ } satisfies SdkError;
177
+ }
178
+
179
+ const result: DeviceFingerprintResult = { request_id: requestId };
180
+ if (typeof visitorData.sealedResult === 'string' && visitorData.sealedResult.length > 0) {
181
+ result.sealed_result = visitorData.sealedResult;
182
+ }
183
+ return result;
184
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Default identification document option for HUMAN_BASIC_INFO when the backend
3
+ * does not send `accepted_country_documents` (same label keys as legacy UI).
4
+ */
5
+
6
+ const DOCUMENT_TYPE_LABELS_BY_PRESET = {
7
+ es: {
8
+ ARG_DNI: 'DNI (Argentina)',
9
+ },
10
+ en: {
11
+ ARG_DNI: 'DNI (Argentina)',
12
+ },
13
+ ar: {
14
+ ARG_DNI: 'DNI (Argentina)',
15
+ },
16
+ } as const;
17
+
18
+ type PresetLocale = keyof typeof DOCUMENT_TYPE_LABELS_BY_PRESET;
19
+
20
+ /**
21
+ * Fallback list for the HUMAN_BASIC_INFO identification type selector when step config
22
+ * does not include document types from the backend.
23
+ */
24
+ export function resolveDocumentTypeOptions(
25
+ uiLocale: string,
26
+ ): Array<{ value: string; label: string }> {
27
+ const labelLocale: PresetLocale =
28
+ uiLocale === 'en' ? 'en' : uiLocale === 'ar' ? 'ar' : 'es';
29
+ const labelMap = DOCUMENT_TYPE_LABELS_BY_PRESET[labelLocale];
30
+ return [{ value: 'ARG_DNI', label: labelMap.ARG_DNI }];
31
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Pre-flight checks for the assisted address flow.
3
+ *
4
+ * The SDK no longer calls any Google REST API from the client — reverse
5
+ * geocoding goes through the OS native geocoder (see `osGeocoder.ts`). What
6
+ * we still need to verify is:
7
+ * 1. `react-native-maps` is linked.
8
+ * 2. On Android, the Google Maps key is declared in `AndroidManifest.xml`
9
+ * as `<meta-data android:name="com.google.android.geo.API_KEY" .../>`.
10
+ * Without that, mounting `<MapView>` throws a native
11
+ * `IllegalStateException` from the Fabric UI manager — a JS error
12
+ * boundary cannot catch it because the throw happens in a native
13
+ * thread during the UI commit.
14
+ *
15
+ * Note that these probes cannot catch the iOS-specific case where
16
+ * `react-native-maps` IS installed but the `AirGoogleMaps` sub-target was
17
+ * never added to the Xcode project — that one only surfaces at render time
18
+ * and is handled by `MapFallbackBoundary`.
19
+ */
20
+
21
+ import { Platform } from 'react-native';
22
+ import { log } from './log';
23
+
24
+ /**
25
+ * Returns true when `react-native-maps` is importable and exposes the
26
+ * MapView component we need.
27
+ */
28
+ export function isReactNativeMapsAvailable(): boolean {
29
+ try {
30
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
31
+ const mod = require('react-native-maps');
32
+ return typeof mod?.default === 'function' || typeof mod?.MapView === 'function';
33
+ } catch (err) {
34
+ log.warn('[gmaps-preflight] react-native-maps unavailable', err);
35
+ return false;
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Best-effort probe for the Android `com.google.android.geo.API_KEY` meta-data
41
+ * in the host's `AndroidManifest.xml`.
42
+ *
43
+ * Returns:
44
+ * - `true` on iOS (the check does not apply — Apple Maps needs no key).
45
+ * - `true` when we can confirm the key is wired via the Expo config
46
+ * (`android.config.googleMaps.apiKey`). Expo prebuild copies that
47
+ * into the manifest, so its presence in `expoConfig` is a reliable
48
+ * proxy for the real meta-data.
49
+ * - `false` when `expo-constants` is available AND the Expo config does not
50
+ * declare the key — we know prebuild produced a manifest without
51
+ * the meta-data, so mounting `<MapView>` would crash.
52
+ * - `undefined` when `expo-constants` is not installed (bare RN). We cannot
53
+ * probe the manifest without a custom native module; the caller
54
+ * should default to the previous behaviour (trust the integrator
55
+ * when they pass `googleMapsApiKey` via `VelionConfig`).
56
+ */
57
+ export function isAndroidGoogleMapsKeyInManifest(): boolean | undefined {
58
+ if (Platform.OS !== 'android') return true;
59
+ let Constants: unknown;
60
+ try {
61
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
62
+ const mod = require('expo-constants');
63
+ Constants = mod?.default ?? mod;
64
+ } catch {
65
+ return undefined;
66
+ }
67
+ const expoConfig = (Constants as { expoConfig?: unknown } | undefined)?.expoConfig as
68
+ | { android?: { config?: { googleMaps?: { apiKey?: unknown } } } }
69
+ | undefined;
70
+ const key = expoConfig?.android?.config?.googleMaps?.apiKey;
71
+ return typeof key === 'string' && key.trim().length > 0;
72
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @fileoverview HMAC-SHA256 over JPEG frames for the Iris liveness flow.
3
+ *
4
+ * React Native's WebCrypto support is incomplete in Hermes (no `subtle.sign`),
5
+ * so we lean on `@noble/hashes` — pure JavaScript, ~10 KB, no native code.
6
+ *
7
+ * Canonical message (must match the Iris orchestrator exactly):
8
+ * `${sessionId}\n${frameId}\n${ts}\n${sha256hex(jpeg)}`
9
+ *
10
+ * Output: lowercase hex MAC, sent in the JSON envelope's `mac` field.
11
+ */
12
+
13
+ import { hmac } from '@noble/hashes/hmac';
14
+ import { sha256 } from '@noble/hashes/sha256';
15
+ import { base64ToBytes, bytesToHexLower } from './base64';
16
+
17
+ export interface HmacKey {
18
+ readonly raw: Uint8Array;
19
+ }
20
+
21
+ /** Decode the base64 frame_integrity_key from `/liveness-init`. */
22
+ export function importHmacKey(base64: string): HmacKey {
23
+ return { raw: base64ToBytes(base64) };
24
+ }
25
+
26
+ /**
27
+ * Build the signed envelope sent over the Iris WebSocket. Mirrors
28
+ * `LivenessModule.buildSignedEnvelope`:
29
+ * 1. Compute SHA-256 of the JPEG bytes (hex, lowercase).
30
+ * 2. Build the canonical message.
31
+ * 3. HMAC-SHA256 with the imported key.
32
+ * 4. Wrap into `{ type: 'FRAME', frameId, timestamp, image, mac }`.
33
+ *
34
+ * Returns the JSON string ready to `ws.send`.
35
+ */
36
+ export function buildSignedFrameEnvelope(args: {
37
+ key: HmacKey;
38
+ sessionId: string;
39
+ frameId: number;
40
+ jpegBytes: Uint8Array;
41
+ jpegBase64: string;
42
+ /** Defaults to `Date.now()`. */
43
+ timestamp?: number;
44
+ }): { json: string; timestamp: number } {
45
+ const ts = args.timestamp ?? Date.now();
46
+ const digest = sha256(args.jpegBytes);
47
+ const digestHex = bytesToHexLower(digest);
48
+ const canonical = `${args.sessionId}\n${args.frameId}\n${ts}\n${digestHex}`;
49
+ const mac = hmac(sha256, args.key.raw, new TextEncoder().encode(canonical));
50
+ const macHex = bytesToHexLower(mac);
51
+ return {
52
+ json: JSON.stringify({
53
+ type: 'FRAME',
54
+ frameId: args.frameId,
55
+ timestamp: ts,
56
+ image: args.jpegBase64,
57
+ mac: macHex,
58
+ }),
59
+ timestamp: ts,
60
+ };
61
+ }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * ISO 3166-1 alpha-2 country list with localized display names.
3
+ *
4
+ * Strategy:
5
+ * 1. If `Intl.DisplayNames` is available (full ICU build, polyfilled
6
+ * Hermes, native iOS runtime, …), use it — it covers every BCP-47
7
+ * locale and stays current with ICU updates.
8
+ * 2. Otherwise fall back to a built-in map covering all 249 ISO 3166-1
9
+ * alpha-2 codes in `es` and `en`. The names match the official
10
+ * Spanish convention (es. wikipedia.org/wiki/ISO_3166-1) and the ISO
11
+ * English short name. Hermes default builds (which ship without
12
+ * `Intl.DisplayNames`) get full localized names without needing
13
+ * `@formatjs/intl-displaynames`.
14
+ */
15
+
16
+ import ISO_CODES from '../data/iso3166Alpha2Codes.json';
17
+ import COUNTRY_NAMES from '../data/iso3166CountryNames.json';
18
+ import { log } from './log';
19
+
20
+ export interface Iso3166CountryOption {
21
+ readonly code: string;
22
+ readonly name: string;
23
+ }
24
+
25
+ function intlLocaleTag(locale: string): string {
26
+ if (locale === 'en') return 'en';
27
+ /** Rioplatense UI uses Spanish country names with regional formatting. */
28
+ if (locale === 'ar') return 'es-AR';
29
+ return 'es';
30
+ }
31
+
32
+ interface DisplayNameResolver {
33
+ of(code: string): string | undefined;
34
+ }
35
+
36
+ interface IntlWithDisplayNames {
37
+ DisplayNames?: new (
38
+ locales: string | string[],
39
+ options: { type: 'region' | 'language' | 'script' | 'currency' | 'calendar' | 'dateTimeField' },
40
+ ) => DisplayNameResolver;
41
+ }
42
+
43
+ let didWarnAboutFallback = false;
44
+ const NAMES_MAP = COUNTRY_NAMES as Record<string, ReadonlyArray<string>>;
45
+
46
+ function fallbackName(code: string, lang: 'es' | 'en'): string {
47
+ const entry = NAMES_MAP[code.toUpperCase()];
48
+ if (!entry || entry.length === 0) return code;
49
+ // [0] = es, [1] = en. Fall through to ES (or to the code itself) if the
50
+ // requested locale is missing.
51
+ return (lang === 'en' ? entry[1] : entry[0]) ?? entry[0] ?? code;
52
+ }
53
+
54
+ function buildResolver(localeTag: string): DisplayNameResolver {
55
+ const lang: 'es' | 'en' = localeTag.toLowerCase().startsWith('en') ? 'en' : 'es';
56
+ const intl = (globalThis as { Intl?: IntlWithDisplayNames }).Intl;
57
+ if (intl && typeof intl.DisplayNames === 'function') {
58
+ try {
59
+ const dn = new intl.DisplayNames([localeTag], { type: 'region' });
60
+ // Wrap so unknown codes still fall back to the built-in map.
61
+ return {
62
+ of: (code) => dn.of(code) ?? fallbackName(code, lang),
63
+ };
64
+ } catch (err) {
65
+ // Some Hermes builds expose DisplayNames but throw on construction —
66
+ // fall through to the built-in map.
67
+ log.warn('[iso3166] Intl.DisplayNames threw, falling back', err);
68
+ }
69
+ }
70
+ if (!didWarnAboutFallback) {
71
+ didWarnAboutFallback = true;
72
+ log.info(
73
+ '[iso3166] Using built-in ISO 3166-1 country names (Intl.DisplayNames unavailable). ' +
74
+ 'All 249 alpha-2 codes resolved via the bundled map.',
75
+ );
76
+ }
77
+ return { of: (code) => fallbackName(code, lang) };
78
+ }
79
+
80
+ /**
81
+ * Returns all ISO 3166-1 alpha-2 countries sorted by localized display name.
82
+ */
83
+ export function listIso3166CountriesForUi(locale: string): Iso3166CountryOption[] {
84
+ const tag = intlLocaleTag(locale);
85
+ const codes = ISO_CODES as string[];
86
+ const dn = buildResolver(tag);
87
+ const collator = (globalThis as { Intl?: { Collator?: new (locale: string, options: Intl.CollatorOptions) => Intl.Collator } })
88
+ .Intl?.Collator;
89
+ return codes
90
+ .map((code) => ({ code, name: dn.of(code) ?? code }))
91
+ .sort((a, b) => {
92
+ if (collator) {
93
+ return new collator(tag, { sensitivity: 'base' }).compare(a.name, b.name);
94
+ }
95
+ return a.name.localeCompare(b.name);
96
+ });
97
+ }
98
+
99
+ /**
100
+ * Filters by country name or code (case-insensitive).
101
+ */
102
+ export function filterIso3166Countries(
103
+ options: readonly Iso3166CountryOption[],
104
+ query: string,
105
+ ): Iso3166CountryOption[] {
106
+ const q = query.trim().toLowerCase();
107
+ if (q.length === 0) return [...options];
108
+ return options.filter(
109
+ (o) => o.code.toLowerCase().includes(q) || o.name.toLowerCase().includes(q),
110
+ );
111
+ }