@incodetech/core 2.3.2-rc.4 → 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.
- package/THIRD_PARTY_NOTICES.txt +1243 -3
- package/dist/Actor-DpTj5PFb.d.ts +1 -0
- package/dist/{BaseWasmProvider-Dyi6dKp1.d.ts → BaseWasmProvider-BL9wIRnN.d.ts} +2 -2
- package/dist/{FaceDetectionProvider-B5Fxc_y9.esm.js → FaceDetectionProvider-BjTer9h3.esm.js} +126 -10
- package/dist/HttpRequestError-Bh0pNGSC.esm.js +35 -0
- package/dist/{IIdCaptureCapability-RNiFhvXR.d.ts → IIdCaptureCapability-DBsv9-7M.d.ts} +2 -2
- package/dist/{IWasmUtilCapability-CNWRl7jr.d.ts → IWasmUtilCapability-CPX0RGdQ.d.ts} +28 -5
- package/dist/{Manager-CQQ99QOI.d.ts → Manager-C9T5amUN.d.ts} +7 -1
- package/dist/{MotionSensorProvider-DyhbM4Si.esm.js → MotionSensorProvider-DYxh8TjR.esm.js} +1 -1
- package/dist/{ekycStateMachine-UeJRO8_p.esm.js → PhoneValidationProvider-SZiOS0jB.esm.js} +232 -827
- package/dist/{StreamCanvasCapture-_8gdW5Lk.d.ts → StreamCanvasCapture-DVmzJux5.d.ts} +2 -2
- package/dist/{safeStorage-BdU9_m2E.esm.js → WasmUtilProvider-CIdnE7Fx.esm.js} +95 -46
- package/dist/{addressSearch-DyHGgeX8.esm.js → addressSearch-BiYZjvp3.esm.js} +143 -4
- package/dist/{advanceableErrors-CpF2cBy6.esm.js → advanceableErrors-q_pfU3Cn.esm.js} +5 -4
- package/dist/ae-signature.d.ts +2 -2
- package/dist/ae-signature.esm.js +1 -1
- package/dist/antifraud.d.ts +1 -1
- package/dist/antifraud.esm.js +2 -2
- package/dist/{antifraudManager-BY36bS12.d.ts → antifraudManager-DbGCvlJs.d.ts} +2 -2
- package/dist/{antifraudManager-DNkw66oW.esm.js → antifraudManager-HL08jeDX.esm.js} +3 -3
- package/dist/{antifraudStateMachine-DBeq47D2.esm.js → antifraudStateMachine-DoJVzblM.esm.js} +3 -3
- package/dist/{apiError--p429c2X.esm.js → apiError-DcSWedC6.esm.js} +2 -1
- package/dist/authentication.d.ts +3 -3
- package/dist/authentication.esm.js +2 -2
- package/dist/{authenticationManager-CboRCl_N.d.ts → authenticationManager-CANv5-W5.d.ts} +2 -8
- package/dist/{authenticationManager-CWmZMFJH.esm.js → authenticationManager-SaiAxqvS.esm.js} +6 -6
- package/dist/{authenticationStateMachine-BQ7ZW-8a.esm.js → authenticationStateMachine-CHSxmV7z.esm.js} +5 -6
- package/dist/avatar.d.ts +1 -1
- package/dist/{backCameraStream-B0-YgP_y.esm.js → backCameraStream-CMvXj4X4.esm.js} +1 -1
- package/dist/camera.esm.js +1 -1
- package/dist/certificate-issuance.d.ts +1 -1
- package/dist/certificate-issuance.esm.js +2 -2
- package/dist/{certificateIssuanceManager-C3-CI0_s.esm.js → certificateIssuanceManager-CMg4SgL4.esm.js} +3 -3
- package/dist/{certificateIssuanceManager-DCgEidHz.d.ts → certificateIssuanceManager-Dr8A4Lgr.d.ts} +2 -3
- package/dist/{certificateIssuanceStateMachine-CxqS_nD-.esm.js → certificateIssuanceStateMachine-Cs64QmYH.esm.js} +4 -4
- package/dist/consent.d.ts +1 -1
- package/dist/consent.esm.js +2 -2
- package/dist/{consentManager-B6E1XJDw.esm.js → consentManager-CjrxY737.esm.js} +3 -3
- package/dist/{consentManager-uhDPdU6i.d.ts → consentManager-DgzWQpAR.d.ts} +11 -12
- package/dist/{consentStateMachine-DTSfdGiW.esm.js → consentStateMachine-BCj5Jb3g.esm.js} +3 -3
- package/dist/{createCameraCycleOwnership-DnwTl1ad.esm.js → createCameraCycleOwnership-kdlhkmmY.esm.js} +71 -65
- package/dist/{createFaceAvatar-BlcTYgJv.d.ts → createFaceAvatar-DXgmQmQy.d.ts} +1 -1
- package/dist/cross-document-data-match.d.ts +1 -1
- package/dist/cross-document-data-match.esm.js +1 -1
- package/dist/{crossDocumentDataMatchManager-9XhFVZ5S.esm.js → crossDocumentDataMatchManager-BHnGRsto.esm.js} +4 -4
- package/dist/{crossDocumentDataMatchManager-Dq8Z3SOg.d.ts → crossDocumentDataMatchManager-yCWCOzcU.d.ts} +2 -2
- package/dist/curp-validation.d.ts +1 -1
- package/dist/curp-validation.esm.js +2 -2
- package/dist/{curpValidationManager-DNuZn9fn.d.ts → curpValidationManager-B-1EZbP_.d.ts} +3 -3
- package/dist/{curpValidationManager-DbIMYFcJ.esm.js → curpValidationManager-DBNIn8BF.esm.js} +15 -22
- package/dist/{curpValidationStateMachine-g5kMfuLj.esm.js → curpValidationStateMachine-DAxImy8p.esm.js} +4 -4
- package/dist/custom-fields.d.ts +1 -1
- package/dist/custom-fields.esm.js +1 -1
- package/dist/custom-watchlist.d.ts +1 -1
- package/dist/custom-watchlist.esm.js +2 -2
- package/dist/{customFieldsManager-CzWZTkW-.esm.js → customFieldsManager-BV6UyLFV.esm.js} +4 -4
- package/dist/{customFieldsManager-8-W2KY4n.d.ts → customFieldsManager-CF-cO8ap.d.ts} +2 -2
- package/dist/{customWatchlistManager-DWTED5Ur.esm.js → customWatchlistManager-DML0UPzf.esm.js} +3 -3
- package/dist/{customWatchlistManager-PBWHr_oM.d.ts → customWatchlistManager-DolUswyR.d.ts} +2 -2
- package/dist/{customWatchlistStateMachine-DOQou6TW.esm.js → customWatchlistStateMachine-D9gI5uu7.esm.js} +3 -3
- package/dist/deepsightLoader-DvfAYnzg.esm.js +55 -0
- package/dist/{deepsightLoader-BtYvACzG.esm.js → deepsightService-DLGO9yv1.esm.js} +51 -56
- package/dist/device.esm.js +1 -1
- package/dist/document-capture.d.ts +2 -2
- package/dist/document-capture.esm.js +2 -2
- package/dist/{documentCaptureManager-BRPxqYD2.esm.js → documentCaptureManager-C9XUnYU6.esm.js} +17 -18
- package/dist/{documentCaptureManager-lEtCM320.d.ts → documentCaptureManager-DkyDtm3Y.d.ts} +11 -34
- package/dist/{documentCaptureStateMachine-D312sSIu.esm.js → documentCaptureStateMachine-BHDsCfhL.esm.js} +55 -58
- package/dist/dynamic-forms.d.ts +2 -2
- package/dist/dynamic-forms.esm.js +2 -2
- package/dist/{dynamicFormsManager-66GzzBTx.esm.js → dynamicFormsManager-5uIXobxi.esm.js} +3 -3
- package/dist/{dynamicFormsManager-D5R_uxLQ.d.ts → dynamicFormsManager-C0dHs1ty.d.ts} +3 -3
- package/dist/{dynamicFormsStateMachine-DLnr2ZtX.esm.js → dynamicFormsStateMachine-DQmok084.esm.js} +4 -4
- package/dist/ekyb.d.ts +5 -5
- package/dist/ekyb.esm.js +3 -3
- package/dist/{ekybManager-BwRuGAwt.d.ts → ekybManager-BaZ_7CEu.d.ts} +4 -4
- package/dist/{ekybManager-CsQMgJDL.esm.js → ekybManager-CazShiQz.esm.js} +23 -27
- package/dist/{ekybStateMachine-DBeQNOMo.esm.js → ekybStateMachine-hstiCNmW.esm.js} +338 -13
- package/dist/ekyc.d.ts +2 -2
- package/dist/ekyc.esm.js +3 -3
- package/dist/{ekycManager-BX2d46FY.esm.js → ekycManager-BdJRUsz0.esm.js} +29 -36
- package/dist/{ekycManager-DLzDuBzI.d.ts → ekycManager-DW-ynodd.d.ts} +3 -3
- package/dist/ekycStateMachine-x6Klot8g.esm.js +1444 -0
- package/dist/{ekycUtils-D6wfSpPN.esm.js → ekycUtils-zY8CdKJL.esm.js} +53 -3
- package/dist/electronic-signature.d.ts +1 -1
- package/dist/electronic-signature.esm.js +1 -1
- package/dist/{electronicSignatureManager-Boj_xbGN.esm.js → electronicSignatureManager-Bc8spG8p.esm.js} +10 -10
- package/dist/{electronicSignatureManager-Ds-KEVTq.d.ts → electronicSignatureManager-DTSLOvKR.d.ts} +2 -3
- package/dist/email.d.ts +1 -1
- package/dist/email.esm.js +2 -2
- package/dist/{emailManager-bR1N5rV_.esm.js → emailManager-CtlKRRaR.esm.js} +20 -26
- package/dist/{emailManager-CADXW_9X.d.ts → emailManager-Dy6omJVp.d.ts} +2 -2
- package/dist/{emailStateMachine-Bc_6oIYw.esm.js → emailStateMachine-5Neq3rE5.esm.js} +4 -4
- package/dist/{endpoints-B-3Q-LUw.esm.js → endpoints-DHzlkQNe.esm.js} +2 -0
- package/dist/{events-ijlbX_Wx.esm.js → events-CAgFE-k3.esm.js} +19 -7
- package/dist/events.d.ts +3 -2
- package/dist/events.esm.js +1 -1
- package/dist/extensibility.d.ts +38 -38
- package/dist/extensibility.esm.js +36 -36
- package/dist/{externalFetch-BKBThAUC.esm.js → externalFetch-DrR9xshk.esm.js} +3 -2
- package/dist/face-match.d.ts +1 -1
- package/dist/face-match.esm.js +2 -2
- package/dist/{faceCaptureManagerFactory-m-7ae67q.d.ts → faceCaptureManagerFactory-jKQ2QtY-.d.ts} +11 -51
- package/dist/{faceCaptureManagerFactory-BKpeQIZu.esm.js → faceCaptureManagerFactory-uFm1AcaY.esm.js} +19 -54
- package/dist/{faceCaptureSetup-DOrt8-Sn.esm.js → faceCaptureSetup-Cu2wabzo.esm.js} +99 -395
- package/dist/{faceMatchManager-Bmv0HzuY.esm.js → faceMatchManager-9Nj9aPci.esm.js} +3 -3
- package/dist/{faceMatchManager-BnvrZM2F.d.ts → faceMatchManager-DIgG-UFS.d.ts} +1 -2
- package/dist/{faceMatchStateMachine-mRIHQ3dA.esm.js → faceMatchStateMachine-B9ZUnlyU.esm.js} +6 -4
- package/dist/{feature-management-zY6FcYx_.esm.js → feature-management-BTbYruNe.esm.js} +3 -3
- package/dist/feature-management.esm.js +1 -1
- package/dist/field-comparison.d.ts +2 -2
- package/dist/field-comparison.esm.js +1 -1
- package/dist/{fieldComparisonManager-CBvEGxFx.d.ts → fieldComparisonManager-CUX4gza2.d.ts} +6 -3
- package/dist/{fieldComparisonManager-CC-klG0h.esm.js → fieldComparisonManager-Dk38hXZP.esm.js} +35 -17
- package/dist/fiscal-qr.d.ts +1 -1
- package/dist/fiscal-qr.esm.js +1 -1
- package/dist/{fiscalQrManager-B1STmT6z.d.ts → fiscalQrManager-D0Iy7EKR.d.ts} +2 -2
- package/dist/fiscalQrManager-DmBkQfs0.esm.js +6798 -0
- package/dist/flow-events.d.ts +1 -1
- package/dist/flow.d.ts +14 -13
- package/dist/flow.esm.js +14 -14
- package/dist/{flowCompletionService-CBa6YyI5.esm.js → flowCompletionService-xnn_SlJU.esm.js} +2 -2
- package/dist/{flowServices-JW6uRaUt.esm.js → flowServices-DA64AEZC.esm.js} +11 -7
- package/dist/geolocation.d.ts +1 -1
- package/dist/geolocation.esm.js +2 -2
- package/dist/{geolocationManager-DD5J1T_p.esm.js → geolocationManager-CqNLY45e.esm.js} +6 -7
- package/dist/{geolocationManager-Cz744E5S.d.ts → geolocationManager-Dn24g1fl.d.ts} +2 -3
- package/dist/{geolocationStateMachine-DoelwBqs.esm.js → geolocationStateMachine-D-cQi7ar.esm.js} +4 -4
- package/dist/{getDeviceClass-5NYZg9s6.esm.js → getDeviceClass-bsWdEDxP.esm.js} +1 -1
- package/dist/{getParsedUserAgent-B2iFDql1.esm.js → getParsedUserAgent-DhQPeKqw.esm.js} +1 -1
- package/dist/government-validation.d.ts +1 -1
- package/dist/government-validation.esm.js +2 -2
- package/dist/{governmentValidationManager-D02vT4yY.d.ts → governmentValidationManager-B82zOut8.d.ts} +3 -3
- package/dist/{governmentValidationManager-CacFOtKO.esm.js → governmentValidationManager-CP0SiOOe.esm.js} +3 -3
- package/dist/{governmentValidationStateMachine-CoaZOSTP.esm.js → governmentValidationStateMachine-C3YQ8yCZ.esm.js} +3 -3
- package/dist/home.d.ts +3 -26
- package/dist/home.esm.js +2 -2
- package/dist/id-ocr.d.ts +1 -1
- package/dist/id-ocr.esm.js +2 -2
- package/dist/id-selfie-flow.d.ts +6 -9
- package/dist/id-selfie-flow.esm.js +23 -28
- package/dist/id-verification.d.ts +1 -1
- package/dist/id-verification.esm.js +2 -2
- package/dist/id.d.ts +4 -4
- package/dist/id.esm.js +4 -205
- package/dist/{idCaptureDefaults-Chne8cyb.esm.js → idCaptureDefaults-CBg73RnV.esm.js} +8 -5
- package/dist/{idCaptureManager-BHwL2Z0V.d.ts → idCaptureManager-BY97SRCV.d.ts} +242 -98
- package/dist/{idCaptureManager-0504dfcD.esm.js → idCaptureManager-D4V8vXtY.esm.js} +276 -210
- package/dist/{idCaptureServices-B-Ynn67N.esm.js → idCaptureServices-DJ33k3-p.esm.js} +21 -39
- package/dist/{idCaptureStateMachine-B7ET-hfq.esm.js → idCaptureStateMachine-PJt0yzom.esm.js} +989 -872
- package/dist/{idOcrManager-BF_cXZq8.d.ts → idOcrManager-BTdHlJ9D.d.ts} +3 -4
- package/dist/{idOcrManager-ByWuQ4ej.esm.js → idOcrManager-DxoCesYP.esm.js} +3 -3
- package/dist/{idOcrStateMachine-Bt_abXQQ.esm.js → idOcrStateMachine-kPn7DB2I.esm.js} +3 -3
- package/dist/{idVerificationManager-BB4Pj_N6.d.ts → idVerificationManager-BJapZfpy.d.ts} +2 -3
- package/dist/{idVerificationManager-DT42c77H.esm.js → idVerificationManager-CDhRUU5n.esm.js} +3 -3
- package/dist/{idVerificationStateMachine-DbDVIh9t.esm.js → idVerificationStateMachine-0HTVVxse.esm.js} +3 -3
- package/dist/identity-reuse.d.ts +2 -2
- package/dist/identity-reuse.esm.js +2 -2
- package/dist/{identityReuseManager-yG3acUrQ.esm.js → identityReuseManager-BleUi6TK.esm.js} +26 -13
- package/dist/{identityReuseManager-v2TH5g7e.d.ts → identityReuseManager-ooAbp6Kc.d.ts} +162 -44
- package/dist/{identityReuseStateMachine-BhAkuIra.esm.js → identityReuseStateMachine-BrBUpfn5.esm.js} +89 -23
- package/dist/{index-CeaC32qI.d.ts → index-DfEuu-Ew.d.ts} +2 -2
- package/dist/index-DpTj5PFb.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/{invokeOnCaptureCallback-BjzPjJ_p.esm.js → invokeOnCaptureCallback-BW7V3vub.esm.js} +1 -1
- package/dist/lamejs-B6TzhU5q.esm.js +10 -0
- package/dist/mandatory-consent.d.ts +2 -2
- package/dist/mandatory-consent.esm.js +2 -2
- package/dist/{mandatoryConsentManager-7dI0D08q.esm.js → mandatoryConsentManager-CX_Dyht7.esm.js} +3 -3
- package/dist/{mandatoryConsentManager-BYRnWbIC.d.ts → mandatoryConsentManager-TkX57U6f.d.ts} +8 -9
- package/dist/{mandatoryConsentStateMachine-DC5Mo6M1.esm.js → mandatoryConsentStateMachine-CoaSB7P7.esm.js} +3 -3
- package/dist/{multipartRecordingService-mwKFTlhR.esm.js → multipartRecordingService-DbeQpXdU.esm.js} +2 -2
- package/dist/{permissionGuards-D6TfVop2.esm.js → permissionGuards-Bf4LbHjC.esm.js} +1 -1
- package/dist/{permissionServices-EY3_Vx6c.esm.js → permissionServices-d2UW0r_L.esm.js} +34 -3
- package/dist/phone-number.d.ts +24 -0
- package/dist/phone-number.esm.js +1922 -0
- package/dist/phone.d.ts +1 -1
- package/dist/phone.esm.js +2 -2
- package/dist/{phoneManager-IjhSv5XS.esm.js → phoneManager-BGBcpqsk.esm.js} +31 -22
- package/dist/{phoneManager-BBU8Lq0O.d.ts → phoneManager-BO-LTih5.d.ts} +16 -3
- package/dist/{phoneStateMachine-CXdXufKg.esm.js → phoneStateMachine-CEm2y7yG.esm.js} +39 -20
- package/dist/phoneValidation-DnBcNUNh.esm.js +48 -0
- package/dist/qe-signature.d.ts +2 -2
- package/dist/qe-signature.esm.js +1 -1
- package/dist/redirect-to-mobile.d.ts +1 -1
- package/dist/redirect-to-mobile.esm.js +2 -2
- package/dist/{redirectToMobileManager-FLEWJtv8.esm.js → redirectToMobileManager-B1yQHFLu.esm.js} +4 -4
- package/dist/{redirectToMobileManager-BD2PvT5B.d.ts → redirectToMobileManager-CVsvpVbQ.d.ts} +2 -2
- package/dist/{redirectToMobileStateMachine-CSWWgUTO.esm.js → redirectToMobileStateMachine--Sr9NEVT.esm.js} +5 -5
- package/dist/{rolldown-runtime-FDOR9p9I.esm.js → rolldown-runtime-B-1-B7_t.esm.js} +10 -1
- package/dist/{runChildModule-CZU29-IV.esm.js → runChildModule-vdxQMCmO.esm.js} +13 -12
- package/dist/safeStorage-UxDrnjwa.esm.js +35 -0
- package/dist/{sdkVersion-DOhxIxQQ.esm.js → sdkVersion-F5YZbjip.esm.js} +1 -1
- package/dist/selfie.d.ts +4 -4
- package/dist/selfie.esm.js +12 -12
- package/dist/selfieErrorUtils-D-tsgEuX.esm.js +21 -0
- package/dist/{selfieManager-BSZG891S.d.ts → selfieManager-1J0IEyFq.d.ts} +2 -8
- package/dist/{selfieManager-CWhbwRdb.esm.js → selfieManager-26pENXxw.esm.js} +6 -6
- package/dist/selfieStateMachine-BhfKsl3I.esm.js +41 -0
- package/dist/{session-CctUSSCx.esm.js → session-Bu7djCsj.esm.js} +5 -5
- package/dist/session.d.ts +15 -3
- package/dist/session.esm.js +30 -5
- package/dist/sessionInitializer-jxbfCnE-.esm.js +974 -0
- package/dist/{setup-DmB0JHAB.esm.js → setup-C38QkrSP.esm.js} +232 -112
- package/dist/{setup-Cyko6cAn.d.ts → setup-lgkQ8dJW.d.ts} +20 -11
- package/dist/signature.d.ts +1 -1
- package/dist/signature.esm.js +2 -2
- package/dist/{signatureManager-DGBSWz2_.d.ts → signatureManager-BpVt_Jv7.d.ts} +2 -2
- package/dist/{signatureManager-B72np4ZO.esm.js → signatureManager-qqXyH93e.esm.js} +7 -11
- package/dist/{signatureStateMachine-ce_XMA3l.esm.js → signatureStateMachine-BkRSrkKp.esm.js} +3 -3
- package/dist/splitTrackedName-3zJRd2RD.esm.js +19 -0
- package/dist/{src-35ekGRzK.esm.js → src-DJAJjRYQ.esm.js} +1 -1
- package/dist/{stats-CZcy2J53.esm.js → stats-DmG_tkGk.esm.js} +1 -1
- package/dist/stats.esm.js +1 -1
- package/dist/{sessionInitializer-Ce9zO78j.esm.js → thumbmark.esm-CRc0cYvz.esm.js} +33 -776
- package/dist/{trueSightService-oMFESSSb.esm.js → trueSightService-BWgRVGIT.esm.js} +893 -900
- package/dist/trust-graph.d.ts +1 -2
- package/dist/trust-graph.esm.js +2 -2
- package/dist/{types-C0oWGUzg.d.ts → types-0L-eFDmr.d.ts} +1 -1
- package/dist/{types-C1g9itHE.d.ts → types-BGXxRwQM.d.ts} +6 -7
- package/dist/{types-BfgmV7s7.d.ts → types-BQA7lRDV.d.ts} +1 -1
- package/dist/{types-CxGdmzxa.d.ts → types-BvFmYX5c.d.ts} +1 -1
- package/dist/{types-Cx-1zo-i.d.ts → types-BvLo3U4u.d.ts} +1 -1
- package/dist/types-C71Zo6vl.d.ts +6 -0
- package/dist/{types-DEGVXwsk2.d.ts → types-CyPUIpzf.d.ts} +110 -62
- package/dist/{types-Bx-BWveD.d.ts → types-DTYr9pCB.d.ts} +1 -1
- package/dist/{types-BjSly8cp.d.ts → types-DUnFZ08M.d.ts} +1 -1
- package/dist/{types-ESdtnHtg.d.ts → types-zpO4fU6a.d.ts} +3 -4
- package/dist/{urlUtils-D6phjq1-.esm.js → urlUtils-6jsE6rKp.esm.js} +9 -1
- package/dist/video-selfie.d.ts +6 -9
- package/dist/video-selfie.esm.js +1386 -1344
- package/dist/{videoSelfieCameraWarmer-D_4NwYM-.esm.js → videoSelfieCameraWarmer-C366RKqu.esm.js} +11 -11
- package/dist/{videoSelfieFlowModuleMachine-BUe2uACW.esm.js → videoSelfieFlowModuleMachine-BCFVHBQ1.esm.js} +1 -1
- package/dist/{videoSelfieStepDetector-ChYgFM15.d.ts → videoSelfieStepDetector-C5QHOvWb.d.ts} +4 -4
- package/dist/videoTrimByCopy-BFfAiNpv.esm.js +15901 -0
- package/dist/{warmup-Cis2p6O0.d.ts → warmup-BUPPRAA1.d.ts} +7 -0
- package/dist/{warmup-ChDwHSel.esm.js → warmup-DMtbyb2l.esm.js} +27 -9
- package/dist/wasm.d.ts +2 -2
- package/dist/wasm.esm.js +4 -4
- package/dist/{wasmDsFlagSync-DYrLUEII.esm.js → wasmDsFlagSync-BXCGqP48.esm.js} +1 -1
- package/dist/{wasmWebClient-B7baE-Wf.esm.js → wasmWebClient-kbYZ2sxw.esm.js} +259 -20
- package/dist/watchlist-for-business.d.ts +1 -1
- package/dist/watchlist-for-business.esm.js +2 -2
- package/dist/watchlist.d.ts +1 -1
- package/dist/watchlist.esm.js +2 -2
- package/dist/{watchlistForBusinessManager-CsnJnG-C.d.ts → watchlistForBusinessManager-B3GDPZrr.d.ts} +2 -2
- package/dist/{watchlistForBusinessManager-CIMkpEhu.esm.js → watchlistForBusinessManager-BvF4jK3S.esm.js} +7 -5
- package/dist/{watchlistForBusinessStateMachine-CJ-MvUre.esm.js → watchlistForBusinessStateMachine-121XK-Et.esm.js} +3 -3
- package/dist/{watchlistManager-CixcLNDT.esm.js → watchlistManager-CNWEOYSq.esm.js} +3 -3
- package/dist/{watchlistManager-DLXef90v.d.ts → watchlistManager-DJQOd8Pw.d.ts} +2 -2
- package/dist/{watchlistStateMachine-CBqk2w-h.esm.js → watchlistStateMachine-Dgfm42w2.esm.js} +3 -3
- package/dist/workflow.d.ts +34 -5
- package/dist/workflow.esm.js +64 -46
- package/dist/{xstate-actors.esm-BXeQ-Ucz.esm.js → xstate-actors.esm-8Gzepa_A.esm.js} +1 -1
- package/dist/{xstate.esm-BuFLFuzz.esm.js → xstate.esm-DSajW7CJ.esm.js} +24 -10
- package/package.json +13 -5
- package/dist/Actor-iTq7YY48.d.ts +0 -1
- package/dist/StateMachine-EDpYWy0i.d.ts +0 -6
- package/dist/fiscalQrManager-DbCVMIBx.esm.js +0 -34143
- package/dist/index-B8weJxmL.d.ts +0 -1
- package/dist/selfieErrorUtils-UiQ46EBa.esm.js +0 -116
- package/dist/selfieStateMachine-CtMCi4KZ.esm.js +0 -71
- package/dist/types-BN5RPPIZ.esm.js +0 -34
- package/dist/types-Bt9RuRqt.d.ts +0 -6
- package/dist/virtualCameraCheck-Cjab7FTI.esm.js +0 -48
- /package/dist/{types-BSBzhHRH.d.ts → types-BSBzhHRH2.d.ts} +0 -0
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import { l as trueSightLog,
|
|
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 "./
|
|
5
|
-
import
|
|
6
|
-
import { t as addDeviceStats } from "./stats-
|
|
7
|
-
import { t as
|
|
8
|
-
import { i as assign, n as enqueueActions, r as sendTo, t as setup } from "./xstate.esm-
|
|
9
|
-
import { n as fromPromise, t as fromCallback } from "./xstate-actors.esm-
|
|
10
|
-
import { n as invokeRequestPermissionActor, t as checkPermission } from "./permissionServices-
|
|
11
|
-
import { a as sendLabelInspectionEvent, i as initializeDeepsightSession, r as initializeCamera, s as stopStream, t as FaceDetectionProvider } from "./FaceDetectionProvider-
|
|
12
|
-
import { t as
|
|
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-
|
|
17
|
-
import { a as getAdaptiveMediaRecorderOptions, i as createRecordingCompositor, n as WorkerEncoderRecordingProvider, t as MultipartRecordingService } from "./multipartRecordingService-
|
|
18
|
-
import { t as getDeviceClass } from "./getDeviceClass-
|
|
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
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
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
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
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(),
|
|
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
|
-
|
|
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 }) =>
|
|
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
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
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: "
|
|
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.
|
|
2102
|
-
actions:
|
|
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: {
|
|
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 {
|
|
1994
|
+
export { createDefaultProtectedFaceControllerActor as n, concealmentToAvatar as r, faceCaptureMachine as t };
|