@incodetech/core 2.3.2 → 2.4.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) 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-BL9wIRnN.d.ts} +2 -2
  4. package/dist/{FaceDetectionProvider-DtmtCKa9.esm.js → FaceDetectionProvider-BjTer9h3.esm.js} +126 -10
  5. package/dist/HttpRequestError-Bh0pNGSC.esm.js +35 -0
  6. package/dist/{IIdCaptureCapability-RNiFhvXR.d.ts → IIdCaptureCapability-DBsv9-7M.d.ts} +2 -2
  7. package/dist/{IWasmUtilCapability-CNWRl7jr.d.ts → IWasmUtilCapability-CPX0RGdQ.d.ts} +28 -5
  8. package/dist/{Manager-CQQ99QOI.d.ts → Manager-C9T5amUN.d.ts} +7 -1
  9. package/dist/{MotionSensorProvider-DyhbM4Si.esm.js → MotionSensorProvider-DYxh8TjR.esm.js} +1 -1
  10. package/dist/{ekycStateMachine-UeJRO8_p.esm.js → PhoneValidationProvider-SZiOS0jB.esm.js} +232 -827
  11. package/dist/{StreamCanvasCapture-_8gdW5Lk.d.ts → StreamCanvasCapture-DVmzJux5.d.ts} +2 -2
  12. package/dist/{safeStorage-BdU9_m2E.esm.js → WasmUtilProvider-CIdnE7Fx.esm.js} +95 -46
  13. package/dist/{addressSearch-DyHGgeX8.esm.js → addressSearch-BiYZjvp3.esm.js} +143 -4
  14. package/dist/{advanceableErrors-CpF2cBy6.esm.js → advanceableErrors-q_pfU3Cn.esm.js} +5 -4
  15. package/dist/ae-signature.d.ts +2 -2
  16. package/dist/ae-signature.esm.js +1 -1
  17. package/dist/antifraud.d.ts +1 -1
  18. package/dist/antifraud.esm.js +2 -2
  19. package/dist/{antifraudManager-BY36bS12.d.ts → antifraudManager-DbGCvlJs.d.ts} +2 -2
  20. package/dist/{antifraudManager-DNkw66oW.esm.js → antifraudManager-HL08jeDX.esm.js} +3 -3
  21. package/dist/{antifraudStateMachine-DBeq47D2.esm.js → antifraudStateMachine-DoJVzblM.esm.js} +3 -3
  22. package/dist/{apiError-CmGEmaGU.esm.js → apiError-DcSWedC6.esm.js} +2 -1
  23. package/dist/authentication.d.ts +3 -3
  24. package/dist/authentication.esm.js +2 -2
  25. package/dist/{authenticationManager-CboRCl_N.d.ts → authenticationManager-CANv5-W5.d.ts} +2 -8
  26. package/dist/{authenticationManager-BFjSjtQ_.esm.js → authenticationManager-SaiAxqvS.esm.js} +6 -6
  27. package/dist/{authenticationStateMachine-Dfo34ZiI.esm.js → authenticationStateMachine-CHSxmV7z.esm.js} +5 -6
  28. package/dist/avatar.d.ts +1 -1
  29. package/dist/{backCameraStream-B0-YgP_y.esm.js → backCameraStream-CMvXj4X4.esm.js} +1 -1
  30. package/dist/camera.esm.js +1 -1
  31. package/dist/certificate-issuance.d.ts +1 -1
  32. package/dist/certificate-issuance.esm.js +2 -2
  33. package/dist/{certificateIssuanceManager-C3-CI0_s.esm.js → certificateIssuanceManager-CMg4SgL4.esm.js} +3 -3
  34. package/dist/{certificateIssuanceManager-DCgEidHz.d.ts → certificateIssuanceManager-Dr8A4Lgr.d.ts} +2 -3
  35. package/dist/{certificateIssuanceStateMachine-CxqS_nD-.esm.js → certificateIssuanceStateMachine-Cs64QmYH.esm.js} +4 -4
  36. package/dist/consent.d.ts +1 -1
  37. package/dist/consent.esm.js +2 -2
  38. package/dist/{consentManager-B6E1XJDw.esm.js → consentManager-CjrxY737.esm.js} +3 -3
  39. package/dist/{consentManager-2h_w6wFc.d.ts → consentManager-DgzWQpAR.d.ts} +6 -7
  40. package/dist/{consentStateMachine-DTSfdGiW.esm.js → consentStateMachine-BCj5Jb3g.esm.js} +3 -3
  41. package/dist/{createCameraCycleOwnership-DnwTl1ad.esm.js → createCameraCycleOwnership-kdlhkmmY.esm.js} +71 -65
  42. package/dist/{createFaceAvatar-BlcTYgJv.d.ts → createFaceAvatar-DXgmQmQy.d.ts} +1 -1
  43. package/dist/cross-document-data-match.d.ts +1 -1
  44. package/dist/cross-document-data-match.esm.js +1 -1
  45. package/dist/{crossDocumentDataMatchManager-9XhFVZ5S.esm.js → crossDocumentDataMatchManager-BHnGRsto.esm.js} +4 -4
  46. package/dist/{crossDocumentDataMatchManager-Dq8Z3SOg.d.ts → crossDocumentDataMatchManager-yCWCOzcU.d.ts} +2 -2
  47. package/dist/curp-validation.d.ts +1 -1
  48. package/dist/curp-validation.esm.js +2 -2
  49. package/dist/{curpValidationManager-DNuZn9fn.d.ts → curpValidationManager-B-1EZbP_.d.ts} +3 -3
  50. package/dist/{curpValidationManager-DbIMYFcJ.esm.js → curpValidationManager-DBNIn8BF.esm.js} +15 -22
  51. package/dist/{curpValidationStateMachine-g5kMfuLj.esm.js → curpValidationStateMachine-DAxImy8p.esm.js} +4 -4
  52. package/dist/custom-fields.d.ts +1 -1
  53. package/dist/custom-fields.esm.js +1 -1
  54. package/dist/custom-watchlist.d.ts +1 -1
  55. package/dist/custom-watchlist.esm.js +2 -2
  56. package/dist/{customFieldsManager-CzWZTkW-.esm.js → customFieldsManager-BV6UyLFV.esm.js} +4 -4
  57. package/dist/{customFieldsManager-8-W2KY4n.d.ts → customFieldsManager-CF-cO8ap.d.ts} +2 -2
  58. package/dist/{customWatchlistManager-DWTED5Ur.esm.js → customWatchlistManager-DML0UPzf.esm.js} +3 -3
  59. package/dist/{customWatchlistManager-PBWHr_oM.d.ts → customWatchlistManager-DolUswyR.d.ts} +2 -2
  60. package/dist/{customWatchlistStateMachine-DOQou6TW.esm.js → customWatchlistStateMachine-D9gI5uu7.esm.js} +3 -3
  61. package/dist/deepsightLoader-DvfAYnzg.esm.js +55 -0
  62. package/dist/{deepsightLoader-v-dLejS-.esm.js → deepsightService-DLGO9yv1.esm.js} +51 -56
  63. package/dist/device.esm.js +1 -1
  64. package/dist/document-capture.d.ts +2 -2
  65. package/dist/document-capture.esm.js +2 -2
  66. package/dist/{documentCaptureManager-BRPxqYD2.esm.js → documentCaptureManager-C9XUnYU6.esm.js} +17 -18
  67. package/dist/{documentCaptureManager-lEtCM320.d.ts → documentCaptureManager-DkyDtm3Y.d.ts} +11 -34
  68. package/dist/{documentCaptureStateMachine-D312sSIu.esm.js → documentCaptureStateMachine-BHDsCfhL.esm.js} +55 -58
  69. package/dist/dynamic-forms.d.ts +2 -2
  70. package/dist/dynamic-forms.esm.js +2 -2
  71. package/dist/{dynamicFormsManager-C-9Jhnd3.esm.js → dynamicFormsManager-5uIXobxi.esm.js} +3 -3
  72. package/dist/{dynamicFormsManager-D5R_uxLQ.d.ts → dynamicFormsManager-C0dHs1ty.d.ts} +3 -3
  73. package/dist/{dynamicFormsStateMachine-DGI_F2PP.esm.js → dynamicFormsStateMachine-DQmok084.esm.js} +4 -4
  74. package/dist/ekyb.d.ts +5 -5
  75. package/dist/ekyb.esm.js +3 -3
  76. package/dist/{ekybManager-BwRuGAwt.d.ts → ekybManager-BaZ_7CEu.d.ts} +4 -4
  77. package/dist/{ekybManager-DeoMcZEz.esm.js → ekybManager-CazShiQz.esm.js} +23 -27
  78. package/dist/{ekybStateMachine-D1IJ1Z72.esm.js → ekybStateMachine-hstiCNmW.esm.js} +338 -13
  79. package/dist/ekyc.d.ts +2 -2
  80. package/dist/ekyc.esm.js +3 -3
  81. package/dist/{ekycManager-BX2d46FY.esm.js → ekycManager-BdJRUsz0.esm.js} +29 -36
  82. package/dist/{ekycManager-DLzDuBzI.d.ts → ekycManager-DW-ynodd.d.ts} +3 -3
  83. package/dist/ekycStateMachine-x6Klot8g.esm.js +1444 -0
  84. package/dist/{ekycUtils-D6wfSpPN.esm.js → ekycUtils-zY8CdKJL.esm.js} +53 -3
  85. package/dist/electronic-signature.d.ts +1 -1
  86. package/dist/electronic-signature.esm.js +1 -1
  87. package/dist/{electronicSignatureManager-yYUc30na.esm.js → electronicSignatureManager-Bc8spG8p.esm.js} +10 -10
  88. package/dist/{electronicSignatureManager-Ds-KEVTq.d.ts → electronicSignatureManager-DTSLOvKR.d.ts} +2 -3
  89. package/dist/email.d.ts +1 -1
  90. package/dist/email.esm.js +2 -2
  91. package/dist/{emailManager-bR1N5rV_.esm.js → emailManager-CtlKRRaR.esm.js} +20 -26
  92. package/dist/{emailManager-CADXW_9X.d.ts → emailManager-Dy6omJVp.d.ts} +2 -2
  93. package/dist/{emailStateMachine-Bc_6oIYw.esm.js → emailStateMachine-5Neq3rE5.esm.js} +4 -4
  94. package/dist/{endpoints-B-3Q-LUw.esm.js → endpoints-DHzlkQNe.esm.js} +2 -0
  95. package/dist/{events-ijlbX_Wx.esm.js → events-CAgFE-k3.esm.js} +19 -7
  96. package/dist/events.d.ts +3 -2
  97. package/dist/events.esm.js +1 -1
  98. package/dist/extensibility.d.ts +38 -38
  99. package/dist/extensibility.esm.js +36 -36
  100. package/dist/{externalFetch-BKBThAUC.esm.js → externalFetch-DrR9xshk.esm.js} +3 -2
  101. package/dist/face-match.d.ts +1 -1
  102. package/dist/face-match.esm.js +2 -2
  103. package/dist/{faceCaptureManagerFactory-m-7ae67q.d.ts → faceCaptureManagerFactory-jKQ2QtY-.d.ts} +11 -51
  104. package/dist/{faceCaptureManagerFactory-B6i9QcAk.esm.js → faceCaptureManagerFactory-uFm1AcaY.esm.js} +19 -54
  105. package/dist/{faceCaptureSetup-DU1mjRr6.esm.js → faceCaptureSetup-Cu2wabzo.esm.js} +99 -395
  106. package/dist/{faceMatchManager-Bmv0HzuY.esm.js → faceMatchManager-9Nj9aPci.esm.js} +3 -3
  107. package/dist/{faceMatchManager-BnvrZM2F.d.ts → faceMatchManager-DIgG-UFS.d.ts} +1 -2
  108. package/dist/{faceMatchStateMachine-mRIHQ3dA.esm.js → faceMatchStateMachine-B9ZUnlyU.esm.js} +6 -4
  109. package/dist/{feature-management-C8CuN0os.esm.js → feature-management-BTbYruNe.esm.js} +3 -3
  110. package/dist/feature-management.esm.js +1 -1
  111. package/dist/field-comparison.d.ts +2 -2
  112. package/dist/field-comparison.esm.js +1 -1
  113. package/dist/{fieldComparisonManager-CBvEGxFx.d.ts → fieldComparisonManager-CUX4gza2.d.ts} +6 -3
  114. package/dist/{fieldComparisonManager-CC-klG0h.esm.js → fieldComparisonManager-Dk38hXZP.esm.js} +35 -17
  115. package/dist/fiscal-qr.d.ts +1 -1
  116. package/dist/fiscal-qr.esm.js +1 -1
  117. package/dist/{fiscalQrManager-B1STmT6z.d.ts → fiscalQrManager-D0Iy7EKR.d.ts} +2 -2
  118. package/dist/fiscalQrManager-DmBkQfs0.esm.js +6798 -0
  119. package/dist/flow-events.d.ts +1 -1
  120. package/dist/flow.d.ts +14 -13
  121. package/dist/flow.esm.js +14 -14
  122. package/dist/{flowCompletionService-DccgtDnm.esm.js → flowCompletionService-xnn_SlJU.esm.js} +2 -2
  123. package/dist/{flowServices-CdsWsppG.esm.js → flowServices-DA64AEZC.esm.js} +11 -7
  124. package/dist/geolocation.d.ts +1 -1
  125. package/dist/geolocation.esm.js +2 -2
  126. package/dist/{geolocationManager-CGHBxtMb.esm.js → geolocationManager-CqNLY45e.esm.js} +6 -7
  127. package/dist/{geolocationManager-Cz744E5S.d.ts → geolocationManager-Dn24g1fl.d.ts} +2 -3
  128. package/dist/{geolocationStateMachine-CdEb1Gn0.esm.js → geolocationStateMachine-D-cQi7ar.esm.js} +4 -4
  129. package/dist/{getDeviceClass-5NYZg9s6.esm.js → getDeviceClass-bsWdEDxP.esm.js} +1 -1
  130. package/dist/{getParsedUserAgent-B2iFDql1.esm.js → getParsedUserAgent-DhQPeKqw.esm.js} +1 -1
  131. package/dist/government-validation.d.ts +1 -1
  132. package/dist/government-validation.esm.js +2 -2
  133. package/dist/{governmentValidationManager-D02vT4yY.d.ts → governmentValidationManager-B82zOut8.d.ts} +3 -3
  134. package/dist/{governmentValidationManager-CacFOtKO.esm.js → governmentValidationManager-CP0SiOOe.esm.js} +3 -3
  135. package/dist/{governmentValidationStateMachine-CoaZOSTP.esm.js → governmentValidationStateMachine-C3YQ8yCZ.esm.js} +3 -3
  136. package/dist/home.d.ts +3 -26
  137. package/dist/home.esm.js +2 -2
  138. package/dist/id-ocr.d.ts +1 -1
  139. package/dist/id-ocr.esm.js +2 -2
  140. package/dist/id-selfie-flow.d.ts +6 -9
  141. package/dist/id-selfie-flow.esm.js +23 -28
  142. package/dist/id-verification.d.ts +1 -1
  143. package/dist/id-verification.esm.js +2 -2
  144. package/dist/id.d.ts +4 -4
  145. package/dist/id.esm.js +4 -205
  146. package/dist/{idCaptureDefaults-Dl64Trv5.esm.js → idCaptureDefaults-CBg73RnV.esm.js} +8 -5
  147. package/dist/{idCaptureManager-BHwL2Z0V.d.ts → idCaptureManager-BY97SRCV.d.ts} +242 -98
  148. package/dist/{idCaptureManager-BNmVJQkd.esm.js → idCaptureManager-D4V8vXtY.esm.js} +276 -210
  149. package/dist/{idCaptureServices-dtDG2HXS.esm.js → idCaptureServices-DJ33k3-p.esm.js} +21 -39
  150. package/dist/{idCaptureStateMachine-BbiZD3uf.esm.js → idCaptureStateMachine-PJt0yzom.esm.js} +989 -872
  151. package/dist/{idOcrManager-CFlDwUvN.d.ts → idOcrManager-BTdHlJ9D.d.ts} +2 -3
  152. package/dist/{idOcrManager-ByWuQ4ej.esm.js → idOcrManager-DxoCesYP.esm.js} +3 -3
  153. package/dist/{idOcrStateMachine-Bt_abXQQ.esm.js → idOcrStateMachine-kPn7DB2I.esm.js} +3 -3
  154. package/dist/{idVerificationManager-BB4Pj_N6.d.ts → idVerificationManager-BJapZfpy.d.ts} +2 -3
  155. package/dist/{idVerificationManager-DT42c77H.esm.js → idVerificationManager-CDhRUU5n.esm.js} +3 -3
  156. package/dist/{idVerificationStateMachine-DbDVIh9t.esm.js → idVerificationStateMachine-0HTVVxse.esm.js} +3 -3
  157. package/dist/identity-reuse.d.ts +2 -2
  158. package/dist/identity-reuse.esm.js +2 -2
  159. package/dist/{identityReuseManager-yG3acUrQ.esm.js → identityReuseManager-BleUi6TK.esm.js} +26 -13
  160. package/dist/{identityReuseManager-BXEBBI3N.d.ts → identityReuseManager-ooAbp6Kc.d.ts} +164 -46
  161. package/dist/{identityReuseStateMachine-BhAkuIra.esm.js → identityReuseStateMachine-BrBUpfn5.esm.js} +89 -23
  162. package/dist/{index-CeaC32qI.d.ts → index-DfEuu-Ew.d.ts} +2 -2
  163. package/dist/index-DpTj5PFb.d.ts +1 -0
  164. package/dist/index.d.ts +1 -1
  165. package/dist/index.esm.js +1 -1
  166. package/dist/{invokeOnCaptureCallback-BjzPjJ_p.esm.js → invokeOnCaptureCallback-BW7V3vub.esm.js} +1 -1
  167. package/dist/lamejs-B6TzhU5q.esm.js +10 -0
  168. package/dist/mandatory-consent.d.ts +2 -2
  169. package/dist/mandatory-consent.esm.js +2 -2
  170. package/dist/{mandatoryConsentManager-7dI0D08q.esm.js → mandatoryConsentManager-CX_Dyht7.esm.js} +3 -3
  171. package/dist/{mandatoryConsentManager-DFVm_i2B.d.ts → mandatoryConsentManager-TkX57U6f.d.ts} +3 -4
  172. package/dist/{mandatoryConsentStateMachine-DC5Mo6M1.esm.js → mandatoryConsentStateMachine-CoaSB7P7.esm.js} +3 -3
  173. package/dist/{multipartRecordingService-mwKFTlhR.esm.js → multipartRecordingService-DbeQpXdU.esm.js} +2 -2
  174. package/dist/{permissionGuards-D6TfVop2.esm.js → permissionGuards-Bf4LbHjC.esm.js} +1 -1
  175. package/dist/{permissionServices-EY3_Vx6c.esm.js → permissionServices-d2UW0r_L.esm.js} +34 -3
  176. package/dist/phone-number.d.ts +24 -0
  177. package/dist/phone-number.esm.js +1922 -0
  178. package/dist/phone.d.ts +1 -1
  179. package/dist/phone.esm.js +2 -2
  180. package/dist/{phoneManager-IjhSv5XS.esm.js → phoneManager-BGBcpqsk.esm.js} +31 -22
  181. package/dist/{phoneManager-BBU8Lq0O.d.ts → phoneManager-BO-LTih5.d.ts} +16 -3
  182. package/dist/{phoneStateMachine-CXdXufKg.esm.js → phoneStateMachine-CEm2y7yG.esm.js} +39 -20
  183. package/dist/phoneValidation-DnBcNUNh.esm.js +48 -0
  184. package/dist/qe-signature.d.ts +2 -2
  185. package/dist/qe-signature.esm.js +1 -1
  186. package/dist/redirect-to-mobile.d.ts +1 -1
  187. package/dist/redirect-to-mobile.esm.js +2 -2
  188. package/dist/{redirectToMobileManager-FLEWJtv8.esm.js → redirectToMobileManager-B1yQHFLu.esm.js} +4 -4
  189. package/dist/{redirectToMobileManager-BD2PvT5B.d.ts → redirectToMobileManager-CVsvpVbQ.d.ts} +2 -2
  190. package/dist/{redirectToMobileStateMachine-CSWWgUTO.esm.js → redirectToMobileStateMachine--Sr9NEVT.esm.js} +5 -5
  191. package/dist/{rolldown-runtime-FDOR9p9I.esm.js → rolldown-runtime-B-1-B7_t.esm.js} +10 -1
  192. package/dist/{runChildModule-B2Y_hlix.esm.js → runChildModule-vdxQMCmO.esm.js} +13 -12
  193. package/dist/safeStorage-UxDrnjwa.esm.js +35 -0
  194. package/dist/{sdkVersion-N1UiyFiY.esm.js → sdkVersion-F5YZbjip.esm.js} +1 -1
  195. package/dist/selfie.d.ts +4 -4
  196. package/dist/selfie.esm.js +12 -12
  197. package/dist/selfieErrorUtils-D-tsgEuX.esm.js +21 -0
  198. package/dist/{selfieManager-BSZG891S.d.ts → selfieManager-1J0IEyFq.d.ts} +2 -8
  199. package/dist/{selfieManager-AS6wfUvZ.esm.js → selfieManager-26pENXxw.esm.js} +6 -6
  200. package/dist/selfieStateMachine-BhfKsl3I.esm.js +41 -0
  201. package/dist/{session-BESZc05k.esm.js → session-Bu7djCsj.esm.js} +5 -5
  202. package/dist/session.d.ts +15 -3
  203. package/dist/session.esm.js +30 -5
  204. package/dist/sessionInitializer-jxbfCnE-.esm.js +974 -0
  205. package/dist/{setup-BuPbxpwF.esm.js → setup-C38QkrSP.esm.js} +232 -112
  206. package/dist/{setup-Cyko6cAn.d.ts → setup-lgkQ8dJW.d.ts} +20 -11
  207. package/dist/signature.d.ts +1 -1
  208. package/dist/signature.esm.js +2 -2
  209. package/dist/{signatureManager-DGBSWz2_.d.ts → signatureManager-BpVt_Jv7.d.ts} +2 -2
  210. package/dist/{signatureManager-B72np4ZO.esm.js → signatureManager-qqXyH93e.esm.js} +7 -11
  211. package/dist/{signatureStateMachine-ce_XMA3l.esm.js → signatureStateMachine-BkRSrkKp.esm.js} +3 -3
  212. package/dist/splitTrackedName-3zJRd2RD.esm.js +19 -0
  213. package/dist/{src-35ekGRzK.esm.js → src-DJAJjRYQ.esm.js} +1 -1
  214. package/dist/{stats-CZcy2J53.esm.js → stats-DmG_tkGk.esm.js} +1 -1
  215. package/dist/stats.esm.js +1 -1
  216. package/dist/{sessionInitializer-CnhAkMUN.esm.js → thumbmark.esm-CRc0cYvz.esm.js} +33 -776
  217. package/dist/{trueSightService-M5VpCo96.esm.js → trueSightService-BWgRVGIT.esm.js} +893 -900
  218. package/dist/trust-graph.d.ts +1 -2
  219. package/dist/trust-graph.esm.js +2 -2
  220. package/dist/{types-C0oWGUzg.d.ts → types-0L-eFDmr.d.ts} +1 -1
  221. package/dist/{types-C1g9itHE.d.ts → types-BGXxRwQM.d.ts} +6 -7
  222. package/dist/{types-BfgmV7s7.d.ts → types-BQA7lRDV.d.ts} +1 -1
  223. package/dist/{types-CxGdmzxa.d.ts → types-BvFmYX5c.d.ts} +1 -1
  224. package/dist/{types-Cx-1zo-i.d.ts → types-BvLo3U4u.d.ts} +1 -1
  225. package/dist/types-C71Zo6vl.d.ts +6 -0
  226. package/dist/{types-DEGVXwsk2.d.ts → types-CyPUIpzf.d.ts} +110 -62
  227. package/dist/{types-Bx-BWveD.d.ts → types-DTYr9pCB.d.ts} +1 -1
  228. package/dist/{types-BjSly8cp.d.ts → types-DUnFZ08M.d.ts} +1 -1
  229. package/dist/{types-ESdtnHtg.d.ts → types-zpO4fU6a.d.ts} +3 -4
  230. package/dist/{urlUtils-D6phjq1-.esm.js → urlUtils-6jsE6rKp.esm.js} +9 -1
  231. package/dist/video-selfie.d.ts +6 -9
  232. package/dist/video-selfie.esm.js +1386 -1344
  233. package/dist/{videoSelfieCameraWarmer-q9ZjvXu9.esm.js → videoSelfieCameraWarmer-C366RKqu.esm.js} +11 -11
  234. package/dist/{videoSelfieFlowModuleMachine-BUe2uACW.esm.js → videoSelfieFlowModuleMachine-BCFVHBQ1.esm.js} +1 -1
  235. package/dist/{videoSelfieStepDetector-ChYgFM15.d.ts → videoSelfieStepDetector-C5QHOvWb.d.ts} +4 -4
  236. package/dist/videoTrimByCopy-BFfAiNpv.esm.js +15901 -0
  237. package/dist/{warmup-Cis2p6O0.d.ts → warmup-BUPPRAA1.d.ts} +7 -0
  238. package/dist/{warmup-ChDwHSel.esm.js → warmup-DMtbyb2l.esm.js} +27 -9
  239. package/dist/wasm.d.ts +2 -2
  240. package/dist/wasm.esm.js +4 -4
  241. package/dist/{wasmDsFlagSync-DYrLUEII.esm.js → wasmDsFlagSync-BXCGqP48.esm.js} +1 -1
  242. package/dist/{wasmWebClient-B7baE-Wf.esm.js → wasmWebClient-kbYZ2sxw.esm.js} +259 -20
  243. package/dist/watchlist-for-business.d.ts +1 -1
  244. package/dist/watchlist-for-business.esm.js +2 -2
  245. package/dist/watchlist.d.ts +1 -1
  246. package/dist/watchlist.esm.js +2 -2
  247. package/dist/{watchlistForBusinessManager-CsnJnG-C.d.ts → watchlistForBusinessManager-B3GDPZrr.d.ts} +2 -2
  248. package/dist/{watchlistForBusinessManager-CIMkpEhu.esm.js → watchlistForBusinessManager-BvF4jK3S.esm.js} +7 -5
  249. package/dist/{watchlistForBusinessStateMachine-CJ-MvUre.esm.js → watchlistForBusinessStateMachine-121XK-Et.esm.js} +3 -3
  250. package/dist/{watchlistManager-CixcLNDT.esm.js → watchlistManager-CNWEOYSq.esm.js} +3 -3
  251. package/dist/{watchlistManager-DLXef90v.d.ts → watchlistManager-DJQOd8Pw.d.ts} +2 -2
  252. package/dist/{watchlistStateMachine-CBqk2w-h.esm.js → watchlistStateMachine-Dgfm42w2.esm.js} +3 -3
  253. package/dist/workflow.d.ts +34 -5
  254. package/dist/workflow.esm.js +64 -46
  255. package/dist/{xstate-actors.esm-BXeQ-Ucz.esm.js → xstate-actors.esm-8Gzepa_A.esm.js} +1 -1
  256. package/dist/{xstate.esm-BuFLFuzz.esm.js → xstate.esm-DSajW7CJ.esm.js} +24 -10
  257. package/package.json +13 -5
  258. package/dist/Actor-iTq7YY48.d.ts +0 -1
  259. package/dist/StateMachine-EDpYWy0i.d.ts +0 -6
  260. package/dist/fiscalQrManager-DbCVMIBx.esm.js +0 -34143
  261. package/dist/index-B8weJxmL.d.ts +0 -1
  262. package/dist/selfieErrorUtils-UiQ46EBa.esm.js +0 -116
  263. package/dist/selfieStateMachine-DY7vJVNY.esm.js +0 -71
  264. package/dist/types-BN5RPPIZ.esm.js +0 -34
  265. package/dist/types-Bt9RuRqt.d.ts +0 -6
  266. package/dist/virtualCameraCheck-Cjab7FTI.esm.js +0 -48
  267. /package/dist/{types-BSBzhHRH.d.ts → types-BSBzhHRH2.d.ts} +0 -0
@@ -1,21 +1,20 @@
1
- import { l as trueSightLog, m as isTrueSightTesting } from "./trueSightService-M5VpCo96.esm.js";
1
+ import { l as trueSightLog, v as isTrueSightTesting } from "./trueSightService-BWgRVGIT.esm.js";
2
2
  import { t as getTimestamp } from "./IBrowserEnvironmentCapability-DEaRRk-R.esm.js";
3
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";
4
+ import { t as endpoints } from "./endpoints-DHzlkQNe.esm.js";
5
+ import "./sessionInitializer-jxbfCnE-.esm.js";
6
+ import { t as addDeviceStats } from "./stats-DmG_tkGk.esm.js";
7
+ import { t as BrowserLazyImportProvider } from "./BrowserLazyImportProvider-BhoA957O.esm.js";
8
+ import { i as assign, n as enqueueActions, r as sendTo, t as setup } from "./xstate.esm-DSajW7CJ.esm.js";
9
+ import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-8Gzepa_A.esm.js";
10
+ import { n as invokeRequestPermissionActor, t as checkPermission } from "./permissionServices-d2UW0r_L.esm.js";
11
+ 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-BjTer9h3.esm.js";
12
+ import { i as flagFaceManualReview, n as runProtectedAttempt, o as PROTECTED_CAPTURE_TARGET, r as cameraCycleProvider, t as createCameraCycleOwnership } from "./createCameraCycleOwnership-kdlhkmmY.esm.js";
14
13
  import { n as releaseFaceAvatarWarmup, r as warmFaceAvatar, t as createFaceAvatar } from "./createFaceAvatar-BNHdeFj8.esm.js";
15
14
  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";
15
+ import { n as needsMotionPrimeOnlyFromPermission, r as resolveStoredPermissionResult, t as isReadyForCaptureFromPermission } from "./permissionGuards-Bf4LbHjC.esm.js";
16
+ import { a as getAdaptiveMediaRecorderOptions, i as createRecordingCompositor, n as WorkerEncoderRecordingProvider, t as MultipartRecordingService } from "./multipartRecordingService-DbeQpXdU.esm.js";
17
+ import { t as getDeviceClass } from "./getDeviceClass-bsWdEDxP.esm.js";
19
18
  //#region src/internal/avatar/concealment.ts
20
19
  /**
21
20
  * Maps a backend concealment option to the internal avatar flags. `OPTION_NONE`
@@ -46,234 +45,6 @@ function concealmentToAvatar(option) {
46
45
  }
47
46
  }
48
47
  //#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
48
  //#region ../infra/src/providers/wasm/createProtectedFaceCaptureCapabilities.ts
278
49
  /**
279
50
  * Infrastructure composition boundary for one protected still-face attempt.
@@ -300,111 +71,40 @@ function logFaceCameraDiagnostic(event, fields) {
300
71
  }
301
72
  //#endregion
302
73
  //#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
- }
74
+ /** A trim that runs longer than this uploads the full recording instead. */
75
+ const TRIM_TIMEOUT_MS = 1e4;
76
+ const trimmer = BrowserLazyImportProvider.getInstance().create(() => import("./videoTrimByCopy-BFfAiNpv.esm.js").then((module) => module.trimLastNSecondsByCopy), {
77
+ label: "Video liveness",
78
+ moduleName: "mediabunny",
79
+ timeoutMs: 1e4,
80
+ disabledMessage: "the full recording will be uploaded untrimmed."
81
+ });
82
+ /** Starts loading the trimmer, e.g. when a recording that will be trimmed starts. */
83
+ function preloadVideoTrimmer() {
84
+ trimmer.load();
335
85
  }
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);
86
+ /**
87
+ * Keeps about the last `seconds` of a recording. Never rejects and never
88
+ * hangs: when the trimmer cannot load, fails, or takes longer than
89
+ * {@link TRIM_TIMEOUT_MS}, it resolves the untrimmed recording.
90
+ */
91
+ async function trimLastNSeconds(videoBlob, seconds) {
92
+ const trim = await trimmer.load();
93
+ if (!trim) return videoBlob;
94
+ let timeout;
95
+ try {
96
+ return await Promise.race([trim(videoBlob, seconds), new Promise((resolve) => {
97
+ timeout = setTimeout(() => {
98
+ console.warn("[Video liveness] Trimming timed out; the full recording will be uploaded untrimmed.");
99
+ resolve(videoBlob);
100
+ }, TRIM_TIMEOUT_MS);
101
+ })]);
102
+ } catch (error) {
103
+ console.warn("[Video liveness] Trimming failed; the full recording will be uploaded untrimmed.", error);
346
104
  return videoBlob;
105
+ } finally {
106
+ clearTimeout(timeout);
347
107
  }
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
108
  }
409
109
  //#endregion
410
110
  //#region ../infra/src/providers/browser/LocalRecordingProvider.ts
@@ -419,6 +119,8 @@ function toBase64(videoBlob) {
419
119
  reader.readAsDataURL(videoBlob);
420
120
  });
421
121
  }
122
+ /** `MediaRecorderOptions.videoKeyFrameIntervalDuration`, see `startRecording`. */
123
+ const KEYFRAME_INTERVAL_MS = 1e3;
422
124
  var LocalRecordingProvider = class {
423
125
  constructor() {
424
126
  this.mediaRecorder = null;
@@ -440,12 +142,16 @@ var LocalRecordingProvider = class {
440
142
  }
441
143
  startRecording(stream) {
442
144
  this.reset();
145
+ preloadVideoTrimmer();
443
146
  this.registerEventListeners();
444
147
  this.stream = stream;
445
148
  try {
446
149
  const options = getAdaptiveMediaRecorderOptions();
447
150
  this.mimeType = options.mimeType;
448
- const recorder = new MediaRecorder(stream.clone(), options);
151
+ const recorder = new MediaRecorder(stream.clone(), {
152
+ ...options,
153
+ videoKeyFrameIntervalDuration: KEYFRAME_INTERVAL_MS
154
+ });
449
155
  recorder.onerror = (event) => {
450
156
  this._error = `Recording error: ${event}`;
451
157
  this._isRecording = false;
@@ -925,7 +631,8 @@ var ProtectedFaceAttemptRuntime = class ProtectedFaceAttemptRuntime {
925
631
  faceResults: this.provider
926
632
  };
927
633
  }
928
- createUploadCommand(recordingId) {
634
+ /** `captureType` goes on the selfie upload only, never on authentication or face-results. */
635
+ createUploadCommand(recordingId, captureType) {
929
636
  const token = getToken();
930
637
  const config = {
931
638
  headers: token ? { "X-Incode-Hardware-Id": token } : void 0,
@@ -957,6 +664,7 @@ var ProtectedFaceAttemptRuntime = class ProtectedFaceAttemptRuntime {
957
664
  ...config,
958
665
  params: {
959
666
  imageType: "selfie",
667
+ captureType,
960
668
  ...validRecordingId ? { recordingId: validRecordingId } : {}
961
669
  }
962
670
  }
@@ -1137,6 +845,7 @@ function createProtectedFaceControllerActor(options) {
1137
845
  let lifecycleCleanup;
1138
846
  let sendLifecycle;
1139
847
  let committedPreview;
848
+ let manualCommitted = false;
1140
849
  let pendingAutoPreview;
1141
850
  let recording = {};
1142
851
  let stepRecording;
@@ -1328,6 +1037,7 @@ 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":
@@ -1443,7 +1153,7 @@ function createProtectedFaceControllerActor(options) {
1443
1153
  if (!owner) return;
1444
1154
  logDiagnostic("upload-start");
1445
1155
  if (options.delivery === "protected") {
1446
- sendLifecycle?.(owner.createUploadCommand(recording.recordingId));
1156
+ sendLifecycle?.(owner.createUploadCommand(recording.recordingId, manualCommitted ? "MANUAL" : "AUTO"));
1447
1157
  return;
1448
1158
  }
1449
1159
  finalizeLocalCapture(owner, generation).catch(() => {
@@ -1559,7 +1269,6 @@ const faceCaptureMachine = setup({
1559
1269
  handle?.stop();
1560
1270
  };
1561
1271
  }),
1562
- manualUploadMachine: manualFaceUploadMachine,
1563
1272
  prepareFaceUpload: fromPromise(async () => {
1564
1273
  throw new Error("prepareFaceUpload must be provided by variant");
1565
1274
  }),
@@ -1602,6 +1311,7 @@ const faceCaptureMachine = setup({
1602
1311
  permissionResult: void 0,
1603
1312
  deepsightReady: false,
1604
1313
  manualCaptureTriggered: false,
1314
+ retainManualMode: false,
1605
1315
  captureOnlyResult: void 0,
1606
1316
  avatarCanvas: void 0
1607
1317
  };
@@ -1630,7 +1340,12 @@ const faceCaptureMachine = setup({
1630
1340
  setDeepsightNotReady: assign({ deepsightReady: () => false }),
1631
1341
  setErrorFromEvent: assign({ error: ({ event }) => String(event.error) }),
1632
1342
  setDetectionStatusDetecting: assign({ detectionStatus: ({ context }) => context.manualCaptureTriggered ? "manualCapture" : "detecting" }),
1633
- setDetectionStatusFromEvent: assign({ detectionStatus: ({ event }) => event.status }),
1343
+ setDetectionStatusFromEvent: assign({ detectionStatus: ({ context, event }) => {
1344
+ const status = event.status;
1345
+ if (context.retainManualMode && status !== "offline") return "manualCapture";
1346
+ return status;
1347
+ } }),
1348
+ retainManualModeForRetry: assign({ retainManualMode: ({ context }) => context.manualCaptureTriggered && context.config.onDeviceFaceResultsSubmissionEnabled !== true }),
1634
1349
  setManualCaptureTriggered: assign({ manualCaptureTriggered: ({ context, event }) => {
1635
1350
  const status = event.status;
1636
1351
  return context.manualCaptureTriggered || status === "manualCapture";
@@ -1664,10 +1379,13 @@ const faceCaptureMachine = setup({
1664
1379
  }),
1665
1380
  setUploadResponseFromEvent: assign({ uploadResponse: ({ event }) => event.output }),
1666
1381
  setProcessResponseFromEvent: assign({ processResponse: ({ event }) => event.output }),
1667
- setServerErrorAndDecrement: assign(({ context }) => ({
1668
- uploadError: FACE_ERROR_CODES.SERVER,
1669
- attemptsRemaining: context.attemptsRemaining - 1
1670
- })),
1382
+ setUploadFailureAndDecrement: assign(({ context, event }) => {
1383
+ const { httpStatus, responseStatus } = event.failure;
1384
+ return {
1385
+ uploadError: httpStatus === void 0 ? FACE_ERROR_CODES.SERVER : getFaceUploadErrorCode(httpStatus, responseStatus),
1386
+ attemptsRemaining: context.attemptsRemaining - 1
1387
+ };
1388
+ }),
1671
1389
  sendLabelInspection: () => {
1672
1390
  sendLabelInspectionEvent();
1673
1391
  },
@@ -1686,7 +1404,6 @@ const faceCaptureMachine = setup({
1686
1404
  releaseFaceAvatarWarmup();
1687
1405
  },
1688
1406
  noOp: () => void 0,
1689
- forwardToManualUpload: sendTo("manualUpload", ({ event }) => event),
1690
1407
  sendProtectedPreAcquire: enqueueActions(({ enqueue, self }) => {
1691
1408
  if (!isProtectedFaceControllerRunning(self)) return;
1692
1409
  enqueue.sendTo("protectedFaceController", { type: "PRE_ACQUIRE" });
@@ -1744,8 +1461,6 @@ const faceCaptureMachine = setup({
1744
1461
  guards: {
1745
1462
  hasShowTutorial: ({ context }) => context.config.showTutorial,
1746
1463
  hasAgeAssurance: ({ context }) => context.config.ageAssurance === true,
1747
- hasManualUploadEnabled: () => false,
1748
- isManualUploadExhausted: ({ event }) => event.output?.result === "exhausted",
1749
1464
  isPermissionGranted: ({ event }) => {
1750
1465
  if ("output" in event) return event.output === "granted";
1751
1466
  return false;
@@ -1767,6 +1482,7 @@ const faceCaptureMachine = setup({
1767
1482
  isCameraAndDeepsightReady: ({ context }) => context.stream !== void 0 && context.deepsightReady,
1768
1483
  hasAttemptsRemaining: ({ context }) => context.attemptsRemaining > 0,
1769
1484
  hasCapturedImage: ({ context }) => context.capturedImage !== void 0,
1485
+ isAutoCaptureAllowed: ({ context }) => !context.retainManualMode,
1770
1486
  canCommitProtectedManual: ({ context }) => context.manualCaptureTriggered && context.config.onDeviceFaceResultsSubmissionEnabled !== true,
1771
1487
  isProtectedManualRefusal: ({ event }) => event.failure.stage === "manualCommit",
1772
1488
  isProtectedUploadFailure: ({ event }) => event.failure.stage === "upload",
@@ -1797,6 +1513,7 @@ const faceCaptureMachine = setup({
1797
1513
  encryptedBase64Image: void 0,
1798
1514
  uploadRecordingId: void 0,
1799
1515
  manualCaptureTriggered: false,
1516
+ retainManualMode: false,
1800
1517
  captureOnlyResult: void 0,
1801
1518
  avatarCanvas: void 0,
1802
1519
  faceFeed: void 0,
@@ -1842,10 +1559,6 @@ const faceCaptureMachine = setup({
1842
1559
  tutorial: {
1843
1560
  initial: "checkingPermission",
1844
1561
  entry: ["trackTutorial", "warmAvatarProvider"],
1845
- on: { GO_TO_MANUAL_UPLOAD: {
1846
- guard: "hasManualUploadEnabled",
1847
- target: "#faceCapture.manualUpload"
1848
- } },
1849
1562
  states: {
1850
1563
  checkingPermission: { invoke: {
1851
1564
  id: "checkPermissionTutorial",
@@ -1928,9 +1641,23 @@ const faceCaptureMachine = setup({
1928
1641
  PROTECTED_DEEPSIGHT_FAILED: {
1929
1642
  target: "readyForNext",
1930
1643
  actions: "setDeepsightNotReady"
1644
+ },
1645
+ NEXT_STEP: {
1646
+ target: "continuing",
1647
+ actions: "trackContinue"
1931
1648
  }
1932
1649
  }
1933
1650
  },
1651
+ continuing: { on: {
1652
+ PROTECTED_DEEPSIGHT_READY: {
1653
+ target: "#faceCapture.tutorial.waitingForPermission",
1654
+ actions: "setDeepsightReady"
1655
+ },
1656
+ PROTECTED_DEEPSIGHT_FAILED: {
1657
+ target: "#faceCapture.tutorial.waitingForPermission",
1658
+ actions: "setDeepsightNotReady"
1659
+ }
1660
+ } },
1934
1661
  readyForNext: { on: { NEXT_STEP: {
1935
1662
  target: "#faceCapture.tutorial.waitingForPermission",
1936
1663
  actions: "trackContinue"
@@ -2076,7 +1803,7 @@ const faceCaptureMachine = setup({
2076
1803
  {
2077
1804
  target: ".uploadError",
2078
1805
  guard: "isProtectedUploadFailure",
2079
- actions: "setServerErrorAndDecrement"
1806
+ actions: "setUploadFailureAndDecrement"
2080
1807
  },
2081
1808
  {
2082
1809
  target: "#faceCapture.error",
@@ -2098,8 +1825,11 @@ const faceCaptureMachine = setup({
2098
1825
  actions: "setDeepsightReady"
2099
1826
  },
2100
1827
  PROTECTED_DEEPSIGHT_FAILED: {
2101
- target: "#faceCapture.permissions",
2102
- actions: "setDeepsightNotReady"
1828
+ target: "#faceCapture.error",
1829
+ actions: assign({
1830
+ deepsightReady: () => false,
1831
+ error: () => "Deepsight initialization failed"
1832
+ })
2103
1833
  }
2104
1834
  }
2105
1835
  },
@@ -2123,7 +1853,10 @@ const faceCaptureMachine = setup({
2123
1853
  on: {
2124
1854
  DETECTION_UPDATE: { actions: ["setDetectionStatusFromEvent", "setManualCaptureTriggered"] },
2125
1855
  AVATAR_READY: { actions: "setAvatarCanvas" },
2126
- PROTECTED_NATIVE_AUTO_CAPTURE: { actions: "sendProtectedAutoCapture" },
1856
+ PROTECTED_NATIVE_AUTO_CAPTURE: {
1857
+ guard: "isAutoCaptureAllowed",
1858
+ actions: "sendProtectedAutoCapture"
1859
+ },
2127
1860
  PROTECTED_AUTO_COMMITTED: {
2128
1861
  target: "capturing",
2129
1862
  actions: "setProtectedCommittedPreview"
@@ -2182,6 +1915,7 @@ const faceCaptureMachine = setup({
2182
1915
  reenter: true,
2183
1916
  guard: "hasAttemptsRemaining",
2184
1917
  actions: [
1918
+ "retainManualModeForRetry",
2185
1919
  "clearUploadFailure",
2186
1920
  "setDeepsightNotReady",
2187
1921
  "resetProtectedController",
@@ -2204,36 +1938,6 @@ const faceCaptureMachine = setup({
2204
1938
  }
2205
1939
  }
2206
1940
  },
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
1941
  processing: { invoke: {
2238
1942
  id: "processFace",
2239
1943
  src: "processFace",
@@ -2287,4 +1991,4 @@ const faceCaptureMachine = setup({
2287
1991
  }
2288
1992
  });
2289
1993
  //#endregion
2290
- export { concealmentToAvatar as i, createDefaultProtectedFaceControllerActor as n, manualFaceUploadMachine as r, faceCaptureMachine as t };
1994
+ export { createDefaultProtectedFaceControllerActor as n, concealmentToAvatar as r, faceCaptureMachine as t };