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