@incodetech/core 2.3.2 → 2.4.0-rc.1

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 (271) hide show
  1. package/THIRD_PARTY_NOTICES.txt +1243 -3
  2. package/dist/Actor-DpTj5PFb.d.ts +1 -0
  3. package/dist/{BaseWasmProvider-Dyi6dKp1.d.ts → BaseWasmProvider-Bq3OHo7P.d.ts} +2 -2
  4. package/dist/BrowserDiagnosticsEnvelopeProvider-BQca6KPG.esm.js +43 -0
  5. package/dist/{FaceDetectionProvider-DtmtCKa9.esm.js → FaceDetectionProvider-BIImDZrc.esm.js} +125 -10
  6. package/dist/HttpRequestError-Bh0pNGSC.esm.js +35 -0
  7. package/dist/{IIdCaptureCapability-RNiFhvXR.d.ts → IIdCaptureCapability-CGcEt2Cw.d.ts} +2 -2
  8. package/dist/{IWasmUtilCapability-CNWRl7jr.d.ts → IWasmUtilCapability-GF2n7sfm.d.ts} +28 -5
  9. package/dist/{Manager-CQQ99QOI.d.ts → Manager-C9T5amUN.d.ts} +7 -1
  10. package/dist/{MotionSensorProvider-DyhbM4Si.esm.js → MotionSensorProvider-DYxh8TjR.esm.js} +1 -1
  11. package/dist/{ekycStateMachine-UeJRO8_p.esm.js → PhoneValidationProvider-SZiOS0jB.esm.js} +232 -827
  12. package/dist/{StreamCanvasCapture-_8gdW5Lk.d.ts → StreamCanvasCapture-7JRf-2ck.d.ts} +2 -2
  13. package/dist/{safeStorage-BdU9_m2E.esm.js → WasmUtilProvider-DtJuBdt-.esm.js} +111 -49
  14. package/dist/{addressSearch-DyHGgeX8.esm.js → addressSearch-DPjIKJrX.esm.js} +142 -4
  15. package/dist/{advanceableErrors-CpF2cBy6.esm.js → advanceableErrors-q_pfU3Cn.esm.js} +5 -4
  16. package/dist/ae-signature.d.ts +2 -2
  17. package/dist/ae-signature.esm.js +1 -1
  18. package/dist/antifraud.d.ts +1 -1
  19. package/dist/antifraud.esm.js +2 -2
  20. package/dist/{antifraudManager-DNkw66oW.esm.js → antifraudManager-CaweCYnY.esm.js} +3 -3
  21. package/dist/{antifraudManager-BY36bS12.d.ts → antifraudManager-DbGCvlJs.d.ts} +2 -2
  22. package/dist/{antifraudStateMachine-DBeq47D2.esm.js → antifraudStateMachine-DRl0UVyA.esm.js} +3 -4
  23. package/dist/{endpoints-B-3Q-LUw.esm.js → api-Cz90EHyu.esm.js} +151 -1
  24. package/dist/{apiError-CmGEmaGU.esm.js → apiError-D5u6HIDG.esm.js} +2 -1
  25. package/dist/authentication.d.ts +3 -3
  26. package/dist/authentication.esm.js +2 -2
  27. package/dist/{authenticationManager-CboRCl_N.d.ts → authenticationManager-BIZC55Bi.d.ts} +2 -8
  28. package/dist/{authenticationManager-BFjSjtQ_.esm.js → authenticationManager-CB3YW6EK.esm.js} +6 -6
  29. package/dist/{authenticationStateMachine-Dfo34ZiI.esm.js → authenticationStateMachine-BJJhLmdH.esm.js} +5 -6
  30. package/dist/avatar.d.ts +1 -1
  31. package/dist/{backCameraStream-B0-YgP_y.esm.js → backCameraStream-CMvXj4X4.esm.js} +1 -1
  32. package/dist/camera.esm.js +1 -1
  33. package/dist/certificate-issuance.d.ts +1 -1
  34. package/dist/certificate-issuance.esm.js +2 -2
  35. package/dist/{certificateIssuanceManager-C3-CI0_s.esm.js → certificateIssuanceManager-BfeMv2PU.esm.js} +3 -3
  36. package/dist/{certificateIssuanceManager-DCgEidHz.d.ts → certificateIssuanceManager-Dr8A4Lgr.d.ts} +2 -3
  37. package/dist/{certificateIssuanceStateMachine-CxqS_nD-.esm.js → certificateIssuanceStateMachine-Frgjbjw8.esm.js} +4 -5
  38. package/dist/consent.d.ts +1 -1
  39. package/dist/consent.esm.js +2 -2
  40. package/dist/{consentManager-B6E1XJDw.esm.js → consentManager-CvEu8h_W.esm.js} +3 -3
  41. package/dist/{consentManager-2h_w6wFc.d.ts → consentManager-Cv_0QKLD.d.ts} +7 -8
  42. package/dist/{consentStateMachine-DTSfdGiW.esm.js → consentStateMachine-DJTgN_-1.esm.js} +3 -4
  43. package/dist/{createCameraCycleOwnership-DnwTl1ad.esm.js → createCameraCycleOwnership-Dj_LHUvN.esm.js} +71 -66
  44. package/dist/{createFaceAvatar-BlcTYgJv.d.ts → createFaceAvatar-lYX0VTYs.d.ts} +1 -1
  45. package/dist/cross-document-data-match.d.ts +1 -1
  46. package/dist/cross-document-data-match.esm.js +1 -1
  47. package/dist/{crossDocumentDataMatchManager-9XhFVZ5S.esm.js → crossDocumentDataMatchManager-Cu141CE8.esm.js} +4 -5
  48. package/dist/{crossDocumentDataMatchManager-Dq8Z3SOg.d.ts → crossDocumentDataMatchManager-yCWCOzcU.d.ts} +2 -2
  49. package/dist/curp-validation.d.ts +1 -1
  50. package/dist/curp-validation.esm.js +2 -2
  51. package/dist/{curpValidationManager-DbIMYFcJ.esm.js → curpValidationManager-B-z9q5V3.esm.js} +15 -22
  52. package/dist/{curpValidationManager-DNuZn9fn.d.ts → curpValidationManager-C9sqoh9n.d.ts} +3 -3
  53. package/dist/{curpValidationStateMachine-g5kMfuLj.esm.js → curpValidationStateMachine-vDEFLMPw.esm.js} +4 -5
  54. package/dist/custom-fields.d.ts +1 -1
  55. package/dist/custom-fields.esm.js +1 -1
  56. package/dist/custom-watchlist.d.ts +1 -1
  57. package/dist/custom-watchlist.esm.js +2 -2
  58. package/dist/{customFieldsManager-8-W2KY4n.d.ts → customFieldsManager-CF-cO8ap.d.ts} +2 -2
  59. package/dist/{customFieldsManager-CzWZTkW-.esm.js → customFieldsManager-D1ex2cFM.esm.js} +4 -5
  60. package/dist/{customWatchlistManager-DWTED5Ur.esm.js → customWatchlistManager-CTI-SGk0.esm.js} +3 -3
  61. package/dist/{customWatchlistManager-PBWHr_oM.d.ts → customWatchlistManager-DolUswyR.d.ts} +2 -2
  62. package/dist/{customWatchlistStateMachine-DOQou6TW.esm.js → customWatchlistStateMachine-hmRd0f2I.esm.js} +3 -4
  63. package/dist/deepsightLoader-DZMdYSl-.esm.js +55 -0
  64. package/dist/{deepsightLoader-v-dLejS-.esm.js → deepsightService-tGP53cSS.esm.js} +51 -56
  65. package/dist/device.esm.js +1 -1
  66. package/dist/document-capture.d.ts +2 -2
  67. package/dist/document-capture.esm.js +2 -2
  68. package/dist/{documentCaptureManager-BRPxqYD2.esm.js → documentCaptureManager-DUJwpKC5.esm.js} +17 -18
  69. package/dist/{documentCaptureManager-lEtCM320.d.ts → documentCaptureManager-DkyDtm3Y.d.ts} +11 -34
  70. package/dist/{documentCaptureStateMachine-D312sSIu.esm.js → documentCaptureStateMachine-B8i7GnLh.esm.js} +55 -59
  71. package/dist/dynamic-forms.d.ts +2 -2
  72. package/dist/dynamic-forms.esm.js +2 -2
  73. package/dist/{dynamicFormsManager-C-9Jhnd3.esm.js → dynamicFormsManager-Bxmv_9PB.esm.js} +3 -3
  74. package/dist/{dynamicFormsManager-D5R_uxLQ.d.ts → dynamicFormsManager-C0dHs1ty.d.ts} +3 -3
  75. package/dist/{dynamicFormsStateMachine-DGI_F2PP.esm.js → dynamicFormsStateMachine-CoOWTzyM.esm.js} +4 -5
  76. package/dist/ekyb.d.ts +5 -5
  77. package/dist/ekyb.esm.js +3 -3
  78. package/dist/{ekybManager-DeoMcZEz.esm.js → ekybManager-BBkdPxUY.esm.js} +23 -27
  79. package/dist/{ekybManager-BwRuGAwt.d.ts → ekybManager-BaZ_7CEu.d.ts} +4 -4
  80. package/dist/{ekybStateMachine-D1IJ1Z72.esm.js → ekybStateMachine-n4Iz9iLc.esm.js} +338 -14
  81. package/dist/ekyc.d.ts +2 -2
  82. package/dist/ekyc.esm.js +3 -3
  83. package/dist/{ekycManager-BX2d46FY.esm.js → ekycManager-BO-Lui3t.esm.js} +29 -36
  84. package/dist/{ekycManager-DLzDuBzI.d.ts → ekycManager-DW-ynodd.d.ts} +3 -3
  85. package/dist/ekycStateMachine-CDnI_NRq.esm.js +1443 -0
  86. package/dist/{ekycUtils-D6wfSpPN.esm.js → ekycUtils-zY8CdKJL.esm.js} +53 -3
  87. package/dist/electronic-signature.d.ts +1 -1
  88. package/dist/electronic-signature.esm.js +1 -1
  89. package/dist/{electronicSignatureManager-yYUc30na.esm.js → electronicSignatureManager-BtWCrz5_.esm.js} +10 -11
  90. package/dist/{electronicSignatureManager-Ds-KEVTq.d.ts → electronicSignatureManager-DTSLOvKR.d.ts} +2 -3
  91. package/dist/email.d.ts +1 -1
  92. package/dist/email.esm.js +2 -2
  93. package/dist/{emailManager-bR1N5rV_.esm.js → emailManager-ButFktRm.esm.js} +20 -26
  94. package/dist/{emailManager-CADXW_9X.d.ts → emailManager-Dy6omJVp.d.ts} +2 -2
  95. package/dist/{emailStateMachine-Bc_6oIYw.esm.js → emailStateMachine-BXtlC0NV.esm.js} +3 -4
  96. package/dist/{events-ijlbX_Wx.esm.js → events-Du2A4-Qr.esm.js} +203 -8
  97. package/dist/events.d.ts +3 -2
  98. package/dist/events.esm.js +1 -1
  99. package/dist/extensibility.d.ts +38 -38
  100. package/dist/extensibility.esm.js +36 -36
  101. package/dist/{externalFetch-BKBThAUC.esm.js → externalFetch-DrR9xshk.esm.js} +3 -2
  102. package/dist/face-match.d.ts +1 -1
  103. package/dist/face-match.esm.js +2 -2
  104. package/dist/{faceCaptureManagerFactory-m-7ae67q.d.ts → faceCaptureManagerFactory-1hzeS_rB.d.ts} +11 -51
  105. package/dist/{faceCaptureManagerFactory-B6i9QcAk.esm.js → faceCaptureManagerFactory-CwZUeYfq.esm.js} +19 -54
  106. package/dist/{faceCaptureSetup-DU1mjRr6.esm.js → faceCaptureSetup-CYbdKNlI.esm.js} +104 -396
  107. package/dist/{faceMatchManager-BnvrZM2F.d.ts → faceMatchManager-DIgG-UFS.d.ts} +1 -2
  108. package/dist/{faceMatchManager-Bmv0HzuY.esm.js → faceMatchManager-DWFUQjMQ.esm.js} +3 -3
  109. package/dist/{faceMatchStateMachine-mRIHQ3dA.esm.js → faceMatchStateMachine-CUCvlydD.esm.js} +6 -5
  110. package/dist/{feature-management-C8CuN0os.esm.js → feature-management-rTfjzdDa.esm.js} +3 -3
  111. package/dist/feature-management.esm.js +1 -1
  112. package/dist/field-comparison.d.ts +2 -2
  113. package/dist/field-comparison.esm.js +1 -1
  114. package/dist/{fieldComparisonManager-CBvEGxFx.d.ts → fieldComparisonManager-CUX4gza2.d.ts} +6 -3
  115. package/dist/{fieldComparisonManager-CC-klG0h.esm.js → fieldComparisonManager-v3knTYV_.esm.js} +35 -18
  116. package/dist/fiscal-qr.d.ts +1 -1
  117. package/dist/fiscal-qr.esm.js +1 -1
  118. package/dist/{fiscalQrManager-B1STmT6z.d.ts → fiscalQrManager-D0Iy7EKR.d.ts} +2 -2
  119. package/dist/fiscalQrManager-Dt9fHG7h.esm.js +6798 -0
  120. package/dist/flow-events.d.ts +1 -1
  121. package/dist/flow.d.ts +14 -13
  122. package/dist/flow.esm.js +14 -14
  123. package/dist/{flowCompletionService-DccgtDnm.esm.js → flowCompletionService-oiK1PjPr.esm.js} +2 -3
  124. package/dist/{flowServices-CdsWsppG.esm.js → flowServices-CTc-zqfN.esm.js} +11 -8
  125. package/dist/geolocation.d.ts +1 -1
  126. package/dist/geolocation.esm.js +2 -2
  127. package/dist/{geolocationManager-CGHBxtMb.esm.js → geolocationManager-BOdtVuR8.esm.js} +6 -7
  128. package/dist/{geolocationManager-Cz744E5S.d.ts → geolocationManager-Dn24g1fl.d.ts} +2 -3
  129. package/dist/{geolocationStateMachine-CdEb1Gn0.esm.js → geolocationStateMachine-BnGuZ3hn.esm.js} +4 -5
  130. package/dist/{getDeviceClass-5NYZg9s6.esm.js → getDeviceClass-bsWdEDxP.esm.js} +1 -1
  131. package/dist/{getParsedUserAgent-B2iFDql1.esm.js → getParsedUserAgent-DhQPeKqw.esm.js} +1 -1
  132. package/dist/government-validation.d.ts +1 -1
  133. package/dist/government-validation.esm.js +2 -2
  134. package/dist/{governmentValidationManager-D02vT4yY.d.ts → governmentValidationManager-B82zOut8.d.ts} +3 -3
  135. package/dist/{governmentValidationManager-CacFOtKO.esm.js → governmentValidationManager-BtXWHICu.esm.js} +3 -3
  136. package/dist/{governmentValidationStateMachine-CoaZOSTP.esm.js → governmentValidationStateMachine-COL-Vs48.esm.js} +3 -4
  137. package/dist/home.d.ts +3 -26
  138. package/dist/home.esm.js +2 -2
  139. package/dist/http.esm.js +1 -1
  140. package/dist/id-ocr.d.ts +1 -1
  141. package/dist/id-ocr.esm.js +2 -2
  142. package/dist/id-selfie-flow.d.ts +6 -9
  143. package/dist/id-selfie-flow.esm.js +23 -28
  144. package/dist/id-verification.d.ts +1 -1
  145. package/dist/id-verification.esm.js +2 -2
  146. package/dist/id.d.ts +4 -4
  147. package/dist/id.esm.js +4 -205
  148. package/dist/{idCaptureDefaults-Dl64Trv5.esm.js → idCaptureDefaults-BGsG2OAs.esm.js} +7 -5
  149. package/dist/{idCaptureManager-BHwL2Z0V.d.ts → idCaptureManager-0M02hSuC.d.ts} +242 -98
  150. package/dist/{idCaptureManager-BNmVJQkd.esm.js → idCaptureManager-BKedt48Y.esm.js} +276 -210
  151. package/dist/{idCaptureServices-dtDG2HXS.esm.js → idCaptureServices-D0p_RFqk.esm.js} +21 -40
  152. package/dist/{idCaptureStateMachine-BbiZD3uf.esm.js → idCaptureStateMachine-CxwoN5ff.esm.js} +992 -872
  153. package/dist/{idOcrManager-ByWuQ4ej.esm.js → idOcrManager-D3-HNMXP.esm.js} +3 -3
  154. package/dist/{idOcrManager-CFlDwUvN.d.ts → idOcrManager-DT3kPIB3.d.ts} +3 -4
  155. package/dist/{idOcrStateMachine-Bt_abXQQ.esm.js → idOcrStateMachine-DyENX6Ki.esm.js} +3 -4
  156. package/dist/{idVerificationManager-BB4Pj_N6.d.ts → idVerificationManager-BJapZfpy.d.ts} +2 -3
  157. package/dist/{idVerificationManager-DT42c77H.esm.js → idVerificationManager-iWz7Avkr.esm.js} +3 -3
  158. package/dist/{idVerificationStateMachine-DbDVIh9t.esm.js → idVerificationStateMachine-CL1kUdBe.esm.js} +3 -4
  159. package/dist/identity-reuse.d.ts +2 -2
  160. package/dist/identity-reuse.esm.js +2 -2
  161. package/dist/{identityReuseManager-BXEBBI3N.d.ts → identityReuseManager-B1birg5X.d.ts} +162 -44
  162. package/dist/{identityReuseManager-yG3acUrQ.esm.js → identityReuseManager-CD1ucp1d.esm.js} +26 -13
  163. package/dist/{identityReuseStateMachine-BhAkuIra.esm.js → identityReuseStateMachine-DfV81wQC.esm.js} +89 -24
  164. package/dist/{index-CeaC32qI.d.ts → index-CKQ9QBZP.d.ts} +2 -2
  165. package/dist/index-DpTj5PFb.d.ts +1 -0
  166. package/dist/index.d.ts +1 -1
  167. package/dist/index.esm.js +1 -1
  168. package/dist/{invokeOnCaptureCallback-BjzPjJ_p.esm.js → invokeOnCaptureCallback-DYrkOXO6.esm.js} +1 -1
  169. package/dist/lamejs-B6TzhU5q.esm.js +10 -0
  170. package/dist/mandatory-consent.d.ts +2 -2
  171. package/dist/mandatory-consent.esm.js +2 -2
  172. package/dist/{mandatoryConsentManager-7dI0D08q.esm.js → mandatoryConsentManager-Cwqx1nK7.esm.js} +3 -3
  173. package/dist/{mandatoryConsentManager-DFVm_i2B.d.ts → mandatoryConsentManager-okPILEru.d.ts} +8 -9
  174. package/dist/{mandatoryConsentStateMachine-DC5Mo6M1.esm.js → mandatoryConsentStateMachine-pXWqAHo_.esm.js} +3 -4
  175. package/dist/{multipartRecordingService-mwKFTlhR.esm.js → multipartRecordingService-CLwrF5wD.esm.js} +1 -2
  176. package/dist/{permissionGuards-D6TfVop2.esm.js → permissionGuards-gcy3U0SL.esm.js} +1 -1
  177. package/dist/{permissionServices-EY3_Vx6c.esm.js → permissionServices-Ca-tSNhT.esm.js} +34 -3
  178. package/dist/phone-number.d.ts +24 -0
  179. package/dist/phone-number.esm.js +1922 -0
  180. package/dist/phone.d.ts +1 -1
  181. package/dist/phone.esm.js +2 -2
  182. package/dist/{phoneManager-BBU8Lq0O.d.ts → phoneManager-BO-LTih5.d.ts} +16 -3
  183. package/dist/{phoneManager-IjhSv5XS.esm.js → phoneManager-KKUq-Vgo.esm.js} +31 -22
  184. package/dist/{phoneStateMachine-CXdXufKg.esm.js → phoneStateMachine-D2QWS2cu.esm.js} +38 -20
  185. package/dist/phoneValidation-DnBcNUNh.esm.js +48 -0
  186. package/dist/qe-signature.d.ts +2 -2
  187. package/dist/qe-signature.esm.js +1 -1
  188. package/dist/redirect-to-mobile.d.ts +1 -1
  189. package/dist/redirect-to-mobile.esm.js +2 -2
  190. package/dist/{redirectToMobileManager-BD2PvT5B.d.ts → redirectToMobileManager-CVsvpVbQ.d.ts} +2 -2
  191. package/dist/{redirectToMobileManager-FLEWJtv8.esm.js → redirectToMobileManager-uHW3dyuQ.esm.js} +4 -4
  192. package/dist/{redirectToMobileStateMachine-CSWWgUTO.esm.js → redirectToMobileStateMachine-b-H-ipGM.esm.js} +4 -5
  193. package/dist/{rolldown-runtime-FDOR9p9I.esm.js → rolldown-runtime-B-1-B7_t.esm.js} +10 -1
  194. package/dist/{runChildModule-B2Y_hlix.esm.js → runChildModule-CPa0i2_C.esm.js} +13 -12
  195. package/dist/safeStorage-UxDrnjwa.esm.js +35 -0
  196. package/dist/{sdkVersion-N1UiyFiY.esm.js → sdkVersion-BtROs6OA.esm.js} +1 -1
  197. package/dist/selfie.d.ts +4 -4
  198. package/dist/selfie.esm.js +12 -12
  199. package/dist/selfieErrorUtils-sMc0MaNh.esm.js +21 -0
  200. package/dist/{selfieManager-BSZG891S.d.ts → selfieManager-BJdNu_nd.d.ts} +2 -8
  201. package/dist/{selfieManager-AS6wfUvZ.esm.js → selfieManager-Ch9xJbWJ.esm.js} +6 -6
  202. package/dist/selfieStateMachine-DT8QCfKR.esm.js +41 -0
  203. package/dist/{session-BESZc05k.esm.js → session-CNNTckUS.esm.js} +5 -6
  204. package/dist/session.d.ts +15 -3
  205. package/dist/session.esm.js +30 -5
  206. package/dist/sessionInitializer-DVWMJh25.esm.js +973 -0
  207. package/dist/{setup-BuPbxpwF.esm.js → setup-B7ehQ-lf.esm.js} +155 -140
  208. package/dist/{setup-Cyko6cAn.d.ts → setup-YPKTUCY5.d.ts} +42 -15
  209. package/dist/signature.d.ts +1 -1
  210. package/dist/signature.esm.js +2 -2
  211. package/dist/{signatureManager-DGBSWz2_.d.ts → signatureManager-BpVt_Jv7.d.ts} +2 -2
  212. package/dist/{signatureManager-B72np4ZO.esm.js → signatureManager-f_dPAGXn.esm.js} +7 -11
  213. package/dist/{signatureStateMachine-ce_XMA3l.esm.js → signatureStateMachine-C-nUq_oq.esm.js} +3 -4
  214. package/dist/splitTrackedName-3zJRd2RD.esm.js +19 -0
  215. package/dist/{src-35ekGRzK.esm.js → src-DJAJjRYQ.esm.js} +1 -1
  216. package/dist/{stats-CZcy2J53.esm.js → stats-BEvexnKC.esm.js} +1 -2
  217. package/dist/stats.esm.js +1 -1
  218. package/dist/{sessionInitializer-CnhAkMUN.esm.js → thumbmark.esm-CRc0cYvz.esm.js} +33 -776
  219. package/dist/{trueSightService-M5VpCo96.esm.js → trueSightService-BzLdXpmJ.esm.js} +1391 -709
  220. package/dist/trust-graph.d.ts +1 -2
  221. package/dist/trust-graph.esm.js +2 -2
  222. package/dist/{types-C0oWGUzg.d.ts → types-0L-eFDmr.d.ts} +1 -1
  223. package/dist/{types-C1g9itHE.d.ts → types-B6HsSzpk.d.ts} +6 -7
  224. package/dist/{types-DEGVXwsk2.d.ts → types-BAxn7MpY.d.ts} +110 -62
  225. package/dist/{types-BfgmV7s7.d.ts → types-BQA7lRDV.d.ts} +1 -1
  226. package/dist/{types-Cx-1zo-i.d.ts → types-BvLo3U4u.d.ts} +1 -1
  227. package/dist/{types-Bx-BWveD.d.ts → types-CK8Jbjkp.d.ts} +1 -1
  228. package/dist/{types-CxGdmzxa.d.ts → types-Ckir_BEs.d.ts} +1 -1
  229. package/dist/{types-BjSly8cp.d.ts → types-DUnFZ08M.d.ts} +1 -1
  230. package/dist/{types-ESdtnHtg.d.ts → types-yPH8lAH-.d.ts} +3 -4
  231. package/dist/types-zOgZqMni.d.ts +6 -0
  232. package/dist/{urlUtils-D6phjq1-.esm.js → urlUtils-6jsE6rKp.esm.js} +9 -1
  233. package/dist/video-selfie.d.ts +6 -9
  234. package/dist/video-selfie.esm.js +1390 -1349
  235. package/dist/{videoSelfieCameraWarmer-q9ZjvXu9.esm.js → videoSelfieCameraWarmer-DWoFBJAn.esm.js} +10 -11
  236. package/dist/{videoSelfieFlowModuleMachine-BUe2uACW.esm.js → videoSelfieFlowModuleMachine-BCFVHBQ1.esm.js} +1 -1
  237. package/dist/{videoSelfieStepDetector-ChYgFM15.d.ts → videoSelfieStepDetector-CGsTltqB.d.ts} +4 -4
  238. package/dist/videoTrimByCopy-BFfAiNpv.esm.js +15901 -0
  239. package/dist/{warmup-ChDwHSel.esm.js → warmup-BElYWRh7.esm.js} +348 -11
  240. package/dist/{warmup-Cis2p6O0.d.ts → warmup-BO57syF6.d.ts} +8 -0
  241. package/dist/wasm.d.ts +2 -2
  242. package/dist/wasm.esm.js +3 -4
  243. package/dist/{wasmDsFlagSync-DYrLUEII.esm.js → wasmDsFlagSync-CYj5LL9z.esm.js} +1 -1
  244. package/dist/{wasmWebClient-B7baE-Wf.esm.js → wasmWebClient-BjZw_7OB.esm.js} +570 -33
  245. package/dist/watchlist-for-business.d.ts +1 -1
  246. package/dist/watchlist-for-business.esm.js +2 -2
  247. package/dist/watchlist.d.ts +1 -1
  248. package/dist/watchlist.esm.js +2 -2
  249. package/dist/{watchlistForBusinessManager-CsnJnG-C.d.ts → watchlistForBusinessManager-B3GDPZrr.d.ts} +2 -2
  250. package/dist/{watchlistForBusinessManager-CIMkpEhu.esm.js → watchlistForBusinessManager-CZZOFkGl.esm.js} +7 -5
  251. package/dist/{watchlistForBusinessStateMachine-CJ-MvUre.esm.js → watchlistForBusinessStateMachine-B66E7jud.esm.js} +3 -4
  252. package/dist/{watchlistManager-DLXef90v.d.ts → watchlistManager-DJQOd8Pw.d.ts} +2 -2
  253. package/dist/{watchlistManager-CixcLNDT.esm.js → watchlistManager-DXtX94SN.esm.js} +3 -3
  254. package/dist/{watchlistStateMachine-CBqk2w-h.esm.js → watchlistStateMachine-McALifag.esm.js} +3 -4
  255. package/dist/workflow.d.ts +34 -5
  256. package/dist/workflow.esm.js +64 -47
  257. package/dist/{xstate-actors.esm-BXeQ-Ucz.esm.js → xstate-actors.esm-8Gzepa_A.esm.js} +1 -1
  258. package/dist/{xstate.esm-BuFLFuzz.esm.js → xstate.esm-DSajW7CJ.esm.js} +24 -10
  259. package/package.json +13 -5
  260. package/dist/Actor-iTq7YY48.d.ts +0 -1
  261. package/dist/BrowserDiagnosticsCryptoProvider-BuzqvbhN.esm.js +0 -77
  262. package/dist/StateMachine-EDpYWy0i.d.ts +0 -6
  263. package/dist/api-Bx3gKW_y.esm.js +0 -129
  264. package/dist/fiscalQrManager-DbCVMIBx.esm.js +0 -34143
  265. package/dist/index-B8weJxmL.d.ts +0 -1
  266. package/dist/selfieErrorUtils-UiQ46EBa.esm.js +0 -116
  267. package/dist/selfieStateMachine-DY7vJVNY.esm.js +0 -71
  268. package/dist/types-BN5RPPIZ.esm.js +0 -34
  269. package/dist/types-Bt9RuRqt.d.ts +0 -6
  270. package/dist/virtualCameraCheck-Cjab7FTI.esm.js +0 -48
  271. /package/dist/{types-BSBzhHRH.d.ts → types-BSBzhHRH2.d.ts} +0 -0
@@ -1,21 +1,19 @@
1
- import { l as trueSightLog, m as isTrueSightTesting } from "./trueSightService-M5VpCo96.esm.js";
2
1
  import { t as getTimestamp } from "./IBrowserEnvironmentCapability-DEaRRk-R.esm.js";
3
- import { r as getToken, t as api } from "./api-Bx3gKW_y.esm.js";
4
- import "./sessionInitializer-CnhAkMUN.esm.js";
5
- import { t as endpoints } from "./endpoints-B-3Q-LUw.esm.js";
6
- import { t as addDeviceStats } from "./stats-CZcy2J53.esm.js";
7
- import { t as isAndroid } from "./platform-DkcRc9JV.esm.js";
8
- import { i as assign, n as enqueueActions, r as sendTo, t as setup } from "./xstate.esm-BuFLFuzz.esm.js";
9
- import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-BXeQ-Ucz.esm.js";
10
- import { n as invokeRequestPermissionActor, t as checkPermission } from "./permissionServices-EY3_Vx6c.esm.js";
11
- import { a as sendLabelInspectionEvent, i as initializeDeepsightSession, r as initializeCamera, s as stopStream, t as FaceDetectionProvider } from "./FaceDetectionProvider-DtmtCKa9.esm.js";
12
- import { t as FACE_ERROR_CODES } from "./types-BN5RPPIZ.esm.js";
13
- import { a as flagFaceManualReview, i as imageFileToDataUrl, n as runProtectedAttempt, r as cameraCycleProvider, s as PROTECTED_CAPTURE_TARGET, t as createCameraCycleOwnership } from "./createCameraCycleOwnership-DnwTl1ad.esm.js";
2
+ import { r as getToken, t as api, u as endpoints } from "./api-Cz90EHyu.esm.js";
3
+ import { l as trueSightHintTransition, r as noteTrueSightCaptureActivity, u as trueSightLog, y as isTrueSightTesting } from "./trueSightService-BzLdXpmJ.esm.js";
4
+ import "./sessionInitializer-DVWMJh25.esm.js";
5
+ import { t as addDeviceStats } from "./stats-BEvexnKC.esm.js";
6
+ import { t as BrowserLazyImportProvider } from "./BrowserLazyImportProvider-BhoA957O.esm.js";
7
+ import { i as assign, n as enqueueActions, r as sendTo, t as setup } from "./xstate.esm-DSajW7CJ.esm.js";
8
+ import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-8Gzepa_A.esm.js";
9
+ import { n as invokeRequestPermissionActor, t as checkPermission } from "./permissionServices-Ca-tSNhT.esm.js";
10
+ import { a as sendLabelInspectionEvent, d as FACE_ERROR_CODES, i as initializeDeepsightSession, r as initializeCamera, s as stopStream, t as FaceDetectionProvider, u as getFaceUploadErrorCode } from "./FaceDetectionProvider-BIImDZrc.esm.js";
11
+ import { i as flagFaceManualReview, n as runProtectedAttempt, o as PROTECTED_CAPTURE_TARGET, r as cameraCycleProvider, t as createCameraCycleOwnership } from "./createCameraCycleOwnership-Dj_LHUvN.esm.js";
14
12
  import { n as releaseFaceAvatarWarmup, r as warmFaceAvatar, t as createFaceAvatar } from "./createFaceAvatar-BNHdeFj8.esm.js";
15
13
  import { t as IncodeCanvas } from "./canvas-BxFzWTt-.esm.js";
16
- import { n as needsMotionPrimeOnlyFromPermission, r as resolveStoredPermissionResult, t as isReadyForCaptureFromPermission } from "./permissionGuards-D6TfVop2.esm.js";
17
- import { a as getAdaptiveMediaRecorderOptions, i as createRecordingCompositor, n as WorkerEncoderRecordingProvider, t as MultipartRecordingService } from "./multipartRecordingService-mwKFTlhR.esm.js";
18
- import { t as getDeviceClass } from "./getDeviceClass-5NYZg9s6.esm.js";
14
+ import { n as needsMotionPrimeOnlyFromPermission, r as resolveStoredPermissionResult, t as isReadyForCaptureFromPermission } from "./permissionGuards-gcy3U0SL.esm.js";
15
+ import { a as getAdaptiveMediaRecorderOptions, i as createRecordingCompositor, n as WorkerEncoderRecordingProvider, t as MultipartRecordingService } from "./multipartRecordingService-CLwrF5wD.esm.js";
16
+ import { t as getDeviceClass } from "./getDeviceClass-bsWdEDxP.esm.js";
19
17
  //#region src/internal/avatar/concealment.ts
20
18
  /**
21
19
  * Maps a backend concealment option to the internal avatar flags. `OPTION_NONE`
@@ -46,234 +44,6 @@ function concealmentToAvatar(option) {
46
44
  }
47
45
  }
48
46
  //#endregion
49
- //#region src/internal/faceCapture/manualUpload/errors.ts
50
- /**
51
- * Reuses the `notifications.*` copy that `errorModal.tsx` shows for the same
52
- * codes on the camera path, plus the ID manual-upload keys. Only the `title`
53
- * half of each notification pair is used — the inline error is one line.
54
- */
55
- const MANUAL_FACE_UPLOAD_ERROR_KEYS = {
56
- /** The one new string; ID accepts any image type so there was none to reuse. */
57
- typeError: "selfiev2.manualUpload.typeError",
58
- fileTooBig: "manualIdUpload.fileTooBig",
59
- generic: "manualIdUpload.generic",
60
- faceNotFound: "notifications.faceNotFound",
61
- multipleFaces: "notifications.multiple",
62
- lowQualityImage: "notifications.lowQualityImage",
63
- brightness: "notifications.brightness",
64
- lenses: "notifications.lenses",
65
- mask: "notifications.mask",
66
- removeHeadwear: "notifications.removeHeadwear",
67
- closedEyes: "notifications.closedEyes",
68
- spoof: "notifications.spoof",
69
- accessDenied: "notifications.accessDenied",
70
- nonexistentCustomer: "notifications.nonexistentCustomer",
71
- hintNotProvided: "notifications.hintNotProvided",
72
- selfieImageLowQuality: "notifications.selfieImageLowQuality"
73
- };
74
- /** Mirrors `errorContent` in `errorModal.tsx`; omissions resolve to `generic`. */
75
- const ERROR_KEY_BY_FACE_ERROR_CODE = {
76
- [FACE_ERROR_CODES.FACE_NOT_FOUND]: MANUAL_FACE_UPLOAD_ERROR_KEYS.faceNotFound,
77
- [FACE_ERROR_CODES.MULTIPLE_FACES]: MANUAL_FACE_UPLOAD_ERROR_KEYS.multipleFaces,
78
- [FACE_ERROR_CODES.BAD_PHOTO_QUALITY]: MANUAL_FACE_UPLOAD_ERROR_KEYS.lowQualityImage,
79
- [FACE_ERROR_CODES.SELFIE_IMAGE_LOW_QUALITY]: MANUAL_FACE_UPLOAD_ERROR_KEYS.selfieImageLowQuality,
80
- [FACE_ERROR_CODES.BRIGHTNESS]: MANUAL_FACE_UPLOAD_ERROR_KEYS.brightness,
81
- [FACE_ERROR_CODES.FACE_TOO_DARK]: MANUAL_FACE_UPLOAD_ERROR_KEYS.brightness,
82
- [FACE_ERROR_CODES.LENSES]: MANUAL_FACE_UPLOAD_ERROR_KEYS.lenses,
83
- [FACE_ERROR_CODES.LENSES_DETECTED]: MANUAL_FACE_UPLOAD_ERROR_KEYS.lenses,
84
- [FACE_ERROR_CODES.MASK]: MANUAL_FACE_UPLOAD_ERROR_KEYS.mask,
85
- [FACE_ERROR_CODES.FACE_MASK_DETECTED]: MANUAL_FACE_UPLOAD_ERROR_KEYS.mask,
86
- [FACE_ERROR_CODES.HEAD_COVER]: MANUAL_FACE_UPLOAD_ERROR_KEYS.removeHeadwear,
87
- [FACE_ERROR_CODES.HEAD_COVER_DETECTED]: MANUAL_FACE_UPLOAD_ERROR_KEYS.removeHeadwear,
88
- [FACE_ERROR_CODES.CLOSED_EYES]: MANUAL_FACE_UPLOAD_ERROR_KEYS.closedEyes,
89
- [FACE_ERROR_CODES.CLOSED_EYES_DETECTED]: MANUAL_FACE_UPLOAD_ERROR_KEYS.closedEyes,
90
- [FACE_ERROR_CODES.LIVENESS]: MANUAL_FACE_UPLOAD_ERROR_KEYS.spoof,
91
- [FACE_ERROR_CODES.SPOOF_ATTEMPT_DETECTED]: MANUAL_FACE_UPLOAD_ERROR_KEYS.spoof,
92
- [FACE_ERROR_CODES.FACE_TOO_BLURRY]: MANUAL_FACE_UPLOAD_ERROR_KEYS.spoof,
93
- [FACE_ERROR_CODES.USER_IS_NOT_RECOGNIZED]: MANUAL_FACE_UPLOAD_ERROR_KEYS.accessDenied,
94
- [FACE_ERROR_CODES.NONEXISTENT_CUSTOMER]: MANUAL_FACE_UPLOAD_ERROR_KEYS.nonexistentCustomer,
95
- [FACE_ERROR_CODES.HINT_NOT_PROVIDED]: MANUAL_FACE_UPLOAD_ERROR_KEYS.hintNotProvided
96
- };
97
- function mapFaceErrorCodeToErrorKey(code) {
98
- if (!code) return MANUAL_FACE_UPLOAD_ERROR_KEYS.generic;
99
- return ERROR_KEY_BY_FACE_ERROR_CODE[code] ?? MANUAL_FACE_UPLOAD_ERROR_KEYS.generic;
100
- }
101
- /** Enforced in core because the picker's `accept` filter is bypassable. */
102
- const MANUAL_FACE_UPLOAD_ACCEPTED_MIME_TYPES = ["image/png", "image/jpeg"];
103
- //#endregion
104
- //#region src/internal/faceCapture/manualUpload/prepareFile.ts
105
- const isAcceptedMimeType = (type) => MANUAL_FACE_UPLOAD_ACCEPTED_MIME_TYPES.includes(type);
106
- const stripDataUrlPrefix = (dataUrl) => {
107
- const commaIndex = dataUrl.indexOf(",");
108
- return commaIndex === -1 ? dataUrl : dataUrl.slice(commaIndex + 1);
109
- };
110
- /** Duplicated from the ID manual upload; consolidate if a third caller appears. */
111
- const getBase64PayloadByteLength = (payload) => {
112
- const normalized = payload.replace(/\s/g, "");
113
- let padding = 0;
114
- if (normalized.endsWith("==")) padding = 2;
115
- else if (normalized.endsWith("=")) padding = 1;
116
- return Math.max(0, Math.floor(normalized.length * 3 / 4) - padding);
117
- };
118
- /**
119
- * Every client-side check, run before any network call so a rejection here
120
- * never costs the user a retry.
121
- */
122
- async function prepareManualFaceUpload(file) {
123
- if (!isAcceptedMimeType(file.type)) return {
124
- ok: false,
125
- errorKey: MANUAL_FACE_UPLOAD_ERROR_KEYS.typeError
126
- };
127
- if (file.size > 5242880) return {
128
- ok: false,
129
- errorKey: MANUAL_FACE_UPLOAD_ERROR_KEYS.fileTooBig
130
- };
131
- const base64Image = stripDataUrlPrefix(await imageFileToDataUrl(file));
132
- if (getBase64PayloadByteLength(base64Image) > 5242880) return {
133
- ok: false,
134
- errorKey: MANUAL_FACE_UPLOAD_ERROR_KEYS.fileTooBig
135
- };
136
- return {
137
- ok: true,
138
- base64Image
139
- };
140
- }
141
- //#endregion
142
- //#region src/internal/faceCapture/manualUpload/manualFaceUploadStateMachine.ts
143
- const prepareFileActor = fromPromise(async ({ input }) => prepareManualFaceUpload(input.file));
144
- const getPreparedFromEvent = (event) => "output" in event ? event.output : void 0;
145
- const getErrorMessageFromEvent = (event) => {
146
- const { error } = event;
147
- if (error instanceof Error) return error.message;
148
- return typeof error === "string" ? error : "";
149
- };
150
- const manualFaceUploadMachine = setup({
151
- types: {
152
- context: {},
153
- events: {},
154
- input: {},
155
- output: {}
156
- },
157
- actors: {
158
- prepareFile: prepareFileActor,
159
- uploadFile: fromPromise(async () => {
160
- throw new Error("uploadFile must be provided by variant");
161
- })
162
- },
163
- actions: {
164
- storeSelectedFile: assign(({ event }) => {
165
- if (event.type !== "MANUAL_UPLOAD_FILE_SELECTED") return {};
166
- return {
167
- file: event.file,
168
- errorKey: null,
169
- uploaded: false
170
- };
171
- }),
172
- storePreparedImage: assign(({ event }) => {
173
- const prepared = getPreparedFromEvent(event);
174
- return prepared?.ok ? { base64Image: prepared.base64Image } : {};
175
- }),
176
- setErrorFromPrepare: assign(({ event }) => {
177
- const prepared = getPreparedFromEvent(event);
178
- return { errorKey: prepared && !prepared.ok ? prepared.errorKey : MANUAL_FACE_UPLOAD_ERROR_KEYS.generic };
179
- }),
180
- setGenericError: assign(() => ({ errorKey: MANUAL_FACE_UPLOAD_ERROR_KEYS.generic })),
181
- setErrorFromUploadFailure: assign(({ event }) => ({ errorKey: mapFaceErrorCodeToErrorKey(getErrorMessageFromEvent(event)) })),
182
- markUploaded: assign(() => ({
183
- uploaded: true,
184
- errorKey: null
185
- })),
186
- decrementRetries: assign(({ context }) => ({ retriesLeft: Math.max(0, context.retriesLeft - 1) })),
187
- reset: assign(({ context }) => ({
188
- file: null,
189
- base64Image: null,
190
- uploaded: false,
191
- errorKey: null,
192
- retriesLeft: context.captureAttempts
193
- })),
194
- markSucceeded: assign(() => ({ outcome: "success" })),
195
- markExhausted: assign(() => ({ outcome: "exhausted" }))
196
- },
197
- guards: {
198
- isPrepareRejected: ({ event }) => getPreparedFromEvent(event)?.ok === false,
199
- retriesExhausted: ({ context }) => context.retriesLeft <= 0,
200
- canContinue: ({ context }) => context.uploaded
201
- }
202
- }).createMachine({
203
- id: "manualFaceUpload",
204
- initial: "selecting",
205
- context: ({ input }) => ({
206
- config: input.config,
207
- dependencies: input.dependencies,
208
- captureAttempts: input.captureAttempts,
209
- retriesLeft: input.captureAttempts,
210
- file: null,
211
- base64Image: null,
212
- uploaded: false,
213
- errorKey: null,
214
- outcome: null
215
- }),
216
- output: ({ context }) => ({ result: context.outcome === "success" ? "success" : "exhausted" }),
217
- on: { MANUAL_UPLOAD_RESET: {
218
- target: ".selecting",
219
- actions: ["reset"]
220
- } },
221
- states: {
222
- selecting: { on: {
223
- MANUAL_UPLOAD_FILE_SELECTED: {
224
- target: "preparing",
225
- actions: ["storeSelectedFile"]
226
- },
227
- MANUAL_UPLOAD_CONTINUE: {
228
- guard: "canContinue",
229
- target: "finished",
230
- actions: ["markSucceeded"]
231
- }
232
- } },
233
- preparing: { invoke: {
234
- id: "prepareFile",
235
- src: "prepareFile",
236
- input: ({ context }) => ({ file: context.file }),
237
- onDone: [{
238
- guard: "isPrepareRejected",
239
- target: "selecting",
240
- actions: ["setErrorFromPrepare"]
241
- }, {
242
- target: "uploading",
243
- actions: ["storePreparedImage"]
244
- }],
245
- onError: {
246
- target: "selecting",
247
- actions: ["setGenericError"]
248
- }
249
- } },
250
- uploading: { invoke: {
251
- id: "uploadFile",
252
- src: "uploadFile",
253
- input: ({ context }) => ({
254
- base64Image: context.base64Image,
255
- config: context.config,
256
- dependencies: context.dependencies
257
- }),
258
- onDone: {
259
- target: "selecting",
260
- actions: ["markUploaded"]
261
- },
262
- onError: {
263
- target: "checkRetries",
264
- actions: ["decrementRetries", "setErrorFromUploadFailure"]
265
- }
266
- } },
267
- checkRetries: { always: [{
268
- guard: "retriesExhausted",
269
- target: "exhausted",
270
- actions: ["markExhausted"]
271
- }, { target: "selecting" }] },
272
- exhausted: { type: "final" },
273
- finished: { type: "final" }
274
- }
275
- });
276
- //#endregion
277
47
  //#region ../infra/src/providers/wasm/createProtectedFaceCaptureCapabilities.ts
278
48
  /**
279
49
  * Infrastructure composition boundary for one protected still-face attempt.
@@ -300,111 +70,40 @@ function logFaceCameraDiagnostic(event, fields) {
300
70
  }
301
71
  //#endregion
302
72
  //#region ../infra/src/media/VideoTrimmer.ts
303
- async function getDurationBySeek(videoBlob) {
304
- const video = document.createElement("video");
305
- video.preload = "metadata";
306
- video.src = URL.createObjectURL(videoBlob);
307
- try {
308
- if (!Number.isFinite(video.duration)) {
309
- video.currentTime = Number.MAX_SAFE_INTEGER;
310
- await new Promise((resolve) => {
311
- const onDurationChange = () => {
312
- if (Number.isFinite(video.duration)) {
313
- video.removeEventListener("durationchange", onDurationChange);
314
- video.removeEventListener("timeupdate", onTimeUpdate);
315
- resolve(video.duration);
316
- }
317
- };
318
- const onTimeUpdate = () => {
319
- if (Number.isFinite(video.duration)) {
320
- video.removeEventListener("timeupdate", onTimeUpdate);
321
- video.removeEventListener("durationchange", onDurationChange);
322
- resolve(video.duration);
323
- }
324
- };
325
- video.addEventListener("durationchange", onDurationChange);
326
- video.addEventListener("timeupdate", onTimeUpdate);
327
- });
328
- }
329
- const duration = video.duration;
330
- return Number.isFinite(duration) ? duration : null;
331
- } finally {
332
- URL.revokeObjectURL(video.src);
333
- video.src = "";
334
- }
73
+ /** A trim that runs longer than this uploads the full recording instead. */
74
+ const TRIM_TIMEOUT_MS = 1e4;
75
+ const trimmer = BrowserLazyImportProvider.getInstance().create(() => import("./videoTrimByCopy-BFfAiNpv.esm.js").then((module) => module.trimLastNSecondsByCopy), {
76
+ label: "Video liveness",
77
+ moduleName: "mediabunny",
78
+ timeoutMs: 1e4,
79
+ disabledMessage: "the full recording will be uploaded untrimmed."
80
+ });
81
+ /** Starts loading the trimmer, e.g. when a recording that will be trimmed starts. */
82
+ function preloadVideoTrimmer() {
83
+ trimmer.load();
335
84
  }
336
- async function trimLastNSecondsUsingPlayback(videoBlob, seconds) {
337
- const video = document.createElement("video");
338
- video.preload = "metadata";
339
- video.playsInline = true;
340
- video.muted = true;
341
- const videoURL = URL.createObjectURL(videoBlob);
342
- video.src = videoURL;
343
- const duration = await getDurationBySeek(videoBlob);
344
- if (!duration || duration < seconds) {
345
- URL.revokeObjectURL(videoURL);
85
+ /**
86
+ * Keeps about the last `seconds` of a recording. Never rejects and never
87
+ * hangs: when the trimmer cannot load, fails, or takes longer than
88
+ * {@link TRIM_TIMEOUT_MS}, it resolves the untrimmed recording.
89
+ */
90
+ async function trimLastNSeconds(videoBlob, seconds) {
91
+ const trim = await trimmer.load();
92
+ if (!trim) return videoBlob;
93
+ let timeout;
94
+ try {
95
+ return await Promise.race([trim(videoBlob, seconds), new Promise((resolve) => {
96
+ timeout = setTimeout(() => {
97
+ console.warn("[Video liveness] Trimming timed out; the full recording will be uploaded untrimmed.");
98
+ resolve(videoBlob);
99
+ }, TRIM_TIMEOUT_MS);
100
+ })]);
101
+ } catch (error) {
102
+ console.warn("[Video liveness] Trimming failed; the full recording will be uploaded untrimmed.", error);
346
103
  return videoBlob;
104
+ } finally {
105
+ clearTimeout(timeout);
347
106
  }
348
- const startTime = Math.max(0, Math.floor(duration) - seconds);
349
- await new Promise((resolve) => {
350
- if (video.readyState >= 2) resolve();
351
- else video.addEventListener("loadedmetadata", () => resolve(), { once: true });
352
- });
353
- const canvas = document.createElement("canvas");
354
- canvas.width = 230;
355
- canvas.height = 320;
356
- const captureFps = isAndroid() ? 15 : 24;
357
- const stream = canvas.captureStream(captureFps);
358
- const ctx = canvas.getContext("2d");
359
- video.currentTime = startTime;
360
- await new Promise((resolve) => {
361
- video.addEventListener("seeked", () => resolve(), { once: true });
362
- });
363
- ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
364
- const mimeType = videoBlob.type || (MediaRecorder.isTypeSupported("video/webm") ? "video/webm" : "video/mp4");
365
- const mediaRecorder = new MediaRecorder(stream.clone(), {
366
- mimeType,
367
- videoBitsPerSecond: 5e5,
368
- bitsPerSecond: 5e5
369
- });
370
- const chunks = [];
371
- mediaRecorder.ondataavailable = (event) => {
372
- if (event.data.size > 0) chunks.push(event.data);
373
- };
374
- const recordingPromise = new Promise((resolve) => {
375
- mediaRecorder.onstop = () => {
376
- const trimmedBlob = new Blob(chunks, { type: mimeType });
377
- URL.revokeObjectURL(videoURL);
378
- mediaRecorder.stream?.getTracks().forEach((track) => track.stop());
379
- stream.getTracks().forEach((track) => track.stop());
380
- video.src = "";
381
- resolve(trimmedBlob);
382
- };
383
- });
384
- video.addEventListener("play", () => {
385
- function drawVideo() {
386
- if (video.currentTime >= duration) {
387
- mediaRecorder.stop();
388
- video.pause();
389
- return;
390
- }
391
- ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
392
- requestAnimationFrame(drawVideo);
393
- }
394
- drawVideo();
395
- setTimeout(() => {
396
- mediaRecorder.start(100);
397
- }, 500);
398
- });
399
- video.play().catch(() => {
400
- URL.revokeObjectURL(videoURL);
401
- });
402
- const trimmedBlob = await recordingPromise;
403
- console.timeEnd("trimLastNSecondsUsingPlayback");
404
- return trimmedBlob;
405
- }
406
- async function trimLastNSeconds(videoBlob, seconds) {
407
- return await trimLastNSecondsUsingPlayback(videoBlob, seconds);
408
107
  }
409
108
  //#endregion
410
109
  //#region ../infra/src/providers/browser/LocalRecordingProvider.ts
@@ -419,6 +118,8 @@ function toBase64(videoBlob) {
419
118
  reader.readAsDataURL(videoBlob);
420
119
  });
421
120
  }
121
+ /** `MediaRecorderOptions.videoKeyFrameIntervalDuration`, see `startRecording`. */
122
+ const KEYFRAME_INTERVAL_MS = 1e3;
422
123
  var LocalRecordingProvider = class {
423
124
  constructor() {
424
125
  this.mediaRecorder = null;
@@ -440,12 +141,16 @@ var LocalRecordingProvider = class {
440
141
  }
441
142
  startRecording(stream) {
442
143
  this.reset();
144
+ preloadVideoTrimmer();
443
145
  this.registerEventListeners();
444
146
  this.stream = stream;
445
147
  try {
446
148
  const options = getAdaptiveMediaRecorderOptions();
447
149
  this.mimeType = options.mimeType;
448
- const recorder = new MediaRecorder(stream.clone(), options);
150
+ const recorder = new MediaRecorder(stream.clone(), {
151
+ ...options,
152
+ videoKeyFrameIntervalDuration: KEYFRAME_INTERVAL_MS
153
+ });
449
154
  recorder.onerror = (event) => {
450
155
  this._error = `Recording error: ${event}`;
451
156
  this._isRecording = false;
@@ -925,7 +630,8 @@ var ProtectedFaceAttemptRuntime = class ProtectedFaceAttemptRuntime {
925
630
  faceResults: this.provider
926
631
  };
927
632
  }
928
- createUploadCommand(recordingId) {
633
+ /** `captureType` goes on the selfie upload only, never on authentication or face-results. */
634
+ createUploadCommand(recordingId, captureType) {
929
635
  const token = getToken();
930
636
  const config = {
931
637
  headers: token ? { "X-Incode-Hardware-Id": token } : void 0,
@@ -957,6 +663,7 @@ var ProtectedFaceAttemptRuntime = class ProtectedFaceAttemptRuntime {
957
663
  ...config,
958
664
  params: {
959
665
  imageType: "selfie",
666
+ captureType,
960
667
  ...validRecordingId ? { recordingId: validRecordingId } : {}
961
668
  }
962
669
  }
@@ -1137,6 +844,7 @@ function createProtectedFaceControllerActor(options) {
1137
844
  let lifecycleCleanup;
1138
845
  let sendLifecycle;
1139
846
  let committedPreview;
847
+ let manualCommitted = false;
1140
848
  let pendingAutoPreview;
1141
849
  let recording = {};
1142
850
  let stepRecording;
@@ -1225,6 +933,7 @@ function createProtectedFaceControllerActor(options) {
1225
933
  };
1226
934
  const releaseCurrent = (reason) => {
1227
935
  logDiagnostic("attempt-release", { releaseReason: reason });
936
+ noteTrueSightCaptureActivity(false);
1228
937
  diagnosticStartedAt = void 0;
1229
938
  generation += 1;
1230
939
  signalCleanup?.();
@@ -1328,10 +1037,12 @@ function createProtectedFaceControllerActor(options) {
1328
1037
  case "PROTECTED_MANUAL_COMMITTED":
1329
1038
  logDiagnostic("capture-selected", { captureKind: event.type === "PROTECTED_AUTO_COMMITTED" ? "auto" : "manual" });
1330
1039
  committedPreview = event.preview;
1040
+ manualCommitted ||= event.type === "PROTECTED_MANUAL_COMMITTED";
1331
1041
  sendBack(event);
1332
1042
  return;
1333
1043
  case "PROTECTED_ATTEMPT_FINALIZED":
1334
1044
  logDiagnostic("attempt-finalized");
1045
+ noteTrueSightCaptureActivity(false);
1335
1046
  recording = event.recording;
1336
1047
  sendBack(event);
1337
1048
  return;
@@ -1359,6 +1070,7 @@ function createProtectedFaceControllerActor(options) {
1359
1070
  failureStage: event.failure.stage,
1360
1071
  failureCode: event.failure.code
1361
1072
  });
1073
+ noteTrueSightCaptureActivity(false);
1362
1074
  sendBack(event);
1363
1075
  return;
1364
1076
  default: sendBack(event);
@@ -1373,10 +1085,12 @@ function createProtectedFaceControllerActor(options) {
1373
1085
  diagnosticAttempt += 1;
1374
1086
  diagnosticStartedAt = getTimestamp();
1375
1087
  logDiagnostic("attempt-start");
1088
+ noteTrueSightCaptureActivity(true);
1376
1089
  const ownerGeneration = generation;
1377
1090
  signalCleanup = owner.subscribeSignals((signal) => {
1378
1091
  if (!active || runtime !== owner || generation !== ownerGeneration) return;
1379
1092
  if (signal.type === "detection") {
1093
+ trueSightHintTransition("module.face-capture", "faceScan", signal.status);
1380
1094
  sendBack({
1381
1095
  type: "DETECTION_UPDATE",
1382
1096
  status: signal.status
@@ -1443,7 +1157,7 @@ function createProtectedFaceControllerActor(options) {
1443
1157
  if (!owner) return;
1444
1158
  logDiagnostic("upload-start");
1445
1159
  if (options.delivery === "protected") {
1446
- sendLifecycle?.(owner.createUploadCommand(recording.recordingId));
1160
+ sendLifecycle?.(owner.createUploadCommand(recording.recordingId, manualCommitted ? "MANUAL" : "AUTO"));
1447
1161
  return;
1448
1162
  }
1449
1163
  finalizeLocalCapture(owner, generation).catch(() => {
@@ -1559,7 +1273,6 @@ const faceCaptureMachine = setup({
1559
1273
  handle?.stop();
1560
1274
  };
1561
1275
  }),
1562
- manualUploadMachine: manualFaceUploadMachine,
1563
1276
  prepareFaceUpload: fromPromise(async () => {
1564
1277
  throw new Error("prepareFaceUpload must be provided by variant");
1565
1278
  }),
@@ -1602,6 +1315,7 @@ const faceCaptureMachine = setup({
1602
1315
  permissionResult: void 0,
1603
1316
  deepsightReady: false,
1604
1317
  manualCaptureTriggered: false,
1318
+ retainManualMode: false,
1605
1319
  captureOnlyResult: void 0,
1606
1320
  avatarCanvas: void 0
1607
1321
  };
@@ -1630,7 +1344,12 @@ const faceCaptureMachine = setup({
1630
1344
  setDeepsightNotReady: assign({ deepsightReady: () => false }),
1631
1345
  setErrorFromEvent: assign({ error: ({ event }) => String(event.error) }),
1632
1346
  setDetectionStatusDetecting: assign({ detectionStatus: ({ context }) => context.manualCaptureTriggered ? "manualCapture" : "detecting" }),
1633
- setDetectionStatusFromEvent: assign({ detectionStatus: ({ event }) => event.status }),
1347
+ setDetectionStatusFromEvent: assign({ detectionStatus: ({ context, event }) => {
1348
+ const status = event.status;
1349
+ if (context.retainManualMode && status !== "offline") return "manualCapture";
1350
+ return status;
1351
+ } }),
1352
+ retainManualModeForRetry: assign({ retainManualMode: ({ context }) => context.manualCaptureTriggered && context.config.onDeviceFaceResultsSubmissionEnabled !== true }),
1634
1353
  setManualCaptureTriggered: assign({ manualCaptureTriggered: ({ context, event }) => {
1635
1354
  const status = event.status;
1636
1355
  return context.manualCaptureTriggered || status === "manualCapture";
@@ -1664,10 +1383,13 @@ const faceCaptureMachine = setup({
1664
1383
  }),
1665
1384
  setUploadResponseFromEvent: assign({ uploadResponse: ({ event }) => event.output }),
1666
1385
  setProcessResponseFromEvent: assign({ processResponse: ({ event }) => event.output }),
1667
- setServerErrorAndDecrement: assign(({ context }) => ({
1668
- uploadError: FACE_ERROR_CODES.SERVER,
1669
- attemptsRemaining: context.attemptsRemaining - 1
1670
- })),
1386
+ setUploadFailureAndDecrement: assign(({ context, event }) => {
1387
+ const { httpStatus, responseStatus } = event.failure;
1388
+ return {
1389
+ uploadError: httpStatus === void 0 ? FACE_ERROR_CODES.SERVER : getFaceUploadErrorCode(httpStatus, responseStatus),
1390
+ attemptsRemaining: context.attemptsRemaining - 1
1391
+ };
1392
+ }),
1671
1393
  sendLabelInspection: () => {
1672
1394
  sendLabelInspectionEvent();
1673
1395
  },
@@ -1686,7 +1408,6 @@ const faceCaptureMachine = setup({
1686
1408
  releaseFaceAvatarWarmup();
1687
1409
  },
1688
1410
  noOp: () => void 0,
1689
- forwardToManualUpload: sendTo("manualUpload", ({ event }) => event),
1690
1411
  sendProtectedPreAcquire: enqueueActions(({ enqueue, self }) => {
1691
1412
  if (!isProtectedFaceControllerRunning(self)) return;
1692
1413
  enqueue.sendTo("protectedFaceController", { type: "PRE_ACQUIRE" });
@@ -1744,8 +1465,6 @@ const faceCaptureMachine = setup({
1744
1465
  guards: {
1745
1466
  hasShowTutorial: ({ context }) => context.config.showTutorial,
1746
1467
  hasAgeAssurance: ({ context }) => context.config.ageAssurance === true,
1747
- hasManualUploadEnabled: () => false,
1748
- isManualUploadExhausted: ({ event }) => event.output?.result === "exhausted",
1749
1468
  isPermissionGranted: ({ event }) => {
1750
1469
  if ("output" in event) return event.output === "granted";
1751
1470
  return false;
@@ -1767,6 +1486,7 @@ const faceCaptureMachine = setup({
1767
1486
  isCameraAndDeepsightReady: ({ context }) => context.stream !== void 0 && context.deepsightReady,
1768
1487
  hasAttemptsRemaining: ({ context }) => context.attemptsRemaining > 0,
1769
1488
  hasCapturedImage: ({ context }) => context.capturedImage !== void 0,
1489
+ isAutoCaptureAllowed: ({ context }) => !context.retainManualMode,
1770
1490
  canCommitProtectedManual: ({ context }) => context.manualCaptureTriggered && context.config.onDeviceFaceResultsSubmissionEnabled !== true,
1771
1491
  isProtectedManualRefusal: ({ event }) => event.failure.stage === "manualCommit",
1772
1492
  isProtectedUploadFailure: ({ event }) => event.failure.stage === "upload",
@@ -1797,6 +1517,7 @@ const faceCaptureMachine = setup({
1797
1517
  encryptedBase64Image: void 0,
1798
1518
  uploadRecordingId: void 0,
1799
1519
  manualCaptureTriggered: false,
1520
+ retainManualMode: false,
1800
1521
  captureOnlyResult: void 0,
1801
1522
  avatarCanvas: void 0,
1802
1523
  faceFeed: void 0,
@@ -1842,10 +1563,6 @@ const faceCaptureMachine = setup({
1842
1563
  tutorial: {
1843
1564
  initial: "checkingPermission",
1844
1565
  entry: ["trackTutorial", "warmAvatarProvider"],
1845
- on: { GO_TO_MANUAL_UPLOAD: {
1846
- guard: "hasManualUploadEnabled",
1847
- target: "#faceCapture.manualUpload"
1848
- } },
1849
1566
  states: {
1850
1567
  checkingPermission: { invoke: {
1851
1568
  id: "checkPermissionTutorial",
@@ -1928,9 +1645,23 @@ const faceCaptureMachine = setup({
1928
1645
  PROTECTED_DEEPSIGHT_FAILED: {
1929
1646
  target: "readyForNext",
1930
1647
  actions: "setDeepsightNotReady"
1648
+ },
1649
+ NEXT_STEP: {
1650
+ target: "continuing",
1651
+ actions: "trackContinue"
1931
1652
  }
1932
1653
  }
1933
1654
  },
1655
+ continuing: { on: {
1656
+ PROTECTED_DEEPSIGHT_READY: {
1657
+ target: "#faceCapture.tutorial.waitingForPermission",
1658
+ actions: "setDeepsightReady"
1659
+ },
1660
+ PROTECTED_DEEPSIGHT_FAILED: {
1661
+ target: "#faceCapture.tutorial.waitingForPermission",
1662
+ actions: "setDeepsightNotReady"
1663
+ }
1664
+ } },
1934
1665
  readyForNext: { on: { NEXT_STEP: {
1935
1666
  target: "#faceCapture.tutorial.waitingForPermission",
1936
1667
  actions: "trackContinue"
@@ -2076,7 +1807,7 @@ const faceCaptureMachine = setup({
2076
1807
  {
2077
1808
  target: ".uploadError",
2078
1809
  guard: "isProtectedUploadFailure",
2079
- actions: "setServerErrorAndDecrement"
1810
+ actions: "setUploadFailureAndDecrement"
2080
1811
  },
2081
1812
  {
2082
1813
  target: "#faceCapture.error",
@@ -2098,8 +1829,11 @@ const faceCaptureMachine = setup({
2098
1829
  actions: "setDeepsightReady"
2099
1830
  },
2100
1831
  PROTECTED_DEEPSIGHT_FAILED: {
2101
- target: "#faceCapture.permissions",
2102
- actions: "setDeepsightNotReady"
1832
+ target: "#faceCapture.error",
1833
+ actions: assign({
1834
+ deepsightReady: () => false,
1835
+ error: () => "Deepsight initialization failed"
1836
+ })
2103
1837
  }
2104
1838
  }
2105
1839
  },
@@ -2123,7 +1857,10 @@ const faceCaptureMachine = setup({
2123
1857
  on: {
2124
1858
  DETECTION_UPDATE: { actions: ["setDetectionStatusFromEvent", "setManualCaptureTriggered"] },
2125
1859
  AVATAR_READY: { actions: "setAvatarCanvas" },
2126
- PROTECTED_NATIVE_AUTO_CAPTURE: { actions: "sendProtectedAutoCapture" },
1860
+ PROTECTED_NATIVE_AUTO_CAPTURE: {
1861
+ guard: "isAutoCaptureAllowed",
1862
+ actions: "sendProtectedAutoCapture"
1863
+ },
2127
1864
  PROTECTED_AUTO_COMMITTED: {
2128
1865
  target: "capturing",
2129
1866
  actions: "setProtectedCommittedPreview"
@@ -2182,6 +1919,7 @@ const faceCaptureMachine = setup({
2182
1919
  reenter: true,
2183
1920
  guard: "hasAttemptsRemaining",
2184
1921
  actions: [
1922
+ "retainManualModeForRetry",
2185
1923
  "clearUploadFailure",
2186
1924
  "setDeepsightNotReady",
2187
1925
  "resetProtectedController",
@@ -2204,36 +1942,6 @@ const faceCaptureMachine = setup({
2204
1942
  }
2205
1943
  }
2206
1944
  },
2207
- manualUpload: {
2208
- entry: [
2209
- "releaseProtectedAttempt",
2210
- "stopMediaStream",
2211
- "releaseAvatarWarmup"
2212
- ],
2213
- invoke: {
2214
- id: "manualUpload",
2215
- src: "manualUploadMachine",
2216
- input: ({ context }) => ({
2217
- config: context.config,
2218
- dependencies: context.dependencies,
2219
- captureAttempts: getAttemptsFromConfig(context.config)
2220
- }),
2221
- onSnapshot: { actions: "noOp" },
2222
- onDone: [{
2223
- guard: "isManualUploadExhausted",
2224
- target: "terminalProcessing"
2225
- }, { target: "processing" }],
2226
- onError: {
2227
- target: "error",
2228
- actions: "setErrorFromEvent"
2229
- }
2230
- },
2231
- on: {
2232
- MANUAL_UPLOAD_FILE_SELECTED: { actions: "forwardToManualUpload" },
2233
- MANUAL_UPLOAD_CONTINUE: { actions: "forwardToManualUpload" },
2234
- MANUAL_UPLOAD_RESET: { actions: "forwardToManualUpload" }
2235
- }
2236
- },
2237
1945
  processing: { invoke: {
2238
1946
  id: "processFace",
2239
1947
  src: "processFace",
@@ -2287,4 +1995,4 @@ const faceCaptureMachine = setup({
2287
1995
  }
2288
1996
  });
2289
1997
  //#endregion
2290
- export { concealmentToAvatar as i, createDefaultProtectedFaceControllerActor as n, manualFaceUploadMachine as r, faceCaptureMachine as t };
1998
+ export { createDefaultProtectedFaceControllerActor as n, concealmentToAvatar as r, faceCaptureMachine as t };