@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,173 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * @fileoverview Secure, centralized API caller for the Velion Onboarding SDK.
5
+ *
6
+ * The SDK version comes from `utils/sdkVersion.ts` (a regular module constant)
7
+ * instead of bundler-injected globals so this code runs identically in Metro.
8
+ *
9
+ * Design decisions:
10
+ * - **Factory pattern** (`createApiCaller`): Returns a pre-configured caller
11
+ * bound to a specific `baseUrl` and `sessionToken`. Modules receive this
12
+ * caller and never have direct access to the token string.
13
+ * - **No API keys**: Only the short-lived `sessionToken` (Bearer) is used.
14
+ * - **AbortController integration**: All calls accept an optional signal,
15
+ * enabling clean cancellation when `VelionOnboarding.destroy()` is called.
16
+ * - **Structured errors**: All failures are normalized into `SdkError` objects
17
+ * with machine-readable codes, never raw exceptions.
18
+ */
19
+
20
+ import { SdkErrorCode } from '../types';
21
+ import { isSecureHttpUrl } from './secureUrl';
22
+ import { log } from '../utils/log';
23
+ import { SDK_VERSION } from '../utils/sdkVersion';
24
+
25
+ /** Hours of clock skew tolerated before we warn the user about an inaccurate device clock. */
26
+ const CLOCK_SKEW_WARN_HOURS = 24;
27
+ const SESSION_EXPIRED_CODE = SdkErrorCode.SESSION_EXPIRED;
28
+ function buildApiError(message, httpStatus, cause) {
29
+ let code;
30
+ if (httpStatus === 401) {
31
+ code = SdkErrorCode.SESSION_EXPIRED;
32
+ } else if (httpStatus === 403) {
33
+ code = SdkErrorCode.SESSION_INVALID;
34
+ } else if (httpStatus === undefined || httpStatus === 0) {
35
+ code = SdkErrorCode.NETWORK_ERROR;
36
+ } else {
37
+ code = SdkErrorCode.API_ERROR;
38
+ }
39
+ return {
40
+ code,
41
+ message,
42
+ cause,
43
+ ...(httpStatus !== undefined && {
44
+ httpStatus
45
+ })
46
+ };
47
+ }
48
+ /**
49
+ * Creates a pre-authorized API caller bound to a specific session.
50
+ * All requests include Authorization: Bearer <sessionToken>.
51
+ */
52
+ export function createApiCaller(rawBaseUrl, sessionToken, expiresAt) {
53
+ if (!isSecureHttpUrl(rawBaseUrl)) {
54
+ throw {
55
+ code: SdkErrorCode.UNKNOWN,
56
+ message: `Insecure apiUrl: "${rawBaseUrl}". The SDK refuses to send the session token over a non-TLS channel. ` + 'Use https://; http:// is accepted only for loopback (localhost / 127.0.0.1 / ::1).'
57
+ };
58
+ }
59
+ // Strip a trailing slash so concatenation with endpoints (which always
60
+ // start with `/`) never produces a double slash. This is the same
61
+ // normalization `sse.ts` already does.
62
+ const baseUrl = rawBaseUrl.replace(/\/$/, '');
63
+ let currentToken = sessionToken;
64
+ let currentExpiresAt = expiresAt;
65
+ let clockSkewWarned = false;
66
+ function ensureTokenValid() {
67
+ if (!currentExpiresAt) return;
68
+ const expiry = new Date(currentExpiresAt).getTime();
69
+ if (Number.isNaN(expiry)) return;
70
+ const now = Date.now();
71
+ const skewMs = now - expiry;
72
+ if (!clockSkewWarned && Math.abs(skewMs) > CLOCK_SKEW_WARN_HOURS * 60 * 60 * 1000) {
73
+ clockSkewWarned = true;
74
+ log.warn('[api] device clock appears to be off by more than', CLOCK_SKEW_WARN_HOURS, 'h relative to the session expiresAt; falling back to server-side 401 detection.');
75
+ return;
76
+ }
77
+ if (now >= expiry) {
78
+ throw {
79
+ code: SESSION_EXPIRED_CODE,
80
+ message: 'Session token has expired. Obtain a new session from your backend.'
81
+ };
82
+ }
83
+ }
84
+ function buildAuthHeaders(extra) {
85
+ return {
86
+ ...extra,
87
+ Authorization: `Bearer ${currentToken}`,
88
+ 'X-Velion-SDK-Version': SDK_VERSION
89
+ };
90
+ }
91
+ function setSessionToken(token, expiresAtIso) {
92
+ currentToken = token;
93
+ currentExpiresAt = expiresAtIso;
94
+ clockSkewWarned = false;
95
+ }
96
+ async function call(endpoint, init, options = {}) {
97
+ ensureTokenValid();
98
+ const url = `${baseUrl}${endpoint}`;
99
+ let response;
100
+ try {
101
+ const initWithSignal = options.signal !== undefined ? {
102
+ ...init,
103
+ signal: options.signal
104
+ } : init;
105
+ response = await fetch(url, initWithSignal);
106
+ } catch (networkErr) {
107
+ const name = networkErr?.name;
108
+ if (name === 'AbortError') {
109
+ throw networkErr;
110
+ }
111
+ throw buildApiError(`Network request failed for "${endpoint}". Check connectivity.`, undefined, networkErr);
112
+ }
113
+ if (!response.ok) {
114
+ let errorBody = {};
115
+ try {
116
+ errorBody = await response.json();
117
+ } catch {
118
+ // Body may not be JSON (e.g., a 502 from a proxy). That's fine.
119
+ }
120
+ throw buildApiError(errorBody.message ?? `Backend returned ${response.status} on ${endpoint}.`, response.status, errorBody);
121
+ }
122
+ if (response.status === 204 || response.headers.get('content-length') === '0') {
123
+ return {};
124
+ }
125
+ const contentType = response.headers.get('content-type') ?? '';
126
+ if (!contentType.includes('application/json')) {
127
+ return {};
128
+ }
129
+ try {
130
+ return await response.json();
131
+ } catch (parseErr) {
132
+ throw buildApiError(`Failed to parse JSON response from "${endpoint}".`, response.status, parseErr);
133
+ }
134
+ }
135
+ async function get(endpoint, options) {
136
+ return call(endpoint, {
137
+ method: 'GET',
138
+ headers: buildAuthHeaders(options?.extraHeaders)
139
+ }, options);
140
+ }
141
+ async function post(endpoint, body, options) {
142
+ return call(endpoint, {
143
+ method: 'POST',
144
+ headers: buildAuthHeaders({
145
+ 'Content-Type': 'application/json',
146
+ ...options?.extraHeaders
147
+ }),
148
+ body: JSON.stringify(body)
149
+ }, options);
150
+ }
151
+
152
+ /**
153
+ * Authenticated POST with a `FormData` body. RN's `fetch` mirrors the
154
+ * standard contract: don't set `Content-Type` so the runtime injects the
155
+ * multipart boundary.
156
+ */
157
+ async function postFormData(endpoint, formData, options) {
158
+ return call(endpoint, {
159
+ method: 'POST',
160
+ headers: buildAuthHeaders(options?.extraHeaders),
161
+ body: formData
162
+ }, options);
163
+ }
164
+ return {
165
+ get,
166
+ post,
167
+ postFormData,
168
+ setSessionToken
169
+ };
170
+ }
171
+
172
+ /** The type of the object returned by `createApiCaller`. */
173
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SdkErrorCode","isSecureHttpUrl","log","SDK_VERSION","CLOCK_SKEW_WARN_HOURS","SESSION_EXPIRED_CODE","SESSION_EXPIRED","buildApiError","message","httpStatus","cause","code","SESSION_INVALID","undefined","NETWORK_ERROR","API_ERROR","createApiCaller","rawBaseUrl","sessionToken","expiresAt","UNKNOWN","baseUrl","replace","currentToken","currentExpiresAt","clockSkewWarned","ensureTokenValid","expiry","Date","getTime","Number","isNaN","now","skewMs","Math","abs","warn","buildAuthHeaders","extra","Authorization","setSessionToken","token","expiresAtIso","call","endpoint","init","options","url","response","initWithSignal","signal","fetch","networkErr","name","ok","errorBody","json","status","headers","get","contentType","includes","parseErr","method","extraHeaders","post","body","JSON","stringify","postFormData","formData"],"sourceRoot":"../../../src","sources":["transport/api.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * @fileoverview Typed wrapper around the WebSocket connection to the Iris
5
+ * orchestrator.
6
+ *
7
+ * - Server messages are JSON (`{ type, ... }`). See `IrisServerMessage`.
8
+ * - Client → server frames are either:
9
+ * a) raw `ArrayBuffer` JPEGs (when no HMAC key was returned), or
10
+ * b) JSON envelopes signed with HMAC-SHA256 (see `utils/hmac`).
11
+ *
12
+ * The WebSocket global on RN supports both string and binary payloads, so we
13
+ * don't need any extra polyfills. We do require the URL to be `wss://`
14
+ * (or `ws://localhost:*` for dev) — TLS is enforced.
15
+ */
16
+
17
+ import { isSecureWebSocketUrl } from './secureUrl';
18
+ import { log } from '../utils/log';
19
+ const WS_OPEN = 1;
20
+
21
+ /** Builds the final connect URL with `?token=...&lang=...` query params. */
22
+ export function buildIrisUrl(websocketUrl, connectionToken, locale) {
23
+ let url = websocketUrl;
24
+ if (connectionToken) {
25
+ const sep = url.includes('?') ? '&' : '?';
26
+ url = `${url}${sep}token=${encodeURIComponent(connectionToken)}`;
27
+ }
28
+ const normalizedLang = locale.toLowerCase().startsWith('es') ? 'es' : 'en';
29
+ const langSep = url.includes('?') ? '&' : '?';
30
+ url = `${url}${langSep}lang=${normalizedLang}`;
31
+ return url;
32
+ }
33
+
34
+ /**
35
+ * Open a WebSocket against the Iris orchestrator. The URL must already include
36
+ * the customer's `connection_token` if Iris enforced auth.
37
+ *
38
+ * `onClose` fires for both clean (`code === 1000`) and unclean closures —
39
+ * callers decide how to react (terminal warning vs. unexpected drop).
40
+ */
41
+ export function openIrisWebSocket(opts) {
42
+ if (!isSecureWebSocketUrl(opts.websocketUrl)) {
43
+ throw new Error(`Iris websocket_url must be wss:// (or ws://localhost in dev). Got: "${opts.websocketUrl}"`);
44
+ }
45
+ const url = buildIrisUrl(opts.websocketUrl, opts.connectionToken, opts.locale);
46
+ log.info('[IrisWS] opening', {
47
+ url: opts.websocketUrl
48
+ });
49
+ const ws = new WebSocket(url);
50
+ let closed = false;
51
+ ws.onopen = () => {
52
+ log.info('[IrisWS] open');
53
+ opts.onOpen?.();
54
+ };
55
+ ws.onmessage = event => {
56
+ if (typeof event.data !== 'string') return;
57
+ try {
58
+ const parsed = JSON.parse(event.data);
59
+ opts.onMessage(parsed);
60
+ } catch {
61
+ // Iris only sends JSON; ignore noise.
62
+ }
63
+ };
64
+ ws.onerror = event => {
65
+ log.warn('[IrisWS] error', event);
66
+ opts.onError?.(event);
67
+ };
68
+ ws.onclose = event => {
69
+ log.info('[IrisWS] close', {
70
+ code: event.code,
71
+ reason: event.reason
72
+ });
73
+ closed = true;
74
+ opts.onClose?.(event.code, event.reason ?? '');
75
+ };
76
+ return {
77
+ sendBinary: data => {
78
+ if (closed || ws.readyState !== WS_OPEN) return false;
79
+ try {
80
+ ws.send(data);
81
+ return true;
82
+ } catch (err) {
83
+ log.warn('[IrisWS] sendBinary failed', err);
84
+ return false;
85
+ }
86
+ },
87
+ sendJson: envelope => {
88
+ if (closed || ws.readyState !== WS_OPEN) return false;
89
+ try {
90
+ ws.send(envelope);
91
+ return true;
92
+ } catch (err) {
93
+ log.warn('[IrisWS] sendJson failed', err);
94
+ return false;
95
+ }
96
+ },
97
+ close: (code = 1000, reason = '') => {
98
+ if (closed) return;
99
+ closed = true;
100
+ try {
101
+ ws.close(code, reason);
102
+ } catch {
103
+ /* ignore */
104
+ }
105
+ },
106
+ isOpen: () => !closed && ws.readyState === WS_OPEN
107
+ };
108
+ }
109
+
110
+ /**
111
+ * Subset of WARNING `code`s that mean "Iris is about to close, escalate to
112
+ * the in-flow retry dialog instead of the generic close handler".
113
+ */
114
+ export const TERMINAL_WARNING_CODES = new Set(['SPOOF_RISK_HIGH', 'SESSION_TERMINATED', 'BIOMETRIC_LOCK']);
115
+ //# sourceMappingURL=irisWebSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isSecureWebSocketUrl","log","WS_OPEN","buildIrisUrl","websocketUrl","connectionToken","locale","url","sep","includes","encodeURIComponent","normalizedLang","toLowerCase","startsWith","langSep","openIrisWebSocket","opts","Error","info","ws","WebSocket","closed","onopen","onOpen","onmessage","event","data","parsed","JSON","parse","onMessage","onerror","warn","onError","onclose","code","reason","onClose","sendBinary","readyState","send","err","sendJson","envelope","close","isOpen","TERMINAL_WARNING_CODES","Set"],"sourceRoot":"../../../src","sources":["transport/irisWebSocket.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * @fileoverview Transport-security guards for runtime URLs.
5
+ *
6
+ * The SDK exchanges bearer tokens, KYC documents and selfies. A misconfigured
7
+ * `apiUrl`, a tampered `liveness-init` response, or a backend that returns a
8
+ * `ws://` URL would all leak that data in cleartext. These helpers force every
9
+ * runtime endpoint to use TLS, with a single carve-out for loopback hosts so
10
+ * developers can still run the SDK against a local backend.
11
+ */
12
+
13
+ function isLocalhostHost(host) {
14
+ // `URL.hostname` returns `[::1]` (with brackets) for IPv6 loopback in some
15
+ // engines and `::1` in others — accept both. Strict loopback only: arbitrary
16
+ // `*.local` (Bonjour) or `*.svc.cluster.local` hostnames are NOT exempted —
17
+ // the SDK refuses to send the session token over plain HTTP outside of
18
+ // loopback even if the host is reachable on the local network.
19
+ return host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]';
20
+ }
21
+
22
+ /** True when the URL is `https://`, or `http://localhost`-style for dev. */
23
+ export function isSecureHttpUrl(url) {
24
+ try {
25
+ const u = new URL(url);
26
+ if (u.protocol === 'https:') return true;
27
+ if (u.protocol === 'http:') return isLocalhostHost(u.hostname);
28
+ return false;
29
+ } catch {
30
+ return false;
31
+ }
32
+ }
33
+
34
+ /** True when the URL is `wss://`, or `ws://localhost`-style for dev. */
35
+ export function isSecureWebSocketUrl(url) {
36
+ try {
37
+ const u = new URL(url);
38
+ if (u.protocol === 'wss:') return true;
39
+ if (u.protocol === 'ws:') return isLocalhostHost(u.hostname);
40
+ return false;
41
+ } catch {
42
+ return false;
43
+ }
44
+ }
45
+ //# sourceMappingURL=secureUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isLocalhostHost","host","isSecureHttpUrl","url","u","URL","protocol","hostname","isSecureWebSocketUrl"],"sourceRoot":"../../../src","sources":["transport/secureUrl.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,eAAeA,CAACC,IAAY,EAAW;EAC9C;EACA;EACA;EACA;EACA;EACA,OACEA,IAAI,KAAK,WAAW,IACpBA,IAAI,KAAK,WAAW,IACpBA,IAAI,KAAK,KAAK,IACdA,IAAI,KAAK,OAAO;AAEpB;;AAEA;AACA,OAAO,SAASC,eAAeA,CAACC,GAAW,EAAW;EACpD,IAAI;IACF,MAAMC,CAAC,GAAG,IAAIC,GAAG,CAACF,GAAG,CAAC;IACtB,IAAIC,CAAC,CAACE,QAAQ,KAAK,QAAQ,EAAE,OAAO,IAAI;IACxC,IAAIF,CAAC,CAACE,QAAQ,KAAK,OAAO,EAAE,OAAON,eAAe,CAACI,CAAC,CAACG,QAAQ,CAAC;IAC9D,OAAO,KAAK;EACd,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF;;AAEA;AACA,OAAO,SAASC,oBAAoBA,CAACL,GAAW,EAAW;EACzD,IAAI;IACF,MAAMC,CAAC,GAAG,IAAIC,GAAG,CAACF,GAAG,CAAC;IACtB,IAAIC,CAAC,CAACE,QAAQ,KAAK,MAAM,EAAE,OAAO,IAAI;IACtC,IAAIF,CAAC,CAACE,QAAQ,KAAK,KAAK,EAAE,OAAON,eAAe,CAACI,CAAC,CAACG,QAAQ,CAAC;IAC5D,OAAO,KAAK;EACd,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF","ignoreList":[]}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * @fileoverview SSE client for React Native, with auto-reconnect.
5
+ *
6
+ * React Native's `fetch` does not expose `body.getReader()`, so we lean on
7
+ * `react-native-sse` — which follows the `EventSource` model and dispatches
8
+ * by `event:` name. If the backend publishes named events
9
+ * (e.g. `event: NextStepRequestedEvent`), the default `'message'` listener
10
+ * never fires.
11
+ *
12
+ * To cover both cases we register the same handler on `'message'` AND on
13
+ * every named event the orchestrator may emit. New event types are
14
+ * discovered automatically the first time the wrapper sees them
15
+ * (`addEventListener` is added on demand) — see the dynamic registration
16
+ * below.
17
+ *
18
+ * ## Reconnection
19
+ *
20
+ * Production deployments behind GCP / k8s ingress (and most load balancers)
21
+ * close idle TCP streams at ~30 s. When that happens `react-native-sse`
22
+ * fires `error` with `{ type: 'error', message: 'cannot parse response',
23
+ * xhrStatus: 200, xhrState: 4 }` — a clean upstream close, not a real
24
+ * transport failure. The native EventSource spec would auto-reconnect
25
+ * here, but `react-native-sse` does not in this scenario, so we wrap it.
26
+ *
27
+ * Strategy:
28
+ * - On `error` or `close`, schedule a reconnect with exponential backoff
29
+ * (capped at 30 s). On `open` of the new connection, reset the attempt
30
+ * counter so a brief blip doesn't punish us forever.
31
+ * - Track `lastEventId` across reconnects — the backend supports
32
+ * `Last-Event-ID` replay via Redis, so we never lose an event that
33
+ * fired during the gap.
34
+ * - Don't escalate transient drops to `onError`: the orchestrator uses
35
+ * that callback to switch to GET polling, which is a much worse UX
36
+ * than a 1 s blip + replay. We still log the underlying error for
37
+ * debugging.
38
+ *
39
+ * Path: `${baseUrl}/sessions/:sessionId/events` (baseUrl already includes `/public/sdk`).
40
+ * Backend: `OnboardingSseController GET /public/sdk/sessions/{sessionId}/events`.
41
+ */
42
+
43
+ import EventSource from 'react-native-sse';
44
+ import { log } from '../utils/log';
45
+ export const SSE_EVENTS_PATH = '/sessions';
46
+
47
+ /**
48
+ * Named events the backend is known to dispatch. The list intentionally
49
+ * covers both the legacy domain-event names (e.g. `NextStepRequestedEvent`)
50
+ * and the public wire types (`ROUTING_COMMAND`, `STEP_UPDATED`, …) so we
51
+ * stay compatible with whichever shape the orchestrator chooses.
52
+ */
53
+ const KNOWN_EVENT_TYPES = [
54
+ // Public/wire types (preferred — what the SDK code branches on).
55
+ 'ROUTING_COMMAND', 'STEP_UPDATED', 'SESSION_APPROVED', 'SESSION_MANUAL_REVIEW', 'SESSION_DECLINED', 'SESSION_TERMINATED',
56
+ // Legacy/domain-event names emitted by `SseDomainEventConsumer` in the
57
+ // Spring orchestrator. Listening to both lets the same SDK build talk to
58
+ // older and newer backends without a config flag.
59
+ 'NextStepRequestedEvent', 'StepUpdatedEvent', 'SessionApprovedEvent', 'SessionManualReviewEvent', 'SessionDeclinedEvent', 'SessionTerminatedEvent', 'OnboardingCreatedEvent'];
60
+
61
+ /** Backoff schedule (ms). Last entry repeats indefinitely. */
62
+ const RECONNECT_BACKOFF_MS = [1_000, 2_000, 4_000, 8_000, 15_000, 30_000];
63
+ export function createSessionEventSource(options) {
64
+ const {
65
+ baseUrl,
66
+ sessionId,
67
+ sessionToken,
68
+ lastEventId: initialLastEventId = '0',
69
+ signal,
70
+ onEvent,
71
+ onError
72
+ } = options;
73
+ const base = baseUrl.replace(/\/$/, '');
74
+ const url = `${base}${SSE_EVENTS_PATH}/${sessionId}/events`;
75
+
76
+ /** Updated on every event we receive — replayed via Last-Event-ID. */
77
+ let lastEventId = initialLastEventId;
78
+ let attempt = 0;
79
+ let closed = false;
80
+ let current = null;
81
+ let reconnectTimer = null;
82
+ /**
83
+ * Monotonic id of the active EventSource. Listeners capture their own id
84
+ * and only act if it still matches — events from a previous instance that
85
+ * fire after we've moved on (e.g. `close` fired *because* we called
86
+ * `es.close()` ourselves) are ignored. Without this guard the listeners
87
+ * cascade into runaway reconnect loops.
88
+ */
89
+ let generation = 0;
90
+
91
+ // Cast to a relaxed type — `react-native-sse` typings are over-strict on
92
+ // the constructor signature when passing a custom-events tuple.
93
+ const EventSourceCtor = EventSource;
94
+ const buildHeaders = () => {
95
+ const headers = {
96
+ Accept: 'text/event-stream',
97
+ Authorization: `Bearer ${sessionToken}`,
98
+ // Hint to any intermediate proxy not to buffer the stream.
99
+ 'Cache-Control': 'no-cache'
100
+ };
101
+ if (lastEventId !== '0') {
102
+ headers['Last-Event-ID'] = lastEventId;
103
+ }
104
+ return headers;
105
+ };
106
+ const scheduleReconnect = reason => {
107
+ if (closed) return;
108
+ if (reconnectTimer != null) return; // already scheduled
109
+ const delay = RECONNECT_BACKOFF_MS[Math.min(attempt, RECONNECT_BACKOFF_MS.length - 1)] ?? 30_000;
110
+ attempt += 1;
111
+ log.info('[SSE] Reconnecting', {
112
+ reason,
113
+ attempt,
114
+ delayMs: delay,
115
+ lastEventId
116
+ });
117
+ reconnectTimer = setTimeout(() => {
118
+ reconnectTimer = null;
119
+ if (closed) return;
120
+ tearDown(current);
121
+ current = connect();
122
+ }, delay);
123
+ };
124
+
125
+ /**
126
+ * Detach listeners and close an EventSource that we're about to replace.
127
+ * The listener detach is what stops the cascade: without it, `es.close()`
128
+ * itself dispatches a `close` event, which our handler would catch and
129
+ * schedule another reconnect — even though we already started a new one.
130
+ */
131
+ const tearDown = es => {
132
+ if (!es) return;
133
+ try {
134
+ es.removeAllEventListeners?.();
135
+ } catch (detachErr) {
136
+ log.warn('[SSE] Error detaching listeners from previous stream', detachErr);
137
+ }
138
+ try {
139
+ es.close();
140
+ } catch (closeErr) {
141
+ log.warn('[SSE] Error closing previous stream', closeErr);
142
+ }
143
+ };
144
+ const connect = () => {
145
+ const myGen = ++generation;
146
+ const isStale = () => closed || myGen !== generation;
147
+ const headers = buildHeaders();
148
+ log.info('[SSE] Opening stream', {
149
+ url,
150
+ sessionId,
151
+ hasLastEventId: lastEventId !== '0',
152
+ lastEventId,
153
+ attempt,
154
+ generation: myGen
155
+ });
156
+ const es = new EventSourceCtor(url, {
157
+ headers,
158
+ method: 'GET',
159
+ pollingInterval: 0,
160
+ customEvents: KNOWN_EVENT_TYPES
161
+ });
162
+ es.addEventListener('open', () => {
163
+ if (isStale()) return;
164
+ log.info('[SSE] Stream connected', {
165
+ generation: myGen
166
+ });
167
+ // Reset backoff once the upstream has accepted us — a healthy
168
+ // connection wipes any prior penalty.
169
+ attempt = 0;
170
+ });
171
+ const handleMessage = evt => {
172
+ if (isStale()) return;
173
+ const data = evt.data;
174
+ // Track lastEventId even when we receive a heartbeat / non-JSON
175
+ // chunk: the server still advanced its replay cursor.
176
+ if (typeof evt.lastEventId === 'string' && evt.lastEventId.length > 0) {
177
+ lastEventId = evt.lastEventId;
178
+ }
179
+ if (typeof data !== 'string' || data.length === 0) return;
180
+ try {
181
+ const payload = JSON.parse(data);
182
+ log.info('[SSE] Event received', {
183
+ wireType: evt.type,
184
+ eventType: payload.event_type,
185
+ action: payload.action,
186
+ stepCode: payload.step_code,
187
+ eventId: payload.event_id
188
+ });
189
+ onEvent?.(payload);
190
+ } catch (parseErr) {
191
+ log.warn('[SSE] Failed to parse event payload', {
192
+ wireType: evt.type,
193
+ rawData: data,
194
+ error: parseErr
195
+ });
196
+ }
197
+ };
198
+ es.addEventListener('message', handleMessage);
199
+ for (const type of KNOWN_EVENT_TYPES) {
200
+ es.addEventListener(type, handleMessage);
201
+ }
202
+ es.addEventListener('error', evt => {
203
+ if (isStale()) return;
204
+ // Most errors here are upstream idle-timeouts from the ingress.
205
+ // Log at info level (not error) to avoid noisy reports, and don't
206
+ // escalate to onError — we'll just reconnect.
207
+ log.info('[SSE] Stream interrupted, will reconnect', evt);
208
+ scheduleReconnect('error');
209
+ });
210
+ es.addEventListener('close', () => {
211
+ if (isStale()) return;
212
+ log.info('[SSE] Stream closed by server, will reconnect');
213
+ scheduleReconnect('close');
214
+ });
215
+ return es;
216
+ };
217
+ current = connect();
218
+ const closeAll = () => {
219
+ if (closed) return;
220
+ closed = true;
221
+ if (reconnectTimer != null) {
222
+ clearTimeout(reconnectTimer);
223
+ reconnectTimer = null;
224
+ }
225
+ tearDown(current);
226
+ current = null;
227
+ };
228
+ if (signal) {
229
+ if (signal.aborted) {
230
+ closeAll();
231
+ } else {
232
+ signal.addEventListener('abort', closeAll);
233
+ }
234
+ }
235
+
236
+ // We still expose onError so the orchestrator can react to *unrecoverable*
237
+ // failures — but with auto-reconnect, the only realistic trigger is the
238
+ // outer signal aborting. Keep the parameter wired up for future use.
239
+ void onError;
240
+ return closeAll;
241
+ }
242
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EventSource","log","SSE_EVENTS_PATH","KNOWN_EVENT_TYPES","RECONNECT_BACKOFF_MS","createSessionEventSource","options","baseUrl","sessionId","sessionToken","lastEventId","initialLastEventId","signal","onEvent","onError","base","replace","url","attempt","closed","current","reconnectTimer","generation","EventSourceCtor","buildHeaders","headers","Accept","Authorization","scheduleReconnect","reason","delay","Math","min","length","info","delayMs","setTimeout","tearDown","connect","es","removeAllEventListeners","detachErr","warn","close","closeErr","myGen","isStale","hasLastEventId","method","pollingInterval","customEvents","addEventListener","handleMessage","evt","data","payload","JSON","parse","wireType","type","eventType","event_type","action","stepCode","step_code","eventId","event_id","parseErr","rawData","error","closeAll","clearTimeout","aborted"],"sourceRoot":"../../../src","sources":["transport/sse.ts"],"mappings":"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","ignoreList":[]}