@incodetech/core 2.1.0-rc.2 → 2.1.0-rc.3
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/dist/3dAvatarProvider-ChciZmjE.esm.js +28214 -0
- package/dist/{BrowserStorageProvider-D5xc7Lqo.esm.js → BrowserStorageProvider-CrrN540a.esm.js} +1 -25
- package/dist/BrowserVisibilityObserverProvider-rim9Jrz-.esm.js +25 -0
- package/dist/Face2DProvider-BeLlYBbB.esm.js +824 -0
- package/dist/FaceDetectionProvider-B78455D4.d.ts +119 -0
- package/dist/IVisibilityObserverCapability-BbWjgpiF.d.ts +12 -0
- package/dist/IWasmUtilCapability-d2XvzaCk.d.ts +145 -0
- package/dist/IpifyProvider-BRW14_uo.esm.js +51 -0
- package/dist/{Manager-B2OEDYqf.d.ts → Manager-CJ3G2zqi.d.ts} +1 -4
- package/dist/{OpenViduRecordingProvider-DF7A4ZNJ.esm.js → OpenViduRecordingProvider-B_0GKkzc.esm.js} +1 -1
- package/dist/PrivacyLensProvider-hDzaDzZ6.esm.js +339 -0
- package/dist/StateMachine-C_AY4cs7.d.ts +2 -0
- package/dist/{StreamCanvasCapture-Dr5n_iK1.esm.js → StreamCanvasCapture-Bz17q4FP.esm.js} +1 -1
- package/dist/StreamCanvasCapture-DS1TOoiH.d.ts +42 -0
- package/dist/{WasmUtilProvider-CIu373BZ.esm.js → WasmUtilProvider-ADG54T6M.esm.js} +16 -1
- package/dist/{addressSearch-BH96a3fq.esm.js → addressSearch-DJyNTg5S.esm.js} +4 -4
- package/dist/{ae-signature-CDEN8y-w.esm.js → ae-signature-DlElqFrZ.esm.js} +1 -1
- package/dist/ae-signature.d.ts +4 -3
- package/dist/ae-signature.esm.js +10 -9
- package/dist/antifraud.d.ts +4 -3
- package/dist/antifraud.esm.js +7 -6
- package/dist/{antifraudManager-DZifA5zX.esm.js → antifraudManager-BKdQoMFf.esm.js} +4 -3
- package/dist/{antifraudManager-B7WQTIdu.d.ts → antifraudManager-DpIvbrZP.d.ts} +2 -2
- package/dist/{antifraudStateMachine-DlKrK2hL.esm.js → antifraudStateMachine-C0NGnP9W.esm.js} +3 -3
- package/dist/{api-DUZwyz0o.esm.js → api-DsbUi7TO.esm.js} +21 -2
- package/dist/authentication.d.ts +19 -12
- package/dist/authentication.esm.js +33 -27
- package/dist/{authenticationManager-Dve7mGLe.d.ts → authenticationManager-CdPbNS2H.d.ts} +3 -3
- package/dist/{authenticationManager-BM4LzyV7.esm.js → authenticationManager-Dtl1vcET.esm.js} +6 -6
- package/dist/{authenticationStateMachine-Chx3ySdT.esm.js → authenticationStateMachine-D-hOlg8p.esm.js} +8 -8
- package/dist/avatar.d.ts +3 -0
- package/dist/avatar.esm.js +3 -0
- package/dist/{backCameraStream-iftkf3rd.esm.js → backCameraStream-ZyqrFyjO.esm.js} +3 -3
- package/dist/{browser-DlFgHpoC-7tbRR1aR.esm.js → browser-DlFgHpoC-qLKs75Qp.esm.js} +1 -1
- package/dist/{browserSimulation-CGjpdNA1.esm.js → browserSimulation-TsSoavQv.esm.js} +153 -1216
- package/dist/camera-DUkgmYMo.esm.js +79 -0
- package/dist/camera.d.ts +7 -1
- package/dist/camera.esm.js +4 -4
- package/dist/{StreamCanvasCapture-Ctgyx-oD.d.ts → canvas-CJUmoXSD.d.ts} +1 -41
- package/dist/certificate-issuance.d.ts +31 -30
- package/dist/certificate-issuance.esm.js +8 -7
- package/dist/{certificateIssuanceStateMachine-CLNXtXaC.esm.js → certificateIssuanceStateMachine-C07m7qtP.esm.js} +4 -4
- package/dist/clientLifecycle-Ct7h9uxx.esm.js +534 -0
- package/dist/consent.d.ts +4 -3
- package/dist/consent.esm.js +7 -6
- package/dist/{consentManager-psDCeJ0E.esm.js → consentManager-BtnPZUW4.esm.js} +4 -3
- package/dist/{consentManager-BqUGU_YD.d.ts → consentManager-DufVo9D9.d.ts} +52 -52
- package/dist/{consentStateMachine-DRsFFSHE.esm.js → consentStateMachine-DO2JqoZW.esm.js} +3 -3
- package/dist/cpf-ocr.d.ts +4 -3
- package/dist/cpf-ocr.esm.js +7 -6
- package/dist/{cpfOcrManager-BxcgxvgO.esm.js → cpfOcrManager-C4rLgKsu.esm.js} +6 -5
- package/dist/{cpfOcrManager-B2u9hMzd.d.ts → cpfOcrManager-DqZZ94Gt.d.ts} +19 -19
- package/dist/createFaceAvatar-B8pFpy6o.d.ts +401 -0
- package/dist/createFaceAvatar-BOHDKQRq.esm.js +46 -0
- package/dist/cross-document-data-match.d.ts +2 -1
- package/dist/cross-document-data-match.esm.js +6 -5
- package/dist/curp-validation.d.ts +10 -7
- package/dist/curp-validation.esm.js +7 -6
- package/dist/{curpValidationManager-BgLDw0Ub.esm.js → curpValidationManager-BafobPXC.esm.js} +4 -3
- package/dist/{curpValidationManager-Bt6CVD8b.d.ts → curpValidationManager-Co6LZAHT.d.ts} +3 -3
- package/dist/{curpValidationStateMachine-BK_wJ48C.esm.js → curpValidationStateMachine-DXTPK6vI.esm.js} +3 -3
- package/dist/custom-fields.d.ts +3 -2
- package/dist/custom-fields.esm.js +6 -5
- package/dist/custom-watchlist.d.ts +2 -1
- package/dist/custom-watchlist.esm.js +6 -5
- package/dist/{customWatchlistStateMachine-Bi4P59HM.esm.js → customWatchlistStateMachine-B4G3Chkx.esm.js} +3 -3
- package/dist/{deepsightLoader-BMmvk0X6.esm.js → deepsightLoader-DHSVD776.esm.js} +14 -13
- package/dist/{deepsightService-CEZrdiW0.esm.js → deepsightService-CDahSjGP.esm.js} +9 -38
- package/dist/deepsightService-CMB9XjES.d.ts +69 -0
- package/dist/device.d.ts +9 -1
- package/dist/device.esm.js +5 -5
- package/dist/document-capture.d.ts +175 -174
- package/dist/document-capture.esm.js +14 -13
- package/dist/document-upload.d.ts +48 -47
- package/dist/document-upload.esm.js +9 -8
- package/dist/{documentCaptureStateMachine-MpwpJO7t.esm.js → documentCaptureStateMachine-DSOX2epf.esm.js} +7 -7
- package/dist/dynamic-forms.d.ts +4 -192
- package/dist/dynamic-forms.esm.js +8 -160
- package/dist/dynamicFormsManager-BOefZbyF.esm.js +168 -0
- package/dist/dynamicFormsManager-CUYLOj9g.d.ts +239 -0
- package/dist/{dynamicFormsStateMachine-Do84A4uU.esm.js → dynamicFormsStateMachine-BXHcaocI.esm.js} +4 -4
- package/dist/ekyb.d.ts +9 -6
- package/dist/ekyb.esm.js +20 -17
- package/dist/{ekybStateMachine-nsuPOw3f.esm.js → ekybStateMachine-CCSeqjCt.esm.js} +5 -5
- package/dist/ekyc.d.ts +4 -3
- package/dist/ekyc.esm.js +9 -8
- package/dist/{ekycStateMachine-DcynX0rj.esm.js → ekycStateMachine-DkLVTOyA.esm.js} +5 -5
- package/dist/electronic-signature.d.ts +4 -3
- package/dist/electronic-signature.esm.js +9 -8
- package/dist/{electronicSignatureManager-B63aAuI5.esm.js → electronicSignatureManager-DjzUzqZj.esm.js} +50 -87
- package/dist/email.d.ts +5 -4
- package/dist/email.esm.js +9 -8
- package/dist/{emailManager-DxHjAe5u.esm.js → emailManager-B_XzEsXH.esm.js} +5 -4
- package/dist/{emailManager-C6D2u4mQ.d.ts → emailManager-fHASH6uo.d.ts} +3 -3
- package/dist/{emailStateMachine-758f34gg.esm.js → emailStateMachine-fqJ42b19.esm.js} +5 -5
- package/dist/{endpoints-BM2_j_IE.esm.js → endpoints-BzMJFAPV.esm.js} +13 -0
- package/dist/{events-DN-u67gb.esm.js → events-CqGY1yMq.esm.js} +2 -188
- package/dist/events.d.ts +2 -0
- package/dist/events.esm.js +3 -2
- package/dist/extensibility.d.ts +37 -26
- package/dist/extensibility.esm.js +74 -59
- package/dist/{externalFetch-crimxkN9.esm.js → externalFetch-CyhBfD-n.esm.js} +1 -1
- package/dist/face-match.d.ts +2 -2
- package/dist/face-match.esm.js +6 -5
- package/dist/{faceCaptureManagerFactory-BNXZchWX.esm.js → faceCaptureManagerFactory-2brKTzMb.esm.js} +25 -16
- package/dist/faceCaptureManagerFactory-CGKbf7zt.d.ts +400 -0
- package/dist/{faceCaptureSetup-Dqb09D24.esm.js → faceCaptureSetup-CDUVU1nl.esm.js} +97 -13
- package/dist/{faceMatchStateMachine-FikRaUZH.esm.js → faceMatchStateMachine-DUeUjEPx.esm.js} +3 -3
- package/dist/field-comparison.d.ts +4 -3
- package/dist/field-comparison.esm.js +6 -5
- package/dist/{fieldComparisonManager-Dic0DVgl.esm.js → fieldComparisonManager-B9W0a9A5.esm.js} +5 -4
- package/dist/{fieldComparisonManager-BXc6-DJv.d.ts → fieldComparisonManager-DdLqDeB2.d.ts} +2 -2
- package/dist/fiscal-qr.d.ts +5 -3
- package/dist/fiscal-qr.esm.js +13 -12
- package/dist/flow-events.d.ts +8 -6
- package/dist/flow.d.ts +21 -13
- package/dist/flow.esm.js +28 -19
- package/dist/{flowCompletionService-CdGDKv0z.d.ts → flowCompletionService-BIqSTZcd.d.ts} +2 -1
- package/dist/{flowCompletionService-D_CsiDZM.esm.js → flowCompletionService-qEqh_g14.esm.js} +3 -3
- package/dist/{flowServices-ar5DXv71.esm.js → flowServices-C4piblgx.esm.js} +24 -9
- package/dist/geolocation.d.ts +4 -127
- package/dist/geolocation.esm.js +8 -115
- package/dist/geolocationManager-BP2Do9O-.esm.js +123 -0
- package/dist/geolocationManager-Cs50eRlC.d.ts +156 -0
- package/dist/{geolocationStateMachine-BWjrMGS_.esm.js → geolocationStateMachine-BYfOOOG0.esm.js} +4 -4
- package/dist/{getDeviceClass-rXKlXywy.esm.js → getDeviceClass-DGGzzfqm.esm.js} +1 -1
- package/dist/getDeviceData-TrKM8NPh.esm.js +101 -0
- package/dist/government-validation.d.ts +4 -3
- package/dist/government-validation.esm.js +8 -7
- package/dist/{governmentValidationStateMachine-BoF7U1of.esm.js → governmentValidationStateMachine-CwoPPO8b.esm.js} +5 -5
- package/dist/home.d.ts +18 -15
- package/dist/home.esm.js +4 -3
- package/dist/http.esm.js +2 -2
- package/dist/id-ocr.d.ts +4 -625
- package/dist/id-ocr.esm.js +8 -84
- package/dist/id-verification.d.ts +28 -27
- package/dist/id-verification.esm.js +6 -5
- package/dist/id.d.ts +16 -11
- package/dist/id.esm.js +39 -32
- package/dist/idCaptureDefaults-DNJON8Xo.esm.js +188 -0
- package/dist/{idCaptureManager-BvGUSN2e.d.ts → idCaptureManager-BVdvfJys.d.ts} +40 -10
- package/dist/{idCaptureManager-Bm6Wm6Qv.esm.js → idCaptureManager-Bo9DCQSU.esm.js} +14 -11
- package/dist/{idCaptureStateMachine-D1YhOj6n.esm.js → idCaptureStateMachine-BeDidMLU.esm.js} +395 -382
- package/dist/idOcrManager-BkRDrpZu.esm.js +92 -0
- package/dist/idOcrManager-CJzrmM91.d.ts +641 -0
- package/dist/{idOcrStateMachine-YMCDGplq.esm.js → idOcrStateMachine-DRZc4FBl.esm.js} +5 -5
- package/dist/{idVerificationStateMachine-Bo1IYuZH.esm.js → idVerificationStateMachine-oqiERKpg.esm.js} +3 -3
- package/dist/identity-reuse.d.ts +4 -3
- package/dist/identity-reuse.esm.js +7 -6
- package/dist/{identityReuseManager-D0knIrOy.esm.js → identityReuseManager-Bu62LToE.esm.js} +4 -3
- package/dist/{identityReuseManager-DcWSvC-A.d.ts → identityReuseManager-TWKbXuvY.d.ts} +33 -33
- package/dist/{identityReuseStateMachine-CSQfZOqD.esm.js → identityReuseStateMachine-BmONeF6B.esm.js} +3 -3
- package/dist/{index-BgxYUYuD.d.ts → index-DtUlD-bz.d.ts} +2 -2
- package/dist/{index-DV134v62.d.ts → index-Icld-cKW.d.ts} +175 -295
- package/dist/index.d.ts +3 -3
- package/dist/index.esm.js +16 -13
- package/dist/{invokeOnCaptureCallback-Dzemudhk.esm.js → invokeOnCaptureCallback-v_PV_IJz.esm.js} +1 -1
- package/dist/{lib-7ZQ9BdKH.esm.js → lib-B050WTth.esm.js} +1 -1
- package/dist/mandatory-consent.d.ts +10 -7
- package/dist/mandatory-consent.esm.js +7 -6
- package/dist/{mandatoryConsentManager-Tzl5Qd35.d.ts → mandatoryConsentManager-Bmdjo14S.d.ts} +50 -50
- package/dist/{mandatoryConsentManager-Lon46nPQ.esm.js → mandatoryConsentManager-CQ3jirlZ.esm.js} +4 -3
- package/dist/{mandatoryConsentStateMachine-D_dZ7IF6.esm.js → mandatoryConsentStateMachine-DkJJLHqC.esm.js} +3 -3
- package/dist/mediaRecorderOptions-C3NAkVgK.esm.js +42 -0
- package/dist/mediapipeShared-CRAKVElv.esm.js +67 -0
- package/dist/{recordingService-CxMJP4tQ.esm.js → onDeviceFaceResults-DVBggeq8.esm.js} +71 -389
- package/dist/{openviduLazy-oAXXI9w_.esm.js → openviduLazy-BTOIauGP.esm.js} +2 -2
- package/dist/openviduLazy-Dov8oKfL.esm.js +3 -0
- package/dist/{permissionGuards-D-Z-lgNj.esm.js → permissionGuards-BR2oN573.esm.js} +1 -1
- package/dist/{permissionServices-CPDboRoE.esm.js → permissionServices-BJhGL13R.esm.js} +7 -4
- package/dist/personhood.d.ts +534 -0
- package/dist/personhood.esm.js +1494 -0
- package/dist/phone.d.ts +5 -4
- package/dist/phone.esm.js +9 -8
- package/dist/{phoneManager-TSq1Ief6.d.ts → phoneManager-BOTcjXgs.d.ts} +3 -3
- package/dist/{phoneManager-Blt4Oc2P.esm.js → phoneManager-BWlxqbyD.esm.js} +5 -4
- package/dist/{phoneStateMachine-W3c6Z8sj.esm.js → phoneStateMachine-B_V9nODs.esm.js} +5 -5
- package/dist/{qe-signature-CQLK6LKE.esm.js → qe-signature-BhFnI9pT.esm.js} +1 -1
- package/dist/qe-signature.d.ts +4 -3
- package/dist/qe-signature.esm.js +10 -9
- package/dist/recordingService-m_1xCthr.esm.js +347 -0
- package/dist/redirect-to-mobile.d.ts +4 -3
- package/dist/redirect-to-mobile.esm.js +9 -8
- package/dist/{redirectToMobileManager-DCvpKdkD.esm.js → redirectToMobileManager-BaAo9rgi.esm.js} +5 -4
- package/dist/{redirectToMobileManager-yOHAmwg-.d.ts → redirectToMobileManager-Br0KZK1G.d.ts} +2 -2
- package/dist/{redirectToMobileStateMachine-DC9z4Vfu.esm.js → redirectToMobileStateMachine-DoAnf2ql.esm.js} +10 -12
- package/dist/{runChildModule-C9G0wfVC.esm.js → runChildModule-0nQfjVVo.esm.js} +3 -3
- package/dist/selfie.d.ts +19 -12
- package/dist/selfie.esm.js +34 -28
- package/dist/{selfieManager-BRL6c_Oc.esm.js → selfieManager-D_ZFERsE.esm.js} +6 -6
- package/dist/{selfieManager-imY2dAcH.d.ts → selfieManager-R0Jw5sjb.d.ts} +3 -3
- package/dist/{selfieStateMachine-D2Q0uwDK.esm.js → selfieStateMachine-CIgeeiN9.esm.js} +4 -4
- package/dist/{session-Be_IA1e0.esm.js → session-9jIfKFCc.esm.js} +3 -3
- package/dist/session.d.ts +7 -5
- package/dist/session.esm.js +16 -14
- package/dist/{sessionInitializer-CaiGA8GP.esm.js → sessionInitializer-C_TYIgyk.esm.js} +11 -107
- package/dist/{setup-BJZAkajt.d.ts → setup-CpRnXxn8.d.ts} +16 -3
- package/dist/setup-DHc6OaHm.esm.js +562 -0
- package/dist/signature.d.ts +3 -2
- package/dist/signature.esm.js +6 -5
- package/dist/{signatureStateMachine-DAxXmMrk.esm.js → signatureStateMachine-DtoiPzys.esm.js} +3 -3
- package/dist/{stats-DntyIiGr.esm.js → stats-CYcScXcO.esm.js} +2 -2
- package/dist/stats.esm.js +3 -3
- package/dist/thumbmarkAdapter-fHBUDlAP.esm.js +1194 -0
- package/dist/{tri-CtxWthxz.esm.js → tri-BG1iJsr4.esm.js} +12 -2
- package/dist/tri.d.ts +1 -1
- package/dist/{tri.esm-CrWAulDi.esm.js → tri.esm-DUC01NgO.esm.js} +27 -23
- package/dist/tri.esm.js +2 -2
- package/dist/trust-graph.d.ts +4 -3
- package/dist/trust-graph.esm.js +4 -3
- package/dist/{types-DpTWgfKY.d.ts → types-BklZ_Wne.d.ts} +1 -1
- package/dist/{types-Dv-9WPJX.d.ts → types-BsYXnC5s.d.ts} +39 -3
- package/dist/types-CxW2e0Ar.d.ts +132 -0
- package/dist/{types-Z9wv19v2.d.ts → types-DgGlgyZT.d.ts} +1 -1
- package/dist/types-ElOJAGaM.esm.js +189 -0
- package/dist/video-C2WIj6TS.esm.js +36 -0
- package/dist/video-selfie.d.ts +351 -0
- package/dist/video-selfie.esm.js +1509 -0
- package/dist/videoSelfieSteps-7M5vxKn-.esm.js +58 -0
- package/dist/{warmup--6HA3yUR.d.ts → warmup-BJZPQIiX.d.ts} +5 -1
- package/dist/wasm.d.ts +4 -4
- package/dist/wasm.esm.js +17 -14
- package/dist/watchlist-for-business.d.ts +2 -1
- package/dist/watchlist-for-business.esm.js +6 -5
- package/dist/watchlist.d.ts +2 -1
- package/dist/watchlist.esm.js +6 -5
- package/dist/{watchlistForBusinessStateMachine-DtefJb-D.esm.js → watchlistForBusinessStateMachine-DvEunDxs.esm.js} +3 -3
- package/dist/{watchlistStateMachine-B0aIS2_n.esm.js → watchlistStateMachine-AHXVf-TB.esm.js} +3 -3
- package/dist/workflow.d.ts +230 -98
- package/dist/workflow.esm.js +123 -79
- package/dist/{xstate.esm-Dkm1jy5u.esm.js → xstate.esm-Bomq1a0z.esm.js} +41 -1
- package/package.json +16 -1
- package/dist/IpifyProvider-oZf7Ke1O.esm.js +0 -167
- package/dist/camera-x4LjGTjZ.esm.js +0 -22
- package/dist/deepsightService-ByNKY5Jv.d.ts +0 -276
- package/dist/faceCaptureManagerFactory-CL-7T_vH.d.ts +0 -731
- package/dist/getBrowser-Dv8LZyHE.esm.js +0 -8
- package/dist/openviduLazy-B_s6jnEk.esm.js +0 -3
- package/dist/setup-C7tintPc.esm.js +0 -1064
- /package/dist/{Actor-fIPLXfoi.d.ts → Actor-CGEelYtQ.d.ts} +0 -0
- /package/dist/{BrowserTimerProvider-BVgutW_b.esm.js → BrowserTimerProvider-CHloo0eQ.esm.js} +0 -0
- /package/dist/{ITimerCapability-BvH0pDwp.esm.js → ITimerCapability-pltuG1E8.esm.js} +0 -0
- /package/dist/{MotionSensorProvider-C9fPAJdS.esm.js → MotionSensorProvider-DCbId4De.esm.js} +0 -0
- /package/dist/{apiError-D-GTvFrH.esm.js → apiError-DNS2OCEX.esm.js} +0 -0
- /package/dist/{camera-biGPWlmx.d.ts → camera-CNVUo-bC.d.ts} +0 -0
- /package/dist/{canvas-7uX2izHb.esm.js → canvas-_I95hkPg.esm.js} +0 -0
- /package/dist/{chunk-BK1xu56N.esm.js → chunk-CIKcdghV.esm.js} +0 -0
- /package/dist/{cpf-xBg-DFNn.esm.js → cpf-BKaho0j_.esm.js} +0 -0
- /package/dist/{dateUtils-8dCcuArE.esm.js → dateUtils-7-tQYRNN.esm.js} +0 -0
- /package/dist/{getDeviceClass-C0zrM97a.esm.js → getDeviceClass-DavNdcxh.esm.js} +0 -0
- /package/dist/{http-CfVTgMfU.esm.js → http-BkiUT7EB.esm.js} +0 -0
- /package/dist/{index-52_qi4bd.d.ts → index-XTtxaahe.d.ts} +0 -0
- /package/dist/{otp-D87RTwrx.esm.js → otp-Bfnzf7I3.esm.js} +0 -0
- /package/dist/{otp-BHJnjEEc.d.ts → otp-M4iy57XY.d.ts} +0 -0
- /package/dist/{platform-BfoqeM61.esm.js → platform-uIVQUnJP.esm.js} +0 -0
- /package/dist/{types-BdVOWGGW.esm.js → types-CMcxlSmH.esm.js} +0 -0
- /package/dist/{types-DYZja-k9.d.ts → types-D_IceWxT.d.ts} +0 -0
- /package/dist/{types-F0IXbaCB.d.ts → types-Duy2rDxF.d.ts} +0 -0
- /package/dist/{urlUtils-8RNHyW3x.esm.js → urlUtils-BZqFU9rR.esm.js} +0 -0
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import "./warmup-BJZPQIiX.js";
|
|
2
|
+
import { n as StateMachine, t as AnyStateMachine } from "./StateMachine-C_AY4cs7.js";
|
|
3
|
+
import { t as Manager } from "./Manager-CJ3G2zqi.js";
|
|
4
|
+
import { t as ActorRefFrom } from "./Actor-CGEelYtQ.js";
|
|
5
|
+
import { t as CameraStream } from "./camera-CNVUo-bC.js";
|
|
6
|
+
import "./types-DgGlgyZT.js";
|
|
7
|
+
import "./types-D_IceWxT.js";
|
|
8
|
+
import { t as IncodeCanvas } from "./canvas-CJUmoXSD.js";
|
|
9
|
+
import "./createFaceAvatar-B8pFpy6o.js";
|
|
10
|
+
import "./types-BsYXnC5s.js";
|
|
11
|
+
import { i as IStorageCapability, t as IWasmUtilCapability } from "./IWasmUtilCapability-d2XvzaCk.js";
|
|
12
|
+
import { n as PermissionStatus, t as PermissionResult } from "./types-Duy2rDxF.js";
|
|
13
|
+
import { n as DetectionStatus } from "./types-CxW2e0Ar.js";
|
|
14
|
+
import { t as FaceDetectionProvider } from "./FaceDetectionProvider-B78455D4.js";
|
|
15
|
+
import { t as StreamCanvasCapture } from "./StreamCanvasCapture-DS1TOoiH.js";
|
|
16
|
+
import { t as DeepsightService } from "./deepsightService-CMB9XjES.js";
|
|
17
|
+
|
|
18
|
+
//#region src/modules/personhood/types.d.ts
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Head pose (degrees) computed per-frame from the WASM face detector.
|
|
22
|
+
* Used internally by the personhood detection actor to accumulate the
|
|
23
|
+
* yaw/pitch range that feeds the server-side `headMotion` spoof check.
|
|
24
|
+
*
|
|
25
|
+
* Re-exported from `@incodetech/core/personhood` as a convenience type
|
|
26
|
+
* for integrators running their own face-tracking pipelines (e.g.
|
|
27
|
+
* MediaPipe FaceLandmarker) that want to share a pose shape with
|
|
28
|
+
* other code that consumes personhood internals — the SDK itself
|
|
29
|
+
* does not expose a runtime pose stream.
|
|
30
|
+
*
|
|
31
|
+
* `faceSizeRatio` is an orientation-invariant 0–1 proxy for how close
|
|
32
|
+
* the user is to the camera, computed by the producer as
|
|
33
|
+
* `sqrt(face.width * face.height) / min(frame.width, frame.height)`.
|
|
34
|
+
* Same value on landscape (laptop) or portrait (phone) cameras since
|
|
35
|
+
* the denominator is the frame's *narrower* dimension. Optional —
|
|
36
|
+
* absent when the producer doesn't have access to frame size.
|
|
37
|
+
*/
|
|
38
|
+
type HeadPose = {
|
|
39
|
+
pitch: number;
|
|
40
|
+
yaw: number;
|
|
41
|
+
roll: number;
|
|
42
|
+
faceSizeRatio?: number;
|
|
43
|
+
};
|
|
44
|
+
/** Signals we hand back to the integrator alongside the human verdict. */
|
|
45
|
+
type DeviceBehavioralSignals = {
|
|
46
|
+
/** Visitor fingerprint hash from the Thumbmark provider. */
|
|
47
|
+
deviceFingerprint: string;
|
|
48
|
+
/** Standard browser / OS info (model, os, browser name + version). */
|
|
49
|
+
userAgentClass: string;
|
|
50
|
+
/** Matches automation markers (phantom, nightmare, domAutomation, etc.). */
|
|
51
|
+
emulator: boolean;
|
|
52
|
+
/** `navigator.webdriver` is truthy — chromedriver / geckodriver / playwright. */
|
|
53
|
+
webdriver: boolean;
|
|
54
|
+
/** Liveness / injection surface reported by local detection. */
|
|
55
|
+
headlessHints: readonly string[];
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* One element of the `spoofCheckResults` array. Carries a single
|
|
59
|
+
* anti-spoof / liveness / automation check the on-device pipeline
|
|
60
|
+
* ran, with its outcome and (when failed) a short tag explaining
|
|
61
|
+
* why. The same shape is sent to `/omni/personhood/verify` and
|
|
62
|
+
* exposed on {@link PersonhoodVerdict.spoofCheckResults} so
|
|
63
|
+
* integrators and UIs can introspect what passed and what failed
|
|
64
|
+
* without parsing the comma-joined `reason` string.
|
|
65
|
+
*
|
|
66
|
+
* Check ids the SDK currently emits:
|
|
67
|
+
* - `physicalAttack` — Deepsight pipeline anti-spoof. Failed
|
|
68
|
+
* when `analysisStatus` carries an explicit spoof signal
|
|
69
|
+
* (`spoof_suspected`, `injection`, etc.).
|
|
70
|
+
* - `virtualCamera` — label-based detection of OBS / ManyCam /
|
|
71
|
+
* etc. on the camera track.
|
|
72
|
+
* - `motionLiveness` — Deepsight's motion-based liveness check
|
|
73
|
+
* (accelerometer + temporal frame analysis).
|
|
74
|
+
* - `headMotion` — accumulated yaw + pitch range. Failed
|
|
75
|
+
* when below the minimum motion threshold (user held still).
|
|
76
|
+
* - `faceDetection` — terminal detection outcome (success vs
|
|
77
|
+
* timeout / error).
|
|
78
|
+
* - `webdriver` — `navigator.webdriver` is truthy.
|
|
79
|
+
* - `emulator` — automation framework markers
|
|
80
|
+
* (PhantomJS / Selenium / Nightmare / etc.).
|
|
81
|
+
* - `headlessBrowser` — headless-browser fingerprinting hints.
|
|
82
|
+
*
|
|
83
|
+
* `result: 'unknown'` is reserved for checks that ran but couldn't
|
|
84
|
+
* render a definitive verdict (e.g. desktop with no accelerometer
|
|
85
|
+
* permission for motion liveness). Absence of evidence is
|
|
86
|
+
* intentionally not the same as evidence of a spoof.
|
|
87
|
+
*
|
|
88
|
+
* `reason` is populated only when `result === 'failed'` and gives
|
|
89
|
+
* a short stable tag the integrator's server can pattern-match on:
|
|
90
|
+
* the same tags that show up in the verdict's `reason` string
|
|
91
|
+
* (`no_motion`, `spoof_suspected`, `virtual_camera`, etc.) plus
|
|
92
|
+
* raw underlying values (`analysisStatus` strings, detection
|
|
93
|
+
* outcome) where useful.
|
|
94
|
+
*/
|
|
95
|
+
type SpoofCheckResult = {
|
|
96
|
+
check: string;
|
|
97
|
+
result: 'passed' | 'failed' | 'unknown';
|
|
98
|
+
reason?: string;
|
|
99
|
+
};
|
|
100
|
+
/** On-device liveness outcome — filled in after the detection loop succeeds. */
|
|
101
|
+
type LivenessOutcome = {
|
|
102
|
+
/** True when the camera stream is a known virtual cam (OBS/ManyCam/etc.). */
|
|
103
|
+
virtualCamera: boolean;
|
|
104
|
+
/** Opaque Deepsight pipeline check status (string like "PASS"/"FAIL"). */
|
|
105
|
+
analysisStatus: string;
|
|
106
|
+
/** Deepsight motion status string. */
|
|
107
|
+
motionStatus: string;
|
|
108
|
+
/** Range of yaw observed during detection (degrees). */
|
|
109
|
+
yawRange: number;
|
|
110
|
+
/** Range of pitch observed during detection (degrees). */
|
|
111
|
+
pitchRange: number;
|
|
112
|
+
/**
|
|
113
|
+
* Full Deepsight metadata blob from `wasmUtil.getMetadata()`. Opaque
|
|
114
|
+
* string (typically a JSON-serialized payload of the pipeline's
|
|
115
|
+
* collected signals — frame quality, motion features, environment
|
|
116
|
+
* fingerprints, etc.) intended for server-side cross-referencing
|
|
117
|
+
* with the evidence record. Empty when the Deepsight pipeline isn't
|
|
118
|
+
* available (e.g. WASM init failed).
|
|
119
|
+
*/
|
|
120
|
+
metadata: string;
|
|
121
|
+
/**
|
|
122
|
+
* Deepsight pipeline state string (e.g. running / completed / error
|
|
123
|
+
* substates). Useful for diagnosing why an analysis status came
|
|
124
|
+
* back negative — the state often carries the underlying cause that
|
|
125
|
+
* `analysisStatus` only summarizes.
|
|
126
|
+
*/
|
|
127
|
+
pipelineState: string;
|
|
128
|
+
};
|
|
129
|
+
/** Final verdict returned from `/omni/personhood/verify`. */
|
|
130
|
+
type PersonhoodVerdict = {
|
|
131
|
+
human: boolean;
|
|
132
|
+
confidence: number;
|
|
133
|
+
evidenceId: string;
|
|
134
|
+
/**
|
|
135
|
+
* Comma-joined list of failure tags when `human === false`. Same
|
|
136
|
+
* tags that appear individually in {@link spoofCheckResults}
|
|
137
|
+
* entries' `reason` fields — kept for backward compat and quick
|
|
138
|
+
* inspection. Undefined when the verdict is human.
|
|
139
|
+
*/
|
|
140
|
+
reason?: string;
|
|
141
|
+
signals: DeviceBehavioralSignals;
|
|
142
|
+
/** Present for the on-device path. Absent on server fallback. */
|
|
143
|
+
liveness?: LivenessOutcome;
|
|
144
|
+
/**
|
|
145
|
+
* Per-check breakdown of every anti-spoof / liveness / automation
|
|
146
|
+
* gate the on-device pipeline ran. Lets integrators see WHICH
|
|
147
|
+
* checks passed or failed instead of having to parse the
|
|
148
|
+
* collapsed `reason` string. The same array is the body of the
|
|
149
|
+
* `/omni/personhood/verify` POST. Empty on the server-fallback
|
|
150
|
+
* path (no on-device pipeline ran).
|
|
151
|
+
*/
|
|
152
|
+
spoofCheckResults: SpoofCheckResult[];
|
|
153
|
+
};
|
|
154
|
+
type PersonhoodConfig = {
|
|
155
|
+
/** Integrator's site key (equivalent to a reCAPTCHA site key). */
|
|
156
|
+
siteKey: string;
|
|
157
|
+
/**
|
|
158
|
+
* OAuth2 client-credentials used to mint the `Authorization: Bearer`
|
|
159
|
+
* token for the verify hop (`POST /omni/oauth2/token`,
|
|
160
|
+
* `grant_type=client_credentials&scope=openid`). Required for the
|
|
161
|
+
* live (non-mock) flow; without them the token fetch fails and the
|
|
162
|
+
* flow halts before the camera opens.
|
|
163
|
+
*
|
|
164
|
+
* ⚠️ These are sent from the browser, so `clientSecret` is exposed to
|
|
165
|
+
* anyone who can read the page's source / network traffic. Acceptable
|
|
166
|
+
* only where that exposure is tolerable; a server-minted Bearer token
|
|
167
|
+
* is the hardened alternative.
|
|
168
|
+
*/
|
|
169
|
+
clientId?: string;
|
|
170
|
+
clientSecret?: string;
|
|
171
|
+
/**
|
|
172
|
+
* Origin of the authorization server that mints the OAuth2 Bearer token
|
|
173
|
+
* (e.g. `https://auth.stage.incode.com`). The path is fixed — the token
|
|
174
|
+
* is `POST`ed to this origin's own `/oauth2/token`.
|
|
175
|
+
*
|
|
176
|
+
* When set, the browser calls the auth server DIRECTLY through a
|
|
177
|
+
* dedicated HTTP client (topology B): the auth origin is separate from
|
|
178
|
+
* the omni `apiURL`, so this is a genuine cross-origin call and the auth
|
|
179
|
+
* server must allow the integrator's `Origin` (CORS). The dedicated
|
|
180
|
+
* client inherits the omni client's `customHeaders` (notably
|
|
181
|
+
* `x-api-key`, which the auth server requires) from the active SDK
|
|
182
|
+
* config, so no extra credential plumbing is needed here.
|
|
183
|
+
*
|
|
184
|
+
* When omitted, the token is minted through the shared omni client at
|
|
185
|
+
* `/omni/oauth2/token` — i.e. the omni gateway is expected to front the
|
|
186
|
+
* auth server (topology A). Single-origin deployments need not set this.
|
|
187
|
+
*
|
|
188
|
+
* Only the auth-token hop honors this; the verify hop
|
|
189
|
+
* (`/omni/personhood/verify`) always uses the omni `apiURL`.
|
|
190
|
+
*/
|
|
191
|
+
authBaseUrl?: string;
|
|
192
|
+
/**
|
|
193
|
+
* Minimum confidence required to pass. Default: `0.75`
|
|
194
|
+
* (`DEFAULT_PERSONHOOD_THRESHOLD`). Exposed so integrators can tighten or
|
|
195
|
+
* loosen gates per use case.
|
|
196
|
+
*/
|
|
197
|
+
threshold?: number;
|
|
198
|
+
/**
|
|
199
|
+
* When true, `/omni/personhood/verify` is bypassed and a canned verdict
|
|
200
|
+
* is returned (the local on-device verdict is used as-is). Defaults to
|
|
201
|
+
* `false`. Set to `true` in dev environments where the backend is not
|
|
202
|
+
* yet available.
|
|
203
|
+
*/
|
|
204
|
+
mockVerify?: boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Time-to-live (ms) for cached proofs of the same browser session. Not yet
|
|
207
|
+
* enforced at phase 0 (documented for forward-compat).
|
|
208
|
+
*/
|
|
209
|
+
cacheTtlMs?: number;
|
|
210
|
+
/** Optional: called every time an interesting signal is observed. */
|
|
211
|
+
onSignal?: (event: {
|
|
212
|
+
type: 'pose' | 'detection' | 'verdict' | 'error';
|
|
213
|
+
payload: unknown;
|
|
214
|
+
}) => void;
|
|
215
|
+
/** Hides the initial tutorial screen. Default: false. */
|
|
216
|
+
showTutorial?: boolean;
|
|
217
|
+
/**
|
|
218
|
+
* When true, the detection flow auto-completes with whatever frame
|
|
219
|
+
* is available after a short hard deadline, regardless of why
|
|
220
|
+
* WASM's autocapture criteria didn't fire (user too far, bad
|
|
221
|
+
* framing, low light, occlusion, etc). The deadline starts ticking
|
|
222
|
+
* the moment the camera produces its first frame — not when
|
|
223
|
+
* detection begins — so a slow camera cold-start doesn't eat into
|
|
224
|
+
* the user's capture window. Once the deadline lands, the
|
|
225
|
+
* provider's best frame (or the most recent processed frame if no
|
|
226
|
+
* best-shot was recorded) is pushed through to liveness analysis.
|
|
227
|
+
*
|
|
228
|
+
* The resulting verdict usually has lower confidence — a non-ideal
|
|
229
|
+
* frame gives the detector less signal — but at least produces a
|
|
230
|
+
* definitive `human: true | false` outcome instead of leaving the
|
|
231
|
+
* modal stuck.
|
|
232
|
+
*
|
|
233
|
+
* If the camera never produces a frame at all (e.g. the user
|
|
234
|
+
* blocked permission mid-flow, browser failed to start the stream)
|
|
235
|
+
* this flag does nothing — there's literally no frame to capture
|
|
236
|
+
* — and the standard error path applies.
|
|
237
|
+
*
|
|
238
|
+
* Default: `false`.
|
|
239
|
+
*/
|
|
240
|
+
autoComplete?: boolean;
|
|
241
|
+
};
|
|
242
|
+
type PersonhoodDependencies = {
|
|
243
|
+
storage: IStorageCapability;
|
|
244
|
+
getWasmUtil: () => Promise<IWasmUtilCapability>;
|
|
245
|
+
};
|
|
246
|
+
declare const PERSONHOOD_ERROR_CODES: {
|
|
247
|
+
readonly CAMERA_DENIED: "CAMERA_DENIED";
|
|
248
|
+
readonly DETECTION_FAILED: "DETECTION_FAILED";
|
|
249
|
+
/**
|
|
250
|
+
* The OAuth2 token fetch (`POST /omni/oauth2/token`,
|
|
251
|
+
* client-credentials) failed — non-2xx, network error, or no
|
|
252
|
+
* `access_token` in the response. The flow halts before the user
|
|
253
|
+
* opens the camera so a misconfigured `clientId` / `clientSecret`
|
|
254
|
+
* surfaces immediately instead of walking them through a capture we
|
|
255
|
+
* can't authenticate the verify hop for.
|
|
256
|
+
*/
|
|
257
|
+
readonly AUTH_TOKEN_FAILED: "AUTH_TOKEN_FAILED";
|
|
258
|
+
readonly VERIFY_FAILED: "VERIFY_FAILED";
|
|
259
|
+
readonly INJECTION_SUSPECTED: "INJECTION_SUSPECTED";
|
|
260
|
+
readonly EMULATOR_DETECTED: "EMULATOR_DETECTED";
|
|
261
|
+
readonly TIMEOUT: "TIMEOUT";
|
|
262
|
+
readonly UNKNOWN: "UNKNOWN";
|
|
263
|
+
};
|
|
264
|
+
type PersonhoodErrorCode = (typeof PERSONHOOD_ERROR_CODES)[keyof typeof PERSONHOOD_ERROR_CODES];
|
|
265
|
+
//#endregion
|
|
266
|
+
//#region src/modules/personhood/personhoodStateMachine.d.ts
|
|
267
|
+
type PersonhoodInput = {
|
|
268
|
+
config: PersonhoodConfig;
|
|
269
|
+
dependencies: PersonhoodDependencies;
|
|
270
|
+
};
|
|
271
|
+
type PersonhoodMachineContext = {
|
|
272
|
+
config: PersonhoodConfig;
|
|
273
|
+
dependencies: PersonhoodDependencies;
|
|
274
|
+
permissionResult: PermissionResult | 'refresh' | undefined;
|
|
275
|
+
/**
|
|
276
|
+
* Why the server-fallback path was taken, so `requestServerFallback` reports
|
|
277
|
+
* the real cause instead of a hardcoded value. `undefined` means
|
|
278
|
+
* `permission_denied` (the original/most common cause).
|
|
279
|
+
*/
|
|
280
|
+
fallbackReason: 'no_camera' | 'permission_denied' | 'unsupported_browser' | undefined;
|
|
281
|
+
stream: CameraStream | undefined;
|
|
282
|
+
provider: FaceDetectionProvider | undefined;
|
|
283
|
+
frameCapturer: StreamCanvasCapture | undefined;
|
|
284
|
+
deepsightService: DeepsightService | undefined;
|
|
285
|
+
detectionStatus: DetectionStatus;
|
|
286
|
+
/**
|
|
287
|
+
* Yaw + pitch ranges captured during detection (in degrees). Accumulated
|
|
288
|
+
* in the detection actor's closure and committed to context once when
|
|
289
|
+
* DETECTION_SUCCESS fires — not per-frame. Pose itself never lives in
|
|
290
|
+
* context: per-frame samples are consumed inside the detection actor
|
|
291
|
+
* (and discarded) so the manager-subscribed UI tree doesn't churn at
|
|
292
|
+
* camera frame rate.
|
|
293
|
+
*/
|
|
294
|
+
yawRange: number;
|
|
295
|
+
pitchRange: number;
|
|
296
|
+
capturedImage: IncodeCanvas | undefined;
|
|
297
|
+
livenessOutcome: LivenessOutcome | undefined;
|
|
298
|
+
signals: DeviceBehavioralSignals | undefined;
|
|
299
|
+
/**
|
|
300
|
+
* Personhood session token from `GET /omni/personhood/token`. Lives
|
|
301
|
+
* in actor context (not a module-level slot) so two
|
|
302
|
+
* `createPersonhoodManager()` instances active concurrently can't
|
|
303
|
+
* trample each other's tokens, and so `actor.stop()` cleans it up
|
|
304
|
+
* implicitly. Threaded into the `analyzeLiveness` and
|
|
305
|
+
* `verifyOnDevice` actor inputs; those actors attach it as an
|
|
306
|
+
* `Authorization: Bearer` header explicitly rather than going
|
|
307
|
+
* through the shared `api` wrapper's auto-injection (which only
|
|
308
|
+
* carries `currentToken` for the main session). `undefined` until
|
|
309
|
+
* the parallel-init phase completes.
|
|
310
|
+
*/
|
|
311
|
+
token: string | undefined;
|
|
312
|
+
/**
|
|
313
|
+
* Verdict computed locally from device signals + on-device
|
|
314
|
+
* liveness analysis. Kept separately from `verdict` (the final,
|
|
315
|
+
* server-authoritative one) so the verify-on-server step can use
|
|
316
|
+
* it as a fallback when the network call fails. Once verify
|
|
317
|
+
* succeeds, `verdict` is the server's response and this stays as
|
|
318
|
+
* a debug reference; integrators only see `verdict`.
|
|
319
|
+
*/
|
|
320
|
+
localVerdict: PersonhoodVerdict | undefined;
|
|
321
|
+
verdict: PersonhoodVerdict | undefined;
|
|
322
|
+
error: {
|
|
323
|
+
code: PersonhoodErrorCode;
|
|
324
|
+
message?: string;
|
|
325
|
+
} | undefined;
|
|
326
|
+
resetDetection: (() => void) | undefined;
|
|
327
|
+
};
|
|
328
|
+
type PersonhoodEvent = {
|
|
329
|
+
type: 'LOAD';
|
|
330
|
+
} | {
|
|
331
|
+
type: 'NEXT_STEP';
|
|
332
|
+
} | {
|
|
333
|
+
type: 'REQUEST_PERMISSION';
|
|
334
|
+
} | {
|
|
335
|
+
type: 'GO_TO_LEARN_MORE';
|
|
336
|
+
} | {
|
|
337
|
+
type: 'BACK';
|
|
338
|
+
} | {
|
|
339
|
+
type: 'QUIT';
|
|
340
|
+
} | {
|
|
341
|
+
type: 'RESET';
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Triggered from the UI when the user declines camera access but still
|
|
345
|
+
* wants a verdict (server fallback). Also dispatched automatically when
|
|
346
|
+
* the device has no camera at all.
|
|
347
|
+
*/ | {
|
|
348
|
+
type: 'USE_FALLBACK';
|
|
349
|
+
} | {
|
|
350
|
+
type: 'DETECTION_UPDATE';
|
|
351
|
+
status: DetectionStatus;
|
|
352
|
+
} | {
|
|
353
|
+
type: 'DETECTION_SUCCESS';
|
|
354
|
+
canvas?: IncodeCanvas;
|
|
355
|
+
/** Final observed head-pose yaw range (max − min) in degrees. */
|
|
356
|
+
yawRange: number;
|
|
357
|
+
/** Final observed head-pose pitch range (max − min) in degrees. */
|
|
358
|
+
pitchRange: number;
|
|
359
|
+
} | {
|
|
360
|
+
type: 'DETECTION_RESET_READY';
|
|
361
|
+
reset: () => void;
|
|
362
|
+
};
|
|
363
|
+
declare const _personhoodMachine: AnyStateMachine;
|
|
364
|
+
type PersonhoodMachine = typeof _personhoodMachine;
|
|
365
|
+
/**
|
|
366
|
+
* Public machine value. Typed as `AnyStateMachine` for declaration file
|
|
367
|
+
* portability — mirrors the convention used by `selfieMachine` and the
|
|
368
|
+
* other Core modules. Type safety is enforced by the `setup()` config
|
|
369
|
+
* above, not by the exported binding.
|
|
370
|
+
*/
|
|
371
|
+
declare const personhoodMachine: AnyStateMachine;
|
|
372
|
+
/**
|
|
373
|
+
* Narrow typed machine used by the Actor helpers. The non-context/event/
|
|
374
|
+
* input slots are widened to `any` because XState's full generic surface
|
|
375
|
+
* isn't worth threading through every module — we only need the slots
|
|
376
|
+
* the actor + manager actually consume. Same pattern as `SelfieMachine`.
|
|
377
|
+
*/
|
|
378
|
+
type PersonhoodTypedMachine = StateMachine<PersonhoodMachineContext, PersonhoodEvent, any, any, any, any, any, any, any, PersonhoodInput, any, any, any, any>;
|
|
379
|
+
//#endregion
|
|
380
|
+
//#region src/modules/personhood/personhoodActor.d.ts
|
|
381
|
+
type CreatePersonhoodActorOptions = {
|
|
382
|
+
config: PersonhoodConfig;
|
|
383
|
+
dependencies?: PersonhoodDependencies;
|
|
384
|
+
};
|
|
385
|
+
type PersonhoodActor = ActorRefFrom<PersonhoodTypedMachine>;
|
|
386
|
+
/**
|
|
387
|
+
* Creates and starts a Personhood XState actor. Defaults to the production
|
|
388
|
+
* browser storage + WASM providers; passing `dependencies` lets tests and the
|
|
389
|
+
* extensibility layer swap them for fakes.
|
|
390
|
+
*/
|
|
391
|
+
declare function createPersonhoodActor(options: CreatePersonhoodActorOptions): PersonhoodActor;
|
|
392
|
+
//#endregion
|
|
393
|
+
//#region src/modules/personhood/personhoodManager.d.ts
|
|
394
|
+
/** Initial state (before `load()` is invoked). */
|
|
395
|
+
type PersonhoodIdleState = {
|
|
396
|
+
status: 'idle';
|
|
397
|
+
};
|
|
398
|
+
/** Collecting local device + behavioural signals before any UI is shown. */
|
|
399
|
+
type PersonhoodLoadingState = {
|
|
400
|
+
status: 'loading';
|
|
401
|
+
phase: 'collectingSignals' | 'checkingPermission';
|
|
402
|
+
};
|
|
403
|
+
/** Optional opt-in tutorial screen. */
|
|
404
|
+
type PersonhoodTutorialState = {
|
|
405
|
+
status: 'tutorial';
|
|
406
|
+
};
|
|
407
|
+
/** Camera permission handshake. */
|
|
408
|
+
type PersonhoodPermissionsState = {
|
|
409
|
+
status: 'permissions';
|
|
410
|
+
permissionStatus: PermissionStatus | 'denied';
|
|
411
|
+
};
|
|
412
|
+
/**
|
|
413
|
+
* Live camera + avatar-driving state.
|
|
414
|
+
*
|
|
415
|
+
* `stream` is the active camera MediaStream. It is **not** displayed to
|
|
416
|
+
* the user by default (the whole UX promise is "stylized avatar, not
|
|
417
|
+
* raw camera feed"); it's exposed so integrators can render the avatar
|
|
418
|
+
* by piping the stream into their own face-tracking pipeline (e.g.
|
|
419
|
+
* MediaPipe FaceLandmarker). Head-pose is intentionally **not** on
|
|
420
|
+
* this state type — the SDK extracts pose internally for the
|
|
421
|
+
* server-side `headMotion` spoof check, but UI consumers should
|
|
422
|
+
* compute their own pose off `stream` rather than subscribing to a
|
|
423
|
+
* frame-rate channel here (which would re-render on every frame).
|
|
424
|
+
*/
|
|
425
|
+
type PersonhoodCaptureState = {
|
|
426
|
+
status: 'capture';
|
|
427
|
+
captureStatus: 'initializing' | 'detecting';
|
|
428
|
+
detectionStatus: DetectionStatus;
|
|
429
|
+
stream: MediaStream | undefined;
|
|
430
|
+
};
|
|
431
|
+
/** Synthesizing the local on-device verdict. No network call — the primary path. */
|
|
432
|
+
type PersonhoodProcessingState = {
|
|
433
|
+
status: 'processing';
|
|
434
|
+
/**
|
|
435
|
+
* Which stage of the local pipeline we're on:
|
|
436
|
+
* - 'analyzing' → Deepsight analysis + pose-motion guard (post-capture)
|
|
437
|
+
* - 'local' → synthesizing verdict from the collected signals
|
|
438
|
+
* - 'fallback' → server-side liveness fallback (no camera / denied)
|
|
439
|
+
*/
|
|
440
|
+
source: 'analyzing' | 'local' | 'fallback';
|
|
441
|
+
};
|
|
442
|
+
/** Verdict is in. Integrators read `verdict` to obtain `{ human, confidence, evidenceId, signals }`. */
|
|
443
|
+
type PersonhoodFinishedState = {
|
|
444
|
+
status: 'finished';
|
|
445
|
+
verdict: PersonhoodVerdict;
|
|
446
|
+
};
|
|
447
|
+
type PersonhoodClosedState = {
|
|
448
|
+
status: 'closed';
|
|
449
|
+
};
|
|
450
|
+
type PersonhoodErrorState = {
|
|
451
|
+
status: 'error';
|
|
452
|
+
error: {
|
|
453
|
+
code: PersonhoodErrorCode;
|
|
454
|
+
message?: string;
|
|
455
|
+
};
|
|
456
|
+
};
|
|
457
|
+
type PersonhoodState = PersonhoodIdleState | PersonhoodLoadingState | PersonhoodTutorialState | PersonhoodPermissionsState | PersonhoodCaptureState | PersonhoodProcessingState | PersonhoodFinishedState | PersonhoodClosedState | PersonhoodErrorState;
|
|
458
|
+
/**
|
|
459
|
+
* Manager built from an externally-owned actor (extensibility path).
|
|
460
|
+
*/
|
|
461
|
+
declare function createPersonhoodManagerFromActor(actor: PersonhoodActor): Manager<PersonhoodState> & {
|
|
462
|
+
/** Starts the flow (goes to tutorial or capture depending on config). */
|
|
463
|
+
load(): void;
|
|
464
|
+
/** Advances from tutorial → capture. */
|
|
465
|
+
nextStep(): void;
|
|
466
|
+
/** Triggers `getUserMedia` when in `permissions.idle`. */
|
|
467
|
+
requestPermission(): void;
|
|
468
|
+
/** Shows the permission rationale view. */
|
|
469
|
+
goToLearnMore(): void;
|
|
470
|
+
/** Returns from learn-more → permission prompt. */
|
|
471
|
+
back(): void;
|
|
472
|
+
/** Dismisses the widget into the terminal `closed` state. */
|
|
473
|
+
close(): void;
|
|
474
|
+
/** Resets from the (non-final) `error` state back to `idle`. */
|
|
475
|
+
reset(): void;
|
|
476
|
+
/**
|
|
477
|
+
* Skip the on-device path and hit the server fallback. Wired to the
|
|
478
|
+
* "Continue without camera" button on the permission-denied screen; also
|
|
479
|
+
* dispatched automatically when the device has no camera at all.
|
|
480
|
+
*/
|
|
481
|
+
useFallback(): void;
|
|
482
|
+
};
|
|
483
|
+
/**
|
|
484
|
+
* Creates a Personhood manager for the drop-in widget.
|
|
485
|
+
*
|
|
486
|
+
* The manager exposes:
|
|
487
|
+
* - `state: PersonhoodState` via `getState()` / `subscribe()`
|
|
488
|
+
* - Lifecycle controls: `load`, `nextStep`, `requestPermission`,
|
|
489
|
+
* `goToLearnMore`, `back`, `close`, `reset`, `useFallback`, `stop`
|
|
490
|
+
*
|
|
491
|
+
* Head-pose is intentionally **not** exposed as a stream. The SDK
|
|
492
|
+
* extracts pose internally for the server-side `headMotion` spoof
|
|
493
|
+
* check; UI consumers that need a frame-rate pose signal (avatar
|
|
494
|
+
* mirroring, etc.) should run their own face-tracking pipeline
|
|
495
|
+
* (e.g. MediaPipe FaceLandmarker) against `state.stream` instead.
|
|
496
|
+
*
|
|
497
|
+
* @example
|
|
498
|
+
* ```ts
|
|
499
|
+
* const manager = createPersonhoodManager({
|
|
500
|
+
* config: { siteKey: 'demo', mockVerify: true },
|
|
501
|
+
* });
|
|
502
|
+
* manager.subscribe((state) => {
|
|
503
|
+
* if (state.status === 'finished') {
|
|
504
|
+
* console.log('human?', state.verdict.human);
|
|
505
|
+
* }
|
|
506
|
+
* });
|
|
507
|
+
* manager.load();
|
|
508
|
+
* ```
|
|
509
|
+
*/
|
|
510
|
+
declare function createPersonhoodManager(options: CreatePersonhoodActorOptions): Manager<PersonhoodState> & {
|
|
511
|
+
/** Starts the flow (goes to tutorial or capture depending on config). */
|
|
512
|
+
load(): void;
|
|
513
|
+
/** Advances from tutorial → capture. */
|
|
514
|
+
nextStep(): void;
|
|
515
|
+
/** Triggers `getUserMedia` when in `permissions.idle`. */
|
|
516
|
+
requestPermission(): void;
|
|
517
|
+
/** Shows the permission rationale view. */
|
|
518
|
+
goToLearnMore(): void;
|
|
519
|
+
/** Returns from learn-more → permission prompt. */
|
|
520
|
+
back(): void;
|
|
521
|
+
/** Dismisses the widget into the terminal `closed` state. */
|
|
522
|
+
close(): void;
|
|
523
|
+
/** Resets from the (non-final) `error` state back to `idle`. */
|
|
524
|
+
reset(): void;
|
|
525
|
+
/**
|
|
526
|
+
* Skip the on-device path and hit the server fallback. Wired to the
|
|
527
|
+
* "Continue without camera" button on the permission-denied screen; also
|
|
528
|
+
* dispatched automatically when the device has no camera at all.
|
|
529
|
+
*/
|
|
530
|
+
useFallback(): void;
|
|
531
|
+
};
|
|
532
|
+
type PersonhoodManager = ReturnType<typeof createPersonhoodManager>;
|
|
533
|
+
//#endregion
|
|
534
|
+
export { type CreatePersonhoodActorOptions, type DeviceBehavioralSignals, type HeadPose, type LivenessOutcome, PERSONHOOD_ERROR_CODES, type PersonhoodActor, type PersonhoodCaptureState, type PersonhoodClosedState, type PersonhoodConfig, type PersonhoodDependencies, type PersonhoodErrorCode, type PersonhoodErrorState, type PersonhoodEvent, type PersonhoodFinishedState, type PersonhoodIdleState, type PersonhoodInput, type PersonhoodLoadingState, type PersonhoodMachine, type PersonhoodMachineContext, type PersonhoodManager, type PersonhoodPermissionsState, type PersonhoodProcessingState, type PersonhoodState, type PersonhoodTutorialState, type PersonhoodVerdict, type SpoofCheckResult, createPersonhoodActor, createPersonhoodManager, createPersonhoodManagerFromActor, personhoodMachine };
|